Skip to content

feat(mcp): MCP Registry metadata — mcpName + server.json#101

Merged
jiashuoz merged 1 commit into
mainfrom
feat/mcp-registry-submission
May 22, 2026
Merged

feat(mcp): MCP Registry metadata — mcpName + server.json#101
jiashuoz merged 1 commit into
mainfrom
feat/mcp-registry-submission

Conversation

@jiashuoz
Copy link
Copy Markdown
Member

Summary

Prep for publishing @e2a/mcp-server to the official MCP Registry. Two artifacts:

  1. mcp/package.json — adds mcpName: "io.github.mnexa-ai/mcp-server". This is the verification handshake the Registry uses at publish time: it confirms the npm package belongs to the publisher claiming the registry name. The convention io.github.OWNER/NAME is required for GitHub-based auth (lowercased per the Registry's namespacing rules). Also bumps version 0.3.0 → 0.3.1 — two fixes merged since the 0.3.0 tag warrant a publish (single-agent prefetch feat(mcp): single-agent default at session init #98 + hosted-MCP example variants docs(examples): add hosted-MCP variant to ADK, LangChain, OpenAI Agents #99).

  2. mcp/server.json — the Registry's canonical server descriptor. Lists both transports in one entry:

    • packages[] → stdio via @e2a/mcp-server@0.3.1 with three env vars (E2A_API_KEY required+secret, optional E2A_AGENT_EMAIL, optional E2A_BASE_URL)
    • remotes[]streamable-http at https://mcp.e2a.dev/mcp with Authorization: Bearer {e2a_api_key} header (the registry exposes e2a_api_key as a user-configurable variable)

Validated against schema 2025-12-11 — passes structural checks, description fits the 100-char limit.

Publish flow (post-merge, manual step required)

This PR doesn't publish — it lands the metadata. To actually push to the Registry:

# 1. After merge, tag the release. publish-mcp.yml fires and ships
#    @e2a/mcp-server@0.3.1 to npm with the mcpName field baked in.
git tag mcp-v0.3.1 && git push origin mcp-v0.3.1

# 2. Install the Registry's publisher CLI.
brew install mcp-publisher

# 3. Auth interactively with GitHub OAuth.
mcp-publisher login github

# 4. Publish. Reads ./server.json, verifies that
#    @e2a/mcp-server@0.3.1 on npm has the matching mcpName field,
#    then writes the listing.
cd mcp && mcp-publisher publish

Why this matters

The Registry is the upstream that several downstream catalogs (mcp.directory, Glama, Smithery, mcpmarket) cross-reference. Listing here propagates the npm + hosted info to those catalogs on their next sync, often without separate submissions.

Test plan

  • mcp/server.json validates against schema 2025-12-11 (manual jsonschema check)
  • mcp/package.json still parses; version bump consistent with the npm pipeline
  • After merge + tag + publish: confirm Registry shows e2a at https://registry.modelcontextprotocol.io/v0/servers/io.github.mnexa-ai/mcp-server

🤖 Generated with Claude Code

Prep for publishing to the official MCP Registry (registry.modelcontextprotocol.io).

Two artifacts:

1. mcp/package.json: add `mcpName: "io.github.mnexa-ai/mcp-server"`.
   This is the verification handshake the Registry's publish step
   uses — it confirms the npm package belongs to the publisher
   claiming the registry name. The convention `io.github.OWNER/NAME`
   is required for GitHub-based auth at publish time. Lowercased
   per the Registry's namespacing rules (our GitHub org is
   "Mnexa-AI"; the registry name is "io.github.mnexa-ai/...").

   Also bumps version 0.3.0 → 0.3.1. Two fixes merged since the
   0.3.0 tag — single-agent prefetch (#98) and hosted-MCP example
   variants (#99) — warrant a publish.

2. mcp/server.json: the Registry's canonical server descriptor.
   Lists both transports in one entry:
     - packages[].npm: stdio via @e2a/mcp-server 0.3.1 with the
       three env vars (E2A_API_KEY required + secret, optional
       E2A_AGENT_EMAIL, optional E2A_BASE_URL).
     - remotes[]: streamable-http at https://mcp.e2a.dev/mcp with
       an `Authorization: Bearer {e2a_api_key}` header that
       resolves a registry variable.

   Validated against schema 2025-12-11 — fits maxLength=100 on
   description, all required fields present.

Publish flow (NOT in this PR — requires a maintainer to run):

  1. Merge this PR to main.
  2. Tag mcp-v0.3.1 and push. publish-mcp.yml fires and publishes
     @e2a/mcp-server 0.3.1 to npm with the mcpName field baked in.
  3. brew install mcp-publisher
  4. mcp-publisher login github   (interactive)
  5. cd mcp && mcp-publisher publish

Step 5 reads server.json from the cwd, verifies that the npm
package at @e2a/mcp-server@0.3.1 has the matching mcpName field,
then writes the listing to registry.modelcontextprotocol.io.

After the listing lands, other catalogs (mcp.directory, Glama,
smithery) that cross-reference the Registry will auto-pick us up
on their next sync.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@jiashuoz jiashuoz force-pushed the feat/mcp-registry-submission branch from fb161e8 to 421b1e7 Compare May 22, 2026 01:26
@jiashuoz jiashuoz merged commit 549de50 into main May 22, 2026
10 checks passed
@jiashuoz jiashuoz deleted the feat/mcp-registry-submission branch May 22, 2026 01:36
jiashuoz added a commit that referenced this pull request May 22, 2026
#103)

Registry rejected the 0.3.1 publish:

  status 403: You have permission to publish: io.github.jiashuoz/*,
  io.github.Mnexa-AI/*. Attempting to publish:
  io.github.mnexa-ai/mcp-server.

The Registry's publishing-guide example lowercases the org name
("io.github.my-username/...") but its actual permission check is
case-sensitive and preserves the canonical GitHub org slug. Since
our org is `Mnexa-AI` (mixed case), the published name must be
`io.github.Mnexa-AI/mcp-server`, not the lowercased form #101
landed.

Two-line fix in both files. Version bumps 0.3.1 → 0.3.2 because
0.3.1 is already locked on npm with the wrong mcpName — Registry's
verification step reads the live npm manifest and would still
reject if we re-tried at 0.3.1.

Post-merge ceremony stays the same:
  git tag mcp-v0.3.2 && git push origin mcp-v0.3.2
  # wait for publish-mcp.yml
  cd mcp && mcp-publisher publish

Validated against schema 2025-12-11 with the new name.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.

1 participant