¿Qué es el Protocolo de Contexto de Modelo (MCP)?

¿Por qué se creó MCP? La necesidad de una capa de integración estándar

El Protocolo de Contexto de Modelo (MCP) se creó para abordar un desafío fundamental en la creación de aplicaciones de AI agénticas: conectar modelos de lenguaje grandes (LLM) aislados con el mundo exterior. En forma predeterminada, los LLM son potentes motores de razonamiento, pero su conocimiento es estático, está vinculado con una fecha tope de capacitación, y carecen de la capacidad nativa para acceder a datos en vivo o ejecutar acciones en sistemas externos.

Tradicionalmente, la conexión de los LLM a sistemas externos se ha hecho a través de integraciones de API directas y personalizadas. Este enfoque es efectivo, pero requiere que cada desarrollador de aplicaciones aprenda sobre la API específica de cada herramienta, escriba código para manejar las búsquedas y parsear los resultados, y mantenga esa conexión a lo largo del tiempo. A medida que crece la cantidad de aplicaciones de AI y las herramientas disponibles, esto presenta una oportunidad para un método más estandarizado y eficiente.

El MCP ofrece este protocolo estandarizado y se inspira en estándares probados, como REST para servicios web y el Language Server Protocol (LSP) para las herramientas de desarrollador. En lugar de obligar a cada desarrollador de aplicaciones a convertirse en un experto en la API de cada herramienta, el MCP establece un lenguaje común para esta capa de conectividad.

Esto crea una clara separación de responsabilidades. Abre la puerta para que los proveedores de plataformas y herramientas expongan sus servicios a través de un único servidor MCP reutilizable que es inherentemente compatible con los LLM. Entonces, la responsabilidad de mantener la integración puede pasar del desarrollador individual de aplicaciones de AI al propietario del sistema externo. Esto fomenta el uso de un ecosistema sólido e interoperable en el que una aplicación compatible puede conectarse con una herramienta compatible, lo que simplifica significativamente el desarrollo y el mantenimiento.

diagram-what-is-mcp-01.png

Cómo funciona el MCP: La arquitectura central

Arquitectura del MCP

El MCP opera en un modelo cliente-servidor diseñado para conectar un motor de razonamiento (el LLM) con un conjunto de capacidades externas. La arquitectura comienza con el LLM y revela progresivamente los componentes que le permiten interactuar con el mundo exterior.

diagram-what-is-mcp-02.png

Esta arquitectura consta de tres componentes clave:

  1. Los hosts son aplicaciones de LLM que quieren acceder a los datos a través del MCP (por ejemplo, Claude Desktop, IDEs, agentes de AI).
  2. Los servidores son programas ligeros que exponen cada uno capacidades específicas a través del MCP.
  3. Los clientes mantienen conexiones individuales con los servidores, dentro de la aplicación host.

Clientes o hosts del MCP

diagram-what-is-mcp-03.png

Los clientes o hosts del MCP son las aplicaciones que orquestan la interacción entre los LLM y uno o más servidores MCP. El cliente es fundamental; contiene la lógica específica de la app. Mientras que los servidores proporcionan las capacidades básicas, el cliente es el responsable de usarlas. Para ello, utiliza las siguientes funcionalidades:

  • Ensamblaje de indicaciones: Reunir contexto de distintos servidores para crear la indicación final y efectiva para el LLM
  • Gestión de estados: Mantener el historial conversacional y el contexto del usuario en múltiples interacciones
  • Orquestación: Decidir qué servidores consultar para qué información y ejecutar la lógica cuando un LLM decide usar una herramienta

Los clientes del MCP se conectan a los servidores mediante solicitudes de red estándar (generalmente, a través de HTTPS) a un endpoint de servidor conocido. El poder del protocolo es que estandariza el contrato de comunicación entre ellos. El protocolo en sí es independiente del lenguaje y tiene un formato basado en JSON. Por lo tanto, cualquier cliente, independientemente del lenguaje en el que se crea, puede comunicarse correctamente con cualquier servidor.

