Skip to main content
Glama
cchanquispe08-blip

mcp-todo-server

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

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):

npm run dev

Modo producción (compila a JavaScript y luego ejecuta):

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:

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:

{ "name": "Repasar JSON-RPC", "description": "Leer la especificación 2.0", "priority": "media" }

Tool complete_task, argumentos:

{ "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.