Publicado el
- 14 min read
Buenas prácticas para el modelado de datos en repositorios MCP
Mejores prácticas para el modelado de datos en repositorios MCP
Model Context Protocol solo es tan bueno como los datos que le proporcionas. El repositorio es donde esos datos se convierten en un activo fiable o en un problema que crece con el tiempo.
Esta es tu guía para acertar con el modelo de datos.
1. Empieza por la conversación, no por las tablas
Antes de esbozar un esquema, escucha cómo la gente describe el trabajo que quiere del repositorio MCP:
- “Necesito preguntarle al modelo: ¿Qué cambió en producción la semana pasada?”
- “Quiero que un agente rastree el recorrido de un usuario entre herramientas.”
- “Necesitamos una forma segura de vincular tickets internos con datos de clientes.”
Esas preguntas deben guiar tus decisiones de modelado de datos.
1.1 Captura entidades y acciones del mundo real
En los repositorios MCP, las entidades más útiles suelen ser:
- Actors: users, services, agents, teams
- Artifacts: documents, tickets, messages, runs, jobs, deployments
- Events: created, updated, deployed, failed, escalated
- Contexts: environment, project, tenant, workspace
Un buen primer paso:
- Escribe las 10–20 preguntas principales que esperas que el modelo o las herramientas respondan.
- Para cada pregunta, subraya los sustantivos (entidades) y los verbos (relaciones o eventos).
- Conviértelos en tipos candidatos para tu esquema.
Si tu esquema no hace que esas preguntas sean triviales de responder, estás modelando para tu base de datos, no para tus usuarios —ni para tus agentes.
2. Haz el modelo legible para humanos y máquinas
Los repositorios MCP están en una encrucijada: desarrolladores, gente de datos y agentes de IA usan los mismos datos. Tu modelo tiene que servir a los tres.
2.1 Nombra las cosas como las personas hablan
Resiste las abstracciones ingeniosas. Usa términos del dominio que pronunciarías en una reunión.
Preferir:
incident,run,deployment,conversation,message,user_session
Evitar:
record,item,blob,object1,data_unit
Algunas reglas prácticas de nomenclatura:
- La consistencia gana a la perfección. Elige
snake_caseocamelCasey no mezcles. - Usa nombres singulares para los tipos:
Incident,Conversation, noIncidents. - Usa prefijos/sufijos claros para conceptos transversales:
*_event,*_snapshot,*_config
2.2 Haz los esquemas autoexplicativos
Cada campo que añades es un token de prompt futuro. Haz que cuente.
Para cada tipo en tu repositorio MCP:
- Incluye una descripción en lenguaje claro:
- Qué representa
- Cuándo se crea/actualiza
- Quién o qué lo usa
- Añade descripciones a nivel de campo en tu archivo de esquema (JSON Schema, OpenAPI, o tu formato interno).
- Usa enums para campos categóricos en lugar de texto libre:
status: ["open", "investigating", "mitigated", "closed"]
Los agentes y las herramientas pueden razonar con más fiabilidad con conjuntos pequeños y conocidos de valores que con cadenas no estructuradas.
3. Trata los identificadores como contratos
Los identificadores en un repositorio MCP no son solo claves; son anclas para la recuperación de contexto a través de herramientas y modelos.
3.1 Elige IDs estables y opacos
Usa IDs internas que:
- Sean inmutables (nunca reutilizadas)
- Sean opacas (sin significado de negocio incorporado)
- Sean únicas globalmente dentro del repositorio
Buenas opciones:
- UUIDs / ULIDs
- IDs cortos codificados sin significado semántico
Malas opciones:
user_123_prodticket-2024-Q3-123- Cualquier cosa ligada a entorno, estructura temporal o estructura organizativa
Las codificaciones y los significados de negocio cambian; los IDs no deberían hacerlo.
3.2 Modela los IDs externos como ciudadanos de primera clase
Tu repositorio MCP inevitablemente reflejará datos de otros sistemas: Jira, GitHub, Salesforce, servicios internos.
Para cada sistema externo:
- Conserva su ID nativo en un campo dedicado:
jira_key,github_issue_id,zendesk_ticket_id
- Almacena metadatos de origen:
source_system,source_url,ingested_at,last_synced_at
- Nunca recargues los IDs internos para que funcionen también como referencias externas.
Esta separación te permite:
- Volver a sincronizar datos cuando cambien los formatos de IDs externos.
- Depurar respuestas del MCP hasta el sistema original.
- Crear joins estables entre herramientas sin adivinar.
4. Normaliza para la verdad, desnormaliza para la recuperación
Los repositorios MCP son muy consultados y recorridos. Equilibrar la normalización (para mantener los datos limpios) y la desnormalización (para mantener las respuestas rápidas y compactas) es clave.
4.1 Normaliza la fuente de la verdad
Usa normalización para:
- Datos de referencia: teams, services, environments, regions
- Usuarios e identidades: un registro canónico por usuario, enlazado a muchos contextos
- Artefactos con reglas de ciclo de vida fuertes: incidents, tasks, releases
Principios:
- Cada cosa del mundo real debería tener un registro canónico.
- Evita duplicar campos que deben mantenerse sincronizados (p. ej., el email del owner del servicio) en muchas tablas o colecciones.
- Cuando dudes, normaliza primero; siempre puedes desnormalizar después con vistas o estructuras materializadas.
4.2 Desnormaliza para contextos amigables con agentes
Cuando una herramienta MCP obtiene contexto para un LLM, el coste está dominado por:
- Llamadas de red
- Tokens de prompt
- Latencia en unir datos
Así que proporciona vistas pre-unidas y narrativas:
incident_with_timelineuser_session_with_eventsdeployment_with_commits_and_incidents
Cada vista debe:
- Empaquetar los 5–50 campos más importantes de las entidades relacionadas.
- Incluir un campo de resumen de alto nivel (más adelante hablaremos de esto).
- Ser tratada como una proyección optimizada para lectura, no como la fuente de la verdad.
Piensa en estas vistas como historias listas para servir que tus agentes pueden usar directamente.
5. Modela el tiempo como característica de primera clase
La mayoría de las preguntas útiles en MCP son temporales:
- “¿Qué llevó a esta falla?”
- “¿Cómo se ha comportado esta métrica desde la última release?”
- “¿Qué cambió después de habilitar la nueva política?”
Un modelo de tiempo descuidado mata estas preguntas.
5.1 Siempre rastrea múltiples timestamps
Para artefactos y eventos clave, por defecto incluye:
created_atupdated_atoccurred_at(si difiere del tiempo de ingestión)ingested_at(cuando entró en el repositorio MCP)
Esta separación importa:
- Los logs pueden llegar con retraso;
occurred_attraza la secuencia real. - Las herramientas pueden corregir registros más tarde;
updated_atsigue los cambios a nivel de esquema. - Los jobs de sync pueden retrasarse;
ingested_atayuda a depurar lagunas.
5.2 Usa streams de eventos para las narrativas
Para todo lo que “sucede en el tiempo” (incidents, runs, conversations, deployments), modela eventos explícitamente:
-
incident_eventtype:created,acknowledged,escalated,mitigated,closedactor_idoccurred_atcontextordetails
-
run_eventtype:started,tool_called,tool_failed,completed,cancelledrun_idpayload
Luego construye vistas de timeline que ordenen estos por occurred_at. Esto da a los agentes una narrativa clara para razonar, lo que mejora explicaciones y recomendaciones.
6. Construye un grafo de relaciones explícito
Los repositorios MCP obtienen su poder de cómo las cosas se conectan, no solo de lo que contienen.
6.1 Haz las relaciones de primera clase, no implícitas
En lugar de dispersar claves foráneas por todas partes y fingir que eso es suficiente:
- Define tipos de relación como entidades o estructuras documentadas:
incident_related_to_incidentticket_blocked_by_ticketservice_owns_runuser_part_of_team
- Almacena dirección y semántica explícitas:
from_id,to_id,relationship_type,strength,confidence,source_system
Esto es especialmente importante cuando las conexiones son inferidas (p. ej., una coincidencia basada en embeddings entre dos documentos). Querrás saber:
- Quién/qué creó el enlace (regla, modelo, humano)
- Qué confianza tiene ese enlace
- Si es reversible o direccional
6.2 Decide cuándo volverte graph-native
No necesitas una base de datos de grafos para cada repositorio MCP, pero sí necesitas un modelo de grafo.
El almacenamiento en grafo se vuelve atractivo cuando:
- Frecuentemente recorres caminos multi-hop:
- “Incidents vinculados a servicios propiedad de teams que manejaron incidents similares en los últimos 90 días.”
- Necesitas razonamiento centrado en relaciones:
- Análisis de impacto, mapeo de blast radius, riesgo por dependencias
Si te quedas con una tienda relacional o documental:
- Estandariza tablas/colecciones de relación.
- Construye índices tipo grafo (listas de adyacencia, edges desnormalizados).
- Ofrece payloads con forma de grafo vía herramientas MCP para que los agentes puedan seguir enlaces sin reconsultar.
7. Diseña para una evolución de esquema incremental y segura
Los repositorios MCP viven en un entorno cambiante: nuevas herramientas, nuevos agentes, nuevas reglas de negocio. Tu modelo de datos debe evolucionar sin romper todo lo que depende de él.
7.1 Trata el esquema como un artefacto versionado
Un repositorio MCP sano:
- Almacena su esquema junto al código (Git, monorepo o un repositorio de esquemas dedicado).
- Usa versiones de esquema (p. ej.,
incident:v3) en:- Documentación interna
- Configs de herramientas
- Scripts de migración
Prácticas principales:
- Nunca elimines un campo sin deprecarlo primero.
- Nunca cambies el significado de un campo de forma silenciosa.
- Prefiere añadir campos nuevos o nuevos tipos de entidad antes que reutilizar campos antiguos.
7.2 Usa cambios retrocompatibles por defecto
Tu checklist de cambios:
- ✅ Añadir campos opcionales → típicamente seguro.
- ✅ Ampliar enums solo si los consumidores pueden manejar valores desconocidos.
- ⚠️ Cambiar tipos de datos → arriesgado; usa campos nuevos.
- ❌ Eliminar o renombrar campos a ciegas → garantiza que romperás a alguien.
Cuando debas hacer un cambio rompedor:
- Anuncia una ventana de deprecación.
- Proporciona ayudas de migración:
- Campos en sombra
- Escritura dual (antiguo + nuevo) por un periodo
- Vistas de compatibilidad
La estabilidad del esquema te compra confianza; la confianza te compra adopción.
8. Modela privacidad, seguridad y gobernanza desde el principio
En los repositorios MCP, los datos no solo los miran humanos. Los agentes pueden recorrer, combinar y exponer automáticamente información sensible a menos que el modelo les diga dónde están las líneas.
8.1 Clasifica la sensibilidad a nivel de campo
Para cada entidad y campo, define:
sensitivity:public,internal,confidential,restricted
contains_pii:true/falsecontains_credentials:true/falseretention_policy:retain_indefinitely,delete_after_30d,delete_upon_request
Esto puede residir en:
- Anotaciones de JSON Schema
- Un registro de metadatos separado
- Comentarios inline + docs generados
Los agentes y herramientas pueden entonces:
- Filtrar campos sensibles por defecto.
- Requerir permisos más fuertes para datos restringidos.
- Respetar eliminación y retención automáticamente.
8.2 Haz control de acceso representable en el modelo
Evita codificar permisos solo en lógica de aplicación. Exprésalos en los datos:
- Entidades
actoroprincipal(user, service, agent) - Definiciones de
roleypermission - Reglas de
policy:- “Users pueden ver incidents en proyectos de los que son miembros.”
- “Agents solo pueden leer messages de canales marcados como
ai_safe.”
Aunque la aplicación que haga cumplir las reglas viva en otra capa, modelarlas ayuda a:
- Depurar accesos inesperados
- Explicar a humanos y auditores por qué el modelo vio ciertos datos
- Construir agentes conscientes de seguridad que limiten su propia obtención de contexto
9. Representa contenido no estructurado y resúmenes de forma intencional
Un modo común de fallo: meter blobs de texto sin procesar en repositorios MCP y esperar que el modelo “simplemente lo entienda”.
9.1 Separa contenido bruto, metadatos y estructura
Para cada entidad con mucho contenido (document, message, ticket, log):
- Contenido bruto:
body_raw(el texto original)format(markdown,html,plaintext,json)
- Campos estructurados:
title,author,tags,labels,source_system
- Resultados de extracción:
entities(entidades estructuradas extraídas del texto)classifications(tema, sentiment, riesgo)embeddings(almacenados por separado o referenciados por IDs)
Esto te da múltiples ángulos:
- Búsqueda exacta sobre texto bruto
- Consultas filtradas sobre campos estructurados
- Búsqueda semántica vía embeddings
- Analítica fiable vía entidades extraídas
9.2 Almacena resúmenes legibles por máquina, no solo prosa
Los resúmenes son increíblemente útiles para las herramientas MCP, pero solo si están diseñados para reutilizarse.
Para entidades clave, añade:
summary_short: 1–2 frases, objetivo, sin adornossummary_long: 3–8 puntos en bullet, cubriendo:- Qué es
- Por qué importa
- Estado actual
- Stakeholders clave
summary_last_updated_atsummary_source:human,agent,system
El truco: trata los resúmenes como datos, no solo texto:
- Mantenlos estructurados (p. ej., JSON con campos/bullets nombrados).
- Permite que los agentes sepan cuán “frescos” están.
- Úsalos como contexto de primera pasada antes de cargar contenido bruto.
Esto reduce tokens y acelera el razonamiento.
10. Haz visibles las restricciones de recuperación en el modelo de datos
Las herramientas MCP viven y mueren por la calidad de la recuperación. Un buen modelo de datos hace explícitas las restricciones:
10.1 Codifica hints de indexado y recuperación
Para cada campo, anota:
indexed:true/falsesearchable:full_text/exact/noneembedding_index:true/falsesort_priority: low / medium / high (para consultas típicas)
Y a nivel de entidad:
default_sort: p. ej.,-occurred_at,-updated_atsharding_keyopartition_keysi aplica (p. ej.,tenant_id)
Estos hints ayudan a:
- Los creadores de herramientas a elegir los campos correctos para consultar.
- Los agentes a evitar filtros costosos no indexados que pueden expirar.
- Los equipos de infraestructura a optimizar los índices adecuados.
10.2 Diseña para respuestas parciales y paginación
Como las ventanas de contexto son finitas, diseña tus APIs y esquemas con:
lightweightsummaries:- Conjuntos de campos mínimos para listados y selección
detailedviews:- Payloads completos para razonamiento profundo
- Patrones documentados de
page_sizeycursor - Grupos de campos claros:
core_fieldsvsdebug_fieldsvsextended_fields
Los agentes pueden entonces:
- Obtener una lista amplia y barata.
- Reducir a unos pocos candidatos.
- Pedir registros detallados solo para esos.
Tu esquema debe reflejar ese patrón.
11. Maneja la multi-tenencia y el aislamiento con cuidado
La mayoría de repositorios MCP acabarán sirviendo a varios equipos, proyectos o incluso clientes.
11.1 Modela tenants explícitamente
Nunca confíes en el scope implícito. En su lugar:
- Añade
tenant_id(oorganization_id) a cada entidad multi-tenant. - Haz que
tenant_id:- Sea parte de claves primarias o restricciones únicas cuando sea necesario.
- Sea un filtro temprano en todas las consultas y herramientas estándar.
Para configuraciones más complejas:
- Considera un modelo de
scope:scope_type:tenant,project,workspacescope_id
- Adjunta ítems y permisos a scopes.
11.2 Evita fugas entre tenants por diseño
Guardarraíles a nivel de modelo de datos:
- No existan entidades “globales” que crucen tenants sin modelado claro.
- Los datos de referencia a nivel sistema (enums, plantillas de config) viven en estructuras separadas y claramente marcadas.
- La analítica cross-tenant (si está permitida) se modela como agregados, no como acceso a registros crudos.
Los agentes deben poder ver:
- En qué tenant operan.
- Qué campos y registros son seguros de referenciar entre scopes.
12. Documenta el modelo como un producto, no como una nota al margen
Un repositorio Model Context Protocol es una superficie compartida. La documentación deficiente ralentiza a todos, incluidos los IA.
12.1 Mantén una referencia viva del modelo de datos
Como mínimo:
- Un catálogo de esquemas:
- Entidades
- Campos
- Relaciones
- Enums y sus significados
- Consultas MCP de ejemplo:
- “Cómo obtener los últimos 10 incidents para un servicio”
- “Cómo listar las últimas 5 conversations de un usuario con soporte”
- Puntos comunes de errores y antipatrónes:
- Campos deprecados
- Quirks conocidos en datos legacy
Mejor práctica: genera esta documentación automáticamente desde tu esquema, pero enriquece con notas y ejemplos escritos por humanos.
12.2 Optimiza la doc para humanos y agentes
Los humanos necesitan claridad; los agentes necesitan estructura. Apunta a ambos:
- Amigable para humanos:
- Descripciones en lenguaje claro
- Diagramas para flujos y relaciones clave
- Amigable para máquinas:
- Archivos de esquema JSON/YAML
- OpenAPI/GraphQL SDL donde corresponda
- Marcadores para sensibilidad y reglas de acceso
Con el tiempo, puedes permitir que los agentes consulten esta documentación como parte de su razonamiento, pero eso solo funciona si es precisa y está actualizada.
Photo by Scott Rodgerson on Unsplash
13. Prueba el modelo de datos con flujos MCP reales
Solo sabes si tu esquema funciona cuando está bajo presión.
13.1 Usa escenarios MCP realistas como pruebas
Diseña un pequeño conjunto de workflows canónicos:
- “Agente on-call triaging un nuevo incident”
- “Agente de soporte resumiendo una semana de quejas de usuarios”
- “Ingeniero preguntando por qué falló un deployment”
Para cada workflow:
- Define las herramientas MCP involucradas.
- Traza qué entidades y campos tocan.
- Comprueba cuántos saltos hacen falta para responder preguntas centrales.
Si una acción simple requiere tocar cinco herramientas diferentes y unir doce entidades, tu modelo de datos puede estar demasiado fragmentado —o tus proyecciones demasiado escasas.
13.2 Integra validación en ingestión y actualizaciones
Los datos malos envenenan el contexto. Añade comprobaciones a nivel de modelo:
- Campos requeridos por tipo de entidad.
- Transiciones válidas (p. ej., un incident no puede pasar de
closedaopensin un eventoreopened). - Integridad referencial (no
incident_eventhuérfano sin un incident padre).
Idealmente:
- Las reglas de validación viven cerca del esquema, no dispersas en servicios.
- Las violaciones producen eventos de error estructurados en el repositorio, para detectar drift temprano.
14. Planifica para observabilidad y depuración
Tendrás que explicar por qué un agente MCP respondió de cierta manera. Eso es, en gran parte, un problema de modelado de datos.
14.1 Modela la procedencia y la línea de datos
Para registros clave y entidades derivadas:
source:ingested,human_input,agent_generated,system_generatedsource_toolosource_componentsource_run_id(vínculo al run o job MCP)upstream_ids(de qué se derivó)
Esto te permite:
- Rastrear respuestas erróneas hasta su fuente de datos.
- Medir qué herramientas o ingestas causan más problemas.
- Reconstruir de forma segura artefactos derivados cuando cambian los datos upstream.
14.2 Captura patrones de consulta y uso
Sin convertir tu repositorio en un pantano de logs, mantén modelos ligeros para:
context_fetch_eventrun_idtool_nameentity_typefilters_usedresult_countlatency_ms
agent_decision_eventreason_shortentities_consideredchosen_entity_ids
Más adelante, puedes interrogar el propio repositorio MCP:
- “¿Qué campos nunca usa ninguna herramienta?”
- “¿Qué tipos de entidad provocan más timeouts?”
- “¿Qué relaciones realmente impulsan decisiones de agentes?”
Y luego afinar el modelo en consecuencia.
15. Mantén el modelo con opinión pero en evolución
La tentación con una superficie de protocolo compartida es ser “neutral” y “flexible”. Esa es la vía rápida hacia un puré de tablas vagamente relacionadas que nadie entiende completamente.
Un modelo de datos MCP fuerte:
- Tiene opiniones claras sobre lo que importa en tu dominio.
- Acepta que casos legacy o marginales pueden necesitar shims, no promoción a primera clase.
- Evoluciona intencionadamente, con deprecaciones y migraciones, no con mutaciones ad hoc.
En la práctica:
- Di no a campos nuevos que duplican significados existentes.
- Di más tarde a cambios que no se alinean con casos de uso centrales.
- Di sí a pequeñas mejoras incrementales de esquema que reduzcan la confusión.
Estás construyendo el mapa mental que humanos y agentes usarán para razonar sobre tus sistemas. Cuanto más limpio e intencional sea ese mapa, más útil será cada herramienta sobre Model Context Protocol.
Diseñar repositorios MCP tiene menos que ver con tecnología ingeniosa y más con pensamiento claro. Si empiezas desde las conversaciones que quieres habilitar, proteges identificadores y relaciones como contratos, y tratas gobernanza y evolución como parte del propio modelo, acabas con una capa de contexto en la que los agentes pueden confiar —y que los humanos pueden depurar.
Todo lo demás son detalles de implementación.
Enlaces externos
Top 5 MCP Server Best Practices Analytics agents and MCP best practices MCP Security Issues and Best Practices You Need to Know - Knostic MCP and Data Warehouses: everything you need to know Explore the Neo4j Data Modeling MCP Server