ProductBrain MCP Server
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., "@ProductBrain MCP Server search my plan for checkout stories, then add a task under the top one"
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.
ProductBrain MCP server
Drive your ProductBrain plan from an MCP client — Claude Desktop, Cursor, Claude Code — with tools for search, read, mutate, the methodology workflow, and the live view.
Design — a thin shim, on purpose
This server is a thin transport over ProductBrain's versioned v1 REST API. Each tool is one call to an existing /api/v1 endpoint. The REST contract stays canonical:
It's stable when the MCP spec churns — the contract you depend on is the frozen v1 API, not the protocol.
You can drop to raw HTTP or bring your own LLM at any time; MCP is one front-door, not the only one.
Responses carry the same in-band
_metacoaching the API returns, so your agent self-corrects.
Related MCP server: hacknplan-mcp
Install
// Claude Desktop — claude_desktop_config.json
{
"mcpServers": {
"productbrain": {
"command": "npx",
"args": ["-y", "@productbrain-com/mcp"],
"env": {
"PRODUCTBRAIN_API_KEY": "pb_your_key",
"PRODUCTBRAIN_PROJECT_ID": "your-project-id"
}
}
}
}# Claude Code
claude mcp add productbrain \
-e PRODUCTBRAIN_API_KEY=pb_your_key \
-e PRODUCTBRAIN_PROJECT_ID=your-project-id \
-- npx -y @productbrain-com/mcpCursor and other clients: add an mcpServers entry with the same command/args/env.
Config (env)
Var | Required | Default |
| yes | — (your |
| no | — (tools also accept a |
| no |
|
Tools
Every agent-facing /api/v1 endpoint has a tool. One tool, one endpoint, same _meta coaching passed back verbatim.
The plan
Tool | Maps to | Use |
|
| Semantic search — use first for any lookup |
|
| Bulk read, optional type/iteration filter |
|
| A node in context (ancestors/siblings/children/subtree) |
|
| Create/update/delete nodes + phases; pass |
|
| Phases; |
|
| Story-Mapping methodology (add / task-curate / phase-assign) |
|
| The plan as a portable OKF file bundle |
|
| Plan history: every add/update/delete/restore, attributed to the app or a named agent |
The view
Tool | Maps to | Use |
|
| Drive / read the live canvas |
Projects
Tool | Maps to | Use |
|
| Projects you own or are a member of; |
|
| Bootstrap a brain — seeds the system "Later" phase. Pass an explicit |
|
| Change the display name; the id is immutable |
|
| Hide/unhide without deleting (reversible) |
Webhooks
Tool | Maps to | Use |
|
| Registered hooks with |
|
| Register; returns the signing secret once |
|
| Change url/events in place, or |
|
| Remove a registration |
Share links
Tool | Maps to | Use |
|
| Mint a public read-only link; |
|
| Audit every token minted, with an |
|
| Kill a leaked or stale link |
Members and budget
Tool | Maps to | Use |
|
| Humans and agent seats on a project |
|
| Mint an agent seat; the |
|
| Passwordless guest invite, scoped to the projects you name (Team tier) |
|
| Remove a seat; an agent's key dies with its last membership |
|
| Your tier, API access, credit balance and limits — check before a large run |
|
| Tell the PB team what to improve: feature requests, friction, bugs, notes |
Full API reference: https://productbrain.com/docs/llm-guide.md.
Source, licence, registry
Source: https://github.com/moxzas/productbrain-mcp (MIT). Issues and pull requests welcome there.
npm:
@productbrain-com/mcp. Every release is published from the repository's tag of the same version.MCP registry name:
io.github.moxzas/productbrain(server.jsonin this repo is the registry manifest).The server sends
User-Agent: productbrain-mcp/<version>so you can tell MCP traffic from raw REST calls in your own logs.
Proving it works
Two headless scripts in the repository (src/spike-proof.ts, src/parity-proof.ts; not shipped in the npm package), both run against a real deployment. Use a throwaway project on your own account:
PRODUCTBRAIN_API_KEY=pb_your_key \
PRODUCTBRAIN_PROJECT_ID=your-sandbox-project \
npm run spike # transport + auth + one read + one write
PRODUCTBRAIN_API_KEY=pb_your_key \
npm run parity # every non-plan tool once, on a throwaway projectparity creates its own throwaway project and cleans up after itself (archiving it at the end — there is no project-delete endpoint).
The Team-tier tools (add_agent_seat, invite_contributor) return 403 team_tier_required on a Builder key, and that counts as a pass — with one caveat worth knowing. It proves the shim reached the right route and passed the error and its _meta tip straight through; it does not validate the request body, because the tier gate runs before the body is read. Run parity with a Team-tier key to check those two properly.
Available Tools
27 toolsadd_agent_seatA
Mint an agent seat on a project (owner only, Team tier). Returns a pb_ API key ONCE — store it now, there is no retrieval.
Inputs: name (required), projectId.
archive_projectA
Archive (archived:true) or unarchive (false) a project you own. Archiving hides it from list_projects without deleting anything — reversible, unlike delete.
Inputs: archived (required), projectId.
create_projectA
Create a project you own and seed its system "Later" phase, so nodes can be added immediately. id defaults to a slug of the name.
Inputs: name (required), id.
create_webhookA
Register an outbound webhook. events defaults to all (node.added|updated|deleted, iteration.added|updated|deleted). Returns the signing secret ONCE — store it immediately.
Inputs: url (required), events, projectId.
delete_webhookA
Remove a webhook registration. Irreversible — the secret is gone; re-registering mints a new one.
Inputs: id (required), projectId.
export_okfA
Serialize the whole plan to a portable OKF file bundle (markdown with frontmatter, one file per node). Use when you want the plan as files — for a repo, a diff, or handing it to a tool that reads markdown — rather than as JSON.
Inputs: projectId.
get_changelogA
Read the plan's history: every add/update/delete/restore, newest first, each attributed to the app or to a named agent. This is how you find a node AFTER it was deleted — /nodes can no longer see it, but restore needs its id. Filter by nodeId, action (add|update|delete|restore), source (app|api_key), agentId, since/before (ISO). Page with before=<_meta.next_before>, never an offset. Then undo with mutate {action:'restore', nodeId}, restoring a parent before its children.
Inputs: limit, since, action, before, +4 more.
get_treeB
Get a node in context. relation = context (ancestors+siblings+children, default) | ancestors | subtree | siblings. The endpoint's own names (up | down | lateral | context) are accepted too. There is no children-only view: subtree/children both return the full subtree.
Inputs: nodeId (required), relation, projectId.
invite_contributorA
Invite a guest contributor by email to one or more projects you own (owner only, Team tier). Sends a passwordless Clerk invite; one seat regardless of project count.
Inputs: email (required), projectIds (required).
list_iterationsC
List phases/iterations. current:true returns the active phase; status:active filters to active.
Inputs: status, current, projectId.
list_membersA
List the members (human and agent seats) on a project, plus the owner. Any member can read this.
Inputs: projectId.
list_nodesC
List nodes in a project (bulk read). Optional type (goal|need|approach|job|task) and iteration filters.
Inputs: type, iteration, projectId.
list_projectsA
List the projects you own or are a member of. Archived ones are hidden unless includeArchived is true.
Inputs: includeArchived.
list_webhooksA
List the outbound webhooks registered on a project (secrets are never returned). Shows lastStatus/lastDeliveryAt so you can spot a failing receiver.
Inputs: projectId.
mutateA
Create/update/delete plan nodes and phases. action = add|update|delete|batch|addIteration|updateIteration|deleteIteration|classify. Put the rest of the v1 mutate body in payload (node | nodeId+data | mutations | iteration). Pass idempotencyKey (a UUID) to make a retry safe — a replay returns the original result instead of double-creating.
Inputs: action (required), payload (required), projectId, idempotencyKey.
read_viewB
Read what the user is looking at now: view_mode, selected_iteration, expanded_nodes, focused_goals, selected_node.
Inputs: projectId.
rename_projectA
Change a project's display name (owner only). The id is immutable — keep using the same projectId afterwards.
Inputs: name (required), projectId.
revoke_memberC
Remove a member (human or agent) from a project. Removing an agent seat revokes its API key once its last membership is gone.
Inputs: userId (required), projectId.
run_workflowB
Run the Story-Mapping methodology workflow (flow = add | task-curate | phase-assign). Returns the next prompt + opaque state, or a terminal changeset with a focus hint. Put the v1 workflow body in body.
Inputs: body (required), projectId.
searchA
Semantic search over the ProductBrain plan. Returns nodes ranked by similarity with ancestor paths. Use this FIRST for any lookup — never scan all nodes by label.
Inputs: q (required), projectId.
set_viewC
Drive the live canvas. command = { type: setViewMode|selectIteration|zoomToNode|expandNode|collapseNode|focusGoals, ... }.
Inputs: command (required), projectId.
submit_feedbackA
Tell the ProductBrain team how PB should improve: a feature you needed, friction you hit, a bug, or a general note. Stored for the team to read, not added to any plan. Make the summary self-explanatory (there is no reply channel). Keep credentials, customer records and confidential plan content out. Max 20 per 24h, so batch related points.
Inputs: kind (required), summary (required), context, details, +1 more.
tier_statusA
Read your own tier, API access, AI-credit balance, seat/project/node limits and billing period. Check this BEFORE a large run so you self-throttle instead of discovering a 402 mid-flight.
Inputs: no named parameters.
update_webhookA
Reconfigure a webhook in place (same id). Change url and/or events without minting a new secret, or pass rotateSecret:true to mint a new one (returned once). Prefer this over delete+recreate, which breaks the receiver.
Inputs: id (required), url, events, projectId, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 27 tools
Most tools target distinct resource+action pairs, and descriptions actively disambiguate overlapping reads (search 'use FIRST', list_nodes bulk read, get_tree context, get_changelog for deleted nodes). However, the all-purpose `mutate` tool overlaps conceptually with targeted writers like `rename_project`/`archive_project`/`create_project`, and the read trio (search/list_nodes/get_tree) requires careful reading to pick correctly.
Predominantly a consistent snake_case verb_noun pattern (list_projects, create_webhook, revoke_member, get_tree, set_view). Minor deviations are bare-verb names `search` and `mutate` and the noun-style `tier_status`, but the convention is largely predictable.
27 tools is heavy territory for a single server, spanning projects, nodes, webhooks, share links, members, workflow, canvas view and account. Each cluster is individually justified, but the aggregate is borderline over-scoped and could be split by domain.
Strong lifecycle coverage: webhooks, share links, members, projects, nodes (add/update/delete/batch/classify via mutate), iterations, changelog/restore, plus view and workflow. Minor gaps remain — no explicit project delete tool (archive is the stand-in) and no dedicated project-update beyond rename, but agents can work around these.
Maintenance
Related MCP Connectors
Discover, plan and run tools across your connected business systems through one OAuth MCP endpoint
Agent-complete, permission-scoped product operations for Priorify workspaces.
Every Canopy public API operation as a tool, run as you after a browser sign-in or on an API key.
Generate contextual prompts and reusable agent skills, evaluate prompts with the 16-dimension Prompt Score, and manage saved work in PromptDrive. Twelve MCP tools also provide authorized access to private Memory for source-grounded answers. Connect over Streamable HTTP using OAuth 2.1 and PKCE. Generation consumes account quota and automatically saves successful results; Memory access follows account permissions and plan limits.
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables AI agents to create, manage, and search hierarchical plans with phases, tasks, and milestones through a comprehensive planning API. Supports CRUD operations, batch updates, rich context retrieval, and artifact management for structured project planning.3737 npm4MIT
- AlicenseBqualityCmaintenanceEnables Claude to interact with HacknPlan project management via the MCP protocol. Provides tools for managing projects, work items, boards, milestones, time logs, design models, and cross-project portfolio views.7510 npmMIT
- AlicenseBqualityBmaintenanceEnables AI clients to read and manage Plane projects, work items, states, labels, cycles, modules, members, and comments via the Plane REST API.30MIT
- FlicenseNot gradedqualityAmaintenanceEnables MCP-capable clients to browse and manage projects, todos, message boards, campfires, card tables, documents, uploads, comments, events, webhooks, and search through OAuth-authenticated API calls. It exposes 79+ tools and can also generate local client configuration for Codex, Cursor, and Claude Desktop.-