The easiest way to get started with Claude Code:
# Add the plugin marketplace
/plugin marketplace add https://github.com/Commands-com/pm.git
# Install the plugin
/plugin install pm
# Restart Claude Code - you're ready to go!
This automatically installs:
- ✅ MCP server (via
uvx
) - ✅ All
/pm:*
slash commands - ✅ Specialized agents (adaptive-assessor, task-runner, etc.)
- Install from PyPI
pip install project-manager-mcp
# or
uvx project-manager-mcp
- Add MCP server to your AI assistant:
Claude Code:
claude mcp add project-manager -- uvx project-manager-mcp
Codex:
[mcp_servers.project-manager-mcp]
command = "uvx"
args = ["project-manager-mcp"]
Gemini:
"mcpServers": {
"project-manager": {
"type": "stdio",
"command": "uvx",
"args": ["project-manager-mcp"],
"env": {}
}
}
- Install Claude assets (commands & agents) to your project:
project-manager-mcp install-claude-assets --target-dir ~/my-project
A comprehensive project management system with Model Context Protocol (MCP) support, enabling AI agents to manage projects, epics, and tasks through both programmatic interfaces and a web dashboard.
- AI Agent Integration: MCP tools for autonomous project management
- Web Dashboard: Real-time web interface for project visualization
- Task Locking System: Atomic operations prevent concurrent modifications
- WebSocket Updates: Real-time synchronization across all clients
- SQLite Backend: Lightweight, serverless database with WAL mode
- Zero-Config Setup: Single command deployment with automatic port allocation
- Project Import: YAML-based project definition and import system
- RA Tag Context Detection: Zero-effort context capture for Response Awareness tags
# Install from source (development)
pip install -e .
# Or install development dependencies
pip install -e .[dev]
# Run directly with uvx (no installation needed)
uvx --from . project-manager-mcp
# Start with default configuration (dashboard on :8080, MCP over stdio)
project-manager-mcp
# Custom port and options
project-manager-mcp --port 9000 --no-browser
# Import a project on startup
project-manager-mcp --project examples/simple-project.yaml
# MCP over stdio (default; for shell integration)
project-manager-mcp --mcp-transport stdio
# Add RA tags with automatic context detection
python -m task_manager.cli add-ra-tag "#COMPLETION_DRIVE_IMPL: Assuming user validation upstream" --task-id 123
# Install Claude agents and commands to your project
project-manager-mcp install-claude-assets --target-dir ~/my-project
After startup, access the dashboard at http://localhost:8080
(or your chosen port).
Connect MCP clients to interact programmatically:
# Stdio transport (default)
# Connect via stdin/stdout
# SSE transport (optional)
project-manager-mcp --mcp-transport sse
# Connect to http://localhost:8081/sse
# Using uvx for MCP integration
uvx --from . project-manager-mcp --mcp-transport stdio
uvx --from . project-manager-mcp --mcp-transport sse --port 9000
- CLI Interface (
task_manager.cli
): Zero-config server coordination - FastAPI Backend (
task_manager.api
): REST endpoints and WebSocket broadcasting - MCP Server (
task_manager.mcp_server
): AI agent tool integration - Database Layer (
task_manager.database
): SQLite with atomic locking - MCP Tools (
task_manager.tools
): GetAvailableTasks, AcquireTaskLock, UpdateTaskStatus, ReleaseTaskLock, AddRATag - Context Detection (
task_manager.context_utils
): Automatic file, git, and symbol context detection
Projects (top-level containers)
├── Epics (high-level initiatives)
├── Tasks (specific work items)
Each task supports:
- Status tracking: pending → in_progress → completed
- Atomic locking: Prevent concurrent modifications
- Agent assignment: Track work ownership
- Real-time updates: WebSocket broadcasting
- RA Tag Context: Automatic context detection for Response Awareness tags
- SSE (Server-Sent Events): HTTP-based MCP for network clients
- Stdio: Pipe-based MCP for shell and local integration
- None: Dashboard-only mode without MCP server
Two patterns are supported:
- Single-call update (auto-lock):
# Automatically acquires a short-lived lock if unlocked, updates status, then releases.
mcp_client.call_tool("update_task_status", {
"task_id": "123",
"status": "DONE", # UI vocabulary also accepted
"agent_id": "agent-1"
})
- Explicit lock + update (long-running work):
# Acquire exclusive lock on task (status moves to IN_PROGRESS)
mcp_client.call_tool("acquire_task_lock", {
"task_id": "123",
"agent_id": "agent-1",
"timeout": 300
})
# Perform work...
# Update status and auto-release on DONE
mcp_client.call_tool("update_task_status", {
"task_id": "123",
"status": "DONE",
"agent_id": "agent-1"
})
WebSocket events keep all clients synchronized:
task.status_changed
- Task status updatestask.locked
- Task lock acquisitiontask.unlocked
- Task lock release
Define projects in YAML and import on startup:
projects:
- name: "User Management System"
description: "Complete user lifecycle management"
epics:
- name: "User Authentication"
status: "ACTIVE"
tasks:
- name: "Create registration form"
status: "TODO"
- name: "Implement login validation"
status: "TODO"
- Query available work:
get_available_tasks
- Claim exclusive access:
acquire_task_lock
- Update progress:
update_task_status
- Release when done: Auto-release on completion
- Prevent conflicts: Atomic locking prevents multiple agents on same task
- Work distribution: Available task querying enables load balancing
- Progress tracking: Status updates provide visibility across agents
- Real-time sync: WebSocket updates keep all systems current
- Project visualization: Project → Epic → Task hierarchy
- Real-time monitoring: Live updates from agent activity
- Manual intervention: Override task states when needed
- Project import: Load new projects without restart
--port PORT
: Dashboard server port (default: 8080)--mcp-transport {stdio|sse|none}
: MCP transport mode (default: stdio)--project PATH
: Import project YAML on startup--no-browser
: Skip automatic browser launch--host HOST
: Server bind address (default: 127.0.0.1)--db-path PATH
: Database file location (default: project_manager.db)--verbose
: Enable debug logging
Install Claude Code agents and commands to your projects:
# Install both agents and commands to a project
project-manager-mcp install-claude-assets --target-dir ~/my-project
# Install with overwrite protection
project-manager-mcp install-claude-assets --target-dir ~/my-project --force
# Install only agents
project-manager-mcp install-claude-assets --target-dir ~/my-project --agents-only
# Install only commands
project-manager-mcp install-claude-assets --target-dir ~/my-project --commands-only
# Verbose output showing all installed files
project-manager-mcp install-claude-assets --target-dir ~/my-project --verbose
# Alternative standalone command
pm-install-claude-assets --target-dir ~/my-project
This creates a .claude/
directory in your target location with:
- Agents (
.claude/agents/
): Specialized agents for adaptive assessment, planning review, task execution, and verification - Commands (
.claude/commands/pm/
): Project management commands for task workflow, epic management, and status tracking
DATABASE_PATH
: Override default database locationDEBUG
: Enable verbose logging
- Startup time: < 2 seconds with empty database
- Task operations: < 50ms for lock acquisition/release
- WebSocket latency: < 10ms for local connections
- Concurrent agents: Tested with 50+ simultaneous agents
- Database size: Handles 10,000+ tasks efficiently
- Port conflicts: Automatic alternative port allocation
- Database corruption: WAL mode provides crash recovery
- WebSocket disconnections: Automatic reconnection handling
- Lock timeouts: Automatic cleanup of expired locks
- Agent failures: Lock expiration prevents indefinite blocking
- No authentication: Open access for development and testing
- Local binding: Default 127.0.0.1 limits network exposure
- File permissions: Database protected by filesystem ACLs
- Input validation: Pydantic models prevent injection attacks
- Resource limits: Lock timeouts prevent resource exhaustion
Port already in use
# Use alternative ports
project-manager-mcp --port 9000
# Check what's using the port
lsof -i :8080
Database locked errors
# Check for competing processes
ps aux | grep project-manager-mcp
# Remove database if corrupted
rm project_manager.db
WebSocket connection refused
# Verify server is running
curl http://localhost:8080/healthz
# Check WebSocket endpoint
curl -H "Upgrade: websocket" http://localhost:8080/ws/updates
MCP client connection issues
# Test SSE endpoint (when using --mcp-transport sse)
curl http://localhost:8081/sse
# For stdio mode, verify no conflicting processes
project-manager-mcp --mcp-transport stdio --verbose
- Detailed Usage Guide - CLI options, MCP tools, WebSocket events
- API Documentation - REST endpoints, request/response formats
- Development Guide - Contributing, testing, architecture decisions
- RA Tag Context Usage Guide - Complete guide for Response Awareness tag context detection
examples/simple-project.yaml
- Basic project structureexamples/complex-project.yaml
- Multi-epic enterprise project
This project is licensed under the MIT License - see the LICENSE file for details.
You are free to use, modify, and distribute this software for any purpose, including commercial use.
We welcome contributions! Please see CONTRIBUTING.md for:
- Development setup instructions
- Code style guidelines
- Testing requirements
- Pull request process
- Response Awareness (RA) methodology guidelines
For detailed architecture and development information, see Development Guide.