Model Context Protocol

Standpulse for AI coding agents

Standpulse runs an MCP server, so an agent working in your codebase can keep the board honest while it works: pick up the next task, claim it, comment progress, raise a blocker when it is stuck, and close the task with a summary when it is done.

Endpoint (Streamable HTTP)

https://www.standpulse.com/mcp/pm
  • Tasks and blockers. List, create, start, complete, assign and comment; raise and resolve blockers.
  • Docs. Read project docs for context, and write new ones.
  • Planner and standup. Plan work into a day, and summarise what moved.
  • Ask the project. Grounded answers from docs, tasks and blockers, with sources.

Get a key

  1. A team lead opens Settings → Agent access in Standpulse.
  2. Choose a name, the member the key acts as, its abilities and, optionally, specific projects and an expiry date.
  3. Copy the key. It looks like sp_mcp_…​.… and is shown once; only a hash is stored. If you lose it, create a new one.

Revoke a key from the same screen at any time; it stops working immediately.

Connect a client

Claude Code

claude mcp add --transport http standpulse https://www.standpulse.com/mcp/pm \
  --header "Authorization: Bearer sp_mcp_xxxx.yyyy"

Check the connection with /mcp, then ask the agent to call whoami.

Other MCP clients

Any client that supports remote HTTP servers with custom headers. Most accept a JSON block like this:

{
    "mcpServers": {
        "standpulse": {
            "type": "http",
            "url": "https://www.standpulse.com/mcp/pm",
            "headers": {
                "Authorization": "Bearer sp_mcp_xxxx.yyyy"
            }
        }
    }
}

Keep the key out of version control. Prefer your client's environment-variable substitution where it has one.

Permissions

Two layers decide what an agent can do, and the key can only ever narrow the member:

  • The member the key acts as. Their role decides what is visible, exactly as in the app. A key acting as an intern sees only what that intern sees.
  • The key carries abilities and an optional project allow-list.

Everything the agent writes is attributed to that member and marked as coming from MCP in the activity log. For an agent that should see a whole project, act as a team lead or project manager; for a clean audit trail, create a dedicated member for the agent.

AbilityAllows
tasks:read list, read tasks, board, projects, members
tasks:write create, update, start, complete, assign, comment, archive
blockers:read list blockers
blockers:write raise and resolve blockers
docs:read list and read docs
docs:write create and edit docs
planner:read read the planner
planner:write plan tasks into a day
reports:read standup summaries
chat:ask ask_project

Tools

Every tool returns structured content plus a one-line text summary. Ids are integers.

Orientation

Tool Arguments What it does
whoami — The acting member, workspace, plan, the key's abilities and reachable projects. Call it first.
list_projects include_archived Projects with open-task and active-blocker counts. Resolves a name to a project_id.
get_board project_id Counts by state and priority, up next, in progress and active blockers.

Tasks

Tool Arguments What it does
list_tasks project_id, mine, assignee_id, state, ready, type, priority, label, due_before, q, limit, cursor Filter and page through tasks. state: open (default), not_started, in_progress, overdue, completed, all. ready: true is the pick-up-now set — unclaimed, every dependency done. Each record carries depends_on and blocked_by_open.
get_task task_id Full detail: description, labels, co-assignees, comments, recent activity and blockers.
create_task project_id, title, priority, description, type, assignee_id | assign_to_me, due_at, … Create a task. Description is Markdown.
create_tasks project_id, feature_slug, tasks[{ref, title, description, priority, difficulty, depends_on[refs], …}] Create a whole plan in one all-or-nothing call; dependencies are expressed by ref.
update_task task_id + any field Only the fields you pass are written. description replaces the whole body.
set_task_dependencies task_id, depends_on[] Replace what a task waits on. Same project only, never a cycle; [] clears.
start_task task_id, claim, force Mark as started and, by default, assign it to you. Refuses a task someone else has in progress, or one with open dependencies, unless force: true.
complete_task task_id, summary, reopen Complete a task; summary is posted as a comment. reopen: true reverses it.
assign_task task_id, assignee_id, co_assignee_ids Set the accountable owner and/or replace the co-assignee list.
comment_task task_id, body Post a Markdown comment.
archive_task task_id, reason, restore Archive cancelled or duplicate work. restore: true brings it back.

Plans

Tool Arguments What it does
list_plans project_id Every feature_slug in the project with total, done, in progress, ready and blocked counts, plus the /plans URL.
get_plan project_id, feature_slug One plan as waves: wave 1 has no in-plan dependencies, wave N waits only on earlier waves. Each task carries depends_on, unblocks and ready.

Blockers

Tool Arguments What it does
list_blockers project_id, task_id, mine, include_resolved, limit, cursor Active blockers, optionally with resolved ones.
create_blocker description, task_id | project_id, resolver_name Raise a blocker and name who can clear it.
resolve_blocker blocker_id, resolution Resolve it; the resolution is posted on the linked task.

Docs

Tool Arguments What it does
list_docs project_id, q, limit, cursor Doc metadata.
get_doc doc_id | slug The full Markdown body.
write_doc body_md, doc_id | title, project_id, visibility Create a doc, or replace an existing body.

Planner

Tool Arguments What it does
get_planner — The member's yesterday-open, today and tomorrow, in their timezone.
plan_task task_id, day Schedule a task for today, tomorrow or an ISO date. Links it into that day's planner.

Team and reporting

Tool Arguments What it does
list_members project_id Names, roles and open workload. Resolve a name to a user id before assigning.
standup project_id, everyone, since_hours Completed, in progress, planned today and blocked.
ask_project project_id, question A grounded answer from the project's docs, tasks and blockers, with sources. Needs the knowledge add-on.

Prompts

Prompts are workflows the server ships: each returns the live board context it needs plus a step-by-step procedure, so every connected agent runs the same playbook. In Claude Code they appear as slash commands — /mcp__standpulse__plan — and other clients list them under prompts/list. They run in sequence: brainstorm writes a doc, plan turns it into tasks, parallel_work works them.

Prompt Arguments What it does
brainstorm project_id, topic A grounded brainstorm: what exists, five-plus options, risks, a recommendation — written to a doc for plan to pick up.
plan project_id, goal | doc_id Turns a goal or a brainstorm doc into shippable tasks with acceptance criteria, sizes and dependencies, created in one create_tasks call and recorded as a doc.
parallel_work project_id, feature_slug, workers Hands ready tasks out to several workers without two claiming the same one, and drives each through start → comment → complete.

A prompt needs the same abilities as the tools it leans on: brainstorm needs docs:read, plan tasks:read, parallel_work tasks:write. Its context never includes a project the key is not scoped to.

Limits

  • Paging. List tools return at most 100 records per call and a next_cursor; pass it back as cursor for the next page.
  • Rate limit. 120 requests per minute per key.
  • ask_project needs the knowledge add-on on your plan. whoami reports which projects have it.

Troubleshooting

SymptomCause
401 UnauthorizedMissing, mistyped, revoked or expired key. Check the header is Authorization: Bearer <key>.
401 after moving workspacesThe member the key acts as moved to another workspace. Create a new key.
"lacks the … ability"The key was created with fewer abilities. A team lead can issue a broader one.
"not scoped to project N"The key is limited to specific projects.
A task or doc is missingThe acting member cannot see it in the app either.
ask_project is refusedThe plan does not include the knowledge add-on.