todo-hud-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@todo-hud-mcpSet tasks: review PR, write docs"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
todo-hud-mcp
Backend POC para Focus HUD, una app de escritorio liviana tipo todo list + pomodoro gamificado.
Stack
Runtime: Node.js ≥ 20
Framework: NestJS 11 + TypeScript
Validación: class-validator + class-transformer + zod
Documentación: Swagger / OpenAPI
MCP: Model Context Protocol (tools
set_tasks,list_tasks)Persistencia: JSON local (reemplazable por PostgreSQL)
Related MCP server: Todo MCP Server
Arquitectura hexagonal (puertos y adaptadores)
src/modules/tasks/
├── domain/ # TypeScript puro, sin imports de framework
│ ├── models/ # Task, Priority (value object)
│ └── exceptions/ # TaskNotFoundError
├── application/ # Casos de uso y puertos abstractos
│ ├── ports/ # TasksRepositoryPort (interface + token)
│ └── use-cases/ # CreateTaskUseCase, GetTaskUseCase, ...
└── infrastructure/ # Adaptadores concretos (NestJS-aware)
├── adapters/ # JsonTasksRepository
├── controllers/ # TasksController, DTOs
├── mcp/ # Servidor MCP (tsx, proceso separado ESM)
└── tasks.module.ts # Wiring: puerto → adaptador concretoPrincipios
Domain: cero dependencias de framework. Modelos y excepciones puras.
Application: casos de uso que orquestan lógica contra puertos. Dependen solo de interfaces.
Infrastructure: implementaciones concretas (JSON, HTTP, NestJS DI). El módulo mapea cada puerto a su adaptador.
Cómo correr el servidor
npm install
npm run build
npm startServidor en http://localhost:3000.
Documentación Swagger / OpenAPI
Recurso | URL |
Swagger UI |
|
OpenAPI JSON |
|
OpenAPI YAML |
|
Scripts
Comando | Descripción |
| Compila TypeScript → dist |
| Inicia el servidor |
| Inicia en modo watch |
| Inicia servidor MCP (stdio) |
| Ejecuta tests unitarios (10) |
| Smoke test REST (requiere servidor corriendo) |
| Smoke test MCP HTTP (requiere servidor corriendo) |
Endpoints
Método | Ruta | Descripción |
GET |
| Health check |
GET |
| Listar tareas |
GET |
| Obtener tarea por ID |
POST |
| Crear tarea |
PATCH |
| Actualizar tarea |
PATCH |
| Completar tarea |
PATCH |
| Reabrir tarea |
DELETE |
| Eliminar tarea |
POST |
| MCP Streamable HTTP (JSON-RPC 2.0) |
Smoke test
Con el servidor corriendo, ejecutar:
.\scripts\api-smoke-test.ps1MCP (Model Context Protocol)
El backend expone MCP en dos modalidades: stdio (proceso separado ESM) y HTTP (endpoint REST dentro de NestJS). Ambos usan las mismas tools (set_tasks, list_tasks) a través de McpHandlerService, sin duplicación de lógica.
Modalidad stdio (clientes locales)
npm run mcpCorre como proceso independiente (ESM puro vía tsx) sobre stdio. Ideal para integrar con Claude Desktop, Cursor, o cualquier cliente MCP local.
Modalidad HTTP (clientes remotos)
El endpoint POST /mcp acepta mensajes JSON-RPC 2.0 según el protocolo MCP Streamable HTTP.
Herramienta | Input | Output |
|
| Tasks creados |
|
| Todos los tasks |
Handshake (initialize):
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"my-client","version":"1.0.0"}}}'Listar herramientas (tools/list):
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'Ejecutar herramienta (tools/call):
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"set_tasks","arguments":{"titles":["Comprar leche","Estudiar NestJS"]}}}'Notificaciones (sin id): responden con 202 Accepted sin body.
Probar con MCP Inspector
MCP Inspector permite probar ambos modos visualmente.
Modo stdio:
npx @modelcontextprotocol/inspector tsx src/modules/tasks/infrastructure/mcp/tasks-mcp-server.mtsModo HTTP (Streamable HTTP):
El Inspector no soporta nativamente Streamable HTTP vía URL. Para probar, usar curl o el script scripts/mcp-smoke-test.ps1.
Despliegue con HTTPS (VPS)
Para conectar desde ChatGPT Apps/Connectors o cualquier cliente MCP remoto:
Proxy reverso con Caddy o Nginx + Let's Encrypt:
# /etc/nginx/sites-available/focus-hud
server {
listen 443 ssl;
server_name focus-hud.tudominio.com;
ssl_certificate /etc/letsencrypt/live/focus-hud.tudominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/focus-hud.tudominio.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}Servir con PM2 para producción:
npm run build
pm2 start dist/main.js --name focus-hud
pm2 saveConectar desde ChatGPT:
Crear un GPT Action con la OpenAPI spec en
https://focus-hud.tudominio.com/openapi.jsonO usar un cliente MCP que soporte Streamable HTTP apuntando a
https://focus-hud.tudominio.com/mcp
Arquitectura MCP
src/modules/tasks/infrastructure/mcp/
├── mcp.handler.service.ts # Servicio compartido (usado por stdio y HTTP)
├── mcp.controller.ts # NestJS controller para POST /mcp
└── tasks-mcp-server.mts # Servidor stdio (ESM, vía tsx)McpHandlerServicees un@Injectable()de NestJS que wrappe los use cases y exponehandleToolCall(name, args).El controller HTTP (
POST /mcp) implementa JSON-RPC 2.0 + Streamable HTTP (SSE opcional conAccept: text/event-stream).El servidor stdio instancia
McpHandlerServicemanualmente (sin NestJS DI) y registra las tools enMcpServercon esquemas Zod.
Migración futura
Para cambiar de JSON a PostgreSQL:
Implementar
TasksRepositoryPortcon Prisma/Drizzle.Reemplazar
JsonTasksRepositorypor la nueva clase entasks.module.ts.El resto del código (domain, application, controllers) no se modifica.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/FelipeDanielH/todo-hud-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server