Skip to main content
Glama

What is this?

tpm-mcp is a local MCP (Model Context Protocol) server that gives Claude the ability to track your projects, features, and tasks. Think of it as having a dedicated TPM who:

  • Remembers what you're working on across sessions

  • Breaks down complex features into manageable tasks

  • Tracks progress and blockers

  • Gives you instant status updates

All data stays local in a fast SQLite database. No cloud. No subscriptions. Just you and your AI TPM.

Related MCP server: Project Tracking MCP Server

Demo

You: :TPM: what's in progress?

Claude: Here's your current roadmap:

# Roadmap Summary
**Stats**: 3/8 tickets, 12/25 tasks (48% complete)

## ExampleOrg
### backend-api
Tickets: 3/5 done

- [~] **FEAT-003**: Payment Integration (high)
  Tasks: 2/4
    - [~] TASK-003-1: Stripe webhook handler
    - [ ] TASK-003-2: Invoice generation

- [ ] **FEAT-004**: Email Notifications
  Tasks: 0/3

Features

Fast

Sub-millisecond queries with SQLite + WAL mode

Local

All data in ~/.local/share/tpm-mcp/tpm.db

Natural

Just talk - "I finished the auth feature"

Hierarchical

Orgs → Projects → Tickets → Tasks

Rich Metadata

Priority, tags, assignees, complexity, notes

Export/Import

Full JSON export/import for backup and migration

Installation

1. Clone & Install

git clone https://github.com/yourusername/tpm-mcp.git
cd tpm-mcp
uv venv && uv pip install -e .

2. Add to Claude Code

claude mcp add tpm --scope user -- uv run --directory /path/to/tpm-mcp tpm-mcp

Add to ~/.claude/settings.json:

{
  "mcpServers": {
    "tpm": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/tpm-mcp", "tpm-mcp"]
    }
  }
}

3. (Optional) Enable TPM Agent Behavior

For the full experience, add the TPM agent instructions:

# Symlink to your project's .claude folder
mkdir -p .claude
ln -s /path/to/tpm-mcp/agents/tpm.md .claude/tpm.md

Then in your CLAUDE.md:

See .claude/tpm.md for project tracking workflow.

Usage

Quick Commands

Say this...

Claude will...

:TPM: status

Show full roadmap

:TPM: add auth feature

Create a new ticket

I finished the payment integration

Mark ticket done

Break down the API refactor

Create subtasks

What's blocking us?

Show blocked items

Workflow Example

You: :TPM: Add user authentication to the backend project

Claude: Created ticket FEAT-005: "User Authentication" in backend-api
        Status: backlog, Priority: medium

You: Make it high priority and break it down

Claude: Updated FEAT-005 to high priority. Created tasks:
        - TASK-005-1: Design auth schema
        - TASK-005-2: Implement JWT middleware
        - TASK-005-3: Add login/logout endpoints
        - TASK-005-4: Write auth tests

You: Starting on the JWT middleware

Claude: Marked TASK-005-2 as in-progress.
        FEAT-005 is now in-progress.

You: Done with middleware, tests pass

Claude: Marked TASK-005-2 as done (1/4 tasks complete)

Tools Reference

Tool

Description

roadmap_view

Full roadmap with all orgs, projects, tickets, tasks

ticket_get

Detailed view of one ticket with its tasks

info

Server stats and database info

Tool

Description

ticket_create

Create ticket with title, description, priority, tags

ticket_update

Update status, priority, assignees, etc.

ticket_list

List tickets, filter by project or status

ticket_search

Full-text search on title/description with filters

Tool

Description

task_create

Create task under a ticket

task_update

Update task status, details, complexity

task_list

List tasks, filter by ticket or status

Tool

Description

org_create

Create organization

org_list

List all organizations

project_create

Create project under org

project_list

List projects

note_add

Add note to any entity

Data Model

Organization
└── Project
    └── Ticket (feature/epic/bug)
        ├── Tasks
        └── Notes

Ticket Statuses: backlog → planned → in-progress → done | blocked

Task Statuses: pending → in-progress → done | blocked

Priorities: critical > high > medium > low

Export & Import

Export and import your project data to JSON for backup, restore, or interoperability with other tools.

Export Data

Export all your project data to JSON:

# Export to stdout
uv run tpm-json-export

# Export to file
uv run tpm-json-export -o backup.json

# Export from custom database
uv run tpm-json-export --db-path /path/to/custom.db -o backup.json

Import Data

Import data from a JSON export file to recreate your database or restore from backup:

# Validate JSON file without importing
uv run tpm-json-import --dry-run backup.json

# Import into default database
uv run tpm-json-import backup.json

# Import into custom database
uv run tpm-json-import --db-path /path/to/db.db backup.json

