Herramientas para su LLM: una inmersión profunda en MCP

técnica que puede convertir a los LLM en agentes reales. Esto se debe a que MCP proporciona herramientas a su LLM que puede utilizar para recuperar información en vivo o realizar acciones en su nombre.

Como todas las demás herramientas de la caja de herramientas, creo que para aplicar MCP de forma eficaz, es necesario comprenderlo a fondo. Así que lo abordé de mi forma habitual: rodearlo con las manos, pincharlo, desarmarlo, volver a armarlo y hacerlo funcionar nuevamente.

Los objetivos de esta semana:

obtener una comprensión sólida de MCP; ¿qué es? construir un servidor MCP y conectarlo a un LLM comprender cuándo usar MCP explorar consideraciones sobre MCP

1) ¿Qué es el MCP?

MCP (Protocolo de contexto modelo) es un protocolo diseñado para ampliar los clientes LLM. Un cliente LLM es cualquier cosa que ejecute un LLM: piense en Claude, ChatGPT o su propio chatbot agente LangGraph. En este artículo usaremos Claude Desktop como cliente LLM y construiremos un servidor MCP que amplíe sus capacidades.

Primero, comprendamos qué es realmente MCP.

Una analogía útil

Piense en MCP de la misma manera que piensa en las extensiones del navegador. Una extensión de navegador agrega capacidades a su navegador. Un servidor MCP agrega capacidades a su LLM. En ambos casos, proporciona un pequeño programa que el cliente (navegador o LLM) puede cargar y comunicarse para que haga más.

Este programa se llama servidor MCP y los clientes LLM pueden usarlo, por ejemplo, para recuperar información o realizar acciones.

¿Cuándo un programa es un servidor MCP?

Cualquier programa puede convertirse en un servidor MCP siempre que implemente el protocolo de contexto modelo. El protocolo define:

qué funciones debe exponer el servidor (capacidades) cómo deben describirse estas funciones (metadatos de herramientas) cómo el LLM puede llamarlas (con formatos de solicitud JSON) cómo debe responder el servidor (con formatos de resultados JSON)

Un servidor MCP es cualquier programa que sigue las reglas de mensajes MCP. Tenga en cuenta que el idioma, el tiempo de ejecución o la ubicación no importan.

Capacidades clave:

declarar herramientas aceptar una solicitud de llamada de herramienta ejecutar la función solicitada devolver un resultado o error

Ejemplo de un mensaje de llamada a una herramienta:

{ “method”: “tools/call”, “params”: { “name”: “get_weather”, “arguments”: {“city”: “Groningen”} } }

Enviar este JSON significa: “llamar a la función get_weather con argumentos ciudad=’Groningen'”.

2) Crear un servidor MCP

Dado que cualquier programa puede ser un servidor MCP, creemos uno.

Imaginemos que trabajamos para un cine y queremos que los agentes ayuden a la gente a comprar entradas. De esta manera, un usuario puede decidir qué película elegir chateando con ChatGPT o indicándole a Claude que compre entradas.

Por supuesto, estos LLM no están al tanto de lo que sucede en nuestro cine, por lo que necesitaremos exponer la API de nuestro cine a través de MCP para que los LLM puedan interactuar con ella.

El servidor MCP más simple posible

Usaremos fastmcp, un paquete de Python que encapsula funciones de Python para que cumplan con las especificaciones de MCP. Podemos “presentar” este código al LLM para que conozca las funciones y pueda llamarlas.

from fastmcp import FastMCP mcp = FastMCP(“example_server”) @mcp.tool def list_movies() -> str: “”” Lista las películas que se están reproduciendo actualmente “”” # Simular una solicitud GET a nuestro punto final /movies return [“Shrek”, “Inception”, “The Matrix”, “Lord of the Rings”]

si __nombre__ == “__main__”: mcp.run()

El código anterior define un servidor y registra una herramienta. La cadena de documentación y las sugerencias de tipo ayudan a fastmcp a describir la herramienta al cliente LLM (según lo requiere MCProtocol). El agente decide en base a esta descripción si la función es adecuada para cumplir la tarea que se propone realizar.

Conexión de Claude Desktop al servidor MCP

Para que nuestro LLM esté “consciente” del servidor MCP, debemos decirle dónde encontrar el programa. Registramos nuestro nuevo servidor en Claude Desktop abriendo Configuración -> Desarrollador y actualizamos claude_desktop_config.json para que se vea así:

{ “mcpServers”: { “cinema_server”: { “command”: “/Users/mikehuls/explore_mcp/.venv/bin/python”, “args”: [
“/Users/mikehuls/explore_mcp/cinema_mcp.py”
]
} } }

Ahora que nuestro servidor MCP está registrado, Claude puede usarlo. Llama a list_movies() por ejemplo. Las funciones de los servidores MCP registrados se convierten en herramientas de primera clase que el LLM puede decidir utilizar.

Charlando con nuestro agente (imagen del autor)

Como puede ver, Claude ha ejecutado la función desde nuestro servidor MCP y tiene acceso al valor resultante. Muy fácil en tan sólo unas pocas líneas de código.

Con unas pocas líneas más, envolvemos aún más puntos finales de API en nuestro servidor MCP y permitimos que el LLM llame a funciones que muestran los tiempos de evaluación e incluso le permitimos al LLM realizar acciones en nuestro nombre al hacer una reserva:

