Skip to main content
Glama
cchanquispe08-blip

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.

Maintenance

ActivitySlowing
ResponsivenessNo issues