Skip to main content

Project management MCP Server for Claude Code — track tasks, visualize progress, manage decisions

Project description

pm-server

License: MIT Python 3.11+

日本語版 README はこちら

Project management MCP Server for Claude Code.

Track tasks, visualize progress, record decisions — all through natural language in your Claude Code session.

> 進捗は?
✓ Phase 1 "Backend API": 60% complete (12/20 tasks)
  - 3 tasks in progress, 1 blocked
  - Velocity: 8 tasks/week (↑ trending up)

> 次にやること
1. [P0] MYAPP-014: Add user authentication endpoint
2. [P1] MYAPP-015: Implement rate limiting
3. [P1] MYAPP-018: Write integration tests

> MYAPP-014 に着手
✓ MYAPP-014 → in_progress

Features

  • 22 MCP tools — task CRUD, status, blockers, velocity, dashboard, ADR, session memory, and more
  • Session memory — SQLite + FTS5 full-text search. Memories persist across sessions and link to tasks/decisions
  • Cross-project search — search memories across all projects via a global index
  • Natural language — say "進捗は?" or "what's next?" instead of memorizing commands
  • Zero configurationpip install + pm-server install, then just say "PM初期化して"
  • Multi-project — manage all your projects from a global registry with cross-project dashboards
  • Git-friendly — plain YAML files in .pm/ directory, trackable with git diff
  • Non-invasive — adds only a .pm/ directory to your project. rm -rf .pm/ to remove completely

Quick Start

Install (once)

pip install pm-server
pm-server install       # Registers MCP server in Claude Code
# Restart Claude Code

Update

pip install --upgrade pm-server
# Restart Claude Code

Note: pip install pm-server without --upgrade will NOT update an existing installation. Always use --upgrade (or -U) to get the latest version.

Initialize a project

# In Claude Code, cd to your project directory
> PM初期化して
✓ .pm/ created
✓ Registered in global registry
✓ Detected: name=my-app, version=1.2.0 (from package.json)

pm-server automatically detects project info from package.json, pyproject.toml, Cargo.toml, .git/config, and README.md.

Use it

You say What happens
進捗は? / status Show project progress summary
次にやること / what's next Recommend next tasks by priority & dependencies
タスク追加:○○を実装 Add a new task (auto-numbered)
MYAPP-003 完了 Mark task as done
ブロッカーある? List blocked tasks
ダッシュボード見せて Generate HTML dashboard (Chart.js, dark theme)
この設計にした理由を記録 Record an Architecture Decision Record (ADR)
全プロジェクトの状態 Cross-project portfolio view

MCP Tools (22 tools)

Project Management

Tool Description
pm_init Create .pm/, register in global registry, auto-detect project info
pm_status Phase progress, task summary, blockers, velocity
pm_tasks List tasks with filters (status / phase / priority / tag)
pm_add_task Add task with auto-numbered ID (e.g., MYAPP-001)
pm_update_task Update status, priority, notes, blocked_by
pm_next Recommend next tasks (excludes blocked / unmet dependencies)
pm_blockers List blocked tasks across projects

Records

Tool Description
pm_log Daily log entry (progress / decision / blocker / note / milestone)
pm_add_decision Add ADR with context, decision, and consequences

Analysis

Tool Description
pm_velocity Weekly velocity + trend (up / down / flat)
pm_risks Auto-detect risks: overdue, stale, long-blocked tasks

Visualization

Tool Description
pm_dashboard HTML dashboard (single project or portfolio view)

Discovery

Tool Description
pm_discover Scan directories for .pm/ projects and auto-register
pm_cleanup Remove invalid paths from registry
pm_list List all registered projects

Memory (Session Continuity)

Tool Description
pm_remember Save a memory tied to the current session (observation / insight / lesson)
pm_recall Recall memories — FTS5 search, by task, or cross-project
pm_session_summary Save / get / list session summaries for continuity
pm_memory_search Advanced search with type, tag, and task filters
pm_memory_stats Memory DB statistics (total, by type, DB size)
pm_memory_cleanup Clean up old memories (dry-run supported)

Maintenance

Tool Description
pm_update_claudemd Update PM Server rules section in CLAUDE.md to latest version

