API et données

Tout l’annuaire est public et lisible par des machines : une API au format du registre officiel MCP, un index de recherche JSON, chaque fiche en JSON et en Markdown, plus llms.txt, un flux et des plans de site. Sans clé ni inscription.

En un coup d’œil

URLCe que vous obtenezEn cache pendant
/v0.1/serversLes fiches au format du registre officiel MCP, paginées. Détails5 minutes
/api/index.jsonToutes les fiches dans un seul tableau compact. Détails5 minutes
/i/{slug}.jsonUne fiche, avec ses actions de configuration. Détails10 minutes
/i/{slug}.mdUne fiche en Markdown. Détails15 minutes
/llms.txtL’annuaire sous forme de liste pour les modèles de langage.1 heure
/feed.xmlFlux Atom des 50 fiches les plus récentes.15 minutes
/sitemap.xmlIndex des plans de site : pages, catégories et fiches, dans toutes les langues.15 minutes
/mcpLe serveur MCP de mcp.tc. DocumentationPas de cache

Tout est en lecture seule et public. Pas de clé, pas de compte, pas de frais. Les formats pour machines ne dépendent pas de la langue : ils servent le texte anglais des fiches et n’ont pas de préfixe de langue.

API compatible avec le registre

https://mcp.tc/v0.1/ est une copie en lecture seule de l’API de lecture du registre officiel MCP (version 0.1, schéma server.json 2025-12-11), remplie avec les fiches approuvées de mcp.tc. Un client qui accepte l’URL d’un registre personnalisé peut parcourir l’annuaire et installer depuis lui.

GET /v0.1/servers

Serveurs triés par nom, 30 par page sauf si vous définissez limit (de 1 à 100). Renvoyez metadata.nextCursor comme cursor pour la page suivante. search garde les serveurs dont le nom, le titre, le slug ou l’éditeur contient chaque mot (l’API officielle ne cherche que dans le nom). updated_since accepte une date RFC 3339, l’inclut et renvoie aussi les fiches retirées depuis. version (latest ou une version) et include_deleted fonctionnent comme dans l’API officielle.

GET /v0.1/servers/{name}/versions

Les versions d’un serveur. Chaque fiche en a exactement une. Encodez le nom dans l’URL, comme dans /v0.1/servers/tc.mcp%2Fdeepwiki/versions.

GET /v0.1/servers/{name}/versions/latest

Un serveur. Un numéro de version exact fonctionne à la place de latest.

GET /v0.1/ping, /v0.1/health, /v0.1/version

Disponibilité et informations de build, comme dans l’API officielle.

Une page de résultats a cette forme :

GET /v0.1/servers
{
  "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": "…" }
}

Et voici ce que contient server pour deux fiches, telles que l’API les sert actuellement :

Serveur distant

server (tc.mcp/deepwiki)
{
  "$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"
    }
  ]
}

Serveur local

server (tc.mcp/memory)
{
  "$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"
      }
    }
  ]
}
  • name est le nom du serveur dans le registre officiel quand il en a un, sinon tc.mcp/{slug}.
  • remotes contient toujours l’URL du serveur lui-même, jamais le lien mcp.tc. Les en-têtes de clé n’apparaissent que pour les serveurs qui demandent une clé API.
  • packages est reconstruit à partir de la commande d’installation de la fiche : npm (npx), PyPI (uvx, pipx run), OCI (docker run) et NuGet (dnx). Une commande que le format ne peut pas exprimer n’a pas de paquet, car un paquet qui lancerait le mauvais programme serait pire que rien.
  • _meta["tc.mcp/listing"] contient le lien mcp.tc, le slug, la catégorie, la coche, l’accès, l’état et les dates. updatedAt ne change que quand l’entrée servie change, jamais à cause d’une vérification d’état.
  • mcp.tc n’est pas le registre officiel, donc les entrées ne portent jamais ses métadonnées io.modelcontextprotocol.registry/official.
  • Une fiche retirée, masquée ou renommée revient comme une entrée avec "status": "deleted" pendant 180 jours, mais seulement si vous le demandez avec updated_since ou include_deleted.

Les erreurs sont au format problem JSON (application/problem+json), comme dans l’API officielle : 404 pour un serveur inconnu, 422 pour un limit, un cursor ou un include_deleted invalide, 400 pour un updated_since invalide. Toute méthode autre que GET, HEAD et OPTIONS reçoit 405 : le registre est en lecture seule, et les nouveaux serveurs arrivent par Proposer.

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'

Utiliser mcp.tc comme registre

Deux clients acceptent l’URL d’un registre personnalisé, d’après le code source de VS Code et la documentation de GitHub (vérifié le 4 octobre 2026). Dans les deux, saisissez l’URL de base sans /v0.1 : le client ajoute lui-même le chemin.

VS Code

Ajoutez cette ligne au settings.json utilisateur de votre profil par défaut :

settings.json
"chat.mcp.gallery.serviceUrl": "https://mcp.tc"

La galerie de serveurs MCP (tapez @mcp dans la vue Extensions) affiche alors les serveurs de mcp.tc, et en installer un utilise l’URL ou le paquet du serveur lui-même. Aucun autre réglage n’est nécessaire. Ce réglage n’apparaît pas dans l’éditeur de paramètres, et les autres profils l’ignorent. Les organisations peuvent le définir pour tout le monde avec la stratégie McpGalleryServiceUrl (VS Code 1.101 ou ultérieur), et "chat.mcp.access": "registry" limite VS Code aux serveurs de ce registre.