Ejemplos de clientes de la especificación del MCP

 

Servidores MCP

Un servidor MCP es un programa de backend que actúa como un envoltorio estandarizado para una fuente de datos o herramienta específica. Implementa la especificación del MCP para exponer capacidades, como herramientas ejecutables o recursos de datos, a través de la red. Esencialmente, traduce el protocolo único de un servicio específico (como una consulta de base de datos o una API REST de terceros) al lenguaje común del MCP, lo que lo hace comprensible para cualquier cliente del MCP.

Ejemplos de servidores de la especificación del MCP

Manos a la obra: ¿Cómo puedes crear tu primer servidor MCP?

Tomemos como ejemplo un servidor que expone herramientas (más adelante, habrá más información sobre qué son las herramientas). Este servidor necesita manejar dos solicitudes principales del cliente:

  1. Instala el SDK.
    # Python
    pip install mcp
    
    # Node.js
    npm install @modelcontextprotocol/sdk
    
    # O explora la especificación
    git clone https://github.com/modelcontextprotocol/specification
    
  2. Crea tu primer servidor.
    from mcp.server.fastmcp import FastMCP
    import asyncio
    
    mcp = FastMCP("weather-server")
    
    @mcp.tool()
    async def get_weather(city: str) -> str:
        """Obtener el tiempo para una ciudad."""
        return f"Tiempo en {city}: Soleado, 72°F"
    
    if __name__ == "__main__":
        mcp.run()
    
    
    
  3. Conéctate a Claude Desktop.
    {
      "mcpServers": {
        "weather": {
          "command": "python",
          "args": ["/full/path/to/weather_server.py"],
          "env": {}
        }
      }
    }
    
    

SDKs oficiales y recursos

Puedes comenzar a crear tus propios clientes y servidores MCP utilizando los SDK oficiales open source:

Herramientas MCP

Una herramienta es una capacidad ejecutable específica que un servidor MCP expone a un cliente. A diferencia de los recursos de datos pasivos (como un archivo o documento), las herramientas representan acciones que el LLM puede decidir invocar, como enviar un correo electrónico, crear un ticket de proyecto o consultar una base de datos activa.

Las herramientas interactúan con los servidores de la siguiente manera: un servidor MCP declara las herramientas que ofrece. Por ejemplo, un servidor de Elastic expondría una herramienta `list_indices`, que define su nombre, propósito y parámetros requeridos (por ejemplo, `list_indices`, `get_mappings`, `get_shards` y `search`).

El cliente se conecta con el servidor y descubre estas herramientas disponibles. El cliente presenta las herramientas disponibles al LLM como parte de su mensaje de sistema o contexto. Cuando la salida del LLM indica la intención de usar una herramienta, el cliente parsea esto y realiza una solicitud formal al servidor adecuado para ejecutar esa herramienta con los parámetros especificados.

Ejemplo de patrones de herramientas de la especificación MCP

Práctica: Implementación de un servidor MCP de bajo nivel

Si bien el ejemplo de bajo nivel es útil para entender la mecánica del protocolo, la mayoría de los desarrolladores usarán un SDK oficial para crear servidores. Los SDK manejan el texto estándar del protocolo, como el parseo de mensajes y el enrutamiento de solicitudes, lo que te permite concentrarte en la lógica básica de tus herramientas.

En el siguiente ejemplo, se usa el SDK oficial de Python para MCP para crear un servidor simple que expone una herramienta get_current_time. Este enfoque es significativamente más conciso y declarativo que la implementación de bajo nivel.

import asyncio
import datetime
from typing import AsyncIterator

from mcp.server import (
    MCPServer,
    Tool,
    tool,
)

# --- Implementación de herramientas ---
# El decorador @tool del SDK maneja el registro y la generación de esquemas.
# Definimos una función asíncrona simple que se expondrá como una herramienta del MCP.

