How to submit an MCP server to ToolSDK MCP Registry

By Jonah EasePublished Last checked

You add one JSON file. A script checks it against a strict schema, a reviewer reads the diff, and the file is merged. The contributing guide is blunt that it is the source of truth, and that the README and the generated indexes are outputs you must not edit to add a server[1]. Most of the work is picking the right shape for the file.

Where the file goes

  • Directly inside packages/<category>/, with a lowercase kebab-case name such as example-mcp.json. Nested folders are not supported. When no category fits, packages/uncategorized is there[1].
  • One server per pull request is preferred. Several from the same publisher are allowed. Anything else in the diff, such as workflows, lockfiles or the README, is out of scope[1].
  • Link the official package or documentation in the description, because the reviewer checks your metadata against it[1].

A package people install

A Node package (example names)
{
  "type": "mcp-server",
  "name": "Example MCP Server",
  "packageName": "example-mcp-server",
  "description": "Provides example operations for MCP clients.",
  "url": "https://github.com/example/example-mcp-server",
  "runtime": "node",
  "license": "MIT",
  "env": {
    "EXAMPLE_API_KEY": { "description": "API key for the Example service.", "required": true, "secret": true }
  }
}

A local entry needs a public package or Docker image whose name and command can be verified. For Node, leave bin out and the gateway reads the package's own manifest. For Docker, put the image in packageName, set runtime to docker, and write the complete argument list in binArgs. The image and tag must exist[1]. runtime takes one of node, python, java, go or docker.

A server you host

A remote entry (example names)
{
  "type": "mcp-server",
  "name": "Example Remote MCP",
  "packageName": "@toolsdk-remote/example-mcp",
  "description": "Connects to the hosted Example MCP endpoint.",
  "runtime": "node",
  "env": {},
  "remotes": [{ "type": "streamable-http", "url": "https://example.com/mcp" }]
}
  • The packageName starts with @toolsdk-remote/, and a name with that prefix must have at least one remote[1].
  • The endpoint is HTTPS, Streamable HTTP, and cannot point at localhost or a private network. Do not set a custom key[1].
  • runtime: "remote" is not valid. Use the implementation's runtime, or node for a hosted-only server[1].
Your endpoint usesIn the registry
OAuth 2.1An auth object of type oauth2, with optional scopes.
An API key or a bearer token in a headerNot supported. Do not model it as OAuth, and do not add an environment variable expecting the transport to inject it.
Nothing for part of the toolsList it without auth, and say in the description what needs sign-in.

Run the registry's own validator

From a fork, before you push
git fetch origin main
node scripts/validate-registry.mjs --base origin/main

It uses only Node's built-ins, checks the files your branch changed, and compares identities with the current base. The guide warns against make build as a check, because that installs and runs registry packages[1].

What fails the check

  • An unknown field. The package JSON is strict, and unknown fields are rejected[1].
  • An identity that already exists. A new file cannot reuse a key, or a packageName when there is no key, that is on main. Deleting the old file in the same pull request does not help[1].
  • A secret with a default. A variable marked secret cannot define one[1].
  • Extra files in the diff. Mixing package JSON with documentation, source, workflow or generated files fails with OUT_OF_SCOPE_CHANGE and goes to manual review[2].

The review, and the route by hand

Review is deterministic JSON validation against main. The reviewer never installs or runs a submitted package or probes a remote service, so your metadata has to be right on its face[2][1]. By hand, that is one fork, one file, one validator run and one pull request that links your docs. Merges are squashed[2].

Current status,

On the registry had 80 open pull requests[4], and its last push was dated [3].

How long merges took

In the 90 days to , 110 outside pull requests merged here; the typical one was merged 14 days after it was opened. The middle half took 6.4 days to 23 days.

ToolSDK MCP RegistryRolling 30-day median time to merge
ToolSDK MCP Registry: rolling 30-day median time to mergetoolsdk-ai/toolsdk-mcp-registry, 2 Oct 2025 to 2 Oct 2026. The latest point, the 30 days to 2 Oct 2026, is a median of 9.7 days over 26 merges. Windows with fewer than 3 merges are left out. Days on a log scale.1 h1 day1 wk30 daysJan 2026Apr 2026July 2026Oct 20269.7 days
ToolSDK MCP Registry: rolling 30-day median time to merge, by the day the window ends. Windows with fewer than 3 merges are left out.
Window endingRolling medianMerges in window
27 Feb 20264.4 days3
6 Mar 20261.8 days12
13 Mar 20261.1 days22
20 Mar 202619 h28
27 Mar 202616 h29
3 Apr 202616 h26
10 Apr 202612 h24
17 Apr 202612 h23
24 Apr 202613 h19
1 May 202616 h24
8 May 202623 h13
15 May 20262.1 days10
22 May 20262.4 days16
29 May 20267.0 days8
5 June 20266.4 days17
12 June 20266.2 days16
19 June 20266.5 days20
26 June 20266.5 days20
3 July 20266.4 days21
10 July 20266.3 days12
31 July 202617 days49
7 Aug 202618 days48
14 Aug 202617 days49
21 Aug 202617 days49
28 Aug 202613 days36
4 Sept 202613 days36
11 Sept 202614 days35
18 Sept 202612 days61
25 Sept 202612 days61
2 Oct 20269.7 days26

Measured . Pull requests merged on each list's GitHub repo, timed from opened to merged, read from GitHub's REST pulls list. Bot accounts ([bot]), the repo's owners, members and collaborators, and pull requests from a branch inside the list's own repo are left out. A past figure, not a promise. All 10 directories side by side: how long MCP directories take to merge.

Sources

  1. ToolSDK MCP Registry: docs/CONTRIBUTING.md · checked
  2. ToolSDK MCP Registry: docs/PR_REVIEW.md · checked
  3. ToolSDK MCP Registry: the repository · checked
  4. ToolSDK MCP Registry: open pull requests · checked

ManyCP is not affiliated with, endorsed by or sponsored by any directory, Docker, OpenAI, Anthropic or GitHub named here. Names are used to say which service a fact is about.

Or skip all of that

Or let ManyCP do it in one click

ManyCP forks toolsdk-ai/toolsdk-mcp-registry, adds your entry in the exact format, and opens the pull request from your GitHub account. It tracks the PR until it is merged.

More directories