[exa-mcp-server]: align server.json with ai.exa/exa namespace + auto-publish workflow#318
[exa-mcp-server]: align server.json with ai.exa/exa namespace + auto-publish workflow#318devin-ai-integration[bot] wants to merge 1 commit into
Conversation
…rkflow - server.json: bump schema to 2025-12-11, name to ai.exa/exa, remote type from sse to streamable-http (matches what's already published) - package.json: mcpName to ai.exa/exa, version 3.2.1 -> 3.2.2 - add .github/workflows/publish-mcp-registry.yml: auto-publish to npm + MCP registry on release. requires NPM_TOKEN and MCP_REGISTRY_DNS_PRIVATE_KEY repo secrets
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
| { | ||
| "name": "exa-mcp-server", | ||
| "version": "3.2.1", | ||
| "version": "3.2.2", |
There was a problem hiding this comment.
🟡 Incomplete version bump: src/index.ts still reports version 3.2.1
The PR bumps the version from 3.2.1 to 3.2.2 in package.json and server.json, but src/index.ts:85 still hardcodes version: "3.2.1" in the McpServer constructor. This means the MCP server will report itself as version 3.2.1 to clients, which is inconsistent with the published package version 3.2.2. The new workflow's consistency check (publish-mcp-registry.yml:29-30) only validates package.json vs server.json, so it won't catch this drift either.
Prompt for agents
The version was bumped to 3.2.2 in package.json and server.json, but src/index.ts:85 still has version: "3.2.1" hardcoded in the McpServer constructor. Update that line to "3.2.2". Also consider reading the version from package.json at runtime (or using a build step) to avoid this class of bug in the future. Similarly, gemini-extension.json:3 also has the old version "3.2.1" and should be updated.
Was this helpful? React with 👍 or 👎 to provide feedback.
| version: | ||
| description: "Version to publish (must match package.json + server.json). Leave blank to use the version already in those files." | ||
| required: false | ||
| type: string |
There was a problem hiding this comment.
🟡 workflow_dispatch version input is accepted but never used
The version input defined at .github/workflows/publish-mcp-registry.yml:8-11 is never referenced by any step in the workflow. Its description says "Version to publish (must match package.json + server.json)" suggesting it should be validated or applied, but no step reads ${{ inputs.version }}. If a user provides a version via manual dispatch, it is silently ignored, which is misleading.
Prompt for agents
The workflow_dispatch input 'version' at .github/workflows/publish-mcp-registry.yml:8-11 is defined but never used by any step. Either remove the input entirely, or add validation in the 'Verify version consistency' step (around line 28) to check that inputs.version (when provided) matches the version in the JSON files. For example, add something like: if [ -n "${{ inputs.version }}" ] && [ "${{ inputs.version }}" != "$PKG_VERSION" ]; then echo '::error::Provided version does not match package.json'; exit 1; fi
Was this helpful? React with 👍 or 👎 to provide feedback.
Summary
Fixes the registry namespace mismatch (server.json said
io.github.exa-labs/exa-mcp-server, but all 6 published versions on the MCP registry are underai.exa/exavia DNS auth onexa.ai) and adds an auto-publish workflow.server.json$schema:2025-07-09→2025-12-11name:io.github.exa-labs/exa-mcp-server→ai.exa/exaremote.type:sse→streamable-http(matches what's already published;mcp.exa.ai/mcpis streamable-http)version:3.2.1→3.2.2(3.2.1 is already on npm)package.jsonmcpName:io.github.exa-labs/exa-mcp-server→ai.exa/exa(registry validates this against server.jsonnameat publish time)version:3.2.1→3.2.2.github/workflows/publish-mcp-registry.yml(new)Auto-publishes to npm + MCP registry on every GitHub Release. Requires two repo secrets:
NPM_TOKEN— npm publish token forexa-mcp-serverMCP_REGISTRY_DNS_PRIVATE_KEY— hex ed25519 private key matching thev=MCPv1; ...TXT record onexa.aiWhy this is needed
Current state on registry: latest is
ai.exa/exa@3.1.3(Dec 2025). npm latest isexa-mcp-server@3.2.1. Without these fixes,mcp-publisher publishfails because the namespace in server.json doesn't match the DNS-auth namespace, and would create a duplicate entry under the GitHub auth namespace.Manual steps that still need to happen (outside this PR)
exa.aito a fresh ed25519 keypair (the original private key was lost).NPM_TOKENandMCP_REGISTRY_DNS_PRIVATE_KEYto repo secrets.v3.2.2to trigger the workflow (or useworkflow_dispatch).Review & Testing Checklist for Human
ai.exa/exais the namespace we want long-term (vs. switching toio.github.exa-labs/exa-mcp-servervia GitHub auth — would require re-publishing all 6 versions under the new name)streamable-httpis actually the remote type served atmcp.exa.ai/mcp(it's what every published version on the registry uses)workflow_dispatchbefore cutting a releasecurl -s "https://registry.modelcontextprotocol.io/v0/servers?search=ai.exa/exa&version=latest" | jqshows3.2.2withisLatest: trueNotes
The smithery postinstall hook (
smithery: not found) prints a warning duringnpm installlocally but doesn't block the lockfile update or publish. The hook resolves correctly in CI where smithery is available.Link to Devin session: https://app.devin.ai/sessions/e62162290c89447d84908809d82f8b11