Stable Baseline
End-to-end agent-managed company brain. Docs, diagrams, plans, databases, agents, Knowledge Graph.
Connect it
Settings → Connectors → Add custom connector
URL: https://api.stablebaseline.io/functions/v1/cloud-serve/mcpSettings → Apps & Connectors → Advanced → Developer mode
Create connector with URL: https://api.stablebaseline.io/functions/v1/cloud-serve/mcp{
"mcpServers": {
"sb": {
"url": "https://api.stablebaseline.io/functions/v1/cloud-serve/mcp",
"headers": {
"Authorization": "<YOUR_AUTHORIZATION>"
}
}
}
}claude mcp add --transport http sb https://api.stablebaseline.io/functions/v1/cloud-serve/mcp --header "Authorization: <value>"{
"servers": {
"sb": {
"type": "http",
"url": "https://api.stablebaseline.io/functions/v1/cloud-serve/mcp",
"headers": {
"Authorization": "<YOUR_AUTHORIZATION>"
}
}
}
}219 tools, verified live
searchToolsread-onlySearch available tools by keyword or category. Returns matching tool names and descriptions.
listDiagramTypesread-onlyList supported diagram types (renderers such as default, mermaid, plantuml, bpmn 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', 'database schema', 'BPMN process'. Each type lists supportedDiagrams: the diagram families it draws (BPMN process, ERD, fl
getDiagramTypeGuideread-onlyGet DSL writing instructions and an example for a diagram type (a renderer such as 'default', 'mermaid' or 'bpmn'). Also accepts a diagram family slug or name from supportedDiagrams (e.g. 'bpmn-process'), which resolves to that family's default renderer (see resolvedFrom). supportedDiagrams lists the families the type draws, each with its defaultRenderer. Call before writing diagramCode.
listArchitectureIconsread-onlyList 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 categories for the rest. The same logical name is shown once. iconKey is the exact icon string for a platform default diagram (type
searchInfographicTemplatesread-onlySearch 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 between systems', 'parts of a whole'); results come back best match first. Each result has `key` (use as line 1 `infographi
getCdmdLanguageGuideread-onlyGet the CDMD markdown language specification. Call before createDocument if unfamiliar with syntax.
getCurrentUserread-onlyReturn 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.
listAssignablePrincipalsread-onlyServer-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 in the project: active members of its organisation who can open the project (organisation owners and admins, the workspace
listTeamsread-onlyList 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 teams generically (e.g. 'show me my teams') or before assigning a team via updateImprovement(owner_team_id=â¦). Read-only.
getTeamread-onlyGet 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.
listOrganisationsread-onlyList organisations you have access to. Supports query filtering by name/slug.
listWorkspacesread-onlyList 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.
listProjectsread-onlyList projects in a workspace. Supports query filtering by project name.
listFoldersread-onlyList folders in a project. Use parentId for nested folders. For full tree, use getProjectHierarchy instead.
createFolderCreate a folder in a project. Supports nesting via parentId.
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, `parentId` (a folder of that project; omit it for the project's top level). Its subfolders, documents and boards go with it,
deleteFoldercan modifyDelete a folder recursively, including all nested folders and documents.
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 there, use updateFolder({parentId, position}) instead.
listDocumentsread-onlyList 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?}]` and `matchCount`; the `text` is anchor-ready (paste it straight into editDocument's oldText). Use isRegex:true for reg
getProjectHierarchyread-onlyGet the complete folder and document tree for a project in one call. Recommended first call for navigation.
getFolderHierarchyread-onlyGet 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.
getDocumentread-onlyRead 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 by lines (offset/limit, default 200): use content.totalLines and content.nextOffset to page. document.versionTimestamp
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 managed by the platform, and any other key you set (doc_type, authority_state, owner, conforms_to, â¦) round-trips untouc
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-for-byte AND be unique; if it occurs more than once, either expand oldText until it is unique, or add `before`/`after`
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 (anchor patches). Case-sensitive by default. Diagrams/images are automatically protected â only document text is affected
getDiagramInDocumentread-onlyGet 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 updateDiagramInDocument (every diagram write also returns it fresh).
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), and valid DSL is rendered + thumbnailed immediately so the document displays instantly everywhere. The response tells you wh
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 (response diagram.renderStatus tells you the outcome). Provide a version lock: diagramVersionTimestamp (from getDiagramInDoc
deleteDiagramInDocumentcan modifyDelete 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 marker was actually found in the body, and versionTimestamp is the document's fresh lock token.
deleteDocumentcan modifyDelete a document.
getWhiteboardGuideread-onlyGet 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). Call before authoring a non-trivial whiteboard.
autoDesignWhiteboardcan modifyAuto-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, critiques the rendered image, and refines â far better than hand-placing shapes. This is the one-shot whole-board designer; it is NOT a conversation (for a deck
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 template (a gradient/shadow/curve SVG skin + a native editable PPTX shape + reflowing bound-text slots), RENDERS it, a vision
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 (same position + size). This is mainly used by the in-app image-board mask editor for boards designed with designProfile:'imag
designDeckInWhiteboardcan modifyCreate 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 brief is ambiguous it asks ONE clarifying question (answer with the same sessionId). Returns immediately; poll getDeckReplyInW
designIllustrationInWhiteboardcan modifyCreate 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 a slide deck). Send a brief for a NEW illustration, a change to an existing one, or an answer to the agent's question. The
getDeckReplyInWhiteboardread-onlyGet 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 SAME tool you started with, passing the sessionId + your answer). Poll until ready or a question appears. Give it the whitebo
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:'exporting' with a jobId instead of the file. Wait about 30 seconds and call this tool AGAIN with the SAME arguments to collect
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 actions pinned to rails, on a real board the team keeps working in afterwards. The bot transcribes only and stores no recording.
getMeetingScribeStatusread-onlyGet 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 startMeetingScribe. Poll every 15 to 30 seconds while the meeting runs. When the meeting ends the board holds the finished
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 the meeting.
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 addWhiteboardElements (high-level specs) or updateWhiteboardScene. For anything beyond a blank board, call getWhiteboardGuide
listWhiteboardsread-onlyList 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 â listDocuments deliberately excludes whiteboards. Returns documentId, diagramId, title and timestamps for each. projectId is required
getWhiteboardread-onlyRead 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 updateWhiteboardScene. FOR BEST RESULTS, also call getWhiteboardImage to render the board to an image and actually SEE it
updateWhiteboardScenecan modifyEdit 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, backgroundColor:'blue'} to recolour one box, or {id, x, y} to move one) and appends any elements whose id is new/absent â everything
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 shapes and create an unreadable pile. Either (a) OMIT x/y entirely and the server auto-places the new elements together in c
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 together. Use it to build something once (a labelled stencil frame, a kanban card, a UML class) then stamp out consistent
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) first then pass the returned assetUrl as imageUrl. The bytes are stored in the document-images bucket and the scene only hold
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 diagram is rendered to an image stored like a pasted image, and its editable source is kept in a sidecar so it stays a live,
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 that and it wastes tokens). Use this for requests like 'sketch this image onto the board', portraits, or turning a logo int
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 data, CSV, or JSON into a readable table on the board. Returns a compact summary. Auto-places below existing content unless x/
listWhiteboardStencilsread-onlySearch 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 stencil is a MINI-WHITEBOARD (a collection of elements), NOT a single shape. Each result returns: `key`, `title` (a real huma
getWhiteboardImageread-onlyRender 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 vector/SVG output, so for a vector export of a single diagram use getDiagramImage). Pass elementIds to render only speci
deleteWhiteboardcan modifyDelete a whiteboard (the host document and its canvas).
renderDiagramread-onlyGenerate 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 for the full set) and source (the diagram code). Choose format 'png' (default), 'jpeg', or 'svg'; for raster choose scale
getDiagramImageread-onlyRender 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 (from getDocument's DIAGRAM markers or getDiagramInDocument). Reuses the diagram's cached server render when available (p
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, listArchitectureIcons and the design skill and component browsers stays current. Incremental: it scans every catalogue and
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 document into the given folder (null for the project's top level; omit it to leave the document where it is); `position` sets
listDocumentVersionsread-onlyList 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 the difference, worked out from the text: the lines added and removed between the document as it stood before that time and
getImageInDocumentread-onlyGet 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.
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.
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 findable in search and what lets an agent decide whether this picture belongs on a slide or in an answer, since neither can see
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.
deleteImageInDocumentcan modifyDelete 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 still references is the point of this tool; do not hand-edit the marker out with editDocument, which removes the reference bu
createVegaDataUploadSessionCreate a PUT upload URL for a Vega/Vega-Lite data file. Use returned assetUrl in your Vega spec.
deleteVegaDataFilecan modifyDelete a data file attachment from a document.
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, projectId }) to start the conversion. The file is auto-deleted once the document is created.
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 file. Poll getDocumentIngestJob({ jobId }) to track progress. Idempotent: calling twice with the same sessionId returns th
getDocumentIngestJobread-onlyRead 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, failed, cancelled. The associated document_id is populated immediately and progressively filled in as images are pr
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'. The file is made in the background: if that takes longer than one tool call can wait, this returns status 'exporting' wi
listImprovementsread-onlyList 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 parentItemId for an item's children in the work hierarchy (an epic's stories, say). For ranked semantic + text search use s
getImprovementread-onlyGet 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 locking. (For tasks specifically, use getTask + updateTask which are symmetric aliases.) Also returns the work hierarchy: parentI
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 in the work hierarchy, and linkedRecords to link database rows to it. Pass `fields` (for example ["id", "friendlyId", "ver
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` (objects with per-row updated_by/at attribution), parentItemId (the epic or story it belongs to in the work hierarchy; null rem
deleteImprovementcan modifyDelete an improvement and all associated evidence and activity.
listImprovementCategoriesread-onlyList improvement categories for a project. Returns tree and flat list.
createImprovementCategoryCreate an improvement category or sub-category. Max two levels.
updateImprovementCategoryUpdate an improvement category. Cannot modify system categories.
deleteImprovementCategorycan modifyDelete an improvement category. Cannot delete system categories.
reorderImprovementCategoriesReorder improvement categories by setting sort_order values.
addImprovementEvidenceAdd evidence to an improvement. Types: document_section, diagram_node, incident_note, feedback, free_text.
addImprovementActivityAdd a comment or activity entry to an improvement.
updateImprovementCommentUpdate a comment on an improvement. Only its author, or an admin of the improvement's project, workspace or organisation, can change it; other entries (status and field changes) cannot be changed. Requires the comment's updated_at as versionTimestamp.
deleteImprovementCommentcan modifyDelete a comment from an improvement. Only its author, or an admin of the improvement's project, workspace or organisation, can delete it.
searchImprovementsread-onlyRanked search over IMPROVEMENTS AND TASKS that matches by meaning as well as by wording. Returns ranked { improvements }, each with a versionTimestamp you can pass straight to updateImprovement without a getImprovement round-trip. Improvements and tasks are one table (a task is an improvement with is_task=true), so both are searched by default. Pass types:["task"] or types:["improvement"] to narr
listPlansread-onlyList AND grep plans in a project. `query` searches the title, friendlyId and description, not just the title (substring by default; set isRegex:true for a regular expression, caseSensitive:true for exact case). Supports filtering by status and priority. projectId is required unless changedSince is given. WHAT CHANGED: give changedSince (a period such as this_week, or a date) to list only the plans
getPlanread-onlyGet full plan details including phases, items, and activity. Every level carries its own optimistic-lock token, so one call supplies them all: the top-level versionTimestamp is the plan's (for updatePlan), phases[].versionTimestamp each phase's (for updatePlanPhase) and items[].versionTimestamp each task's or improvement's (for updateTask / updateImprovement, including their bulk `items` form). It
createPlanCreate a plan in a project. Requires projectId and title. Pass `fields` (for example ["id", "versionTimestamp"]) for a short answer instead of the whole plan.
updatePlanUpdate a plan. versionTimestamp (optimistic locking) is the plan's updated_at in epoch milliseconds: listPlans and getPlan return it, and every write returns the new one. Pass `fields` (for example ["id", "versionTimestamp"]) for a short answer instead of the whole plan.
deletePlancan modifyDelete a plan, all its phases, and all tasks/improvements within it. This is a destructive operation that cannot be undone.
listPlanPhasesread-onlyList phases for a plan ordered by position. Each phase carries its own versionTimestamp, ready for updatePlanPhase.
getPlanPhaseread-onlyGet a plan phase by ID with full details. Returns versionTimestamp â pass it to updatePlanPhase for optimistic locking.
createPlanPhaseCreate a phase in a plan. Position and wbs_code are auto-computed. By default a phase's dates follow its tasks (date_mode 'auto'): once any task in it has dates, the phase runs from the earliest task start to the latest task end and stays in step as tasks change, so there is no need to maintain phase dates by hand. Pass `fields` (for example ["id", "versionTimestamp"]) for a short answer instead o
updatePlanPhaseUpdate a plan phase, or many phases in one call. Each phase has its own versionTimestamp (its updated_at in epoch milliseconds): listPlanPhases and getPlan (phases[].versionTimestamp) return it for every phase in a plan, getPlanPhase for one, and every write returns the new one. Never pass the plan's own top-level versionTimestamp. A phase with date_mode 'auto' (the default) takes its dates from i
deletePlanPhasecan modifyDelete a plan phase and all tasks/improvements within it. This is a destructive operation that cannot be undone.
reorderPlanPhasesReorder plan phases by setting position values. WBS codes are recalculated.
addPlanActivityAdd a comment or activity entry to a plan. People read a plan's entries on its Activity tab in the app, newest first, and the answer links straight to it. An entry added through an API key or a connected app shows that key's or app's name, marked as an agent. getPlan returns the newest 50 entries.
updatePlanCommentUpdate a comment on a plan. Only its author, or an admin of the plan's project, workspace or organisation, can change it; other entries (status and field changes) cannot be changed. Requires the comment's updated_at as versionTimestamp.
deletePlanCommentcan modifyDelete a comment from a plan. Only its author, or an admin of the plan's project, workspace or organisation, can delete it.
createTaskCreate a task in a plan. Requires planId and title. Accepts every field updateTask accepts, so a task can be created complete in ONE call: no create-then-update, and no window in which other actors read a half-written record. Pass parentItemId to create it under its story, requirement or feature in the work hierarchy (which may be in another plan, or in none), and linkedRecords to link database ro
listTasksread-onlyList AND grep tasks in a plan. `query` searches the title, friendlyId and description, not just the title (substring by default; set isRegex:true for a regular expression, caseSensitive:true for exact case). Supports filtering by status, priority, phaseId and parentItemId (a story's tasks in the work hierarchy, say). Every task carries its versionTimestamp, ready for updateTask, so one call here s
getTaskread-onlyGet a task by ID with full details, evidence, activity, and the `checklist` array (each item: id, text, due_date, completed_at, plus server-stamped attribution). Returns versionTimestamp; pass it to updateTask to modify. Includes percent_complete for progress tracking. Also returns the work hierarchy: parentItem (the item this one belongs to, such as its epic or story: { id, friendlyId, title, typ
updateTaskUpdate a task, or many tasks in one call. A task is the same kind of record as an improvement (one with `is_task=true`), so this is a thin alias over updateImprovement: every field on updateImprovement is supported, including `checklist`, `acceptance_criteria`, dates, owner, percent_complete, parentItemId (the story or requirement it belongs to in the work hierarchy), linkedRecords (the database r
getPlanHierarchyread-onlyGet the complete plan hierarchy (phases, tasks, improvements) in one call. Recommended first call for plan navigation.
setPlanItemParentSet or clear the plan outline (WBS) nesting of a task or improvement: the indent inside one plan phase, with no scheduling effect. Parent and child must be in the same plan and the same phase, and the WBS numbers are recalculated. Max depth: 5. This is NOT the work hierarchy: for an epic's stories or a story's tasks or test cases, in any plan or phase, set parentItemId with createImprovement, upda
listTaskDependenciesread-onlyList FS/SS/FF task-dependency edges in a plan (the Gantt arrows). Scope by planId, projectId, or itemId. `direction`: 'predecessors' | 'successors' | 'both' (default, only with itemId).
createTaskDependencyCreate an FS/SS/FF scheduling edge with lag/lead between two items in the same plan (rendered as a Gantt arrow). FS = Finish-to-Start, SS = Start-to-Start, FF = Finish-to-Finish. `lagDays`: positive = lag, negative = lead/overlap. Rejects self-loops, duplicate (pred+succ+type) edges, cross-plan edges, and cycles.
updateTaskDependencyChange the type (FS/SS/FF) or lag/lead of an existing task-dependency. Doesn't move dates directly; flags the successor with `needs_dependency_review=true` and fills `suggested_start_date`/`suggested_end_date` if the change implies a different schedule.
deleteTaskDependencycan modifyRemove a task-dependency edge. Neither item's dates are changed. Needs the same 'write' plan permission as createTaskDependency, so an actor that can draw an edge can also undo it â the edge is fully recreatable from (predecessor, successor, type, lag).
acceptTaskDependencyReviewPer-item: apply a successor's `suggested_start_date`/`suggested_end_date` to its real dates and clear `needs_dependency_review`. For a whole-plan cascade use `applyTaskDependencyCascade`.
dismissTaskDependencyReviewPer-item: clear `needs_dependency_review` without changing dates â keeps the edge, ignores the suggestion. Use when the successor should stay put despite the predecessor shifting.
applyTaskDependencyCascadeAuto-schedule every item in a plan so all FS/SS/FF task-dependencies are respected (topological pass, durations preserved). Returns the before/after diff and logs a comment on every item that moves. Use `forwardOnly: true` to only shift items currently in violation (never pull already-valid items earlier). Use `pinnedItemIds` to keep specific items at their current dates. Pairs with `previewTaskDe
previewTaskDependencyCascaderead-onlyDry-run of `applyTaskDependencyCascade` â returns the diff without writing. Empty items array means the plan is already consistent. Accepts the same `pinnedItemIds` and `forwardOnly` params.
kg_searchread-onlyFIND an artefact by its name, friendly id or uuid with artefactMetadataOnly:true. This works in every organisation, with or without the knowledge graph. Without that flag the tool ANSWERS questions from inside the content (facts, themes, relationships) through the knowledge modes below, which need the organisation's knowledge graph switched on: where it is off, those calls are refused with a messa
kg_evaluate_retrievalread-onlyCheck how well a set of kg_search results is backed by the knowledge graph before you answer from them. Pass the chunk ids kg_search returned. Each chunk gets a bucket: authored-grounded (backed by links people authored), extracted-high-conf or extracted-low-conf (backed by links inferred from text, with high or low confidence), or no-support (nothing in the graph backs it). Also returns the overa
kg_get_entityread-onlyFetch a KG entity by id or name, with the entities directly connected to it. The response also carries `datedFacts`: what holds now about the entity by default, what held on a day with asOf, or the whole history with history:true, each fact with its dates, how it ended if it has, and the sources that state it.
kg_related_documentsread-onlyFind other sources that share entities with the given source.
kg_scope_statusread-onlyCheck whether Knowledge Graph is in-scope for a given target.
kg_backlinksread-onlyLinked-mentions rail: every edge whose dst matches the named entity.
kg_list_communitiesread-onlyList the communities the knowledge graph has found in an organisation's content (optionally for one project). A community is a group of closely related entities; each comes with its id, title, summary and entity count.
kg_get_wiki_pageread-onlyFetch the wiki page written for a community (a group of closely related entities in the knowledge graph), in CDMD markdown. Pass its slug or the communityId.
kg_suggest_sample_questionsread-onlySuggest up to six sample questions to ask the knowledge graph: three standard ones built around the most-mentioned entities, and up to three drawn from the main topics of the content. Optionally for one project.
getOrganisationread-onlyRead a single organisation by id. Returns id, name, slug, description, settings (an object), created_at, member_count (active members) and plan_tier (subscription_tier). The organisation must match the calling credential's organisation. Read-only.
getWorkspaceread-onlyRead a single workspace by id. Auth via the standard workspace-access ladder (credential org match + workspace scope + per-resource read permission). Returns the workspace's full record. Read-only.
getProjectread-onlyRead a single project by id. Auth via the standard project-access ladder. Returns the project's full record (id, workspace_id, name, description, icon, created_by/at, updated_by/at). Read-only.
listMembersread-onlyList members of an organisation, enriched with email + display name. Auth: org id must match the credential's organisation. Returns paginated list, default limit 50 / max 200.
getMemberread-onlyFetch a single organisation member by user_id, enriched with profile (email + display name). Auth: org id must match the credential's organisation.
listInvitationsread-onlyList organisation invitations. Auth: org id must match the credential's organisation AND the credential must hold the can_manage_members capability. Status defaults to 'pending'. Pass 'all' to disable filtering.
getSubscriptionread-onlyRead the subscription state for an organisation. Returns tier, status, current billing period, seat count, member count, cancellation flag, trial end. Stripe IDs are stripped. Pair with listPaymentMethods/listInvoices for the full billing dashboard. Use when the user asks 'what plan am I on', 'how many seats do I have', 'when does my subscription renew', or to check current billing status.
listInvoicesread-onlyList invoices for an organisation, newest first. Returns hosted Stripe invoice URLs and PDF links. Stripe IDs are stripped.
listPaymentMethodsread-onlyList saved payment methods for an organisation. Returns masked card metadata only (brand, last4, exp month/year, default flag). NEVER returns full card numbers, CVCs, or any Stripe IDs.
getCreditBalanceread-onlyComposite credit balance for an organisation: plan_credits (recurring monthly bucket), top_up_credits (purchased one-offs, gross), bonus_credits (admin grants), total, and period_end (next plan reset).
getCreditPackagesread-onlyList active credit packages available for purchase (name, credits, bonus_credits, price in cents AUD). Catalogue read, visible to any MCP credential. To buy one, call quoteCreditPackage and then purchaseCreditPackage.
listCreditPurchasesread-onlyList credit-purchase history for an organisation, newest first. Status, credits purchased, bonus, amount paid in AUD cents, completion timestamp. Stripe IDs stripped.
getPriceForTierread-onlyRead the public catalogue entry for a single subscription tier (free, plus, pro, enterprise). Free, Plus and Pro prices are publicly advertised. Enterprise is priced per customer with sales, so its monthly_price_cents is always null here, for every caller: describe the plan from its limits and features, and point the user to sales for a price. `available` is false for a plan that cannot be bought
listResourcePermissionsread-onlyList explicit permission grants on a resource (workspace/project/folder/document/improvement/plan), including principal type (user|team), level (none|read|write|admin), and 3-state overrides for documents/improvements/plans/whiteboards. Read-only. Use when the user asks 'who can see this', 'who has access', 'what permissions are set on this', or to audit existing access on a resource. Also lists w
getEffectivePermissionread-onlyCompute a user's effective permission level on a resource (taking team grants, inheritance, and 3-state overrides into account) and the source. Asking about another user requires can_manage_perms on the org. Use when the user asks 'can X access this', 'what level of access does X have', 'why can X see this', or to debug an unexpected permission outcome. Works for a database, one of its tables (db_
getKgScopeTreeread-onlyList every kg_scope row for the caller's organisation, optionally narrowed to a workspace or project subtree. Each row carries scope_type, scope_id, state (on|off|inherit), settings, and is augmented with scope_name + parent_id for tree rendering. Databases and tables switched on or off in the brain follow as rows of scope_type database (parent: its project, workspace or organisation) and table (p
getOrgSettingsread-onlyRead an organisation's settings JSON and the derived enabled-features map (plans, documents, improvements, compliance, knowledge_graph: all booleans). Also `ai`: the kind of work the assistant and the organisation's agents run on (everyday or thinking) and whether each runs on the organisation's own AI, on Stable Baseline's AI, or is stopped until an owner or admin fixes it (Organisation settings,
getCurrentPlanEntitlementsread-onlyRead the plan entitlements (limits + capability flags) that apply to the caller's organisation. Returns { tier, display_name, limits, features }. The Enterprise row is filtered for non-admin callers by the underlying view. Read-only.
getUserPreferencesread-onlyRead the calling user's preferences. Self-only â no params required. Returns { notifications, grids } where `notifications` is the single notification-preferences row and `grids` is an array of per-grid view rows. Read-only.
createOrganisationCreate a new organisation owned by the calling credential's user. Auth: the server checks that the user may create another organisation (free-tier users may only have one org). Per-credential rate limit 3/day. Slug auto-generated. The new org is OUTSIDE the credential's current scope (credentials are bound to one org); to use the new org from MCP, mint a fresh credential.
updateOrganisationUpdate an organisation's name and/or description. Auth: ceiling â credential must hold `can_admin_org` capability AND user must be org owner/admin. Rate limit 30/min. At least one of name/description required. Returns updated row.
createWorkspaceCreate a new workspace inside the organisation. Auth: ceiling â credential must hold `can_lifecycle` AND user must be org owner/admin. Rate limit 30/min. Slug auto-generated. Caller becomes workspace owner. Plan limits surface as WORKSPACE_LIMIT_REACHED errors.
updateWorkspaceUpdate a workspace's name. Auth: standard workspace-write ladder + user must be workspace owner or admin. Slug is intentionally not editable (URL-embedded). Rate limit 60/min.
createProjectCreate a new project inside a workspace. Mirrors the UI Create Project dialog. Auth: write on workspace + credential's `can_lifecycle` capability. Validates name (1..200) and description (0..2000); icon defaults to a folder emoji if omitted. The plan's project limit is checked on the server. Rate limit 30/min.
updateProjectUpdate a project's name, description, and/or icon. Mirrors the UI Project General Settings page. Auth: admin on the project (cascades from workspace owner/admin and org admin). Partial updates; at least one of name/description/icon must be supplied. Rate limit 60/min.
inviteMemberInvite a person by email to the credential's organisation. Auth: org id must match the credential AND credential must hold can_manage_members. Rate limit 10/h. Returns invitation_id, expiry, and a seat-billing-impact summary. Email-existence is opaque: the response shape never reveals whether the email is already a member, already invited, or new. Use when the user asks to invite a teammate, frien
cancelInvitationCancel a pending invitation by id. Sets status='revoked'. Server resolves the organisation_id from the invitation row; the credential must match that org AND hold can_manage_members. Idempotent. Rate limit 30/min. Use when the user asks to cancel, revoke, or undo a pending invitation â for example to correct a typo'd email address before re-inviting.
resendInvitationResend a pending invitation: extends expires_at by 7 days and re-triggers the invitation email. Server resolves the organisation_id from the invitation row. Rate limit 6/h per invitation_id. Use when the user asks to resend, re-send, or re-trigger an invitation email â typically because the recipient lost it or the original expired.
updateMemberRoleUpdate an organisation member's role (admin or member). Owners cannot be changed via this tool. Refuses self-promotion. Rate limit 30/min. Use when the user asks to promote someone to admin, demote an admin to member, or change a teammate's role.
setMemberActivecan modifySoft-deactivate or reactivate an organisation member. Refuses self-deactivation, last-admin/owner deactivation, and deactivation of an owner. Rate limit 30/min. Use when the user asks to deactivate, suspend, freeze, reactivate, or unfreeze a member without fully removing them.
removeMembercan modifyHard-remove a member from an organisation, cascading to workspace and team memberships and resource permissions. Refuses self-removal and last-owner removal. The paid seat count is NOT changed here: use previewSubscriptionChange and then applySubscriptionChange for a seat change. Rate limit 5/min. Use when the user asks to remove, kick out, fire, offboard, or fully terminate a member's access to t
updateProfileUpdate a member's display name. Your own name needs no organisation_id; another member's name needs organisation_id and the can_manage_members capability. This tool never changes an email address, your own or another member's: only the person can change their own email address, from their Profile page, where a change of the sign-in address is confirmed by email.
addWorkspaceMemberAdd an existing organisation member to a workspace with a workspace-level role. Idempotent â returns the existing membership if already a member. Caller must be a workspace owner or admin.
updateWorkspaceMemberChange an existing workspace member's role. Caller must be a workspace owner or admin. Cannot self-demote from owner/admin to editor/viewer â transfer the role first.
removeWorkspaceMembercan modifyRemove a member from a workspace. Caller must be a workspace owner or admin. Refuses to remove the last remaining workspace owner.
createTeamCreate a new team inside an organisation. Caller is added as the team's lead. Subject to plan team limit. Rate limit 30/min.
updateTeamUpdate a team's name, description, and/or colour. At least one field required. Slug is intentionally not editable. Rate limit 60/min.
deleteTeamcan modifyDelete a team. Cascades: team members and team-granted resource permissions are removed automatically. Destructive; rate limit 5/min.
addTeamMemberAdd a user to a team as a regular member. Idempotent â returns already_member=true if already on the team. User must be an active organisation member.
removeTeamMembercan modifyRemove a user from a team. Idempotent â returns removed=false if not on the team.
grantTeamWorkspaceAccessGrant a team read/write/admin access to a workspace. Idempotent. Team and workspace must be in the same organisation.
updateTeamWorkspaceAccessUpdate an existing team's workspace access level. Refuses if no grant exists â call grantTeamWorkspaceAccess first. No-op when level matches.
revokeTeamWorkspaceAccesscan modifyRevoke a team's workspace access. Idempotent â returns revoked=false if no grant exists.
upsertResourcePermissionGrant a user OR team a permission on a workspace/project/folder/document/improvement/plan, or change the one they have. Refuses self-escalation. Rate limit 30/min. Use when the user asks to give access to, share with, grant access, add a permission, make accessible, or invite someone to a specific workspace/project/folder/document, i.e. resource-level access (not org-level membership; that's invit
updateResourcePermissionUpdate the access level on an existing permission row. Override flags are NOT touched: use setResourcePermissionOverride for those. Refuses self-escalation. Rate limit 30/min. Works for a grant on a database or one of its tables too (its id comes from listResourcePermissions).
deleteResourcePermissioncan modifyDelete a permission grant. Refuses if it is the LAST admin grant on the resource. Rate limit 30/min. Use when the user asks to revoke access, remove access, take away access, unshare, or delete a permission grant on a specific resource. Works for a grant on a database or one of its tables too; to take someone off a single row, use upsertResourcePermission with level none.
setResourcePermissionOverrideSet a single 3-state override on a permission row: null=inherit, true=allow, false=deny. Per-axis (read/write/delete) and per-kind (documents/improvements/plans/whiteboards/databases), matching the OverrideAccessSection UI. On a grant of a database or one of its tables, use kind databases: it sets that grant's own read, write or delete switch. Rate limit 30/min.
previewSubscriptionChangePreview a subscription tier or seat change. Returns confirmation_token (10-min TTL) plus proration and next-invoice maths. Cross-tier upgrades from Free return requires_checkout=true; the apply step creates a hosted Stripe Checkout session. Plus is for one person (one flat price, one seat); moving into Plus is refused until the organisation fits it, and the refusal says exactly what to remove. A m
applySubscriptionChangecan modifyApply a previously previewed subscription change. Same-tier seat changes update Stripe in place; cross-tier upgrades from Free return a hosted Checkout URL. Refuses target=free (use cancelSubscription) and target=enterprise (sales-led). Rate limit 5/h. Use only AFTER previewSubscriptionChange and after the user confirms the preview's pricing â never call apply without the user seeing the preview
previewSubscriptionCancellationPreview the consequences of cancelling. Returns confirmation_token plus summary {remaining_credits, prepaid_days, prepaid_value_aud, feature_loss[], at_risk_seats}. Soft cancel only. Rate limit 30/h. Use when the user asks to cancel, end, or stop their subscription â ALWAYS call this first to show the cost of cancelling before passing the token to cancelSubscription.
cancelSubscriptioncan modifyApply a previewed soft cancellation (cancel_at_period_end=true). Customer keeps full access until period end. Rate limit 5/h. Use only AFTER previewSubscriptionCancellation and after the user confirms â never cancel without showing the preview first.
quoteCreditPackageQuote a credit-package purchase (first half of the human-in-the-loop ritual). Returns quote_token (10-min TTL) plus package + total_aud. Caller must invoke purchaseCreditPackage(quote_token) within the TTL. Use when the user asks to buy credits, purchase credits, top up credits, or add more credits â ALWAYS call this first then purchaseCreditPackage after the user confirms.
purchaseCreditPackagecan modifyApply a credit-package quote by creating a hosted Stripe Checkout session. Returns checkout_url + session_id. Refuses if catalogued price has drifted. Rate limit 5/h. Use only AFTER quoteCreditPackage and after the user confirms â never start a checkout without the quote step first.
reactivateSubscriptionReactivate a subscription that was scheduled to cancel at period end (clears cancel_at_period_end). Rate limit 5/h. Use when the user asks to reactivate, uncancel, restore, or keep their subscription after they previously cancelled but before the period ends.
updateBillingEmailUpdate the organisation's billing email. Validates the format, saves it, and updates the email on the organisation's Stripe customer record. Rate limit 30/h.
getCustomerPortalLinkMint a single-use Stripe Customer Portal URL for self-serve billing changes. return_url defaults to https://app.stablebaseline.io/settings/billing and must be on a stablebaseline.* host.
setKgWorkspaceScopecan modifyToggle whether a workspace is in the Knowledge Graph (on/off/inherit). 'on' enables the workspace as a gate for indexing its projects; 'off' excludes everything under it; 'inherit' removes the explicit override. No re-ingest happens here. Requires can_manage_kg + workspace write. Rate limit 30/min.
setKgProjectVisibilitycan modifySet the KG visibility mode for a project: 'strict' (multi-source rows hidden unless user can read every source), 'permissive' (one source suffices), or 'open' (any org member). Controls WHO can see the project's KG rows. Requires can_manage_kg + project write. Rate limit 30/min.
setKgFolderScopecan modifyToggle KG-scope override for a folder (on/off/inherit). Folders default to inheriting their project's scope. Requires can_manage_kg + folder write. Rate limit 30/min.
setKgDocumentScopecan modifyToggle KG-scope override for a single document (on/off/inherit). Documents default to inheriting their folder/project gate. Requires can_manage_kg + document write. Rate limit 30/min.
cancelKgBuildBatchCancel a single KG rebuild batch. Queued runs flip to 'cancelled' immediately; running runs finish naturally. Requires can_manage_kg. Rate limit 5/min.
cancelAllKgInScopecan modifyEmergency stop for KG ingestion: cancels queued/running build runs, queued/running rebuild batches, demotes still-eager unfinished chunks. Optionally narrowed to one project. Requires can_manage_kg + (project write if project_id supplied). Rate limit 5/min.
resetDocumentInBraincan modifyWipe + re-ingest a single document in the KG. Drops chunks/mentions/entities, clears pending lazy-extraction, and enqueues a fresh extract pass. Requires can_manage_kg + document write. Rate limit 30/min.
previewKgScopeChangePreview the credit cost, source counts, and ETA of including or excluding KG scope rows. Returns confirmation_token (10-min TTL) plus delta of newly-in-scope vs newly-out-of-scope sources. Databases and tables are off by default and are switched on here too: scope_type database or table, a table with its field choices in settings. Their estimate comes back as records: rows and name keys to build o
applyKgScopeChangecan modifyApply a previously previewed KG scope change. Atomically writes kg_scope rows and dispatches a re-ingest batch (batch_id = token). Databases and tables in the token are applied in the same step: their name keys are built from their own fields (no AI), and switching one off removes them. Idempotent. Rate limit 5/h.
previewKgRebuildPreview the cost / coverage / ETA of a full KG rebuild for the org (optionally narrowed to a workspace or project). Returns confirmation_token (10-min TTL). Rate limit 20/h.
triggerKgRebuildcan modifyApply a previously previewed KG rebuild. Dispatches the build batch via kg-rebuild and returns batch_id. Rate limit 5/h.
updateOrgSettingsUpdate an organisation's `settings` object via deep merge. Auth: ceiling â credential must hold can_admin_org AND user must be org owner/admin. Rate limit 30/min. Patches that touch `enabledFeatures` are rejected â use updateOrgFeatureFlags instead. Settings that Stable Baseline sets for the organisation are refused: `availableFeatures` (which features are available to it) and any plan limit o
createBrandKitCreate a per-org BRAND KIT so Stable Baseline outputs come out fully on-brand. Upload your branding and it is auto-applied: pass a `logoUrl` (as little as your logo, and the vision model AUTO-EXTRACTS your palette and fonts), or an `officeUrl` (an existing .pptx/.docx, from which it extracts theme colours, fonts, logo, watermark and the embedded font files), or explicit `tokens`. The kit themes br
listBrandKitsread-onlyList an organisation's BRAND KITS (palette/fonts/logo), newest first. Use a returned `id` as brandKitId for a design call or setDefaultBrandKit. Auth: can_admin_org.
setDefaultBrandKitSet or clear the default BRAND KIT at a scope: 'organization', 'workspace', 'project', 'folder' or 'document'. Defaults cascade most-specific-first, lowest level up: document beats the nearest folder up the (nested) folder chain beats project beats workspace beats organisation. Diagram brand theming, exports and decks all resolve through this cascade. Pass brandKitId:null to clear. Auth: org owner
updateOrgFeatureFlagsSwitch organisation modules on or off, one true or false a module: documents, plans, improvements, knowledge_graph, compliance, meeting_scribe, agents, databases, database_public_forms, customer_managed_keys, own_ai. getOrgSettings returns each module's current state. A module can be switched ON only when it is available to the organisation: its plan includes it (for example meeting_scribe needs P
updateUserPreferencesUpdate the calling user's preferences. Self-only. Rate limit 60/min. Partial: only fields supplied are updated. notifications upserts a single row; grids upserts per-row keyed by (user_id, project_id, grid_key, view_name).
startSignupBegin an agent-driven sign-up to Stable Baseline. Anonymous-callable. Returns a `verification_url` and a 6-character `user_code` that the agent must show to the user. The user opens the URL in their browser, signs in or signs up if necessary, enters the code, and clicks Authorise. The agent meanwhile polls `pollSignupStatus({device_code})` every `poll_interval_seconds` until the status changes to
pollSignupStatusread-onlyPoll the status of a signup begun via `startSignup`. Anonymous-callable. Possible status values: `pending` (the user has not authorised yet: keep polling), `authorized` (success: the response includes `api_key`, `organization_id`, `user_id`, `user_email`; the api_key is returned ONCE), `consumed` (already returned the api_key on a previous poll: stop polling), `denied` (the user clicked Deny), `ex
listAgentsread-onlyList the organisation agents you may use: named agents your organisation defined, each with its own scoped credential, a mandate and an approval level in `behaviour`: `confirm` (the default) proposes every change for approval, `confirm_destructive` edits without asking but proposes anything destructive, `autonomous` acts without asking inside its access. `allowAllTools` is true when the agent may
askAgentcan modifyAsk an organisation agent a question and get its answer with provenance (the documents, plans and items it read). The agent runs under its own scoped credential and acts for you, so it only reaches what it was granted AND what you may reach yourself through this credential. The question starts a background job and this call waits for it for up to `waitSeconds` (default 20, at most 45): an answer t
delegateToAgentcan modifyHand an organisation agent a brief (a piece of work, big or small) and get its job back. The job runs in the background, in steps, and this call waits for it for up to `waitSeconds` (default 20, at most 45): a job that settles in time comes back with its outcome and, once finished, its `receipt` (a short summary, counts of what changed, links, issues that need a person); otherwise you get `status:
Alternatives in Databases & Data
Compare →SASanityA
Direct access to your Sanity projects (content, datasets, releases, schemas) and agent rules
MAMCP AnalyticsA
A statistical analyst in your AI chat: bring data and a question, get a citable, re-runnable report.
BEBetterlyticsA
Query your Betterlytics web analytics from AI agents: traffic, funnels, journeys, errors, uptime.
KEKeboolaA
Connect your AI assistants to Keboola and expose your data, transformations, SQL queries, ...
ADAdsA
Manage Google, Meta, Amazon, TikTok, LinkedIn & ChatGPT ads. 430 tools for campaigns & analytics.
SDSTRING Database MCP ServerA
Query STRING interactions, enrichment, annotations, homology, and PPI networks.