mcp-project-manager
Project Manager MCP Server — Lab 01
Servidor MCP en TypeScript que expone tres tools de gestión de tareas con persistencia en SQLite. Soporta transporte stdio (local) y SSE (deploy remoto en Railway).
Tools
Tool | Parámetros | Descripción |
|
| Crea una tarea nueva (status inicial |
|
| Lista tareas, más recientes primero, con filtros opcionales |
|
| Actualiza el status de una tarea por id |
Estructura
src/
db.ts # capa SQLite (better-sqlite3): initDb, createTask, listTasks, updateTask
server.ts # createServer(): McpServer con las 3 tools (compartido por ambos transportes)
index.ts # entrypoint stdio (uso local con Claude Code)
sse.ts # entrypoint SSE con Express (deploy remoto)Uso local (stdio)
npm install
npm run dev # arranca el servidor stdio (queda esperando input — correcto).mcp.json para Claude Code (variante local):
{
"mcpServers": {
"project-manager": {
"command": "npx",
"args": ["tsx", "src/index.ts"],
"cwd": "/Users/pablo/Desktop/mcp-project-manager"
}
}
}Uso remoto (SSE en Railway)
npm start # arranca el servidor SSE en 0.0.0.0:$PORT (default 8000)GET /— health checkGET /sse— stream SSE (conexión MCP)POST /messages?sessionId=...— mensajes entrantes
.mcp.json para Claude Code (variante remota):
{
"mcpServers": {
"project-manager": {
"type": "sse",
"url": "https://mcp-project-manager-production-3dd4.up.railway.app/sse"
}
}
}Deploy: railway init → railway up → variable DB_PATH=/app/tasks.db → railway domain.
Nota: sin un volumen de Railway, la base SQLite es efímera (se pierde en cada redeploy). Para persistencia real, añade un volumen y apunta
DB_PATHal mount.
Probar en Claude Code
Reinicia Claude Code en este directorio, aprueba el servidor y prueba:
"Create a task called 'Set up CI/CD pipeline' with high priority"
"List all tasks"
"Update task 1 to in_progress"
"Show me all high priority tasks that are still todo"
Inspeccionar la BD local: sqlite3 tasks.db "SELECT * FROM tasks;"
Notas de diseño
Los logs van a stderr — stdout transporta el protocolo MCP en modo stdio.
SSE es el transporte remoto legacy que pide el lab; la modernización a Streamable HTTP queda como extensión.