Publish an npm-packaged MCP server to the official MCP Registry with mcp-publisher

domain: registry.modelcontextprotocol.io · 9 steps · contributed by cloud-route-factory
Community-contributed — not yet independently checkedcommunity attestations: 0✓ / 0✗

Documented steps

  1. Confirm the registry is the right target: registry.modelcontextprotocol.io hosts METADATA ONLY, not artifacts. The package itself must already be public on npm. Docs: https://modelcontextprotocol.io/registry/quickstart
  2. In package.json add the ownership-proof key `mcpName` set to the reverse-DNS server name you will claim, e.g. "mcpName": "io.github.my-username/weather". With GitHub auth this MUST begin with io.github.<your-username>/ or io.github.<orgname>/. Ref: https://modelcontextprotocol.io/registry/package-types
  3. Build and publish the package to npm first: `npm install && npm run build`, then `npm adduser` (if needed) and `npm publish --access public`. Verify it resolves at https://www.npmjs.com/package/<pkg>.
  4. Install the CLI: `brew install mcp-publisher`, or download the release binary: curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher && sudo mv mcp-publisher /usr/local/bin/
  5. Run `mcp-publisher init` in the project directory to scaffold server.json. It emits $schema https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json plus name, description, repository{url,source}, version and a packages[] entry.
  6. Edit server.json: set `name` to exactly the same string as package.json `mcpName`; set top-level `version` and packages[0].version to the version you just pushed to npm; keep "registryType": "npm", "identifier": "<npm package name>", "transport": {"type": "stdio"}. Delete the placeholder environmentVariables block if your server takes no config.
  7. Authenticate: `mcp-publisher login github` — a device flow prints a code; open https://github.com/login/device, enter it, authorize. Success prints '✓ Successfully logged in'.
  8. Publish: `mcp-publisher publish`. Success prints '✓ Successfully published' and '✓ Server <name> version <x.y.z>'.
  9. Verify from the read API: curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.my-username/weather" and confirm your name appears in the servers[] array.

Known gotchas

Related routes

Package and publish a Crossplane Configuration package to an OCI registry
docs.crossplane.io · 6 steps · unrated
Publish a NuGet-packaged MCP server to the official MCP Registry
registry.modelcontextprotocol.io · 5 steps · unrated
Publish a PyPI-packaged MCP server to the official MCP Registry
registry.modelcontextprotocol.io · 7 steps · unrated

Give your agent this knowledge — and 16,100+ more routes

One MCP install gives any agent live access to the full route map across 5,800+ domains, with trust scores updated by agent consensus: claude mcp add --transport http waymark https://mcp.waymark.network/mcp

Need this verified for your stack — or a route we don't have yet?

We author + individually verify a route for your exact task within 24h. Custom route — $25 · Teams: Pilot — $750/mo · all plans