API & MCP server

Scrumbo has a JSON REST API and a Model Context Protocol (MCP) server, so you (or an AI assistant such as Claude) can read and manage boards and stories from outside the web app.

Authentication

Every request needs a personal API key. Create one on your account page — it is shown once, so copy it right away.

Send it as a bearer token on every request:

Authorization: Bearer sbo_your_key_here
REST API

The API is mounted at https://scrumbo.com/api/v1 and returns JSON. A key has exactly your access: it can only reach projects and boards you own, are a member of, or administer.

Method Path Description Access needed
GET/projectsList projects you can accessAny key
GET/projects/:token/boardsList boards in a projectViewer
GET/boards/:boardidGet a board with its statuses and storiesViewer
GET/boards/:boardid/statusesList a board's statusesViewer
GET/boards/:boardid/storiesList stories on a board, optionally filtered by status or assigneeViewer
GET/boards/:boardid/stories/:storyidGet a single storyViewer
POST/boards/:boardid/storiesCreate a storyEditor
PATCH/boards/:boardid/stories/:storyidUpdate a story's fieldsEditor
POST/boards/:boardid/stories/:storyid/statusChange a story's statusEditor or contributor
DELETE/boards/:boardid/stories/:storyidDelete a storyEditor
POST/boards/:boardid/stories/:storyid/commentsAdd a comment to a storyCommenter
Account, billing & invoices
GET/accountGet your account: plan, free-plan usage limits and billing detailsAny key
GET/invoicesList your invoicesAny key
GET/invoices/:invoiceid · …/pdfGet one invoice's details, or download it as a PDFAny key
Hour bank
GET/projects/:token/hourbank · …/transactionsGet a project's hour-bank settings and current balance, or its transaction ledgerViewer
POST…/hourbank/settings · …/entriesConfigure a project's hour bank, or add a purchase/adjustment to itProject owner
Team
GET/teamList your internal team across every project and feature board you ownAny key
Feature boards
GET/featureboardsList the feature boards you belong toBoard member
POST/featureboardsCreate a feature boardPaid plan
GET/featureboards/:boardidGet a feature board with its features, votes, comments and membersBoard member
POST…/features · …/vote · …/commentsSubmit a feature request, vote on one, or add a commentBoard member
PATCH POST DELETE…/features/:featureid · …/statusUpdate, set the status of, or delete a feature requestBoard admin
DELETE…/comments/:commentidDelete a feature commentComment author or board admin
POST DELETE/featureboards/:boardid/members · …/:userid/admin · …/:userid/externalAdd, promote/demote, reclassify or remove a board memberBoard admin

"Editor or contributor" also covers developers, who may change status but not edit story text.

Example:

curl https://scrumbo.com/api/v1/boards/123/stories \
  -H "Authorization: Bearer sbo_your_key_here"

curl -X POST https://scrumbo.com/api/v1/boards/123/stories \
  -H "Authorization: Bearer sbo_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"subject": "New story", "story": "Details go here"}'
Parameters

Request bodies are JSON. Every parameter below is accepted by both the REST API and the matching MCP tool.

Path parameters
NameTypeRequiredDescription
:token string Yes Project token, as returned by GET /projects.
:boardid integer Yes Numeric board id, as returned by GET /projects/:token/boards.
:storyid integer Yes Numeric story id, unique within its board.
Query parameters

GET /boards/:boardid/stories

NameTypeRequiredDescription
status string No Return only stories in this status. Capitalisation is ignored when filtering.
assigned string No Return only stories with this assignee name. Capitalisation is ignored when filtering.
Story fields (create and update)

POST /boards/:boardid/stories · PATCH /boards/:boardid/stories/:storyid

NameTypeRequiredDescription
subject string On create Short title, at most 500 characters. Required when creating; longer values are rejected.
story string No Story body. HTML is allowed but sanitized server-side, so unsupported tags and attributes are stripped.
status string No Must match one of the project's statuses exactly, including capitalisation. When creating, an unknown or omitted status falls back to the board's first status; when updating, an unknown status is rejected.
assigned string No Assignee name, free text. This is a label only — it does not link the story to a Scrumbo account.
requester string No Name of the person who requested the story, free text.
scope string No Short scope label, at most 100 characters. Longer values are rejected.
comment string No Legacy free-text field stored on the story itself. It is not shown in the web interface — to add a visible comment, use the comments endpoint below.
notify boolean No Email the board's and story's followers about this change. Defaults to false.
  • Any field not listed here is ignored rather than rejected.
  • An update must supply at least one of these fields; only the fields you send are changed.
  • Linking a story to a Scrumbo account (the assignee picker) is not available through the API.
Move a story

POST /boards/:boardid/stories/:storyid/status

NameTypeRequiredDescription
status string Yes Target status. Must match one of the project's statuses exactly, including capitalisation.
notify boolean No Email the board's and story's followers about this change. Defaults to false.
Add a comment

POST /boards/:boardid/stories/:storyid/comments

NameTypeRequiredDescription
comment string Yes Comment text, plain text. It is escaped before storage, so HTML is shown literally rather than rendered.
name string No Author name to show on the comment. Defaults to the name on the API key's account.
notify boolean No Email the board's and story's followers about this change. Defaults to false.

Rejected requests return the matching HTTP status (400, 403 or 404) and a JSON body:

{"error": "subject must be at most 500 characters"}
MCP server

Scrumbo ships a standalone MCP server that wraps the REST API as tools, so an MCP-aware assistant such as Claude Desktop or Claude Code can use your boards directly. It needs Node.js 20 or newer.

Download the MCP server (ZIP)

  1. Unpack it and install its dependencies once:
    unzip scrumbo-mcp.zip
    cd scrumbo-mcp
    npm install
  2. Create an API key on your account page and copy it.
  3. Register the server with your MCP client, for example:
{
  "mcpServers": {
    "scrumbo": {
      "command": "node",
      "args": ["/absolute/path/to/scrumbo-mcp/index.js"],
      "env": {
        "SCRUMBO_API_KEY": "sbo_your_key_here",
        "SCRUMBO_API_URL": "https://scrumbo.com/api/v1"
      }
    }
  }
}

Tools:

DescriptionAccess needed
list_projectsAny key
list_boards, get_board, list_stories, get_story, list_statusesViewer
add_commentCommenter
create_story, update_story, move_story, delete_storyEditor
get_account, list_invoices, get_invoice, get_invoice_pdf, get_teamAny key
get_hourbank, list_hourbank_transactionsViewer
save_hourbank_settings, add_hourbank_entryProject owner
list_feature_boards, get_feature_board, create_feature, vote_feature, add_feature_commentBoard member
create_feature_boardPaid plan
update_feature, set_feature_status, delete_feature, add_feature_board_member, set_feature_board_member_admin, set_feature_board_member_external, remove_feature_board_memberBoard admin
delete_feature_commentComment author or board admin
Keep in mind
  • A key has exactly your access — anyone holding it can act as you within that scope, so treat it like a password.
  • Revoke a key from your account page at any time; anything using it stops working immediately.
  • The MCP server itself holds no database access — it is a thin HTTP client that is only ever as privileged as the key you give it.