Skip to main content
Glama
MCP Project Manager

MCP Project Manager

MCP Project Manager

A custom MCP server exposing project-management tools (create_task, list_tasks, update_task) backed by SQLite. Built as the Day 1 lab for the Chiron AI Engineering onboarding program.

Tools

Tool

Required Params

Optional Params

create_task

title, priority (low/medium/high/critical)

description

list_tasks

—

status (todo/in_progress/done), priority

update_task

id, status

—

Related MCP server: Mini Task MCP Server

Project Layout

  • server.py — MCP server definition (tools, handlers) with stdio transport, for local use with Claude Code

  • server_sse.py — SSE transport wrapper around the same server, for remote/cloud deployment

  • db.py — async SQLite persistence layer

Local Development

uv sync
uv run python server.py          # stdio transport (for Claude Code)
uv run python server_sse.py      # SSE transport on :8000 (for testing deployment locally)

Use with Claude Code

A .mcp.json is included pointing at the local stdio server. Restart Claude Code after cloning, then ask it to create/list/update tasks — it will call the MCP tools directly.

Deployment (Railway / Render)

The repo includes a Procfile (web: uv run python server_sse.py) that both platforms understand.

  1. Connect this GitHub repo in the Railway or Render dashboard.

  2. Set the DB_PATH environment variable (e.g. /data/tasks.db if using a persistent volume).

  3. Deploy. The server listens on $PORT (defaults to 8000) and exposes GET /sse + POST /messages/.

  4. Point .mcp.json at the deployed URL:

{
  "mcpServers": {
    "project-manager": {
      "type": "sse",
      "url": "https://<your-app>.up.railway.app/sse"
    }
  }
}

Database

SQLite file at $DB_PATH (default tasks.db, gitignored). Schema:

CREATE TABLE tasks (
    id          INTEGER PRIMARY KEY AUTOINCREMENT,
    title       TEXT NOT NULL,
    description TEXT DEFAULT '',
    priority    TEXT NOT NULL CHECK(priority IN ('low','medium','high','critical')),
    status      TEXT NOT NULL DEFAULT 'todo' CHECK(status IN ('todo','in_progress','done')),
    created_at  TEXT NOT NULL,
    updated_at  TEXT NOT NULL
);

Available Tools

3 tools
create_taskA

Create a new task with a title, optional description, and priority level.

Inputs: title (required), priority (required), description.

list_tasksB

List tasks. Optionally filter by status and/or priority.

Inputs: status, priority.

update_taskA

Update the status of an existing task by its ID.

Inputs: id (required), status (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 3 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: creation, listing, and status update. No overlap or ambiguity.

    Naming Consistency5/5

    All tool names follow the consistent verb_noun pattern with snake_case, making them predictable and easy to use.

    Tool Count4/5

    Three tools is a minimal but reasonable set for a task manager. Each tool is essential, though the server could benefit from a few more operations.

    Completeness3/5

    The server covers create, list, and update status, but misses delete and get details. This is a notable gap for a task management domain.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers