Skip to main content

MCP Server

Servicio de software o proceso en segundo plano que implementa la especificación MCP y proporciona a los clientes AI externos acceso estandarizado para ejecutar funciones, leer recursos y plantillas de prompts.

1. Visión general del concepto y problema sistémico

Cada empresa moderna o desarrollador tiene un conjunto único de servicios internos: bases de datos propietarias, API de microservicios, utilidades CLI específicas o scripts de despliegue. Antes de la aparición del estándar MCP, la integración de estas herramientas en inteligencia artificial requería la escritura de plugins propietarios para cada sistema por separado.

MCP Server simplifica drásticamente la arquitectura:

  1. Encapsulación de secretos: Todas las claves confidenciales (contraseñas de bases de datos, tokens de sistemas de pago) se almacenan exclusivamente en el lado del servidor y no se transmiten en el contexto de LLM.
  2. Interfaz de implementación única: Escribes el código del backend una vez, y se vuelve automáticamente accesible en cualquier cliente MCP (Cursor, Claude Code, Windsurf, pipelines internos).
  3. Tipificación estricta del contrato: Gracias a los esquemas de Zod o Pydantic, el servidor garantiza que el modelo solo enviará parámetros válidos antes de ejecutar la lógica de negocio.

2. Taxonomía arquitectónica y modelo mental

La arquitectura del servidor se basa en tres interfaces funcionales definidas por el protocolo:

  • 1. Interfaz de herramientas (Tools API): Métodos con efectos secundarios que son invocados por el modelo. Cada herramienta tiene un nombre único, una descripción comprensible para humanos (que LLM utiliza para la selección) y un esquema inputSchema.
  • 2. Interfaz de recursos (Resources API): Flujos de información direccionados por URI para lectura (por ejemplo: postgres://analytics/users/schema o logs://latest). Soporta suscripciones a actualizaciones: cuando un recurso cambia, el servidor envía una notificación notifications/resources/updated.
  • 3. Interfaz de plantillas (Prompts API): Biblioteca de escenarios contextuales (por ejemplo, review_pull_request o debug_memory_leak) que el servidor exporta al cliente junto con los argumentos recomendados.
  • 4. Modo de despliegue:
    • Local (Local Process): se inicia a través de npx, uvx o docker run en combinación con stdio.
    • Microservicio remoto (Remote SSE): contenedor completo en la nube que atiende solicitudes a través de HTTP Server-Sent Events con soporte de autorización mediante tokens Bearer.

3. Pipeline técnico y mecánica interna

Ciclo de vida del procesamiento de solicitudes en el MCP Server:

  1. Bootstrap & Protocol Binding (Inicialización del proceso): El servidor inicializa una instancia de la clase Server, vincula el adaptador de transporte (StdioServerTransport) y espera el paquete de entrada initialize del cliente.
  2. Capability Registration (Registro de capacidades): El servidor registra los manejadores:
    • ListToolsRequestSchema: devuelve un array de esquemas JSON de herramientas disponibles.
    • CallToolRequestSchema: enruta la llamada a una función específica.
  3. Validation & Execution (Validación de argumentos y ejecución): Al recibir la solicitud tools/call, el servidor valida los argumentos enviados a través del validador de esquemas. En caso de discrepancia, se devuelve un error estructurado. Si los datos son válidos, se ejecuta la lógica de negocio objetivo (consulta a la base de datos, llamada a AWS).
  4. Structured Response Serialization (Serialización de la respuesta): El resultado de la ejecución se envuelve en un array de protocolo content: [{ type: "text", text: "..." }]. Todos los registros del sistema interno se dirigen al flujo stderr para no comprometer la integridad del canal JSON-RPC.

4. Escenarios prácticos de ingeniería en producción

01. Puerta de enlace corporativa segura a microservicios

El equipo de ingeniería crea un único MCP Server en TypeScript que permite a los agentes consultar el estado de incidentes en PagerDuty, verificar el estado de builds en GitHub Actions y generar tokens de prueba en el IdP interno sin necesidad de cambiar manualmente entre paneles web.

02. Asistente DevOps local para Kubernetes

El MCP Server opera en la máquina del ingeniero con credenciales locales de kubectl. Proporciona al agente en Cursor herramientas como k8s_get_pods, k8s_describe_pod, k8s_get_logs. El modelo localiza instantáneamente la causa de CrashLoopBackOff, sin requerir que la persona copie manualmente los registros.

03. Interfaz de hardware para IoT y sistemas embebidos

El MCP Server, desplegado en una Raspberry Pi de prueba o en un servidor local, abre acceso para interactuar con puertos de hardware (GPIO/Serial). El desarrollador puede solicitar al agente que realice un ciclo de pruebas en el microcontrolador conectado mediante texto.

5. Errores comunes, trampas y seguridad

  • Fugas de artefactos de depuración en stdout: El error más común entre los novatos es dejar un console.log("data", res) en el cuerpo de la función. En el transporte stdio, esto rompe instantáneamente el parser del cliente. Siempre utiliza console.error() o un logger especializado con salida en stderr.
  • Procesos zombis (Resource Leaking): Si el cliente se cierra abruptamente, el proceso hijo del servidor puede quedar colgado en memoria. Siempre escucha eventos process.stdin.on('close'), SIGTERM y SIGINT para cerrar conexiones con la base de datos de manera ordenada.
  • Falta de sanitización de rutas (Path Traversal): Si una herramienta lee archivos según la ruta proporcionada por el modelo, pasar el argumento ../../../../etc/passwd comprometerá el host. Siempre normaliza las rutas y verifica que se encuentren dentro del directorio raíz permitido.
/ Preguntas frecuentesSchema.org FAQPage

FAQ: MCP Server

Utilizando el SDK oficial `@modelcontextprotocol/sdk` en TypeScript o Python (`mcp`). Solo necesitas declarar una instancia del servidor, conectar el transporte `StdioServerTransport` o `SSEServerTransport`, definir los esquemas de entrada a través de Zod/Pydantic y registrar los manejadores de llamadas mediante `setRequestHandler`.
/ Enlaces internos
Todos los términos