stablebaseline avatar

Stable Baseline

stablebaseline/mcp

A cloud-hosted MCP server that gives agents full CRUD control over an organizational knowledge base. You get 179 tools across documents, diagrams (Mermaid, BPMM, D2, PlantUML), plans, tasks, and a self-learning knowledge graph. Agents can provision workspaces, invite members, set RBAC permissions, create folders, edit Markdown documents, insert visualizations, and query the knowledge graph for entity relationships. Supports both Bearer token auth and OAuth 2.1 with dynamic client registration. Works over streamable HTTP, so no local process to manage. Useful when you want Claude or Cursor to not just read your company brain but actively build and maintain it end to end, from billing setup through diagram generation.

tools
80
auth
Secret needed
transport
HTTP
last updated
Oct 13, 2026

Install

From registry metadata
$ npx add-mcp https://api.stablebaseline.io/functions/v1/cloud-serve/mcp --name sb --header 'Authorization: Bearer ${API_TOKEN}'

Run in your terminal. add-mcp asks which agents to add it to, then asks for each value it needs. Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http sb https://api.stablebaseline.io/functions/v1/cloud-serve/mcp --header 'Authorization: YOUR_AUTHORIZATION'

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 80 tools

Verified live against the running server on Nov 6, 2026.

searchToolsSearch available tools by keyword or category. Returns matching tool names and descriptions.2 params

Search available tools by keyword or category. Returns matching tool names and descriptions.

Parameters* required
categorystring
Category filter. One of the categories returned in each result's `category` field.one of navigation · folders · documents · diagrams · images · whiteboards
querystring
Natural language description of what you want to do.
listDiagramTypesList supported diagram types (renderers such as default, mermaid, plantuml and d2; 'default' is the platform default renderer). Pass `query` to search by name OR intent (keyword + semantic): e.g. 'circuit diagram', 'wiring harness', 'timing waveform', 'network topology', 'data...5 params

List supported diagram types (renderers such as default, mermaid, plantuml and d2; 'default' is the platform default renderer). Pass `query` to search by name OR intent (keyword + semantic): e.g. 'circuit diagram', 'wiring harness', 'timing waveform', 'network topology', 'data...

Parameters* required
enabledOnlyboolean
fieldsarray
Field projection. Valid fields: type, label, description, whenToUse, dslLanguage, dslInstructions, exampleDsl, enabled, availableOnFree, sortOrder, updatedAt, supportedDiagrams.
limitnumber
offsetnumber
querystring
Keyword or intent, e.g. 'circuit', 'wiring harness', 'timing', 'BPMN process'. Semantic-backed: matches descriptions and diagram family names, not just type names.
getDiagramTypeGuideGet DSL writing instructions and an example for a diagram type (a renderer such as 'default', 'mermaid' or 'plantuml'). Also accepts a diagram family slug or name from supportedDiagrams (e.g. 'bpmn-process'), which resolves to that family's default renderer (see resolvedFrom)....2 params

Get DSL writing instructions and an example for a diagram type (a renderer such as 'default', 'mermaid' or 'plantuml'). Also accepts a diagram family slug or name from supportedDiagrams (e.g. 'bpmn-process'), which resolves to that family's default renderer (see resolvedFrom)....

Parameters* required
fieldsarray
Field projection. Valid fields: type, label, description, whenToUse, dslLanguage, dslInstructions, exampleDsl, enabled, sortOrder, updatedAt.
type*string
A diagram type from listDiagramTypes (e.g. 'default', 'mermaid', 'bpmn'), or a diagram family slug or name (e.g. 'bpmn-process'), which resolves to the family's default renderer.
listArchitectureIconsList and search the full Stable Baseline icon library, including 3,850 library icons. The AWS, Azure, GCP, Development, Essentials and other categories stay intact; library icons join matching categories, with specific Oracle Cloud, Kubernetes, Networking and General categorie...5 params

List and search the full Stable Baseline icon library, including 3,850 library icons. The AWS, Azure, GCP, Development, Essentials and other categories stay intact; library icons join matching categories, with specific Oracle Cloud, Kubernetes, Networking and General categorie...

Parameters* required
categorystring
Filter by category, e.g. AWS, Azure, GCP, Technology, Oracle Cloud, Kubernetes, Networking, General.
fieldsarray
Field projection. Valid fields: id, iconPath (existing relative paths only), iconUrl, iconName, category, categories, sources, iconKey, iconKeys, iconKeyUrl, d2IconPath, subcategory, vendor, descri...
limitnumber
offsetnumber
querystring
Search by icon name, exact iconKey, category, vendor, description or aliases.
searchInfographicTemplatesSearch the 276 infographic templates by meaning. Call this FIRST when building an `infographic` diagram so you pick the right structure for the content. Describe the intent (e.g. 'compare two options', 'show a process timeline', 'pyramid of priorities', 'org hierarchy', 'flow...2 params

Search the 276 infographic templates by meaning. Call this FIRST when building an `infographic` diagram so you pick the right structure for the content. Describe the intent (e.g. 'compare two options', 'show a process timeline', 'pyramid of priorities', 'org hierarchy', 'flow...

Parameters* required
limitnumber
Max templates to return (default 12).
query*string
What the infographic should show (intent/topic), e.g. 'compare pros and cons', 'launch roadmap timeline', 'market share pie'.
getCdmdLanguageGuideGet the CDMD markdown language specification. Call before createDocument if unfamiliar with syntax.

Get the CDMD markdown language specification. Call before createDocument if unfamiliar with syntax.

No parameters. Call it with no arguments.

getCurrentUserReturn the calling user's identity (user_id, display_name, full_name, email, avatar_url). Use this when the user says 'me' / 'mine' / 'I' so you can resolve to their UUID before passing it to tools like updateImprovement(owner_id=…) or filtering by owner. Read-only.

Return the calling user's identity (user_id, display_name, full_name, email, avatar_url). Use this when the user says 'me' / 'mine' / 'I' so you can resolve to their UUID before passing it to tools like updateImprovement(owner_id=…) or filtering by owner. Read-only.

No parameters. Call it with no arguments.

listAssignablePrincipalsServer-side searchable, paginated list of the USERS and TEAMS that can be assigned as the owner of an improvement or task in a project, and the canonical source for resolving a person's user_id when @-mentioning them in a document. Users are the people who may be assigned work...8 params

Server-side searchable, paginated list of the USERS and TEAMS that can be assigned as the owner of an improvement or task in a project, and the canonical source for resolving a person's user_id when @-mentioning them in a document. Users are the people who may be assigned work...

Parameters* required
itemKindstring
Optional: the kind of item the owner is for. With it, users are only the people who may own that kind of item (an improvement: who can open the project's improvements; a task: its plans and its imp...one of improvement · task
kindstring
Filter to one principal kind. Default 'all' returns users first then teams.one of all · user · team
limitnumber
Max results per page (1-100, default 20).
offsetnumber
Pagination offset.
projectId*string
Project to scope assignees to. Required.
qstring
Deprecated alias for `query`, still accepted. Prefer `query` — that is the name every other list tool uses.
querystring
Optional case-insensitive search filter, matched against display_name + email (users) and team name (teams).
workspaceIdstring
Optional and not needed: the project's own workspace and organisation are always used. Still accepted so older callers keep working.
listTeamsList teams in an organisation, with optional search filter and an `includeMembers` flag that returns each team's members in the same call. Supply EITHER organizationId OR workspaceId (the workspace's parent org is resolved automatically). Use this when the user asks about team...7 params

List teams in an organisation, with optional search filter and an `includeMembers` flag that returns each team's members in the same call. Supply EITHER organizationId OR workspaceId (the workspace's parent org is resolved automatically). Use this when the user asks about team...

Parameters* required
includeMembersboolean
When true, each team gets a `members` array (user_id, role, joined_at). Capped at 500 total members across the page. Default false.
limitnumber
Max teams per page (1-200, default 50).
offsetnumber
Pagination offset.
organizationIdstring
Organisation UUID. Either this OR workspaceId is required.
qstring
Deprecated alias for `query`, still accepted. Prefer `query` — that is the name every other list tool uses.
querystring
Optional case-insensitive search on team name/slug.
workspaceIdstring
Workspace UUID. Its parent organisation is resolved automatically.
getTeamGet a single team by ID with profile-enriched member list (display_name, email, avatar_url, role, joined_at). Set `includeMembers=false` to skip the member fan-out and just return team metadata. Read-only.2 params

Get a single team by ID with profile-enriched member list (display_name, email, avatar_url, role, joined_at). Set `includeMembers=false` to skip the member fan-out and just return team metadata. Read-only.

Parameters* required
includeMembersboolean
Include the team's members enriched with user profile info. Default true.
teamId*string
Team UUID.
listOrganisationsList organisations you have access to. Supports query filtering by name/slug.4 params

List organisations you have access to. Supports query filtering by name/slug.

Parameters* required
fieldsarray
Field projection. Valid fields: id, name, slug, subscription_tier, created_at.
limitnumber
offsetnumber
querystring
listWorkspacesList workspaces you have access to. Scope to one organisation with organisationId (a structural filter — use it rather than `query`, which only searches names/slugs). Supports query filtering by name/slug.9 params

List workspaces you have access to. Scope to one organisation with organisationId (a structural filter — use it rather than `query`, which only searches names/slugs). Supports query filtering by name/slug.

Parameters* required
dateFieldstring
Date field to filter. Default: updated_at.
fieldsarray
Field projection. Valid fields: id, name, slug, organization_id, created_at, updated_at.
fromDatestring
ISO 8601 date filter (from).
limitnumber
offsetnumber
organisationIdstring
Return only workspaces in this organisation. Use listOrganisations to find the id. (organizationId is accepted as a spelling alias.)
organizationIdstring
Spelling alias for organisationId.
querystring
toDatestring
ISO 8601 date filter (to).
listProjectsList projects in a workspace. Supports query filtering by project name.8 params

List projects in a workspace. Supports query filtering by project name.

Parameters* required
dateFieldstring
Date field to filter. Default: updated_at.
fieldsarray
Field projection. Valid fields: id, name, description, workspace_id, created_at, updated_at.
fromDatestring
ISO 8601 date filter (from).
limitnumber
offsetnumber
querystring
toDatestring
ISO 8601 date filter (to).
workspaceId*string
listFoldersList folders in a project. Use parentId for nested folders. For full tree, use getProjectHierarchy instead.9 params

List folders in a project. Use parentId for nested folders. For full tree, use getProjectHierarchy instead.

Parameters* required
dateFieldstring
Date field to filter. Default: updated_at.
fieldsarray
Field projection. Valid fields: id, projectId, parentId, name, position, createdAt, updatedAt.
fromDatestring
ISO 8601 date filter (from).
limitnumber
offsetnumber
parentIdstring
projectId*string
querystring
toDatestring
ISO 8601 date filter (to).
createFolderCreate a folder in a project. Supports nesting via parentId.4 params

Create a folder in a project. Supports nesting via parentId.

Parameters* required
name*string
parentIdstring
positionnumber
projectId*string
updateFolderUpdate a folder: rename it, move it or reorder it. `parentId` moves it under another folder of its project. To move the folder WITH EVERYTHING IN IT into another project, in any workspace of the same organisation, give `projectId` (the project it moves to) and, if you like, `p...6 params

Update a folder: rename it, move it or reorder it. `parentId` moves it under another folder of its project. To move the folder WITH EVERYTHING IN IT into another project, in any workspace of the same organisation, give `projectId` (the project it moves to) and, if you like, `p...

Parameters* required
dryRunboolean
Optional. true answers what would move and anything that would refuse, and changes nothing.
folderId*string
namestring
parentIdstring
The folder to move it under: in its own project, or with projectId in that project. Null for the top level.
positionnumber
projectIdstring
Optional. The project to move the folder into, with everything in it: another project, in any workspace of the same organisation.
deleteFolderDelete a folder recursively, including all nested folders and documents.1 params

Delete a folder recursively, including all nested folders and documents.

Parameters* required
folderId*string
reorderFoldersBatch-reorder folders within a parent (or project root) by setting sibling positions. Pass [{folderId, position}, ...] where position is a non-negative integer; usually you renumber siblings sequentially as 0, 1, 2…. To MOVE a folder to a different parent and set its position...1 params

Batch-reorder folders within a parent (or project root) by setting sibling positions. Pass [{folderId, position}, ...] where position is a non-negative integer; usually you renumber siblings sequentially as 0, 1, 2…. To MOVE a folder to a different parent and set its position...

Parameters* required
items*array
List of folder position updates. All folders must belong to the same project.
listDocumentsList AND grep documents in a project, workspace, or folder. `query` does a full-content search across each document's body (not just the title) and returns the matching lines — like grep across your docs. Each returned document includes `contentMatches: [{line, text, context?}...20 params

List AND grep documents in a project, workspace, or folder. `query` does a full-content search across each document's body (not just the title) and returns the matching lines — like grep across your docs. Each returned document includes `contentMatches: [{line, text, context?}...

Parameters* required
caseSensitiveboolean
Case-sensitive matching. Default false.
changedBeforestring
With changedSince given as a date: only what changed before this date (YYYY-MM-DD) or date and time.
changedSincestring
What changed: only what was added or edited from this point, newest change first, each with who changed it and when. A period: today, yesterday, this_week, last_week, this_month, last_month, last_7...
contextLinesnumber
Lines of surrounding context to include with each match (grep -C). 0-5, default 0.
countOnlyboolean
true answers just { count }, how many documents this call would list with every filter applied (limit and offset do not cap it; with query the grep block comes too).
createdBystring
Only the documents this person created: their user id (from listMembers or listAssignablePrincipals), or "me" for you; someone outside this organisation matches nothing.
dateFieldstring
Date field to filter. Default: updated_at.
fieldsarray
Field projection for the document metadata. Valid fields: id, title, friendlyId, friendlyIdNumber, projectId, folderId, createdAt, updatedAt, href. (contentMatches/matchCount are always included wh...
folderIdstring
fromDatestring
ISO 8601 date filter (from).
isRegexboolean
Treat `query` as a JavaScript regular expression (grep -E). Default false (literal substring). Regex search requires a project/workspace/folder scope and scans a bounded window of documents.
limitnumber
maxMatchesPerDocumentnumber
Cap on matching lines returned per document. 1-20, default 5.
offsetnumber
Pagination offset over the MATCHES. When searching, use scanOffset (not this) to reach documents the scan has not covered.
projectIdstring
querystring
Search text. Matched against title, friendlyId AND full document content. Returns the matching lines per document (grep). Case-insensitive unless caseSensitive:true; treated as a regex if isRegex:t...
scanOffsetnumber
Search-only. Where to start the document scan within the scope. One call examines a bounded window; when the response reports truncated:true it also returns nextScanOffset — repeat with scanOffset...
timeZonestring
The IANA time zone the window and its times are in, such as Australia/Sydney. Default: the person's own (the zone their browser last saved), else UTC.
toDatestring
ISO 8601 date filter (to).
workspaceIdstring
getProjectHierarchyGet the complete folder and document tree for a project in one call. Recommended first call for navigation.8 params

Get the complete folder and document tree for a project in one call. Recommended first call for navigation.

Parameters* required
dateFieldstring
Date field to filter. Default: updated_at.
folderIdstring
Start from this folder instead of project root.
fromDatestring
ISO 8601 date filter (from).
includeDocumentsboolean
Include documents. Default: true.
maxDepthnumber
Max nesting depth. Default: 10, max: 20.
projectIdstring
Project ID. Required if folderId not provided.
querystring
Filter by name/title (case-insensitive).
toDatestring
ISO 8601 date filter (to).
getFolderHierarchyGet the folder and document tree. Pass folderId for the subtree under one folder, or projectId for the project's ENTIRE folder tree from the root (no need to reassemble listFolders' flat list by parentId). Alias for getProjectHierarchy.8 params

Get the folder and document tree. Pass folderId for the subtree under one folder, or projectId for the project's ENTIRE folder tree from the root (no need to reassemble listFolders' flat list by parentId). Alias for getProjectHierarchy.

