settings — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited settings (Hook) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Talk to your roadmaps using AI. Ask questions, create ideas, check OKR progress, and manage launches through natural conversation with Claude, Cursor, or other AI assistants.
Instead of clicking through ProductPlan's interface, just ask:
"What's on our Q1 roadmap?"
"Show me all objectives that are behind schedule"
"Create a new idea for mobile app improvements"
"What launches are coming up this month?"
"List all ideas tagged 'customer-request'"
The AI fetches your real ProductPlan data and responds in seconds.
No coding required. You'll copy a file and paste some settings.
Go to the Releases page and download the right file for your computer:
| Your Computer | Download This |
|---|---|
| Mac (M1, M2, M3, M4) | productplan-darwin-arm64 |
| Mac (Intel) | productplan-darwin-amd64 |
| Windows | productplan-windows-amd64.exe |
| Linux | productplan-linux-amd64 |
On Mac/Linux, open Terminal and run these two commands (replace the filename with what you downloaded):
chmod +x ~/Downloads/productplan-darwin-arm64
sudo mv ~/Downloads/productplan-darwin-arm64 /usr/local/bin/productplanYou'll be asked for your password. This is normal.
On Windows:
mkdir C:\Tools.exe to that folder and rename it: move %USERPROFILE%\Downloads\productplan-windows-amd64.exe C:\Tools\productplan.exeC:\Tools\productplan.exe in your AI assistant config (shown in Step 3)Note: You can skip adding to PATH. Just use the full file path in your configuration.
Pick the tool you use:
<details> <summary><strong>Claude Desktop</strong> (click to expand)</summary>
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonyour-token with your actual API token):Mac/Linux:
{
"mcpServers": {
"productplan": {
"command": "/usr/local/bin/productplan",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}
}Windows:
{
"mcpServers": {
"productplan": {
"command": "C:\\Tools\\productplan.exe",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}
}</details>
<details> <summary><strong>Claude Code (Terminal)</strong></summary>
Add to your config file:
~/.claude.json%USERPROFILE%\.claude.jsonMac/Linux:
{
"mcpServers": {
"productplan": {
"command": "/usr/local/bin/productplan",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}
}Windows:
{
"mcpServers": {
"productplan": {
"command": "C:\\Tools\\productplan.exe",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}
}</details>
<details> <summary><strong>Cursor</strong></summary>
Mac/Linux:
{
"productplan": {
"command": "/usr/local/bin/productplan",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}Windows:
{
"productplan": {
"command": "C:\\Tools\\productplan.exe",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}Windows users: Use double backslashes (\\) in the path. This is required because backslash is an escape character in JSON.</details>
<details> <summary><strong>VS Code + Cline</strong></summary>
Mac/Linux:
{
"cline.mcpServers": {
"productplan": {
"command": "/usr/local/bin/productplan",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}
}Windows:
{
"cline.mcpServers": {
"productplan": {
"command": "C:\\Tools\\productplan.exe",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
}
}</details>
<details> <summary><strong>VS Code + Continue</strong></summary>
~/.continue/config.json%USERPROFILE%\.continue\config.jsonMac/Linux:
{
"mcpServers": [
{
"name": "productplan",
"command": "/usr/local/bin/productplan",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
]
}Windows:
{
"mcpServers": [
{
"name": "productplan",
"command": "C:\\Tools\\productplan.exe",
"env": {
"PRODUCTPLAN_API_TOKEN": "your-token"
}
}
]
}</details>
<details> <summary><strong>n8n (Workflow Automation)</strong></summary>
N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true/usr/local/bin/productplanC:\Tools\productplan.exePRODUCTPLAN_API_TOKEN=your-tokenExample workflow: Slack Trigger → AI Agent (with MCP Client) → Slack Response
</details>
Open your AI assistant and try:
"Summarize what changed on our Product Roadmap in the last week"
"List all Q1 objectives and their progress"
"Show me all ideas tagged 'enterprise' that don't have a priority set"
"What tasks are still incomplete for the January launch?"
"When is the 'Mobile App v2' bar scheduled to start?"
| Feature | View | Create | Edit | Delete |
|---|---|---|---|---|
| Roadmaps | Yes | - | - | - |
| Roadmap Comments | Yes | - | - | - |
| Bars (roadmap items) | Yes | Yes | Yes | Yes |
| Bar Comments | Yes | - | - | - |
| Bar Connections | Yes | Yes | - | Yes |
| Bar Links | Yes | Yes | - | Yes |
| Lanes (categories) | Yes | Yes | Yes | Yes |
| Legends (bar colors) | Yes | - | - | - |
| Milestones | Yes | Yes | Yes | Yes |
| Ideas (Discovery) | Yes | Yes | Yes | - |
| Idea Customers | Yes | - | - | - |
| Idea Tags | Yes | - | - | - |
| Opportunities | Yes | Yes | Yes | - |
| Idea Forms | Yes | - | - | - |
| Objectives (OKRs) | Yes | Yes | Yes | Yes |
| Key Results | Yes | Yes | Yes | Yes |
| Launches | Yes | Yes | Yes | Yes |
| Launch Sections | Yes | Yes | Yes | Yes |
| Launch Tasks | Yes | Yes | Yes | Yes |
| Users | Yes | - | - | - |
| Teams | Yes | - | - | - |
┌─────────────────┐ spawns ┌─────────────────┐ API calls ┌─────────────────┐
│ AI Assistant │ ───────────────── │ MCP Server │ ─────────────────▶ │ ProductPlan │
│ (Claude, Cursor)│ ◀───────────────▶ │ (this binary) │ ◀───────────────── │ API │
└─────────────────┘ stdin/stdout └─────────────────┘ JSON data └─────────────────┘
your computer your computer cloudWhy does this need to run on your computer?
MCP (Model Context Protocol) works through a subprocess model. Your AI assistant doesn't connect to a remote server; it spawns the binary as a local process and communicates via stdin/stdout. This architecture means:
When you ask "What's on our Q1 roadmap?", here's what happens:
Pre-built workflow guides that teach AI assistants how to use ProductPlan tools effectively. Each skill targets a specific persona with tailored workflows.
| Skill | Audience | Focus |
|---|---|---|
| productplan-workflows | General | Core patterns and tool reference |
| productplan-pm | Product Managers | Full toolkit: roadmaps, OKRs, ideas, launches |
| productplan-leadership | Executives | Portfolio health, cross-roadmap views |
| productplan-customer-facing | Sales & CS | Customer-ready roadmap timelines |
All skills follow these output conventions:
Persona-specific variations:
bar_id for follow-up actionsTo use a skill, copy the SKILL.md file to your Claude Code skills directory:
# Copy a skill (example: PM skill)
cp skills/productplan-pm/SKILL.md ~/.claude/skills/productplan-pm.mdOr reference skills directly in your prompts:
"Use the productplan-pm workflow to show me our Q1 roadmap"
"Command not found" or "spawn ENOENT"
Your AI assistant can't find the binary. This means:
/usr/local/bin/productplan, or you forgot to run chmod +x.exeFix: Verify the binary exists at the path in your config. Run ls -la /usr/local/bin/productplan (Mac/Linux) or check if C:\Tools\productplan.exe exists (Windows).
Windows path issues
Common mistakes on Windows:
| Wrong | Correct |
|---|---|
/usr/local/bin/productplan | C:\\Tools\\productplan.exe |
C:\Tools\productplan.exe (single backslash in JSON) | C:\\Tools\\productplan.exe |
productplan (no path) | C:\\Tools\\productplan.exe |
Missing .exe extension | Include .exe in the path |
Windows uses backslashes (\) for paths, but JSON treats backslash as an escape character. You must double them (\\) in your config file.
"Invalid API token"
Double-check your token at ProductPlan Settings → API. Tokens can expire or be regenerated. Make sure you copied the full token without extra spaces.
"No roadmaps found"
Your API token only accesses data you have permission to see in ProductPlan. Check that your account has access to the roadmaps you're looking for.
AI assistant doesn't see ProductPlan tools
MCP servers load when your AI assistant starts, not when configs change. After editing your config file, fully quit and restart the application. On Mac, use Cmd+Q (not just closing the window).
"Permission denied" on Mac/Linux
The binary needs execute permission. Run:
chmod +x /usr/local/bin/productplanYou can also use this tool directly in Terminal without an AI assistant:
# First, set your token
export PRODUCTPLAN_API_TOKEN="your-token"
# Then run commands
productplan status # Check connection
productplan roadmaps # List all roadmaps
productplan bars 12345 # List bars in roadmap #12345
productplan objectives # List all OKRs
productplan ideas # List all ideas
productplan opportunities # List all opportunities
productplan launches # List all launchesModel Context Protocol (MCP) is an open standard that lets AI assistants connect to external tools. Anthropic created it; other AI providers are adopting it. This server implements MCP so your AI assistant can read and write ProductPlan data.
ProductPlan is roadmap software used by 4,000+ product teams. It handles roadmaps, OKRs, idea discovery, and launch coordination.
<details> <summary>Project structure</summary>
productplan-mcp-server/
├── cmd/productplan/main.go # Entry point (~100 lines)
├── internal/
│ ├── api/ # ProductPlan API client
│ │ ├── client.go # HTTP client with caching, retry, rate limiting
│ │ ├── endpoints.go # 40+ API endpoint methods
│ │ └── formatters.go # Response enrichment for AI
│ ├── mcp/ # MCP protocol implementation
│ │ ├── server.go # JSON-RPC server, stdio I/O
│ │ ├── handler.go # Tool dispatch via registry
│ │ └── types.go # Protocol types
│ ├── tools/ # Tool definitions and handlers
│ │ ├── registry.go # Tool registration and dispatch
│ │ └── types.go # Typed argument structs for handlers
│ ├── cli/ # CLI commands (status, roadmaps, etc.)
│ │ └── cli.go
│ └── logging/ # Structured JSON logging
│ └── logger.go
├── pkg/productplan/ # Reusable utilities
│ ├── cache.go # LRU cache with TTL
│ ├── retry.go # Exponential backoff with jitter
│ ├── ratelimit.go # Adaptive rate limiting
│ ├── registry.go # ToolBuilder for schema generation
│ ├── requestid.go # Request tracing
│ └── errors.go # Error suggestions
└── evals/ # LLM evaluation test suite
├── tool_selection.json
├── confusion_pairs.json
└── argument_correctness.json</details>
<details> <summary>Build from source</summary>
git clone https://github.com/olgasafonova/productplan-mcp-server.git
cd productplan-mcp-server
go build -o productplan ./cmd/productplanBuild for all platforms:
# macOS Apple Silicon
GOOS=darwin GOARCH=arm64 go build -o dist/productplan-darwin-arm64 ./cmd/productplan
# macOS Intel
GOOS=darwin GOARCH=amd64 go build -o dist/productplan-darwin-amd64 ./cmd/productplan
# Linux
GOOS=linux GOARCH=amd64 go build -o dist/productplan-linux-amd64 ./cmd/productplan
# Windows
GOOS=windows GOARCH=amd64 go build -o dist/productplan-windows-amd64.exe ./cmd/productplan</details>
<details> <summary>Testing</summary>
Run all tests:
go test ./...Run with coverage:
go test ./... -coverRun benchmarks:
go test ./internal/... -bench=. -benchmemRun evaluation suite:
./scripts/run-evals.shCoverage targets:
| Package | Coverage |
|---|---|
| internal/mcp | 97% |
| internal/logging | 97% |
| internal/api | 95% |
| internal/cli | 95% |
| internal/tools | 90% |
</details>
<details> <summary>MCP tool reference</summary>
47 tools available: 35 READ tools and 12 WRITE tools (action-based):
Read tools:
list_roadmaps, get_roadmap, get_roadmap_bars, get_roadmap_lanes, get_roadmap_milestones, get_roadmap_legends, get_roadmap_comments, get_roadmap_completeget_bar, get_bar_children, get_bar_comments, get_bar_connections, get_bar_linkslist_objectives, get_objective, list_key_results, get_key_resultlist_ideas, get_idea, list_all_customers, list_all_tags, list_opportunities, get_opportunity, list_idea_forms, get_idea_formlist_launches, get_launch, get_launch_sections, get_launch_section, get_launch_tasks, get_launch_taskcheck_status, health_check, list_users, list_teamsWrite tools:
manage_bar, manage_lane, manage_milestonemanage_bar_connection, manage_bar_linkmanage_objective, manage_key_resultmanage_idea, manage_opportunitymanage_launch, manage_launch_section, manage_launch_taskExample:
{"tool": "list_roadmaps", "arguments": {}}
{"tool": "manage_bar", "arguments": {"action": "create", "roadmap_id": "123", "lane_id": "456", "name": "New feature"}}
{"tool": "manage_idea", "arguments": {"action": "create", "name": "Mobile app improvements"}}</details>
<details> <summary>Architecture</summary>
The server uses a clean layered architecture:
┌──────────────────────────────────────────────────────────────┐
│ cmd/productplan │
│ (entry point, DI) │
└──────────────────────────────────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ internal/cli │ │ internal/mcp │ │internal/tools │
│ (CLI cmds) │ │ (JSON-RPC IO) │ │ (handlers) │
└───────────────┘ └───────────────┘ └───────────────┘
│ │
└──────────┬──────────┘
▼
┌───────────────────┐
│ internal/api │
│ (HTTP client) │
└───────────────────┘
│
▼
┌───────────────────┐
│ ProductPlan API │
└───────────────────┘Key interfaces:
// Tool handler interface (internal/mcp)
type Handler interface {
Handle(ctx context.Context, args map[string]any) (json.RawMessage, error)
}
// Logger interface (internal/logging)
type Logger interface {
Debug(msg string, fields ...Field)
Info(msg string, fields ...Field)
Warn(msg string, fields ...Field)
Error(msg string, fields ...Field)
}Logging format:
{"ts":"2024-12-26T10:30:00Z","level":"info","req_id":"ab12","op":"get_roadmap_bars","dur_ms":245}</details>
See CHANGELOG.md for release history and detailed changes.
If this server saved you time, consider giving it a ⭐ on GitHub. It helps others discover the project.
Check out my other MCP servers:
| Server | Description | Stars |
|---|---|---|
| gleif-mcp-server | Access GLEIF LEI database. Look up company identities, verify legal entities. | |
| mediawiki-mcp-server | Connect AI to any MediaWiki wiki. Search, read, edit wiki content. | |
| miro-mcp-server | Control Miro whiteboards with AI. Boards, diagrams, mindmaps, and more. | |
| nordic-registry-mcp-server | Access Nordic business registries. Look up companies across Norway, Denmark, Finland, Sweden. | |
| tilbudstrolden-mcp | Nordic grocery deal hunting. Find offers, plan meals, track spending. |
MIT License - see LICENSE
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.