MCP Registry: cómo publicar y descubrir servidores MCP sin confiar a ciegas

El MCP Registry mejora el descubrimiento de servidores, no certifica que sean seguros. Aprende a publicar metadata reproducible y a construir una allowlist interna que trate cada servidor como una dependencia con privilegios.

Compartir
MCP Registry: cómo publicar y descubrir servidores MCP sin confiar a ciegas

El MCP Registry mejora el descubrimiento de servidores, no certifica que sean seguros. Aprende a publicar metadata reproducible y a construir una allowlist interna que trate cada servidor como una dependencia con privilegios.

Un MCP Registry es un catálogo con una API estándar para describir y descubrir servidores MCP. El registro oficial publica metadata —nombre, versión, repositorio, paquete o endpoint remoto—; no hospeda tu binario ni convierte un servidor listado en seguro o adecuado para tu empresa.

Eso separa tres cosas que se confunden con facilidad: descubrimiento (encontrar una ficha), procedencia (saber quién puede publicar un namespace) y confianza operativa (decidir si esta versión recibe permisos en tu entorno). El registro ayuda mucho con las dos primeras; la tercera es una política tuya.

Diagrama conceptual que conecta código y paquete, metadata server.json, registro MCP público, allowlist privada y hosts de desarrollo; debajo aparecen controles de identidad, integridad, sandbox, aprobación y auditoría
Un registro público resuelve discovery; la allowlist y los controles de ejecución resuelven el riesgo de introducir una nueva dependencia con capacidades de agente.

Checklist

server.json: el contrato que publicas

`server.json` es la ficha versionada del servidor. Como mínimo declara un nombre único, descripción, versión, repositorio y una o más formas de distribución: `packages` para artefactos instalables o `remotes` para endpoints. Para un paquete también declara su `registryType`, identificador, versión y transporte; para un remoto, URL y transporte compatible.

No copies un ejemplo antiguo sin comprobar el schema que genera tu versión de `mcp-publisher`. El formato evoluciona durante preview. La forma menos frágil de empezar es `mcp-publisher init`, revisar el JSON resultante y validarlo en CI contra el schema actual antes de publicar. El contrato de registry no es el archivo de configuración con secretos que ejecuta el host.

Un ejemplo deliberadamente mínimo para un paquete npm por STDIO sería este. Sustituye los nombres, controla la versión desde tu release y no incluyas valores de secretos: la ficha solo puede describir variables requeridas, no contenerlas.

