Cpm Planner vs Jira MCP
A side-by-side look at the Cpm Planner and Jira MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Cpm Planner for product management work as a local process; choose Jira MCP for product management. You can also run both side by side in one mcpServers block.
Which MCP server should you choose?
Choose Cpm Planner when
- You need dedicated capabilities in the Product Management domain.
- You prefer a local stdio subprocess transport.
- Its auth model fits you: No auth required.
- You have the keys it needs:
CPM_PLANNER_DB. - You want tools like
plan.release.compile, plan.release.diff, plan.submit.
Choose Jira MCP when
- You need dedicated capabilities in the Product Management domain.
- Its auth model fits you: API key required.
- You have the keys it needs:
ATLASSIAN_HOST, ATLASSIAN_EMAIL, ATLASSIAN_TOKEN, ENABLED_TOOLS. - You want tools like
jira_get_issue, jira_create_issue, jira_create_child_issue.
Feature & specification comparison
Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Product Management | Product Management |
| Quality signal | 63/100 · Good | 52/100 · Good |
| Install command | Confirmed | Not confirmed yet |
| Transport | Local subprocess (stdio) | — |
| Auth | No auth required | API key required |
| Pricing | Free | Free |
| Required env vars | CPM_PLANNER_DB | ATLASSIAN_HOSTATLASSIAN_EMAILATLASSIAN_TOKENENABLED_TOOLS |
| Verified owner | Community listing | Community listing |
| GitHub stars | 0 | 96 |
| Directory activity | 0 views 0 installs 0 upvotes | 4 views 0 installs 0 upvotes |
| Tools | 25 | 21 |
| Full listing | View Cpm Planner | View Jira MCP |
Tools & capabilities
Cpm Planner tools 25
plan.release.compileCompile version-1 bounded release metadata into an ordinary lint-clean PlanGraph. Expands protected PR/check/approval/merge hops, producer retries, retained receipts and central acceptance. Every collection declares cardinality or a bounded retained source. Pure offline operation: never executes, accepts, submits or baselines work.plan.release.diffCompare a retained compiled graph with current version-1 workflow/promotion policy. Reports policy_changed, added/removed/changed ids and stale; includes retained-history estimate drift. Read-only: apply accepted changes through normal plan.sync or plan.revise.plan.submitSubmit a plan graph and receive a plan_id. Idempotent: identical graphs return the same plan_id. With `name` (and optional `project`/`variant`, variant defaults to "main"), registers a named variant instead: project defaults to the discovered project root.plan.acquire_cohortAcquire up to max_count ready deliverables with no conflicting file claims atomically. Returns the cohort plus per-deliverable locks. A deliverable explicitly marked failed 3 times is circuit-broken to failed instead of re-leased; leases lost environmentally (TTL lapse, no terminal mark) never trip that breaker but are bounded separately (LAPSE_LIMIT at 10). Optional ttl_seconds sets the lease TTL (clamped to the server maximum). Optional ids targets specific deliverables and filter.metadata narrows by metadata equality; deliverables with metadata.kind = "manual" are never leased. ids that do not match filter.metadata are ignored (not reported in blocked). The response carries blocked [{id, code, reason}], blocked_count, and needs_operator (true when any blocked code is LAPSE_LIMIT: clear with plan.force_release {reset_counters: true}). Select the plan by plan_id, plan line name, or active: true.plan.heartbeatRefresh the TTL on a held lock; LOCK_NOT_HELD or LOCK_EXPIRED on failure. Optional ttl_seconds sets the new TTL (clamped to the server maximum); without it the lease is never shortened. Select the plan by plan_id, plan line name, or active: true.plan.mark_statusSet a deliverable's status. Complete/Failed releases the lock; caller_id mismatch yields LOCK_NOT_HELD. Without a lock, Complete, Ready or InProgress requires all prerequisites complete (PREREQUISITES_INCOMPLETE) and is audited; other lockless marks are audited too, and an already-complete deliverable cannot be changed (LOCK_NOT_HELD). A lockless in_progress persists across restarts and is not leasable; hand it back with a lockless ready (or other status) mark. plan.force_release does not affect it. Optional earned-value progress: earned_pct (0..100, only with in_progress; ignored with complete), actual_effort_hours (total so far, 0..1000000; replaces leased hours as actual cost) and evidence (<= 2048 chars, appended to a list of at most 100); violations are INVALID_ACTUALS. Every lease that ends adds its hours to the deliverable's leased hours. Select the plan by plan_id, plan line name, or active: true.plan.statusRead-only snapshot: per-deliverable [id, status, attempt_count, failure_count, lapse_count] rows, critical_path (one real chain, always from __start__ to __finish__), critical_ids, per-deliverable schedule (es/ef/ls/lf/float, hours; synthetic __start__/__finish__ rows have synthetic=true), the ready set in float-ascending order (smallest float first, then smallest latest start, then id), plan_complete, milestones (per milestone: id, critical_path from __start__, hours, complete), and held locks. Select the plan by plan_id, plan line name, or active: true.plan.getReturn the stored PlanGraph (deliverables, estimates, files, metadata) for a plan selected by plan_id, plan line name, or active: true.plan.force_releaseOperator escape hatch — release a lock regardless of caller. Emits an audit event carrying `reason`. Select the plan by plan_id, plan line name, or active: true.plan.acceptManager/owner acceptance: mark a deliverable Complete without holding its lease. Requires all prerequisites Complete and evidence; audited. A live lease held by someone else is refused (LOCK_HELD) unless override_lock is true. Select the plan by plan_id, plan line name, or active: true.plan.lintLint a graph, stored plan, or plan file without creating one: cycles (with the loop), redundant edges, edges without rationale, interface edges not targeting a contract, deliverables feeding no milestone, and unordered file overlaps. Linting by plan_id also adds NO_BASELINE (warning) when the plan is executable and has recorded progress but no earned-value baseline. Provide exactly one of graph, plan_id, or path.plan.scheduleLevel a graph or stored plan against resource capacities (`metadata.owner` by default; metadata.resources can claim several pools concurrently): makespan, per-deliverable start/finish, per-resource load, the driving chain (dependency vs named resource waits), and project/feeding buffers. A deliverable with duration_hours plus metadata.wall_clock_only:true advances elapsed time but consumes no capacity. Provide exactly one of graph or plan_id. capacities is required: every resource that carries work needs at least 1 unit (otherwise INVALID_CAPACITIES: lists the missing resources). plan.schedule rejects what plan.submit rejects (INVALID_GRAPH:).- +13 more on the listing page
Jira MCP tools 21
jira_get_issueRetrieve detailed information about a specific issue including status, assignee, description, subtasks, and available transitionsjira_create_issueCreate a new issue with specified details (returns key, ID, and URL)jira_create_child_issueCreate a child issue (sub-task) linked to a parent issuejira_update_issueModify an existing issue's details (supports partial updates)jira_list_issue_typesList all available issue types in a project with their IDs, names, and descriptionsjira_search_issueSearch for issues using JQL (Jira Query Language) with customizable fields and expand optionsjira_list_sprintsList all active and future sprints for a specific board or projectjira_get_sprintRetrieve detailed information about a specific sprint by its IDjira_get_active_sprintGet the currently active sprint for a given board or projectjira_search_sprint_by_nameSearch for sprints by name with exact or partial matchingjira_list_statusesRetrieve all available issue status IDs and their names for a projectjira_transition_issueTransition an issue through its workflow using a valid transition ID- +9 more on the listing page
Ready-to-paste client configs
Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
Cpm Planner
{
"mcpServers": {
"cpm-planner": {
"command": "npx",
"args": [
"-y",
"@matthew-cochran/cpm"
],
"env": {
"CPM_PLANNER_DB": "YOUR_CPM_PLANNER_DB_HERE"
}
}
}
}
Jira MCP
No confirmed install command for Jira MCP yet — follow the setup steps linked from its listing page rather than a guessed package name.
Frequently asked questions
Cpm Planner is categorized under Product Management and uses a local stdio subprocess. Jira MCP belongs to Product Management and uses an install path we have not confirmed yet. Pick Cpm Planner for product management work and Jira MCP for product management.
Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client. Jira MCP has no confirmed install command yet — follow its own setup instructions.
Cpm Planner is listed as free. Auth: no auth required. Jira MCP is listed as free. Auth: api key required. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.
Yes. MCP clients support multiple servers: add cpm-planner and nguyenvanduocit-jira-mcp as separate keys in the same mcpServers object, and your assistant will call tools from either one.
On AllMCPs, Cpm Planner has a quality signal of 63/100 (Good) with 0 views, 0 installs and 0 GitHub stars. Jira MCP has 52/100 (Good) with 4 views, 0 installs and 96 GitHub stars.