scrumdo-mcp
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SCRUMDO_ORG | No | Your organization slug. | |
| SCRUMDO_TOKEN | Yes | Required. API token from Settings → API Tokens. | |
| SCRUMDO_PROJECT | No | Default project slug. | |
| SCRUMDO_BASE_URL | No | API base URL. Default: https://app.spryng.io |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_boardsA | List all boards (projects) in the organisation. Returns each board's slug, name, description, and member count. Use get_board() for full detail on a specific board. |
| get_boardA | Get a board (project) with its cells (columns), custom field definitions, and key statistics. Args: project_slug: Board slug to fetch. Defaults to the configured project. |
| get_board_cellsA | List the columns (cells) of a board. Each cell has an id, name, and position. Use the id when moving cards. Args: project_slug: Board slug. Defaults to the configured project. |
| list_iterationsB | List all iterations (sprints / milestones) in the project. Args: project_slug: Board slug. Defaults to the configured project. |
| list_labelsA | List all labels defined in the project. Args: project_slug: Board slug. Defaults to the configured project. |
| list_epicsB | List all epics in the project. Args: project_slug: Board slug. Defaults to the configured project. |
| list_blockersA | List all active (unresolved) blockers on a card. Each blocker includes id, reason, blocked_date, blocker (user), is_show_stopper, and external flags. Args: card_ref: Card reference, e.g. 'ON-914'. |
| block_cardA | Mark a card as blocked with a reason. Creates a blocker record on the card. Multiple blockers can exist simultaneously; the card remains blocked until all are resolved. Args: card_ref: Card reference, e.g. 'ON-914'. reason: Human-readable explanation of what is blocking the card. is_show_stopper: Flag this as a show-stopper blocker (default False). external: Flag as an external dependency (default False). Returns the created blocker object including its id (needed to unblock). |
| unblock_cardA | Resolve (unblock) a specific blocker on a card. If this was the last active blocker, the card's blocked flag is cleared. Use list_blockers() to find the blocker_id. Args: card_ref: Card reference, e.g. 'ON-914'. blocker_id: Numeric blocker id from list_blockers(). resolution: Optional description of how the block was resolved. Returns the resolved blocker object. |
| list_cardsA | List cards on the board with optional filters. Args: cell_id: Filter by board column (cell) id. iteration_id: Filter by iteration/sprint id. assignee: Filter by assignee username or email. label: Filter by label name. status: Filter by status string. page: Page number (default 1). limit: Results per page (default 25, max 100). Returns a dict with count, next/previous page URLs, and items list. Each item includes id, local_id, summary, points, cell, assignees, labels, extra_fields (custom fields), and created/updated timestamps. |
| get_cardA | Get a card's full detail including all custom fields, task list, comment count, labels, assignees, and linked cards. Args: card_ref: The card reference, e.g. 'ON-914' or 'Q1-42'. |
| find_cardA | Find a card by its reference ID (e.g. 'ON-914'). Alias for get_card — useful when you only know the ID string. Args: card_ref: Card reference like 'ON-914'. |
| create_cardB | Create a new card on the board. Args: summary: Card title / summary (required). description: Rich text description (markdown supported). points: Story points / estimate. due_date: Due date in YYYY-MM-DD format. cell_id: Board column to place the card in. iteration_id: Iteration/sprint to assign the card to. assignee_ids: List of user IDs to assign. Use list_members() to find ids. label_ids: List of label IDs to attach. extra_fields: Custom field values as {field_id: value} dict. Returns the full created card object including its assigned reference (e.g. 'ON-915'). |
| update_cardA | Update one or more fields on an existing card. Only the fields you provide will be changed — omitted fields are untouched. Args: card_ref: Card reference, e.g. 'ON-914'. summary: New title. description: New description (markdown). points: New story points. due_date: Due date in YYYY-MM-DD format. Pass empty string to clear. iteration_id: Move card to this iteration/sprint id. Use list_iterations() to find ids. assignee_ids: Replace assignee list. Use list_members() to find ids. label_ids: Replace label list. extra_fields: Merge into existing custom fields. Existing keys not mentioned here will be preserved. Returns the full updated card object. |
| move_cardA | Move a card to a different column (cell) on the board. Args: card_ref: Card reference, e.g. 'ON-914'. cell_id: Target cell id. Use get_board_cells() to find cell ids. Returns the updated card. |
| move_card_to_iterationA | Move a card into an iteration (sprint). Args: card_ref: Card reference, e.g. 'ON-914'. iteration_id: Target iteration id. Use list_iterations() to find ids. Returns the updated card. |
| set_card_fieldA | Set a single custom field on a card without touching other fields. Args: card_ref: Card reference, e.g. 'ON-914'. field_id: Numeric custom field id. Use list_custom_fields() to look up ids. value: New field value (always a string). Returns the updated card. |
| archive_cardB | Archive a card by moving it to the project's Archive iteration. The card is hidden from the board but recoverable via the archive view. Args: card_ref: Card reference, e.g. 'ON-914'. |
| assign_cardA | Set the assignees on a card, replacing any current assignees. Args: card_ref: Card reference, e.g. 'ON-914'. assignee_ids: List of user IDs. Pass an empty list to unassign all. |
| add_card_labelA | Add a single label to a card, preserving existing labels. Args: card_ref: Card reference, e.g. 'ON-914'. label_id: Label id to add. Use list_labels() to find ids. |
| remove_card_labelA | Remove a single label from a card. Args: card_ref: Card reference, e.g. 'ON-914'. label_id: Label id to remove. |
| list_tasksA | List all tasks (checklist items) on a card. Args: card_ref: Card reference, e.g. 'ON-914'. Returns a list of tasks, each with id, description, complete flag, assignee, and position. |
| create_taskA | Create a new task on a card. Args: card_ref: Card reference, e.g. 'ON-914'. description: Task description (plain text or markdown). assignee_id: Optional user ID to assign the task to. Returns the created task object. |
| complete_taskB | Mark a task as complete. Args: card_ref: Card reference, e.g. 'ON-914'. task_id: Task id (from list_tasks). |
| reopen_taskA | Reopen (un-complete) a task. Args: card_ref: Card reference, e.g. 'ON-914'. task_id: Task id (from list_tasks). |
| update_taskB | Update a task's description, completion state, or assignee. Args: card_ref: Card reference, e.g. 'ON-914'. task_id: Task id (from list_tasks). description: New description (leave None to keep current). complete: True to complete, False to reopen. assignee_id: New assignee user id. |
| delete_taskA | Delete a task from a card. Args: card_ref: Card reference, e.g. 'ON-914'. task_id: Task id (from list_tasks). |
| list_commentsA | List all comments on a card, newest first. Args: card_ref: Card reference, e.g. 'ON-914'. The card's numeric id is resolved automatically. Returns a list of comments with id, author, body (markdown), and created timestamp. |
| add_commentA | Post a comment on a card. Markdown is supported. Args: card_ref: Card reference, e.g. 'ON-914'. body: Comment text (markdown). Code blocks, lists, and headers all render in the ScrumDo UI. Returns the created comment object with id and timestamp. |
| delete_commentA | Delete a comment from a card. Args: card_ref: Card reference, e.g. 'ON-914'. comment_id: Numeric comment id from list_comments(). |
| list_custom_fieldsA | List all custom field definitions for the board. Each field has an id, name, field_type, and optional choices. Use the id when calling set_card_field() or update_card(extra_fields=…). Args: project_slug: Board slug. Defaults to the configured project. |
| get_card_fieldA | Get the current value of a single custom field on a card. Args: card_ref: Card reference, e.g. 'ON-914'. field_id: Numeric custom field id from list_custom_fields(). Returns {'field_id': …, 'name': …, 'value': …} or {'field_id': …, 'value': null} if the field is not set. |
| get_all_card_fieldsA | Get all custom field values currently set on a card. Returns the full list of custom fields with their names and current values. Args: card_ref: Card reference, e.g. 'ON-914'. |
| list_membersA | List members of the organisation or a specific project. Each member has an id, username, email, display_name, and role. Args: project_slug: If provided, returns project-level members only. If omitted, returns all org members. |
| find_memberA | Find a member by name, username, or email. Args: query: Name, username, or email fragment to search. Returns matching members from the org member list. |
| search_cardsA | Full-text search across all cards in the organisation. Searches card summaries, descriptions, and comments. Args: query: Search string. Supports partial matches. Returns a ranked list of matching cards with summary, reference, board name, and a short excerpt. |
| search_by_field_valueA | Find all cards where a custom field contains a given value. Useful for finding cards tagged with a specific branch, PR URL, feature flag, or any other custom field content. Args: field_id: Numeric custom field id from list_custom_fields(). value: Value to match (substring match, case-insensitive). limit: Maximum cards to scan (default 50). Returns matching card objects. |
| log_activityA | Write a structured activity log entry to a card. Entries are stored as machine-parseable comments and rendered in the ScrumDo UI as human-readable updates. They are filterable via get_activity_log(). Args: card_ref: Card reference, e.g. 'ON-914'. action: Short action label, e.g. 'started', 'deployed', 'reviewed', 'snapshot', 'seeded', 'PR opened'. detail: Longer description or context (markdown). agent: Agent/bot name writing the log (e.g. 'claude-code', 'codex', 'github-actions'). user: Human user involved (username or email). environment: Environment name (stage, integration, branch). milestone: Milestone or release tag, if applicable. task_ref: Related task or sub-item reference. extra: Any additional structured data to attach. Returns the created comment object. |
| get_activity_logA | Get the structured activity log for a card, with optional filters. Returns only entries written via log_activity() — plain comments are excluded. Results are newest-first. Args: card_ref: Card reference, e.g. 'ON-914'. agent: Filter by agent name (substring, case-insensitive). user: Filter by user (substring, case-insensitive). action: Filter by action label (substring, case-insensitive). environment: Filter by environment name (exact). milestone: Filter by milestone tag (exact). limit: Maximum entries to return (default 50). |
| get_workspace_activityA | Get the activity log across ALL cards in the workspace. Aggregates log_activity() entries from every card, sorted newest-first. Filterable by agent, user, action type, environment, and milestone. This is the workspace-level view requested for board observability — answers questions like: • "What did claude-code do today?" • "What was deployed to stage this week?" • "Show me all activity on the book-kit milestone" Args: action: Filter by action label (substring). agent: Filter by agent name (substring). user: Filter by user (substring). environment: Filter by environment (exact). milestone: Filter by milestone tag (exact). limit: Max entries across all cards (default 100). NOTE: This scans recent cards; for large boards use per-card get_activity_log() for targeted queries. |
| list_webhooksA | List all webhooks configured on the project. Returns each webhook's id, url, events, and active state. |
| create_webhookA | Create a new webhook on the project. Args: url: HTTPS endpoint that will receive webhook POST requests. events: List of event names to subscribe to, e.g. ['story.created', 'story.updated', 'story.moved', 'task.completed', 'comment.created']. secret: Optional HMAC secret for payload signature verification. Returns the created webhook object with its id. |
| delete_webhookA | Delete a webhook by id. Args: webhook_id: Webhook id from list_webhooks(). |
| list_time_entriesA | List time entries, optionally filtered to a specific card. Args: card_ref: Card reference, e.g. 'ON-914'. If omitted, returns all project time entries. |
| log_timeA | Log time spent on a card. Args: card_ref: Card reference, e.g. 'ON-914'. minutes: Time spent in minutes. description: What was done during this time. date: ISO date string (YYYY-MM-DD). Defaults to today. user_id: User to log time for. Defaults to the token owner. Returns the created time entry. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ScrumDoLLC/scrumdo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server