Protocolo MCP: estándar de comunicación para modelos de lenguaje

Clase 5 de 26Curso de MCP (Model Context Protocol)

El Model Context Protocol surgió como respuesta a la necesidad de estandarizar la comunicación entre modelos de lenguaje y sistemas externos, similar a como el Language Server Protocol revolucionó la integración de herramientas de desarrollo con editores de código.

Arquitectura MCP: Los Componentes Fundamentales

Imaginen que están construyendo un puente entre dos mundos: el mundo de los modelos de lenguaje y el mundo de sus aplicaciones. El Model Context Protocol es precisamente ese puente. Su función principal es permitir que los LLMs accedan a herramientas, datos externos y contexto de manera segura, trazable y reproducible.

¿Quiénes lo utilizan? Principalmente desarrolladores que trabajan con herramientas como Claude Desktop, Ollama para servir modelos localmente, y Cursor, ese editor de código inteligente que muchos ya conocen. Pero vamos más allá de los nombres. Lo importante es entender cómo funciona esta arquitectura.

Los Tres Pilares: Cliente, Servidor y Transport

En el corazón de MCP encontramos tres componentes esenciales que trabajan en armonía. Primero, el cliente MCP. Este es quien inicia toda la conversación. Piensen en él como la aplicación que ustedes usan: puede ser un editor de código, una herramienta de desarrollo, cualquier interfaz que necesite comunicarse con un modelo de lenguaje.

¿Qué hace exactamente este cliente? Envía solicitudes para ejecutar herramientas, consulta información, lanza prompts al modelo. Todo esto lo hace generando solicitudes estructuradas en formato JSON-RPC. Sí, JSON-RPC 2.0 para ser precisos, y esto no es casualidad.

Del otro lado tenemos al servidor MCP. Este es quien tiene los recursos: las herramientas, el contexto, los archivos que el cliente necesita. El servidor evalúa cada solicitud, ejecuta las herramientas necesarias y empaqueta las respuestas, también en formato JSON-RPC. Es quien gestiona los modelos de lenguaje o sistemas basados en IA.

La Magia de JSON-RPC 2.0

¿Por qué JSON-RPC 2.0? Esta elección no fue arbitraria. MCP se construye sobre este protocolo porque proporciona exactamente lo que necesitamos: estructura, claridad y flexibilidad. Permite definir métodos, parámetros y respuestas de manera organizada.

Piensen en esto: cuando escriben un comando en Cursor, ese comando se convierte en una solicitud JSON-RPC. Viaja hasta el servidor, que puede ser Claude u Ollama, se procesa, y regresa una respuesta estructurada. Todo esto con comunicación bidireccional, identificación única para cada mensaje, soporte para notificaciones y una clara separación entre errores y respuestas exitosas.

Aquí hay una diferencia crucial que deben entender. Una petición incluye un campo "id" único. Espera respuesta. El servidor debe contestar con el mismo "id". Es como enviar una carta certificada: sabes que llegó y recibes confirmación.

Una notificación, en cambio, no tiene "id" o su valor es nulo. No espera respuesta. Es como dejar una nota en el escritorio de alguien: informas algo pero no necesitas confirmación. Esta distinción es fundamental para diseñar aplicaciones eficientes.

El Flujo de Comunicación

Veamos cómo fluyen los datos desde que ustedes interactúan hasta que reciben una respuesta. Primero, interactúan con una interfaz. La aplicación toma esa interacción y genera una solicitud JSON-RPC con tres elementos clave: el método a ejecutar, los parámetros necesarios y un identificador único.

Esta solicitud viaja al servidor mediante algún mecanismo de transporte. ¿Cuáles tenemos disponibles? Stdio para herramientas de línea de comandos, perfecto cuando trabajas con scripts. HTTP/1.1 y HTTP/2 para servicios web y comunicación asincrónica. Y WebSockets, aunque todavía está en propuesta, será ideal para comunicación bidireccional persistente.

El servidor recibe la solicitud, identifica el método, valida los parámetros, ejecuta la función. Luego genera una respuesta con el resultado o un error, siempre incluyendo el mismo "id" de la solicitud original. Esta respuesta regresa al cliente, que actualiza la interfaz.

Identificación y Manejo de Errores

¿Por qué es tan importante ese "id" del que hablamos? Imaginen que envían tres solicitudes simultáneas: analizar código, buscar documentación y ejecutar tests. Las respuestas pueden llegar en cualquier orden. Sin identificadores únicos, sería imposible saber qué respuesta corresponde a qué solicitud.

Este mecanismo permite correlación de solicitudes y respuestas, comunicación asíncrona sin bloqueos, manejo preciso de errores y detección de solicitudes duplicadas. Es como tener números de seguimiento para cada paquete que envías.

Y hablando de errores, MCP los gestiona de forma elegante. Cuando algo sale mal, el protocolo devuelve un mensaje de error claramente identificable, separado de las respuestas exitosas. No hay confusión posible entre un error y datos válidos.

MCP en el Ecosistema

¿Cómo se diferencia MCP de otras soluciones? A diferencia de LSP que se enfoca en lenguajes de programación estáticos, MCP está diseñado específicamente para modelos de lenguaje. Tomó la inspiración de LSP pero la adaptó a los retos de la IA.

Comparado con LangChain, que es una biblioteca para definir cadenas de pensamiento, MCP es un protocolo interoperable. Ofrece una interfaz estandarizada basada en JSON-RPC que facilita la integración entre sistemas diversos.

Y a diferencia de ReAct, que es un patrón de prompting, MCP proporciona una estructura formal para la comunicación. No es solo una forma de pensar, es una forma concreta de comunicarse.

La arquitectura MCP representa un paso significativo hacia la estandarización en el mundo de los LLMs. Al proporcionar una estructura clara con cliente, servidor y transport, junto con la solidez de JSON-RPC 2.0, MCP facilita la construcción de aplicaciones robustas que integran modelos de lenguaje. Ya sea que estén usando Cursor para editar código, Ollama para modelos locales o Claude Desktop para interacciones avanzadas, todos hablan el mismo idioma gracias a MCP. Es el puente que conecta herramientas dispares en un ecosistema coherente y funcional.