Básico Lección 1 de 17 ≈ 20 min de lectura Especificación 2026-07-28 Revisada el 2 de octubre de 2026

Introducción a MCP

Hoy le pides a una IA un servidor MCP y te lo escribe. Este curso trata de lo que la IA no decide por ti: qué exponer, cómo describirlo para que el modelo lo use bien, qué tiene que confirmar una persona y cómo compruebas que funciona. El código está en cada lección, en TypeScript y Python, para que entiendas lo que te genera.

Objetivos de aprendizaje

Al terminar esta lección serás capaz de:

  • Explicar qué coste de integración elimina MCP y cuál deja intacto
  • Distinguir MCP del function calling y de una API REST, y situar cada uno en una llamada real
  • Leer un intercambio tools/list y tools/call campo por campo
  • Decidir cuándo un sistema justifica un servidor MCP y cuándo basta el function calling directo
  • Clasificar una capacidad de un sistema interno como tool, resource o prompt

El problema

Nortia Logística es una empresa de logística y almacenes de unas 800 personas, con operaciones en España y México. Es el caso que recorre todo el curso. Aquí importan cuatro de sus sistemas internos. Los pedidos y envíos viven en PostgreSQL. La facturación tiene una API REST protegida con OAuth. Soporte trabaja con un sistema de tickets, y los almacenes (MAD-01, BCN-02, MEX-01) generan un flujo de eventos de inventario.

En un año han aparecido tres aplicaciones de IA. Soporte tiene un asistente que responde a "¿dónde está el pedido PED-2026-004812?". Finanzas tiene un agente que concilia facturas con envíos y propone abonos. La ingeniera de plataforma usa Claude Code para diagnosticar incidencias consultando esos mismos datos. Cada equipo escribió su propia integración con cada sistema que necesitaba. Cada una lleva su propia definición de funciones en el formato de su proveedor de modelos, su propio manejo de credenciales y, si lo tiene, su propio registro de lo que se llamó.

Así que hay tres implementaciones de "buscar un pedido" con tres comportamientos distintos. Una filtra por inquilino (España y México deben estar separados), otra no. Cuando seguridad pregunta quién consultó datos personales de un cliente la semana pasada, la respuesta depende de qué aplicación lo hizo. Mientras tanto, la cuarta aplicación de IA ya está pedida.

N aplicaciones por M sistemas

Este coste sigue una forma conocida. Con N aplicaciones de IA y M sistemas, las integraciones punto a punto crecen como N × M. En Nortia son hasta 3 × 4 = 12, cada una con su código, sus credenciales y sus huecos.

Figura 1. Integraciones punto a punto en Nortia: cada aplicación implementa por su cuenta el acceso a cada sistema.

MCP (Model Context Protocol) es un protocolo de especificación pública que fija el contrato entre una aplicación de IA y los sistemas que le aportan datos y acciones. Cada sistema se expone una sola vez mediante un servidor MCP, un programa que publica capacidades con un formato común. Cada aplicación incorpora un cliente MCP, el componente que habla el protocolo con un servidor. Las implementaciones pasan de N × M a N + M: tres clientes y cuatro servidores.

Figura 2. Con MCP, cada sistema de Nortia se expone una vez y cada aplicación implementa el protocolo una vez. El nodo central es un contrato, no un proceso.

Conviene leer la figura 2 con cuidado, porque es donde se suele exagerar. El nodo central es un contrato, no un intermediario desplegado. En ejecución, cada aplicación sigue conectándose a cada servidor que usa. Lo que desaparece es el trabajo repetido. La lógica de "buscar un pedido", su filtro por inquilino y su registro de auditoría se escriben una vez, en nortia-pedidos, y las tres aplicaciones los heredan. La cuarta aplicación no obliga a tocar ningún servidor.

Otro trabajo no desaparece. Alguien tiene que escribir y operar cuatro servidores, decidir qué aplicación accede a qué y con qué credenciales, y mantener el protocolo al día. Si en tu caso N es 1 y M es 2, la aritmética no sale a favor. Lo vemos más abajo.

