Publicado el
- 12 min read
Dentro del modelo de datos MCP: componentes principales, contratos y flujo
Dentro del modelo de datos MCP: componentes, contratos y flujo
Aquí tienes un mapa claro y sincero de lo que realmente vive dentro de un repositorio MCP —y cómo esas piezas funcionan juntas en despliegues reales.
Qué está modelando realmente el modelo de datos MCP
Model Context Protocol (MCP) describe una conversación precisa entre un cliente y un servidor: cómo un modelo puede descubrir fuentes de datos, invocar herramientas, renderizar prompts y obtener recursos sin conjeturas. El modelo de datos MCP es el vocabulario compartido para esa conversación. Está compuesto por entidades explícitas (recursos, prompts, herramientas), sus metadatos y las reglas que gobiernan el estado de la sesión, las capacidades y las respuestas.
Cuando decimos “repositorio MCP”, hablamos del almacén organizado de definiciones y contenido que un servidor expone: los recursos que pone a disposición, los prompts que puede renderizar, las herramientas que puede ejecutar y los metadatos que lo vinculan todo—versionado, permisos, procedencia y más. Piensa en el repositorio como la biblioteca más el catálogo más el mostrador de préstamo.
Los cuatro pilares: recursos, prompts, herramientas, sesiones
La superficie del protocolo es amplia, pero los componentes centrales se reducen a cuatro pilares que todo repositorio MCP debe representar con claridad:
- Recursos: URIs resolubles respaldadas por datos o contenido.
- Prompts: plantillas parametrizadas que producen partes de prompt estructuradas para un modelo.
- Herramientas: operaciones nombradas y tipadas que el modelo puede invocar.
- Sesiones: sobres de capacidades negociados que definen lo que es posible en esta conexión.
Todo lo demás—raíces, plantillas, metadatos, diagnósticos—apoya estos pilares.
Recursos: datos resolubles, definidos por URIs y plantillas
Los recursos son los endpoints de datos de solo lectura o mayormente lectura que un cliente puede listar y obtener. En la práctica, un recurso:
- Tiene un identificador estable, típicamente una URI (mcp://, file://, https://, o un esquema que defina el servidor).
- Emite contenido con una forma predecible, a menudo partes de texto, a veces imágenes o binarios, opcionalmente con anotaciones y metadatos.
- Puede listarse, filtrarse y recuperarse con paginación opcional.
Las plantillas de recursos son patrones parametrizados que generan recursos concretos bajo demanda. Por ejemplo:
- Una plantilla mcp://logs/{date}/app podría expandirse en un conjunto de logs diarios.
- Una plantilla mcp://doc/{id} podría ensamblar un recurso compuesto desde un CMS.
Los buenos repositorios definen:
- Raíces claras (los espacios de nombres de alto nivel que un cliente puede listar).
- Contratos de metadatos estrictos (tipo de contenido, codificación, idioma, versión, última modificación).
- Semánticas de paginación y filtrado estables.
- URIs deterministas para que los clientes puedan cachear y desduplicar.
Errores comunes:
- Sobrecargar un único recurso para emitir formatos muy distintos.
- Filtrar conceptos de backend (nombres de tablas de base de datos, claves hash opacas) que luego rompen la compatibilidad.
- Omitir timestamps y ETags, lo que limita el caching y la reconciliación.
Prompts: plantillas parametrizadas con contratos de entrada estrictos
Los prompts no son solo texto. En MCP, una definición de prompt declara:
- Argumentos: nombres, tipos, valores por defecto y si son obligatorios.
- Salida: una lista de partes de contenido que el cliente puede enviar directamente a un modelo (texto, imágenes, citas y más).
- Descripción: para qué sirve el prompt, para guiar el descubrimiento.
Un prompt bien estructurado:
- Valida las entradas antes de renderizar.
- Produce partes de contenido consistentes (p. ej., un bloque de mensaje del sistema, luego texto de usuario).
- Emite anotaciones para citas o enlaces a fuentes.
- Está versionado, para que puedas avanzar sin romper clientes.
Las plantillas deberían ser unidades pequeñas y componibles:
- La recuperación de datos pertenece a recursos o herramientas, no debe incrustarse en cadenas de prompt.
- La lógica de negocio pertenece a las herramientas, no enterrada en el texto del prompt.
- Los prompts ensamblan qué decir y cómo referenciar fuentes.
Herramientas: operaciones nombradas con parámetros y resultados tipados
Las herramientas permiten al cliente pedir al servidor que haga trabajo: buscar, calcular, transformar, escribir o llamar a servicios externos. En el modelo de datos, una herramienta es:
- Un nombre (estable, legible por humanos).
- Un esquema para parámetros de entrada (tipos, restricciones).
- Un esquema para resultados (payload de éxito, fragmentos de streaming opcionales).
- Una descripción que facilite su descubrimiento.
Buenas prácticas:
- Preferir enums explícitos y restricciones min/max sobre entradas “stringly-typed”.
- Devolver resultados estructurados con un estado claro y canal de errores.
- Usar claves de idempotencia cuando proceda.
- Soportar eventos de progreso para trabajos de larga duración.
Anti-patrones:
- Una única herramienta “doEverything” con entrada JSON de libre formato.
- Efectos secundarios ocultos (escrituras o borrados) no declarados en la descripción o capacidades.
- Valores predeterminados “mágicos” que cambian con el tiempo sin versionado.
Sesiones y capacidades: el contrato negociado
Toda interacción cliente-servidor comienza intercambiando capacidades: qué puede hacer el servidor y qué soporta el cliente. El objeto sesión es un acuerdo vivo sobre características tales como:
- Listado y obtención de recursos
- Listado y renderizado de prompts
- Invocación de herramientas y streaming
- Suscripciones a eventos (progreso, logs, diagnósticos)
- Límites de tasa, tamaños máximos de payload y tipos de contenido
El estado de la sesión también transporta:
- Identidad y contexto de tenencia (quién es el llamante, qué workspace).
- Alcances de permiso (qué recursos, prompts, herramientas están permitidos).
- Sugerencias del servidor (tamaños de paginación, timeouts, políticas de reintento).
Diseña para retrocesos claros:
- Si una función no está soportada, devuelve un error estructurado “capability not available” con orientación.
- Permite que los clientes degraden su experiencia: p. ej., desactivar streaming y cambiar a respuestas por lotes.
Raíces, URIs y descubribilidad
Los repositorios deberían exponer un conjunto compacto de raíces descubribles (p. ej., mcp://docs, mcp://logs, mcp://reports). Cada raíz:
- Soporta listado con filtros (rangos de fecha, etiquetas, propietarios).
- Documenta sus patrones de URI y semánticas de parámetros.
- Anuncia tipos de contenido para las entradas típicas.
Consejos de descubribilidad:
- Usa descripciones en raíces y recursos para que los modelos puedan elegir con criterio.
- Mantén URIs significativas y deducibles por humanos.
- Usa nombres consistentes entre recursos, prompts y herramientas para dominios relacionados.
Metadatos y anotaciones: el pegamento para contexto y gobernanza
Los metadatos convierten contenido opaco en contexto fiable. Campos estándar a capturar:
- Versión y esquema (qué especificación rige este payload).
- Timestamps (creado, actualizado, observado).
- Autores o sistemas de registro.
- URIs de origen o listas de citas para procedencia.
- Tipo de contenido, idioma, codificación.
- Etiquetas de sensibilidad y clasificación.
Las anotaciones pueden marcar:
- Citas en línea (de qué recurso y qué sección provienen).
- Redacciones o segmentos enmascarados.
- Puntuaciones de confianza o verificaciones de calidad.
Esto posibilita logging robusto, auditoría y aplicación de políticas más adelante.
Relaciones: cómo funcionan las piezas en la práctica
Un flujo típico se ve así:
- El cliente abre una sesión y lee las capacidades.
- Lista raíces, selecciona una plantilla de recurso, proporciona parámetros y obtiene contenido.
- Renderiza un prompt con argumentos que hacen referencia al contenido obtenido (o solo a las URIs).
- El modelo decide llamar a una herramienta—por ejemplo, para recuperar métricas actualizadas o escribir un registro.
- El servidor ejecuta la herramienta, emite eventos de progreso, devuelve un resultado estructurado.
- El prompt se re-renderiza para incorporar los nuevos hechos, y el ciclo continúa.
Cada paso se apoya en esquemas y metadatos, no en conjeturas. Ese es el núcleo del modelo de datos MCP.
Versionado: agilidad de esquemas sin romper clientes
Trata cada tipo visible externamente como un contrato en evolución. Patrones prácticos:
- Versiona semánticamente tus prompts, herramientas y plantillas de recursos: v1, v1.1, v2.
- Incluye una versión de esquema en los resultados y partes de contenido.
- Mantén versiones antiguas disponibles al menos durante una ventana de desaprobación.
- Prefiere cambios aditivos; al eliminar campos, márcalos como obsoletos primero.
Para cambios incompatibles, ofrece:
- Endpoints paralelos (p. ej., herramienta “report.generate.v2”).
- Guía de migración embebida en las descripciones.
- Flags de capacidad que anuncien comportamiento nuevo en lugar de cambios silenciosos.
Permisos y tenencia
La sesión debe codificar quién es el llamante y a qué puede acceder. En la capa de repositorio:
- Escopa recursos por tenant/workspace en URIs o dentro de reglas de acceso.
- Filtra listados en servidor para que los clientes no descubran lo que no pueden obtener.
- Aplica controles a nivel de fila y columna en el momento de materializar recursos.
- Requiere scopes explícitos para herramientas que cambian estado.
Audita cada comprobación de permisos con contexto suficiente para reproducir la decisión más tarde.
Caché, paginación y concurrencia
Para mantener repositorios responsivos:
- Soporta ETags o hashes de contenido en recursos; devuelve semánticas tipo 304 cuando no cambian.
- Ofrece paginación por chunks con cursores estables.
- Usa órdenes de clasificación consistentes para evitar duplicados y huecos.
- Documenta garantías de snapshot: ¿las páginas son inmutables durante un listado?
Sobre concurrencia:
- Usa bloqueo optimista en escrituras (si tus herramientas mutan datos).
- Devuelve hints retry-after para conflictos transitorios.
- Expón idempotencia para herramientas que puedan reintentarse por clientes.
Streaming, eventos y progreso
Las herramientas de larga duración y los recursos grandes se benefician del streaming:
- Stream resultados de herramientas en chunks tipados (datos, logs, progreso, final).
- Usa heartbeats para mantener conexiones vivas y detectar bloqueos.
- Proporciona un token reanudable para que el cliente pueda reconectar a mitad de stream si se corta el enlace.
Las suscripciones a eventos pueden cubrir:
- Cambios de estado en la ejecución de herramientas
- Nueva disponibilidad de recursos en una raíz
- Diagnósticos y señales de salud
Mantén los payloads de eventos pequeños y apunta a recursos para datos a gran escala.
Photo by Galina Nelyubova on Unsplash
Contratos de error y diagnósticos
Haz de los errores una parte de primera clase del modelo de datos:
- Usa códigos tipados (validation_failed, permission_denied, not_found, unavailable).
- Incluye una ruta parseable por máquina al campo que falla al validar entradas.
- Adjunta IDs de correlación para trazado cross-system.
- Proporciona mensajes accionables y legibles por humanos sin filtrar secretos.
Los diagnósticos deberían ser consultables:
- Una herramienta para obtener logs recientes del servidor para una sesión
- Un recurso con snapshots de salud
- Un prompt para renderizar un resumen de incidente legible
Procedencia, linaje y confianza
A medida que los modelos dependen de repositorios MCP para contexto, la procedencia se vuelve esencial:
- Etiqueta cada parte de contenido con los recursos y llamadas a herramientas que la produjeron.
- Incluye hashes de materiales fuente para que los clientes puedan verificar consistencia.
- Registra entornos de ejecución (versión de herramienta, runtime, parámetros).
- Ofrece una herramienta de consulta de linaje que devuelva la cadena desde la salida hasta las fuentes.
Esto es la columna vertebral para explicabilidad, auditoría y cumplimiento.
Observabilidad y presupuestos
Instrumenta el repositorio:
- Latencia y tasas de error por raíz de recurso, prompt y nombre de herramienta
- Tamaños de payload y duraciones de streaming
- Ratios de acierto/fallo de cache
- Utilización de límites de tasa y backoffs
Expone un recurso de estado compacto:
- Capacidades y versiones soportadas
- Incidentes recientes o funcionalidades degradadas
- Deprecaciones planificadas con fechas
Comunica cuotas en la sesión: límites por minuto, tamaños de ráfaga y cómo se señala el throttling.
Indexación y búsqueda entre recursos
Los repositorios grandes necesitan descubrimiento rápido:
- Mantén un índice sobre campos clave (títulos, etiquetas, propietarios, tiempo).
- Precompute embeddings para recursos de texto para potenciar herramientas de búsqueda semántica.
- Desduplica contenido casi idéntico entre raíces.
- Soporta filtrado y puntuación del lado del servidor para minimizar viajes del cliente.
Devuelve resultados de búsqueda como referencias a recursos con previas cortas, no payloads completos.
Forma de los datos y partes de contenido
El modelo de contenido MCP soporta partes estructuradas. Úsalas:
- Partes de texto para instrucciones y narrativa
- Adjuntos para blobs grandes con URIs externas
- Tablas o partes JSON para hechos legibles por máquina
- Citas como anotaciones distintas en lugar de notas a pie de página incrustadas
Evita enterrar JSON en texto; cuando el consumidor es un modelo, la estructura le ayuda a razonar y mantiene tu canalización predecible.
Extensibilidad: evolucionar sin fragmentarse
Para añadir nuevas funciones:
- Usa flags de capacidad para que los clientes puedan sondear soporte.
- Namespaces para características experimentales (p. ej., prefijos x-) que luego puedan estandarizarse.
- Capas de compatibilidad hacia atrás que traduzcan de nuevo a viejo en el servidor cuando sea factible.
Documenta el comportamiento de extensiones en el recurso readme de tu repositorio y anúncialo en la sesión.
Patrones que funcionan
- El servidor minimal: una raíz, dos plantillas de recursos, una única herramienta de escritura. Perfecto para una integración focalizada.
- El adaptador de data lake: recursos mapean a datasets con particiones; prompts resumen, herramientas muestrean o materializan fragmentos.
- El puente CMS: prompts para workflows editoriales, recursos para artículos y assets, herramientas para publicar y programar.
- La consola de operaciones: las herramientas son primera clase; los recursos son logs y métricas; los prompts generan planes de acción.
Cada patrón enfatiza pilares distintos, pero los contratos permanecen iguales.
Antipatrones a evitar
- Todo libre-formato: sin esquemas, sin tipos, solo strings por todas partes.
- Spaghetti de prompts: lógica de negocio en plantillas, recuperación de datos en concatenaciones de cadenas.
- Efectos secundarios ocultos: herramientas que escriben sin declarar scopes.
- Paginación no determinista: duplicados o elementos faltantes entre páginas.
- Cambios incompatibles silenciosos: cambiar formas de campos sin bump de versión.
Lista de control práctica para repositorios MCP
- Define raíces con nombres claros, descripciones y semánticas de listado.
- Asigna URIs estables y plantillas predecibles; documenta parámetros.
- Versiona prompts, herramientas y plantillas de recursos.
- Valida entradas pronto; devuelve errores tipados con rutas de campo.
- Captura metadatos (esquema, timestamps, autores, sensibilidad).
- Implementa paginación y ETags; establece valores por defecto conservadores.
- Haz streaming para trabajos grandes; emite progreso y heartbeats.
- Aplica permisos en servidor; el scope es explícito en la sesión.
- Registra con IDs de correlación; expón diagnósticos mínimos para clientes.
- Publica una política de desaprobación y un recurso de estado.
Interfaz con sistemas externos
Los repositorios suelen actuar como proxy o componer fuentes externas:
- Bases de datos: mapea tablas o vistas a plantillas de recursos; aplica enmascarado de columnas; cachea resultados con TTLs.
- Almacenamiento de objetos: expón prefijos como raíces; genera enlaces firmados para objetos grandes.
- APIs: envuelve llamadas como herramientas; normaliza payloads a tus esquemas; maneja reintentos y circuit breaking.
- Git: historial de commits como recursos; herramientas de diff producen artefactos patch; prompts resumen pull requests.
Mantén la cara MCP estable incluso si los backends cambian.
Postura de seguridad
Trata cada repositorio como un perímetro:
- Validación de entradas y codificación de salidas para todos los campos.
- Credenciales de mínimo privilegio para los backends.
- Secretos nunca aparecen en partes de contenido o mensajes de error.
- Limitación de tasa por principal y por ruta.
- Logs a prueba de manipulación para operaciones críticas.
Rota claves en un calendario y expón una herramienta para recuperar huellas de claves de firma actuales para verificación downstream.
Gobernanza y ciclo de vida
Fija expectativas y cúmplelas:
- Publica ventanas de soporte para versiones.
- Anuncia cambios incompatibles con pasos de actualización.
- Etiqueta clasificaciones de datos y aplica políticas automáticamente en el servidor.
- Ofrece un tenant sandbox con datos sintéticos y seguros.
La gobernanza no debe frenarte; debe mantenerte avanzando sin retrabajo.
Poniéndolo todo junto
El modelo de datos MCP funciona cuando lo tratas como infraestructura compartida. Los recursos te dan lecturas fiables, los prompts moldean diálogos útiles, las herramientas realizan trabajo seguro y tipado, y las sesiones mantienen el contrato honesto. Los repositorios que apuestan por metadatos, versionado y procedencia acaban siendo más sencillos de usar, más fáciles de monitorizar y mucho más duraderos. Los detalles—URIs, esquemas, anotaciones—no son trabajo accesorio. Son la columna vertebral de tu sistema.
Construye con esa columna vertebral en mente, y tu repositorio MCP no solo expondrá datos y acciones. Contará una historia coherente sobre dónde vive el conocimiento, cómo se hace el trabajo y por qué los clientes pueden confiar en las respuestas que reciben.
External Links
Architecture overview - Model Context Protocol Model Context Protocol (MCP): A comprehensive introduction for … Understanding Model Context Protocol (MCP) : A Full Deep Dive + … What Is MCP? Model Context Protocol Explained Simply - Spacelift What Is the Model Context Protocol (MCP) and How It Works