Servidor MCP
Actualizado 17 de agosto de 2026
Estado: especificado, no desplegado. Todavía no existe ningún endpoint. Sale cuando existan al menos dos feeds conformes en vivo sobre los cuales federar, y no antes — por qué, más abajo. Nada en esta página describe software en ejecución. Describe un contrato al que nos comprometimos, para que cualquiera que construya sobre el protocolo pueda ver hacia dónde va la superficie para agentes.
MCP es una capa opcional por encima del protocolo, nunca el piso de conformidad (§4.5). Una aplicación en L2 es conforme tenga o no algo que ver con MCP; el servidor de referencia es una comodidad que la iniciativa ejecuta sobre la red, no una quinta cosa que implementar.
La frontera que no debe cruzar
Hay dos tipos de servidor MCP en este ecosistema, y confundirlos desharía el sentido del protocolo.
| MCP de red (este) | MCP de producto (el de cada app) | |
|---|---|---|
| Dueño | La iniciativa | Cada aplicación |
| Alcance | Los datos públicos de lugares de todo publicador registrado | El producto de esa app, incluido lo que el protocolo no modela |
| Entidades | Solo place en v0.1 |
Lo que ofrezca la app — emparejamiento, casos, flujos |
| Autenticación | Ninguna para lectura | La propia de la app |
| Datos de personas | Imposible por construcción — el servidor solo habla el esquema place |
La política propia de la app, fuera de este protocolo |
| Nombres de herramientas | Identificadores en inglés | Pueden ser en español; el registro los guarda tal cual |
La regla, dicha una sola vez: el servidor de red nunca hace de
intermediario de un MCP de producto, nunca agrega los endpoints no protocolarios
de un producto y nunca se presenta como sustituto de uno. Los lista —
list_publishers devuelve el endpoint mcp{} que declaró cada publicador —
para que un agente pueda conectarse directo a la app.
La razón es la misma que hay detrás de todo el protocolo. Un servidor de la iniciativa que en silencio se volviera la puerta de entrada a veinte aplicaciones recrearía exactamente la centralización que este diseño existe para evitar, y lo haría usando el lenguaje de la interoperabilidad. Un directorio que se convierte en pasarela cambió de naturaleza.
Las cuatro herramientas
Cada una es una proyección 1:1 de las superficies de lectura y escritura ya especificadas en §4.1 y §4.2. Sus esquemas de entrada y salida se generan desde los mismos JSON Schemas que usa el validador, no se escriben a mano — mismo esquema, cuarto transporte.
| Herramienta | Entrada | Salida |
|---|---|---|
list_publishers |
{ level?, entity?, municipality?, event?, status? } |
Entradas del registro con estado medido, estado de la insignia, fecha de la última validación, licencia y permitted_use declarados, y el endpoint mcp{} si lo hay |
search_places |
{ municipality?, kind?, q?, bbox?, updated_since?, limit?, cursor? } |
Un sobre de feed con data.places[] y next_cursor, más sources[] y unreachable[] |
get_place |
{ qualified_id } |
El registro, su cadena completa de procedencia y su bloque de frescura |
publish_place |
{ target_publisher, source, external_id, place } |
La respuesta de eco del publicador, incluido el estado de moderación — solo contra publicadores cuyo manifiesto declara soporte de escritura |
Federación, y lo que se niega a esconder
El diseño interesante no es el abanico de peticiones. Es lo que dice la respuesta cuando ese abanico no sale del todo bien.
Los resultados parciales son explícitos. Cada respuesta lleva sources[] —
quién contestó, cada uno con su last_updated — y unreachable[], quién no y
por qué. Descartar un publicador en silencio haría que la red se viera más
pequeña y más fresca de lo que es, que es la misma deshonestidad que las reglas
de frescura existen para evitar, cometida por la capa que debía hacerlas
cumplir.
El consentimiento se verifica antes de descargar nada. A un publicador cuyo
permitted_use excluye ai_answer no se le consulta para un agente, y la
respuesta lo dice en excluded_by_policy[] en vez de fingir que no existe.
Excluido es un hecho sobre permisos; ausente es un hecho sobre existencia, y un
agente que no puede distinguirlos le va a reportar el equivocado a una persona.
La atribución viaja y la frescura se dibuja. Cada registro devuelto conserva
su cadena source{} y la cadena de atribución del publicador, y lleva la edad
de su last_confirmed_at y contradictions_active. La descripción de la
herramienta le dice al agente que llama que DEBE mostrarlos — las
reglas de consumo no dejan de aplicar porque quien
consume sea un modelo de lenguaje.
Acotado por diseño. Ocho segundos y doce publicadores por petición,
ordenados por relevancia declarada, ttl respetado por publicador desde su
propio sobre, caché en memoria y nunca escrita a disco.
Los datos de personas son imposibles, no están prohibidos
Tres garantías estructurales en vez de tres políticas:
- El único esquema de salida del servidor es el esquema
place. No hay camino de código que pueda emitir un campo de persona porque no existe un tipo para uno. - No acepta ninguna consulta que pueda funcionar como búsqueda de personas. La
búsqueda de texto libre se ejecuta solo contra
nameydescriptionde lugares, yqtiene límite de longitud. - No guarda ninguna credencial de escritura.
publish_placepasa la credencial de quien llama por petición y no almacena nada — la iniciativa nunca debe tener acceso de escritura al sistema de otro equipo.
Esto es la prohibición de cruce expresada como arquitectura. Una política se puede olvidar bajo la presión de un plazo; un tipo que no existe, no.
Por qué todavía no está construido
Porque un servidor de federación con un solo feed detrás es un intermediario, y un intermediario que se dice red es una afirmación que no podemos respaldar.
La condición son dos feeds conformes en vivo, y la prueba de aceptación es concreta: un agente responde una pregunta real sobre los datos de dos publicadores, con la atribución y las edades intactas. Hasta que eso sea demostrable, construir el servidor significaría publicar algo cuya propuesta de valor entera está sin probar — y publicar un endpoint que sugiere que existe una red cuando no existe es justo el tipo de afirmación que la primera regla del proyecto prohíbe.
La especificación existe ahora, antes que el código, a propósito. Cualquiera que esté construyendo una integración con agentes puede ver los nombres de las herramientas, los esquemas y las garantías, y puede decirnos que están mal antes de que cambiarlos salga caro.
Qué hacer mientras tanto
Un agente no necesita este servidor para trabajar con el protocolo. Necesita el protocolo, que es un documento, y la skill para agentes la incluye — la skill funciona sin nada de red, porque una especificación es texto y un esquema es un archivo.
Para leer datos en vivo hoy: los feeds son JSON estático en URLs estables y la API de lectura es HTTP a secas. En este protocolo no hay ningún transporte que exija una librería cliente, que era uno de los objetivos de diseño.