mcp-server-multitask
mcp_training
Servidor MCP con herramientas de clima, geocodificación y divisas, y un cliente de consola que conversa con un modelo de OpenAI capaz de usarlas.
Tú › ¿Qué tiempo hace en Madrid?
Modelo:
En Madrid hay 24,3 °C, humedad del 41 % y cielo despejado.
· geocode_city → get_current_weatherCómo funciona
Por defecto (MCP_MODE=local) todo ocurre en tu máquina: el cliente se conecta
al servidor MCP en 127.0.0.1, descubre sus herramientas, se las declara al
modelo y las ejecuta él cuando el modelo las pide.
main_server.py (MCP) <── 127.0.0.1:8002 ── main_client.py ──> OpenAI
5 herramientas tu terminal el modelo decide
sobre APIs públicas qué usarLa alternativa (MCP_MODE=connector) usa el conector MCP nativo de la Responses
API: se le pasa a OpenAI la URL del servidor y es OpenAI quien lista, llama y
encadena las herramientas. Como la conexión la abre OpenAI desde sus
servidores, 127.0.0.1 no le vale y hay que publicar el servidor con un túnel.
main_client.py ──> OpenAI (Responses API) ──> [túnel] ──> main_server.py (MCP)En los dos modos el modelo encadena las llamadas por su cuenta (ciudad → coordenadas → clima) y la CLI muestra la misma traza.
Herramientas
Herramienta | Entrada | Salida |
| nombre de ciudad | latitud, longitud, país y zona horaria |
| coordenadas | temperatura, humedad, estado del cielo |
| coordenadas | pronóstico de 7 días |
| importe + dos códigos ISO | importe convertido y tasa aplicada |
| código ISO de la moneda base | sus tasas frente al resto de monedas |
Clima y geocodificación usan Open-Meteo (gratis, sin
clave). Las divisas usan ExchangeRate-API,
que sí requiere clave, y admiten 20 monedas (/monedas en la CLI).
Estructura
config/settings.py configuración y logging (todo sale del .env)
server/ herramientas + clientes HTTP de las APIs externas
client/ cliente de OpenAI + interfaz de terminal
main_server.py arranca el servidor MCP
main_client.py arranca la conversaciónInstalación
Requiere Python 3.11+. Con uv (recomendado):
git clone <url-del-repo>
cd mcp_training
uv syncO con pip y un entorno virtual:
python -m venv .venv
.venv\Scripts\activate # Windows; en Linux/macOS: source .venv/bin/activate
pip install -r requirements.txtConfiguración
Copia el ejemplo y rellena tus claves:
cp .env.example .envSolo dos variables son obligatorias:
Variable | Para qué |
| tasas de cambio (clave gratuita aquí) |
| el modelo del cliente |
Todo lo demás (modo, modelo, puerto, transporte, timeouts, nivel de log) tiene valores por defecto sensatos y está documentado en .env.example.
Uso
Hacen falta dos terminales: servidor y cliente.
1. Arranca el servidor MCP
uv run python main_server.pyQueda escuchando en http://127.0.0.1:8002/mcp.
2. Lanza el cliente
uv run python main_client.pyEscribe tu consulta y pulsa Enter. La conversación tiene memoria: tras preguntar por Madrid puedes decir simplemente «¿y mañana?».
Convierte 100 USD a EUR
¿Cuál es el clima actual en Madrid?
Dame el pronóstico del tiempo para Nueva York
¿Qué coordenadas tiene Tokio?Comandos de la CLI:
Comando | Qué hace |
| herramientas, ejemplos y comandos |
| códigos de moneda soportados |
| terminar (también Ctrl+C y Ctrl+D) |
Modo connector: dejar que OpenAI llame a las herramientas
Con MCP_MODE=connector es OpenAI quien lista y ejecuta las herramientas, así
que el servidor tiene que ser accesible desde internet. Hace falta una tercera
terminal con un túnel; con
devtunnel:
devtunnel port create -p 8002 --allow-anonymous
devtunnel hostCopia la URL que imprime y ponla en el .env:
MCP_MODE=connector
MCP_PUBLIC_URL=https://xxxxxxx-8002.euw.devtunnels.msVale cualquier túnel (ngrok, Cloudflare Tunnel…); solo importa que la URL sea
accesible desde fuera. El cliente añade /mcp por su cuenta si no lo lleva.
Usar el servidor sin el cliente
El servidor es un MCP estándar: sirve para cualquier cliente compatible. Para
conectarlo como subproceso (Claude Desktop, Claude Code…) pon
MCP_TRANSPORT=stdio en el .env; así no hace falta ni el puerto.
Problemas frecuentes
Síntoma | Causa |
| falta el |
| falta arrancar |
El cliente no arranca y avisa de | con |
El modelo dice que no puede usar las herramientas | en modo connector, el túnel está caído o |
Error de cuota de OpenAI | saldo agotado; reintentar no lo arregla |
Para ver el detalle de cada llamada (argumentos, respuestas, URLs) pon
LOG_LEVEL=DEBUG en el .env. Los logs van a stderr, así que
python main_client.py > charla.txt guarda solo la conversación.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jotarose/mcp-server-multitask'
If you have feedback or need assistance with the MCP directory API, please join our Discord server