Skip to content

[exa-mcp-server]: align server.json with ai.exa/exa namespace + auto-publish workflow#318

Open
devin-ai-integration[bot] wants to merge 1 commit into
mainfrom
devin/1777396978-mcp-registry-publish
Open

[exa-mcp-server]: align server.json with ai.exa/exa namespace + auto-publish workflow#318
devin-ai-integration[bot] wants to merge 1 commit into
mainfrom
devin/1777396978-mcp-registry-publish

Conversation

@devin-ai-integration
Copy link
Copy Markdown
Contributor

@devin-ai-integration devin-ai-integration Bot commented Apr 28, 2026

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 under ai.exa/exa via DNS auth on exa.ai) and adds an auto-publish workflow.

server.json

  • $schema: 2025-07-092025-12-11
  • name: io.github.exa-labs/exa-mcp-serverai.exa/exa
  • remote.type: ssestreamable-http (matches what's already published; mcp.exa.ai/mcp is streamable-http)
  • version: 3.2.13.2.2 (3.2.1 is already on npm)

package.json

  • mcpName: io.github.exa-labs/exa-mcp-serverai.exa/exa (registry validates this against server.json name at publish time)
  • version: 3.2.13.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 for exa-mcp-server
  • MCP_REGISTRY_DNS_PRIVATE_KEY — hex ed25519 private key matching the v=MCPv1; ... TXT record on exa.ai

Why this is needed

Current state on registry: latest is ai.exa/exa@3.1.3 (Dec 2025). npm latest is exa-mcp-server@3.2.1. Without these fixes, mcp-publisher publish fails 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)

  1. Rotate the DNS TXT record on exa.ai to a fresh ed25519 keypair (the original private key was lost).
  2. Add NPM_TOKEN and MCP_REGISTRY_DNS_PRIVATE_KEY to repo secrets.
  3. Cut a GitHub Release for v3.2.2 to trigger the workflow (or use workflow_dispatch).

Review & Testing Checklist for Human

  • Confirm ai.exa/exa is the namespace we want long-term (vs. switching to io.github.exa-labs/exa-mcp-server via GitHub auth — would require re-publishing all 6 versions under the new name)
  • Verify streamable-http is actually the remote type served at mcp.exa.ai/mcp (it's what every published version on the registry uses)
  • Once secrets are configured, dry-run the workflow via workflow_dispatch before cutting a release
  • After publish, check curl -s "https://registry.modelcontextprotocol.io/v0/servers?search=ai.exa/exa&version=latest" | jq shows 3.2.2 with isLatest: true

Notes

The smithery postinstall hook (smithery: not found) prints a warning during npm install locally 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


Open in Devin Review

…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
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 28, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
exa-mcp-server Ready Ready Preview, Comment Apr 28, 2026 5:24pm

Request Review

@devin-ai-integration
Copy link
Copy Markdown
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

Copy link
Copy Markdown
Contributor Author

@devin-ai-integration devin-ai-integration Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 potential issues.

View 3 additional findings in Devin Review.

Open in Devin Review

Comment thread package.json
{
"name": "exa-mcp-server",
"version": "3.2.1",
"version": "3.2.2",
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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.
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +8 to +11
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
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants