Skip to main content
Glama
dhruv-vootkuri

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: Personal Task Manager MCP

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesShort task title
descriptionNoOptional longer description
priorityYesTask priority

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Lacks annotations and does not disclose behavioral traits such as side effects, required permissions, or constraints (e.g., duplicate title handling). The description is straightforward but insufficiently transparent for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no redundancy, immediately actionable. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 parameters, no output schema), the description is mostly complete. However, it lacks context around return values or side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds minimal extra meaning over the schema (e.g., 'optional' for description). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states action (create), resource (task), and key parameters (title, description, priority). It distinguishes from siblings list_tasks and update_task by focusing on creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies use for creating tasks but provides no explicit guidance on when to choose this tool over update_task or list_tasks. No when-not-to-use or alternative instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tasksB

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

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by status
priorityNoFilter by priority

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; the description fails to disclose behavioral details like pagination, sorting, or whether it's read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise two sentences, front-loaded with the action, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Missing information on return format, pagination, or side effects, especially given no output schema or annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters have descriptions; description adds that filters are optional, but little else.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists tasks with optional filters, distinguishing it from sibling tools create_task and update_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use vs alternatives; however, the context of sibling tools implies listing vs creating/updating.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_taskA

Update the status of an existing task by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTask ID to update
statusYesNew status

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavior but only states 'update' without noting side effects, required permissions, error handling (e.g., if task not found), or idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, 11 words, front-loaded with verb and noun. No wasted words or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 params, no nested objects, no output schema), the description is nearly complete. Could mention that the task must exist or the behavior if status is same, but otherwise adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions for both parameters. The tool description adds no additional meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update the status') and resource ('an existing task by its ID'), distinguishing it from sibling tools 'create_task' and 'list_tasks'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use or when not to use. It implies usage for changing status, but no exclusion criteria or prerequisites (e.g., task must exist) are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 3 tool updatesv0.1.0
    • First observedcreate_task
    • First observedlist_tasks
    • First observedupdate_task

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 issues

Related MCP Connectors

Related MCP Servers