Parameters* required
dateFieldstring
Date field to filter. Default: updated_at.
folderIdstring
The folder ID to start from. Omit and pass projectId to get the project root hierarchy.
fromDatestring
ISO 8601 date filter (from).
includeDocumentsboolean
Include documents. Default: true.
maxDepthnumber
Max nesting depth. Default: 10, max: 20.
projectIdstring
Return the whole project's folder tree from the root. Provide this or folderId.
querystring
Filter by name/title (case-insensitive).
toDatestring
ISO 8601 date filter (to).
getDocumentRead a document's content with line numbers. content.text lines are formatted `NNNNN<TAB>content` (cat -n style); the number+tab prefix is DISPLAY ONLY — never part of the document — so when building editDocument anchor patches, copy only the text AFTER the tab. Reads paginate...11 params

Read a document's content with line numbers. content.text lines are formatted `NNNNN<TAB>content` (cat -n style); the number+tab prefix is DISPLAY ONLY — never part of the document — so when building editDocument anchor patches, copy only the text AFTER the tab. Reads paginate...

Parameters* required
commentsstring
Also return the document's comment threads: open ones, resolved ones or all, the most recently changed first, a page at a time. Each thread says what it is on, where that now sits (place: exact, mo...one of open · resolved · all
commentsCursorstring
With comments: nextCursor from the read before, to go on from there. An answer with more: true has one.
commentsLimitnumber
With comments: how many threads to bring, from 1 to 200. Default 50.
commentsThreadIdstring
With comments: bring this one thread whole. A thread that says commentsTotal holds more comments than a page shows.
contentFieldsarray
Content field projection. Valid fields: offset, limit, totalLines, nextOffset, metadata, text.
documentId*string
The document ID to read. Accepts either the UUID or the friendly id (e.g. DOC-815); friendly ids are resolved within your organisation.
fieldsarray
Field projection. Valid fields: id, title, friendlyId, friendlyIdNumber, projectId, folderId, createdAt, updatedAt, versionTimestamp.
includeDiagramDslboolean
If true, inline each diagram's full DSL (as diagramCode) and its versionTimestamp into the DIAGRAM_OMITTED markers, so you can inspect and then edit a diagram (updateDiagramInDocument with diagramV...
limitnumber
Max lines to return. Default: 200.
offsetnumber
Lines to skip from start. Default: 0.
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
commentOnDocumentComment on a document: start a thread on some of its words, on a table, a diagram or an image, or on the whole page; reply; change your own comment; resolve or reopen a thread; react; assign a thread to someone. Read comments with getDocument (comments). A comment is not part...12 params

Comment on a document: start a thread on some of its words, on a table, a diagram or an image, or on the whole page; reply; change your own comment; resolve or reopen a thread; react; assign a thread to someone. Read comments with getDocument (comments). A comment is not part...

