Sign in
Docs
0%

Transports

Decisions, part 1 of 2 MCP tools

The 18 tools /mcp offers for Decisions, part 1 of 2, what each needs and an example call.

Your spaces and their RFCs, PRDs, ADRs and studies: read, draft, comment and ask for review. These are 18 tools of the 36 tools of the decisions backend (part 1 of 2; the others are part 2); all MCP tools lists the other backends.

decisions_add_comment

Comment. Comment on a heading of the document, or reply to a comment.

Scopes: mcp:write, decisions:write · changes something

ArgumentTypeWhat it is
anchorstringA heading id: lowercase letters, digits and "-", at most 200; ignored on a reply.
bodystring1 byte to 10 KiB.
document_idstringThe document's id (decisions_list_documents).
parent_idstringThe thread's first comment, for a reply.
quoteobjectA thread on a selected passage: set with anchor naming the heading it falls under; ignored on a reply.
space_idstringThe space's whole id (lab_ and a ULID; decisions_list_spaces names them). May be left out when document_id is an ldoc_ id: the document names its own space.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_add_comment",
    "arguments": {
      "document_id": "<document_id>",
      "space_id": "<space_id>"
    }
  }
}

decisions_ask_question

Ask a person. Ask a person to settle something, in a space: the question (text), what the answer unblocks, optionally the document it is about and whom it is for (asked_of, a subject; empty for the account's owners and admins). To ask for a decision, give two to six options, your recommendation (one of them) and your reasons: the person answers with one tap, and the choice is recorded on the document. It waits on their list until a person answers it; an assistant never answers.

Scopes: mcp:write, decisions:write · changes something

ArgumentTypeWhat it is
asked_ofstring
document_idstringThe document's id (decisions_list_documents).
optionslist of stringA decision request: two to six options, at most 100 characters each; empty for an open question.
reasonsstringWhy; at most 2000 characters.
recommendationstringOne of the options; needs options.
space_idstringThe space's whole id (lab_ and a ULID; decisions_list_spaces names them). May be left out when document_id is an ldoc_ id: the document names its own space.
textstring
unblocksstring
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_ask_question",
    "arguments": {
      "document_id": "<document_id>",
      "space_id": "<space_id>"
    }
  }
}

decisions_create_diagram

Start a diagram. Make a diagram; version 1 is the model given (or an empty one).

Scopes: mcp:write, decisions:write · changes something

ArgumentTypeWhat it is
modelstringThe model as JSON text: an object with version (a positive integer, 1 when absent), nodes (at most 500, each with a string id) and edges (at most 2000, each with source and target naming nodes); other keys are kept as given. At most 1 MiB. Empty is \{"version": 1, "nodes": [], "edges": []\}.
namestring1 to 80 characters.
space_idstringThe space's whole id (lab_ and a ULID, never shortened); decisions_list_spaces names the caller's spaces.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_create_diagram",
    "arguments": {
      "space_id": "<space_id>"
    }
  }
}

decisions_create_document

Start a document. Start a document from a template in a space: its number is the next free one for its kind in the space, its slug comes from the title. Version 1, a draft.

Scopes: mcp:write, decisions:write · changes something

ArgumentTypeWhat it is
account_idstringOptional: the account the space is in. Left out, the space's own account; when given it must be that one, else the call is refused.
child_indexintegerA part's N, 1 to 99 (an import keeps the file's); 0 is the next free one under the parent. Taken: ALREADY_EXISTS.
kindstring"rfc", "study", "prd" or "adr".
numberintegerA top-level document's number, 1 to 9999, kept when it was claimed before the document existed; 0 is the next free one. For the space's managers (owners and admins of its account). Unique per kind across all the account's spaces. Taken: ALREADY_EXISTS. A part takes its parent's number: 0 or the parent's.
outwardbooleanThe scope faces outward (see Document.outward).
parent_idstringMake it a part of this document of the space: a top-level RFC, or a top-level study for a study. Its number is the parent's, its file NNNN.N-slug.md, and the front matter says parent: NNNN-slug.
space_idstringThe space's whole id (lab_ and a ULID, never shortened); decisions_list_spaces names the caller's spaces.
summarystringAt most 1000 characters, on one line.
templatestring"" or "default": the kind's sections; "blank": front matter and the status log only; "findings", for a study only: a template run's sections (question, context, method, findings, recommendation, open questions).
titlestring1 to 200 characters on one line; the slug is made from it.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_create_document",
    "arguments": {
      "space_id": "<space_id>"
    }
  }
}

decisions_create_space

Make a space. Make a Decisions space in an account, where its PRDs, ADRs, RFCs and studies will live, with the default settings: name (1 to 80 characters), optionally a slug (lowercase letters, digits and -, at most 48; empty derives it from the name) and a description (at most 500). An empty account_id is the caller's own; making one needs write rights in that account. The same slug again is refused as already existing, never a second space. The space is made by the person the assistant acts for, and recorded as made through the assistant.

Scopes: mcp:write, decisions:write · changes something · safe to repeat

