MCP Utils
Un paquete de Python con utilidades y ayudantes para construir servidores compatibles con MCP, que a menudo utiliza Flask y Redis.
Documentación
mcp-utils
Un paquete de utilidades de Python para construir servidores del Model Context Protocol (MCP).
Tabla de Contenidos
- mcp-utils
Descripción General
mcp-utils proporciona utilidades y ayudas para construir servidores compatibles con MCP en Python, con un enfoque en implementaciones síncronas usando Flask. Este paquete está diseñado para desarrolladores que quieren implementar servidores MCP en sus aplicaciones Python existentes sin la complejidad del código asíncrono.
Características Principales
- Utilidades básicas para la implementación de servidores MCP
- Soporte para Server-Sent Events (SSE)
- Decoradores simples para endpoints MCP
- Implementación síncrona
- Soporte del protocolo HTTP
- Cola de respuestas con Redis
- Modelos Pydantic completos para el esquema MCP
- Validación y documentación integradas
Instalación
pip install mcp-utils
Requisitos
- Python 3.10+
- Pydantic 2
Dependencias Opcionales
- Flask (para el servidor web)
- Gunicorn (para despliegue en producción)
- Redis (para la cola de respuestas)
Uso
Servidor MCP Básico
Aquí hay un ejemplo sencillo de cómo crear un servidor MCP:
from mcp_utils.core import MCPServer
from mcp_utils.schema import GetPromptResult, Message, TextContent, CallToolResult
# Create a basic MCP server
mcp = MCPServer("example", "1.0")
@mcp.prompt()
def get_weather_prompt(city: str) -> GetPromptResult:
return GetPromptResult(
description="Weather prompt",
messages=[
Message(
role="user",
content=TextContent(
text=f"What is the weather like in {city}?",
),
)
],
)
@mcp.tool()
def get_weather(city: str) -> str:
return "sunny"
Ejemplo con Flask
Para uso en producción, puedes usar una aplicación Flask simple con el servidor MCP y soporte para Streamable HTTP desde la versión 2025-06-18.
from flask import Flask, Response, url_for, request
# Create Flask app and MCP server with Redis queue
app = Flask(__name__)
mcp = MCPServer(
"example",
"1.0",
)
@app.route("/mcp", methods=["POST"])
def mcp_route():
response = mcp.handle_message(request.get_json())
return jsonify(response.model_dump(exclude_none=True))
if __name__ == "__main__":
app.run(debug=True)
Ejemplo de Manejo de Transacciones con SQLAlchemy
Para uso en producción, puedes integrar el servidor MCP con Flask, Redis y SQLAlchemy para un mejor manejo de mensajes y gestión de transacciones de base de datos:
from flask import Flask, request
from sqlalchemy.orm import Session
from sqlalchemy import create_engine
# Create engine for PostgreSQL database
engine = create_engine("postgresql://user:pass@localhost/dbname")
# Create Flask app and MCP server with Redis queue
app = Flask(__name__)
mcp = MCPServer(
"example",
"1.0",
)
@app.route("/mcp", methods=["POST"])
def mcp_route():
with Session(engine) as session:
try:
response = mcp.handle_message(request.get_json())
session.commit()
except:
session.rollback()
raise
else:
return jsonify(response.model_dump(exclude_none=True))
if __name__ == "__main__":
app.run(debug=True)
Para un ejemplo más completo que incluya configuración de registro y gestión de sesiones, consulta la aplicación Flask de ejemplo en el repositorio.
Ejecución con Gunicorn
Gunicorn es un mejor enfoque incluso para ejecutar localmente. Para ejecutar la aplicación con gunicorn
from gunicorn.app.base import BaseApplication
class FlaskApplication(BaseApplication):
def __init__(self, app, options=None):
self.options = options or {}
self.application = app
super().__init__()
def load_config(self):
config = {
key: value
for key, value in self.options.items()
if key in self.cfg.settings
}
for key, value in config.items():
self.cfg.set(key.lower(), value)
def load(self):
return self.application
if __name__ == "__main__":
handler = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter("[%(asctime)s] [%(levelname)s] %(name)s: %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
options = {
"bind": "0.0.0.0:9000",
"workers": 1,
"worker_class": "gevent",
"loglevel": "debug",
}
FlaskApplication(app, options).run()
Conexión con Clientes MCP
Cursor
- Edita la configuración de MCP y añade a la configuración
{
"mcpServers": {
"server-name": {
"url": "http://localhost:9000/mcp"
}
}
}
Claude Desktop
Al momento de escribir esto, Claude Desktop no soporta MCP a través de SSE y solo soporta stdio. Para conectar Claude Desktop con un servidor MCP, necesitarás usar mcp-proxy.
Ejemplo de configuración para Claude Desktop:
{
"mcpServers": {
"weather": {
"command": "/Users/yourname/.local/bin/mcp-proxy",
"args": ["http://127.0.0.1:9000/sse"]
}
}
}
Instalación mediante Smithery
Para instalar MCP Proxy para Claude Desktop automáticamente mediante Smithery:
npx -y @smithery/cli install mcp-proxy --client claude
Instalación mediante PyPI
La versión estable del paquete está disponible en el repositorio de PyPI. Puedes instalarlo usando el siguiente comando:
# Option 1: With uv (recommended)
uv tool install mcp-proxy
# Option 2: With pipx (alternative)
pipx install mcp-proxy
Una vez instalado, puedes ejecutar el servidor usando el comando mcp-proxy.
Contribuciones
¡Las contribuciones son bienvenidas! No dudes en enviar un Pull Request.
Proyectos Relacionados
- MCP Python SDK - El SDK oficial asíncrono de Python para MCP
- mcp-proxy - Una herramienta proxy para conectar Claude Desktop con servidores MCP
Licencia
Licencia MIT
Pruebas con MCP Inspector
El MCP Inspector es una herramienta útil para probar y depurar servidores MCP. Proporciona una interfaz web para inspeccionar y probar los endpoints del servidor MCP.
Instalación
Instala MCP Inspector usando npm:
npm install -g @modelcontextprotocol/inspector
Uso
- Inicia tu servidor MCP (por ejemplo, el ejemplo de Flask anterior)
- Ejecuta MCP Inspector:
git clone git@github.com:modelcontextprotocol/inspector.git
cd inspector
npm run build
npm start
- Abre tu navegador y navega a
http://127.0.0.1:6274/ - Ingresa la URL de tu servidor MCP (por ejemplo,
http://localhost:9000/sse) - Usa el inspector para:
- Cambiar el tipo de transporte a SSE
- Probar conexiones del servidor
- Monitorear eventos SSE
- Enviar mensajes de prueba
- Depurar respuestas
Esta herramienta es particularmente útil durante el desarrollo para asegurar que tu implementación del servidor MCP funcione correctamente y cumpla con la especificación del protocolo.