Parameters* required
actionstring
What to do. Default: reply when threadId is given, else add.one of add · reply · edit · resolve · reopen · react
assigneeIdstring
For assign: the person's user id, from listAssignablePrincipals; they must be able to open the document. null assigns it to no one. Done is resolve.
blockobject
For add: comment on a whole block instead of words. The diagram or image id is on its marker in getDocument.
commentIdstring
For edit and react: the comment (commentId in getDocument's comments).
documentIdstring
For add: the document. Accepts its UUID or friendly id (DOC-815).
emojistring
For react: one emoji.
nearstring
For add, with quote: a heading or words before them, when the words stand more than once.
onboolean
For react: false takes your reaction off. Default true.
projectIdstring
For add, optional: narrows a friendly-id lookup to one project.
quotestring
For add: the words to comment on, copied from the document as they stand. Leave out for the whole page. Refused when they are not there.
textstring
For add, reply and edit: the comment, as long as the plan allows (10,000 characters on most). Plain words, with **bold**, *italic*, `code`, [words](https address) and @[Name](user id) if wanted.
threadIdstring
For reply, resolve, reopen and assign: the thread (threadId in getDocument's comments).
deleteDocumentCommentDelete a comment on a document, or a whole thread. Only whoever wrote a comment, or an admin of the document, can delete it; a whole thread can be deleted by an admin, or by whoever started it while nobody else has written in it. A thread goes with its last comment. To close a...2 params

Delete a comment on a document, or a whole thread. Only whoever wrote a comment, or an admin of the document, can delete it; a whole thread can be deleted by an admin, or by whoever started it while nobody else has written in it. A thread goes with its last comment. To close a...

Parameters* required
commentIdstring
One comment (commentId in getDocument's comments).
threadIdstring
A whole thread (threadId in getDocument's comments). Give this or commentId.
createDocumentCreate a document from CDMD markdown (standard Markdown plus SB extensions — call getCdmdLanguageGuide if unfamiliar). The body goes in `cdmd` (`content` is accepted as an alias). A leading `---` YAML frontmatter block is stored and preserved: title/exported_at/generator are m...7 params

Create a document from CDMD markdown (standard Markdown plus SB extensions — call getCdmdLanguageGuide if unfamiliar). The body goes in `cdmd` (`content` is accepted as an alias). A leading `---` YAML frontmatter block is stored and preserved: title/exported_at/generator are m...

Parameters* required
cdmdstring
Document body in CDMD markdown. Alias: content.
changeSummarystring
Version history summary.
contentstring
Alias for cdmd — provide one of the two.
folderIdstring
positionnumber
Sort position within the parent folder (or project root if no folderId). When omitted, the document is appended at the end.
projectId*string
titlestring
editDocumentEdit a document: the PREFERRED tool for small targeted changes. Two patch dialects — do NOT mix them in one call. (1) ANCHOR patches {oldText, newText, before?, after?} — RECOMMENDED: replace an exact snippet of existing text with new text. oldText must match the document byte...10 params

Edit a document: the PREFERRED tool for small targeted changes. Two patch dialects — do NOT mix them in one call. (1) ANCHOR patches {oldText, newText, before?, after?} — RECOMMENDED: replace an exact snippet of existing text with new text. oldText must match the document byte...

Parameters* required
changeSummarystring
Version history summary.
documentId*string
dryRunboolean
If true, apply the patches and RETURN the resulting document text without saving — no version bump, no lock required. Use to preview/verify a patch before committing. Default false.
expectedVersionnumber
Legacy integer version guard, checked in addition to versionTimestamp. Prefer versionTimestamp — this exists for older clients and is optional.
folderIdstring
MOVE the document into this folder (null moves it to the project root). Send it with patches:[] to file the document without touching its content — a folder-only move updates folder_id, creates NO...
patchesarray
Patches to apply. Use EITHER anchor patches OR line patches, not both in the same call. May be empty if only updating title, folderId, or position.
positionnumber
Sort position within the parent folder. Use to reposition a single document; like folderId, a position-only change creates no version. For batch sibling reorder/move, use reorderDocuments.
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
titlestring
New title.
versionTimestampnumber
Optimistic-lock token from getDocument() or any mutating tool's response. Required unless dryRun:true. (Alias accepted: documentVersionTimestamp.)
findAndReplaceTextInDocumentFind and replace EXACT substrings in a document (NOT regex: wildcards and patterns are matched literally). Replaces EVERY occurrence and returns the replacement count; best for renames and repeated phrases. For a single targeted change at a known location, prefer editDocument...7 params

Find and replace EXACT substrings in a document (NOT regex: wildcards and patterns are matched literally). Replaces EVERY occurrence and returns the replacement count; best for renames and repeated phrases. For a single targeted change at a known location, prefer editDocument...

Parameters* required
caseSensitiveboolean
Case-sensitive matching. Default: true.
changeSummarystring
Version history summary.
documentId*string
find*string
Text to search for.
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
replace*string
Replacement text. Empty string to delete occurrences.
versionTimestampnumber
Optional optimistic-lock token from getDocument() or a previous write; validated when provided. (Alias accepted: documentVersionTimestamp.)
getDiagramInDocumentGet a diagram's full details including raw DSL source code. Use diagramId from DIAGRAM_OMITTED markers in getDocument output. Returns diagramCode, type, name, nlDescription, renderStatus/renderError, and versionTimestamp — the diagram's optimistic-lock token for updateDiagramI...2 params

Get a diagram's full details including raw DSL source code. Use diagramId from DIAGRAM_OMITTED markers in getDocument output. Returns diagramCode, type, name, nlDescription, renderStatus/renderError, and versionTimestamp — the diagram's optimistic-lock token for updateDiagramI...

Parameters* required
diagramId*string
Diagram ID from DIAGRAM_OMITTED markers.
fieldsarray
Field projection. Valid fields: diagramId, documentId, type, name, diagramCode, nlDescription, colorPlan, renderStatus, renderError, createdAt, updatedAt, versionTimestamp.
insertDiagramInDocumentInsert a new diagram into a document. Call listDiagramTypes to find your type, then getDiagramTypeGuide for DSL syntax before writing diagramCode. The diagramCode is COMPILE-CHECKED BY RENDERING at write time: broken DSL is rejected with the renderer's error (fix and retry), a...18 params

Insert a new diagram into a document. Call listDiagramTypes to find your type, then getDiagramTypeGuide for DSL syntax before writing diagramCode. The diagramCode is COMPILE-CHECKED BY RENDERING at write time: broken DSL is rejected with the renderer's error (fix and retry), a...

Parameters* required
afterLinenumber
Insert after this line, counting the SAME line numbers getDocument prints (1-based; frontmatter is not counted, and every diagram/image marker counts as exactly one line). 0 inserts at the very beg...
alignstring
Alignment.one of left · center · right
applyBrandThemeboolean
Brand theming is ON BY DEFAULT: the document's effective BRAND KIT (colours only — typefaces are never injected) is baked into the diagram DSL before it is validated, rendered and stored, so the di...
brandKitIdstring
Optional brand kit UUID (see listBrandKits) to theme with instead of the cascade default. Must belong to your organisation.
captionstring
Caption below the diagram.
colorPlanobject
BPMN only. Colour plan: { byElementId: { ElementId: SwatchName } }.
diagramCode*string
Diagram DSL code. Call getDiagramTypeGuide for syntax. For 'default', provide MDP JSON with stable IDs and omit every entity x/y for automatic layout; fully positioned manual diagrams are also supp...
documentId*string
documentVersionTimestampnumber
Optimistic-lock token: the document's versionTimestamp from getDocument() or any mutating tool's response. (Alias accepted: versionTimestamp.)
imageBackgroundstring
Background for the returned png/jpeg (e.g. '#ffffff' or 'transparent').
imageFormatstring
Image format when returnImage:true (default png).one of png · jpeg · svg
imageScalenumber
Raster resolution 1x/2x/3x when returnImage:true (default 2).one of 1 · 2 · 3
nlDescriptionstring
Extended description of the diagram (2-4 sentences).
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
prompt*string
Short description of what the diagram shows (1-2 sentences).
returnImageboolean
If true, also render the inserted diagram and return it as an image inline (one-call insert-and-get-image). Defaults false.
tableDataobject
Vega-Lite charts only (type vegalite): fill the chart's data from a database table instead of a file. The question runs as you, now, and its answer becomes the spec's data.values, keyed by the fiel...
type*string
Diagram type, meaning the renderer (e.g. default, mermaid, plantuml, bpmn, d2; 'default' is the platform default renderer). For a diagram family such as a BPMN process, an ERD or a flowchart, use t...
updateDiagramInDocumentUpdate a diagram's code, description, or properties. Call getDiagramTypeGuide for DSL syntax. New diagramCode is COMPILE-CHECKED BY RENDERING at write time — broken DSL is rejected with the renderer's error — and a valid change is re-rendered + re-thumbnailed immediately (resp...12 params

Update a diagram's code, description, or properties. Call getDiagramTypeGuide for DSL syntax. New diagramCode is COMPILE-CHECKED BY RENDERING at write time — broken DSL is rejected with the renderer's error — and a valid change is re-rendered + re-thumbnailed immediately (resp...

Parameters* required
alignstring
Alignment.one of left · center · right
applyBrandThemeboolean
Brand theming is ON BY DEFAULT when diagramCode is provided: the document's effective BRAND KIT is baked into the new DSL before it is validated, rendered and stored. Set false to keep the library'...
brandKitIdstring
Optional brand kit UUID (see listBrandKits) to theme with instead of the cascade default. Must belong to your organisation.
captionstring
New caption.
colorPlanobject
BPMN only. Updated colour plan. Set to null to remove.
diagramCodestring
New diagram DSL source code. REQUIRED to change what the diagram visually renders. Call getDiagramTypeGuide for syntax. Must provide the COMPLETE updated DSL, not just the changed parts. For 'defau...
diagramId*string
Diagram ID from DIAGRAM_OMITTED markers.
diagramVersionTimestampnumber
Diagram-level optimistic lock: versionTimestamp of THIS diagram (from getDiagramInDocument, getDocument with includeDiagramDsl:true, or a previous write's response). Preferred: locks only this diag...
documentVersionTimestampnumber
Document-level optimistic lock: versionTimestamp from getDocument(). Locks the whole document. Provide this OR diagramVersionTimestamp (at least one is required).
nlDescriptionstring
New extended description (metadata only — does NOT change the rendered diagram).
promptstring
New short description (metadata only — does NOT change the rendered diagram).
tableDataobject
Vega-Lite charts only (type vegalite): fill the chart's data from a database table instead of a file. The question runs as you, now, and its answer becomes the spec's data.values, keyed by the fiel...
deleteDiagramInDocumentDelete a diagram: removes the database record AND every reference to it in the document body — the current marker format plus legacy forms (markers without an embedded diagramId, and old plain-text `[Diagram: name]` placeholders). The response's removedFromBody says whether a...2 params

Delete a diagram: removes the database record AND every reference to it in the document body — the current marker format plus legacy forms (markers without an embedded diagramId, and old plain-text `[Diagram: name]` placeholders). The response's removedFromBody says whether a...

Parameters* required
diagramId*string
Diagram ID from DIAGRAM_OMITTED markers.
versionTimestampnumber
Optional document optimistic-lock token; validated when provided. (Alias accepted: documentVersionTimestamp.)
deleteDocumentDelete a document.2 params

Delete a document.

Parameters* required
documentId*string
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Ignored when documentId is a UUID.
getWhiteboardGuideGet the Stable Baseline whiteboarding guide (Markdown): when to use stencils vs architecture icons vs code/BPMN diagrams vs plain shapes vs real images vs frames/presentations, how to lay out and verify a board, and how to edit a large board safely (patch by id, never replace)...

Get the Stable Baseline whiteboarding guide (Markdown): when to use stencils vs architecture icons vs code/BPMN diagrams vs plain shapes vs real images vs frames/presentations, how to lay out and verify a board, and how to edit a large board safely (patch by id, never replace)...

No parameters. Call it with no arguments.

autoDesignWhiteboardAuto-design a complete, visually polished whiteboard from a natural-language goal using the PREMIUM multi-agent pipeline (the same one the in-app assistant uses): it browses the stencil/icon library, composes the WHOLE board, renders it and reviews the picture — far better tha...14 params

Auto-design a complete, visually polished whiteboard from a natural-language goal using the PREMIUM multi-agent pipeline (the same one the in-app assistant uses): it browses the stencil/icon library, composes the WHOLE board, renders it and reviews the picture — far better tha...

Parameters* required
brandKitIdstring
Optional brand kit id (from listBrandKits) to theme a branded-executive deck. If omitted, the org's built-in default is used. Create one from just a logo (or a .pptx/.docx) via createBrandKit.
changeDesignboolean
Optional. True when the person asks to change a design already on the board (its look or its content) rather than draw a new one: the goal is then the change, in their own words, and the design is...
confirmboolean
Set true ONLY after the user has approved the quoted cost, and send quoteToken with it. Leave unset/false on the first call to receive the quote: the cost, the balance and a quoteToken.
designIdstring
Optional, with changeDesign or undoChange. The design to change, as a started design's result names it (designId). Omit it for the newest design on the board.
designProfilestring
Optional. 'standard' (default) = the general multi-agent design. 'agentic' = an AI-chat-style agentic slide composer that drives the whiteboard tools and self-corrects from renders, composing ONE p...one of standard · branded-executive · illustrated · image · agentic · agentic-deck
documentIdstring
Optional. An existing whiteboard to design into: the standard design is drawn beside what it already holds (a flowchart, mind map, kanban board and the other kinds drawn in a frame of their own) or...
goal*string
The board to build, in plain language. With changeDesign: the change the person asked for, in their own words (what it costs and how it looks are read from these words).
projectIdstring
The project to create the whiteboard in, when no documentId is given.
quoteTokenstring
The quoteToken returned by the call without confirm. Required with confirm: true. It works once, within 10 minutes, and only for the exact request it quoted; a changed request gets a fresh quote an...
replaceExistingboolean
Optional. True only when the person asks for what is on the board to be cleared first. For a flowchart, process, user flow, decision tree, swimlane, architecture overview, sequence, mind map, org c...
sourceTranscriptobject
Design the board from a meeting transcript (exactly one of documentId or text). When set, the board is built as a 'meeting map' (topics, decisions, actions) from the transcript instead of from the...
titlestring
Optional board title. If omitted, a clear title is derived from the goal (the board is never left 'Untitled'). When designing into an existing 'Untitled' board, the derived/explicit title replaces...
undoChangeboolean
Optional. True, with confirm: true and documentId, to put a design back as it was before its last change (designId, or the newest changed design on that board). Costs nothing, needs no quoteToken a...
undoClearboolean
Optional. True, with confirm: true and documentId, to bring back what the newest design on that board cleared, where it was; the design moves beside it. Costs nothing, needs no quoteToken and start...
designComponentDesign ONE reusable, on-brand SLIDE COMPONENT and add it to the org's component library so every future branded deck (autoDesignWhiteboard designProfile:'branded-executive') can use it. This is the self-improving design loop: an agent AUTHORS the component as a declarative tem...12 params

Design ONE reusable, on-brand SLIDE COMPONENT and add it to the org's component library so every future branded deck (autoDesignWhiteboard designProfile:'branded-executive') can use it. This is the self-improving design loop: an agent AUTHORS the component as a declarative tem...

Parameters* required
boxColsnumber
Optional width in grid columns (2-12, default 4).
boxRowsnumber
Optional height in grid rows (2-12, default 5).
brandKitIdstring
Optional brand kit id (from listBrandKits) to theme the component. If omitted, the organisation's effective brand is used.
categorystring
Optional catalogue category (e.g. 'data', 'narrative', 'comparison').
description*string
What the component IS, WHEN to use it, and what it should LOOK like (the richer the better — this drives both the designer and the critic).
forceboolean
Redesign even if a component with this key already exists (default false = reuse).
key*string
The component key, lowercase dotted, e.g. 'kpi.delta'. This is how decks reference it; reused if it already exists.
projectId*string
Project to create the small preview board in (where the render iterations are shown).
referenceImageUrlstring
Optional URL of a reference image the component should match; the critic compares the render to it.
sampleSlots*object
Example slot content to render with, e.g. { value: '47%', label: 'Revenue growth', delta: '+12 pts' }. The slot keys become the component's editable fields.
tagsarray
Optional search tags.
title*string
A short human title, e.g. 'KPI with delta arrow'.
editWhiteboardImageRegionMask-edit (inpaint) one region of an image element on a whiteboard. Given the target image element id and a paint MASK (a PNG where WHITE marks the area to regenerate and BLACK is kept), it regenerates only the masked region using the prompt and replaces the image IN PLACE (sa...5 params

Mask-edit (inpaint) one region of an image element on a whiteboard. Given the target image element id and a paint MASK (a PNG where WHITE marks the area to regenerate and BLACK is kept), it regenerates only the masked region using the prompt and replaces the image IN PLACE (sa...

Parameters* required
documentId*string
The whiteboard document that holds the image element.
elementId*string
The id of the image element on the board to edit (from getWhiteboard includeElements=true).
maskBase64*string
A PNG mask (base64, with or without a data: prefix) the same shape as the image. WHITE pixels are regenerated; BLACK pixels are preserved.
prompt*string
What to put in the masked area, in plain language (e.g. 'replace the car with a red bicycle').
strengthnumber
Optional 0..1: how far the regenerated area may diverge from the original. The editing model may balance this from the prompt instead, so leave it unset unless you need it.
designDeckInWhiteboardCreate or refine a slide deck INSIDE an existing whiteboard by conversing with the AI design agent. Send a brief for a NEW deck, a change to an EXISTING one, or an answer to the agent's question. The agent builds a polished, on-brand deck and places it on the board; if the bri...14 params

Create or refine a slide deck INSIDE an existing whiteboard by conversing with the AI design agent. Send a brief for a NEW deck, a change to an EXISTING one, or an answer to the agent's question. The agent builds a polished, on-brand deck and places it on the board; if the bri...

Parameters* required
advancedDeckBuildingboolean
Optional, OFF by default. Build the deck with ADVANCED DECK BUILDING: instead of one composer pass, the deck is redrafted and reviewed over several rounds by a panel of design, brand, accessibility...
advancedDeckBuildingDepthnumber
Optional. How many redraft-and-review rounds advanced deck building may run: 1 to 3, default 3. Each round is a full redraft plus four reviews, adds roughly 5 minutes, and costs 61 credits (depth 1...
attachmentsarray
Optional reference images for THIS turn (up to 8; images only). The agent lifts palette, layout, and tone from them (it does not pixel-copy). Non-image attachments are ignored.
brandKitIdstring
Optional brand kit id (from listBrandKits) to theme the deck. If omitted, the organisation's effective brand is used.
confirmboolean
Set true ONLY after the user has approved the quoted cost, and send quoteToken with it. Leave unset/false on the first call of a turn to receive the quote: the cost (52 for each 30 slides built, 36...
deckIdstring
Optional. An existing deck to continue designing (usually you pass sessionId instead; when both are given the session's deck wins).
documentId*string
The whiteboard the deck lives in. REQUIRED: a deck cannot exist without a whiteboard, and this is that whiteboard's id. If you do not already have a whiteboard id, ASK THE USER which whiteboard to...
imageCountnumber
Deprecated and ignored. Still accepted so existing callers do not break; passing it changes nothing.
kindstring
Which kind of design. 'deck' (default) = the premium on-brand HTML deck (conversational, build + edit); 'illustration' and 'design' are conversational variants. 'express' = the native, deterministi...one of deck · illustration · design · express
message*string
This turn's message in plain language: the design brief on the first turn, an edit instruction later, or the user's ANSWER to a clarifying question the agent asked. On a follow-up turn, pass this t...
quoteTokenstring
The quoteToken returned by this turn's call without confirm. Required with confirm: true. It works once, within 10 minutes, and only for the exact turn it quoted; a changed turn gets a fresh quote...
sessionIdstring
The design conversation to continue, as returned by an earlier designDeckInWhiteboard call. Pass it together with message to answer a question, make an edit, or send a follow-up. Omit on the very f...
slideCountnumber
The number of slides to build — a hard requirement: the deck is built with exactly this many slides. SET THIS whenever the user states or implies a count, EXACT OR APPROXIMATE: '12 slides' → 12, 'a...
titlestring
Optional title. If omitted, a clear one is derived from the brief.
designIllustrationInWhiteboardCreate or refine a standalone ILLUSTRATION INSIDE an existing whiteboard by conversing with the AI design agent. This is the illustration sibling of designDeckInWhiteboard: same conversation, same follow-up flow, but it makes ONE on-brand illustration placed on the board (not...9 params

Create or refine a standalone ILLUSTRATION INSIDE an existing whiteboard by conversing with the AI design agent. This is the illustration sibling of designDeckInWhiteboard: same conversation, same follow-up flow, but it makes ONE on-brand illustration placed on the board (not...

Parameters* required
attachmentsarray
Optional reference images for THIS turn (up to 8; images only). The agent lifts palette, layout, and tone from them (it does not pixel-copy). Non-image attachments are ignored.
brandKitIdstring
Optional brand kit id (from listBrandKits) to colour-condition the illustration. If omitted, the organisation's effective brand is used.
confirmboolean
Set true ONLY after the user has approved the quoted cost, and send quoteToken with it. Leave unset/false on the first call of a turn to receive the quote: the cost (52 for each 30 slides built, 36...
deckIdstring
Optional. An existing illustration to continue refining (usually you pass sessionId instead; when both are given the session's illustration wins). The id is called deckId because illustrations and...
documentId*string
The whiteboard the illustration lives in. REQUIRED: an illustration cannot exist without a whiteboard, and this is that whiteboard's id. If you do not already have a whiteboard id, ASK THE USER whi...
message*string
This turn's message in plain language: the illustration brief on the first turn, a change instruction later, or the user's ANSWER to a clarifying question the agent asked. On a follow-up turn, pass...
quoteTokenstring
The quoteToken returned by this turn's call without confirm. Required with confirm: true. It works once, within 10 minutes, and only for the exact turn it quoted; a changed turn gets a fresh quote...
sessionIdstring
The design conversation to continue, as returned by an earlier designIllustrationInWhiteboard call. Pass it together with message to answer a question, make a change, or send a follow-up. Omit on t...
titlestring
Optional title. If omitted, a clear one is derived from the brief.
getDeckReplyInWhiteboardGet the design agent's reply after calling designDeckInWhiteboard OR designIllustrationInWhiteboard: the status (thinking/building/ready) and EITHER the finished result (a deck's slide count + preview, or the placed illustration) OR a clarifying question to answer (call the SA...2 params

Get the design agent's reply after calling designDeckInWhiteboard OR designIllustrationInWhiteboard: the status (thinking/building/ready) and EITHER the finished result (a deck's slide count + preview, or the placed illustration) OR a clarifying question to answer (call the SA...

Parameters* required
deckId*string
The deck or illustration to poll, as returned by designDeckInWhiteboard or designIllustrationInWhiteboard.
documentId*string
The whiteboard that hosts the deck or illustration (it lives inside the board). REQUIRED.
exportFromWhiteboardExport from a whiteboard: a finished design (a deck) as an editable PowerPoint (PPTX), a PDF or PNG images, or the whiteboard canvas itself as a PowerPoint. LARGE EXPORTS FINISH IN THE BACKGROUND: if the export takes longer than one tool call can wait, this returns status:'exp...5 params

Export from a whiteboard: a finished design (a deck) as an editable PowerPoint (PPTX), a PDF or PNG images, or the whiteboard canvas itself as a PowerPoint. LARGE EXPORTS FINISH IN THE BACKGROUND: if the export takes longer than one tool call can wait, this returns status:'exp...

Parameters* required
brandKitIdstring
Optional brand kit id (reserved for future per-export theming; the design is already branded, so this is usually unnecessary).
designIdstring
The design to export (the deck id), as returned by designDeckInWhiteboard. Required for kind 'deck'; not used for kind 'canvas'.
documentId*string
The whiteboard that hosts the design, or (kind 'canvas') the whiteboard to export.
formatstring
Output format. 'pptx' (default) = editable PowerPoint; 'pdf' = vector PDF; 'png' = one image per slide. kind 'canvas' exports 'pptx' only. HTML is not available.one of pptx · pdf · png
kindstring
What to export. 'deck' (default) = a finished deck that lives on the board (needs designId). 'canvas' = the whiteboard itself, its frames as slides, as PowerPoint.one of deck · canvas
startMeetingScribeInvite the Stable Baseline Meeting Scribe bot to a LIVE meeting (Zoom, Google Meet, Microsoft Teams, or Webex) so it paints a live, editable whiteboard of the conversation as it happens: sticky notes and topic clusters, an agenda that ticks itself off, and decisions and action...7 params

Invite the Stable Baseline Meeting Scribe bot to a LIVE meeting (Zoom, Google Meet, Microsoft Teams, or Webex) so it paints a live, editable whiteboard of the conversation as it happens: sticky notes and topic clusters, an agenda that ticks itself off, and decisions and action...

Parameters* required
agendaarray
Optional agenda pre-drawn on the board as a left rail; each item gets a status sticker (pending, active, done) as the conversation reaches it. Omit to let the rail build itself from the topics that...
confirmboolean
Set true ONLY after the user has approved the quoted cost. Leave unset/false on the first call to receive the quote plus balance.
documentId*string
The whiteboard the scribe paints into. REQUIRED: a meeting scribe always paints an existing board. If you do not have a whiteboard id, ask the user which whiteboard to use; never create one automat...
guidedobject
The guided part, only with meetingType 'guided': what the guidance guides from and who sees it. Checked on the server: the template must be available to the board's organisation, every item of the...
meetingTypestring
Optional. 'standard' (the default): the live board only. 'guided': the live board plus private guidance, which needs the guided part.one of standard · guided
meetingUrl*string
The meeting link to join: a Zoom, Google Meet, Microsoft Teams, or Webex URL (https only). Any other host is rejected.
settingsobject
Optional per-meeting settings: { language (BCP-47, e.g. 'en'), sttProvider (how speech is transcribed: omit for the default transcription, or 'captions' to use the meeting's own captions), presentM...
getMeetingScribeStatusGet a meeting scribe's status after startMeetingScribe: the session state (joining, in the waiting room, live in the call, paused, ending, ended, or failed), the live activity feed of what the scribe has painted, and the board it is painting. Give it the sessionId returned by...1 params

Get a meeting scribe's status after startMeetingScribe: the session state (joining, in the waiting room, live in the call, paused, ending, ended, or failed), the live activity feed of what the scribe has painted, and the board it is painting. Give it the sessionId returned by...

Parameters* required
sessionId*string
The meeting scribe session to poll, as returned by startMeetingScribe.
stopMeetingScribeStop a running meeting scribe: the bot leaves the meeting and the board is finalised (tidy pass plus a summary frame). Give it the sessionId returned by startMeetingScribe. Billing stops at the current block; the user can also stop the scribe simply by removing the bot from th...1 params

Stop a running meeting scribe: the bot leaves the meeting and the board is finalised (tidy pass plus a summary frame). Give it the sessionId returned by startMeetingScribe. Billing stops at the current block; the user can also stop the scribe simply by removing the bot from th...

Parameters* required
sessionId*string
The meeting scribe session to stop, as returned by startMeetingScribe.
createWhiteboardCreate a whiteboard: an infinite freeform canvas. A whiteboard is a hidden document (it won't appear in listDocuments) that hosts a single freeform canvas, and opens in the immersive whiteboard editor in the app. Returns documentId + diagramId. Author shapes afterwards with ad...3 params

Create a whiteboard: an infinite freeform canvas. A whiteboard is a hidden document (it won't appear in listDocuments) that hosts a single freeform canvas, and opens in the immersive whiteboard editor in the app. Returns documentId + diagramId. Author shapes afterwards with ad...

Parameters* required
folderIdstring
Optional folder to file the whiteboard under.
projectId*string
title*string
REQUIRED. A clear, descriptive board name (e.g. 'Q3 GTM plan'). Programmatic boards must be titled — blank/'Untitled' titles are rejected.
listWhiteboardsList AND grep the whiteboards in a project (hidden whiteboard-kind documents). `query` searches the title and friendlyId (substring by default; set isRegex:true for a regular expression, caseSensitive:true for exact case). This is the tool to find a board by name — listDocumen...10 params

List AND grep the whiteboards in a project (hidden whiteboard-kind documents). `query` searches the title and friendlyId (substring by default; set isRegex:true for a regular expression, caseSensitive:true for exact case). This is the tool to find a board by name — listDocumen...

Parameters* required
caseSensitiveboolean
Match case exactly. Default false.
changedBeforestring
With changedSince given as a date: only what changed before this date (YYYY-MM-DD) or date and time.
changedSincestring
What changed: only what was added or edited from this point, newest change first, each with who changed it and when. A period: today, yesterday, this_week, last_week, this_month, last_month, last_7...
isRegexboolean
Treat `query` as a regular expression.
limitnumber
With changedSince: boards per answer (default 30, at most 100).
offsetnumber
With changedSince: how many to skip (nextOffset from the last answer).
projectIdstring
querystring
Grep across title and friendlyId. Substring by default; a regular expression when isRegex is true.
timeZonestring
The IANA time zone the window and its times are in, such as Australia/Sydney. Default: the person's own (the zone their browser last saved), else UTC.
workspaceIdstring
With changedSince and no projectId: only what changed in this workspace. Neither: your whole organisation.
getWhiteboardRead a whiteboard: its metadata plus a summary of the canvas (element count, element types, and text labels on the board). Pass includeElements=true to also return the full Excalidraw scene ({elements, appState, files}) — needed if you intend to modify it and send it back via...3 params

Read a whiteboard: its metadata plus a summary of the canvas (element count, element types, and text labels on the board). Pass includeElements=true to also return the full Excalidraw scene ({elements, appState, files}) — needed if you intend to modify it and send it back via...

Parameters* required
documentId*string
Accepts either the UUID or the friendly id (e.g. WBD-12); friendly ids are resolved within your organisation.
includeElementsboolean
When true, returns the full Excalidraw scene so it can be modified and written back.
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
updateWhiteboardSceneEdit elements on a whiteboard's canvas WITHOUT dropping the rest of the scene. A board may hold many diagrams/elements, so prefer surgical edits: mode='patch' (DEFAULT) shallow-merges each incoming object into the existing element with the same `id` (send just {id, backgroundC...9 params

Edit elements on a whiteboard's canvas WITHOUT dropping the rest of the scene. A board may hold many diagrams/elements, so prefer surgical edits: mode='patch' (DEFAULT) shallow-merges each incoming object into the existing element with the same `id` (send just {id, backgroundC...

Parameters* required
appStateobject
Optional Excalidraw appState fields to merge (e.g. viewBackgroundColor).
confirmReplaceboolean
Safety acknowledgement for mode 'replace' ONLY. A replace that would DELETE ANY existing element not present in your `elements` is rejected unless this is true. Leave it unset and use mode:'patch'...
deleteIdsarray
Element ids to remove from the scene.
documentId*string
elementsarray
Elements to write. For mode 'patch', each may be a partial { id, ...changedFields } merged into the matching element by id; full Excalidraw elements for 'replace'/'append' (or new ids in 'patch').
filesobject
Optional Excalidraw BinaryFiles map (for embedded images), merged in.
modestring
How to apply your `elements`. patch (DEFAULT — use this for ANY partial edit): merges each item into the element with the same id and leaves everything else untouched, like find-and-replace by id;...one of patch · append · replace
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
versionTimestampnumber
Optional optimistic-locking token from getWhiteboard. Only used for mode 'replace': if the board changed since you read it, the replace is rejected so you don't overwrite a collaborator's newer edi...
addWhiteboardElementsAuthor shapes onto a whiteboard from high-level specs (you do NOT need the full Excalidraw element schema). Appends to the canvas. PLACEMENT ON AN EXISTING BOARD (critical): NEVER guess x/y onto a board that already has content — guessed coordinates land ON TOP of existing sha...5 params

Author shapes onto a whiteboard from high-level specs (you do NOT need the full Excalidraw element schema). Appends to the canvas. PLACEMENT ON AN EXISTING BOARD (critical): NEVER guess x/y onto a board that already has content — guessed coordinates land ON TOP of existing sha...

Parameters* required
arrangeobject
Optional. Lay out what this call adds the way the board's Arrange does, so you never work out x/y for a connected drawing (a flowchart, an org chart, a process, a decision tree, a web of relationsh...
documentId*string
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
rerouteConnectorsboolean
Optional. Arrows and lines bound to a shape at BOTH ends (start.id and end.id) are always routed around the other shapes on the board unless you give them points. true: ignore the points you gave f...
shapes*array
Non-empty array of shape specs to append. Prefer stencils / sticky notes / architecture icons over raw rectangles wherever a standard form fits (see the `type` enum below and the tool description).
duplicateWhiteboardElementsCopy-paste existing whiteboard elements — the MCP equivalent of selecting a group and pressing Ctrl/Cmd+D. Clones the given elements (plus their group peers + bound text/labels) with FRESH ids, offsets the copy by dx/dy, and by default groups it into ONE new unit so it moves t...7 params

Copy-paste existing whiteboard elements — the MCP equivalent of selecting a group and pressing Ctrl/Cmd+D. Clones the given elements (plus their group peers + bound text/labels) with FRESH ids, offsets the copy by dx/dy, and by default groups it into ONE new unit so it moves t...

Parameters* required
documentId*string
The whiteboard's documentId.
dxnumber
Horizontal offset for the copy (default 40). Use the element width + a gap to place copies side by side.
dynumber
Vertical offset for the copy (default 40).
groupboolean
Group the copy into one new unit so it moves/duplicates together (default true).
groupIdstring
Copy EVERY element in this group as one unit — e.g. a placed stencil's `groupId` returned by addWhiteboardElements.
idsarray
Element ids to copy. Each id's full group + any bound text are auto-included. Use this and/or groupId.
includeGroupPeersboolean
Auto-include the full group of any id you pass (default true).
insertWhiteboardImageInsert a real IMAGE (photo, screenshot, logo, picture) into a whiteboard — the storage-backed equivalent of insertImageInDocument. Provide the image as imageUrl (fetched and re-hosted), imageBase64, or imageBinary; for large files call createImageUploadSession(documentId) firs...14 params

Insert a real IMAGE (photo, screenshot, logo, picture) into a whiteboard — the storage-backed equivalent of insertImageInDocument. Provide the image as imageUrl (fetched and re-hosted), imageBase64, or imageBinary; for large files call createImageUploadSession(documentId) firs...

Parameters* required
alignstring
Horizontal alignment relative to existing content (placed below it). Ignored if x/y are provided.one of left · center · right
captionstring
Optional caption shown as a text label grouped beneath the image.
customDataobject
Arbitrary Excalidraw customData stored on the element (e.g. { deckId } so a board image resolves back to its source deck). Merged with any builder-set customData.
documentId*string
The whiteboard's documentId.
fileNamestring
Optional original filename (for storage + type hinting).
heightnumber
Display height in px. Derived from width at 4:3 if omitted.
imageBase64string
Base64-encoded image bytes (a data: URL prefix is allowed). Best for small images.
imageBinaryarray
Raw image bytes as an array of 0-255 values (alternative to imageBase64).
imageUrlstring
URL to fetch the image from, or an assetUrl returned by createImageUploadSession.
lockedboolean
Lock the placed image so it cannot be moved, resized, or deleted by hand (e.g. a deck-owned framed slide image that changes only via the deck conversation). Defaults to false.
nlDescriptionstring
Optional plain-language description of the image, stored on the element for accessibility and so agents reading the board later know what it depicts.
widthnumber
Display width in px (resize). Defaults to ~360.
xnumber
Top-left x on the canvas. Omit to auto-place.
ynumber
Top-left y on the canvas. Omit to auto-place.
insertWhiteboardDiagramInsert (or re-render in place) a real DIAGRAM (BPMN, Diagrams-as-Code / any DSL: mermaid, d2, plantuml, graphviz, …) on a whiteboard as an editable SB diagram element. Provide documentId, diagramType (call listDiagramTypes / getDiagramTypeGuide), and source (the DSL). The diag...13 params

Insert (or re-render in place) a real DIAGRAM (BPMN, Diagrams-as-Code / any DSL: mermaid, d2, plantuml, graphviz, …) on a whiteboard as an editable SB diagram element. Provide documentId, diagramType (call listDiagramTypes / getDiagramTypeGuide), and source (the DSL). The diag...

Parameters* required
alignstring
Horizontal alignment relative to existing content (placed below it). Ignored if x/y given.one of left · center · right
applyBrandThemeboolean
Brand theming is ON BY DEFAULT: the board's effective BRAND KIT (colours only — typefaces are never injected) is baked into the diagram before it is rendered and its editable source stored (cascade...
brandKitIdstring
Optional brand kit UUID (see listBrandKits) to theme with instead of the cascade default. Must belong to your organisation.
captionstring
Optional caption shown beneath the diagram.
diagramType*string
Diagram language, e.g. 'default', 'bpmn', 'mermaid', 'd2', 'plantuml', 'graphviz'. For a diagram family, use its defaultRenderer from listDiagramTypes.
documentId*string
The whiteboard's documentId.
fitstring
When 'contain' AND both width and height are given, treat width/height as a BOUNDING BOX: the diagram is scaled to its natural aspect ratio to fit inside the box (never upscaled past 1.5x natural)...one of contain
heightnumber
Display height in px (defaults from width + aspect).
source*string
The diagram DSL / code. For 'default', provide MDP JSON with stable IDs and omit entity x/y for automatic layout; fully positioned manual sources remain valid; icons must be exact iconKey values fr...
updateElementIdstring
Element id of an EXISTING embedded diagram to re-render and replace in place (keeps the element id + board position). Omit for a fresh insert. If the id is not on the board, a new element is create...
widthnumber
Display width in px (aspect ratio preserved). Auto-size caps at 480px; an explicit width is honoured up to 1200px.
xnumber
Top-left x on the canvas. Omit to auto-place (or to keep the existing position when updateElementId is given).
ynumber
Top-left y on the canvas. Omit to auto-place (or to keep the existing position when updateElementId is given).
traceImageTurn a raster image into hand-drawn freedraw strokes on a whiteboard, deterministically. Pass an image (imageUrl OR imageBase64) plus a style; the server fetches and vectorises it server-side and draws the strokes, so you do NOT emit any coordinates yourself (LLMs are poor at...10 params

Turn a raster image into hand-drawn freedraw strokes on a whiteboard, deterministically. Pass an image (imageUrl OR imageBase64) plus a style; the server fetches and vectorises it server-side and draws the strokes, so you do NOT emit any coordinates yourself (LLMs are poor at...

Parameters* required
documentId*string
The whiteboard's documentId.
imageBase64string
Base64-encoded image bytes (a data: URL prefix is allowed). Use instead of imageUrl.
imageUrlstring
URL to fetch the image from (http/https; private and metadata hosts are blocked).
maxColorsnumber
Palette size 2-16 (defaults by style: 'sketch' 3, 'color' 8, 'poster' 12).
maxStrokesnumber
Cap on the number of strokes, 20-1200 (default 600). Lower = simpler and faster.
mimeTypestring
Optional image MIME type hint (e.g. 'image/png'); auto-detected otherwise.
stylestring
Vectorisation style. 'sketch' = clean line art (default), 'color' = more colours, 'poster' = posterised.one of sketch · color · poster
widthnumber
Target display width in px (default 520); the drawing scales to fit, aspect preserved.
xnumber
Top-left x on the canvas. Omit to auto-place to the right of existing content.
ynumber
Top-left y on the canvas. Omit to auto-place.
dataToTableRender tabular data as an aligned grid of labelled cells on a whiteboard, deterministically. Pass rows (an array of arrays) OR data (an array of objects), with optional headers; the server lays out evenly-spaced cells so you do NOT place each cell by hand. Use this to turn dat...9 params

Render tabular data as an aligned grid of labelled cells on a whiteboard, deterministically. Pass rows (an array of arrays) OR data (an array of objects), with optional headers; the server lays out evenly-spaced cells so you do NOT place each cell by hand. Use this to turn dat...

Parameters* required
cellHeightnumber
Cell height in px, 28-200 (default 40).
cellWidthnumber
Cell width in px, 60-400 (default 160).
dataarray
Alternative to rows: an array of objects; columns come from headers, or the first object's keys.
documentId*string
The whiteboard's documentId.
headersarray
Optional column headers (rendered as a styled header row). For data, also selects and orders the columns.
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
rowsarray
Rows as arrays of cell strings. If headers is omitted, the first row is treated as the header row.
xnumber
Top-left x on the canvas. Omit to auto-place below existing content.
ynumber
Top-left y on the canvas. Omit to auto-place.
listWhiteboardStencilsSearch the built-in library of structural whiteboard stencils — ready-made hand-drawn graphics: flowchart/UML/ER/BPMN symbols, scrum columns, org-chart nodes, gantt, lo-fi/UX wireframe widgets (buttons, forms, tables, alerts, navs), charts, device frames, stick figures. A sten...4 params

Search the built-in library of structural whiteboard stencils — ready-made hand-drawn graphics: flowchart/UML/ER/BPMN symbols, scrum columns, org-chart nodes, gantt, lo-fi/UX wireframe widgets (buttons, forms, tables, alerts, navs), charts, device frames, stick figures. A sten...

Parameters* required
categorystring
Filter by category: 'Notes & Planning', 'Diagramming', 'UI & Wireframing', 'Data & Charts', 'People & Fun'.
limitnumber
Max results (default 60, max 200).
packstring
Restrict to one pack, e.g. 'Flowchart', 'BPMN', 'UML & ER', 'Scrum Board', 'Lo-Fi Wireframes', 'Org Chart'.
querystring
Free-text search across name + pack + category (e.g. 'decision', 'database table', 'phone frame', 'actor', 'kanban column').
getWhiteboardImageRender a whiteboard to a raster IMAGE so you can SEE it and confirm your edits look right, then iterate — like taking a screenshot. Returns the rendered board as a viewable image attached to the result (always raster: a JPEG light variant and/or a PNG dark variant; there is no...6 params

Render a whiteboard to a raster IMAGE so you can SEE it and confirm your edits look right, then iterate — like taking a screenshot. Returns the rendered board as a viewable image attached to the result (always raster: a JPEG light variant and/or a PNG dark variant; there is no...

Parameters* required
backgroundstring
Canvas background colour (default white), e.g. '#ffffff' or 'transparent'.
documentId*string
The whiteboard's documentId. Accepts either the UUID or the friendly id (e.g. WBD-12); friendly ids are resolved within your organisation.
elementIdsarray
Render only these element ids (plus their bound labels + group peers) instead of the whole board.
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
regionobject
Capture only this scene-coordinate window instead of the whole board — e.g. the user's current viewport, or the neighbourhood you are editing. The output is cropped to the exact rectangle.
themestring
Which theme variant(s) to render. 'light' is fastest and right for inspecting your own edits; 'both' (default) also produces the dark variant used by the chat widget.one of light · dark · both
deleteWhiteboardDelete a whiteboard (the host document and its canvas).2 params

Delete a whiteboard (the host document and its canvas).

Parameters* required
documentId*string
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Ignored when documentId is a UUID.
renderDiagramGenerate a diagram from its DSL/code and get the IMAGE back — WITHOUT inserting it into any document or whiteboard. For acting as a pure diagram generator. Provide diagramType (e.g. 'default', 'mermaid', 'd2', 'plantuml', 'graphviz', 'bpmn', 'vegalite'; call listDiagramTypes f...9 params

Generate a diagram from its DSL/code and get the IMAGE back — WITHOUT inserting it into any document or whiteboard. For acting as a pure diagram generator. Provide diagramType (e.g. 'default', 'mermaid', 'd2', 'plantuml', 'graphviz', 'bpmn', 'vegalite'; call listDiagramTypes f...

Parameters* required
applyBrandThemeboolean
Brand theming is ON BY DEFAULT: the effective BRAND KIT (colours only — typefaces are never injected) is baked into the diagram before rendering (cascade: brandKitId override → project default → wo...
backgroundstring
Background for png/jpeg, e.g. '#ffffff' or 'transparent' (png only).
brandKitIdstring
Optional brand kit UUID (see listBrandKits) to theme with instead of the cascade default. Must belong to your organisation.
diagramType*string
Diagram language, e.g. 'default', 'mermaid', 'd2', 'plantuml', 'graphviz', 'bpmn', 'vegalite'. For a diagram family, use its defaultRenderer from listDiagramTypes.
formatstring
png (default) or jpeg = raster; svg is scalable. A platform default diagram's SVG contains a browser foreignObject scene, so use PNG/JPEG where foreignObject SVG is unsupported.one of png · jpeg · svg
projectIdstring
Optional project UUID used to resolve the project → workspace → org brand-kit cascade. Without it the built-in Stable Baseline brand themes the render.
scalenumber
Raster resolution multiplier 1x/2x/3x (default 2). Ignored for svg.one of 1 · 2 · 3
source*string
The diagram DSL / code to render. For 'default', provide MDP JSON with stable IDs and omit entity x/y for automatic layout; fully positioned manual sources remain valid; icons must be exact iconKey...
tableDataobject
Vega-Lite charts only (type vegalite): fill the chart's data from a database table instead of a file. The question runs as you, now, and its answer becomes the spec's data.values, keyed by the fiel...
getDiagramImageRender a diagram that ALREADY exists in a document to an IMAGE (svg/png/jpeg @1x/2x/3x) and return it — a temporary imageUrl available for 1 hour plus, for png/jpeg, the image inline so you can see it, and title/url citing the document the diagram lives in. Pass the diagramId...4 params

Render a diagram that ALREADY exists in a document to an IMAGE (svg/png/jpeg @1x/2x/3x) and return it — a temporary imageUrl available for 1 hour plus, for png/jpeg, the image inline so you can see it, and title/url citing the document the diagram lives in. Pass the diagramId...

Parameters* required
backgroundstring
Background for png/jpeg, e.g. '#ffffff' or 'transparent' (png only).
diagramId*string
The diagram's id (from getDocument markers / getDiagramInDocument).
formatstring
png (default) or jpeg = raster; svg is scalable. A platform default diagram's SVG contains a browser foreignObject scene, so use PNG/JPEG where foreignObject SVG is unsupported.one of png · jpeg · svg
scalenumber
Raster resolution multiplier 1x/2x/3x (default 2). Ignored for svg.one of 1 · 2 · 3
rebuildPlatformCatalogEmbeddingsMaintenance (requires write). Refreshes the search index over every platform catalogue (MCP tools, whiteboard stencils, architecture icons, infographic templates, whiteboard design components and design skills), so that search by meaning in searchTools, listWhiteboardStencils,...1 params

Maintenance (requires write). Refreshes the search index over every platform catalogue (MCP tools, whiteboard stencils, architecture icons, infographic templates, whiteboard design components and design skills), so that search by meaning in searchTools, listWhiteboardStencils,...

Parameters* required
typesarray
Which catalogues to sync. Defaults to all six (tool, stencil, icon, infographic_template, whiteboard_component, skill).
reorderDocumentsMOVE documents and boards between folders, or into another project of the organisation, and reorder them: the batch filing tool. Pass items [{documentId, folderId?, position?}, ...]. Inside a project give at least one of folderId or position per item: `folderId` MOVES that doc...3 params

MOVE documents and boards between folders, or into another project of the organisation, and reorder them: the batch filing tool. Pass items [{documentId, folderId?, position?}, ...]. Inside a project give at least one of folderId or position per item: `folderId` MOVES that doc...

Parameters* required
dryRunboolean
Optional. true answers what would move and anything that would refuse, and changes nothing.
items*array
Documents and boards to file. Without projectId they must all belong to one project; with projectId they may come from any projects of the organisation.
projectIdstring
Optional. The project to move the documents and boards into: another project, in any workspace of the same organisation.
listDocumentVersionsList version history for a document. Returns timestamps, creator, change summary, and content. HOW IT CHANGED: give changedSince (a period such as this_week, or a date) for the versions saved in that time, each with who saved it by name and when in words; add compare:true for...13 params

List version history for a document. Returns timestamps, creator, change summary, and content. HOW IT CHANGED: give changedSince (a period such as this_week, or a date) for the versions saved in that time, each with who saved it by name and when in words; add compare:true for...

Parameters* required
changedBeforestring
With changedSince given as a date: only what changed before this date (YYYY-MM-DD) or date and time.
changedSincestring
What changed: only what was added or edited from this point, newest change first, each with who changed it and when. A period: today, yesterday, this_week, last_week, this_month, last_month, last_7...
compareboolean
Also return the difference: the lines added and removed, each with the heading it sits under.
documentId*string
Accepts either the UUID or the friendly id (e.g. DOC-815); friendly ids are resolved within your organisation.
fieldsarray
Field projection. Valid fields: id, documentId, versionNumber, title, contentMarkdown, changeSummary, createdBy, createdAt.
fromDatestring
ISO 8601 date filter (from).
limitnumber
Max versions. Default: 50, max: 200.
offsetnumber
Pagination offset.
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
sortAscendingboolean
Sort oldest first. Default: false.
timeZonestring
The IANA time zone the window and its times are in, such as Australia/Sydney. Default: the person's own (the zone their browser last saved), else UTC.
toDatestring
ISO 8601 date filter (to).
versionNumbernumber
Filter to a specific version.
getImageInDocumentGet image details including a fresh link to the image that works for one hour (call again for a new one; never save the link into content). Use storagePath from IMAGE_OMITTED markers in getDocument output.2 params

Get image details including a fresh link to the image that works for one hour (call again for a new one; never save the link into content). Use storagePath from IMAGE_OMITTED markers in getDocument output.

Parameters* required
documentId*string
storagePath*string
Storage path from IMAGE_OMITTED marker.
createImageUploadSessionCreate a PUT upload URL for a document image (max 10MB). Use the returned assetUrl with insertImageInDocument. For a dashboard picture (PNG, JPEG, GIF or WebP) pass databaseId and dashboard instead of documentId, PUT the bytes, then use its pictureId in saveDatabaseDashboard.7 params

Create a PUT upload URL for a document image (max 10MB). Use the returned assetUrl with insertImageInDocument. For a dashboard picture (PNG, JPEG, GIF or WebP) pass databaseId and dashboard instead of documentId, PUT the bytes, then use its pictureId in saveDatabaseDashboard.

Parameters* required
dashboardstring
For a dashboard picture: the dashboard's id or name.
databaseIdstring
For a dashboard picture: the database's id or name.
documentIdstring
fileName*string
Original filename (e.g. screenshot.png).
mimeType*string
Image MIME type (e.g. image/png).
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
sha256string
Optional SHA-256 hex digest.
insertImageInDocumentInsert an image into a document (max 10MB). Provide imageBase64, imageBinary, or imageUrl. For large files, call createImageUploadSession first then use the returned assetUrl. nlDescription AND caption are both REQUIRED, not optional polish: they are what makes the image finda...14 params

Insert an image into a document (max 10MB). Provide imageBase64, imageBinary, or imageUrl. For large files, call createImageUploadSession first then use the returned assetUrl. nlDescription AND caption are both REQUIRED, not optional polish: they are what makes the image finda...

Parameters* required
afterLinenumber
Insert after this line, counting the SAME line numbers getDocument prints (1-based; frontmatter is not counted, and every diagram/image marker counts as exactly one line). 0 inserts at the very beg...
alignstring
Alignment: 'left', 'center' or 'right'. Default: 'left'.one of left · center · right
altstring
Alt text. Defaults to caption.
caption*string
Caption below the image.
documentId*string
documentVersionTimestampnumber
Optimistic-lock token: the document's versionTimestamp from getDocument() or any mutating tool's response. (Alias accepted: versionTimestamp.)
fileNamestring
Original filename.
heightnumber
Height in pixels.
imageBase64string
Base64-encoded image data. Mutually exclusive with imageBinary/imageUrl.
imageBinaryarray
Raw binary as byte array. Mutually exclusive with imageBase64/imageUrl.
imageUrlstring
URL to fetch image from, or assetUrl from createImageUploadSession.
nlDescription*string
Description of image content for semantic search.
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
widthnumber
Width in pixels.
updateImageInDocumentUpdate image metadata (alt, caption, nlDescription, dimensions, alignment) — metadata only; to change the picture itself, delete it and insert the new one. Requires the document's versionTimestamp (from getDocument or any mutating tool's response) for optimistic locking.8 params

Update image metadata (alt, caption, nlDescription, dimensions, alignment) — metadata only; to change the picture itself, delete it and insert the new one. Requires the document's versionTimestamp (from getDocument or any mutating tool's response) for optimistic locking.

Parameters* required
alignstring
Alignment.one of left · center · right
altstring
New alt text.
captionstring
New caption.
documentVersionTimestampnumber
Optimistic-lock token: the document's versionTimestamp from getDocument() or any mutating tool's response. (Alias accepted: versionTimestamp.)
heightnumber
Height in pixels.
imageId*string
Image ID from IMAGE_OMITTED markers.
nlDescriptionstring
New image description.
widthnumber
Width in pixels.
deleteImageInDocumentDelete an image: removes the stored file, the database record, AND the image from the document body — both the IMAGE marker in the markdown and the image node in the document's rich-text content, so the picture stops appearing on every read. Deleting an image the document stil...2 params

Delete an image: removes the stored file, the database record, AND the image from the document body — both the IMAGE marker in the markdown and the image node in the document's rich-text content, so the picture stops appearing on every read. Deleting an image the document stil...

Parameters* required
imageId*string
Image ID from IMAGE_OMITTED markers.
versionTimestampnumber
Optional document optimistic-lock token; validated when provided. (Alias accepted: documentVersionTimestamp.)
createVegaDataUploadSessionCreate a PUT upload URL for a Vega/Vega-Lite data file. Use returned assetUrl in your Vega spec.4 params

Create a PUT upload URL for a Vega/Vega-Lite data file. Use returned assetUrl in your Vega spec.

Parameters* required
contentTypestring
MIME type override. Auto-detected from extension if omitted.
documentId*string
fileName*string
Original filename (e.g. sales-data.csv). Extension auto-detects content type.
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
deleteVegaDataFileDelete a data file attachment from a document.3 params

Delete a data file attachment from a document.

Parameters* required
attachmentId*string
Attachment ID to delete.
documentId*string
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
createDocumentIngestSessionStep 1 of file ingest. Mint a single-use PUT upload URL for a large file (PDF, DOCX, plain text, or markdown — up to 150 MB). Returns { sessionId, uploadUrl, expiresAt, maxBytes }. Upload the raw bytes to uploadUrl with PUT, then call createDocumentFromUpload({ sessionId, proj...5 params

Step 1 of file ingest. Mint a single-use PUT upload URL for a large file (PDF, DOCX, plain text, or markdown — up to 150 MB). Returns { sessionId, uploadUrl, expiresAt, maxBytes }. Upload the raw bytes to uploadUrl with PUT, then call createDocumentFromUpload({ sessionId, proj...

Parameters* required
fileName*string
Original filename, e.g. report.pdf.
folderIdstring
Optional folder to drop the document into. Must belong to projectId.
mimeType*string
One of: application/pdf, application/vnd.openxmlformats-officedocument.wordprocessingml.document (DOCX), text/plain, text/markdown.
projectId*string
Target project for the resulting document.
sizeBytesnumber
Optional file size hint in bytes. Rejected up-front if it exceeds 150 MB.
createDocumentFromUploadStep 2 of file ingest. After the file is uploaded via the PUT URL from createDocumentIngestSession, call this to start the async conversion. Returns { jobId, documentId } immediately — the document is created as a draft and progressively populated as the worker processes the f...5 params

Step 2 of file ingest. After the file is uploaded via the PUT URL from createDocumentIngestSession, call this to start the async conversion. Returns { jobId, documentId } immediately — the document is created as a draft and progressively populated as the worker processes the f...

Parameters* required
changeSummarystring
Optional changelog message for the version snapshot taken when the ingest finalises.
folderIdstring
Optional folder. Must belong to projectId.
projectId*string
Must match the project the session was created for.
sessionId*string
From createDocumentIngestSession.
titlestring
Optional document title. Defaults to the upload's filename without extension.
getDocumentIngestJobRead the current status of an ingest job. Returns { status, stage, processedImages, totalImages, documentId, error?, lastHeartbeatAt }. Stages: pending → downloaded → extracted → draft_saved → images_processing → finalized → cleaned_up. Status: queued, running, succeeded, fail...1 params

Read the current status of an ingest job. Returns { status, stage, processedImages, totalImages, documentId, error?, lastHeartbeatAt }. Stages: pending → downloaded → extracted → draft_saved → images_processing → finalized → cleaned_up. Status: queued, running, succeeded, fail...

Parameters* required
jobId*string
exportDocumentExport a Stable Baseline document as a PDF or an editable Word document (docx), styled with the organisation's brand, or with an export template when templateId is given. Give it the documentId (a UUID, or a friendly id such as DOC-123) and the format: 'pdf' (default) or 'docx...3 params

Export a Stable Baseline document as a PDF or an editable Word document (docx), styled with the organisation's brand, or with an export template when templateId is given. Give it the documentId (a UUID, or a friendly id such as DOC-123) and the format: 'pdf' (default) or 'docx...

Parameters* required
documentId*string
The document to export: its id, or its friendly id (for example DOC-123). A whiteboard is not a document here: use exportFromWhiteboard.
formatstring
Output format. 'pdf' (default) = a PDF with a table of contents; 'docx' = an editable Word document.one of pdf · docx
templateIdstring
Optional. An export template of the organisation (set up in the app's export templates) to use instead of the brand styling: its cover, document control page and styles are applied, with the title,...
listImprovementsList AND grep improvements in a project. `query` searches the title, friendlyId and problem statement, not just the title (substring by default; set isRegex:true for a regular expression, caseSensitive:true for exact case). Supports filtering by status, type, priority, and by...29 params

List AND grep improvements in a project. `query` searches the title, friendlyId and problem statement, not just the title (substring by default; set isRegex:true for a regular expression, caseSensitive:true for exact case). Supports filtering by status, type, priority, and by...

Parameters* required
agentReadyboolean
Filter by agent readiness.
caseSensitiveboolean
Case-sensitive matching. Default false.
categoryIdstring
Filter by category ID.
changedBeforestring
With changedSince given as a date: only what changed before this date (YYYY-MM-DD) or date and time.
changedSincestring
What changed: only what was added or edited from this point, newest change first, each with who changed it and when. A period: today, yesterday, this_week, last_week, this_month, last_month, last_7...
complianceOnlyboolean
Only compliance-linked improvements.
countOnlyboolean
true answers just { count }, how many items this call would list with every filter applied (limit and offset do not cap it; not with complianceOnly, scanRunId or frameworkKey).
createdBystring
Only the items this person created: their user id (from listMembers or listAssignablePrincipals), or "me" for you; someone outside this organisation matches nothing.
fieldsarray
Field projection. Valid fields: id, friendly_id, friendlyId, title, type, status, priority, source, category_id, categoryId, parent_item_id, parentItemId, parentItem, linkedRecords, created_at, cre...
frameworkKeystring
Filter by framework (e.g. soc2, iso27001).
hasLinkedRecordsboolean
true: only items that link at least one database record; false: only items that link none.
isRegexboolean
Treat query as a regular expression (grep -E), e.g. "ACME-\d+". Default false (literal substring).
limitnumber
Max results (1-100, default 50).
linkedRecordIdsarray
Only items that link any of these database rows (rows' ids).
linkedTableIdsarray
Only items that link a row of any of these database tables (tables' ids). With linkedRecordIds, either one matches.
offsetnumber
Pagination offset.
ownerIdstring
Only the items this person owns: their user id (from listMembers or listAssignablePrincipals), or "me" for you; someone outside this organisation matches nothing.
parentItemIdstring
Only the children of this item in the work hierarchy (its UUID or friendly id, such as IMP-12), whatever plan or phase they are in. "none" lists only the items with no parent. The work hierarchy is...
prioritystring
Filter: low, medium, high, critical.
projectIdstring

+9 more parameters. See the server's own documentation for the full schema.

getImprovementGet full details for an improvement item including evidence, activity log, compliance context, and the `checklist` array (each item: id, text, due_date, completed_at, plus server-stamped attribution). Returns versionTimestamp: pass it to updateImprovement for optimistic lockin...2 params

Get full details for an improvement item including evidence, activity log, compliance context, and the `checklist` array (each item: id, text, due_date, completed_at, plus server-stamped attribution). Returns versionTimestamp: pass it to updateImprovement for optimistic lockin...

Parameters* required
improvementId*string
Accepts either the UUID or the friendly id (e.g. IMP-42); friendly ids are resolved within your organisation.
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
createImprovementCreate an improvement item in a project. Requires projectId and title. Auto-assigns friendly ID. Accepts every field updateImprovement accepts, so an item can be created complete in one call rather than create-then-update. Pass parentItemId to create it under its epic or story...46 params

Create an improvement item in a project. Requires projectId and title. Auto-assigns friendly ID. Accepts every field updateImprovement accepts, so an item can be created complete in one call rather than create-then-update. Pass parentItemId to create it under its epic or story...

Parameters* required
acceptance_criteriaarray
Acceptance criteria — ordered list of pass/fail statements that define "done" for this item. Each row is `{ id, text }` with server-stamped `updated_at / updated_by / updated_by_credential_name`. R...
agent_briefstring
agent_complexitystring
low, medium, high, very_high.
agent_confidencenumber
0.00 to 1.00.
agent_missing_infoarray
agent_readyboolean
agent_recommended_actionstring
business_impactstring
category_idstring
Category ID.
checklistarray
Tick-box checklist shown above acceptance_criteria. The full array REPLACES the stored list on update, and array order = display order — to edit, fetch via getTask/getImprovement, modify, and send...
constraintsarray
descriptionstring
desired_outcomestring
detailsobject
The type's own fields. On update they MERGE key by key: keys you leave out are kept and null removes one. epic: success_measures. user_story: as_a, i_want, so_that (read as 'As a <as_a>, I want <i_...
end_datestring
YYYY-MM-DD.
fieldsarray
Optional. Answer with only these fields instead of the whole improvement, for example ["id", "versionTimestamp"]. Any of the improvement's own fields (snake_case or camelCase) or of the keys around...
impacted_componentsarray
impacted_diagramsarray
Array of {id, name}.
impacted_documentsarray
Array of {id, title}.
impacted_repositoriesarray

+26 more parameters. See the server's own documentation for the full schema.

updateImprovementUpdate an improvement, or many in one call (or a task: tasks share this row, but prefer the symmetric updateTask alias when working from getTask). Supports the full field set including `checklist` (tick-boxes with due dates + completion attribution), `acceptance_criteria` (obj...58 params

Update an improvement, or many in one call (or a task: tasks share this row, but prefer the symmetric updateTask alias when working from getTask). Supports the full field set including `checklist` (tick-boxes with due dates + completion attribution), `acceptance_criteria` (obj...

Parameters* required
acceptance_criteriaarray
Acceptance criteria — ordered list of pass/fail statements that define "done" for this item. Each row is `{ id, text }` with server-stamped `updated_at / updated_by / updated_by_credential_name`. R...
agent_briefstring
agent_complexitystring
agent_confidencenumber
agent_missing_infoarray
agent_readyboolean
agent_recommended_actionstring
blocked_commentstring
Required when status=blocked.
business_impactstring
category_idstring
Category ID. Null to unassign.
checklistarray
Tick-box checklist shown above acceptance_criteria. The full array REPLACES the stored list on update, and array order = display order — to edit, fetch via getTask/getImprovement, modify, and send...
completion_commentstring
Required when status=done.
constraintsarray
descriptionstring
desired_outcomestring
detailsobject
The type's own fields. On update they MERGE key by key: keys you leave out are kept and null removes one. epic: success_measures. user_story: as_a, i_want, so_that (read as 'As a <as_a>, I want <i_...
docs_updatedboolean
end_datestring
YYYY-MM-DD.
fieldsarray
Optional. Answer with only these fields instead of the whole improvement, for example ["id", "versionTimestamp"]. Any of the improvement's own fields (snake_case or camelCase) or of the keys around...
follow_up_neededboolean

+38 more parameters. See the server's own documentation for the full schema.

deleteImprovementDelete an improvement and all associated evidence and activity.2 params

Delete an improvement and all associated evidence and activity.

Parameters* required
improvementId*string
projectIdstring
Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous — TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when t...
listImprovementCategoriesList improvement categories for a project. Returns tree and flat list.1 params

List improvement categories for a project. Returns tree and flat list.

Parameters* required
projectId*string
createImprovementCategoryCreate an improvement category or sub-category. Max two levels.8 params

Create an improvement category or sub-category. Max two levels.

Parameters* required
colorstring
Colour code.
descriptionstring
iconstring
Lucide icon name.
name*string
parentIdstring
Parent category ID for sub-categories.
projectId*string
slugstring
URL-friendly slug. Auto-generated if omitted.
sortOrdernumber
Sort order. Default: 0.
updateImprovementCategoryUpdate an improvement category. Cannot modify system categories.7 params

Update an improvement category. Cannot modify system categories.

Parameters* required
categoryId*string
colorstring
descriptionstring
iconstring
namestring
slugstring
sortOrdernumber

Sponsors

Readme

Stable Baseline

Stable Baseline MCP Server

The simplest, most complete, end-to-end agent-managed company brain.

Website · Sign up free · Docs · Tool catalogue · llms.txt


View the full README on GitHub

Details

Repository
github.com/stablebaseline/mcp
Website
stablebaseline.io
Categories
Sales & Marketing, AI & LLM Tools, Documents & Knowledge
Transport
HTTP
Auth
Required
Registry
MCP registry, active
Resources
11
Prompts
11
Tools verified
Nov 6, 2026

Related Sales & Marketing MCP servers

View all
1kinglions avatarUI Design to Codekinglions/ui-design-to-code-mcpDesign-to-code artifact pipeline for UI screenshots, Figma node data, and visual review.0stars
2openjobs-3168f222 avatarOpenJoblive.alpic.openjobs-3168f222/openjobsFind jobs in your own words and apply on the company website — no detours.0stars
3malkreide avatarRegister Mcpmalkreide/register-mcpZefix commercial register with a company-UID join to amtsblattportal.ch (SHAB + cantonal gazettes)0stars
4matetools avatarMcp Servermatetools/mcp-server35 utility tools for AI agents — mate.tools API. Hash, regex, SEO, random, DNS, SSL, JWT.0stars
5mcp-dir avatarHotmartmcp-dir/hotmart-mcpHotmart digital-products platform, sales (history, summary, commissions), subscriptions (list, cance0stars
6mcp-dir avatarKiwifymcp-dir/kiwify-mcpKiwify digital-products platform, sales (list, detail), subscriptions (list, cancel), products and a0stars