{"serverId":"mcp-registry/com.qretro/retro","tools":[{"name":"poker.game.get","fixed":{"name":"poker_game_get","description":"Returns 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.","inputSchema":{"type":"object","required":["game_id"],"properties":{"game_id":{"type":"string","description":"The ID of the poker game."}}},"annotations":{"readOnlyHint":true},"title":"Get Poker Game Tool"},"changes":[{"kind":"name","detail":"Renamed \"poker.game.get\" → \"poker_game_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":103,"tokensAfter":103},{"name":"poker.game.task.reveal","fixed":{"name":"poker_game_task_reveal","description":"Reveals 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.","inputSchema":{"type":"object","required":["game_id","task_id"],"properties":{"reveal":{"type":"boolean","description":"true (default) — reveal the cards and compute the estimate. false — hide them, clear the votes and the estimate."},"game_id":{"type":"string","description":"The ID of the poker game."},"task_id":{"type":"string","description":"The ID of the task to reveal."}}},"annotations":{},"title":"Reveal Poker Task Tool"},"changes":[{"kind":"name","detail":"Renamed \"poker.game.task.reveal\" → \"poker_game_task_reveal\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":212,"tokensAfter":212},{"name":"poker.game.task.select","fixed":{"name":"poker_game_task_select","description":"Puts 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.","inputSchema":{"type":"object","required":["game_id","task_id"],"properties":{"game_id":{"type":"string","description":"The ID of the poker game."},"task_id":{"type":"string","description":"The ID of the task to put on the table — see poker.game.tasks.list."}}},"annotations":{},"title":"Select Poker Task Tool"},"changes":[{"kind":"name","detail":"Renamed \"poker.game.task.select\" → \"poker_game_task_select\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":133,"tokensAfter":133},{"name":"poker.game.task.sync","fixed":{"name":"poker_game_task_sync","description":"Writes 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.","inputSchema":{"type":"object","required":["game_id","task_id"],"properties":{"game_id":{"type":"string","description":"The ID of the poker game."},"task_id":{"type":"string","description":"The ID of the task whose estimate goes to the tracker — see needs_sync in poker.game.tasks.list."}}},"annotations":{"readOnlyHint":true},"title":"Sync Poker Estimate Tool"},"changes":[{"kind":"name","detail":"Renamed \"poker.game.task.sync\" → \"poker_game_task_sync\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":180,"tokensAfter":180},{"name":"poker.game.tasks.add","fixed":{"name":"poker_game_tasks_add","description":"Adds 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.","inputSchema":{"type":"object","required":["game_id","tasks"],"properties":{"tasks":{"type":"array","description":"Tasks to add: a list of objects with name and optional description."},"game_id":{"type":"string","description":"The ID of the poker game."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Add Poker Tasks Tool"},"changes":[{"kind":"name","detail":"Renamed \"poker.game.tasks.add\" → \"poker_game_tasks_add\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"poker.game.tasks.import","fixed":{"name":"poker_game_tasks_import","description":"Pulls 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.","inputSchema":{"type":"object","required":["game_id"],"properties":{"limit":{"type":"integer","description":"How many tasks to pull at most. Default: 50, maximum: 100."},"query":{"type":"string","description":"Text or issue key to search for, when importing without an iteration."},"source":{"type":"string","description":"Tracker to import from, for example jira. Required only when the team has several trackers connected."},"game_id":{"type":"string","description":"The ID of the poker game to import into."},"iteration_ref":{"type":"string","description":"The ref of an iteration from poker.iterations.list — imports every task of that sprint."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Import Poker Tasks Tool"},"changes":[{"kind":"name","detail":"Renamed \"poker.game.tasks.import\" → \"poker_game_tasks_import\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":275,"tokensAfter":275},{"name":"poker.game.tasks.list","fixed":{"name":"poker_game_tasks_list","description":"Returns 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.","inputSchema":{"type":"object","required":["game_id"],"properties":{"limit":{"type":"integer","description":"How many tasks to return. Default: 50, maximum: 100."},"game_id":{"type":"string","description":"The ID of the poker game."},"estimated":{"type":"boolean","description":"true — only tasks that already have an estimate, false — only tasks still to be estimated. Omit for all of them."}}},"annotations":{"readOnlyHint":true},"title":"List Poker Tasks Tool"},"changes":[{"kind":"name","detail":"Renamed \"poker.game.tasks.list\" → \"poker_game_tasks_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":205,"tokensAfter":205},{"name":"poker.games.create","fixed":{"name":"poker_games_create","description":"Creates 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.","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Name of the game, for example the sprint it plans."},"scale":{"type":"string","description":"Estimation scale preset: fibonacci (default), modified_fibonacci, tshirts, powers_of_two."},"team_id":{"type":"string","description":"Team the game belongs to. Required when more than one team is available."},"scale_values":{"type":"array","description":"Custom scale, for example [\"1\",\"2\",\"3\",\"5\",\"?\"]. Overrides scale when given."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create Poker Game Tool"},"changes":[{"kind":"name","detail":"Renamed \"poker.games.create\" → \"poker_games_create\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":229,"tokensAfter":229},{"name":"poker.games.list","fixed":{"name":"poker_games_list","description":"Returns 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.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"How many games to return. Default: 20, maximum: 50."},"team_id":{"type":"string","description":"Team to list games for. Required when more than one team is available — call retro.teams.list first."}}},"annotations":{"readOnlyHint":true},"title":"List Poker Games Tool"},"changes":[{"kind":"name","detail":"Renamed \"poker.games.list\" → \"poker_games_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":145,"tokensAfter":145},{"name":"poker.iterations.list","fixed":{"name":"poker_iterations_list","description":"Returns 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.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Filter iterations by name, for example \"AFT 50\". Omit to get all active and upcoming ones."},"source":{"type":"string","description":"Tracker to query, for example jira. Required only when the team has several trackers connected — see poker.sources.list."},"team_id":{"type":"string","description":"Team whose tracker is queried. Required when more than one team is available."}}},"annotations":{"readOnlyHint":true},"title":"List Poker Iterations Tool"},"changes":[{"kind":"name","detail":"Renamed \"poker.iterations.list\" → \"poker_iterations_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":252,"tokensAfter":252},{"name":"poker.sources.list","fixed":{"name":"poker_sources_list","description":"Returns 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.","inputSchema":{"type":"object","properties":{"team_id":{"type":"string","description":"Team to inspect. Required when more than one team is available — call retro.teams.list first."}}},"annotations":{"readOnlyHint":true},"title":"List Poker Sources Tool"},"changes":[{"kind":"name","detail":"Renamed \"poker.sources.list\" → \"poker_sources_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":152,"tokensAfter":152},{"name":"retro.actions.complete","fixed":{"name":"retro_actions_complete","description":"Marks an action item as completed. Requires mcp:write scope.","inputSchema":{"type":"object","required":["action_item_id"],"properties":{"action_item_id":{"type":"string","description":"The ID of the action item to mark as completed."}}},"annotations":{},"title":"Complete Action Item Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.actions.complete\" → \"retro_actions_complete\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":80,"tokensAfter":80},{"name":"retro.actions.create","fixed":{"name":"retro_actions_create","description":"Creates a new action item on a retrospective board. Requires mcp:write scope.","inputSchema":{"type":"object","required":["board_id","text"],"properties":{"due":{"type":"string","description":"Due date in ISO 8601 format (e.g. 2025-03-15T00:00:00Z)."},"text":{"type":"string","description":"The text of the action item."},"board_id":{"type":"string","description":"The ID of the board to create the action item on."},"priority":{"type":"string","description":"Priority: high, medium, or low. Default: medium."},"assign_to":{"type":"string","description":"User ID to assign the action item to — call retro.team.members.list to get it — or \"me\" to assign to the current user."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create Action Item Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.actions.create\" → \"retro_actions_create\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":202,"tokensAfter":202},{"name":"retro.actions.list","fixed":{"name":"retro_actions_list","description":"Returns 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.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"How many items to return, newest first. Default 50, maximum 200. The total field always reports the full count."},"since":{"type":"string","description":"Only items created on or after this date (ISO 8601, for example 2026-01-01)."},"status":{"type":"string","description":"open (default), completed or all."},"team_id":{"type":"string","description":"Narrow the search to one team. By default every available team is included."},"assignee":{"type":"string","description":"Filter by assignee name, partial match."}}},"annotations":{"readOnlyHint":true},"title":"List Actions Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.actions.list\" → \"retro_actions_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":261,"tokensAfter":261},{"name":"retro.actions.update","fixed":{"name":"retro_actions_update","description":"Updates an existing action item: text, priority, due date, or assignee. Requires mcp:write scope.","inputSchema":{"type":"object","required":["action_item_id"],"properties":{"due":{"type":"string","description":"New due date in ISO 8601 format."},"text":{"type":"string","description":"New text for the action item."},"priority":{"type":"string","description":"New priority: high, medium, or low."},"assign_to":{"type":"string","description":"User ID to reassign to — call retro.team.members.list to get it — or \"me\" to assign to the current user."},"action_item_id":{"type":"string","description":"The ID of the action item to update."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Update Action Item Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.actions.update\" → \"retro_actions_update\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":192,"tokensAfter":192},{"name":"retro.board.actions.list","fixed":{"name":"retro_board_actions_list","description":"Returns action items from a retrospective board, including status, priority, assignee, and due date.","inputSchema":{"type":"object","required":["board_id"],"properties":{"board_id":{"type":"string","description":"The ID of the board to get action items for."},"include_completed":{"type":"boolean","description":"Whether to include completed action items. Default: false."}}},"annotations":{"readOnlyHint":true},"title":"Get Board Actions Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.board.actions.list\" → \"retro_board_actions_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":119,"tokensAfter":119},{"name":"retro.board.health.get","fixed":{"name":"retro_board_health_get","description":"Returns 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.","inputSchema":{"type":"object","required":["board_id"],"properties":{"board_id":{"type":"string","description":"The ID of the board to get the health check report for."}}},"annotations":{"readOnlyHint":true},"title":"Get Board Health Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.board.health.get\" → \"retro_board_health_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"retro.board.insights.list","fixed":{"name":"retro_board_insights_list","description":"Returns insights (clusters) and suggested actions for a retrospective board. Insights include topic clusters with sentiment, urgency, and category analysis.","inputSchema":{"type":"object","required":["board_id"],"properties":{"board_id":{"type":"string","description":"The ID of the board to get insights for."}}},"annotations":{"readOnlyHint":true},"title":"Get Board Insights Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.board.insights.list\" → \"retro_board_insights_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":102,"tokensAfter":102},{"name":"retro.board.messages.delete_own","fixed":{"name":"retro_board_messages_delete_own","description":"Deletes 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).","inputSchema":{"type":"object","required":["message_id"],"properties":{"message_id":{"type":"string","description":"The ID of the message to delete."}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete Own Message Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.board.messages.delete_own\" → \"retro_board_messages_delete_own\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":116,"tokensAfter":116},{"name":"retro.board.messages.list","fixed":{"name":"retro_board_messages_list","description":"Returns 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.","inputSchema":{"type":"object","required":["board_id"],"properties":{"board_id":{"type":"string","description":"The ID of the board to get messages for."}}},"annotations":{"readOnlyHint":true},"title":"Get Board Messages Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.board.messages.list\" → \"retro_board_messages_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":118,"tokensAfter":118},{"name":"retro.board.messages.update","fixed":{"name":"retro_board_messages_update","description":"Updates the text of an existing board message created by the current MCP user.","inputSchema":{"type":"object","required":["message_id","text"],"properties":{"text":{"type":"string","description":"New text content for the message."},"message_id":{"type":"string","description":"The ID of the message to update."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Update Message Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.board.messages.update\" → \"retro_board_messages_update\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":103,"tokensAfter":103},{"name":"retro.board.roti.get","fixed":{"name":"retro_board_roti_get","description":"Returns ROTI (Return on Time Invested) voting metrics for a retrospective board, including average score, distribution, and trend across previous retrospectives.","inputSchema":{"type":"object","required":["board_id"],"properties":{"board_id":{"type":"string","description":"The ID of the board to get ROTI metrics for."}}},"annotations":{"readOnlyHint":true},"title":"Get Board Roti Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.board.roti.get\" → \"retro_board_roti_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":103,"tokensAfter":103},{"name":"retro.board.suggested_actions.promote","fixed":{"name":"retro_board_suggested_actions_promote","description":"Turns 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.","inputSchema":{"type":"object","required":["board_id","suggested_action_id"],"properties":{"board_id":{"type":"string","description":"The ID of the board the suggestion belongs to."},"assign_to":{"type":"string","description":"User ID to assign the action item to — call retro.team.members.list to get it — or \"me\" to assign to the current user."},"suggested_action_id":{"type":"string","description":"The ID of the suggested action to promote, from suggested_actions in retro.board.insights.list. Only suggestions with status \"pending\" can be promoted."}}},"annotations":{},"title":"Promote Suggested Action Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.board.suggested_actions.promote\" → \"retro_board_suggested_actions_promote\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":233,"tokensAfter":233},{"name":"retro.board.suggested_actions.reject","fixed":{"name":"retro_board_suggested_actions_reject","description":"Rejects a pending suggested action from retro.board.insights.list: the suggestion moves to rejected and no action item is created. Requires mcp:write scope.","inputSchema":{"type":"object","required":["board_id","suggested_action_id"],"properties":{"board_id":{"type":"string","description":"The ID of the board the suggestion belongs to."},"suggested_action_id":{"type":"string","description":"The ID of the suggested action to reject, from suggested_actions in retro.board.insights.list. Only suggestions with status \"pending\" can be rejected."}}},"annotations":{},"title":"Reject Suggested Action Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.board.suggested_actions.reject\" → \"retro_board_suggested_actions_reject\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":171,"tokensAfter":171},{"name":"retro.board.summary.get","fixed":{"name":"retro_board_summary_get","description":"Returns 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.","inputSchema":{"type":"object","required":["board_id"],"properties":{"board_id":{"type":"string","description":"The ID of the board to get the summary for."}}},"annotations":{"readOnlyHint":true},"title":"Get Board Summary Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.board.summary.get\" → \"retro_board_summary_get\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":108,"tokensAfter":108},{"name":"retro.boards.list","fixed":{"name":"retro_boards_list","description":"Returns 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.","inputSchema":{"type":"object","properties":{"since":{"type":"string","description":"Only boards created on or after this date (ISO 8601, for example 2026-01-01)."},"until":{"type":"string","description":"Only boards created on or before this date (ISO 8601)."},"team_id":{"type":"string","description":"Team to list boards for. Required when more than one team is available — call retro.teams.list first."},"finished_only":{"type":"boolean","description":"Return only finished retrospectives. Default: false, unfinished boards are included."}}},"annotations":{"readOnlyHint":true},"title":"List Boards Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.boards.list\" → \"retro_boards_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":241,"tokensAfter":241},{"name":"retro.boards.search","fixed":{"name":"retro_boards_search","description":"Search 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.","inputSchema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"Search query. Looks into board summaries, action items and participant cards."},"team_id":{"type":"string","description":"Optional: filter search to a specific team."}}},"annotations":{"readOnlyHint":true},"title":"Search Boards Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.boards.search\" → \"retro_boards_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":143,"tokensAfter":143},{"name":"retro.team.members.list","fixed":{"name":"retro_team_members_list","description":"Returns 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.","inputSchema":{"type":"object","properties":{"team_id":{"type":"string","description":"Team to list members for. Required when more than one team is available — call retro.teams.list first."}}},"annotations":{"readOnlyHint":true},"title":"List Team Members Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.team.members.list\" → \"retro_team_members_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":181,"tokensAfter":181},{"name":"retro.teams.list","fixed":{"name":"retro_teams_list","description":"Returns 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.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"List Teams Tool"},"changes":[{"kind":"name","detail":"Renamed \"retro.teams.list\" → \"retro_teams_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":74,"tokensAfter":74}],"toolsChanged":29,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}