Skip to content

tool reference

The spirby mcp server gives agents typed access to feedback boards over the Model Context Protocol. Tools are scope-gated — a read key never sees a write tool, even by name.

Eighteen tools total: one self-test (whoami), seven read tools, ten write tools. All schemas use json-schema (draft 2020-12) and are emitted directly from the source-of-truth zod schemas in @spirby/mcp.

toolrequired scopewhat it does
whoamireadReturn the active token’s identity: organization id, scope, and remaining rate-limit budget.
list_boardsreadList every feedback board in the workspace.
search_postsreadSearch posts on a board.
get_postreadFetch a single post by id, including body, status, vote count, and tag ids.
list_changelogreadList a board’s changelog entries.
list_contactsreadList end-user contacts (also called ‘customers’) in the workspace.
get_contactreadFetch a single contact by id with aggregate counts (posts, votes, comments).
list_posts_by_contactreadList feedback posts attached to a contact across every board, newest first.
toolrequired scopewhat it does
create_postread:writeCreate a new feedback post on a board.
update_postread:writeUpdate an existing post’s title, status, body, slug, or contact attribution.
vote_postread:writeCast a vote on a post on behalf of the user who minted this API key.
unvote_postread:writeRetract a vote on a post.
create_commentread:writePost a comment on a feedback post.
publish_changelog_entryread:writePublish a draft changelog entry.
create_contactread:writeCreate a feedback contact.
identify_contactread:writeIdentify or upsert a contact by your system’s user id.
update_contactread:writePartially update a contact.
delete_contactread:writeDelete a contact.
  • All ids are opaque strings (ulids under the hood). Pass them around verbatim.
  • All write tools share the same billing-readonly gate as the rest api: a trial-expired workspace returns ERR_BILLING_READONLY with a hint pointing the user to billing settings.
  • Idempotent writes (vote_post, unvote_post, identify_contact) return the current state without raising, so an agent retry never double-applies.
  • tools/list is filtered server-side by the key’s scope. A read key never sees the write tools, even by name.
  • MCP inputs are snake_case (e.g. external_user_id); the rest api uses camelCase (e.g. externalUserId). Both surfaces validate the same constraints — the docs for each tool list every refine the schema enforces.