@tool
async def get_current_time() -> AsyncIterator[str]:
    """
    Muestra la fecha y hora UTC actuales como un texto ISO 8601.

    """
    
    Esta cadena de documentación se usa automáticamente como descripción de la herramienta para el LLM.
    """
 # El SDK espera un iterador asíncrono, por lo que producimos el resultado.
    yield datetime.datetime.now(datetime.timezone.utc).isoformat()


# --- Definición del servidor ---
# Creamos una instancia del MCPServer, pasándole las herramientas que queremos exponer.
# El SDK descubre automáticamente las funciones decoradas con @tool.

SERVER = MCPServer(
    tools=[
        # El SDK recoge automáticamente nuestra función decorada.
        Tool.from_callable(get_current_time),
 ],
)

# --- Bloque de ejecución principal ---
# El SDK proporciona un punto de entrada principal para ejecutar el servidor.
# Esto maneja toda la lógica de comunicación subyacente (stdio, HTTP, etc.).

async def main() -> None:
    """Ejecuta el servidor de herramientas simple."""
    await SERVER.run()


if __name__ == "__main__":
    asyncio.run(main())



Este ejemplo práctico demuestra el poder de usar un SDK para construir servidores MCP:

  1. @tool Decorador: este decorador registra automáticamente la función get_current_time como una herramienta del MCP. Inspecciona la firma y la cadena de documentación de la función para generar el esquema y la descripción necesarios para el protocolo, lo que te evita tener que escribirlo manualmente.
  2. Instancia de MCPServer: La clase MCPServer es el núcleo del SDK. Tú le proporcionas una lista de las herramientas que quieres exponer, y se encarga del resto.
  3. SERVER.run(): Este único comando inicia el servidor y gestiona toda la comunicación de bajo nivel, incluido el manejo de diferentes métodos de transporte, como stdio o HTTP.

Como puedes ver, el SDK elimina casi toda la complejidad del protocolo, lo que te permite definir herramientas potentes con solo unas pocas líneas de código Python.

Las 3 primitivas básicas

diagram-what-is-mcp-04.png

El MCP estandariza cómo un LLM interactúa con el mundo exterior al definir tres primitivas básicas que un servidor puede exponer. Estas primitivas proporcionan un sistema completo para conectar los LLM con funcionalidades externas.

  1. Recursos: proporcionando contexto
    • Función: Acceso a datos
    • Analogía: Endpoints GET
    • Los recursos son el mecanismo principal para proporcionar contexto a un LLM. Representan fuentes de datos que el modelo puede recuperar y usar para informar sus respuestas, como documentos, registros de bases de datos o los resultados de una consulta de búsqueda. Por lo general, son operaciones de solo lectura.
  2. Herramientas: Habilitar la acción
    • Función: Acciones y cálculos
    • Analogía: Endpoints POST o PUT
    • Las herramientas son funciones ejecutables que permiten a un LLM realizar acciones y tener un impacto directo en sistemas externos. Esto es lo que permite a un agente ir más allá de la simple recuperación de datos y realizar acciones tales como enviar un correo electrónico, crear un ticket de proyecto o llamar a una API de terceros.
  3. Indicaciones: Guiando la interacción
    • Función: Plantillas de interacción
    • Analogía: Recetas de flujos de trabajo
    • Las indicaciones son plantillas reutilizables que guían la interacción del LLM con un usuario o un sistema. Permiten a los desarrolladores estandarizar flujos conversacionales comunes o complejos, lo que garantiza un comportamiento más constante y confiable del modelo.

El Protocolo de Contexto de Modelo en sí

Conceptos centrales

El MCP proporciona una forma estandarizada para que las aplicaciones de LLM (hosts) se integren con datos y capacidades externas (servidores). La especificación se basa en el formato de mensajes JSON-RPC 2.0 y define un conjunto de componentes obligatorios y opcionales para permitir interacciones enriquecidas y con estado.

Protocolo y características centrales

En su núcleo, el MCP estandariza la capa de comunicación. Todas las implementaciones deben admitir el protocolo base y la gestión del ciclo de vida.

  • Protocolo base: Toda la comunicación usa mensajes estándar JSON-RPC (Solicitudes, Respuestas y Notificaciones).
  • Características del servidor: Los servidores pueden ofrecer cualquier combinación de las siguientes capacidades a los clientes:
    • Recursos: Datos contextuales para que el usuario o modelo los consuma
    • Indicaciones: Mensajes y flujos de trabajo con plantillas
    • Herramientas: Funciones ejecutables para que el LLM invoque
  • Características del cliente: Los clientes pueden ofrecer estas características a los servidores para flujos de trabajo bidireccionales más avanzados:
    • Muestreo: Permite que un servidor inicie comportamientos agénticos o interacciones recursivas con los LLM
    • Elicitación: Permite que un servidor solicite información adicional al usuario

Protocolo base de MCP

El MCP se crea sobre una base necesaria de un protocolo base y la gestión del ciclo de vida. Toda comunicación entre clientes y servidores debe cumplir con la especificación JSON-RPC 2.0, que define tres tipos de mensajes:

  • Solicitudes: Enviadas para iniciar una operación. Requieren una cadena o un número entero únicos como id para el seguimiento y no deben reutilizar un id en la misma sesión.
  • Respuestas: Enviadas en respuesta a una solicitud. Deben incluir el identificador de la solicitud original y contener un objeto result para las operaciones exitosas o un objeto error para los fallos.
  • Notificaciones: Mensajes unidireccionales enviados sin un identificador que no requieren una respuesta del receptor.

Características del cliente: Habilitar flujos de trabajo avanzados

Para lograr una comunicación bidireccional más compleja, los clientes también pueden ofrecer características a los servidores:

  • Muestreo: El muestreo permite que un servidor solicite una inferencia del LLM a través del cliente. Esta es una potente característica para habilitar flujos de trabajo agénticos de varios pasos en los que una herramienta podría necesitar "hacer una pregunta" al LLM para obtener más información antes de completar su tarea.
  • Elicitación: La elicitación proporciona un mecanismo formal para que un servidor te solicite más información al usuario final. Esto es fundamental para las herramientas interactivas que pueden necesitar aclaración o confirmación antes de proceder con una acción.

Características del servidor: Exponer las capacidades

Los servidores exponen sus capacidades a los clientes a través de un conjunto de características estandarizadas. Un servidor puede implementar cualquier combinación de lo siguiente:

  • Herramientas: Las herramientas son el mecanismo principal para permitir que un LLM lleve a cabo acciones. Son funciones ejecutables que un servidor expone, lo que permite que el LLM interactúe con sistemas externos, como llamar a una API de terceros, consultar una base de datos o modificar un archivo.
  • Recursos: Los recursos representan fuentes de datos contextuales que un LLM puede recuperar. A diferencia de las herramientas, que realizan acciones, los recursos se usan principalmente para la recuperación de datos de solo lectura. Son el mecanismo para conectar un LLM con información externa y en tiempo real, lo que forma una parte clave de los pipelines de RAG avanzados.
  • Indicaciones: Los servidores pueden exponer plantillas de indicaciones predefinidas que un cliente puede usar. Esto permite la estandarización y el intercambio de indicaciones comunes, complejas o muy optimizadas, lo que garantiza que las interacciones sean coherentes.

Seguridad y confianza

La especificación pone un fuerte énfasis en la seguridad, delineando los principios clave que los implementadores deben seguir. El protocolo en sí no puede hacer cumplir estas reglas; la responsabilidad recae en el desarrollador de la aplicación.

  • Consentimiento y control del usuario: Los usuarios deben dar su consentimiento explícito y mantener el control sobre todo el acceso a los datos y las invocaciones de herramientas. Las UI claras para la autorización son esenciales.
  • Privacidad de los datos: Los hosts no deben transmitir datos de usuario a un servidor sin consentimiento explícito y deben implementar controles de acceso adecuados.
  • Seguridad de la herramienta: La invocación de herramientas representa la ejecución de código arbitrario y debe tratarse con precaución. Los hosts deben obtener el consentimiento explícito del usuario antes de invocar cualquier herramienta.

¿Por qué es tan importante el MCP?

El beneficio central del MCP radica en su estandarización de la capa de comunicación e interacción entre los modelos y las herramientas. Esto crea un ecosistema predecible y confiable para los desarrolladores. Entre las áreas clave de estandarización, se incluyen las siguientes:

  • API de conector uniforme: Una interfaz única y coherente para conectar cualquier servicio externo
  • Contexto estandarizado: Un formato de mensaje universal para transmitir información crítica como el historial de sesiones, incrustaciones, salida de herramientas y memorias a largo plazo
  • Protocolo de invocación de herramientas: Patrones de solicitud y respuesta acordados para llamar a herramientas externas, lo que garantiza la previsibilidad
  • Control de flujo de datos: Reglas integradas para filtrar, priorizar, transmitir y procesar por batch el contexto para optimizar la construcción de solicitudes
  • Patrones de seguridad y autenticación: Hooks comunes para la autenticación mediante clave de API o OAuth, limitación de velocidad y encriptación para proteger el intercambio de datos
  • Reglas de ciclo de vida y enrutamiento: Convenciones que definen cuándo recuperar el contexto, cuánto tiempo almacenarlo en caché y cómo enrutar los datos entre sistemas
  • Metadatos y observabilidad: Campos de metadatos unificados que permiten llevar logging, métricas y trazado distribuido constante en todos los modelos y herramientas conectados
  • Puntos de extensión: Hooks definidos para agregar lógica personalizada, como pasos previos y posteriores al procesamiento, reglas de validación personalizadas y registro de plugins

A escala: resolver el problema de "M×N" o la pesadilla de la integración de escalado multiplicativo

En el panorama de AI en rápida expansión, los desarrolladores se enfrentan a un importante desafío de integración. Las aplicaciones de AI (M) necesitan acceder a numerosas fuentes de datos y herramientas externas (N), desde bases de datos y motores de búsqueda hasta API y repositorios de código. Sin un protocolo estandarizado, los desarrolladores se ven obligados a resolver el "problema de M×N", creando y manteniendo una integración única y personalizada para cada par de aplicación a fuente.

Este enfoque lleva a tener varios problemas críticos:

  • Esfuerzos redundantes de los desarrolladores: Los equipos resuelven repetidamente los mismos problemas de integración para cada nueva aplicación de AI, lo que hace que se desperdicien tiempo y recursos valiosos.
  • Complejidad abrumadora: Diferentes fuentes de datos manejan funciones similares de maneras únicas, lo que crea una capa de integración compleja e inconsistente.
  • Mantenimiento excesivo: La falta de estandarización da como resultado un ecosistema frágil de integraciones personalizadas. Una actualización o cambio menor en la API de una sola herramienta puede interrumpir las conexiones, lo que requiere un mantenimiento constante y reactivo.

El MCP transforma este problema de M×N en una ecuación mucho más simple: M+N. Al crear un estándar universal, los desarrolladores solo necesitan crear clientes M (para sus aplicaciones) y servidores N (para sus herramientas), lo que reduce significativamente la complejidad y la sobrecarga de mantenimiento.

Comparación de enfoques agénticos

El MCP no es una alternativa a patrones populares como Retrieval-Augmented Generation (RAG) o marcos de trabajo como LangChain, sino que es un protocolo de conectividad fundamental que los hace más potentes, modulares y fáciles de mantener. Resuelve el problema universal de conectar una aplicación con una herramienta externa mediante la estandarización de la "última milla" de la integración.

Así es como MCP se integra en la pila moderna de IA:

Impulsar la RAG avanzada

La RAG estándar es potente, pero muchas veces se conecta con una base de datos vectorial estática. Para casos de uso más avanzados, necesitas recuperar información dinámica de sistemas complejos en tiempo real.

  • Sin el MCP: Un desarrollador debe escribir código personalizado para conectar su aplicación de RAG directamente con el lenguaje de búsqueda específico de una API de búsqueda como Elasticsearch.
  • Con el MCP: El sistema de búsqueda expone sus capacidades a través de un servidor MCP estándar. La aplicación de RAG ahora puede consultar esta fuente de datos en tiempo real mediante un cliente del MCP simple y reutilizable, sin necesidad de conocer la API específica del sistema subyacente. Esto hace que la implementación de RAG sea más limpia y más fácil de intercambiar con otras fuentes de datos en el futuro.

Integración con marcos de trabajo agénticos (por ej., LangChain, LangGraph)

Los marcos de trabajo agénticos proporcionan excelentes herramientas para crear lógica de aplicaciones, pero aún requieren una forma de conectarse a las herramientas externas.

  • Las alternativas:
    • Código personalizado: Escribir una integración directa desde cero, lo que requiere un esfuerzo de ingeniería significativo y mantenimiento continuo.
    • Kits de herramientas específicos del marco de trabajo: Usar un conector precompilado o escribir un envoltorio personalizado para un marco de trabajo específico (esto crea una dependencia de la arquitectura de ese marco de trabajo y te bloquea en su ecosistema).
  • La ventaja del MCP: El MCP proporciona un estándar abierto y universal. Un proveedor de herramientas puede crear un único servidor MCP para su producto. Cualquier marco de trabajo —LangChain, LangGraph o una solución personalizada— puede interactuar con ese servidor mediante un cliente del MCP genérico. Este enfoque es más eficiente y evita el bloqueo de proveedores.

Por qué un protocolo simplifica todo

En última instancia, el valor del MCP reside en proporcionar una alternativa abierta y estandarizada a los dos extremos de la integración:

  1. Escribir código personalizado es delicado y genera altos costos de mantenimiento.
  2. El uso de envoltorios específicos del marco de trabajo crea un ecosistema semicerrado y una dependencia del proveedor.

El MCP transfiere la propiedad de la integración al propietario del sistema externo, lo que le permite proporcionar un endpoint del MCP único y estable. Los desarrolladores de aplicaciones pueden consumir estos endpoints, lo que simplifica significativamente el trabajo necesario para crear, escalar y mantener aplicaciones de AI potentes y contextuales.

Introducción al servidor MCP de Elasticsearch

Cómo implementar un servidor MCP de Elasticsearch

Elastic ha desarrollado un servidor MCP para Elasticsearch que te permite conectar fácilmente tus datos con cualquier host compatible con el MCP. Con el servidor, puedes otorgar a los modelos acceso a índices de consultas, inspeccionar mappings y realizar búsquedas.

Configurar el servidor es sencillo. Este servidor MCP se proporciona como una imagen de Docker en docker.elastic.co/mcp/elasticsearch que admite los protocolos stdio, SSE y HTTP transmisible de MCP.

La configuración de Claude Desktop es la siguiente:

{
 "mcpServers": {
   "elasticsearch-mcp-server": {
    "command": "docker",
    "args": [
     "run", "-i", "--rm",
     "-e", "ES_URL", "-e", "ES_API_KEY",
     "docker.elastic.co/mcp/elasticsearch",
     "stdio"
    ],
    "env": {
      "ES_URL": "<elasticsearch-cluster-url>",
      "ES_API_KEY": "<elasticsearch-api-key>"
    }
   }
 }
}

El servidor MCP se inicia en modo stdio con este comando:

docker run -i --rm -e ES_URL -e ES_API_KEY docker.elastic.co/mcp/elasticsearch stdio

Sigue el resto de los pasos en nuestro repositorio de GitHub.

Interactúa con nosotros en MCP e IA

Profundiza más en la construcción con Elastic

Mantente informado sobre todo lo relacionado con la AI y las aplicaciones de búsqueda inteligente. Explora nuestros recursos para obtener más información sobre la construcción con Elastic.

Comienza a desarrollar ahora con el taller práctico gratuito "Introducción a MCP con Elasticsearch MCP Server".