# Clear existing data and import
uv run tpm-json-import --clear backup.json

The JSON format includes all data: organizations, projects, tickets, tasks, notes, and task dependencies. Use cases:

  • Backup & Restore: Export your data regularly, restore if database gets corrupted

  • Recreate Database: Start fresh by importing from a previous export

  • Export to Other Tools: Use the JSON format to migrate to other project management tools

  • Sync Between Machines: Export on one machine, import on another

PDF Status Reports

Generate beautiful, shareable PDF reports from your project data.

Using the Report Skill

The tpm-report skill teaches Claude how to generate professional status reports. To enable it:

# Copy the skill to your project
cp -r /path/to/tpm-mcp/skills/tpm-report .claude/skills/

Then ask Claude:

You: Generate a project status report

Claude: [Fetches roadmap data, generates styled HTML, converts to PDF]
        PDF report saved to: Project-Status-2025-12-02.pdf

Prerequisites

  • tpm-mcp: This MCP server (for roadmap_view data)

  • Playwright MCP: For automatic HTML → PDF conversion

Installing Playwright MCP

# Add Playwright MCP (headless mode recommended for PDF generation)
claude mcp add playwright-headless --scope user -- npx @playwright/mcp@latest --headless

# Or with isolated mode (separate browser profile)
claude mcp add playwright-headless --scope user -- npx @playwright/mcp@latest --isolated --headless

Add to ~/.claude/settings.json:

{
  "mcpServers": {
    "playwright-headless": {
      "command": "npx",
      "args": ["@playwright/mcp@latest", "--headless"]
    }
  }
}

Without Playwright, Claude will generate an HTML file you can manually print to PDF.

What's in the Report?

Section

Contents

Progress Overview

Visual progress bars for tickets and tasks

Project Breakdown

Completed, in-progress, and backlog items per project

Key Milestones

Major achievements and current focus

Blockers & Risks

Items requiring attention

Manual Report Generation

If you prefer manual control, use roadmap_view with JSON format:

You: :TPM: show me the roadmap as JSON

Claude: [Returns structured JSON data]

Then use your preferred tool to format the output.

Migration from Legacy Trackers

Coming from a legacy JSON-based tracker with a different format?

uv run tpm-migrate /path/to/old-tracker

This tool converts from older JSON tracker formats. For standard export/import, use tpm-json-export and tpm-json-import above.

Development

# Install with dev dependencies
uv pip install -e ".[dev]"

# Run tests
uv run pytest tests/ -v

Why Local?

  • Privacy: Your project data never leaves your machine

  • Speed: SQLite is incredibly fast for this use case

  • Reliability: No API rate limits, no outages, works offline

  • Simplicity: One database file, easy to backup or sync

License

MIT - do whatever you want with it.

Citation


@software{Bhatia_TPM-MCP_A_Local_2025,
  author = {Bhatia, Urjit Singh},
  license = {MIT},
  title = {{TPM-MCP: A Local Technical Product Manager MCP Server}},
  url = {https://github.com/urjitbhatia/tpm-mcp},
  year = {2025}
}

Available Tools

18 tools
infoA

Get information about the tracker MCP server: database location, stats, and usage.

Inputs: no named parameters.

note_addB

PROJECT MANAGEMENT (TPM): Add a note/comment to a ticket or task for context or decisions.

Inputs: entity_type (required), entity_id (required), content (required).

note_getB

PROJECT MANAGEMENT (TPM): Get full content of a specific note by ID.

Inputs: note_id (required).

note_listA

PROJECT MANAGEMENT (TPM): List notes for an entity. Returns id, created_at, preview (first 100 chars). Use note_get for full content.

Inputs: entity_type (required), entity_id (required), limit.

org_createA

PROJECT MANAGEMENT: Create a new organization (rarely needed).

Inputs: name (required).

org_listB

PROJECT MANAGEMENT: List all organizations. Usually only one org exists.

Inputs: no named parameters.

project_createC

PROJECT MANAGEMENT: Create a new project under an organization.

Inputs: org_id (required), name (required), repo_path, description.

project_listC

PROJECT MANAGEMENT: List projects in an organization.

Inputs: org_id.

roadmap_viewA

PROJECT MANAGEMENT (TPM): Get project roadmap showing work status.

USE THIS TOOL WHEN:

  • User asks "what's in progress?" or "what are we working on?"

  • User asks "TPM status", ":TPM:" prefix, or "show me the roadmap"

  • User asks about pending/blocked/completed work

  • Starting a work session to see current state

  • User completes work and you need to find related tasks to mark done

Returns summary of organizations, projects, and tickets. Use project_id filter to reduce output.

Inputs: org_id, project_id, active_only.

task_createA

PROJECT MANAGEMENT (TPM): Create a task (sub-item) under a ticket.

USE THIS TOOL WHEN:

  • Breaking down a ticket into smaller tasks

  • User asks to add implementation steps

  • Creating a work breakdown structure

Inputs: ticket_id (required), title (required), details, status, +2 more.

task_getA

PROJECT MANAGEMENT: Get full details of ONE specific task.

Use this to drill into a single task's implementation details (metadata, files_to_modify, technical_notes). Prefer ticket_get for overview, use this only when you need deep task details.

Inputs: task_id (required).

task_listA

PROJECT MANAGEMENT (TPM): List task IDs with status. Returns id, ticket_id, status only - use task_get for details.

Inputs: ticket_id, status, limit, offset.

task_updateA

PROJECT MANAGEMENT (TPM): Update a task's status or details. Use when completing or updating task progress.

Inputs: task_id (required), title, details, status, +2 more.

ticket_createA

PROJECT MANAGEMENT (TPM): Create a new ticket, epic, or issue to track.

USE THIS TOOL WHEN:

  • User says ":TPM: Add X feature to the roadmap"

  • User wants to add a new feature/ticket/issue

  • User says "add ticket for X" or "create feature for Y"

  • Breaking down work into trackable items

  • User asks to scope out or define new work

  • User discusses new work that should be tracked

Use roadmap_view first to get the project_id. Tickets are high-level work items (like Jira epics/stories).

ID AUTO-GENERATION: IDs are always auto-generated as {PREFIX}-{NNN} (e.g., FEAT-001, ISSUE-042). The number is automatically incremented based on existing tickets with that prefix.

OPTIONAL PREFIX PARAMETER: Provide a prefix to categorize the ticket type:

  • FEAT: New features or capabilities

  • ISSUE: Bugs, problems, or issues to fix

  • TASK: General tasks or chores

  • INFRA: Infrastructure or DevOps work

  • DOC: Documentation tasks

If no prefix is provided, uses the project ID as the prefix (e.g., FRONTEND-001, BACKEND-042).

Inputs: project_id (required), title (required), prefix, description, +4 more.

ticket_getA

PROJECT MANAGEMENT: Get info about a ticket and its tasks.

IMPORTANT: Do NOT pass detail='full' unless explicitly asked for full/all details. The default 'summary' is sufficient for most queries. Only use 'full' when user specifically asks for implementation details, metadata, or complete task information.

Inputs: ticket_id (required), detail.

ticket_listA

PROJECT MANAGEMENT: List ticket IDs with status/priority. Returns id, status, priority only - use ticket_get for details.

Inputs: project_id, status, limit, offset.

ticket_updateA

PROJECT MANAGEMENT (TPM): Update a ticket's status, priority, or details.

USE THIS TOOL WHEN:

  • User says "I just finished implementing X" - mark related ticket as done

  • User says "I've pushed commits for X" - update status based on progress

  • Marking work as in-progress, done, or blocked

  • Changing priority of a ticket

  • User completes a ticket and needs to update status

  • Adding/updating tags or assignees

Use roadmap_view first to find the ticket_id.

Inputs: ticket_id (required), title, description, status, +3 more.

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 18 tools

    Disambiguation4/5

    Most tools have distinct purposes targeting specific entities (notes, orgs, projects, tasks, tickets), but some overlap exists between note_get/note_list and ticket_get/ticket_list where the 'get' vs 'list' distinction is clear but could still cause minor confusion. The roadmap_view tool is well-scoped for status overviews, and search functions are appropriately separated.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern with snake_case (e.g., note_add, org_list, project_create, ticket_search). The pattern is maintained across all 18 tools, making them predictable and easy to understand at a glance.

    Tool Count4/5

    With 18 tools, the count is slightly high but reasonable for a project management domain that covers multiple entities (notes, orgs, projects, tasks, tickets). Each tool appears to serve a specific function, though some could potentially be consolidated (e.g., note_get and note_list).

    Completeness5/5

    The toolset provides comprehensive CRUD/lifecycle coverage for the project management domain, including create, get, list, update, and search operations for notes, organizations, projects, tasks, and tickets. There are no obvious gaps, and tools like roadmap_view and ticket_search enhance workflow completeness.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      A local Model Context Protocol server providing backend tools for AI agents to manage projects and tasks with persistent storage in SQLite, enabling structured tracking of project tasks with dependencies, priorities, and statuses.
      12
      7 npm
      25
      GPL 3.0
    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables project and task management through a lightweight SQLite database, allowing users to create projects, add categorized tasks, track status changes, and get project statistics through natural language commands.
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables natural language task management including logging, updating, and summarizing productivity activities across multiple categories using a local SQLite database. It allows users to manage workflows and generate time-based summaries through standardized Model Context Protocol tools.
      1
      -