Permitir que nuestro agente reserve un asiento (imagen del autor)

Tenga en cuenta que, aunque los ejemplos se simplifican deliberadamente, el principio sigue siendo el mismo: permitimos que nuestro LLM recupere información y actúe en nuestro nombre, a través de la API de cine.

3) Cuándo utilizar MCP

MCP es ideal cuando:

Quiere que un LLM acceda a datos en vivo Quiere que un LLM realice acciones (crear tareas, recuperar archivos, escribir registros) Quiere exponer los sistemas internos de una manera controlada Quiere compartir sus herramientas con otros como un paquete que pueden conectar a su LLM

Los usuarios se benefician porque MCP permite que su LLM se convierta en un asistente más poderoso.

Los proveedores se benefician porque MCP les permite exponer sus sistemas de forma segura y consistente.

Un patrón común es un “conjunto de herramientas” que expone las API de backend. En lugar de hacer clic en las pantallas de la interfaz de usuario, un usuario puede pedirle a un asistente que se encargue del flujo de trabajo por él.

4) Consideraciones

Desde su lanzamiento en noviembre de 2024, MCP ha sido ampliamente adoptado y rápidamente se convirtió en la forma predeterminada de conectar agentes de IA a sistemas externos. Pero no está exento de compensaciones; MCP introduce gastos generales estructurales y riesgos de seguridad reales que, en mi opinión, los ingenieros deben tener en cuenta antes de usarlo en producción.

a) Seguridad

Si descarga un servidor MCP desconocido y lo conecta a su LLM, efectivamente le está otorgando a ese servidor acceso a la red y a los archivos, acceso a las credenciales locales y permisos de ejecución de comandos. Una herramienta maliciosa podría:

leer o eliminar archivos extraer datos privados (por ejemplo, claves .ssh) escanear su red modificar sistemas de producción robar tokens y claves

MCP es tan seguro como el servidor en el que elige confiar. Sin barreras de seguridad, básicamente le estás dando a un LLM control total sobre tu computadora. Hace que sea muy fácil sobreexponer ya que puedes agregar herramientas fácilmente.

La analogía de las extensiones de navegador también se aplica aquí: la mayoría son seguras, pero las maliciosas pueden causar daños reales. Al igual que las extensiones del navegador, utilice fuentes confiables como repositorios verificados, inspeccione el código fuente si es posible y ejecute la zona de pruebas cuando no esté seguro. Haga cumplir permisos estrictos y políticas de privilegios de arrendamiento.

b) Ventana de contexto inflada, ineficiencia del token y latencia

Los servidores MCP describen cada herramienta en detalle: nombres, esquemas de argumentos, descripciones y formatos de resultados. El cliente LLM carga todos estos metadatos por adelantado en el contexto del modelo para saber qué herramientas existen y cómo usarlas.

Esto significa que si su agente utiliza muchas herramientas o esquemas complejos, el mensaje puede crecer significativamente. Esto no sólo utiliza una gran cantidad de tokens, sino que también utiliza el espacio restante para el historial de conversaciones y las instrucciones específicas de las tareas. Cada herramienta que expone permanentemente consume una porción del contexto disponible.

Además, cada llamada a la herramienta introduce una sobrecarga de razonamiento, análisis de esquemas, reasignación de contexto y un viaje de ida y vuelta completo desde el modelo -> cliente MCP -> servidor MCP -> de regreso al modelo. Esto es demasiado pesado para canalizaciones sensibles a la latencia.

c) La complejidad se traslada al modelo

El LLM debe tomar todas las decisiones difíciles:

si llamar a una herramienta qué herramienta llamar qué argumentos usar

Todo esto sucede dentro del razonamiento del modelo y no a través de una lógica de orquestación explícita. Aunque inicialmente esto parece mágicamente conveniente y eficiente, a escala puede volverse impredecible, más difícil de depurar y más difícil de garantizar de manera determinista.

Conclusión

MCP es simple y poderoso al mismo tiempo. Es una forma estandarizada de permitir que los LLM llamen a programas reales. Una vez que un programa implementa MCP, cualquier cliente LLM compatible puede usarlo como una extensión. Esto abre la puerta a asistentes que pueden consultar API, realizar tareas e interactuar con sistemas reales de forma estructurada.

Pero un gran poder conlleva una gran responsabilidad. Trate los servidores MCP con la misma precaución que el software que tiene acceso total a su máquina. Su diseño también presenta implicaciones para el uso de tokens, la latencia y la tensión en el LLM. Estas compensaciones pueden socavar el beneficio principal por el que MCP es conocido: convertir a los agentes en herramientas eficientes del mundo real.

Cuando se utiliza de forma intencionada y segura, MCP ofrece una base limpia para crear asistentes agentes que realmente puedan hacer cosas en lugar de simplemente hablar de ellas.

Espero que este artículo haya sido tan claro como pretendía, pero si este no es el caso, hágame saber qué puedo hacer para aclararlo más. Mientras tanto, consulte mis otros artículos sobre todo tipo de temas relacionados con la programación.

¡Feliz codificación!

—Mike

Pd: ¿te gusta lo que estoy haciendo? ¡Sígueme!