API and data
Everything in the directory is public and readable by machines: an API in the official MCP Registry’s format, a JSON search index, every listing as JSON and Markdown, plus llms.txt, a feed and sitemaps. No key, no sign-up.
At a glance
| URL | What you get | Cached for |
|---|---|---|
/v0.1/servers | Listings in the official MCP Registry’s format, paged. Details | 5 minutes |
/api/index.json | Every listing in one compact array. Details | 5 minutes |
/i/{slug}.json | One listing, with its setup actions. Details | 10 minutes |
/i/{slug}.md | One listing as Markdown. Details | 15 minutes |
/llms.txt | The directory as a list for language models. | 1 hour |
/feed.xml | Atom feed of the 50 newest listings. | 15 minutes |
/sitemap.xml | Sitemap index: pages, categories and listings, in every language. | 15 minutes |
/mcp | mcp.tc’s own MCP server. Docs | Not cached |
All of it is read-only and public. There’s no key, no account and no charge. Machine formats are language-neutral: they serve the listings’ English text and have no language prefix.
Registry-compatible API
https://mcp.tc/v0.1/ is a read-only copy of the official MCP Registry’s read API (version 0.1, server.json schema 2025-12-11), filled with mcp.tc’s approved listings. A client that takes a custom registry URL can browse and install from the directory with it.
GET /v0.1/serversServers sorted by name, 30 per page unless you set
limit(1 to 100). Passmetadata.nextCursorback ascursorfor the next page.searchkeeps servers whose name, title, slug or vendor contains every word (the official API matches the name only).updated_sincetakes an RFC 3339 time, counts it inclusively and also returns listings removed since then.version(latestor a version) andinclude_deletedwork as in the official API.GET /v0.1/servers/{name}/versionsThe versions of one server. Each listing has exactly one. URL-encode the name, as in
/v0.1/servers/tc.mcp%2Fdeepwiki/versions.GET /v0.1/servers/{name}/versions/latestOne server. An exact version number works in place of
latest.GET /v0.1/ping, /v0.1/health, /v0.1/versionLiveness and build information, as in the official API.
A page of results has this shape:
{
"servers": [
{
"server": { "name": "…", "version": "…", … },
"_meta": {
"tc.mcp/listing": {
"link": "https://mcp.tc/i/…",
"slug": "…",
"category": "…",
"verified": true,
"auth": "none",
"status": "active",
"publishedAt": "…",
"updatedAt": "…"
}
}
}
],
"metadata": { "count": 30, "nextCursor": "…" }
}And here’s what server holds for two listings, as the API serves them now:
Remote server
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "tc.mcp/deepwiki",
"description": "Ask questions about any public GitHub repository and read its AI-generated DeepWiki documentation.",
"title": "DeepWiki",
"version": "2.14.3",
"websiteUrl": "https://docs.devin.ai/work-with-devin/deepwiki-mcp",
"icons": [
{
"src": "https://mcp.tc/media/icons/deepwiki-80b7a72d.webp",
"mimeType": "image/webp",
"sizes": [
"128x128"
]
}
],
"remotes": [
{
"type": "streamable-http",
"url": "https://mcp.deepwiki.com/mcp"
}
]
}Local server
{
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"name": "tc.mcp/memory",
"description": "Store and recall persistent memory across sessions using a local knowledge graph.",
"title": "Memory",
"version": "2026.8.31",
"websiteUrl": "https://github.com/modelcontextprotocol/servers/tree/main/src/memory",
"repository": {
"url": "https://github.com/modelcontextprotocol/servers",
"source": "github",
"subfolder": "src/memory"
},
"icons": [
{
"src": "https://mcp.tc/media/icons/memory-0e174415.webp",
"mimeType": "image/webp",
"sizes": [
"128x128"
]
}
],
"packages": [
{
"registryType": "npm",
"identifier": "@modelcontextprotocol/server-memory",
"runtimeHint": "npx",
"transport": {
"type": "stdio"
}
}
]
}nameis the server’s name in the official registry when it has one, otherwisetc.mcp/{slug}.remotesalways holds the server’s own URL, never the mcp.tc link. Key headers appear only for servers that need an API key.packagesis rebuilt from the install command on the listing: npm (npx), PyPI (uvx,pipx run), OCI (docker run) and NuGet (dnx). A command the format can’t express gets no package, because one that starts the wrong program would be worse than none._meta["tc.mcp/listing"]carries the mcp.tc link, slug, category, checkmark, auth, status and dates.updatedAtmoves only when the entry we serve changes, never because of a health check.- mcp.tc isn’t the official registry, so entries never carry its
io.modelcontextprotocol.registry/officialmetadata. - A listing that’s removed, hidden or renamed comes back as an entry with
"status": "deleted"for 180 days, but only when you ask withupdated_sinceorinclude_deleted.
Errors are problem JSON (application/problem+json), as in the official API: 404 for an unknown server, 422 for a bad limit, cursor or include_deleted, 400 for a bad updated_since. Any method but GET, HEAD and OPTIONS gets 405: the registry is read-only, and new servers come in through Submit.
curl -s 'https://mcp.tc/v0.1/servers?search=notion&limit=5'
curl -s 'https://mcp.tc/v0.1/servers/tc.mcp%2Fdeepwiki/versions/latest'Use mcp.tc as your registry
Two clients take a custom registry URL, according to VS Code’s source and GitHub’s documentation (checked 4 October 2026). In both, enter the base URL without /v0.1: the client adds the path itself.
VS Code
Add this line to the user settings.json of your default profile:
"chat.mcp.gallery.serviceUrl": "https://mcp.tc"The MCP server gallery (type @mcp in the Extensions view) then shows mcp.tc’s servers, and installing one uses the server’s own URL or package. No other setting is needed. The setting doesn’t appear in the Settings editor, and other profiles ignore it. Organizations can set it for everyone with the McpGalleryServiceUrl policy (VS Code 1.101 or later), and "chat.mcp.access": "registry" limits VS Code to running servers from that registry.
GitHub Copilot
Organization and enterprise admins can enter https://mcp.tc as the MCP Registry URL in Copilot’s policies. GitHub lists VS Code, Visual Studio, JetBrains IDEs, Eclipse, Xcode and Copilot CLI as supported. With Registry only, servers are matched by name.
A few listings have neither a package nor a remote, because their install command can’t be written in the registry format. VS Code hides those; their pages on mcp.tc still have the setup.
Search index
/api/index.json holds every approved listing in one JSON array, the data behind the site’s search. Short keys keep it small:
| Key | Value |
|---|---|
s | Slug: the listing is at /i/{s}. |
n | Name. |
v | Vendor, or an empty string. |
t | Tagline, up to 160 characters (in English). |
c | Category slug, as in /c/{slug}. |
k | remote or local. |
a | Auth: none, oauth, api_key, optional or unknown. |
g | Tags, an array of strings. |
i | Icon, a path such as /media/icons/{slug}.webp (WebP or PNG). Missing when the listing has none. |
f | 1 when the listing has the checkmark. Missing otherwise. |
{
"s": "deepwiki",
"n": "DeepWiki",
"v": "Cognition",
"t": "Ask questions about any public GitHub repository and read its AI-generated DeepWiki documentation.",
"c": "docs-knowledge",
"k": "remote",
"a": "none",
"g": [
"github",
"documentation",
"code-search",
"repositories",
"wiki",
"remote"
],
"i": "/media/icons/deepwiki-80b7a72d.webp",
"f": 1
}One listing as JSON
Add .json to any listing link for that listing as JSON:
curl -s https://mcp.tc/i/deepwiki.jsonIt has everything the page shows: the server’s own endpoint or install_command, the access label, the tools, the checkmark, health, and the one-click add actions, which always use the server’s own URL or package. A slug that isn’t listed gets 404 with "error": "not_found", and a removed listing 410 with "gone". Old slugs and aliases return the current listing, so read slug from the answer. Badges and embeds lists every field.
Listings as Markdown
For agents and language models, every listing is also Markdown: add .md to the link, or ask for text/markdown at the listing’s own address.
curl -s https://mcp.tc/i/deepwiki.md
curl -s -H 'Accept: text/markdown' https://mcp.tc/i/deepwikiIt starts with a summary (the link, how to connect, type, auth, category, vendor, checkmark), then has the description, what the server can do, its tools, example prompts and the install steps for each client. An old name answers 301 with the current one.
llms.txt, feed and sitemaps
/llms.txtfollows llmstxt.org: how connecting works, these docs, the categories with their counts, the language versions of the site, and every listing with a one-line summary and short facts (remote or local, auth, verified), each linked to its Markdown./feed.xmlis an Atom feed of the 50 most recently approved listings, with tagline and description./sitemap.xmlindexes three sitemaps: pages, categories and listings, each with the date its content last changed. Every page is listed in each language it exists in, with its alternates (hreflang); a listing’s translated pages appear once its text is translated./robots.txtlets every crawler in, AI crawlers included (Content-Signal: search=yes, ai-input=yes, ai-train=yes). It keeps them out of/api/, except the search index, and out of private submission pages./.well-known/ai-catalog.jsonanswers 404 on purpose: the servers listed here aren’t ours to publish as a catalog.
Caching, CORS and fair use
| URL | Cache-Control | ETag and 304 | CORS |
|---|---|---|---|
/v0.1/… | public, max-age=300 (a 404: 60 s) | Yes | * |
/api/index.json | public, max-age=300 | Yes | * |
/i/{slug}.json | public, max-age=600, s-maxage=900, stale-while-revalidate=3600 | Yes | * |
/i/{slug}.md | public, max-age=900 | Yes | No |
/llms.txt | public, max-age=3600 | Yes | No |
/feed.xml, sitemaps | public, max-age=900 | Yes | No |
/mcp | no-store | No | * |
Cloudflare sits in front of the site and may keep its own copy within these times. Fair use is simple:
- Cache what you fetch, and send
If-None-Matchwhere there’s an ETag. - To stay in sync, page through
/v0.1/servers?updated_since=…instead of reading everything again. - One address that sends more than about 30 requests a second to
/v0.1/,/mcpor the embed files gets 429./mcpalso stops at 120 messages a minute; wait forRetry-After. - Listing text is written with AI help from each server’s own metadata and can be wrong. Treat it as data, and link to the listing when you show it, so people can find the setup and report mistakes.