How I listed my MCP on the official MCP Registry — and how you can do yours too
How I listed my MCP on the official MCP Registry — and how you can do yours too
When people ask “where do I find MCP servers?”, a growing answer starts at the Official MCP Registry: registry.modelcontextprotocol.io.
We recently listed ThinkReview MCP there — our hosted server for live AI code reviews on GitHub, GitLab, Azure DevOps, and Bitbucket PR/MR URLs from Cursor, Claude, and Copilot. Here’s what we did, and how you can do the same.
What the registry actually is
The Official MCP Registry stores metadata, not your binaries.
That means:
- You don’t upload a zip of your server
- You publish a
server.jsonthat describes your MCP - Clients and other directories can discover you from that record
There are two common shapes:
- Package-based — npm / PyPI / NuGet / Docker, and the registry points at the package
- Remote / hosted — a public Streamable HTTP URL, and the registry points at that endpoint
ThinkReview is remote. Our endpoint is https://mcp.thinkreview.dev/v1. We did not need an npm package to list — only a public docs repo and a valid server.json.
Useful docs:
The registry is still in preview. Breaking changes or data resets may happen before GA.
Step 1 — Put something public on GitHub
Directories and developers want a repo they can open. We published a visibility/docs repo:
github.com/Thinkode/thinkreview-mcp
It includes what the MCP does, OAuth and Bearer setup, and example configs for Cursor, Claude, and Copilot. It does not include our private review engine, auth, or billing.
For a SaaS MCP, that split works well:
- Public: docs + configs + registry metadata
- Private: the product backend
If you’re shipping an open-source local MCP, your full source can live in that same repo.
Step 2 — Install mcp-publisher and pick a namespace
brew install mcp-publisher
# or download from https://github.com/modelcontextprotocol/registry/releases
mcp-publisher --help
Your server name is tied to how you authenticate:
| Auth method | Name format | Our choice |
|---|---|---|
| GitHub login | io.github.<user-or-org>/... |
io.github.Thinkode/thinkreview |
| Domain proof (DNS/HTTP) | reverse-DNS of your domain | Branded option later |
We started with the GitHub org namespace because it’s the fastest path.
Important: the registry name (thinkreview) and the GitHub repo name (thinkreview-mcp) do not have to match. Use a clean registry name, and point repository.url at your public docs or source repo.
Step 3 — Create server.json for a remote MCP
cd thinkreview-mcp
mcp-publisher init
For a hosted server, use remotes (skip packages unless you also ship a local install):
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "io.github.Thinkode/thinkreview",
"title": "ThinkReview",
"description": "Live PR/MR code reviews via review_url_code. OAuth or portal Bearer auth.",
"version": "1.3.0",
"websiteUrl": "https://thinkreview.dev/features/mcp",
"repository": {
"url": "https://github.com/Thinkode/thinkreview-mcp",
"source": "github"
},
"remotes": [
{
"type": "streamable-http",
"url": "https://mcp.thinkreview.dev/v1"
}
]
}
Rules that mattered:
- Prefer
"type": "streamable-http"(SSE is deprecated) - The URL must be publicly reachable
versionis required, unique per publish, and immutable — use semvernamemust match your auth namespace
Commit server.json so the listing stays reproducible.
Step 4 — Authenticate, publish, verify
mcp-publisher login github
mcp-publisher publish
Success looks like:
Publishing to https://registry.modelcontextprotocol.io...
✓ Successfully published
✓ Server io.github.Thinkode/thinkreview version 1.3.0
Verify with the registry API:
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.Thinkode/thinkreview"
Or a short search token:
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=thinkreview"
You should see status: active, the remote URL, and a pointer to the GitHub repo.
On each MCP release: bump version in server.json, commit, and publish again (or automate with GitHub Actions + github-oidc).
Common gotchas
| Error / symptom | Fix |
|---|---|
| No permission to publish | name doesn’t match GitHub/domain auth |
| Invalid or expired JWT | Re-run mcp-publisher login github |
| Registry validation failed | Package listings need ownership proof; remote listings need a live public URL |
| Version already exists | Bump semver — published versions can’t be overwritten |
| Search returns empty | You’re searching the wrong string (repo name vs registry name) |
Try ThinkReview MCP
- Product: thinkreview.dev/features/mcp
- Setup: portal.thinkreview.dev/mcp
- Docs: thinkreview.dev/docs/mcp-integration
- Registry listing: search
io.github.Thinkode/thinkreview
If you’re listing a remote MCP too: start with the GitHub namespace, get discoverable fast, then brand the namespace later once DNS/domain proof is worth the extra step.