Skip to main content
Glama
juan9222

mcp-project-manager

by juan9222
README.md
# 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)

```bash
npm install
npm run dev        # arranca el servidor stdio (queda esperando input — correcto)
```

`.mcp.json` para Claude Code (variante local):

```json
{
  "mcpServers": {
    "project-manager": {
      "command": "npx",
      "args": ["tsx", "src/index.ts"],
      "cwd": "/Users/pablo/Desktop/mcp-project-manager"
    }
  }
}
```

## Uso remoto (SSE en Railway)

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

```json
{
  "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_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.

Maintenance

ActivitySlowing
ResponsivenessNo issues