tpm-mcp
Uses SQLite as the local database backend for storing project management data including organizations, projects, tickets, tasks, and notes with fast querying via WAL mode.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tpm-mcp status"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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/3Features
Fast | Sub-millisecond queries with SQLite + WAL mode |
Local | All data in |
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-mcpAdd 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.mdThen in your CLAUDE.md:
See .claude/tpm.md for project tracking workflow.Usage
Quick Commands
Say this... | Claude will... |
| Show full roadmap |
| Create a new ticket |
| Mark ticket done |
| Create subtasks |
| 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 |
| Full roadmap with all orgs, projects, tickets, tasks |
| Detailed view of one ticket with its tasks |
| Server stats and database info |
Tool | Description |
| Create ticket with title, description, priority, tags |
| Update status, priority, assignees, etc. |
| List tickets, filter by project or status |
| Full-text search on title/description with filters |
Tool | Description |
| Create task under a ticket |
| Update task status, details, complexity |
| List tasks, filter by ticket or status |
Tool | Description |
| Create organization |
| List all organizations |
| Create project under org |
| List projects |
| Add note to any entity |
Data Model
Organization
└── Project
└── Ticket (feature/epic/bug)
├── Tasks
└── NotesTicket 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.jsonImport 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.jsonThe 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.pdfPrerequisites
tpm-mcp: This MCP server (for
roadmap_viewdata)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 --headlessAdd 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-trackerThis 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/ -vWhy 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 toolsinfoA
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_searchA
PROJECT MANAGEMENT (TPM): Search tickets by keyword.
USE THIS TOOL WHEN:
User asks "find tickets about X" or "search for Y"
Looking for tickets by keywords in title or description
Need to discover relevant tickets across projects
Searches title and description. Supports prefix matching (e.g., "org" matches "organization"). Case-insensitive. All filters are combinable.
Inputs: query (required), project_id, status, priority, +2 more.
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
Scored across 18 tools
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.
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.
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).
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
Related MCP Connectors
Project management for humans and AI agents: goals, metrics, projects, and issues.
Manage projects, tasks, time tracking, and team collaboration through natural language.
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
Personal project management with AI agents: numbered tickets, statuses, files, a thread per ticket.
Related MCP Servers
- AlicenseAqualityDmaintenanceA 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.127 npm25GPL 3.0
- FlicenseNot gradedqualityDmaintenanceEnables 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.-
- FlicenseNot gradedqualityDmaintenanceEnables 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-
- AlicenseAqualityDmaintenanceTracks workflows, tasks, blockers, and decisions locally for Claude Code, using PGlite with no cloud dependencies.301MIT