Implementación del servidor MCP
Una implementación completa basada en Flask del Protocolo de Contexto de Modelo (MCP) para mejorar las capacidades del modelo de lenguaje grande con herramientas externas.
Descripción general
Este repositorio demuestra cómo crear un servidor que gestiona el Protocolo de Contexto de Modelo (MCP), un método para ampliar las capacidades de LLM mediante la invocación de herramientas directamente en la salida de texto del modelo. A diferencia de la invocación de funciones, MCP coloca las definiciones de herramientas directamente en la ventana de contexto y analiza las respuestas en lenguaje natural del modelo para identificar su uso.
Related MCP server: MCP Toolbox
Características
🔧 Implementación completa de MCP : análisis completo, ejecución y manejo de respuestas
🌤️ Herramientas de muestra : Herramientas meteorológicas y de cálculo con validación de parámetros
🔄 Flujo de conversación : mantiene el contexto en múltiples interacciones
Análisis basado en expresiones regulares : análisis de texto flexible para invocaciones de herramientas
API de Flask : puntos finales de API REST para la integración de chat
Estructura del proyecto
mcp_server/
├── app.py # Main Flask application
├── mcp_handler.py # MCP parsing and execution
├── mcp_example.py # Standalone MCP example
├── requirements.txt # Dependencies
├── tools/ # Tool implementations
│ ├── __init__.py
│ ├── weather.py # Weather API tool
│ └── calculator.py # Calculator tool
└── README.md # This fileInstalación
Clonar el repositorio:
git clone https://github.com/yourusername/mcp-server.git cd mcp-serverCrear un entorno virtual:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activateInstalar dependencias:
pip install -r requirements.txtConfigurar variables de entorno:
# Create a .env file with: LLM_API_KEY=your_llm_api_key_here WEATHER_API_KEY=your_weather_api_key_here FLASK_APP=app.py FLASK_ENV=development
Uso
Ejecución del servidor
Inicie el servidor de desarrollo Flask:
flask runPara producción:
gunicorn app:appPuntos finales de API
POST/chat : Procesar mensajes de chat con MCP
curl -X POST http://localhost:5000/chat \ -H "Content-Type: application/json" \ -d '{ "messages": [ { "role": "user", "content": "What's the weather like in Boston?" } ] }'
Ejemplo independiente
Ejecute el script de ejemplo para ver MCP en acción:
python mcp_example.pyCómo funciona
Registro de herramientas : Las herramientas se registran con sus parámetros y lógica de ejecución.
Inyección de definición de herramienta : se agregan descripciones de herramientas con formato XML al mensaje
Procesamiento de respuesta de LLM : los patrones de expresiones regulares identifican las llamadas a herramientas en la salida de texto de LLM
Ejecución de herramientas : los parámetros se analizan y se pasan a los controladores de herramientas adecuados
Inyección de resultados : los resultados de la ejecución de la herramienta se insertan nuevamente en la respuesta.
MCP vs. Llamada a funciones
Característica | MCP | Llamada de función |
Definición Ubicación | En el texto de solicitud | En parámetros de API |
Formato de invocación | Lenguaje natural | JSON estructurado |
Implementación | Análisis de texto | Integración de API |
Visibilidad | Visible en respuesta | Puede estar oculto |
Soporte de plataforma | Cualquier LLM basado en texto | Requiere soporte de API |
Ejemplo de conversación
Usuario : ¿Cómo es el clima en Boston?
Maestría en Derecho :
I'll check the weather for you.
get_weather(location="Boston, MA", unit="fahrenheit")Después del procesamiento :
I'll check the weather for you.
get_weather(location="Boston, MA", unit="fahrenheit")
Result from get_weather:
{
"location": "Boston, MA",
"temperature": 72,
"unit": "fahrenheit",
"conditions": "Partly Cloudy",
"humidity": 68,
"wind_speed": 5.8
}Agregar sus propias herramientas
Crear una nueva clase heredando de
ToolDefinir parámetros y lógica de ejecución
Regístrese con el controlador MCP
Ejemplo:
class MyTool(Tool):
def __init__(self):
parameters = [
{
"name": "param1",
"type": "string",
"description": "Description of param1",
"required": True
}
]
super().__init__(
name="my_tool",
description="Description of my tool",
parameters=parameters
)
def execute(self, param1):
# Tool logic here
return {"result": "Processed " + param1}Flujo de configuración e invocación de MCP
Registro de herramientas :
Las herramientas MCP se registran con el controlador
Cada herramienta proporciona su nombre, descripción y definiciones de parámetros.
Definición de herramienta Inyección :
Las definiciones de herramientas se agregan al mensaje del sistema.
El formato sigue la estructura XML para MCP
Procesamiento de respuestas de LLM :
LLM genera respuestas que pueden incluir invocaciones de herramientas
La coincidencia de patrones identifica las llamadas a herramientas en el texto
Los parámetros de la herramienta se analizan y se pasan a los métodos de ejecución de la herramienta.
Ejecución de la herramienta :
Las herramientas se ejecutan con los parámetros proporcionados.
Los resultados se reintroducen en la conversación.
Gestión de conversaciones :
Las respuestas procesadas con resultados de la herramienta se agregan al historial de conversaciones
Las futuras solicitudes de LLM incluyen este historial para el contexto
Ejemplo de conversación
He aquí un ejemplo de cómo podría ser una conversación:
Usuario : ¿Cómo es el clima en Boston?
Sistema : envía un mensaje con las definiciones de herramientas MCP a LLM
Respuesta de LLM :
I'll check the weather for you.
get_weather(location="Boston, MA", unit="fahrenheit")Manejador MCP : analiza la respuesta, encuentra la llamada a la herramienta y ejecuta la herramienta meteorológica
Resultado de la ejecución de la herramienta :
Result from get_weather:
{
"location": "Boston, MA",
"temperature": 72,
"unit": "fahrenheit",
"conditions": "Partly Cloudy",
"humidity": 68,
"wind_speed": 5.8
}Respuesta procesada (enviada de vuelta al usuario):
I'll check the weather for you.
get_weather(location="Boston, MA", unit="fahrenheit")
Result from get_weather:
{
"location": "Boston, MA",
"temperature": 72,
"unit": "fahrenheit",
"conditions": "Partly Cloudy",
"humidity": 68,
"wind_speed": 5.8
}Usuario : ¿Puedes calcular la raíz cuadrada de 144?
Respuesta de LLM :
I can calculate that for you.
calculator(expression="sqrt(144)")Manejador MCP : analiza la respuesta y ejecuta la herramienta de cálculo.
Resultado de la ejecución de la herramienta :
Result from calculator:
{
"expression": "sqrt(144)",
"result": 12.0
}Respuesta procesada (enviada de vuelta al usuario):
I can calculate that for you.
calculator(expression="sqrt(144)")
Result from calculator:
{
"expression": "sqrt(144)",
"result": 12.0
}
The square root of 144 is 12.Esto demuestra el flujo completo del uso de la herramienta MCP, desde la invocación basada en texto del LLM hasta la ejecución y el procesamiento de la respuesta.
Licencia
Instituto Tecnológico de Massachusetts (MIT)
Contribuyendo
¡Agradecemos sus contribuciones! No dude en enviar una solicitud de incorporación de cambios.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.