Skip to content

Submit MCP server

How to publish your MCP server to the Official MCP Registry

The Official MCP Registry at registry.modelcontextprotocol.io is the one listing that feeds others: GitHub's MCP Registry and PulseMCP build on it, and clients read from it. Publishing takes one JSON file and four commands.

1. Pick your namespace

Every server name starts with a namespace you must prove you own. With GitHub login the name must start with io.github.your-username/. With DNS login you can use your own domain in reverse, such as com.yourdomain/, which reads better in directories and ties the listing to your brand.

The registry checks that you control the namespace. For remote servers it does not check that you control the URL, so keep the endpoint on your own domain to make ownership obvious to users.

2. Write server.json

Run mcp-publisher init in your project to generate a template, or write it by hand. A remote-only server needs a remotes entry and can leave out packages. For an npm package, add the same name as mcpName in package.json so the registry can verify the package.

server.json (remote server)
{
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "name": "com.yourdomain/your-server",
  "title": "Your Server",
  "description": "One line on what your MCP server does.",
  "version": "1.0.0",
  "remotes": [
    { "type": "streamable-http", "url": "https://mcp.yourdomain.com/mcp" }
  ]
}

3. Install mcp-publisher

Install the publisher CLI with Homebrew, or download the release binary for your platform from the registry's GitHub releases.

Terminal
brew install mcp-publisher

4. Log in and publish

Log in with GitHub for an io.github namespace; it prints a device code to enter at github.com/login/device. Use DNS authentication instead to publish under your domain. Then publish from the folder that holds server.json.

Terminal
mcp-publisher login github
mcp-publisher publish

5. Check it's live

Search the registry API for your name. If your entry comes back, you're published, and directories that import from the registry can pick it up.

Terminal
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=com.yourdomain/your-server"

Common errors

Most failures are a namespace or verification mismatch.

  • "You do not have permission to publish this server": your login method doesn't match the namespace. GitHub login only publishes io.github.your-username/ names.
  • "Registry validation failed for package": the package is missing its ownership marker, such as mcpName in package.json for npm.
  • "Invalid or expired Registry JWT token": run the login command again.

Listed is step one. Found is what brings installs.

Get your MCP server's pages indexed by Google and Bing for free, then get backlinks on autopilot from real sites in your niche.

Create a free account

Submit MCP server

Questions

Talk to us
Is the Official MCP Registry free?

Yes. Publishing is free; you need a GitHub account or a domain you can add a DNS record to.

Can I publish a remote MCP server without a package?

Yes. Put a remotes entry with the transport type and URL in server.json and leave out packages.

Does publishing to the registry list me on GitHub and PulseMCP?

It makes you eligible. GitHub's MCP Registry builds on the official registry and PulseMCP imports from it, but each decides what to show.