
Stable Baseline
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 toolsVerified 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.
categorystringnavigation · folders · documents · diagrams · images · whiteboardsquerystringlistDiagramTypesList 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...
enabledOnlybooleanfieldsarraylimitnumberoffsetnumberquerystringgetDiagramTypeGuideGet 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)....
fieldsarraytype*stringlistArchitectureIconsList 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...
categorystringfieldsarraylimitnumberoffsetnumberquerystringsearchInfographicTemplatesSearch 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...
limitnumberquery*stringgetCdmdLanguageGuideGet 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...
itemKindstringimprovement · taskkindstringall · user · teamlimitnumberoffsetnumberprojectId*stringqstringquerystringworkspaceIdstringlistTeamsList 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...
includeMembersbooleanlimitnumberoffsetnumberorganizationIdstringqstringquerystringworkspaceIdstringgetTeamGet 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.
includeMembersbooleanteamId*stringlistOrganisationsList 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.
fieldsarraylimitnumberoffsetnumberquerystringlistWorkspacesList 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.
dateFieldstringfieldsarrayfromDatestringlimitnumberoffsetnumberorganisationIdstringorganizationIdstringquerystringtoDatestringlistProjectsList projects in a workspace. Supports query filtering by project name.8 params
List projects in a workspace. Supports query filtering by project name.
dateFieldstringfieldsarrayfromDatestringlimitnumberoffsetnumberquerystringtoDatestringworkspaceId*stringlistFoldersList 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.
dateFieldstringfieldsarrayfromDatestringlimitnumberoffsetnumberparentIdstringprojectId*stringquerystringtoDatestringcreateFolderCreate a folder in a project. Supports nesting via parentId.4 params
Create a folder in a project. Supports nesting via parentId.
name*stringparentIdstringpositionnumberprojectId*stringupdateFolderUpdate 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...
dryRunbooleanfolderId*stringnamestringparentIdstringpositionnumberprojectIdstringdeleteFolderDelete a folder recursively, including all nested folders and documents.1 params
Delete a folder recursively, including all nested folders and documents.
folderId*stringreorderFoldersBatch-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...
items*arraylistDocumentsList 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?}...
caseSensitivebooleanchangedBeforestringchangedSincestringcontextLinesnumbercountOnlybooleancreatedBystringdateFieldstringfieldsarrayfolderIdstringfromDatestringisRegexbooleanlimitnumbermaxMatchesPerDocumentnumberoffsetnumberprojectIdstringquerystringscanOffsetnumbertimeZonestringtoDatestringworkspaceIdstringgetProjectHierarchyGet 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.
dateFieldstringfolderIdstringfromDatestringincludeDocumentsbooleanmaxDepthnumberprojectIdstringquerystringtoDatestringgetFolderHierarchyGet 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.
dateFieldstringfolderIdstringfromDatestringincludeDocumentsbooleanmaxDepthnumberprojectIdstringquerystringtoDatestringgetDocumentRead 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...
commentsstringopen · resolved · allcommentsCursorstringcommentsLimitnumbercommentsThreadIdstringcontentFieldsarraydocumentId*stringfieldsarrayincludeDiagramDslbooleanlimitnumberoffsetnumberprojectIdstringcommentOnDocumentComment 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...
actionstringadd · reply · edit · resolve · reopen · reactassigneeIdstringblockobjectcommentIdstringdocumentIdstringemojistringnearstringonbooleanprojectIdstringquotestringtextstringthreadIdstringdeleteDocumentCommentDelete 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...
commentIdstringthreadIdstringcreateDocumentCreate 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...
cdmdstringchangeSummarystringcontentstringfolderIdstringpositionnumberprojectId*stringtitlestringeditDocumentEdit 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...
changeSummarystringdocumentId*stringdryRunbooleanexpectedVersionnumberfolderIdstringpatchesarraypositionnumberprojectIdstringtitlestringversionTimestampnumberfindAndReplaceTextInDocumentFind 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...
caseSensitivebooleanchangeSummarystringdocumentId*stringfind*stringprojectIdstringreplace*stringversionTimestampnumbergetDiagramInDocumentGet 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...
diagramId*stringfieldsarrayinsertDiagramInDocumentInsert 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...
afterLinenumberalignstringleft · center · rightapplyBrandThemebooleanbrandKitIdstringcaptionstringcolorPlanobjectdiagramCode*stringdocumentId*stringdocumentVersionTimestampnumberimageBackgroundstringimageFormatstringpng · jpeg · svgimageScalenumber1 · 2 · 3nlDescriptionstringprojectIdstringprompt*stringreturnImagebooleantableDataobjecttype*stringupdateDiagramInDocumentUpdate 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...
alignstringleft · center · rightapplyBrandThemebooleanbrandKitIdstringcaptionstringcolorPlanobjectdiagramCodestringdiagramId*stringdiagramVersionTimestampnumberdocumentVersionTimestampnumbernlDescriptionstringpromptstringtableDataobjectdeleteDiagramInDocumentDelete 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...
diagramId*stringversionTimestampnumberdeleteDocumentDelete a document.2 params
Delete a document.
documentId*stringprojectIdstringgetWhiteboardGuideGet 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...
brandKitIdstringchangeDesignbooleanconfirmbooleandesignIdstringdesignProfilestringstandard · branded-executive · illustrated · image · agentic · agentic-deckdocumentIdstringgoal*stringprojectIdstringquoteTokenstringreplaceExistingbooleansourceTranscriptobjecttitlestringundoChangebooleanundoClearbooleandesignComponentDesign 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...
boxColsnumberboxRowsnumberbrandKitIdstringcategorystringdescription*stringforcebooleankey*stringprojectId*stringreferenceImageUrlstringsampleSlots*objecttagsarraytitle*stringeditWhiteboardImageRegionMask-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...
documentId*stringelementId*stringmaskBase64*stringprompt*stringstrengthnumberdesignDeckInWhiteboardCreate 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...
advancedDeckBuildingbooleanadvancedDeckBuildingDepthnumberattachmentsarraybrandKitIdstringconfirmbooleandeckIdstringdocumentId*stringimageCountnumberkindstringdeck · illustration · design · expressmessage*stringquoteTokenstringsessionIdstringslideCountnumbertitlestringdesignIllustrationInWhiteboardCreate 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...
attachmentsarraybrandKitIdstringconfirmbooleandeckIdstringdocumentId*stringmessage*stringquoteTokenstringsessionIdstringtitlestringgetDeckReplyInWhiteboardGet 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...
deckId*stringdocumentId*stringexportFromWhiteboardExport 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...
brandKitIdstringdesignIdstringdocumentId*stringformatstringpptx · pdf · pngkindstringdeck · canvasstartMeetingScribeInvite 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...
agendaarrayconfirmbooleandocumentId*stringguidedobjectmeetingTypestringstandard · guidedmeetingUrl*stringsettingsobjectgetMeetingScribeStatusGet 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...
sessionId*stringstopMeetingScribeStop 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...
sessionId*stringcreateWhiteboardCreate 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...
folderIdstringprojectId*stringtitle*stringlistWhiteboardsList 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...
caseSensitivebooleanchangedBeforestringchangedSincestringisRegexbooleanlimitnumberoffsetnumberprojectIdstringquerystringtimeZonestringworkspaceIdstringgetWhiteboardRead 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...
documentId*stringincludeElementsbooleanprojectIdstringupdateWhiteboardSceneEdit 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...
appStateobjectconfirmReplacebooleandeleteIdsarraydocumentId*stringelementsarrayfilesobjectmodestringpatch · append · replaceprojectIdstringversionTimestampnumberaddWhiteboardElementsAuthor 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...
arrangeobjectdocumentId*stringprojectIdstringrerouteConnectorsbooleanshapes*arrayduplicateWhiteboardElementsCopy-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...
documentId*stringdxnumberdynumbergroupbooleangroupIdstringidsarrayincludeGroupPeersbooleaninsertWhiteboardImageInsert 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...
alignstringleft · center · rightcaptionstringcustomDataobjectdocumentId*stringfileNamestringheightnumberimageBase64stringimageBinaryarrayimageUrlstringlockedbooleannlDescriptionstringwidthnumberxnumberynumberinsertWhiteboardDiagramInsert (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...
alignstringleft · center · rightapplyBrandThemebooleanbrandKitIdstringcaptionstringdiagramType*stringdocumentId*stringfitstringcontainheightnumbersource*stringupdateElementIdstringwidthnumberxnumberynumbertraceImageTurn 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...
documentId*stringimageBase64stringimageUrlstringmaxColorsnumbermaxStrokesnumbermimeTypestringstylestringsketch · color · posterwidthnumberxnumberynumberdataToTableRender 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...
cellHeightnumbercellWidthnumberdataarraydocumentId*stringheadersarrayprojectIdstringrowsarrayxnumberynumberlistWhiteboardStencilsSearch 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...
categorystringlimitnumberpackstringquerystringgetWhiteboardImageRender 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...
backgroundstringdocumentId*stringelementIdsarrayprojectIdstringregionobjectthemestringlight · dark · bothdeleteWhiteboardDelete a whiteboard (the host document and its canvas).2 params
Delete a whiteboard (the host document and its canvas).
documentId*stringprojectIdstringrenderDiagramGenerate 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...
applyBrandThemebooleanbackgroundstringbrandKitIdstringdiagramType*stringformatstringpng · jpeg · svgprojectIdstringscalenumber1 · 2 · 3source*stringtableDataobjectgetDiagramImageRender 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...
backgroundstringdiagramId*stringformatstringpng · jpeg · svgscalenumber1 · 2 · 3rebuildPlatformCatalogEmbeddingsMaintenance (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,...
typesarrayreorderDocumentsMOVE 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...
dryRunbooleanitems*arrayprojectIdstringlistDocumentVersionsList 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...
changedBeforestringchangedSincestringcomparebooleandocumentId*stringfieldsarrayfromDatestringlimitnumberoffsetnumberprojectIdstringsortAscendingbooleantimeZonestringtoDatestringversionNumbernumbergetImageInDocumentGet 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.
documentId*stringstoragePath*stringcreateImageUploadSessionCreate 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.
dashboardstringdatabaseIdstringdocumentIdstringfileName*stringmimeType*stringprojectIdstringsha256stringinsertImageInDocumentInsert 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...
afterLinenumberalignstringleft · center · rightaltstringcaption*stringdocumentId*stringdocumentVersionTimestampnumberfileNamestringheightnumberimageBase64stringimageBinaryarrayimageUrlstringnlDescription*stringprojectIdstringwidthnumberupdateImageInDocumentUpdate 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.
alignstringleft · center · rightaltstringcaptionstringdocumentVersionTimestampnumberheightnumberimageId*stringnlDescriptionstringwidthnumberdeleteImageInDocumentDelete 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...
imageId*stringversionTimestampnumbercreateVegaDataUploadSessionCreate 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.
contentTypestringdocumentId*stringfileName*stringprojectIdstringdeleteVegaDataFileDelete a data file attachment from a document.3 params
Delete a data file attachment from a document.
attachmentId*stringdocumentId*stringprojectIdstringcreateDocumentIngestSessionStep 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...
fileName*stringfolderIdstringmimeType*stringprojectId*stringsizeBytesnumbercreateDocumentFromUploadStep 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...
changeSummarystringfolderIdstringprojectId*stringsessionId*stringtitlestringgetDocumentIngestJobRead 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...
jobId*stringexportDocumentExport 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...
documentId*stringformatstringpdf · docxtemplateIdstringlistImprovementsList 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...
agentReadybooleancaseSensitivebooleancategoryIdstringchangedBeforestringchangedSincestringcomplianceOnlybooleancountOnlybooleancreatedBystringfieldsarrayframeworkKeystringhasLinkedRecordsbooleanisRegexbooleanlimitnumberlinkedRecordIdsarraylinkedTableIdsarrayoffsetnumberownerIdstringparentItemIdstringprioritystringprojectIdstring+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...
improvementId*stringprojectIdstringcreateImprovementCreate 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...
acceptance_criteriaarrayagent_briefstringagent_complexitystringagent_confidencenumberagent_missing_infoarrayagent_readybooleanagent_recommended_actionstringbusiness_impactstringcategory_idstringchecklistarrayconstraintsarraydescriptionstringdesired_outcomestringdetailsobjectend_datestringfieldsarrayimpacted_componentsarrayimpacted_diagramsarrayimpacted_documentsarrayimpacted_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...
acceptance_criteriaarrayagent_briefstringagent_complexitystringagent_confidencenumberagent_missing_infoarrayagent_readybooleanagent_recommended_actionstringblocked_commentstringbusiness_impactstringcategory_idstringchecklistarraycompletion_commentstringconstraintsarraydescriptionstringdesired_outcomestringdetailsobjectdocs_updatedbooleanend_datestringfieldsarrayfollow_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.
improvementId*stringprojectIdstringlistImprovementCategoriesList improvement categories for a project. Returns tree and flat list.1 params
List improvement categories for a project. Returns tree and flat list.
projectId*stringcreateImprovementCategoryCreate an improvement category or sub-category. Max two levels.8 params
Create an improvement category or sub-category. Max two levels.
colorstringdescriptionstringiconstringname*stringparentIdstringprojectId*stringslugstringsortOrdernumberupdateImprovementCategoryUpdate an improvement category. Cannot modify system categories.7 params
Update an improvement category. Cannot modify system categories.
categoryId*stringcolorstringdescriptionstringiconstringnamestringslugstringsortOrdernumberSponsors
Readme
Stable Baseline MCP Server
The simplest, most complete, end-to-end agent-managed company brain.
Website · Sign up free · Docs · Tool catalogue · llms.txt
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