Data Structure

pm-server stores task data as plain YAML and memories in SQLite:

your-project/
└── .pm/
    ├── project.yaml        # Project metadata
    ├── tasks.yaml          # Tasks with status, priority, dependencies
    ├── decisions.yaml      # Architecture Decision Records (ADR)
    ├── milestones.yaml     # Milestone definitions
    ├── risks.yaml          # Risks and blockers
    ├── memory.db           # Session memories (SQLite + FTS5)
    └── daily/
        └── 2026-04-08.yaml # Auto-generated daily log

~/.pm/
├── registry.yaml           # Global project index
└── memory.db               # Cross-project memory index

YAML files are human-readable and hand-editable. Memory DB is the source of truth for session data; the global index at ~/.pm/memory.db enables cross-project search.


CLAUDE.md Integration

Add this to your project's CLAUDE.md for automatic PM behavior (or run pm-server update-claudemd):

## PM Server 自動行動ルール(必ず従うこと)

### セッション開始時(最初の応答の前に必ず実行)
1. pm_status を MCP ツールとして実行し、現在の進捗を表示する
2. pm_next で次に着手すべきタスクを3件表示する
3. pm_recall で前回セッションの文脈を取得する
4. ブロッカーや期限超過があれば警告する

### タスクに着手する前
1. 該当タスクを pm_update_task で in_progress に変更する

### 作業中に重要な発見・判断があった時
1. pm_remember で記憶を保存する(関連タスクIDがあれば task_id で紐付け)

### コンテキスト保全(Compaction / Clear 対策)
Claude Code はセッションが長くなるとコンテキストを自動圧縮(compaction)する。
圧縮のタイミングは予測できないため、重要な情報は随時保存すること。
1. 重要な発見・技術的判断は発生時点で即座に pm_remember で保存する(セッション終了を待たない)
2. 複雑な議論や設計検討の後は、結論を pm_remember でまとめて保存する
3. 3往復以上のやり取りで未記録の知見があれば、チェックポイントとして pm_remember で保存する
4. ユーザーが /clear する前は必ず pm_session_summary を実行する
5. Compaction 後にコンテキストが失われていると感じたら pm_recall で復元する

### タスク完了時(コードが動作確認できたら)
1. pm_update_task で done に変更する
2. pm_log に完了内容を記録する
3. 次の推薦タスクを pm_next で表示する
4. アトミックコミットを作成する

### 設計上の意思決定が発生した時
1. ユーザーに「ADRとして記録しますか?」と確認する
2. 承認されたら pm_add_decision で保存する

### コーディングセッション終了時
1. 進行中のタスクの状態を確認し、必要に応じて更新する
2. pm_log にセッションの成果を記録する
3. pm_session_summary で要約を保存する
4. 未コミットの変更があればコミットする

Tips: Getting the Most out of pm-server

Recommended Workflow

1. Install & register      →  pip install pm-server && pm-server install
2. Start Claude Code       →  (restart after install)
3. Initialize project      →  "PM初期化して" or "Initialize PM"
4. Add tasks               →  "Add task: implement user auth"
5. Work on tasks            →  "Start MYAPP-001"
6. Complete tasks           →  "MYAPP-001 done"
7. End session              →  "Session wrap-up" (triggers summary + log)

Protecting Context from Compaction

Claude Code automatically compresses (compacts) conversation context when sessions get long. This means detailed information from earlier exchanges can be lost. pm-server's memory tools protect against this:

Situation What to do
Made an important discovery pm_remember immediately — don't wait for session end
Finished a design discussion Summarize the conclusion with pm_remember
About to run /clear Run pm_session_summary first
Resuming after compaction pm_recall restores previous context
Starting a new session pm_recall + pm_status (auto if CLAUDE.md rules are set)

Key principle: Save early, save often. Compaction timing is unpredictable — if a finding is worth keeping, record it now.

Session Continuity

pm-server's memory layer ensures nothing is lost between sessions:

Session 1                          Session 2
  │                                  │
  ├─ pm_remember (findings)          ├─ pm_recall ← restores context
  ├─ pm_remember (decisions)         ├─ pm_status ← current state
  ├─ pm_session_summary              │
  └─ (session ends)                  └─ (continues seamlessly)

