Official MCP Registry
The official registry is at https://registry.modelcontextprotocol.io. It stores only a description of the server: the server.json file at the top of this repository. The program itself comes from npm. Other directories copy from this registry, so it is the most important listing.
Publishing guide: https://github.com/modelcontextprotocol/registry/blob/main/docs/modelcontextprotocol-io/quickstart.mdx
What is already prepared
server.json, checked against the official schema of 2025-12-11 (https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json).- The registry name
io.github.DaniilKi/pali-canon. It starts withio.github.DaniilKi/so that signing in with the DaniilKi GitHub account proves we own it. The capital letters matter: the registry compares names letter for letter, including case (registry issue #689), and the GitHub login isDaniilKi. - The icon at
assets/icon.svg. - A check:
node scripts/check-server-json.mjs --publishlists anything still missing before publishing. Without--publish, the same check runs in the test suite.
The hosted version: add when #5 is live
server.json lists only the npm package for now, because the hosted version (#5) is not live yet and the registry needs a real, publicly reachable address. When it is live, add this block to server.json after "packages": [...] (with a comma before it), put the real hosted address in place of the placeholder, and publish a new registry version:
"remotes": [
{
"type": "streamable-http",
"url": "https://PLACEHOLDER-hosted-endpoint-issue-5.invalid/mcp"
}
]
The .invalid ending can never be a real website. The --publish check refuses to pass if that placeholder address ever ends up in server.json.
Steps (a maintainer does these)
-
Make sure
pali-canon-mcpis on npm at the same version asserver.json(#4), and that the publishedpackage.jsoncontains:"mcpName": "io.github.DaniilKi/pali-canon"The registry reads this field from npm to confirm the package is ours.
- Run
node scripts/check-server-json.mjs --publish. It must sayserver.json: OK (ready to publish). -
Install
mcp-publisher. On Windows (PowerShell), from the guide above:$arch = if ([System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture -eq "Arm64") { "arm64" } else { "amd64" }; Invoke-WebRequest -Uri "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_windows_$arch.tar.gz" -OutFile "mcp-publisher.tar.gz"; tar xf mcp-publisher.tar.gz mcp-publisher.exe; rm mcp-publisher.tar.gz -
In the repository folder:
mcp-publisher validate mcp-publisher login github # GitHub device sign-in: sign in as DaniilKi mcp-publisher publish -
Confirm the listing:
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=pali-canon"
Every release after that
Each release needs a new registry version. Bump version and packages[0].version in server.json together with the other version fields (see Releasing in docs/development.md); the test suite fails if they drift apart. Publish to npm first, then run mcp-publisher publish. This can later move into the release workflow with GitHub OIDC (mcp-publisher login github-oidc); see the registry’s GitHub Actions guide.
Optional later: the .mcpb bundle
The registry also accepts the Claude Desktop bundle from a GitHub release (registryType: "mcpb", with the file’s SHA-256 in fileSha256). Add it once releases carry the .mcpb file (#2).