<div style="margin:28px 0;border:1px solid #dbe3ef;border-radius:12px;overflow:hidden;background:#0f172a;"> <div style="padding:10px 14px;background:#111827;color:#cbd5e1;font:13px Consolas,monospace;">server.json</div> <pre style="margin:0;padding:18px;overflow:auto;color:#e5e7eb;font:13px/1.55 Consolas,monospace;"><code>{ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", "name": "io.github.acme/release-notes", "description": "MCP server for approved release-note data.", "version": "1.4.0", "repository": {"url": "https://github.com/acme/release-notes-mcp", "source": "github"}, "packages": [{ "registryType": "npm", "identifier": "@acme/release-notes-mcp", "version": "1.4.0", "transport": {"type": "stdio"} }] }</code></pre> </div>

Mantén la descripción factual y breve. También es entrada para hosts y modelos: una descripción ambigua, promocional o con instrucciones operativas largas aumenta el riesgo de que un agente elija una capability que no debería tener.

Namespace y procedencia: quién puede afirmar ese nombre

El registro oficial asocia la publicación a un namespace. Para `io.github.*` usa identidad de GitHub; para dominios propios puede verificar DNS o HTTP. Esa verificación evita que cualquiera publique bajo `com.tuempresa.*`, pero no demuestra que todo el código de un repositorio o paquete sea seguro.

Puntos a revisar

Lo que conviene comprobar

Elige un namespace que sobreviva a cambios de equipo. Si tu servidor es producto de una organización, un namespace de dominio verificado suele expresar mejor la propiedad que una cuenta personal. Documenta qué repositorio, pipeline y equipo pueden publicar y elimina permisos cuando alguien deja el proyecto.

En CI, separa el token que publica el artefacto del mecanismo que publica la metadata. El quickstart del registro ofrece autenticación GitHub/OIDC; úsala para que el pipeline pueda probar origen sin guardar una sesión humana de larga duración. Protege la rama y exige revisión del cambio de `server.json`, igual que harías con un workflow de release.

¿Te está sirviendo? Hay una dosis cada semana

Te resumo herramientas de IA para devs, agentes, MCP, seguridad y workflows en un email de 5 minutos. En español y sin ruido.

Suscribirme gratis

Versionado inmutable: publica un release, no una corrección silenciosa

Cada publicación de un servidor necesita una versión única. Una vez publicada, la metadata de esa versión es inmutable; si debes corregir descripción, repositorio, paquete o endpoint, publica otra versión. El registro intenta ordenar SemVer y marca la versión apropiada como `latest`, por lo que usar `1.4.0` de forma consistente simplifica a clientes y humanos.

No uses `latest` como versión de paquete en una allowlist. Fija la versión del artefacto y conserva su integridad en un lockfile, digest OCI o checksum cuando aplique. `latest` del registry es una conveniencia de discovery, no una orden para actualizar procesos de desarrollo sin revisar qué cambió.

Cuando solo ajustes metadata, una prerelease de registry puede ser preferible a fingir que el binario cambió. Pero no ocultes una modificación real de tools o permisos detrás de un parche menor: para el consumidor, añadir `delete_repository` es un cambio de riesgo aunque tu API siga siendo compatible.

Guarda la versión y la respuesta original que revisaste. Si el upstream se actualiza, compara el nombre del paquete, transporte, comando, URL, variables, tools observadas y permisos. Un cambio en cualquiera de ellos requiere reevaluación; no basta con que `version=latest` avance.

Sub-registro privado: la capa que una empresa realmente necesita

El registro oficial es para servidores públicamente accesibles; para un servicio interno o una dependencia aprobada solo para tu organización, crea un sub-registro privado o un catálogo compatible. GitHub documenta que una implementación v0.1 necesita endpoints de listado y detalle, además de CORS si un cliente lo consume desde navegador o IDE.

El sub-registro no tiene que duplicar toda la funcionalidad del público. Empieza con una allowlist inmutable y explícita: ID interno, server name upstream, versión exacta, fuente, owner, clasificación de datos, scopes permitidos, transporte, fecha de revisión y fecha de caducidad. Si falta owner o fecha, el ítem caduca en vez de quedarse como excepción eterna.

Puedes sincronizar fichas públicas como candidatos, pero no copies automáticamente todas. La ganancia real es cambiar la experiencia por defecto: el developer descubre únicamente servidores aprobados, y el host impide conexiones fuera de política cuando la plataforma lo permita.

Checklist

De la ficha al host: consentimiento y aislamiento

El host debe enseñar qué se instala o conecta, qué comando se ejecutará en local, qué variables necesita y qué acciones expone. La aprobación del usuario no puede ser una tarjeta truncada con un botón «Conectar». Si el host no revela el comando completo, los permisos o la procedencia, el equipo pierde la evidencia necesaria para aprobarlo.

Aísla servidores como dominios de seguridad independientes. Un servidor de documentación no necesita el token de un servidor de deploy ni acceso a todos los archivos del repositorio. Da una credencial por servidor y entorno, monta solo los directorios imprescindibles y bloquea red saliente salvo destinos que puedas justificar.

Las mutaciones de impacto —escribir código, emitir una orden, cambiar un permiso, enviar datos fuera— deben seguir requiriendo aprobación con parámetros completos. Un registro resuelve cómo encontrar una tool; no decide cuándo un agente puede ejecutar una acción con consecuencias.

Observabilidad y renovación de confianza

Registra server name, versión, digest o lockfile, host, usuario o service account, tool, argumentos redactados, resultado, latencia y decisión de aprobación. Sin esa relación no podrás responder qué servidor consultó un dato o cambió un recurso cuando una alerta llegue semanas después.

Puntos a revisar

Lo que conviene comprobar

Configura dos bucles de revisión. El primero es de cambios: nueva versión, nuevo paquete, endpoint, comando, tool o scope reabre la evaluación. El segundo es temporal: cada entrada aprobada expira en 90 o 180 días y necesita un owner que confirme que sigue mantenida y con el mismo riesgo aceptable.

Mide también fricción útil: solicitudes de alta, tiempo hasta revisión, instalaciones rechazadas, permisos denegados, tools poco usadas y cambios detectados. Si tu catálogo tarda semanas para un servidor de lectura de bajo riesgo, acabará apareciendo un bypass; si aprueba todo en cinco minutos, solo has creado una lista decorativa.

Checklist de publicación y consumo

  • El nombre MCP pertenece a un namespace que controlas y la identidad de CI puede probarlo.
  • Paquete o endpoint existen antes que la ficha y su versión coincide exactamente con `server.json`.
  • El schema se valida en CI y el proceso se arranca en una prueba de integración sin secretos reales.
  • Cada publicación usa una versión única; una corrección se publica como release nuevo, no se reescribe.
  • La ficha no incluye secretos ni se confunde con el archivo de configuración runtime del host.
  • El registro público entra en el flujo como fuente de discovery, nunca como allowlist automática.
  • La allowlist interna fija versión, fuente, owner, datos, scopes, transporte, fecha de revisión y expiración.
  • Los paquetes locales se fijan, escanean y ejecutan con sandbox, red, filesystem y credenciales mínimos.
  • Las definiciones de tools se inspeccionan y se vuelven a aprobar si cambian.
  • Las acciones sensibles muestran parámetros completos y requieren consentimiento o aprobación humana.

Preguntas frecuentes

¿Qué es MCP Registry?

Es un estándar y catálogo de metadata para descubrir servidores Model Context Protocol. El Official MCP Registry ofrece una API pública para que clientes y sub-registros consulten fichas de servidores.

¿El MCP Registry oficial certifica que un servidor sea seguro?

No. Ayuda a descubrir metadata y comprobar propiedad de namespaces, pero no sustituye revisión de código, integridad del artefacto, permisos mínimos, sandbox ni controles de ejecución.

¿Qué contiene server.json?

Describe el nombre, versión, repositorio y cómo obtener o conectar el servidor, por ejemplo un paquete con transporte STDIO o un endpoint remoto. No debe almacenar secretos runtime.

¿Puedo cambiar un servidor ya publicado?

No se reescribe esa versión. Publica una versión nueva de `server.json`; las versiones publicadas son inmutables y deben ser únicas.

¿Necesito un registro privado para mi empresa?

Si quieres publicar servicios internos o aplicar una allowlist de servidores aprobados, sí. Puedes usar una implementación compatible v0.1 o un catálogo interno que fije versiones, owners, permisos y caducidad.

¿Debo instalar automáticamente los resultados del registry?

No. Úsalo para discovery y somete cada versión a política: publisher, paquete o endpoint, dependencias, tools, scopes, sandbox y aprobación antes de habilitarla.

Cómo publicar y gobernar un servidor con MCP Registry

  1. Definir el límite. Enumera tools, datos, efectos y permisos; elimina capacidades que no pertenecen al primer release.
  2. Publicar el artefacto. Compila, prueba y publica el paquete o endpoint antes de crear la ficha de registry.
  3. Vincular la procedencia. Elige namespace, configura verificación GitHub, DNS o HTTP y limita quién puede publicar desde CI.
  4. Generar server.json. Usa `mcp-publisher init`, declara versión exacta, repositorio y transporte sin incluir secretos runtime.
  5. Validar en CI. Comprueba schema, coherencia con package metadata y un arranque real que complete `initialize` en sandbox.
  6. Publicar una versión. Autentica el publisher con identidad de CI y registra la versión única; no reescribas releases publicados.
  7. Verificar discovery. Consulta el detalle de esa versión en la API y guarda la respuesta revisada como evidencia de release.
  8. Crear allowlist. Fija versión, fuente, owner, clasificación de datos, scopes, transporte, revisión y fecha de expiración.
  9. Aislar ejecución. Usa credenciales por servidor, filesystem y red mínimos, y aprobación humana para acciones sensibles.
  10. Reevaluar cambios. Altera paquete, endpoint, tool, schema o scope y obliga una revisión antes de avanzar a la nueva versión.

Fuentes y referencias

También te puede interesar

MCP en producción: seguridad, permisos y supply chainOAuth 2.1 para servidores MCPMCP Apps: UI interactiva para tools MCPPrompt injection en agentes de IADocker MCP Toolkit: agentes locales y seguridad

Recibe una lectura semanal de herramientas IA para devs

Cada semana te resumo herramientas de IA para devs, agentes, MCP, seguridad y workflows en un email de 5 minutos. En español y sin ruido.

Suscribirme gratis

Lo mejor de la IA para desarrolladores, cada martes

Newsletter en español, gratis. Las herramientas, modelos y trucos de IA para devs que de verdad importan — sin ruido.