GitHub Copilot

Les administrateurs d’organisation et d’entreprise peuvent saisir https://mcp.tc comme MCP Registry URL dans les stratégies de Copilot. GitHub indique comme compatibles VS Code, Visual Studio, les IDE JetBrains, Eclipse, Xcode et Copilot CLI. Avec Registry only, les serveurs sont mis en correspondance par nom.

Quelques fiches n’ont ni paquet ni remote, parce que leur commande d’installation ne peut pas s’écrire au format du registre. VS Code les masque ; leurs pages sur mcp.tc ont quand même la configuration.

Index de recherche

/api/index.json contient toutes les fiches approuvées dans un seul tableau JSON, les données derrière la recherche du site. Des clés courtes le gardent léger :

CléValeur
sSlug : la fiche est à /i/{s}.
nNom.
vÉditeur, ou une chaîne vide.
tAccroche, jusqu’à 160 caractères (en anglais).
cSlug de catégorie, comme dans /c/{slug}.
kremote ou local.
aAccès : none, oauth, api_key, optional ou unknown.
gÉtiquettes, un tableau de chaînes.
iIcône, un chemin comme /media/icons/{slug}.webp (WebP ou PNG). Absent quand la fiche n’en a pas.
f1 quand la fiche a la coche. Absent sinon.
Une entrée
{
  "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
}

Une fiche en JSON

Ajoutez .json au lien de n’importe quelle fiche pour obtenir cette fiche en JSON :

curl -s https://mcp.tc/i/deepwiki.json

Elle contient tout ce que montre la page : l’endpoint du serveur ou sa install_command, le libellé access, les outils, la coche, l’état, et les actions en un clic add, qui utilisent toujours l’URL ou le paquet du serveur lui-même. Un slug non référencé reçoit 404 avec "error": "not_found", et une fiche retirée 410 avec "gone". Les anciens slugs et les alias renvoient la fiche actuelle, donc lisez slug dans la réponse. Badges et intégrations liste chaque champ.

Les fiches en Markdown

Pour les agents et les modèles de langage, chaque fiche existe aussi en Markdown : ajoutez .md au lien, ou demandez text/markdown à l’adresse de la fiche.

curl -s https://mcp.tc/i/deepwiki.md
curl -s -H 'Accept: text/markdown' https://mcp.tc/i/deepwiki

Elle commence par un résumé (le lien, comment se connecter, type, accès, catégorie, éditeur, coche), puis donne la description, ce que le serveur peut faire, ses outils, des exemples de prompts et les étapes d’installation pour chaque client. Un ancien nom répond 301 avec le nom actuel.

llms.txt, flux et plans de site

  • /llms.txt suit llmstxt.org : le fonctionnement de la connexion, cette documentation, les catégories avec leurs effectifs, les versions linguistiques du site, et chaque fiche avec un résumé d’une ligne et quelques faits (distant ou local, accès, vérifié), chacune liée à son Markdown.
  • /feed.xml est un flux Atom des 50 fiches approuvées le plus récemment, avec accroche et description.
  • /sitemap.xml indexe trois plans de site : pages, catégories et fiches, chacun avec la date de dernière modification du contenu. Chaque page y figure dans chaque langue où elle existe, avec ses alternatives (hreflang) ; les pages traduites d’une fiche apparaissent une fois son texte traduit.
  • /robots.txt laisse entrer tous les robots, y compris ceux des IA (Content-Signal: search=yes, ai-input=yes, ai-train=yes). Il les tient à l’écart de /api/, sauf l’index de recherche, et des pages privées de proposition.
  • /.well-known/ai-catalog.json répond 404 exprès : les serveurs référencés ici ne sont pas à nous pour les publier comme catalogue.

Cache, CORS et usage raisonnable

URLCache-ControlETag et 304CORS
/v0.1/…public, max-age=300 (un 404 : 60 s)Oui*
/api/index.jsonpublic, max-age=300Oui*
/i/{slug}.jsonpublic, max-age=600, s-maxage=900, stale-while-revalidate=3600Oui*
/i/{slug}.mdpublic, max-age=900OuiNon
/llms.txtpublic, max-age=3600OuiNon
/feed.xml, plans de sitepublic, max-age=900OuiNon
/mcpno-storeNon*

Cloudflare se trouve devant le site et peut garder sa propre copie dans ces délais. L’usage raisonnable est simple :

  • Mettez en cache ce que vous récupérez, et envoyez If-None-Match quand il y a un ETag.
  • Pour rester synchronisé, parcourez /v0.1/servers?updated_since=… au lieu de tout relire.
  • Une adresse qui envoie plus d’environ 30 requêtes par seconde à /v0.1/, /mcp ou aux fichiers d’intégration reçoit 429. /mcp s’arrête aussi à 120 messages par minute ; attendez Retry-After.
  • Le texte des fiches est rédigé avec l’aide de l’IA à partir des métadonnées de chaque serveur et peut être erroné. Traitez-le comme des données, et faites un lien vers la fiche quand vous l’affichez, pour qu’on y trouve la configuration et qu’on puisse signaler les erreurs.