Reference implementation showcase: GitHub MCP Server card + AI/MCP catalog (live wire formats & routes)
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Documentación
- Claridad
- Necesita aclaración
- Estado de actividad
- Tranquilo
- Stack tecnológico
- go, python, typescript
- Área
- api, documentation
Línea de trabajo
Comienza revisando los tres endpoints de discovery descritos y comparando sus formatos wire reales, rutas, cabeceras, comportamiento de caché y del host con las expectativas de SEP-2127 y AI Catalog mencionadas. El issue no especifica archivos fuente ni pruebas, por lo que la finalización consiste en una comprobación de coherencia de WG o en un hallazgo de conformidad, no en un cambio de código definido.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Reference implementation showcase — GitHub MCP Server
A working reference implementation of SEP-2127 (Server Card) + AI Catalog discovery for the GitHub MCP Server is now wired end-to-end across three documents. This issue captures the live wire formats and routes so the WG can sanity-check the shape against the spec. Values below were captured from a running build with dev hostnames substituted for production (github.com, api.githubcopilot.com); icon data: URIs are elided for readability.
Discovery flow
flowchart LR
C[Client] -->|GET /.well-known/ai-catalog.json| A[github.com]
A -->|entry.url| SC[api.githubcopilot.com/mcp/server-card]
C -->|GET server-card| SC
SC -->|remotes0.url| M[api.githubcopilot.com/mcp/]
C -->|connect streamable-http| M
Routes
| Document | Route | Served by | Media type |
|---|---|---|---|
| AI Catalog | GET https://github.com/.well-known/ai-catalog.json |
github.com | application/ai-catalog+json |
| MCP Catalog (transitional) | GET https://github.com/.well-known/mcp/catalog.json |
github.com | application/json |
| Server Card | GET https://api.githubcopilot.com/mcp/server-card |
hosted GitHub MCP Server | application/mcp-server-card+json |
Per-environment hosts (same shapes, host varies):
| Env | Catalog host | Card host |
|---|---|---|
| github.com (dotcom) | github.com |
api.githubcopilot.com |
| Proxima / data-residency | {tenant}.ghe.com |
copilot-api.{tenant}.ghe.com |
| GHES | not served | not served |
The card host is derived per-request (e.g. from X-Forwarded-Host) so a single implementation serves every tenant; GHES is deliberately excluded.
Shared HTTP behavior (all three endpoints)
- CORS (read-only):
Access-Control-Allow-Origin: *,Access-Control-Allow-Methods: GET,Access-Control-Allow-Headers: Content-Type - Caching:
Cache-Control: public, max-age=3600 - Conditional requests: strong/weak
ETag+If-None-Match→304 Not Modified(this is exactly the SHOULD proposed in #33) - Content negotiation on
Accept - No authentication — all three are public metadata
1. Server Card — application/mcp-server-card+json
GET https://api.githubcopilot.com/mcp/server-card
{
"$schema": "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",
"name": "io.github.github/github-mcp-server",
"version": "1.4.0",
"description": "Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.",
"title": "GitHub",
"websiteUrl": "https://github.com/github/github-mcp-server",
"repository": {
"url": "https://github.com/github/github-mcp-server",
"source": "github",
"id": "942771284"
},
"icons": [
{ "src": "data:image/png;base64,iVBORw0KGgoAAAANSUh…(GitHub mark, light)", "mimeType": "image/png", "sizes": ["24x24"], "theme": "light" },
{ "src": "data:image/png;base64,iVBORw0KGgoAAAANSUh…(GitHub mark, dark)", "mimeType": "image/png", "sizes": ["24x24"], "theme": "dark" }
],
"remotes": [
{
"type": "streamable-http",
"url": "https://api.githubcopilot.com/mcp/",
"headers": [
{
"description": "Authorization header with authentication token (PAT or App token)",
"isRequired": true,
"isSecret": true,
"name": "Authorization"
}
],
"supportedProtocolVersions": ["2025-11-25", "2025-06-18", "2025-03-26", "2024-11-05"]
}
]
}
Notes:
- Remote-only: no
packages, no enumerated primitives (tools/resources/prompts) — those stay in the MCP Registryserver.jsonand runtime listing, per the card/remote-only shape. name,title,description,repositoryare kept identical to the Registry document so the card and registry entry describe the same server.versionmirrors the runtimeserverInfo.version.- Icons are embedded as self-contained
data:URIs (no external image dependency) and emitted in a fixed order so the body — and therefore the ETag — is deterministic. - For Proxima the single remote
urlbecomeshttps://copilot-api.{tenant}.ghe.com/mcp/.
2. AI Catalog — application/ai-catalog+json (spec_version 1.0)
GET https://github.com/.well-known/ai-catalog.json
{
"spec_version": "1.0",
"entries": [
{
"identifier": "urn:air:github.github.io:github-mcp-server",
"display_name": "GitHub MCP Server",
"media_type": "application/mcp-server-card+json",
"url": "https://api.githubcopilot.com/mcp/server-card",
"description": "Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language."
}
]
}
identifieris the AIR URN derived deterministically from the canonical card nameio.github.github/github-mcp-server→ reverse namespaceio.github.github→github.github.io→urn:air:github.github.io:github-mcp-server.urlequals the Server Card URL above (the integration contract), andmedia_typeadvertises what the client will receive there.
3. MCP Catalog (transitional subset) — application/json (specVersion draft)
GET https://github.com/.well-known/mcp/catalog.json
{
"specVersion": "draft",
"entries": [
{
"identifier": "urn:air:github.github.io:github-mcp-server",
"displayName": "GitHub MCP Server",
"mediaType": "application/mcp-server-card+json",
"url": "https://api.githubcopilot.com/mcp/server-card",
"description": "Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language."
}
]
}
- This is a structural subset of the AI Catalog entry (camelCase,
displayNameinstead ofdisplay_name), served alongside the forwardai-catalog.jsonfor present-day clients. The forwardapplication/ai-catalog+jsondocument is the primary; the MCP Catalog is transitional — relevant to the direction in #26.
Relation to open WG threads
- #11 (slash path): the card is reachable at the slash form
…/mcp/server-card. - #16 (reference implementation): complements the python-sdk reference; a go-sdk convenience helper ports the same
build_server_card/mount_server_cardAPI. - #33 (ETag SHOULD): implemented on all three endpoints (strong ETag, weak
If-None-Matchcomparison,304). - #14 (optional
displayName): entries currently setdisplay_name/displayName; happy to drop to track the AI Catalog upstream decision.
Happy to expose a live endpoint or share the full (un-elided) bodies if useful for conformance testing.
- Lenguaje dominante
- TypeScript
- Estrellas
- 10
- Forks
- 4
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de modelcontextprotocol/ext-server-card
-
Rename repo to `ext-server-card`Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
modelcontextprotocol/ext-server-card#51 · 1 reacción ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
modelcontextprotocol/ext-server-card#53 · 2 comentarios ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
Todos los issues de modelcontextprotocol/ext-server-card
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 72/100
zts212653/clowder-ai#1678 ·
Los mantenedores suelen responder en 1 día
-
good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 64/100
Progressive-Victory/the-website#680 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100