ArgumentTypeWhat it is
access_floorstringIts access floor; empty for none of its own.
account_idstringThe account; empty is the caller's own.
departmentstringWhich department, when kind is "department".
descriptionstringAt most 500 characters.
kindstring"space" (the default), "department" or "project".
namestring1 to 80 characters.
parent_idstringMake it under this space of the same account; empty: at the top.
slugstringLowercase letters, digits and "-", at most 48; empty derives it from the name.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_create_space",
    "arguments": {}
  }
}

decisions_get_diagram

Read a diagram. One diagram and the model of its current version, or of version.

Scopes: mcp:read, decisions:read · reads only

ArgumentTypeWhat it is
diagram_idstringThe diagram's id (decisions_list_diagrams).
space_idstringThe space's whole id (lab_ and a ULID, never shortened); decisions_list_spaces names the caller's spaces.
svgbooleanAlso draw the version as an SVG document (svg in the response).
versioninteger0 is the current version.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_get_diagram",
    "arguments": {
      "space_id": "<space_id>"
    }
  }
}

decisions_get_document

Read a document. A document's text (one version; 0 is the current) and its findings, with the documents around it: parent, parts, mentions and typed links, each in brief (id, kind, number, title, status) unless related is "full". section reads one heading's text only (its anchor or title; an unknown one is refused with the headings there are, so read the whole text first when unsure). space_id is required; there is no account_id (the space fixes the account). document_id takes an id, "rfc 12.1", "prd-12" or a repository path.

Scopes: mcp:read, decisions:read · reads only

ArgumentTypeWhat it is
diff_fromintegerWith a version (1 or more, older than the one read), the response also carries diff: what changed from that version to the one read.
document_idstringThe document's id (ldoc_…), or what people call it: its kind and number with a part after a dot (prd-12, adr 55, study 13), or its repository path (docs/rfcs/0102.1-slug.md).
relatedstringHow the related documents (parent, parts, mentions, links) come: one of "", "brief" or "full". "" and "full": each in full; "brief", each as its id, kind, number, part, title, status and access only, enough to name it and read it next.
sectionstringOne section only: text is that heading's section (to the next heading of its level), named by its anchor ("open-questions", "proposal-1" for a second one) or its title in any case. Empty: the whole text. An unknown section is refused, naming the headings there are.
space_idstringThe space's whole id (lab_ and a ULID; decisions_list_spaces names them). May be left out when document_id is an ldoc_ id: the document names its own space.
versioninteger0 is the current version.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_get_document",
    "arguments": {
      "document_id": "<document_id>",
      "space_id": "<space_id>"
    }
  }
}

decisions_get_settings

Get a space's settings. A space's settings: approvals needed to decide, redaction rules, and ai_approval, what assistants may approve there (manual: a person approves; auto: assistants may approve the listed kinds). Only a person changes them, in the console.

Scopes: mcp:read, decisions:read · reads only

ArgumentTypeWhat it is
space_idstringThe space's whole id (lab_ and a ULID, never shortened); decisions_list_spaces names the caller's spaces.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_get_settings",
    "arguments": {
      "space_id": "<space_id>"
    }
  }
}

decisions_get_space

Get a space. One space, with its counts: documents, open documents and reviews waiting.

Scopes: mcp:read, decisions:read · reads only

ArgumentTypeWhat it is
space_idstringThe space's whole id (lab_ and a ULID, never shortened); decisions_list_spaces names the caller's spaces.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_get_space",
    "arguments": {
      "space_id": "<space_id>"
    }
  }
}

decisions_get_space_tree

The account's spaces as a tree. Every space of an account as a tree: each parent before the spaces under it, with depth, kind (space, department or project), the department it names, the access floor it falls under and the templates suggested there. An empty account_id is the caller's own.

Scopes: mcp:read, decisions:read · reads only

ArgumentTypeWhat it is
account_idstringThe account; empty is the caller's own.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_get_space_tree",
    "arguments": {}
  }
}

decisions_get_waiting

What waits on me. Everything waiting on the caller across an account's spaces, oldest first: reviews asked of them, documents they are to decide, and open questions asked of them (or of the owners and admins, when they are one), each with what settling it unblocks. Counts per kind. An empty account_id is the caller's own.

Scopes: mcp:read, decisions:read · reads only

ArgumentTypeWhat it is
account_idstringThe account; empty is the caller's own.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_get_waiting",
    "arguments": {}
  }
}

List a document in another space. List a document in another space of the same account as well, for example an SLO in Product beside SRE. It keeps its home space and its own access level; nothing moves.

Scopes: mcp:write, decisions:write · changes something · safe to repeat

ArgumentTypeWhat it is
document_idstringThe document's id (decisions_list_documents).
space_idstringThe document's home space.
target_space_idstringThe space of the same account it is also listed in.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_link_document",
    "arguments": {
      "document_id": "<document_id>",
      "space_id": "<space_id>"
    }
  }
}

