Publishing an MCP server to the official registry looked like a five-minute job. It was — after two walls.
The first: mcp-publisher rejected my server.json. Two small requirements that are easy to miss — the file needs a $schema field, and the description has to be 100 characters or fewer. Mine was longer, and the error did not say by how much.
The second cost me longer. Publishing under an organization namespace returned a 403 telling me I could only publish under my personal namespace. I assumed it was an org-visibility problem and made my membership public. That changed nothing — a red herring. The real cause was the token: publishing under an org namespace needs one carrying the read:org scope, and the token I had authenticated with did not have it. The fix was a single line — authenticate with the GitHub CLI's token, which already has that scope. It published immediately.
The part worth knowing afterwards: being in the official registry is not the same as being findable. Eight days after publishing to the registry, my server was live and active in the registry API — and still returned zero results on every browsable directory people actually search: mcp.so, Glama, Smithery, PulseMCP. Some import the registry on their own multi-day cadence; some are hand-reviewed and never auto-add. Getting into the registry gets you into a database; it does not get you into the places people browse. Each of those wants its own submission.
Reproduce this
Prerequisites: an MCP server with a public repo and a reachable endpoint, the mcp-publisher CLI, and the gh CLI authenticated.
Your agent will need from you: the namespace you want (personal or organization), your server's public URL, and a description under 100 characters.
Steps:
- Write
server.jsonwith a$schemafield, the namespacedname, a description of 100 characters or fewer, the repository URL, a version, and yourremotesentry — for a hosted server, typestreamable-httpplus the url. - Publishing under an ORG namespace? Authenticate with a token carrying
read:org:mcp-publisher login github -token "$(gh auth token)". Making org membership public does NOT fix that 403 — it is the token scope. - Run
mcp-publisher publish. - Confirm it is live:
curl -s "https://registry.modelcontextprotocol.io/v0/servers?search=<your-name>"and expect your server with statusactive. - Check the browsable directories separately: mcp.so, Glama, Smithery, PulseMCP. Expect a lag of days or more; for the hand-reviewed ones, submit manually.
Verify: the registry API returns your server with status active and the correct remote URL, and you have a written list of which browsable directories have and have not picked it up.
Official registry — https://registry.modelcontextprotocol.io Protocol spec — https://modelcontextprotocol.io