mcp-todo-server
README.md
# mcp-todo-server
Servidor MCP (Model Context Protocol) básico que expone una lista de tareas (to-do list),
implementado en TypeScript con el SDK oficial `@modelcontextprotocol/sdk`.
Trabajo Extraclase 1 — Programación IV — Model Context Protocol.
## Capacidades expuestas
| Tipo | Nombre | Descripción |
|------|--------|-------------|
| Resource | `tasks://list` | Devuelve la lista completa de tareas almacenadas en `tasks.json` |
| Tool | `add_task` | Agrega una nueva tarea (nombre, descripción, prioridad) |
| Tool | `complete_task` | Marca una tarea existente como completada, dado su ID |
| Prompt | `daily_summary` | Genera una plantilla de resumen del estado actual de las tareas |
## Estructura del proyecto
```
mcp-todo-server/
├── src/
│ └── server.ts # Servidor MCP principal
├── tasks.json # Almacenamiento de tareas (base de datos simple)
├── tsconfig.json # Configuración de TypeScript
├── package.json
└── README.md
```
## Requisitos
- Node.js 18 o superior
- npm
## Instalación
```bash
npm install
```
Esto instala las dependencias: `@modelcontextprotocol/sdk`, `zod` (validación de esquemas),
y como dependencias de desarrollo `typescript`, `@types/node` y `tsx`.
## Ejecución
Modo desarrollo (ejecuta el TypeScript directamente, sin compilar):
```bash
npm run dev
```
Modo producción (compila a JavaScript y luego ejecuta):
```bash
npm run build
npm start
```
El servidor se comunica por **stdio** (entrada/salida estándar), que es el transporte
que usa Claude Desktop y la mayoría de clientes MCP locales. Al arrancar correctamente
vas a ver en la terminal:
```
Servidor MCP 'mcp-todo-server' corriendo por stdio...
```
Ese mensaje sale por `stderr` a propósito, para no interferir con los mensajes JSON-RPC
que van por `stdout`.
## Cómo probarlo sin un cliente gráfico
Se puede usar el `Inspector` oficial de MCP, que abre una interfaz web para invocar
Resources, Tools y Prompts a mano:
```bash
npx @modelcontextprotocol/inspector npx tsx src/server.ts
```
## Ejemplo de uso de cada capacidad
**Leer el resource de tareas** → devuelve el arreglo `tasks` de `tasks.json` en formato JSON.
**Tool `add_task`**, argumentos:
```json
{ "name": "Repasar JSON-RPC", "description": "Leer la especificación 2.0", "priority": "media" }
```
**Tool `complete_task`**, argumentos:
```json
{ "id": 1 }
```
**Prompt `daily_summary`** no recibe argumentos: arma automáticamente un resumen con
las tareas pendientes y completadas, agrupadas por prioridad.
## Autor
Camila — Universidad Nacional de Costa Rica, Programación IV.
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues