ProductBrain MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PRODUCTBRAIN_API_KEY | Yes | Your `pb_` API key from the app's API Key modal. Required. | |
| PRODUCTBRAIN_API_URL | No | The ProductBrain API base URL. | https://productbrain.com/api/v1 |
| PRODUCTBRAIN_PROJECT_ID | No | Optional default project ID. Tools also accept a `projectId` argument. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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. |
| list_nodesC | List nodes in a project (bulk read). Optional type (goal|need|approach|job|task) and iteration filters. |
| 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. |
| 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. |
| 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. |
| list_iterationsC | List phases/iterations. current:true returns the active phase; status:active filters to active. |
| 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. |
| set_viewC | Drive the live canvas. command = { type: setViewMode|selectIteration|zoomToNode|expandNode|collapseNode|focusGoals, ... }. |
| read_viewB | Read what the user is looking at now: view_mode, selected_iteration, expanded_nodes, focused_goals, selected_node. |
| list_webhooksA | List the outbound webhooks registered on a project (secrets are never returned). Shows lastStatus/lastDeliveryAt so you can spot a failing receiver. |
| 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. |
| 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. |
| delete_webhookA | Remove a webhook registration. Irreversible — the secret is gone; re-registering mints a new one. |
| create_share_linkA | Mint a PUBLIC read-only link to the project view. Pass expiresInDays for a TTL (otherwise it never expires) and settings (e.g. { includedGoalIds: [...] }) to scope it. Treat the returned token as a secret. |
| list_share_linksB | List every share token minted for a project, with createdAt/expiresAt/revokedAt and an |
| revoke_share_linkA | Revoke a share token. The public link stops serving within ~30s (edge cache); the record dies immediately. |
| list_membersA | List the members (human and agent seats) on a project, plus the owner. Any member can read this. |
| add_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. |
| 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. |
| 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. |
| list_projectsA | List the projects you own or are a member of. Archived ones are hidden unless includeArchived is true. |
| 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. |
| rename_projectA | Change a project's display name (owner only). The id is immutable — keep using the same projectId afterwards. |
| archive_projectA | Archive (archived:true) or unarchive (false) a project you own. Archiving hides it from list_projects without deleting anything — reversible, unlike delete. |
| 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. |
| 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. |
| 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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.