Protocolo MCP, ¿Cómo se integra con los modelos de lenguaje y la IA?

En el blog anterior revisamos como podemos otorgarle a los modelos de lenguaje herramientas para mejorar sus respuestas y tomar acciones de acuerdo a las solicitudes de los usuarios, en este blog abordaremos una integración desarrollada para enfrentar este tema de forma nativa, sin crear funciones o codigo intermedio, es por eso que introducimos MCP: El Protocolo de Contexto de Modelo.

El Protocolo de Contexto de Modelo (MCP, por sus siglas en inglés, Model Context Protocol) es un estándar abierto que busca unificar cómo los sistemas de IA, como los agentes conversacionales, se conectan y acceden a fuentes de datos externas, como bases de datos, APIs o archivos locales. Su objetivo es simplificar la creación de aplicaciones de IA, permitiendo que los modelos de lenguaje (LLM) puedan interactuar con el “mundo real” de manera estandarizada.

Arquitectura del protocolo MCP

La arquitectura del MCP se basa en un modelo cliente-servidor, si vienes del mundo de paginas web este concepto te será familiar, con tres componentes principales:

  1. Host MCP: Es la aplicación que aloja el agente de IA. Puede ser un chatbot, un IDE (entorno de desarrollo integrado) con IA, o cualquier otro software que necesite interactuar con el modelo. El host se encarga de la interfaz de usuario, la gestión de permisos y la orquestación del flujo de trabajo.
  2. Cliente MCP: Es la capa de implementación que se integra dentro del host. Se encarga de la comunicación con los servidores MCP, traduciendo las peticiones del host al formato del protocolo MCP.
  3. Servidor MCP: Actúa como un puente entre el cliente MCP y las fuentes de datos o herramientas externas. El servidor envuelve la funcionalidad de una base de datos, una API o un conjunto de archivos, y la expone al modelo de IA de manera estandarizada a través de tres “primitivas”:
    • Resources: Objetos de datos a los que el modelo puede acceder, como documentos o esquemas de bases de datos.
    • Prompts: Plantillas para guiar la interacción del modelo.
    • Tools: Funciones que el modelo puede ejecutar, como consultar una base de datos o enviar un correo electrónico.

Casos de uso:

Atención al cliente: Un chatbot puede usar el MCP para acceder a bases de datos de clientes, sistemas de gestión de pedidos y otras herramientas internas para ofrecer un servicio más preciso y personalizado. Por ejemplo, responder preguntas sobre el estado de una factura.

Automatización de procesos internos: Un agente de IA puede coordinar múltiples tareas que antes requerían cambiar de aplicación, como aprobar un gasto, crear un ticket en un sistema de incidencias y enviar una notificación por correo electrónico.

Análisis y reporting: Un asistente de IA puede analizar datos de diferentes fuentes (bases de datos, hojas de cálculo, etc.) usando lenguaje natural, generando informes o gráficos a partir de una simple consulta del usuario.

Acceso a información dispersa: La IA puede buscar y resumir información de múltiples repositorios, como correos electrónicos, contratos o documentos guardados en diferentes bases de datos, sin que el usuario tenga que navegar por cada uno de ellos.

Te gustaría conocer como implementar estos casos de usos en tu empresa? contáctanos y discutimos como podemos agregar valor a los procesos de tu negocio.

Creando agentes con function-calling y Gemini-API

¿Sabías que puedes crear tus propios agentes utilizando la API de Gemini?

Un agente es un sistema que en base a cierta información de entrada, puede procesar esta información para realizar una acción en base a los objetivos predefinidos.

Un ejemplo de estos sistemas son los ChatBots como los de OpenAI, DeepSeek o incluso los que trabajamos en Telygen. Estos sistemas toman el mensaje del usuario, lo procesan y realizan la acción solicitada. Ejemplos de estas acciones son: agendar citas para una clínica medica, obtener información de la WEB como: el clima, las noticias o resultados de los partidos de fútbol.

Existen miles de herramientas y formas para crear estos sistemas de IA tipo agentes, pero en este blog exploraremos un agente creado a partir de Gemini API y Python. Lo mejor de todo esto: Es totalmente gratis!