Multi-Project Management

> "Discover projects under ~/projects"    # Auto-scan & register
> "Show all projects"                     # Portfolio overview
> "Search memories for 'auth' globally"   # Cross-project search
> "Show dashboard for all projects"       # Portfolio HTML dashboard

CLI Commands

pm-server install          # Register MCP server in Claude Code
pm-server uninstall        # Unregister MCP server
pm-server serve            # Start MCP server (called by Claude Code automatically)
pm-server discover .       # Scan for projects with .pm/ directories
pm-server status           # Show project status from terminal
pm-server context-inject   # Print session context to stdout (for hook integration)
pm-server migrate          # Migrate from pm-agent (rename transition)
pm-server update-claudemd  # Update PM Server rules in CLAUDE.md

Architecture

Claude Code Session
  │
  ├── CLAUDE.md auto-action rules
  │
  └── MCP Server (stdio)
        └── pm-server serve
              │
              ├── server.py    → 22 MCP tools (FastMCP)
              ├── models.py    → Pydantic v2 data models
              ├── storage.py   → YAML read/write
              ├── memory.py    → SQLite memory store + FTS5 search
              ├── recall.py    → Session context builder (token-budgeted)
              ├── context.py   → CLI context injection
              ├── velocity.py  → Velocity calculation & risk detection
              ├── dashboard.py → HTML/text dashboard (Jinja2)
              ├── discovery.py → Auto-detect project info
              └── installer.py → claude mcp add wrapper
                    │
                    ├── project-A/.pm/ (YAML + memory.db)
                    ├── project-B/.pm/ (YAML + memory.db)
                    └── ~/.pm/registry.yaml + memory.db

Migrating from pm-agent

If you were using the earlier pm-agent package:

pip uninstall pm-agent
pip install pm-server
pm-server migrate       # Switches MCP registration from pm-agent to pm-server
# Restart Claude Code

The migrate command will:

  • Remove the old pm-agent MCP registration
  • Register pm-server as the new MCP server
  • Verify ~/.pm/registry.yaml integrity
  • Warn about any CLAUDE.md files that reference pm-agent

Your .pm/ data directories are unchanged — no data migration needed.


Requirements

  • Python 3.11+
  • Claude Code (with MCP support)

Dependencies


Development

git clone https://github.com/flc-design/pm-server.git
cd pm-server
pip install -e ".[dev]"
pytest                  # 237 tests
ruff check src/         # Lint
ruff format src/        # Format

Design Principles

  1. Zero Configurationpip install + one command, done
  2. Auto-everything — detection, registration, and inference are fully automatic
  3. Git-friendly — plain text YAML, trackable with git diff
  4. Human-readable — safe to hand-edit, won't break
  5. AI-native — formats that Claude Code can naturally read and write
  6. Non-invasive — only adds .pm/, never modifies your project

License

MIT — Shinichi Nakazato / FLC design co., ltd.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pm_server-0.3.2.tar.gz (83.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pm_server-0.3.2-py3-none-any.whl (42.6 kB view details)

Uploaded Python 3

File details

Details for the file pm_server-0.3.2.tar.gz.

File metadata

  • Download URL: pm_server-0.3.2.tar.gz
  • Upload date:
  • Size: 83.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for pm_server-0.3.2.tar.gz
Algorithm Hash digest
SHA256 e5dbf6cf9233ba1f5afd91e7c6a28df364bbf3e7bffead9cf6464d3b2a6b0ccc
MD5 318c3a58cb106f0106d9cffc3fd549e0
BLAKE2b-256 2f9f9067eb7084e62657506df8bf51ab0ea809360c01d1d6c122c09662202042

See more details on using hashes here.

File details

Details for the file pm_server-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: pm_server-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 42.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for pm_server-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2d50db9fa55e5ba1eb1fe9b471de899894f01df5ece4bca4d75b2b9f0c265946
MD5 1d1acc3e2a66fd9ef585702896d8a07b
BLAKE2b-256 673ddbfb3760fcafcb87f59421c140f51d6b9207417a35d858bcc45f5dabd036

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page