使用说明
Chatbot MCP – Host en consola (Parte 1)
Chatbot en Python que funciona como anfitrión para integrar MCP. Estado actual (Parte 1):
- ✅ Conexión a un LLM vía API (Anthropic por defecto) para preguntas generales.
- ✅ Memoria de contexto multi-turno con comando
/reset. - ✅ Logging en formato JSONL de interacciones MCP (incluye un
/log-demopara generar eventos REQ/RES de ejemplo y/show-logpara visualizarlos).
Repo del servidor MCP propio (público, separado):
dataframe-analyst-mcp → https://github.com/DiederichSolis/dataframe-analyst-mcp.git
Este chatbot está diseñado para conectarse a servidores MCP
Requisitos
- Python 3.10+
- Cuenta y API key del proveedor LLM (Anthropic recomendado).
Instalación
git clone <ESTE_REPO_CHATBOT>.git
cd chatbot-mcp
python -m venv .venv
# macOS/Linux
source .venv/bin/activate
# Windows PowerShell
# .\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
Configuración (.env)
Copia .env.example a .env y ajusta:
LLM_PROVIDER=anthropic # anthropic | openai | echo
LLM_MODEL=claude-3-7-sonnet-latest # modelo recomendado vigente
ANTHROPIC_API_KEY=sk-ant-XXXXXXXXXXXX # tu key de Anthropic
# (Opcional para OpenAI)
# OPENAI_API_KEY=sk-openai-XXXXXXXXXXXX
# LLM_MODEL=gpt-4o-mini
# Ajustes opcionales
# REQUEST_TIMEOUT_S=60
Uso rápido
python app.py
Ejemplo de sesión:
Chatbot MCP (Parte 1) — escribe tu mensaje. Comandos: /reset, /show-log [N], /exit
> ¿Qué es la fotosíntesis?
<respuesta del LLM>
> /reset
(contexto reiniciado)
> /exit
Adiós!
Comandos del chatbot
| Comando | Descripción | Ejemplo |
|---|---|---|
/reset |
Borra el contexto de la conversación (memoria). | /reset |
/show-log [N] |
Muestra los últimos N eventos MCP formateados (REQ/RES, server, método, id). Por defecto N=20. | /show-log 10 |
/show-log-json [N] |
Muestra los últimos N eventos en JSONL (útil para inspección de payloads). | /show-log-json 5 |
/log-demo |
Genera 1 request y 1 response de ejemplo en el log (filesystem::tools/list). |
/log-demo |
/show-log-raw [N] |
Muestra las últimas N líneas crudas del archivo logs/mcp.log.jsonl. |
/show-log-raw 5 |
/help o /ayuda |
Muestra esta ayuda de comandos. | /help |
/exit |
Sale del programa. | /exit |
Nota: si escribes algo que empieza con
/y no existe como comando, el bot te mostrará/help(no lo enviará al LLM).
Logs MCP
- Archivo:
logs/mcp.log.jsonl(un evento por línea JSON). - Esquema (campos principales):
ts(epoch),direction(request|response),server,method,id,params,result,error.
Ver desde el propio bot:
> /log-demo
(se registraron 2 eventos MCP de ejemplo)
> /show-log 2
[2025-.. ..:..:..] REQ filesystem::tools/list id=demo-1
[2025-.. ..:..:..] RES filesystem::tools/list id=demo-1
> /show-log-json 2
{"ts":"...", "direction":"request", "server":"filesystem", "method":"tools/list", "id":"demo-1", "params":{"path":"."}}
{"ts":"...", "direction":"response","server":"filesystem","method":"tools/list","id":"demo-1","result":{"entries":["README.md"]}}
Ver desde la terminal (fuera del bot):
tail -n 2 logs/mcp.log.jsonl
Pruebas rápidas (scriptables)
Conexión LLM (5%)
python app.py << 'EOF'
¿Qué es la fotosíntesis?
/exit
EOF
Contexto / anáfora (5%)
python app.py << 'EOF'
¿Quién fue Alan Turing?
¿En qué fecha nació?
¿Y en qué campo hizo sus aportes más influyentes?
/exit
EOF
Reset de contexto
python app.py << 'EOF'
¿Quién fue Alan Turing?
/reset
¿En qué fecha nació?
/exit
EOF
Log MCP visible (5%)
python app.py << 'EOF'
/log-demo
/show-log 2
/show-log-json 2
/exit
EOF
Estructura del proyecto
chatbot-mcp/
├─ app.py
├─ requirements.txt
├─ .env.example
├─ README.md
├─ logs/
│ └─ .gitkeep
└─ chatbot/
├─ __init__.py
├─ config.py # carga .env y opciones del LLM
├─ memory.py # buffer de contexto con poda y reset
├─ llm_client.py # cliente LLM (anthropic|openai|echo)
├─ mcp_logging.py # logger JSONL + pretty/tail
└─ commands.py # /reset, /show-log, /show-log-json, /log-demo, /show-log-raw, /help, /exit
Integración con servidor MCP
Repo público (separado): https://github.com/DiederichSolis/dataframe-analyst-mcp.git
- Clona o instala tu servidor MCP:
- Submódulo
git submodule add https://github.com/DiederichSolis/dataframe-analyst-mcp.git external/dataframe-analyst-mcp - o pip desde Git (si está paquetizado):
pip install "git+https://github.com/DiederichSolis/dataframe-analyst-mcp.git#egg=dataframe_analyst_mcp"
- Submódulo
- Invoca las operaciones MCP desde el host (por stdio/cliente) y regístralas en el logger:
from uuid import uuid4 rid = f"df-{uuid4().hex[:6]}" mcp_logger.log_request("dataframe-analyst-mcp", "tools/tu_metodo", {"param":"valor"}, id=rid) # result = client.tu_llamada_real(...) mcp_logger.log_response("dataframe-analyst-mcp", "tools/tu_metodo", result={"ok": True}, id=rid) - Demuestra el tráfico real con
/show-logy captura PCAP con Wireshark para tu reporte.
Solución de problemas
[ERROR LLM] Error Anthropic: 401→ revisaANTHROPIC_API_KEYen.env.Error 404 model not found→ usa un modelo vigente (p. ej.claude-3-7-sonnet-latest).- No toma la
.env→ activa el venv y ejecuta desde la carpeta del proyecto. - Tiempo de espera → aumenta
REQUEST_TIMEOUT_Sa90. /log-demoresponde texto del LLM → revisa que el comando exista encommands.py(no debe pasar al LLM).