com.qretro/retro
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
QRetro retrospectives and planning poker over MCP: boards, action items, poker games, estimates.
| Author | com.qretro |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 661 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"retro": {
"url": "https://mcp.qretro.com",
"transport": "streamable-http"
}
}
}
Measured tools (29)
retro.teams.listread-onlyReturns the list of teams the user belongs to. boards_count is the total number of boards in a team, finished and unfinished alike — use retro.boards.list to tell them apart.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
retro.team.members.listread-onlyReturns the members of a team with their id, name and role (owner, admin, facilitator, member). Use the id as assign_to in retro.actions.create, retro.actions.update and retro.board.suggested_actions.promote. This is the team roster, the same one people see in team settings — it says nothing about who wrote which card. Pass team_id when several teams are available; with a single team it can be omitted.
Parameters:
team_id— string — Team to list members for. Required when more than one team is available — call retro.teams.list first.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
retro.boards.listread-onlyReturns retrospectives (boards) of a team, newest first. Unfinished boards are included unless finished_only is set — otherwise check the is_finished flag. Filters by period via since/until. Pass team_id when several teams are available; with a single team it can be omitted.
Parameters:
since— string — Only boards created on or after this date (ISO 8601, for example 2026-01-01).until— string — Only boards created on or before this date (ISO 8601).team_id— string — Team to list boards for. Required when more than one team is available — call retro.teams.list first.finished_only— boolean — Return only finished retrospectives. Default: false, unfinished boards are included.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
retro.actions.listread-onlyReturns action items across all retrospectives at once — the answer to "what did we agree on and never finish". Covers every team available unless team_id narrows it down; filters by status, assignee and date. Use this instead of walking boards one by one with retro.board.actions.list.
Parameters:
limit— integer — How many items to return, newest first. Default 50, maximum 200. The total field always reports the full count.since— string — Only items created on or after this date (ISO 8601, for example 2026-01-01).status— string — open (default), completed or all.team_id— string — Narrow the search to one team. By default every available team is included.assignee— string — Filter by assignee name, partial match.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
retro.board.messages.listread-onlyReturns all participant messages (cards) for a retrospective board, organized by template columns (e.g. "What went well", "What didn't go well"). Includes text, sentiment, category, grouping, and vote counts.
Parameters:
board_id(required) — string — The ID of the board to get messages for.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
retro.board.messages.updateUpdates the text of an existing board message created by the current MCP user.
Parameters:
message_id(required) — string — The ID of the message to update.text(required) — string — New text content for the message.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
retro.board.messages.delete_ownDeletes a single board message. Access is strictly governed by API policies: users can delete their own messages, or any message if they have board update rights (requires mcp:write scope for the latter).
Parameters:
message_id(required) — string — The ID of the message to delete.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
retro.board.summary.getread-onlyReturns the summary of a retrospective with participant info and metadata. Works for unfinished boards too — summary is null until the retro is wrapped up, so check is_finished.
Parameters:
board_id(required) — string — The ID of the board to get the summary for.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
retro.board.actions.listread-onlyReturns action items from a retrospective board, including status, priority, assignee, and due date.
Parameters:
board_id(required) — string — The ID of the board to get action items for.include_completed— boolean — Whether to include completed action items. Default: false.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
retro.board.insights.listread-onlyReturns insights (clusters) and suggested actions for a retrospective board. Insights include topic clusters with sentiment, urgency, and category analysis.
Parameters:
board_id(required) — string — The ID of the board to get insights for.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
retro.board.health.getread-onlyReturns the health check of a retrospective: score per category on a 0-10 scale, alignment between participants, turnout, and the same score across the previous retrospectives of the team. Returns health_check: null when the team did not run a health check on this board.
Parameters:
board_id(required) — string — The ID of the board to get the health check report for.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
retro.board.roti.getread-onlyReturns ROTI (Return on Time Invested) voting metrics for a retrospective board, including average score, distribution, and trend across previous retrospectives.
Parameters:
board_id(required) — string — The ID of the board to get ROTI metrics for.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
retro.boards.searchread-onlySearch across retrospectives by keyword: board summaries, action items and participant cards. Cards hidden by private writing during an ongoing retro are excluded. Optionally filter by team.
Parameters:
query(required) — string — Search query. Looks into board summaries, action items and participant cards.team_id— string — Optional: filter search to a specific team.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
retro.actions.createCreates a new action item on a retrospective board. Requires mcp:write scope.
Parameters:
board_id(required) — string — The ID of the board to create the action item on.text(required) — string — The text of the action item.due— string — Due date in ISO 8601 format (e.g. 2025-03-15T00:00:00Z).priority— string — Priority: high, medium, or low. Default: medium.assign_to— string — User ID to assign the action item to — call retro.team.members.list to get it — or "me" to assign to the current user.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
retro.actions.updateUpdates an existing action item: text, priority, due date, or assignee. Requires mcp:write scope.
Parameters:
action_item_id(required) — string — The ID of the action item to update.due— string — New due date in ISO 8601 format.text— string — New text for the action item.priority— string — New priority: high, medium, or low.assign_to— string — User ID to reassign to — call retro.team.members.list to get it — or "me" to assign to the current user.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
retro.actions.completeMarks an action item as completed. Requires mcp:write scope.
Parameters:
action_item_id(required) — string — The ID of the action item to mark as completed.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
retro.board.suggested_actions.promoteTurns a pending suggested action from retro.board.insights.list into a real action item on the board and marks the suggestion accepted, keeping the wording and the link to its cluster. Requires mcp:write scope.
Parameters:
board_id(required) — string — The ID of the board the suggestion belongs to.suggested_action_id(required) — string — The ID of the suggested action to promote, from suggested_actions in retro.board.insights.list. Only suggestions with status "pending" can be promoted.assign_to— string — User ID to assign the action item to — call retro.team.members.list to get it — or "me" to assign to the current user.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
retro.board.suggested_actions.rejectRejects a pending suggested action from retro.board.insights.list: the suggestion moves to rejected and no action item is created. Requires mcp:write scope.
Parameters:
board_id(required) — string — The ID of the board the suggestion belongs to.suggested_action_id(required) — string — The ID of the suggested action to reject, from suggested_actions in retro.board.insights.list. Only suggestions with status "pending" can be rejected.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
poker.sources.listread-onlyReturns the issue trackers connected to a team (Jira, Linear) and what each of them can do: search for tasks, list iterations (sprints, cycles), write estimates back. Call this first — the other poker tools depend on what is connected. An empty list means tasks can only be added manually with poker.game.tasks.add.
Parameters:
team_id— string — Team to inspect. Required when more than one team is available — call retro.teams.list first.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
poker.iterations.listread-onlyReturns the iterations of a connected issue tracker — Jira sprints (active and upcoming), and whatever a future tracker calls the same thing. Filter by name with query, for example "AFT 50". Pass the ref of the iteration you want to poker.game.tasks.import to pull its tasks into a game. Trackers without iteration support (currently Linear) return an empty list — search by text instead.
Parameters:
query— string — Filter iterations by name, for example "AFT 50". Omit to get all active and upcoming ones.source— string — Tracker to query, for example jira. Required only when the team has several trackers connected — see poker.sources.list.team_id— string — Team whose tracker is queried. Required when more than one team is available.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
poker.games.listread-onlyReturns the planning poker games of a team, newest first, with how many tasks each of them has and how many already carry an estimate. Personal games outside a team are not exposed over MCP.
Parameters:
limit— integer — How many games to return. Default: 20, maximum: 50.team_id— string — Team to list games for. Required when more than one team is available — call retro.teams.list first.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
poker.game.getread-onlyReturns one planning poker game: its estimation scale, progress, the task currently on the table and the link participants use to join. Use poker.game.tasks.list for the tasks themselves.
Parameters:
game_id(required) — string — The ID of the poker game.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
poker.game.tasks.listread-onlyReturns the tasks of a poker game with their estimate, individual votes, tracker key and link. needs_sync tells whether the agreed estimate still differs from the one stored in the tracker — feed those tasks to poker.game.task.sync. Filter with estimated to see what is done or what is left.
Parameters:
game_id(required) — string — The ID of the poker game.limit— integer — How many tasks to return. Default: 50, maximum: 100.estimated— boolean — true — only tasks that already have an estimate, false — only tasks still to be estimated. Omit for all of them.
Hints: read-only yes · destructive not declared · idempotent not declared · open-world not declared
poker.games.createCreates a planning poker game for a team and returns the link participants join with. Pick a ready-made scale — fibonacci, modified_fibonacci, tshirts, powers_of_two — or pass your own values in scale_values. Requires mcp:write scope.
Parameters:
name(required) — string — Name of the game, for example the sprint it plans.scale— string — Estimation scale preset: fibonacci (default), modified_fibonacci, tshirts, powers_of_two.team_id— string — Team the game belongs to. Required when more than one team is available.scale_values— array — Custom scale, for example ["1","2","3","5","?"]. Overrides scale when given.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
poker.game.tasks.addAdds tasks to a poker game by hand — for work that lives outside an issue tracker, or when no tracker is connected. To pull tasks from Jira or Linear use poker.game.tasks.import instead. Requires mcp:write scope.
Parameters:
game_id(required) — string — The ID of the poker game.tasks(required) — array — Tasks to add: a list of objects with name and optional description.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
poker.game.tasks.importPulls tasks from a connected issue tracker into a poker game. Give it either iteration_ref from poker.iterations.list to take a whole sprint, or query to search by text and issue key. Tasks already in the game are skipped. Only the team owner can change a game. Requires mcp:write scope.
Parameters:
game_id(required) — string — The ID of the poker game to import into.limit— integer — How many tasks to pull at most. Default: 50, maximum: 100.query— string — Text or issue key to search for, when importing without an iteration.source— string — Tracker to import from, for example jira. Required only when the team has several trackers connected.iteration_ref— string — The ref of an iteration from poker.iterations.list — imports every task of that sprint.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
poker.game.task.selectPuts a task on the table: everyone looking at the game sees it as the one being estimated right now. Only the team owner can change a game. Requires mcp:write scope.
Parameters:
game_id(required) — string — The ID of the poker game.task_id(required) — string — The ID of the task to put on the table — see poker.game.tasks.list.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
poker.game.task.revealReveals the cards of a task and computes its estimate from the votes cast — this is the only way an estimate appears, there is no way to set a number directly. Pass reveal=false to hide the cards again and drop the estimate, which also clears the votes for a re-vote. Only the team owner can change a game. Requires mcp:write scope.
Parameters:
game_id(required) — string — The ID of the poker game.task_id(required) — string — The ID of the task to reveal.reveal— boolean — true (default) — reveal the cards and compute the estimate. false — hide them, clear the votes and the estimate.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
poker.game.task.syncWrites the agreed estimate back to the issue tracker — Jira story points, Linear estimate. Works only for tasks imported from a tracker and only when the integration was connected with write permissions; poker.sources.list shows whether it was. Only the team owner can change a game. Requires mcp:write scope.
Parameters:
game_id(required) — string — The ID of the poker game.task_id(required) — string — The ID of the task whose estimate goes to the tracker — see needs_sync in poker.game.tasks.list.
Hints: read-only not declared · destructive not declared · idempotent not declared · open-world not declared
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.