# How to submit an MCP server to ToolSDK MCP Registry

By [Jonah Ease](https://manycp.com/about) Published 1 Oct 2026 Last checked 1 Oct 2026

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 uses | In the registry |
| --- | --- |
| OAuth 2.1 | An `auth` object of type `oauth2`, with optional `scopes`. |
| An API key or a bearer token in a header | Not 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 tools | List 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, 1 Oct 2026

On 2 Oct 2026 the registry had [80 open pull requests](https://github.com/toolsdk-ai/toolsdk-mcp-registry/pulls?q=is%3Apr+is%3Aopen) [4], and its last push was dated 15 Sept 2026 [3].

## How long merges took

In the 90 days to 2 Oct 2026, 110 outside pull requests merged here; the typical one was merged [14 days](https://github.com/toolsdk-ai/toolsdk-mcp-registry/pulls?q=is%3Apr+is%3Amerged) after it was opened. The middle half took 6.4 days to 23 days.

ToolSDK MCP Registry Rolling 30-day median time to merge

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 ending | Rolling median | Merges in window |
| --- | --- | --- |
| 27 Feb 2026 | 4.4 days | 3 |
| 6 Mar 2026 | 1.8 days | 12 |
| 13 Mar 2026 | 1.1 days | 22 |
| 20 Mar 2026 | 19 h | 28 |
| 27 Mar 2026 | 16 h | 29 |
| 3 Apr 2026 | 16 h | 26 |
| 10 Apr 2026 | 12 h | 24 |
| 17 Apr 2026 | 12 h | 23 |
| 24 Apr 2026 | 13 h | 19 |
| 1 May 2026 | 16 h | 24 |
| 8 May 2026 | 23 h | 13 |
| 15 May 2026 | 2.1 days | 10 |
| 22 May 2026 | 2.4 days | 16 |
| 29 May 2026 | 7.0 days | 8 |
| 5 June 2026 | 6.4 days | 17 |
| 12 June 2026 | 6.2 days | 16 |
| 19 June 2026 | 6.5 days | 20 |
| 26 June 2026 | 6.5 days | 20 |
| 3 July 2026 | 6.4 days | 21 |
| 10 July 2026 | 6.3 days | 12 |
| 31 July 2026 | 17 days | 49 |
| 7 Aug 2026 | 18 days | 48 |
| 14 Aug 2026 | 17 days | 49 |
| 21 Aug 2026 | 17 days | 49 |
| 28 Aug 2026 | 13 days | 36 |
| 4 Sept 2026 | 13 days | 36 |
| 11 Sept 2026 | 14 days | 35 |
| 18 Sept 2026 | 12 days | 61 |
| 25 Sept 2026 | 12 days | 61 |
| 2 Oct 2026 | 9.7 days | 26 |

Measured 2 Oct 2026. 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](https://manycp.com/guides/mcp-server-merge-times).

## Sources

1. [ToolSDK MCP Registry: docs/CONTRIBUTING.md](https://github.com/toolsdk-ai/toolsdk-mcp-registry/blob/main/docs/CONTRIBUTING.md) · checked 1 Oct 2026
2. [ToolSDK MCP Registry: docs/PR_REVIEW.md](https://github.com/toolsdk-ai/toolsdk-mcp-registry/blob/main/docs/PR_REVIEW.md) · checked 1 Oct 2026
3. [ToolSDK MCP Registry: the repository](https://github.com/toolsdk-ai/toolsdk-mcp-registry) · checked 1 Oct 2026
4. [ToolSDK MCP Registry: open pull requests](https://github.com/toolsdk-ai/toolsdk-mcp-registry/pulls?q=is%3Apr+is%3Aopen) · checked 1 Oct 2026

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.

---

Source: [ManyCP](https://manycp.com/directories/toolsdk-registry)
