Skip to main content
Glama

Take your vote back (spec D143 (4)): idempotent

unvote_issue
DestructiveIdempotent

Take your vote back (spec D143 (4)): idempotent.

Removes the caller from votes.by and returns the full issue. Not having voted is a no-op (200, no new version). Same rights, write rule and errors as vote_issue; a real change writes history "unvote" and changed: ["votes"]. The body carries version like every write.

Withdraws the token user's vote (D143); idempotent. Pass the version from get_issue. Same rights and errors as vote_issue (403 for a viewer, 409 votes_disabled).

WRITE: version = from your latest read (get_issue, list_comments, list_sprints, get_doc, read_file). 409 version_conflict (details.current, details.current_version): re-read, re-apply your change, retry — never overwrite blindly; when the changes disagree, ask the user.

Input Schema

NameRequiredDescriptionDefault
reasonNoSpec D144: why you make this change (≤ 200 characters). Optional, but give it when you act as an agent account — it is shown in the agent's run log ("moved KJ-12 To Do → In Progress because <reason>"). board-mcp records it in `agent.run`; board-core / board-files accept it and ignore it (it never changes the file, the version or the history).
versionYesOptimistic-lock version of the file; +1 on every write. Every write must send the version it read.
issue_keyYesIssue key `{PROJECT}-{n}`, e.g. `KJ-101`.
project_keyYesProject key, e.g. `KJ`. 2–10 chars, uppercase letters and digits, starts with a letter.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond annotations: specifies no-op behavior and status code on no-op, that a real change writes history "unvote" and changed:["votes"], returns the full issue, and enumerates concrete error codes (403 viewer, 409 votes_disabled, 409 version_conflict with details.current). This is exactly the context annotations can't carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Content is front-loaded and useful, but there is real duplication: 'idempotent' appears in the title and twice in the body, and 'Same rights ... and errors as vote_issue' is stated in both the first and second paragraph. It could be tightened by roughly a third without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-param write tool with no output schema, everything an agent needs is present: preconditions (version), no-op semantics, side effects (history, changed), and the full error/retry story.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds genuine semantics for `version`: where to source it (get_issue, list_comments, etc.) and the recovery protocol for 409 version_conflict, including the warning never to overwrite blindly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Take your vote back', 'Removes the caller from `votes.by`') and is immediately distinguishable from its counterpart vote_issue, which it references by name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the operative conditions: not having voted is a no-op (200, no new version), pass the `version` from get_issue, same rights/errors as vote_issue. It doesn't explicitly say 'use vote_issue to cast a vote instead', but the counterpart relationship is implied clearly enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources