Stable Baseline
The simplest, most complete, end-to-end agent-managed company brain.
Что умеет
- SearchTools: Search available tools by keyword or category. Returns matching tool names and descriptions.
- ListDiagramTypes: List supported diagram types. Use the returned `type` field when calling insertDiagramInDocument.
- GetDiagramTypeGuide: Get DSL writing instructions for a diagram type. Call before writing diagramCode.
Какие данные видит
Нужен ли аккаунт
Не нужен: сервер работает без входа
The simplest, most complete, end-to-end agent-managed company brain.
One workspace where humans and any MCP-compatible AI agent — Claude, Cursor, Windsurf, ChatGPT, Gemini, and more — co-author living documents (Markdown-native with a rich superset on top), 40+ visual diagrams (Mermaid, BPMN 2.0, D2, PlantUML, GraphViz, ELK, Excalidraw freehand), plans, timelines, tasks, improvements, and a self-learning Knowledge Graph that IS the company brain.
Lean, fast, secure, and affordable — flexible enough for one person organising a personal mind, through to small businesses, growing businesses, and enterprise.
163 MCP tools across 16 categories let an agent drive end-to-end: sign-up → billing → org/workspace/project → members → teams → permissions → brain scope → docs → diagrams → plans, all without a human touching the UI.
- Living documents: AI-native rich-text editor (CDMD = Markdown + inline diagrams, data tables, media, version history, real-time multi-author edits)
- Visual diagram creation & editing: 40+ types — AI-generated, diagram-as-code, or freehand
- Plans & timelines: Day/Week/Month/Quarter/Year zoom Gantt, drag-to-reschedule, dependencies, assignable to humans or agents
- Compliance Readiness (Enterprise): scans against OWASP ASVS, NIST SSDF, CIS Controls, ISO 27001, SOC 2, TISAX
- Bring-your-own-agent: Claude Code, Cursor, Windsurf, VS Code, Warp, OpenCode, Antigravity, OpenAI Codex, ChatGPT Developer Mode, Gemini CLI/Extensions
Auth: OAuth 2.1 with Dynamic Client Registration, or Bearer API key with prefix sta_ (mint at https://app.stablebaseline.io/settings/mcp-keys).
Docs: https://stablebaseline.io/docs/mcp · Sign up free: https://app.stablebaseline.io/signup
Built by Orixian Solutions Pty Ltd, Sydney, Australia.
Список инструментов сервера (60)
Технические названия из tools/list. Нужны только разработчикам.
| searchTools | Search available tools by keyword or category. Returns matching tool names and descriptions. |
| listDiagramTypes | List supported diagram types. Use the returned `type` field when calling insertDiagramInDocument. |
| getDiagramTypeGuide | Get DSL writing instructions for a diagram type. Call before writing diagramCode. |
| listArchitectureIcons | List icons for systemsarchitecture diagrams. Use returned iconPath as-is in D2 code (e.g. icon: dev/docker.svg). |
| getCdmdLanguageGuide | Get the CDMD markdown language specification. Call before createDocument if unfamiliar with syntax. |
| getCurrentUser | 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. |
| listAssignablePrincipals | Server-side searchable, paginated list of USERS and TEAMS that can be assigned as the owner of an improvement/task in a project. Returns two arrays — `users` (with user_id, display_name, email, avatar_url, has_explicit_permission) and `teams` (with team_id, name, member_count, has_explicit_permission). Sources: project-level grants + workspace members + organization members + members of teams granted access. Use BEFORE updateImprovement/updateTask when you need to discover an `owner_id` (kind='user') or `owner_team_id` (kind='team') by name. Supports `q` for ILIKE search on names/emails (users) or team names. Pass `kind='user'` or `kind='team'` to scope to a single section, or 'all' (default) for both. Pagination via limit (1-100, default 20) + offset. |
| listTeams | List teams in an organization, with optional search filter and an `includeMembers` flag that fans out to v_team_members in a single round-trip. 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. |
| getTeam | 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. |
| listOrganisations | List organisations you have access to. Supports query filtering by name/slug. |
| listWorkspaces | List workspaces you have access to. Supports query filtering by name/slug. |
| listProjects | List projects in a workspace. Supports query filtering by project name. |
| listFolders | List folders in a project. Use parentId for nested folders. For full tree, use getProjectHierarchy instead. |
| createFolder | Create a folder in a project. Supports nesting via parentId. |
| updateFolder | Update a folder (rename/move/reorder). Supports nesting changes via parentId. |
| deleteFolder | Delete a folder recursively, including all nested folders and documents. |
| listDocuments | List documents in a project, workspace, or folder. Supports query search and date filtering. |
| getProjectHierarchy | Get the complete folder and document tree for a project in one call. Recommended first call for navigation. |
| getFolderHierarchy | Get the folder and document tree starting from a specific folder. Alias for getProjectHierarchy with folderId. |
| getDocument | Read a document's content with line numbers. Returns numbered lines for use with editDocument. Diagrams/images appear as OMITTED markers with metadata (type, diagramId, nlDescription) — use getDiagramInDocument(diagramId) for full DSL code, or dedicated diagram/image tools to manage them. |
| createDocument | Create a document from CDMD markdown. Call getCdmdLanguageGuide first if unfamiliar with syntax. Do not include DIAGRAM/IMAGE markers — insert them after with dedicated tools. |
| editDocument | Edit a document with line-based patches. Call getDocument first for line numbers and versionTimestamp. Call getCdmdLanguageGuide if unfamiliar with CDMD syntax. Do not edit DIAGRAM/IMAGE markers manually — use dedicated diagram/image tools. |
| findAndReplaceTextInDocument | Find and replace text in a document. Searches for all occurrences and replaces them. Case-sensitive by default. Diagrams/images are automatically protected — only document text is affected. |
| getDiagramInDocument | 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, and versionTimestamp. |
| insertDiagramInDocument | Insert a new diagram into a document. Call listDiagramTypes to find your type, then getDiagramTypeGuide for DSL syntax before writing diagramCode. |
| updateDiagramInDocument | Update a diagram's code, description, or properties. Call getDiagramTypeGuide for DSL syntax. Requires documentVersionTimestamp from getDocument. IMPORTANT: To change what the diagram visually shows, you MUST provide diagramCode with the full updated DSL source. The prompt and nlDescription fields are metadata only and do NOT change the rendered diagram. |
| deleteDiagramInDocument | Delete a diagram from a document. |
| deleteDocument | Delete a document. |
| listDocumentVersions | List version history for a document. Returns timestamps, creator, change summary, and content. |
| getImageInDocument | Get image details including a fresh signed URL (expires after 1 hour). Use storagePath from IMAGE_OMITTED markers in getDocument output. |
| createImageUploadSession | Create a PUT upload URL for a document image (max 10MB). Use the returned assetUrl with insertImageInDocument. |
| insertImageInDocument | Insert an image into a document (max 10MB). Provide imageBase64, imageBinary, or imageUrl. For large files, call createImageUploadSession first then use the returned assetUrl. |
| updateImageInDocument | Update image metadata (alt, caption, dimensions, alignment). Requires documentVersionTimestamp from getDocument for optimistic locking. |
| deleteImageInDocument | Delete an image from a document and storage. |
| createVegaDataUploadSession | Create a PUT upload URL for a Vega/Vega-Lite data file. Use returned assetUrl in your Vega spec. |
| deleteVegaDataFile | Delete a data file attachment from a document. |
| createDocumentIngestSession | 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, projectId }) to start the conversion. The file is auto-deleted once the document is created. |
| createDocumentFromUpload | 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 file. Poll getDocumentIngestJob({ jobId }) to track progress. Idempotent: calling twice with the same sessionId returns the same job/document. |
| getDocumentIngestJob | 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, failed, cancelled. The associated document_id is populated immediately and progressively filled in as images are processed. |
| listImprovements | List improvements in a project. Supports filtering by status, type, priority, and query. |
| getImprovement | 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 locking. (For tasks specifically, use getTask + updateTask which are symmetric aliases.) |
| createImprovement | Create an improvement item in a project. Requires projectId and title. Auto-assigns friendly ID. |
| updateImprovement | Update an improvement (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) and `acceptance_criteria` (objects with per-row updated_by/at attribution). Requires versionTimestamp from getImprovement for optimistic locking. Status transitions: blocked needs blocked_comment, rejected needs rejection_comment, done needs completion_comment. Assignment: pass `owner_id=<uuid>` to assign to a user, `owner_team_id=<uuid>` to assign to a team (mutually exclusive — a DB CHECK constraint enforces this). To unassign, pass `owner_id=null` AND `owner_team_id=null`. To switch from a user owner to a team owner, send `owner_id=null, owner_team_id=<uuid>` in the SAME call (sending only one side leaves the stale value and triggers the XOR check). Use listAssignablePrincipals or listTeams to discover valid IDs. |
| deleteImprovement | Delete an improvement and all associated evidence and activity. |
| listImprovementCategories | List improvement categories for a project. Returns tree and flat list. |
| createImprovementCategory | Create an improvement category or sub-category. Max two levels. |
| updateImprovementCategory | Update an improvement category. Cannot modify system categories. |
| deleteImprovementCategory | Delete an improvement category. Cannot delete system categories. |
| reorderImprovementCategories | Reorder improvement categories by setting sort_order values. |
| addImprovementEvidence | Add evidence to an improvement. Types: document_section, diagram_node, incident_note, feedback, free_text. |
| addImprovementActivity | Add a comment or activity entry to an improvement. |
| updateImprovementComment | Update a comment on an improvement. Requires the comment's updated_at as versionTimestamp. |
| deleteImprovementComment | Delete a comment from an improvement. |
| searchImprovements | Search improvements using hybrid text + semantic search. Returns ranked results. |
| listPlans | List plans in a project. Supports filtering by status, priority, and query. |
| getPlan | Get full plan details including phases, items, and activity. Returns versionTimestamp — pass it to updatePlan for optimistic locking. Items include percent_complete for progress tracking. |
| createPlan | Create a plan in a project. Requires projectId and title. |
| updatePlan | Update a plan. Requires versionTimestamp from getPlan. |
| deletePlan | Delete a plan, all its phases, and all tasks/improvements within it. This is a destructive operation that cannot be undone. |
| listPlanPhases | List phases for a plan ordered by position. |