Qué viaja entre cliente y servidor

En la práctica, MCP son mensajes JSON-RPC 2.0 con métodos de nombre fijo. El intercambio siguiente recorre el camino completo de la pregunta "¿dónde está el pedido PED-2026-004812?" en el asistente de soporte. Recórrelo paso a paso y fíjate en qué mensajes son MCP y cuáles no.

Figura 3. Del listado de tools al resultado de una llamada

Paso 1 de 7
Modelo
Aplicación (cliente MCP)
nortia-pedidos

Aplicación (cliente MCP) envía a nortia-pedidos: tools/list: qué sabes hacer

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "nortia-agente-soporte",
        "version": "2.1.0"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}

No hay conexión previa que negociar. La petición lleva en _meta la versión del protocolo y las capacidades del cliente, que son obligatorias. clientInfo es recomendable y solo informativo.

Tres hechos de este intercambio sostienen el resto del curso:

  • El servidor se describe en ejecución. El cliente no trae compilada la lista de operaciones, sino que la obtiene con tools/list. Añadir una tool a nortia-pedidos no exige desplegar de nuevo ninguna aplicación.
  • El modelo nunca toca el sistema. Entre la intención del modelo y PostgreSQL hay dos puntos de control que son código tuyo: la aplicación, que decide si cursa la llamada, y el servidor, que valida argumentos y permisos antes de ejecutar.
  • Cada petición se explica sola. La versión 2026-07-28 del protocolo no tiene handshake ni sesión. Por eso se repite el bloque _meta. Y por eso también puedes poner un servidor MCP detrás de un balanceador, como cualquier servicio HTTP sin estado. La lección 3 lo desarrolla.

Qué es MCP y qué no es

Quien ya ha integrado modelos suele poner dos objeciones: "eso ya lo hago con function calling" y "eso ya lo tengo con mi API REST". Ambas se responden mirando entre qué dos piezas actúa cada contrato.

Figura 4. Tres contratos distintos en una misma llamada. MCP ocupa solo el tramo intermedio.

Frente al function calling

El function calling es el contrato entre el modelo y la aplicación. Fija cómo se le describen funciones al modelo y cómo expresa el modelo que quiere llamar a una. Lo define cada proveedor de modelos y no dice nada sobre dónde vive el código de la función ni quién lo mantiene. Con function calling directo, ese código vive dentro de la aplicación.

MCP no lo sustituye: lo usa. En los pasos 3 y 4 de la figura 3 sigue habiendo function calling. Lo que MCP cambia es el origen de las funciones: dejan de estar escritas en cada aplicación y pasan a publicarlas servidores independientes, con un formato que no depende del proveedor del modelo. Por eso, más que elegir entre "function calling o MCP", conviene preguntarse "¿dónde quiero que vivan las funciones y quién responde de ellas?".

Frente a una API REST

MCP tampoco sustituye a la API de facturación. nortia-facturacion es un consumidor más de esa API. La diferencia está en para quién se diseña cada contrato. Una API REST la consume un programa cuyo autor leyó la documentación y fijó en el código qué endpoint llamar. Un servidor MCP lo consume un modelo que decide en cada conversación qué llamar, guiado únicamente por los nombres, descripciones y esquemas que recibe de tools/list.

Function calling directoAPI RESTMCP
Entre qué piezas Modelo y aplicación Dos programas cualesquiera Aplicación de IA y servidor que expone un sistema
Quién define el formato Cada proveedor de modelos Cada API Una especificación común
Dónde vive el código de la función En cada aplicación En el servicio En el servidor MCP, una vez
Cómo se descubren las operaciones Están escritas en la aplicación Documentación leída por una persona En ejecución, con tools/list
Quién elige qué operación llamar El modelo El programador El modelo, con las definiciones que publica el servidor

