MPC-PoC-1-EchoServerToolsbasicas
by mzoffoli85
README.md
# PoC 1 — MCP Echo Server (Tools básicas sobre stdio)
Primera PoC de una serie de 5 para aprender **MCP (Model Context Protocol)** en profundidad. Server MCP en Python que expone 3 tools simples sobre transporte **stdio**, pensado para validar el handshake completo `initialize` → negociación de capabilities → `tools/list` → `tools/call` contra Claude Desktop / Claude Code.
Spec completa de la PoC: [`POC1_MCP_ECHO_SERVER.md`](POC1_MCP_ECHO_SERVER.md).
## Tools expuestas
| Tool | Input | Output | Propósito didáctico |
|-----------|-------------------------|----------------------|------------------------------------------|
| `echo` | `message: str` | el mismo string | Validar ida y vuelta trivial |
| `add` | `a: float`, `b: float` | la suma | Validar tipado de inputs y coerción |
| `reverse` | `text: str` | el string invertido | Validar manejo de strings no triviales |
Implementadas como funciones síncronas y puras (sin efectos secundarios) usando la API moderna `FastMCP` del SDK `mcp` (decorador `@mcp.tool()`).
## Instalar dependencias
Con `uv` (preferido):
```bash
uv sync
```
Con `venv` + `pip`:
```bash
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -e .
```
## Registrar el server en Claude Desktop
Editar `claude_desktop_config.json` (en Windows: `%APPDATA%\Claude\claude_desktop_config.json`) y agregar:
```json
{
"mcpServers": {
"poc1-echo-server": {
"command": "uv",
"args": [
"run",
"--directory",
"C:\\PoC\\MCP\\MPC-PoC-1-EchoServerToolsbasicas",
"python",
"server.py"
]
}
}
}
```
Si preferís usar el intérprete de un venv en vez de `uv`, reemplazá `command`/`args` por la ruta absoluta al `python.exe` del venv y `["C:\\PoC\\MCP\\MPC-PoC-1-EchoServerToolsbasicas\\server.py"]`.
Reiniciar Claude Desktop para que detecte el nuevo server.
## Probar cada tool
Frases de ejemplo para gatillar cada tool desde el chat de Claude Desktop:
- **echo**: "Usá la tool echo para repetir el mensaje 'hola mundo'"
- **add**: "Sumá 15.5 y 22.3 usando la tool add"
- **reverse**: "Invertí el string 'MCP' con la tool reverse"
También podés correr el server directo para validar que arranca sin errores:
```bash
python server.py
```
Va a quedar esperando input JSON-RPC por stdin (comportamiento normal); `Ctrl+C` para salir.
## Ver los logs de stderr (debug del handshake)
Todo el logging va a **stderr** (nunca a stdout, que es el canal del protocolo). Claude Desktop guarda los logs de cada MCP server en:
```
%APPDATA%\Claude\logs\mcp-server-poc1-echo-server.log
```
Ahí se ve el `initialize`, la negociación de capabilities y cada `tools/call` con sus argumentos, gracias al logging agregado en `server.py`.
## Qué aprendí
- El SDK `mcp` moderno resuelve casi todo con `FastMCP` + `@mcp.tool()`: el schema de inputs se genera solo a partir de los type hints, sin tocar JSON Schema a mano.
- El canal stdout está reservado 100% para JSON-RPC — cualquier `print()` o log mal dirigido rompe el protocolo; todo el logging tiene que ir a stderr explícitamente.
- El handshake (`initialize` → `tools/list` → `tools/call`) es visible y depurable en los logs de Claude Desktop, lo cual hace mucho más fácil diagnosticar problemas de conexión que "adivinar" desde el lado del cliente.
- Correr el server standalone (`python server.py`) antes de registrarlo en Claude Desktop ahorra un ciclo completo de debugging: si arranca limpio ahí, el problema de conexión está en la config, no en el código.
## Siguiente en la serie
**PoC 2** — Resource Provider: exponer Google Sheets como Resources leíbles vía MCP.
<img width="491" height="721" alt="image" src="https://github.com/user-attachments/assets/0a2cdb2b-a7cb-4fcc-932a-687624b7f536" />
TDQS
A3.7/5.0
Scored across 3 tools
Disambiguation5/5
Each tool performs a completely distinct operation: echo returns input unchanged, add performs numeric addition, reverse flips a string's character order. There is no overlap or ambiguity between them.
Naming Consistency5/5
All three tool names are single lowercase verbs in a consistent imperative style: echo, add, reverse. The pattern is uniform and predictable.
Tool Count4/5
Three tools is a reasonable size for a basic PoC utility server. While slightly minimal, it stays within a well-scoped range and avoids being either overly thin or bloated.
Completeness4/5
For a simple echo server with basic utilities, the set covers its apparent purpose without glaring gaps. The operations are self-contained, though there is no clear domain model requiring CRUD coverage.
Maintenance
ActivityStale
ResponsivenessNo issues