Gemini API esta disponible como un SDK en los principales repositorios de Python, JavaScript, Go, Java y App Script. En el siguiente ejemplo vemos la instalacion utilizando ‘pip’ con Python:

pip install -q -U google-genai

La API de Gemini nos describe como enviar consultas al modelo de gemini:

from google import genai

# The client gets the API key from the environment variable `GEMINI_API_KEY`.
client = genai.Client()

response = client.models.generate_content(
    model="gemini-2.5-flash", contents="Explain how AI works in a few words"
)
print(response.text)

Con esto tenemos una forma para interactuar con el modelo, pero nosotros tenemos que mostrarle una forma para poder “actuar” en base a las necesidades u objetivos de los usuarios.

Para que el modelo tome acción, le tenemos que brindar las herramientas, en este caso “tools” que serán llamadas a través de la funcion “function calling” de la API de Gemini. Según la documentación nos muestra 4 pasos para integrar esta característica:

  1. Define la declaración de la función: Define la declaración de la función en el código de tu aplicación. Las declaraciones de funciones describen el nombre, los parámetros y el propósito de la función al modelo.
  2. Llama al LLM con declaraciones de funciones: Envía la instrucción del usuario junto con las declaraciones de funciones al modelo. Analiza la solicitud y determina si sería útil una llamada a una función. Si es así, responde con un objeto JSON estructurado.
  3. Ejecutar código de función (tu responsabilidad): El modelo no ejecuta la función por sí mismo. Es responsabilidad de tu aplicación procesar la respuesta y verificar si hay una llamada a función, en caso de que
    Sí: Extrae el nombre y los argumentos de la función, y ejecuta la función correspondiente en tu aplicación.
    No: El modelo proporcionó una respuesta de texto directa a la instrucción (este flujo se enfatiza menos en el ejemplo, pero es un resultado posible).
  4. Crea una respuesta fácil de usar: Si se ejecutó una función, captura el resultado y envíalo de vuelta al modelo en un turno posterior de la conversación. Usará el resultado para generar una respuesta final y fácil de usar que incorpore la información de la llamada a la función.

Define la declaración de la función:

En este ejemplo se declara una función para agendar citas:

# Define the function declaration for the model
schedule_meeting_function = {
    "name": "schedule_meeting",
    "description": "Schedules a meeting with specified attendees at a given time and date.",
    "parameters": {
        "type": "object",
        "properties": {
            "attendees": {
                "type": "array",
                "items": {"type": "string"},
                "description": "List of people attending the meeting.",
            },
            "date": {
                "type": "string",
                "description": "Date of the meeting (e.g., '2024-07-29')",
            },
            "time": {
                "type": "string",
                "description": "Time of the meeting (e.g., '15:00')",
            },
            "topic": {
                "type": "string",
                "description": "The subject or topic of the meeting.",
            },
        },
        "required": ["attendees", "date", "time", "topic"],
    },
}

Se declara el cliente y las funciones que puede llamar el modelo:

# Configure the client and tools
client = genai.Client()
tools = types.Tool(function_declarations=[schedule_meeting_function])
config = types.GenerateContentConfig(tools=[tools])

Se llama al modelo y se incluyen las herramientas que tiene disponibles para ejecutar de la mejor maner la solicitud del usuario:

# Send request with function declarations
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="Schedule a meeting with Bob and Alice for 03/14/2025 at 10:00 AM about the Q3 planning.",
    config=config,
)

Procesamos la respuesta del LLM, en caso que incluya la funcion declarada, se ejecuta la funcion y enviamos la respuesta al cliente:

# Check for a function call
if response.candidates[0].content.parts[0].function_call:
    function_call = response.candidates[0].content.parts[0].function_call
    print(f"Function to call: {function_call.name}")
    print(f"Arguments: {function_call.args}")
    #  In a real app, you would call your function here:
    #  result = schedule_meeting(**function_call.args)
else:
    print("No function call found in the response.")
    print(response.text)

Finalmente, el LLM puede enviar una notificación de ejecución al usuario con el resultado de la función ejecutada.

Como puedes observar, crear un agente solo nos tomo 4 sencillos pasos utilzando la API de Gemini. Si quieres conocer mas de como estos agentes pueden potenciar tu negocio no dudes en escribirnos.

Telygen blog.

fuente