Vote for an issue (spec D143 (4)): one vote per person, idempotent
vote_issueVote for an issue (spec D143 (4)): one vote per person, idempotent.
Adds the caller to votes.by and returns the full issue. Voting twice is a no-op: 200 with the issue as it is, no new version, no history row. A real vote is a normal issue write — version + 1, history entry "vote" by the actor, event core.issue.updated with changed: ["votes"]. Project member and above (viewer 403 forbidden); an AI agent votes with its owner's rights (lane warning only, never a block). The project needs votes_enabled (Feedback template, or turned on in settings), else 409 votes_disabled.
Adds the token user's vote (D143): one vote per person, idempotent (voting again changes nothing). Pass the version from get_issue; returns the issue with votes {count, by} and my_vote. Members and up (viewer 403); a project with votes_enabled false → 409 votes_disabled. Vote only when the user asks.
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
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Spec 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). | |
| version | Yes | Optimistic-lock version of the file; +1 on every write. Every write must send the version it read. | |
| issue_key | Yes | Issue key `{PROJECT}-{n}`, e.g. `KJ-101`. | |
| project_key | Yes | Project key, e.g. `KJ`. 2–10 chars, uppercase letters and digits, starts with a letter. |