How to submit an MCP server to Docker MCP Catalog

By Jonah EasePublished Last checked
Docker's catalog is a Git repository. Your submission is a folder under servers/, opened as a pull request, and a member of the Docker team has to review every one[1]. What makes it a different job from a plain list entry is that the CI builds your server and tries to list its tools, so the pull request fails if your server cannot start without secrets[3].
Local or remote decides the folder
| Kind | Needs | Files in servers/your-name/ |
|---|---|---|
| Local, containerized | A Dockerfile in your public repository | server.yaml |
| Remote, hosted | A public endpoint on streamable-http or sse, and a documentation URL | server.yaml, tools.json (an empty array), readme.md in lower case |
Read from CONTRIBUTING.md on [1]
name: cloudflare-docs
type: remote
meta:
category: documentation
tags:
- documentation
- cloudflare
- remote
about:
title: Cloudflare Docs
description: Access the latest documentation on Cloudflare products
icon: https://www.cloudflare.com/favicon.ico
remote:
transport_type: sse
url: https://docs.mcp.cloudflare.com/sseDocker builds the image, or you do
By default Docker builds your image from the Dockerfile and publishes it in its mcp namespace on Docker Hub, with signatures, provenance and SBOMs. If you pass your own image, it is used as it is; it keeps container isolation but not those extras[1][2]. Check the licence before you start: MIT or Apache 2 are fine, GPL is not.
The pull request, in order
- Fork the repository and clone it. You need Go 1.24 or newer, Docker Desktop and Task.
- Generate the entry with
task wizardortask create, runtask build, then import the result into Docker Desktop's MCP Toolkit to try it. - Open the pull request with a title and description that say what it adds, and make CI pass.
- If your server needs credentials, send test ones through the form CONTRIBUTING.md links.
task create -- --category database https://github.com/myorg/my-orgdb-mcp -e API_TOKEN=test
task build -- --tools my-orgdb-mcp
task catalog -- my-orgdb-mcp
docker mcp catalog import $PWD/catalogs/my-orgdb-mcp/catalog.yamlAfter approval the entry is processed and appears in the catalog within 24 hours[1].
Why the build step stalls
The build starts your server and asks it for its tools. A server that needs a key or a third-party connection to answer will time out, and CONTRIBUTING.md calls this one of the most common reasons a pull request is blocked[1]. A reviewer posted this on a real submission[4]:
2025/08/26 15:36:16 initializing mcp/meilisearch: context deadline exceeded
exit status 1
task: Failed to run task "build": exit status 1The fix the maintainers added is a tools.json next to server.yaml that lists the tools by hand, so the build reads the file and does not run the server[1][4]. A second thread shows the other wait: an author asked after three weeks for a review, and the answer was to address the comments already on the pull request[5]. A third: a remote entry whose documentation file was named README.md was not picked up by the catalog generator until a pull request renamed it to readme.md[6].
By hand
- Everything above is the by-hand route. The repository also has a prompt file,
add_mcp_server.md, that you can pipe into Claude Code to write the entry[1]. - To change or remove an entry later, you open an issue, not a pull request[2].
- No Dockerfile? A hosted server takes the remote folder and goes through the same pull request.
Current status,
On , 1,454 pull requests and 77 issues were open. GitHub's search lists one merged pull request between 1 Sept and 1 Oct 2026, and it was a pin update, not a new server[7][8].
How long merges took
3 outside pull requests merged in the 90 days to : too few for a median. The merged pull requests are on GitHub.
| Window ending | Rolling median | Merges in window |
|---|---|---|
| 10 Oct 2025 | 1.3 days | 39 |
| 17 Oct 2025 | 1.6 days | 25 |
| 24 Oct 2025 | 1.4 days | 11 |
| 31 Oct 2025 | under 1 h | 22 |
| 7 Nov 2025 | under 1 h | 34 |
| 14 Nov 2025 | 2 h | 37 |
| 21 Nov 2025 | 2 h | 37 |
| 28 Nov 2025 | 5 h | 30 |
| 5 Dec 2025 | 16 days | 12 |
| 12 Dec 2025 | 11 days | 6 |
| 19 Dec 2025 | 1.7 days | 6 |
| 26 Dec 2025 | 1 day | 5 |
| 2 Jan 2026 | 1.3 days | 4 |
| 9 Jan 2026 | 14 h | 6 |
| 16 Jan 2026 | 21 h | 3 |
| 23 Jan 2026 | 11 days | 4 |
| 30 Jan 2026 | 4.6 days | 6 |
| 6 Feb 2026 | 8.0 days | 3 |
| 13 Feb 2026 | 8.0 days | 3 |
| 20 Feb 2026 | 13 days | 6 |
| 27 Feb 2026 | 23 days | 4 |
| 6 Mar 2026 | 23 days | 4 |
| 13 Mar 2026 | 23 days | 4 |
| 10 Apr 2026 | 26 days | 4 |
| 17 Apr 2026 | 14 days | 5 |
| 24 Apr 2026 | 14 days | 5 |
| 1 May 2026 | 27 days | 6 |
| 8 May 2026 | 14 days | 3 |
| 10 July 2026 | 7.0 days | 4 |
| 17 July 2026 | 13 days | 3 |
| 31 July 2026 | 7.2 days | 3 |
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
- docker/mcp-registry: CONTRIBUTING.md · checked
- docker/mcp-registry: README · checked
- docker/mcp-registry: CI workflow (Code and Server Validation) · checked
- docker/mcp-registry issue 179: a submission blocked on the tools build · checked
- docker/mcp-registry issue 178: a submission waiting for review · checked
- docker/mcp-registry pull request 4743: rename README.md to readme.md · checked
- docker/mcp-registry: open pull requests · checked
- docker/mcp-registry: pull requests merged 1 Sept to 1 Oct 2026 · 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 docker/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.