MCP tool reference
Every tool the vitrinka MCP server exposes.
Every tool the deployment's MCP endpoint serves, grouped by area. This is the same vocabulary an agent sees on a live connection — names, titles and descriptions are quoted verbatim from the server's tool table. The catalogue a registration serves is scoped by vitrinka setup from the installed plugins (/mcp?modules=…).
Tools marked read-only never write; everything else is a write and goes through workspace scoping and, where armed, the default-workspace confirmation gate. Tools whose name is <verb>_<kind> are not listed on a live connection: call them as the generic verb with kind (list {kind: "sprint"}); docs {topic: "kind:<kind>"} answers the kind's contract. Every tool accepts select, jq and budget, and a reply over the budget is withheld behind an over_budget envelope that names the narrowing arguments.
Generic verbs
list — List a kind
Page a kind. Contract: docs {topic:"kind:<kind>"}.
Module: core · Read-only.
get — Read a kind
Read a kind; docs kind:<kind> has its contract.
Module: core · Read-only.
create — Create one of a kind
Create one kind using its arguments. Contract: docs {topic:"kind:<kind>"}.
Module: core
update — Update a kind
Update a kind; docs kind:<kind> has its contract.
Module: core
delete — Delete one of a kind
Delete one kind using its arguments. Contract: docs {topic:"kind:<kind>"}.
Module: core
search — Search the workspace
Tasks, epics, stories by title words, plus pages, boards, tags, cards, sessions, shots, annotations (by №); mode:"resolve": one task reference → verdict, ≤5 candidates.
Module: core · Read-only.
Boards
list_boards — List boards
List annotation boards (slug, title, project, subgroup, tags, url). ALWAYS narrow — project, subgroup, board_type (e.g. journeys) and/or tags run as one indexed query; unscoped exceeds any budget.
Call as list {kind: "board", …}
Module: core · Read-only.
create_board — Create board
Create a board: slug, url and metadata back. board_type defaults to "board" ("brainstorm" or a custom token for sub-types); stamp project and subgroup (reviews · testing · sessions · brainstorming · design · journeys; inferred when omitted). Then ARM THE LISTENER — a board without one queues annotations nobody reacts to.
Call as create {kind: "board", …}
Module: core
set_board_meta — Update board metadata
Update a board's subgroup, theme, tags, archived flag or meta bag (meta is a shallow merge-patch) — contract: docs {topic:"organization"}.
Module: core
compose_board — Compose board content
Place a batch of AI-authored content on a board — cards, frames, wires, questions — by intent, never coordinates; all-or-nothing — contract: docs {topic:"composing"}, payloads docs {topic:"<kind>"}.
Module: core
update_cards — Update board cards
Batch-edit your own AI-layer cards and frames, remove (soft, 30 days) or restore; others' cards take the 409 confirm handshake — contract: docs {topic:"composing"}.
Module: core
arrange — Arrange board cards
Auto-align board cards by intent — mode, gap/padding, scope; save:true persists a section layout — contract: docs {topic:"sections"}.
Module: core
scrape_board — Read board digest
Read a board as one digest: cards with section, media URLs, notes, annotations, journey chains, questions and the sections map; section isolates one journey — contract: docs {topic:"sections"}.
Module: core · Read-only.
list_sections — List board sections
A board's journey-section index: every section (name, bounds, member count, order, journey/pass) plus journeys [{journey, title, passes, latest}] — cheaper than scrape_board when you only need the map to pick a section or journey.
Call as list {kind: "section", …}
Module: core · Read-only.
highlight — Highlight board region
Draw a live ink rectangle on an annotation's shot card (defaults to its region; x/y/w/h in source pixels) — "the element you mean is HERE".
Module: rare
board_working — Show working status
Narrate what you are doing on a brainstorm board: open tabs show the status line and expected ghost tiles where the next questions land. Post it when a ↻ Regenerate batch arrives, then compose; it clears when questions land; decays after 90 s.
Module: rare
get_capsule — Get work capsule
One annotation's compact markdown work brief (same shape wait_for_work delivers): ask, region, source set, thread tail, protocol. Cheaper than get_annotation when you just need to act.
Call as get {kind: "capsule", …}
Module: pm · Read-only.
list_tags — List tags
The tag vocabulary with per-entity usage counts (boards / cards / sessions), label, colour, icon, description — read BEFORE tagging to reuse the operator's vocabulary; list_boards {tags} fetches carriers.
Call as list {kind: "tag", …}
Module: pm · Read-only.
share_board — Mint a share link
Mint a capability share link (the URL is the credential) for the WHOLE board; never on a board carrying drafts; returns {id, mode, url} — contract: docs {topic:"organization"}.
Module: core
undo — Undo your last batch
Revert your newest batch on a board — your own stack only, the user's ⌘Z never touches it; answers {applied, label}; applied 0 = nothing of yours to undo.
Module: core
import — Import a truth source
Turn a truth source (openapi · sqlddl · compose · pgschema) into ONE refreshable diagram card; the server places it, refresh re-parses it later.
Module: core
refresh — Refresh a living card
Re-parse a living-source card — an imported diagram from its stored or new source, a page from pushed markdown — keeping human overrides; answers the card.
Module: core
Sets and screenshots
list_sets — List artifact sets
The artifact sets of a project (all branches) or one branch — newest first, no file lists; each carries a share URL, version, key, optional custom name and title.
Call as list {kind: "set", …}
Module: core · Read-only.
get_set — Get artifact set
Get one artifact set: metadata (version, key, name, title, commit, PR, issue) plus its full file list and share URL.
Call as get {kind: "set", …}
Module: core · Read-only.
search_shots — Search screenshots
Search the cross-set screens library — every ingested screenshot — by project, journey, surface, branch, kind, free text (route, note, title, label) and time range; newest shot per screen by default, all=true every occurrence. Pulls screens onto boards.
Call as search {kind: "shot", …}
Module: qa · Read-only.
rename_set — Rename artifact set
Set or change a set's custom URL name — e.g. name acme/main v2 "payout-flow" so …/w/<ws>/acme/main/payout-flow resolves; an empty name clears it; permission-gated.
Module: rare
update_set — Update set metadata
Edit a set's mutable metadata: custom name and/or human title. Omitted fields stay untouched; empty string clears. Requires an authenticated connection with permission for this operation.
Call as update {kind: "set", …}
Module: core
list_components — List UI components
A project's indexed UI components as compact rows (library, name, kind, summary) — load BEFORE mocking its UI so mockups use the real vocabulary; filter by library in monorepos; empty = vitrinka project index --components has not run.
Call as list {kind: "component", …}
Module: core · Read-only.
get_component — Get UI component
One indexed component in full: props (names/types), variant vocabulary, summary, source path. Use after list_components when a mockup needs the exact prop shape.
Call as get {kind: "component", …}
Module: core · Read-only.
Work queue
wait_for_work — Wait for annotation work
Drain scoped work once. On idle end the model turn; never re-poll. Background waiting and repeated-poll correction: docs {topic:"guide:listening"}.
Module: core
list_work — List work items
Annotation work items FIFO: id, board, intent (fix · investigate · refactor · redesign · reshoot · note · other), prompt, source ref, crop URL. ALWAYS SCOPE with board or project + branch — unscoped is every session's backlog; status=open is what waits on an agent.
Call as list {kind: "work", …}
Module: core · Read-only.
get_annotation — Get annotation
One annotation's full brief: region, intent, prompt revisions, thread (with attachments), fix attempts, explicit ⌖E refs (elements the user pointed at — rank above implicit context), overlapping element context, the card's source set; get_card_image {annotation} SEES the region.
Call as get {kind: "annotation", …}
Module: core · Read-only.
set_status — Set annotation status
Move an annotation: "working" on pickup, "in_review" after the after-shot and reply; never "resolved"; 409 cancelled = withdrawn — contract: docs {topic:"annotation"}.
Module: core
reply — Reply to annotation
Post a reply into an annotation's thread as the agent (pass agent): report what was done, ask a clarifying question, or explain a push-back.
Module: core
attach_after — Attach after-shot
Attach the after-shot to an annotation from a pushed set version — the canonical way to show a fix — contract: docs {topic:"annotation"}.
Module: core
get_card_image — Get card image
See a shot card's pixels + {width, height, cardVersion} (annotate's source space, not imageWidth/imageHeight); cardIds: survey sheet; run: a review sheet; annotation: its crop — docs {topic:"annotation"}.
Module: core · Read-only.
annotate — Annotate screens (agent findings)
File your OWN findings as staged annotations on shot cards: THE answer to "review these screens"; regions: source px of cardVersion (docs annotation).
Module: core
agent_verdict — Release or dismiss staged findings
Verdict on a board's staged agent-authored findings: accept releases them to the work wire (the listener drains them), dismiss cancels; every id must be staged on this board.
Module: core
Questions
ask_board — Ask a board question
Ask the operator a multiple-choice or text question on a board, optionally anchored; answers stage until ↑ Send — contract: docs {topic:"composing"}.
Module: rare
get_questions — Get board questions
A board's FULL question record — options, answer, note rider, ⌖E refs, answeredBy, staged/sent, pivot, retracted — the DURABLE read after a batch left the wire: reconstruct decisions, audit unattended answers, see staged picks. Never drains.
Call as get {kind: "questions", …}
Module: core · Read-only.
retract_questions — Retract open questions
Withdraw your own OPEN questions a settled answer invalidated, then compose replacements; answered or staged ones answer a per-item 409 (see results[]); rows stay in get {kind: "questions"} as retracted:true; remove the decision tiles with update_cards yourself.
Module: rare
update_question — Update open question
Rewrite one of your OPEN questions in place (prompt, stakes, options, multiSelect, pivot), keeping id and tile; 409 once answered. answer (+ note) alone records a decision settled off the board — the tile closes, delivered, no Send; update the tile's text with update_cards.
Call as update {kind: "question", …}
Module: core
answer_ask — Answer an info request
Stream an answer to an ask-AI item: chunks with partial:true append, the final chunk without it settles ✓ (failed:true ✗); appending after settle 409s.
Module: rare
update_brainstorm — Cancel, reopen or finish a brainstorm
Change a brainstorm's status: action "plan" is the dry run (the tasks a cancel moves to each project's cancelled state — linked tasks, their epic, its open children — or a reopen restores); cancel or reopen apply the chosen rows; finish marks an epic-less brainstorm Finished.
Call as update {kind: "brainstorm", …}
Module: core
Sessions
get_session — Get session digest
One recorded user-testing session as a compact digest — THE way to traverse it, never raw events: steps (route, action, notes, cardId; folded runs carry seqs), deduped issues with live board status, vitals per route, facets, totals. Address by id or board slug.
Call as get {kind: "session", …}
Module: qa · Read-only.
update_session — Update a session
Close, pause or resume a recorded session, or stamp its pipeline (triaged · fixPr · tested · journeys); done lands it on its journey board; journeys record a run per plan.
Call as update {kind: "session", …}
Module: qa
Tasks, sprints and milestones
create_task — Create a task
File a task in a project's task engine: reporter attribution rides your token, subtasks pass parentId, custom fields ride fields (list_fields; epics carry the feature preset); the reply's url is the task's ONE link — print it as returned.
Call as create {kind: "task", …}
Module: pm
update_task — Update a task
Patch one task — every field optional; explicit zeros clear (parentId 0 detaches, sprintId/milestoneId 0 unassign, "" unsets dates); labels and assignees REPLACE their sets (label_task edits incrementally); reporter is immutable.
Call as update {kind: "task", …}
Module: pm
list_tasks — List tasks
One cursor page of a project's tasks as COMPACT rows in PM working order — EXPLORE, never dump: narrow with f first, pass nextCursor back as cursor, read one body with get_task; summarize_tasks counts without rows.
Call as list {kind: "task", …}
Module: pm · Read-only.
summarize_tasks — Summarize tasks
Exact filtered task counts from the server — total and groups by state, type or priority — without reading rows; more than 100 groups is an error.
Module: pm · Read-only.
get_task — Get a task
Read one task: body, dates, ids, resolved reporter/assignee actors, custom fields, url (print as returned); include embeds bounded pages — children, links, external, refs (the attachment INDEX; load through read_task_ref), events, comments; view:"pickup" is the bounded session start.
Call as get {kind: "task", …}
Module: pm · Read-only.
get_work_time — Read work time
Automatic human and agent effort for a bounded period — human overlap counted once, parallel agent sessions summed, tool time a subset, waiting/unknown separate — as totals plus task/person/day groups, no raw evidence; scope defaults to mine, team follows workspace permissions.
Call as get {kind: "work_time", …}
Module: me · Read-only.
get_work_evidence — Read work evidence
One captured work interval plus a bounded newest-first page of its corrections (nextBefore pages back); owner or an authorised manager only (audited), project permission applies; no screenshots, keystrokes or transcripts exist.
Call as get {kind: "work_evidence", …}
Module: me · Read-only.
get_work_forecasts — Read work forecast history
A bounded newest-first page of immutable estimate override versions for a task (nextBefore pages back; latest carries the current override; null = automatic, zero = a real estimate); get_work_time with taskId gives the effective forecast.
Call as get {kind: "work_forecasts", …}
Module: me · Read-only.
create_sprint — Create a sprint
Create an outcome scope with optional dates, a goal and declared coverage. Names are unique per project. Multiple sprints may be active; dates never appear implicitly.
Call as create {kind: "sprint", …}
Module: pm
update_sprint — Update a sprint
Rename or re-date one of a project's sprints (name collisions answer 409; "" clears a date). There is deliberately no delete.
Call as update {kind: "sprint", …}
Module: pm
list_sprints — List sprints
List a project's sprints, oldest first.
Call as list {kind: "sprint", …}
Module: pm · Read-only.
list_categories — List categories
Page the permanent workspace category vocabulary.
Call as list {kind: "category", …}
Module: pm · Read-only.
create_category — Create a category
Create a permanent workspace category; requires workspace admin.
Call as create {kind: "category", …}
Module: pm
update_category — Update a category
Configure a category using its current version; requires workspace admin.
Call as update {kind: "category", …}
Module: pm
get_session_scope — Read a session scope
Read explicit harness binding: unknown, none or sprint.
Call as get {kind: "session_scope", …}
Module: pm · Read-only.
update_session_scope — Bind a session scope
Bind a harness session to none or a sprint using current version (0 for unknown).
Call as update {kind: "session_scope", …}
Module: pm
create_scope_resolution — Resolve a task's scope
Resolve feature, child, followup or verified-bug scope without creating a task. Multiple matches require selection; pass the request to task creation atomically.
Call as create {kind: "scope_resolution", …}
Module: pm · Read-only.
get_scope_readiness — Read scope readiness
Page Before/Ship/After obligations; omit id for project scope. Carry first-page scopeVersion with after; 409 requires restarting.
Call as get {kind: "scope_readiness", …}
Module: pm · Read-only.
get_now — Read Now
Read bounded needs-you, active outcomes and next work without requiring Eve.
Call as get {kind: "now", …}
Module: pm · Read-only.
get_copilot — Read the project copilot
Project front page: Eve's brief and moves, needs you, gating bugs, next, ≤ 3 active-sprint cockpits, next 7 days, activity. Works without Eve.
Call as get {kind: "copilot", …}
Module: pm · Read-only.
get_cockpit — Read a sprint cockpit
One sprint's cockpit: goal, counts, obligations per phase, gating bugs, scope change, people load, activity, next 7 days, Eve's brief. id: a sprint id from list {kind:"sprint"}.
Call as get {kind: "cockpit", …}
Module: pm · Read-only.
list_sprint_members — List sprint members
Page unfinished members before explicit carry selection.
Call as list {kind: "sprint_member", …}
Module: pm · Read-only.
create_sprint_start — Start a sprint
Start this sprint alongside existing active scopes; no implicit dates or completion.
Call as create {kind: "sprint_start", …}
Module: pm
create_sprint_transition_preview — Preview a sprint transition
Preview closing a sprint with only selected taskIds; destinationId 0 explicitly means backlog.
Call as create {kind: "sprint_transition_preview", …}
Module: pm · Read-only.
create_sprint_transition — Apply a sprint transition
Apply a reviewed transition preview with a stable requestId; stale scope returns 409.
Call as create {kind: "sprint_transition", …}
Module: pm
create_release_candidate — Create a release candidate
Prepare exact repository revisions and builds for sprint id at scopeVersion. Cutting notes does not prove shipment.
Call as create {kind: "release_candidate", …}
Module: pm
get_release_candidate — Read a release candidate
Read exact candidate identity and currentness.
Call as get {kind: "release_candidate", …}
Module: pm · Read-only.
list_release_candidates — Page candidates for sprint id
Page candidates for sprint id.
Call as list {kind: "release_candidate", …}
Module: pm · Read-only.
list_candidate_evidences — Page original evidence for candidate id
Page original evidence for candidate id.
Call as list {kind: "candidate_evidence", …}
Module: pm · Read-only.
create_candidate_evidence — Record original candidate evidence
Record original candidate evidence. Agents must set verified:false; authorized humans verify through the browser.
Call as create {kind: "candidate_evidence", …}
Module: pm
list_shipments — List shipments
Page immutable shipped snapshots; evidence belongs to exact candidate identity.
Call as list {kind: "shipment", …}
Module: pm · Read-only.
get_history_chapter — Read a history chapter
Read a chapter's spread (cover, narrative, numbers, boards, documents) and its first original sources; cursor pages sources and pins the snapshot.
Call as get {kind: "history_chapter", …}
Module: pm · Read-only.
update_history_chapter — Update a history chapter
Rewrite a History chapter's narrative (title, body, the narrativeVersion read last) or pin its cover to a screen key from its spread ("" = the server's pick); an edit beats Eve's draft. Returns the chapter and spread.
Call as update {kind: "history_chapter", …}
Module: pm
create_history_edition — Create a history edition
Export one History chapter (from) or a range (from…to, at most 60) as a doc artifact on the project's artifacts board; returns its /a/{id} url.
Call as create {kind: "history_edition", …}
Module: pm
get_overview — Read the project board
The project board: the human-level work in Planned (top-ranked 8 + total), Building, Built and Shipped (newest first, next cursor), the strip (open, shipped this month, live, prod deploy, open release, active goals), newest History chapters (ids for get history_chapter; chapters = chaptersNext pages older ones). after = Shipped's next cursor: its next page.
Call as get {kind: "overview", …}
Module: pm · Read-only.
create_consolidation_preview — Preview a consolidation
Preview explicit category and parent edits without changing identity or provenance.
Call as create {kind: "consolidation_preview", …}
Module: pm · Read-only.
create_consolidation — Apply a consolidation
Apply reviewed consolidation with version checks and an idempotency requestId.
Call as create {kind: "consolidation", …}
Module: pm
create_milestone — Create a milestone
Create a milestone in a project. Names are unique per project (409 on collision); append-only rows, update_milestone fixes mistakes.
Call as create {kind: "milestone", …}
Module: pm
update_milestone — Update a milestone
Rename, re-date or mark reached one of a project's milestones (name collisions 409; "" clears the due date; reached:true stamps reachedAt now and ripens every todo waiting on it, false clears it); no delete.
Call as update {kind: "milestone", …}
Module: pm
list_milestones — List milestones
List a project's milestones, due-date order.
Call as list {kind: "milestone", …}
Module: pm · Read-only.
ripe_todos — Ripe todos
The todos whose condition holds NOW (overdue, within lead, milestone, typed when), computed server-side; pass branch/task/paths so those fire; ≤10 rows with why.
Module: me · Read-only.
complete_todo — Complete a todo
Mark a todo done; a recurring todo advances to its next occurrence and stays open (recurred:true); not a todo → 422.
Module: me
mark_deploy — Mark a deploy
Record that a commit reached an environment (prod, staging, …) — the fact deployed todo conditions wait on; idempotent per (project, env, sha); admin+ credential only (a member is 403).
Module: rare
create_agenda — Plan a task on a day
Put an EXISTING task on a person's day ("add to today's todos <task>"): all-day, or a block with at/for; one open item per person and task (repeating answers or moves it); never plan by editing dueAt — free text is a todo task first.
Call as create {kind: "agenda", …}
Module: me
list_agenda — List an agenda
Days as compact rows: planned items (open ones from earlier days float onto today as "from <day>"), people's due work and deadlines; item is the id update/delete {kind: "agenda"} take; default you, today + 6 days.
Call as list {kind: "agenda", …}
Module: me · Read-only.
update_agenda — Move or tick an agenda item
Move an agenda item to another day, set or clear its time, re-rank it, or tick it: done closes the item only — the task's state never moves (a todo completes through its own door).
Call as update {kind: "agenda", …}
Module: me
delete_agenda — Remove an agenda item
Take an item off its day; the task itself is untouched.
Call as delete {kind: "agenda", …}
Module: me
list_states — List project states
A project's states in order — key, name, group (backlog | unstarted | started | completed | cancelled), default; a task's state is one of these keys, the legacy status derives from the group.
Call as list {kind: "state", …}
Module: pm · Read-only.
list_fields — List custom fields
A project's custom-field definitions — key, label, kind (text · longtext · select · multiselect · checklist · number · date · url · relation · flow), options, preset, appliesTo, position, required; values live on the task's fields and validate against the kind on every write.
Call as list {kind: "field", …}
Module: pm · Read-only.
create_field — Define a custom field
Add a custom-field definition to a project. Admin only (member-scoped tokens are refused). Key is a snake_case slug and immutable; fieldKind is immutable. select/multiselect need options.
Call as create {kind: "field", …}
Module: pm
update_field — Update a custom field
Patch a custom-field definition by key — label, options, appliesTo, position, required (key and kind are immutable). Admin only.
Call as update {kind: "field", …}
Module: pm
delete_field — Delete a custom field
Remove a custom-field definition AND every value stored under it in the project. Admin only.
Call as delete {kind: "field", …}
Module: pm
list_labels — List labels
A project's labels (name order, max 500), created on demand by create_task.labels, update_task.labels (replace) and label_task (add/remove); eve-* are TRIGGER labels — applying one fires that Eve flow.
Call as list {kind: "label", …}
Module: pm · Read-only.
label_task — Add or remove labels on a task
Add and/or remove labels in one write (created on demand); the reply is the full set; eve-* are trigger labels — apply one only to request that flow.
Module: pm
create_comment — Comment on a task
Append a markdown comment (max 32 KiB) to a task: @mentions land in that person's My work, @eve asks Eve to reply under it, parentId makes it a REPLY in that thread (any depth); attribution rides your token.
Call as create {kind: "comment", …}
Module: pm
list_comments — List task comments
Page a task's comments oldest first (keyset: pass nextAfter back as after).
Call as list {kind: "comment", …}
Module: pm · Read-only.
add_task_ref — Attach a ref to a task
Attach a session, shot, board, file, PR ("owner/repo#n") or run, or link a typed document by URL; refs are versioned — contract: docs {topic:"tasks"}.
Module: pm
upload_task_file — Upload a text file as task evidence
Store inline TEXT as a typed, versioned attachment (same filename = next version; versionOf continues a lineage); binaries go through vitrinka task upload — contract: docs {topic:"tasks"}.
Module: pm
hand_back — Hand a task back
The ONE door ending a session's work on a task: next lands as steps/gates on it, a child only with task:true; PRINT rendered VERBATIM — contract: docs {topic:"tasks"}.
Module: pm
spot — Spot something out of scope
File something spotted but not done here as a child of the bound task or the rolling 'Found during implementation' epic; print the url — contract: docs {topic:"tasks"}.
Module: qa
read_task_ref — Read a task attachment under a token budget
Load ONE attachment progressively: raw under budget tokens, distilled above it or with question; read the refs index (meta.tokens, meta.hint) first — contract: docs {topic:"tasks"}.
Module: pm · Read-only.
ask_task — Ask Eve a question about a task or project
Ask Eve ONE question about a task (id: cited answer) or a whole project (project: answer + task urls); writes nothing; AI credits; 501 = no backend, don't retry.
Module: pm · Read-only.
promote_meeting — Promote a diary meeting card to a meeting task
Turn ONE meeting card on the signed-in user's diary day board into a meeting task in a project (toWorkspace/toProject name the destination; the project must exist), copying recording and transcript as file refs; owner only; idempotent. Address later calls to THAT workspace.
Module: rare
meeting_notes — Ask Eve for a meeting's notes, decisions and action items
Run Eve's meeting flow over a meeting task's transcript: a versioned notes ref, a summary distill, the decisions checklist, every action item as a PENDING intake draft (no task without a human verdict); board:true composes the meeting board. 409 without a transcript; 501 without an AI backend — do not retry.
Module: rare
qa_board — The qa task's testing board
Resolve (creating on first need) the board a qa task owns — a Plan section with the journeys diagram plus one section per journey; idempotent; answers {board, diagram, task}.
Module: qa
publish_run — Publish a test run onto the feature's QA record
Turn a runner manifest into the feature's QA record in one idempotent pass: qa task, journeys, verdicts, board, refs, failing cases; screenshots via vitrinka qa run publish.
Module: rare
edit_journey_node — Edit a journey through its diagram node
Edit a node of a living journeys diagram — which IS editing the journey task: writes its title and/or steps through the task engine and redraws the card; refused unless the card is a journeys diagram and the journey its qa task's child; other fields: update {kind: "task"} {fields}.
Module: rare
compose_final — Compose an epic's final artifact
Compose or rebuild the epic's feature board from what it carries plus one "<title> — final" page attached as a versioned final ref; a re-run removes only its own cards.
Module: pm
compose_brief — Compose an epic's feature brief
Compose or rebuild the epic's feature brief from its brainstorm board: rebuilds the Plan chapter and returns the skeleton; first run uploads version 1 — contract: docs {topic:"brief"}.
Module: pm
bulk_update_tasks — Bulk-update tasks
Apply ONE patch to up to 200 tasks atomically (state, status, type, priority, assignee, sprint, milestone, parent, dueAt, estimate, project); zero values clear — contract: docs {topic:"tasks"}.
Module: pm
rank_task — Rank a task
Move a task in the manual rank order: before/after name the tasks just above/below it; omit both to move it last; read the order with list {kind:"task", f:{order:"rank"}}.
Module: pm
list_intake — List intake drafts
Pending intake drafts and plan proposals — every project or one — newest first, each with its group (stale · plan · source kind), dedupe verdict and proposal; view summary: counts by project × group, no rows; a closed status reads one project's decided drafts.
Call as list {kind: "intake", …}
Module: pm · Read-only.
intake_verdict — Decide intake drafts
Resolve intake drafts — one id or ≤200 ids atomically. Admin/agent token, or the filer declining.
Module: pm
propose_tasks — Propose tasks (intake)
File task DRAFTS through the intake door for a human to accept — deduped against open tasks, each carrying its verdict; hidden until accepted — contract: docs {topic:"tasks"}.
Module: pm
search_tasks — Search tasks
Full-text search over everything a task carries (title, body, fields, refs, comments), relevance-ranked with snippets and matchedIn (a typo also searches its correction); epic narrows at any depth, within walks one task's tree; an unknown value answers the allowed ones; bounded to 50.
Call as search {kind: "task", …}
Module: pm · Read-only.
search_project — Search a project
ONE project-scoped search over boards (default), tasks or pages — FTS candidates reranked by title similarity; hits carry {kind, id, slug, title, subgroup, score, recent, pinned, url}; an empty q lists boards most recent first; task hits open through get_task.
Call as search {kind: "project", …}
Module: qa · Read-only.
create_rule — Create an automation rule
Create a project automation rule from a typed AST {trigger, conditions, actions} — vocabulary at GET /api/v1/rules/schema. Rules are created DISABLED: dry_run_rule it, then enable with enabled=true. Built-ins (stale-nudge, merged-pr-completes, morning-brief, …) ship enabled. Admin only.
Call as create {kind: "rule", …}
Module: pm
dry_run_rule — Dry-run a rule
Replay a rule over the last N ledger events (event triggers) or the live tasks (schedule triggers) and return what WOULD fire — ids, titles, actions — writing nothing; ast tests an edited document in the rule's slot; members stay inside the rule's project.
Module: rare · Read-only.
list_views — List saved views
List a project's saved views — each is a named filter document (the same shape ?f= takes).
Call as list {kind: "view", …}
Module: pm · Read-only.
my_work — My work
The caller's cross-project slice: assigned, created, mentioned (in comments) and overdue tasks — each bounded to 50, summary projection.
Module: pm · Read-only.
my_favorites — My favorites
The caller's bookmark tree — roots personal and workspace, nested folders, loose stars as rows {kind, id, key, title, url, project}, no thumbnails; read at pickup to see what the person keeps close; scope narrows to one root, folder (an id) to one subtree.
Module: rare · Read-only.
favorite — Star an entity
Star an entity through the ★ button's door — id-keyed kinds by entityId, a project by entityKey; scope defaults to the workspace's star scope; folder is an id or a NAME (created under the root when unknown); starring again re-files, never duplicates. Only what the user asked to keep close.
Module: rare
unfavorite — Unstar an entity
Remove a star from the caller's bookmark tree, addressed like favorite (entityId for id-keyed kinds, entityKey for a project; scope defaults to the workspace's star scope); a missing star is a no-op; the entity is untouched.
Module: rare
create_task_link — Link two tasks
A typed relationship from one task to another: blocks | relates | duplicates | supersedes | custom (custom needs a label ≤ 120 bytes; supersedes marks a revision); at most 256 links per task.
Call as create {kind: "task_link", …}
Module: pm
delete_task_link — Delete a task link
Remove one relationship by its link id.
Call as delete {kind: "task_link", …}
Module: pm
delete_task — Delete a task
Soft-delete a task and trash its board projections in one transaction. A parent with live subtasks is refused (409) — reparent or delete them first.
Call as delete {kind: "task", …}
Module: pm
get_brief — The project brief
The project home as an agent reads it: now (overdue · yours in motion · blocked), next with a why each, blocked, since (changes since you last looked), people with live runs, the sprint ledger, Eve's narration, pending proposals — narrow with since and limit.
Call as get {kind: "brief", …}
Module: pm · Read-only.
list_proposals — List Eve's plan proposals
A project's pending plan proposals (the brief's short list): intake drafts carrying a typed proposal {op: split | reorder | estimate | close | merge, target, reason}; the complete paged read is list {kind: "intake", group: "plan"} (and "stale"); nothing changes until proposal_verdict.
Call as list {kind: "proposal", …}
Module: pm · Read-only.
proposal_verdict — Accept or decline a plan proposal
Resolve one of Eve's plan proposals: accept applies it through the engine doors and closes the draft; decline is an intake decline. Admin/agent token, or its filer to decline.
Module: pm
Review
request_review — Request AI review pass
Compatibility name for the judge pipeline: start a version-pinned review pass, optionally scoped to a section or journey. Findings are audited and await explicit filing. Prefer review_judge + review_judgments. 409 = pass running; 422 = no reviewable image cards.
Module: rare
review_brief — The review brief
The team's review rubric as one prompt block: the preamble, one block per enabled rule (built-in ▸ workspace ▸ project), an optional persona seat — what a review pass receives.
Module: qa · Read-only.
review_plan — Plan a review run
Plan a review over boards; sheets: get_card_image {run, sheet}; {run}: receipt; {run, sight}: echo sheet 1's code (docs review).
Module: rare
review_stats — Review verdict statistics
Review outcomes per rule and agent/model (filed, accepted, dismissed, staged, dismissRate) plus bounded audit samples; usage receipts are separate; check jobsScanned/truncated first.
Module: rare · Read-only.
review_judge — Judge captured screens
Queue Eve's screenshot judge on a board, a set (project/branchSlug/selector: its one board) or an eve review_plan run; immediate unless batch; verdicts in review_judgments; a run stages its failures.
Module: rare
review_job — Read or act on a review job
Read, retry or export one review job; file a judgment or a human's feedback (by zero-based index); post-fix audits are review_verify.
Module: rare
review_judge_settings — Read or update judge routing
Read project judge routing or update it as an admin (read first, keep untouched values): model judges, auditModel audits independently, ruleModels override per rule; no combined score; provider batch is explicit.
Module: rare
review_judgments — Read review judgments
A board's compact version-pinned judge jobs, per-rule triage and audit dimensions, insufficient-evidence and failed jobs included; no pixels.
Module: qa · Read-only.
review_verify — Verify a review finding
Link a newer capture to a failed judgment to queue its post-fix audit; answers the audit job.
Module: qa
Projects and memory
list_projects — List projects
The workspace's project registry: name, status (active | system), product flag, counts (tasks, epics, boards, sets, sessions), lastActivity; every other tool names a project by its project slug.
Call as list {kind: "project", …}
Module: pm · Read-only.
get_project_settings — Get project settings
Read project settings before updating.
Call as get {kind: "project_settings", …}
Module: pm · Read-only.
update_project_settings — Update project settings
Set domains, apps, historyTheme, types or commits. Read first: an omitted section stays, a supplied one is replaced whole ([] or {} clears it). Empty historyTheme restores the house look.
Call as update {kind: "project_settings", …}
Module: pm
get_project_memory — Get project memory
A project's memory: ranked island rows (complete/omitted/next mark the rest) and the legacy document until absorbed. ALWAYS read first.
Call as get {kind: "project_memory", …}
Module: pm · Read-only.
save_project_memory — Save project memory
Overwrite the legacy memory document (markdown, ≤64 KiB); once absorbed by an island: 409 legacy_put, kept as a proposal.
Module: pm
transfer_project — Transfer a project to another workspace
Copy a project into another workspace you own (OWNER of both; agent tokens refused): dryRun first; idempotent; a colliding board slug or set key is 409 unless merge; source kept.
Module: rare
merge_project — Merge a project into another project of the same workspace
Merge one project INTO another of the workspace (tasks with history, boards, sets, sessions, reports, releases, memory); the source stays an alias for old links. No dryRun IS a dry run — read the report; applying is an owner-person's call (agent → 403).
Module: rare
Templates
save_template — Save board template
Save a reusable board template (upsert by name) from a compose-shaped body ({{slot}} placeholders become params) or board + section (a live subtree); compose_board {template, params} instantiates, get_templates lists.
Module: rare
get_templates — List board templates
The board template library: built-in skeletons plus saved registry templates with {{param}} slots. No argument → the index; name → that template; all:true → everything.
Module: core · Read-only.
Preferences
set_preferences — Set user preferences
Read or change the operator's PERSONAL UI preferences (appearance scales, uiFont, wirePanelWidth, behavior toggles): no arguments reads values plus spec; {"prefs": {key: value}} merge-patches — numbers clamp, unknown keys reject the patch (422), changes apply live.
Module: rare
Artifacts
docs — Docs
This deploy's layered reference: element kinds, board card kinds, kit components, guides and the kind contracts. No topic → the index; one topic → its page; "family:topic" disambiguates.
Module: core · Read-only.
artifact_docs — Artifact docs
Alias of docs, kept for compatibility — the same unified layered reference. Prefer docs.
Module: core · Read-only.
read_element — Read element context
Read one element with its content revision: a paginated outline with JSON Pointer paths by default, exact values with paths, or view=full.
Module: core · Read-only.
edit_element — Edit element content
Apply 1–100 ordered JSON Pointer edits (add · replace · remove) to an AI-layer element; the revision is checked (409 on conflict); returns the new revision.
Module: core
Ledger and analytics
query — Query the ledger
Run ONE read-only SELECT over the workspace ledger and facts (agent_calls, ai_usage, boards, board_cards, sets, project_settings, tasks, task_events, task_labels); 1000 rows, 5 s, ? params; owner only.
Module: core · Read-only.
Links
resolve_url — Resolve an app URL
Turn a pasted vitrinka URL (task, project, board, card page) into the entity it names in any workspace you belong to: kind, workspace, title, canonical url, foreign; 404 if unseen.
Module: core · Read-only.