Lo que MCP no es

  • No es un framework de agentes ni un modelo. No decide qué tool llamar ni en qué orden. Eso lo hacen el modelo y la aplicación.
  • No es una capa de seguridad. La especificación obliga al servidor a validar entradas, controlar el acceso y limitar la tasa de llamadas, pero ese código lo escribes tú. La autorización es opcional en el protocolo. Cuando se usa sobre HTTP se basa en OAuth 2.1, y el curso la trata en el nivel Avanzado.
  • No certifica lo que declara un servidor. Las anotaciones de una tool, como readOnlyHint, son pistas que el servidor da sobre sí mismo. Lo mismo ocurre con clientInfo: es un dato autodeclarado que no sirve para decisiones de permisos.
  • No hace que una API mal diseñada sea útil para un modelo. Los servidores generados de forma automática, con una tool por cada endpoint, rinden peor que los diseñados a mano. El diseño de tools es trabajo aparte, y ocupa la primera lección del nivel Avanzado.

Las tres primitivas del servidor

Un servidor MCP puede exponer tres tipos de capacidad. El resto del nivel Básico dedica una lección a cada una; aquí basta con poder distinguirlas.

  • Tools: operaciones con argumentos tipados que el modelo puede pedir que se ejecuten. Pueden ser de lectura o de escritura, como buscar_pedido o emitir_abono.
  • Resources: datos identificados por una URI que el cliente lee para aportarlos como contexto, como un artículo de la base de conocimiento de soporte.
  • Prompts: plantillas de mensajes con argumentos que el servidor ofrece para arrancar una tarea de forma consistente, como la plantilla de respuesta a un retraso de entrega.
Figura 5. Las tres primitivas en nortia-soporte, con los métodos del protocolo que dan acceso a cada una.

La distinción tiene consecuencias de gobierno. Una tool puede cambiar datos, así que es donde se concentran los permisos por rol, la aprobación humana y la auditoría. En Nortia, emitir_abono requiere aprobación y buscar_pedido no. Un resource es una lectura con URI estable y su resultado se puede cachear. Un prompt no ejecuta nada: solo devuelve mensajes.

Quién habla MCP hoy

Un protocolo vale lo que valga su adopción, así que aquí van solo los hechos comprobados en la documentación de cada producto el 2 de octubre de 2026. La versión actual de la especificación, 2026-07-28, se publicó el 28 de julio de 2026.

ClienteTransportes documentadosVersión del protocolo documentada
Claude CodeStreamable HTTP, stdio, WebSocket2026-07-28 (por defecto desde la v2.1.274)
claude.ai y Claude Desktop (conectores)Streamable HTTPNo consta
API de Anthropic (MCP connector, en beta)Streamable HTTP; solo toolsNo consta
ChatGPT (modo desarrollador)Streamable HTTPNo consta
API de OpenAI (Responses) y CodexStreamable HTTP en la API; stdio y HTTP en CodexNo consta
Cursorstdio, Streamable HTTPNo consta
VS Code (GitHub Copilot)stdio, HTTPNo consta
Gemini CLI y API de GeminiStreamable HTTP; el CLI también stdioNo consta

El curso usa dos transportes: stdio para servidores locales lanzados como subproceso y Streamable HTTP para servidores remotos. La lección siguiente explica los dos.

De la tabla salen dos conclusiones y una cautela:

  • El lado cliente está repartido entre proveedores que compiten. Un servidor como nortia-pedidos no queda atado al proveedor de modelos que Nortia use hoy.
  • El lado servidor tiene soporte de plataforma. Cloudflare, Vercel, AWS, Google Cloud y Azure documentan cómo alojar servidores MCP. Según el anuncio de lanzamiento de la especificación, los SDK oficiales de TypeScript, Python, Go y C# soportan 2026-07-28. Existe además un MCP Registry oficial de metadatos de servidores públicos. Lo respaldan Anthropic, GitHub, PulseMCP y Microsoft, y sigue en preview.
  • La cautela: solo Claude Code documenta que habla 2026-07-28. De los demás no consta qué versión usan, y para este curso no se ha probado ninguno contra un servidor 2026-07-28. No es un bloqueo, porque un mismo servidor puede atender la versión actual y las versiones con handshake. Aun así, es una decisión que tomar al desplegar, y el curso la trata en el nivel Avanzado.

En producción

Mapa del curso

El curso tiene tres niveles y 32 lecciones. Todos los ejemplos usan Nortia, así que los servidores crecen de una lección a otra en lugar de empezar de cero.

NivelQué sabrás hacer al terminarLecciones
Básico (14) Entender el protocolo mensaje a mensaje y construir un servidor que funciona. Arquitectura y transportes (2). Cómo viaja una petición (3). Recursos, herramientas y prompts (4 a 6). Interacción con el usuario y extensiones (7). Un caso completo mensaje a mensaje (8). Servidores en TypeScript y en Python (9 y 10). Agentes con MCP (11). MCP sin programar (12). Beneficios, desafíos y evolución del protocolo (13 y 14).
Avanzado (6) Llevar un servidor a producción. Diseño de tools. APIs externas y autorización con OAuth 2.1. Bases de datos. Operaciones largas y tiempo real. Testing y depuración. Despliegue con Cloudflare como plataforma guiada, comparada con las demás.
Experto (6) Operar MCP a escala de empresa. Gateways y arquitecturas distribuidas. Modelo de amenazas. Rendimiento y coste de contexto. Sistemas multi-agente. Multi-tenant, gobierno y cumplimiento. Caso de estudio: la plataforma MCP de Nortia.

Las 17 lecciones del nivel Básico son gratuitas con tu cuenta. Si vienes de una versión anterior del protocolo, la lección 3 es la que concentra los cambios.

Recuerda

  • MCP convierte N × M integraciones en N clientes y M servidores. Reduce implementaciones repetidas; no reduce las decisiones de acceso ni el trabajo de operar los servidores.
  • MCP no sustituye al function calling ni a tu API REST. Actúa entre la aplicación de IA y el servidor que envuelve el sistema. Los otros dos contratos siguen ahí.
  • El modelo no ejecuta nada. Emite una petición de llamada. La aplicación la convierte en tools/call y el servidor decide si la ejecuta.
  • Un servidor expone tools (operaciones), resources (datos con URI) y prompts (plantillas de mensajes), y se describe en ejecución con los métodos */list.
  • En la versión 2026-07-28 no hay handshake ni sesión: cada petición lleva versión y capacidades en _meta.

Desafío: inventario de integración de Nortia

Operaciones de Nortia quiere una cuarta aplicación de IA: un asistente para responsables de almacén. Debe poder:

  • (a) consultar las existencias de un artículo en MAD-01, BCN-02 o MEX-01
  • (b) abrir una incidencia de entrega sobre un pedido
  • (c) leer el procedimiento interno de recuento de inventario, un documento que cambia un par de veces al año
  • (d) redactar el aviso de rotura de stock a un cliente con el tono y los datos que exige el equipo de soporte.

Sin escribir código de servidor, entrega:

  1. Una tabla con las cuatro capacidades. Para cada una: en cuál de los cuatro servidores de Nortia vive, si es tool, resource o prompt, y si necesita aprobación humana o un permiso por rol, con el motivo.
  2. El recuento de trabajo: qué habría que implementar con integraciones punto a punto y qué con los servidores MCP ya existentes. Indica qué trabajo no desaparece en ninguno de los dos casos.
  3. La petición tools/call completa de la capacidad (a) para el almacén BCN-02, con todos los campos que has visto en la figura 3. La tool se llama consultar_existencias; los nombres de sus argumentos los decides tú.
  4. Una frase que explique de dónde obtiene el servidor que el usuario pertenece al inquilino de España, y por qué no puede ser un argumento de la tool.

Criterio de éxito:

  • Ninguna capacidad de solo lectura de un documento estable está modelada como tool sin justificarlo.
  • La única escritura (b) tiene control de permisos razonado.
  • La petición del punto 3 incluye jsonrpc, id, method, params.name, params.arguments y un _meta con io.modelcontextprotocol/protocolVersion y io.modelcontextprotocol/clientCapabilities.
  • El punto 4 sitúa el inquilino en la credencial verificada por el servidor.

Temario del curso