Skip to main content
Glama
juan9222

mcp-project-manager

by juan9222

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

create_task

title (req), description (opt), priority (req: low/medium/high/critical)

Crea una tarea nueva (status inicial todo)

list_tasks

status (opt), priority (opt)

Lista tareas, más recientes primero, con filtros opcionales

update_task

id (req), status (req: todo/in_progress/done)

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 check

  • GET /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 initrailway up → variable DB_PATH=/app/tasks.dbrailway 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_PATH al 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.