Link a coordinator job. Link a coordinator job to a document: job_id (job_ and a ULID) and role: implements (the default) or part_of. Needs the right to write the document. Linking one already linked changes its role. The coordinator's gates read the link; it never links itself.

Scopes: mcp:write, decisions:write · changes something · safe to repeat

ArgumentTypeWhat it is
document_idstringThe document's id, or what people call it ("prd-39").
job_idstringThe coordinator job: "job_" and a ULID.
rolestring"implements" (the default) or "part_of".
space_idstringThe space's whole id (lab_ and a ULID; decisions_list_spaces names them). May be left out when document_id is an ldoc_ id: the document names its own space.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_link_job",
    "arguments": {
      "document_id": "<document_id>",
      "space_id": "<space_id>"
    }
  }
}

Link a pull request. Link a pull request to a document: repo (owner/name) and number, or url (https://github.com/owner/name/pull/N), and role: implements (the default), part_of or related. Link every pull request you open for a document as soon as it is open. Linking one already linked changes its role. Its state is then kept current from GitHub.

Scopes: mcp:write, decisions:write · changes something · safe to repeat

ArgumentTypeWhat it is
document_idstringThe document's id, or what people call it ("prd-39").
numberinteger
repostring"owner/name"; with number, or leave both empty and give url.
rolestring"implements" (the default), "part_of" or "related".
sourcestring"manual" (the default) or "backfill" (a script reading older comments). Kept from the first link.
space_idstringThe space's whole id (lab_ and a ULID; decisions_list_spaces names them). May be left out when document_id is an ldoc_ id: the document names its own space.
urlstringhttps://github.com/owner/name/pull/N, instead of repo and number.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_link_pull_request",
    "arguments": {
      "document_id": "<document_id>",
      "space_id": "<space_id>"
    }
  }
}

decisions_list_comments

List comments. The document's comments, oldest first (a conversation reads down), a reply naming its thread's first comment. 0 means 100, at most 500.

Scopes: mcp:read, decisions:read · reads only

ArgumentTypeWhat it is
document_idstringThe document's id (decisions_list_documents).
page_sizeinteger
page_tokenstringThe next_page_token of the page before.
space_idstringThe space's whole id (lab_ and a ULID; decisions_list_spaces names them). May be left out when document_id is an ldoc_ id: the document names its own space.
statusstring"open", "resolved", or empty for both (by the thread's state).
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_list_comments",
    "arguments": {
      "document_id": "<document_id>",
      "space_id": "<space_id>"
    }
  }
}

decisions_list_diagrams

List diagrams. The space's diagrams, last changed first. 0 means 50, at most 200.

Scopes: mcp:read, decisions:read · reads only

ArgumentTypeWhat it is
page_sizeinteger
page_tokenstringThe next_page_token of the page before.
querystringNarrows to diagrams whose name contains this, any case.
space_idstringThe space's whole id (lab_ and a ULID, never shortened); decisions_list_spaces names the caller's spaces.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_list_diagrams",
    "arguments": {
      "space_id": "<space_id>"
    }
  }
}

decisions_list_documents

List documents. The space's documents (PRDs, ADRs, RFCs and studies), last changed first. 0 means 50, at most 200.

Scopes: mcp:read, decisions:read · reads only

ArgumentTypeWhat it is
account_idstringOptional: the account the space is in. Left out, the space's own account; when given it must be that one, else the call is refused.
compactbooleanEach document as its id, kind, number, part, title, status and access only: a listing to find one by, a fraction of the full one's size.
include_linkedbooleanAlso the documents of other spaces linked into this one; each says linked and keeps its home space in space_id.
minebooleanOnly the caller's: documents they own, write or build, or are asked to review.
page_sizeinteger
page_tokenstringThe next_page_token of the page before.
querystringNarrows to documents whose title, slug or current text contains this, any case.
space_idstringThe space's whole id (lab_ and a ULID, never shortened); decisions_list_spaces names the caller's spaces.
statusstringOne status, or empty for all.
typeslist of string"rfc", "study", "prd", "adr", or empty for every kind.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_list_documents",
    "arguments": {
      "space_id": "<space_id>"
    }
  }
}

decisions_list_jobs

List coordinator jobs. The coordinator jobs linked to a document now, newest link first: job_id, role (implements or part_of), who linked it and through which assistant, and when. document_id is the id or what people call it ("rfc 12", "prd-39"). Needs membership of the space's account or a role on the document; a public document's readers do not see its jobs. Unlinked jobs are left out. Paged: page_size (0 means 50, at most 200), then page_token from next_page_token.

Scopes: mcp:read, decisions:read · reads only

ArgumentTypeWhat it is
document_idstringThe document's id, or what people call it ("prd-39").
page_sizeinteger0 means 50, at most 200.
page_tokenstringThe next_page_token of the page before.
space_idstringThe space's whole id (lab_ and a ULID; decisions_list_spaces names them). May be left out when document_id is an ldoc_ id: the document names its own space.
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "decisions_list_jobs",
    "arguments": {
      "document_id": "<document_id>",
      "space_id": "<space_id>"
    }
  }
}