此 MCP 可以做什么
Manages company documents, knowledge graphs, whiteboards, projects, plans, tasks, teams, and improvement workflows.
工具
输入模式
{'type': 'object', 'required': ['improvementId'], 'properties': {'improvementId': {'type': 'string', 'description': 'The successor item whose suggestion to apply.'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'applied': {'type': 'boolean', 'description': 'True when the apply call has been atomically committed.'}}}
输入模式
{'type': 'object', 'required': ['improvementId'], 'properties': {'comment': {'type': 'string', 'description': 'Comment text.'}, 'metadata': {'type': 'object', 'description': 'Additional context.'}, 'newValue': {'type': 'string', 'description': 'For field_change: new value.'}, 'oldValue': {'type': 'string', 'description': 'For field_change: previous value.'}, 'fieldName': {'type': 'string', 'description': 'For field_change: field name.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'activityType': {'type': 'string', 'description': 'Type: comment, agent_update, field_change. Default: comment.'}, 'improvementId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'activity': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['improvementId', 'summary'], 'properties': {'refId': {'type': 'string', 'description': 'Reference ID (document, diagram, etc.).'}, 'refUrl': {'type': 'string', 'description': 'Reference URL.'}, 'summary': {'type': 'string', 'description': 'Summary of the evidence.'}, 'position': {'type': 'number', 'description': 'Order in evidence list.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'rawContent': {'type': 'string', 'description': 'Full original text.'}, 'evidenceType': {'type': 'string', 'description': 'Evidence type. Default: free_text.'}, 'improvementId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'evidence': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['planId'], 'properties': {'planId': {'type': 'string'}, 'comment': {'type': 'string', 'description': 'Comment text.'}, 'metadata': {'type': 'object', 'description': 'Additional context.'}, 'newValue': {'type': 'string', 'description': 'For field_change: new value.'}, 'oldValue': {'type': 'string', 'description': 'For field_change: previous value.'}, 'fieldName': {'type': 'string', 'description': 'For field_change: field name.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'activityType': {'type': 'string', 'description': 'Type: comment, agent_update, field_change. Default: comment.'}}}
输出模式
{'type': 'object', 'properties': {'activity': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['team_id', 'user_id'], 'properties': {'team_id': {'type': 'string'}, 'user_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'team': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['documentId', 'shapes'], 'properties': {'shapes': {'type': 'array', 'items': {'type': 'object', 'properties': {'x': {'type': 'number', 'description': "Top-left x on the canvas. OMIT both x and y to auto-place this element in clear empty space below the board's existing content. Strongly preferred when adding a note/shape to a board that already has content: a guessed coordinate usually lands ON TOP of existing shapes (the 'added a sticky but can't see it' bug). Set x/y only for deliberate layout among shapes you add in this same call."}, 'y': {'type': 'number', 'description': 'Top-left y on the canvas. Omit together with x to auto-place (see x).'}, 'id': {'type': 'string', 'description': "Optional id so connectors (arrows/lines) can reference this shape via start/end. On a type:'stencil' it adds a transparent bindable anchor covering the stencil, so an arrow's start/end {id} connects to the whole stencil as a unit."}, 'end': {'type': 'object', 'description': 'For arrows/lines: { id } of the target shape.'}, 'pack': {'type': 'string', 'description': "For type:'stencil' â\x80\x94 optional pack to disambiguate a fuzzy `stencil` match (e.g. 'Flowchart', 'BPMN', 'UML & ER', 'Scrum Board')."}, 'rows': {'type': 'array', 'items': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'number'}]}}, 'description': "For type:'table' â\x80\x94 data rows; each row is an array of cell values (string|number) aligned to columns, e.g. [['T-1','Sam','Done'],['T-2','Lee','WIP']]."}, 'text': {'type': 'string', 'description': "Label/caption. To label a shape, set `text` on the SHAPE itself â\x80\x94 it becomes a BOUND label that the server word-wraps with real font metrics, auto-fits, and positions (centred by default) INSIDE the shape. Never drop a separate type:'text' element on top of a shape, and never hand-compute a label's x/y/width â\x80\x94 the server does the geometry (like the editor does when you type into a shape). On a type:'sticky' it's the note text; on a type:'stencil' of kind 'symbol' it fills + re-fits its single label (IGNORED for 'template' stencils â\x80\x94 customise their children by id instead). Use a standalone type:'text' only for free-floating text that belongs to no shape."}, 'type': {'enum': ['rectangle', 'ellipse', 'diamond', 'sticky', 'text', 'arrow', 'line', 'freedraw', 'doodle', 'frame', 'image', 'stencil', 'chart', 'table'], 'type': 'string', 'description': "Element kind. 'sticky' = a first-class sticky/post-it note (solid fill + auto-fitting bound label; set text + backgroundColor) â\x80\x94 use this for sticky notes, NOT a stencil. 'stencil' = a hand-drawn library graphic from listWhiteboardStencils, of kind 'symbol' (one atomic labelled node â\x80\x94 flowchart box, BPMN task, org node: set `id` + `text` + width/height, text auto-fits, connect arrows via start/end {id}) or 'template' (a multi-element layout â\x80\x94 Alerts, Forms, Tables, Charts: place whole, then customise its returned children by id; do NOT set a single `text`). Set `stencil` (fuzzy name, one call) or `stencilKey` (exact). 'image' with `iconPath` = a software-architecture icon from listArchitectureIcons. 'chart' = a NATIVE, fully-editable data chart (column/bar/line/area/pie/donut/scatter/sparkline/combo/stackedColumn/groupedColumn/radar/gauge) built from real Excalidraw shapes â\x80\x94 bars/lines/wedges plus axes, gridlines and a legend â\x80\x94 for ANY data, metric, KPI, trend, comparison or breakdown: set chartType + series (+ categories + options). ALWAYS prefer a 'chart' over hand-drawing bars/lines or a wireframe 'chart' stencil. 'table' = a NATIVE, fully-editable GRID (real rectangles + bound, word-wrapped cells, auto-sized columns + rows, a header band, optional zebra striping / per-column colours) for ANY tabular data, list or matrix â\x80\x94 set columns + rows (+ options). ALWAYS prefer a 'table' over hand-drawing a grid of boxes. Reserve rectangle/ellipse/diamond for when no standard form fits."}, 'scale': {'type': 'number', 'description': "For type:'stencil' â\x80\x94 uniform scale factor for the whole stencil (alternative to width/height)."}, 'start': {'type': 'object', 'description': 'For arrows/lines: { id } of the source shape (auto-clips to the edge + auto-routes around shapes in between).'}, 'title': {'type': 'string', 'description': "For type:'chart' â\x80\x94 the chart's title, drawn at the top of the chart."}, 'width': {'type': 'number', 'description': "Shape width; for type:'stencil' it scales the whole stencil to fit this width."}, 'doodle': {'type': 'string', 'description': "For type:'doodle' â\x80\x94 a named hand-drawn accent rendered as a freehand stroke (no points needed): 'underline' | 'wave' | 'arrow' | 'check' | 'bolt' | 'scribble' | 'star' | 'sparkle' | 'circle' (a ring to encircle/emphasise) | 'heart'. Size it with x/y + width/height and colour it with strokeColor. Great for sketchy emphasis (underline a title, circle a stat, a star/sparkle accent)."}, 'height': {'type': 'number', 'description': "Shape height; for type:'stencil' it scales the whole stencil to fit this height."}, 'series': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': "For type:'chart' â\x80\x94 one or more data series. Each: { name:string, data:number[], type?:'bar'|'line'|'area' (per-series, for combo), color?:string (hex), axis?:'left'|'right' (dual axis), markers?:boolean (line point markers) }. For pie/donut use ONE series whose data maps to categories."}, 'columns': {'type': 'array', 'items': {'oneOf': [{'type': 'string'}, {'type': 'object'}]}, 'description': "For type:'table' â\x80\x94 column headers: string[] (e.g. ['Task','Owner','Status']) or [{ header:string, width?:number, align?:'left'|'center'|'right' }]."}, 'fitText': {'type': 'boolean', 'description': "Auto-shrink the bound label's font size so the text always fits inside the shape â\x80\x94 no overflow (default true). Set false to keep your exact fontSize even if it spills."}, 'groupId': {'type': 'string', 'description': "Join an existing group. Pass a placed stencil's `groupId` (returned in the placement result) on a type:'text' or shape spec to FILL that frame as part of the same unit â\x80\x94 the text then moves, duplicates and renders together with the frame (e.g. a title in a UML class box's top band, members in its body)."}, 'options': {'type': 'object', 'description': "For type:'chart' â\x80\x94 { legend?:boolean|'top'|'bottom'|'right', gridlines?:boolean|'x'|'y'|'both'|'none', dataLabels?:boolean, yAxis?:boolean, xAxis?:boolean, yMin?:number, yMax?:number, smooth?:boolean, valueFormat?:'%'|'$'|'k', palette?:string[] (hex), donutHole?:number }. For type:'table' â\x80\x94 { headerFill?:string (hex), headerTextColor?:string, zebra?:boolean, rowFill?:string, altRowFill?:string, columnColors?:string[] (per-column hex), fontSize?:number, headerFontSize?:number, borderColor?:string, align?:'left'|'center'|'right' }.", 'additionalProperties': True}, 'stencil': {'type': 'string', 'description': "For type:'stencil' â\x80\x94 fuzzy-match a library stencil by name in ONE call, no prior listWhiteboardStencils needed (e.g. 'decision', 'actor', 'phone frame', 'kanban column'). NOTE: there is no sticky-note stencil â\x80\x94 use type:'sticky' for sticky/post-it notes."}, 'fontSize': {'type': 'number', 'description': "Text size in px. Establish HIERARCHY: titles ~28-40, section headings ~22-28, body/labels ~16-20. Applies to a standalone text, a shape's bound label, a sticky, or an icon caption. Bound labels still auto-shrink to fit unless fitText:false."}, 'iconPath': {'type': 'string', 'description': "For type:'image' â\x80\x94 a software-architecture icon path from listArchitectureIcons (e.g. 'dev/docker.svg')."}, 'imageUrl': {'type': 'string', 'description': "For type:'image' â\x80\x94 any other public image URL (use iconPath for curated architecture icons)."}, 'chartType': {'enum': ['column', 'bar', 'line', 'area', 'pie', 'donut', 'scatter', 'sparkline', 'combo', 'stackedColumn', 'groupedColumn', 'radar', 'gauge'], 'type': 'string', 'description': "For type:'chart' â\x80\x94 the chart family. column=vertical bars (default), bar=horizontal bars, line/area=trends, pie/donut=parts-of-whole, scatter=points, sparkline=tiny inline trend (no axes/legend), combo=bars+line (dual axis via a series with axis:'right'), stackedColumn/groupedColumn=multi-series, radar, gauge."}, 'textAlign': {'enum': ['left', 'center', 'right'], 'type': 'string', 'description': "Horizontal alignment of the text within its box â\x80\x94 the equivalent of the toolbar's align buttons. Bound labels default to 'center'."}, 'categories': {'type': 'array', 'items': {'type': 'string'}, 'description': "For type:'chart' â\x80\x94 x-axis category labels, e.g. ['Jan','Feb','Mar','Apr']."}, 'customData': {'type': 'object', 'description': "Arbitrary Excalidraw customData stored on the element (e.g. a slide frame's { deckId } so a board frame resolves back to its source deck). Merged with any builder-set customData.", 'additionalProperties': True}, 'fontFamily': {'type': 'string', 'description': "Font style: 'hand-drawn' (sketchy Excalidraw look, the default), 'sans' (clean/professional â\x80\x94 use for business, dashboards, formal diagrams), or 'code' (monospace). Pass this to control the look instead of leaving everything hand-drawn."}, 'stencilKey': {'type': 'string', 'description': "For type:'stencil' â\x80\x94 exact stencil key from listWhiteboardStencils (takes precedence over `stencil`)."}, 'strokeColor': {'type': 'string', 'description': "TEXT colour (for text/labels) or line/border colour (for shapes, arrows, lines, doodles): a name ('blue'/'green'/'red'/'orange'/'violet'/'teal'/â\x80¦) or a hex value. Use a brand or theme colour for titles/emphasis; default is near-black."}, 'verticalAlign': {'enum': ['top', 'middle', 'bottom'], 'type': 'string', 'description': "Vertical alignment of a bound label inside its shape (toolbar parity). Defaults to 'middle' (centred)."}, 'backgroundColor': {'type': 'string', 'description': "Fill colour: a name ('blue'/'green'/'yellow'/'pink'/'violet'/'orange'/'teal'/â\x80¦) or a hex value."}}, 'additionalProperties': True}, 'minItems': 1, 'description': 'Non-empty array of shape specs to append. Prefer stencils / sticky notes / architecture icons over raw rectangles wherever a standard form fits (see the `type` enum below and the tool description).'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'documentId': {'type': 'string'}, 'rerouteConnectors': {'type': 'boolean', 'description': 'Optional. Arrows and lines bound to a shape at BOTH ends (start.id and end.id) are always routed around the other shapes on the board unless you give them points. true: ignore the points you gave for such connectors and route them too. Omit to keep the points you supply.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['workspace_id', 'user_id', 'workspace_role'], 'properties': {'user_id': {'type': 'string', 'description': 'Must already be an active organisation member.'}, 'workspace_id': {'type': 'string'}, 'workspace_role': {'enum': ['owner', 'admin', 'editor', 'viewer'], 'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'member': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['confirmation_token'], 'properties': {'confirmation_token': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'applied': {'type': 'boolean', 'description': 'True when the apply call has been atomically committed.'}}}
输入模式
{'type': 'object', 'required': ['confirmation_token'], 'properties': {'confirmation_token': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'applied': {'type': 'boolean', 'description': 'True when the apply call has been atomically committed.'}}}
输入模式
{'type': 'object', 'required': ['planId'], 'properties': {'planId': {'type': 'string', 'description': 'Plan to reschedule.'}, 'forwardOnly': {'type': 'boolean', 'description': 'When true, only shift items currently in violation â\x80\x94 never pull already-valid items to an earlier slot. Default false for backwards compat with the manual Auto-schedule button.'}, 'pinnedItemIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Item IDs to keep at their current dates (typical: the item you just updated).'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'applied': {'type': 'boolean', 'description': 'True when the apply call has been atomically committed.'}}}
输入模式
{'type': 'object', 'required': ['goal'], 'properties': {'goal': {'type': 'string', 'description': 'The board to build, in plain language.'}, 'title': {'type': 'string', 'description': "Optional board title. If omitted, a clear title is derived from the goal (the board is never left 'Untitled'). When designing into an existing 'Untitled' board, the derived/explicit title replaces the placeholder."}, 'confirm': {'type': 'boolean', 'description': 'Set true ONLY after the user has approved the 50-credit cost. Leave unset/false on the first call to receive the cost quote + balance.'}, 'projectId': {'type': 'string', 'description': 'The project to create the whiteboard in, when no documentId is given.'}, 'brandKitId': {'type': 'string', 'description': "Optional brand kit id (from listBrandKits) to theme a branded-executive deck. If omitted, the org's built-in default is used. Create one from just a logo (or a .pptx/.docx) via createBrandKit."}, 'documentId': {'type': 'string', 'description': 'Optional. An existing whiteboard to design into. If omitted, a new whiteboard is created in projectId.'}, 'designProfile': {'enum': ['standard', 'branded-executive', 'illustrated', 'image', 'agentic', 'agentic-deck'], 'type': 'string', 'description': "Optional. 'standard' (default) = the general multi-agent design. 'agentic' = an AI-chat-style agentic slide composer that drives the whiteboard tools and self-corrects from renders, composing ONE polished slide. 'agentic-deck' = the same agentic composer run over a planned storyline, building a multi-slide deck (each slide on its own frame, tiled left to right). 'branded-executive' = an on-brand, McKinsey-style editable SLIDE DECK themed by the org's brand kit (pair with brandKitId, or omit for the org default). 'illustrated' = an editable-illustration board: a rich text-free vector illustration with real editable text labels and leader lines placed on top. 'image' = a single polished, on-brand IMAGE board with all the text baked into the picture (no editable shapes), which the user then refines with AI mask edits. Every profile is available to every organisation; the flat credit fee is the only gate."}, 'sourceTranscript': {'type': 'object', 'properties': {'text': {'type': 'string', 'description': 'The raw transcript text to design from (pasted). Provide this OR documentId, not both.'}, 'documentId': {'type': 'string', 'description': 'The id of a Stable Baseline document holding the meeting transcript/notes to design from.'}}, 'description': "Design the board from a meeting transcript (exactly one of documentId or text). When set, the board is built as a 'meeting map' (topics, decisions, actions) from the transcript instead of from the goal alone. This mode is billed by transcript LENGTH â\x80\x94 2 credits per minute of transcript (10-minute minimum), not the flat 50; the first (unconfirmed) call returns the exact cost to relay to the user."}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'project_id': {'type': 'string'}, 'organisation_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'cancelled': {'type': 'object', 'description': 'Counts of cancelled runs / demoted chunks.'}}}
输入模式
{'type': 'object', 'required': ['invitation_id'], 'properties': {'invitation_id': {'type': 'string', 'description': 'Invitation UUID. Server resolves the organisation from this row.'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['batch_id'], 'properties': {'batch_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}}}
输入模式
{'type': 'object', 'required': ['confirmation_token'], 'properties': {'confirmation_token': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'cancellation': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['organizationId', 'name'], 'properties': {'name': {'type': 'string', 'description': 'Display name (e.g. the brand/company name).'}, 'tokens': {'type': 'object', 'description': "Explicit DTCG brand tokens { color:{brand:{primary,primaryText,ink,bg,surface,muted,border,positive,warning,negative,accentHover?,accentActive?}}, font:{heading,body} }. EXTENDED CAPTURE (all optional; captured values replace derivation heuristics in deck/document theming): structure:{typeScalePx:[..], leadingBody, leadingTight, trackingDisplayEm, spacingPx:[..], radiusPx:{sm,md,lg}, elevation:'flat'|'ring'|'soft'|'raised'}, motion:{speed:'snappy'|'standard'|'stately', easing:'cubic-bezier(..)'}, voice:{tone, notes}, imagery:{style, notes}, antiPatterns:['never ..']. Omit tokens entirely to extract from logoUrl/officeUrl.", 'additionalProperties': True}, 'logoUrl': {'type': 'string', 'description': 'Image URL of the logo to extract palette/fonts from (PNG/JPG/SVG). Omit if passing officeUrl or tokens.'}, 'guidance': {'type': 'string', 'description': "Optional extra guidance for the extractor (e.g. 'use the teal, not the grey')."}, 'officeUrl': {'type': 'string', 'description': 'URL of an existing .pptx or .docx to extract the brand from (theme colours + fonts + logo + watermark + embedded fonts). Max 25MB. Omit if passing logoUrl or tokens.'}, 'organizationId': {'type': 'string', 'description': 'Org that owns the kit.'}, 'setDefaultScope': {'enum': ['organization', 'workspace', 'project'], 'type': 'string', 'description': 'Optionally set the new kit as default at this scope.'}, 'setDefaultScopeId': {'type': 'string', 'description': 'Workspace/project id when setDefaultScope is workspace/project.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['projectId'], 'properties': {'cdmd': {'type': 'string', 'description': 'Document body in CDMD markdown. Alias: content.'}, 'title': {'type': 'string'}, 'content': {'type': 'string', 'description': 'Alias for cdmd â\x80\x94 provide one of the two.'}, 'folderId': {'type': 'string'}, 'position': {'type': 'number', 'description': 'Sort position within the parent folder (or project root if no folderId). When omitted, the document is appended at the end.'}, 'projectId': {'type': 'string'}, 'changeSummary': {'type': 'string', 'description': 'Version history summary.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'document': {'type': 'object', 'description': 'The document after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['sessionId', 'projectId'], 'properties': {'title': {'type': 'string', 'description': "Optional document title. Defaults to the upload's filename without extension."}, 'folderId': {'type': 'string', 'description': 'Optional folder. Must belong to projectId.'}, 'projectId': {'type': 'string', 'description': 'Must match the project the session was created for.'}, 'sessionId': {'type': 'string', 'description': 'From createDocumentIngestSession.'}, 'changeSummary': {'type': 'string', 'description': 'Optional changelog message for the version snapshot taken when the ingest finalises.'}}}
输出模式
{'type': 'object', 'properties': {'job_id': {'type': 'string'}, 'status': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['projectId', 'fileName', 'mimeType'], 'properties': {'fileName': {'type': 'string', 'description': 'Original filename, e.g. report.pdf.'}, 'folderId': {'type': 'string', 'description': 'Optional folder to drop the document into. Must belong to projectId.'}, 'mimeType': {'type': 'string', 'description': 'One of: application/pdf, application/vnd.openxmlformats-officedocument.wordprocessingml.document (DOCX), text/plain, text/markdown.'}, 'projectId': {'type': 'string', 'description': 'Target project for the resulting document.'}, 'sizeBytes': {'type': 'number', 'description': 'Optional file size hint in bytes. Rejected up-front if it exceeds 150 MB.'}}}
输出模式
{'type': 'object', 'properties': {'expires_at': {'type': 'string'}, 'upload_url': {'type': 'string'}, 'ingest_token': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['projectId', 'name'], 'properties': {'name': {'type': 'string'}, 'parentId': {'type': 'string'}, 'position': {'type': 'number'}, 'projectId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'folder': {'type': 'object', 'description': 'The folder after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['documentId', 'fileName', 'mimeType'], 'properties': {'sha256': {'type': 'string', 'description': 'Optional SHA-256 hex digest.'}, 'fileName': {'type': 'string', 'description': 'Original filename (e.g. screenshot.png).'}, 'mimeType': {'type': 'string', 'description': 'Image MIME type (e.g. image/png).'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'documentId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'expires_at': {'type': 'string'}, 'upload_url': {'type': 'string'}, 'object_path': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['projectId', 'title'], 'properties': {'type': {'type': 'string', 'description': "Type. Default: enhancement. One of: feature (New capability for users); enhancement (An improvement to something that already exists); bug (Something that does not work as it should); tech_debt (Work that makes the system easier and safer to change); architecture_gap (A missing or weak part of the architecture); documentation_gap (Documentation that is missing or out of date); risk (Something that could go wrong, to track and reduce); epic (A large body of work, delivered through several stories, features or tasks); user_story (A need told from a user's view: as a role, I want a goal, so that a benefit); requirement (A condition or capability the solution must meet, stated so it can be verified); test_case (Steps that verify a requirement or story, each with its expected result); spike (Time-boxed research to answer a question before committing to the work); task (A unit of work in a plan). Despite the tool's name there is no 'improvement' value: pass it and it is accepted as an alias for 'enhancement', which is also the default. Setting type='task' makes the row a task; any other type makes it a non-task item. The id's prefix follows the type: epic EPIC-, user_story STY-, requirement REQ-, test_case TC-, spike SPK-, task TAS-; every other type IMP-. The number is shared by every type and never changes: a type change rewrites only the prefix (STY-30 becomes IMP-30), and the old id still resolves. Types with fields of their own (epic, user_story, requirement, test_case, spike) take them in details."}, 'title': {'type': 'string'}, 'fields': {'type': 'array', 'items': {'type': 'string', 'maxLength': 64}, 'maxItems': 50, 'description': 'Optional. Answer with only these fields instead of the whole improvement, for example ["id", "versionTimestamp"]. Any of the improvement\'s own fields (snake_case or camelCase) or of the keys around it in the full answer (versionTimestamp, href and, where present, url, title, trackingId, message). The id is always returned, and so is any notice that needs your attention (a note, such as a phase\'s dates following its tasks or an item\'s id changing with its type, and a date change\'s cascadePreview). Unknown names are ignored.'}, 'source': {'type': 'string', 'description': 'Source (e.g. human_manual, agent_review).'}, 'status': {'enum': ['captured', 'triaging', 'shaped', 'approved', 'ready_for_agent', 'in_progress', 'ready_for_review', 'in_review', 'blocked', 'done', 'rejected', 'deferred'], 'type': 'string', 'description': 'Initial status. Default: captured.'}, 'details': {'type': 'object', 'properties': {'as_a': {'type': ['string', 'null'], 'maxLength': 500, 'description': 'As a (role or persona)'}, 'i_want': {'type': ['string', 'null'], 'maxLength': 500, 'description': 'I want (what they want to do)'}, 'source': {'type': ['string', 'null'], 'maxLength': 500, 'description': 'Source (A stakeholder, regulation or document)'}, 'so_that': {'type': ['string', 'null'], 'maxLength': 500, 'description': 'So that (the benefit to them)'}, 'timebox': {'type': ['string', 'null'], 'maxLength': 500, 'description': 'Timebox (e.g. 3 days)'}, 'findings': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Findings (What was learned, and the recommendation...)'}, 'question': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Question (What does this spike need to find out?)'}, 'rationale': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Rationale (Why it is needed...)'}, 'statement': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Requirement (The system shall...)'}, 'test_data': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Test Data (Inputs, accounts or records the steps use...)'}, 'test_steps': {'type': ['array', 'null'], 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'maxLength': 64, 'description': 'Optional; minted if omitted. Echo it back on the steps you keep.'}, 'action': {'type': 'string', 'maxLength': 4000, 'description': 'What the tester does.'}, 'expected': {'type': 'string', 'maxLength': 4000, 'description': 'What should happen.'}}}, 'maxItems': 200, 'description': 'Test Steps, in order. The list you send REPLACES the stored one.'}, 'last_result': {'enum': ['not_run', 'passed', 'failed', 'blocked', None], 'type': ['string', 'null'], 'description': 'Last Result'}, 'last_run_on': {'type': ['string', 'null'], 'description': 'Last Run, YYYY-MM-DD.'}, 'story_points': {'type': ['number', 'null'], 'maximum': 1000, 'minimum': 0, 'description': 'Story Points (e.g. 3)'}, 'preconditions': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Preconditions (What must be true before the test starts...)'}, 'requirement_kind': {'enum': ['functional', 'non_functional', 'interface', 'data', 'business_rule', 'constraint', 'compliance', None], 'type': ['string', 'null'], 'description': 'Kind'}, 'success_measures': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Success Measures (How will you know this epic delivered its outcome?)'}, 'verification_method': {'enum': ['test', 'inspection', 'analysis', 'demonstration', None], 'type': ['string', 'null'], 'description': 'Verified By'}}, 'description': "The type's own fields. On update they MERGE key by key: keys you leave out are kept and null removes one. epic: success_measures. user_story: as_a, i_want, so_that (read as 'As a <as_a>, I want <i_want>, so that <so_that>') and story_points. requirement: statement ('The system shall...'), requirement_kind, rationale, source, verification_method. test_case: preconditions, test_steps (ordered { action, expected }), test_data, last_result, last_run_on. spike: question, timebox, findings. An item keeps its details when its type changes."}, 'is_task': {'type': 'boolean', 'description': "Mark as task. Default: false. Prefer setting type='task' instead: is_task is kept in sync from the type by a DB trigger, and the friendly id's prefix follows the type too (see type)."}, 'plan_id': {'type': 'string', 'description': 'Link to a plan.'}, 'urgency': {'type': 'string', 'description': 'e.g. this_week, this_month, this_quarter.'}, 'why_now': {'type': 'string'}, 'end_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'metadata': {'type': 'object', 'description': 'Free-form JSON stored alongside the item. On updateImprovement this MERGES rather than replaces.'}, 'owner_id': {'type': 'string', 'description': "User UUID to assign as the owner. MUTUALLY EXCLUSIVE with owner_team_id â\x80\x94 set one or the other, never both. Use listAssignablePrincipals(projectId, kind='user', q='â\x80¦') to look up valid user UUIDs."}, 'phase_id': {'type': 'string', 'description': 'Assign to a phase.'}, 'priority': {'type': 'string', 'description': 'Priority. Default: medium.'}, 'wbs_code': {'type': 'string', 'description': 'Work breakdown structure code.'}, 'checklist': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string', 'description': 'Optional â\x80\x94 server mints one if omitted. Preserve on edits.'}, 'text': {'type': 'string'}, 'due_date': {'type': 'string', 'description': 'Optional YYYY-MM-DD; null to clear.'}, 'completed': {'type': 'boolean', 'description': 'true = ticked, false/omitted = not done. Server stamps timestamp + actor.'}, 'updated_at': {'type': 'string', 'description': 'Server-stamped. Echo back unchanged; ignored on new rows.'}, 'updated_by': {'type': 'string', 'description': 'Server-stamped user id. Echo back unchanged.'}, 'completed_at': {'type': 'string', 'description': 'Server-stamped ISO timestamp. Prefer `completed`; an explicit value here wins if both are sent.'}, 'completed_by': {'type': 'string', 'description': 'Server-stamped user id. Echo back unchanged.'}, 'updated_by_credential_name': {'type': 'string', 'description': 'Server-stamped credential label. Echo back unchanged.'}, 'completed_by_credential_name': {'type': 'string', 'description': 'Server-stamped credential label. Echo back unchanged.'}}}, 'description': 'Tick-box checklist shown above acceptance_criteria. The full array REPLACES the stored list on update, and array order = display order â\x80\x94 to edit, fetch via getTask/getImprovement, modify, and send back the whole list. Operations: mark done with `completed: true`; un-mark with `completed: false`; add rows by appending `{ text }` (id is auto-minted); remove by omitting; reorder by rearranging. Echo back each existing `id` you keep so per-row attribution (who added/completed it, when) survives.'}, 'non_goals': {'type': 'array', 'items': {'type': 'string'}}, 'projectId': {'type': 'string'}, 'start_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'agent_brief': {'type': 'string'}, 'agent_ready': {'type': 'boolean'}, 'category_id': {'type': 'string', 'description': 'Category ID.'}, 'constraints': {'type': 'array', 'items': {'type': 'string'}}, 'description': {'type': 'string'}, 'target_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'user_impact': {'type': 'string'}, 'parentItemId': {'type': 'string', 'maxLength': 64, 'description': "The work item this one belongs to in the work hierarchy: an epic for a story, a story for its tasks or test cases. Any item in the same project, in any plan or phase. Not the plan outline nesting, which setPlanItemParent sets. Give its UUID or friendly id (such as IMP-12 or TAS-3). Rules: the same project; no loops (an item cannot sit inside its own children); at most 5 levels, counting this item's own children."}, 'owner_team_id': {'type': 'string', 'description': "Team UUID to assign as the owner (assigns the whole team rather than an individual). MUTUALLY EXCLUSIVE with owner_id. Use listTeams(workspaceId) or listAssignablePrincipals(projectId, kind='team') to look up valid team UUIDs."}, 'relationships': {'type': 'object', 'description': 'Free-form JSON for logical links: blocks, blocked_by, duplicates, supersedes, relates_to (arrays of item IDs).'}, 'source_channel': {'type': 'string'}, 'business_impact': {'type': 'string'}, 'desired_outcome': {'type': 'string'}, 'agent_complexity': {'type': 'string', 'description': 'low, medium, high, very_high.'}, 'agent_confidence': {'type': 'number', 'description': '0.00 to 1.00.'}, 'percent_complete': {'type': 'number', 'description': 'Progress percentage (0-100). Null means not tracked.'}, 'impacted_diagrams': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Array of {id, name}.'}, 'problem_statement': {'type': 'string'}, 'agent_missing_info': {'type': 'array', 'items': {'type': 'string'}}, 'impacted_documents': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Array of {id, title}.'}, 'acceptance_criteria': {'type': 'array', 'items': {'anyOf': [{'type': 'string', 'description': 'Shorthand for `{ text: "..." }`.'}, {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string', 'description': 'Optional â\x80\x94 server mints one if omitted. Preserve on edits.'}, 'text': {'type': 'string'}, 'updated_at': {'type': 'string', 'description': 'Server-stamped. Echo back unchanged; ignored on new rows.'}, 'updated_by': {'type': 'string', 'description': 'Server-stamped user id. Echo back unchanged.'}, 'updated_by_credential_name': {'type': 'string', 'description': 'Server-stamped credential label. Echo back unchanged.'}}}]}, 'description': 'Acceptance criteria â\x80\x94 ordered list of pass/fail statements that define "done" for this item. Each row is `{ id, text }` with server-stamped `updated_at / updated_by / updated_by_credential_name`. REPLACES the whole array on update. Echo back existing `id`s on rows you keep so attribution stamps survive. Bare strings are accepted for convenience (e.g. `["row 1", "row 2"]`) and auto-converted to `{ id, text }`.'}, 'impacted_components': {'type': 'array', 'items': {'type': 'string'}}, 'linked_document_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Document IDs to link. Titles resolved automatically.'}, 'impacted_repositories': {'type': 'array', 'items': {'type': 'string'}}, 'agent_recommended_action': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'improvement': {'type': 'object', 'description': 'The improvement after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['projectId', 'name'], 'properties': {'icon': {'type': 'string', 'description': 'Lucide icon name.'}, 'name': {'type': 'string'}, 'slug': {'type': 'string', 'description': 'URL-friendly slug. Auto-generated if omitted.'}, 'color': {'type': 'string', 'description': 'Color code.'}, 'parentId': {'type': 'string', 'description': 'Parent category ID for sub-categories.'}, 'projectId': {'type': 'string'}, 'sortOrder': {'type': 'number', 'description': 'Sort order. Default: 0.'}, 'description': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'category': {'type': 'object', 'description': 'The category after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Display name.'}, 'description': {'type': 'string', 'maxLength': 2000, 'description': 'Optional free-text description.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'organisation': {'type': 'object', 'description': 'The organisation after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['projectId', 'title'], 'properties': {'icon': {'type': 'string', 'description': 'Lucide icon name.'}, 'color': {'type': 'string', 'description': 'Color code.'}, 'title': {'type': 'string'}, 'fields': {'type': 'array', 'items': {'type': 'string', 'maxLength': 64}, 'maxItems': 50, 'description': 'Optional. Answer with only these fields instead of the whole plan, for example ["id", "versionTimestamp"]. Any of the plan\'s own fields (snake_case or camelCase) or of the keys around it in the full answer (versionTimestamp, href and, where present, url, title, trackingId, message). The id is always returned, and so is any notice that needs your attention (a note, such as a phase\'s dates following its tasks or an item\'s id changing with its type, and a date change\'s cascadePreview). Unknown names are ignored.'}, 'status': {'enum': ['draft', 'planning', 'active', 'on_hold', 'completed', 'cancelled'], 'type': 'string', 'description': 'Status. Default: draft.'}, 'end_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'priority': {'type': 'string', 'description': 'Priority. Default: medium.'}, 'projectId': {'type': 'string'}, 'start_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'description': {'type': 'string'}, 'linked_documents': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Array of {id, title}.'}, 'linked_document_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Document IDs to link.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'plan': {'type': 'object', 'description': 'The plan after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['planId', 'name'], 'properties': {'name': {'type': 'string'}, 'color': {'enum': ['#3b82f6', '#f59e0b', '#8b5cf6', '#ec4899', '#06b6d4', '#14b8a6', '#6366f1', '#6b7280'], 'type': 'string', 'description': 'Phase color. Must be one of: #3b82f6 (Blue), #f59e0b (Amber), #8b5cf6 (Purple), #ec4899 (Pink), #06b6d4 (Cyan), #14b8a6 (Teal), #6366f1 (Indigo), #6b7280 (Gray). Red and green are reserved for blocked / done item statuses.'}, 'fields': {'type': 'array', 'items': {'type': 'string', 'maxLength': 64}, 'maxItems': 50, 'description': 'Optional. Answer with only these fields instead of the whole phase, for example ["id", "versionTimestamp"]. Any of the phase\'s own fields (snake_case or camelCase) or of the keys around it in the full answer (versionTimestamp, href and, where present, url, title, trackingId, message). The id is always returned, and so is any notice that needs your attention (a note, such as a phase\'s dates following its tasks or an item\'s id changing with its type, and a date change\'s cascadePreview). Unknown names are ignored.'}, 'planId': {'type': 'string'}, 'status': {'type': 'string', 'description': 'Status: not_started, in_progress, completed, on_hold, cancelled. Default: not_started.'}, 'end_date': {'type': 'string', 'description': "YYYY-MM-DD, on or after start_date. With date_mode 'auto' it is replaced by the tasks' range once a task in the phase has dates."}, 'position': {'type': 'number', 'description': 'Position. Auto-computed if omitted.'}, 'priority': {'type': 'string', 'description': 'Priority. Default: medium.'}, 'wbs_code': {'type': 'string', 'description': 'WBS code. Auto-computed if omitted.'}, 'date_mode': {'enum': ['auto', 'manual'], 'type': 'string', 'description': "auto (default): the phase's dates follow its tasks, from the earliest task start to the latest task end, updated whenever a task is added, moved, re-dated or removed; start_date/end_date only hold while no task in the phase has dates. manual: the dates you set are kept as they are."}, 'start_date': {'type': 'string', 'description': "YYYY-MM-DD. With date_mode 'auto' it is replaced by the tasks' range once a task in the phase has dates."}, 'description': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'phase': {'type': 'object', 'description': 'The phase after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'icon': {'type': 'string', 'maxLength': 32, 'description': 'Optional emoji icon. Defaults to a folder emoji to match the UI.'}, 'name': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Project name.'}, 'description': {'type': 'string', 'maxLength': 2000, 'description': 'Optional description.'}, 'workspace_id': {'type': 'string', 'description': 'Workspace UUID to create the project in.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'project': {'type': 'object', 'description': 'The project after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['planId', 'title'], 'properties': {'type': {'type': 'string', 'description': "Type. Default: task, which takes a TAS- id. Override only to put another kind of work item in the plan, for example a user_story (a STY- id) or a test_case (a TC- id); the id's prefix follows the type. Valid values: feature, enhancement, bug, tech_debt, architecture_gap, documentation_gap, risk, epic, user_story, requirement, test_case, spike, task."}, 'title': {'type': 'string'}, 'fields': {'type': 'array', 'items': {'type': 'string', 'maxLength': 64}, 'maxItems': 50, 'description': 'Optional. Answer with only these fields instead of the whole task, for example ["id", "versionTimestamp"]. Any of the task\'s own fields (snake_case or camelCase) or of the keys around it in the full answer (versionTimestamp, href and, where present, url, title, trackingId, message). The id is always returned, and so is any notice that needs your attention (a note, such as a phase\'s dates following its tasks or an item\'s id changing with its type, and a date change\'s cascadePreview). Unknown names are ignored.'}, 'planId': {'type': 'string'}, 'source': {'type': 'string', 'description': "Where this task came from (free text, e.g. 'meeting', 'compliance-scan'). Stored for provenance and shown in the improvement/task record."}, 'status': {'enum': ['captured', 'triaging', 'shaped', 'approved', 'ready_for_agent', 'in_progress', 'ready_for_review', 'in_review', 'blocked', 'done', 'rejected', 'deferred'], 'type': 'string', 'description': 'Initial status. Default: captured.'}, 'phaseId': {'type': 'string', 'description': 'Phase to assign to.'}, 'urgency': {'type': 'string', 'description': 'e.g. this_week, this_month, this_quarter.'}, 'why_now': {'type': 'string'}, 'end_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'metadata': {'type': 'object', 'description': 'Free-form JSON stored alongside the task. On updateTask this MERGES rather than replaces.'}, 'owner_id': {'type': 'string', 'description': "User UUID to assign as owner. MUTUALLY EXCLUSIVE with owner_team_id. Use listAssignablePrincipals(projectId, kind='user') to look up valid UUIDs."}, 'position': {'type': 'number'}, 'priority': {'type': 'string', 'description': 'Priority. Default: medium.'}, 'wbs_code': {'type': 'string'}, 'checklist': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string', 'description': 'Optional â\x80\x94 server mints one if omitted. Preserve on edits.'}, 'text': {'type': 'string'}, 'due_date': {'type': 'string', 'description': 'Optional YYYY-MM-DD; null to clear.'}, 'completed': {'type': 'boolean', 'description': 'true = ticked, false/omitted = not done. Server stamps timestamp + actor.'}, 'updated_at': {'type': 'string', 'description': 'Server-stamped. Echo back unchanged; ignored on new rows.'}, 'updated_by': {'type': 'string', 'description': 'Server-stamped user id. Echo back unchanged.'}, 'completed_at': {'type': 'string', 'description': 'Server-stamped ISO timestamp. Prefer `completed`; an explicit value here wins if both are sent.'}, 'completed_by': {'type': 'string', 'description': 'Server-stamped user id. Echo back unchanged.'}, 'updated_by_credential_name': {'type': 'string', 'description': 'Server-stamped credential label. Echo back unchanged.'}, 'completed_by_credential_name': {'type': 'string', 'description': 'Server-stamped credential label. Echo back unchanged.'}}}, 'description': 'Tick-box checklist shown above acceptance_criteria. The full array REPLACES the stored list on update, and array order = display order â\x80\x94 to edit, fetch via getTask/getImprovement, modify, and send back the whole list. Operations: mark done with `completed: true`; un-mark with `completed: false`; add rows by appending `{ text }` (id is auto-minted); remove by omitting; reorder by rearranging. Echo back each existing `id` you keep so per-row attribution (who added/completed it, when) survives.'}, 'non_goals': {'type': 'array', 'items': {'type': 'string'}}, 'start_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'agent_brief': {'type': 'string'}, 'agent_ready': {'type': 'boolean'}, 'category_id': {'type': 'string', 'description': 'Category ID.'}, 'constraints': {'type': 'array', 'items': {'type': 'string'}}, 'description': {'type': 'string'}, 'target_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'user_impact': {'type': 'string'}, 'parentItemId': {'type': 'string', 'maxLength': 64, 'description': "The work item this one belongs to in the work hierarchy: an epic for a story, a story for its tasks or test cases. Any item in the same project, in any plan or phase. Not the plan outline nesting, which setPlanItemParent sets. Give its UUID or friendly id (such as IMP-12 or TAS-3). Rules: the same project; no loops (an item cannot sit inside its own children); at most 5 levels, counting this item's own children."}, 'owner_team_id': {'type': 'string', 'description': "Team UUID to assign as owner (assigns the whole team). MUTUALLY EXCLUSIVE with owner_id. Use listTeams or listAssignablePrincipals(kind='team') to look up valid UUIDs."}, 'relationships': {'type': 'object', 'description': 'Free-form JSON for logical links: blocks, blocked_by, duplicates, supersedes, relates_to (arrays of item IDs).'}, 'source_channel': {'type': 'string'}, 'business_impact': {'type': 'string'}, 'desired_outcome': {'type': 'string'}, 'agent_complexity': {'type': 'string', 'description': 'low, medium, high, very_high.'}, 'agent_confidence': {'type': 'number', 'description': '0.00 to 1.00.'}, 'percent_complete': {'type': 'number', 'description': 'Progress percentage (0-100). Null means not tracked.'}, 'impacted_diagrams': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Array of {id, name}.'}, 'problem_statement': {'type': 'string'}, 'agent_missing_info': {'type': 'array', 'items': {'type': 'string'}}, 'impacted_documents': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Array of {id, title}.'}, 'acceptance_criteria': {'type': 'array', 'items': {'anyOf': [{'type': 'string', 'description': 'Shorthand for `{ text: "..." }`.'}, {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string', 'description': 'Optional â\x80\x94 server mints one if omitted. Preserve on edits.'}, 'text': {'type': 'string'}, 'updated_at': {'type': 'string', 'description': 'Server-stamped. Echo back unchanged; ignored on new rows.'}, 'updated_by': {'type': 'string', 'description': 'Server-stamped user id. Echo back unchanged.'}, 'updated_by_credential_name': {'type': 'string', 'description': 'Server-stamped credential label. Echo back unchanged.'}}}]}, 'description': 'Acceptance criteria â\x80\x94 ordered list of pass/fail statements that define "done" for this item. Each row is `{ id, text }` with server-stamped `updated_at / updated_by / updated_by_credential_name`. REPLACES the whole array on update. Echo back existing `id`s on rows you keep so attribution stamps survive. Bare strings are accepted for convenience (e.g. `["row 1", "row 2"]`) and auto-converted to `{ id, text }`.'}, 'impacted_components': {'type': 'array', 'items': {'type': 'string'}}, 'linked_document_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Document IDs to link. Titles resolved automatically.'}, 'impacted_repositories': {'type': 'array', 'items': {'type': 'string'}}, 'agent_recommended_action': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'task': {'type': 'object', 'description': 'The task after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['predecessorId', 'successorId', 'dependencyType'], 'properties': {'lagDays': {'type': 'integer', 'description': 'Lag (positive) or lead (negative) in days. Default 0.'}, 'successorId': {'type': 'string', 'description': 'ID of the downstream item (the dependent).'}, 'predecessorId': {'type': 'string', 'description': 'ID of the upstream item (the driver).'}, 'dependencyType': {'enum': ['FS', 'SS', 'FF'], 'type': 'string', 'description': 'FS = Finish-to-Start, SS = Start-to-Start, FF = Finish-to-Finish.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'dependency': {'type': 'object', 'description': 'The dependency after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['organisation_id', 'name'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'color': {'type': 'string', 'pattern': '^#[0-9a-fA-F]{6}$', 'description': 'Optional 6-digit hex colour. Defaults to #6366f1.'}, 'description': {'type': 'string', 'maxLength': 2000}, 'organisation_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'team': {'type': 'object', 'description': 'The team after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['documentId', 'fileName'], 'properties': {'fileName': {'type': 'string', 'description': 'Original filename (e.g. sales-data.csv). Extension auto-detects content type.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'documentId': {'type': 'string'}, 'contentType': {'type': 'string', 'description': 'MIME type override. Auto-detected from extension if omitted.'}}}
输出模式
{'type': 'object', 'properties': {'expires_at': {'type': 'string'}, 'upload_url': {'type': 'string'}, 'object_path': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['projectId', 'title'], 'properties': {'title': {'type': 'string', 'description': "REQUIRED. A clear, descriptive board name (e.g. 'Q3 GTM plan'). Programmatic boards must be titled â\x80\x94 blank/'Untitled' titles are rejected."}, 'folderId': {'type': 'string', 'description': 'Optional folder to file the whiteboard under.'}, 'projectId': {'type': 'string'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['organisation_id', 'name'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'organisation_id': {'type': 'string', 'description': "Organisation UUID. Must equal the credential's organisation."}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'workspace': {'type': 'object', 'description': 'The workspace after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['documentId'], 'properties': {'x': {'type': 'number', 'description': 'Top-left x on the canvas. Omit to auto-place below existing content.'}, 'y': {'type': 'number', 'description': 'Top-left y on the canvas. Omit to auto-place.'}, 'data': {'type': 'array', 'items': {'type': 'object'}, 'description': "Alternative to rows: an array of objects; columns come from headers, or the first object's keys."}, 'rows': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}}, 'description': 'Rows as arrays of cell strings. If headers is omitted, the first row is treated as the header row.'}, 'headers': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional column headers (rendered as a styled header row). For data, also selects and orders the columns.'}, 'cellWidth': {'type': 'number', 'description': 'Cell width in px, 60-400 (default 160).'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'cellHeight': {'type': 'number', 'description': 'Cell height in px, 28-200 (default 40).'}, 'documentId': {'type': 'string', 'description': "The whiteboard's documentId."}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['diagramId'], 'properties': {'diagramId': {'type': 'string', 'description': 'Diagram ID from DIAGRAM_OMITTED markers.'}, 'versionTimestamp': {'type': 'number', 'description': 'Optional document optimistic-lock token; validated when provided. (Alias accepted: documentVersionTimestamp.)'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['documentId'], 'properties': {'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Ignored when documentId is a UUID.'}, 'documentId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['folderId'], 'properties': {'folderId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['imageId'], 'properties': {'imageId': {'type': 'string', 'description': 'Image ID from IMAGE_OMITTED markers.'}, 'versionTimestamp': {'type': 'number', 'description': 'Optional document optimistic-lock token; validated when provided. (Alias accepted: documentVersionTimestamp.)'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['improvementId'], 'properties': {'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'improvementId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['categoryId'], 'properties': {'categoryId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['activityId'], 'properties': {'activityId': {'type': 'string', 'description': 'Activity ID from getImprovement activity array.'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['planId'], 'properties': {'planId': {'type': 'string'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['activityId'], 'properties': {'activityId': {'type': 'string', 'description': 'Activity ID from getPlan activity array.'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['phaseId'], 'properties': {'planId': {'type': 'string', 'description': "Optional. Narrows a friendly-id lookup to one plan, given as the plan's UUID or friendly id (such as PLN-3). Phase ids are numbered per plan, so PHA-2 exists in every plan and planId is what makes one unique. Ignored when phaseId is a UUID."}, 'phaseId': {'type': 'string'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['permission_id'], 'properties': {'permission_id': {'type': 'string', 'description': 'UUID of the resource_permissions row to delete'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['dependencyId'], 'properties': {'dependencyId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['team_id'], 'properties': {'team_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['documentId', 'attachmentId'], 'properties': {'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'documentId': {'type': 'string'}, 'attachmentId': {'type': 'string', 'description': 'Attachment ID to delete.'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['documentId'], 'properties': {'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Ignored when documentId is a UUID.'}, 'documentId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['key', 'title', 'description', 'projectId', 'sampleSlots'], 'properties': {'key': {'type': 'string', 'description': "The component key, lowercase dotted, e.g. 'kpi.delta'. This is how decks reference it; reused if it already exists."}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional search tags.'}, 'force': {'type': 'boolean', 'description': 'Redesign even if a component with this key already exists (default false = reuse).'}, 'title': {'type': 'string', 'description': "A short human title, e.g. 'KPI with delta arrow'."}, 'boxCols': {'type': 'number', 'description': 'Optional width in grid columns (2-12, default 4).'}, 'boxRows': {'type': 'number', 'description': 'Optional height in grid rows (2-12, default 5).'}, 'category': {'type': 'string', 'description': "Optional catalogue category (e.g. 'data', 'narrative', 'comparison')."}, 'projectId': {'type': 'string', 'description': 'Project to create the small preview board in (where the render iterations are shown).'}, 'brandKitId': {'type': 'string', 'description': "Optional brand kit id (from listBrandKits) to theme the component. If omitted, the organisation's effective brand is used."}, 'description': {'type': 'string', 'description': 'What the component IS, WHEN to use it, and what it should LOOK like (the richer the better â\x80\x94 this drives both the designer and the critic).'}, 'sampleSlots': {'type': 'object', 'description': "Example slot content to render with, e.g. { value: '47%', label: 'Revenue growth', delta: '+12 pts' }. The slot keys become the component's editable fields.", 'additionalProperties': True}, 'referenceImageUrl': {'type': 'string', 'description': 'Optional URL of a reference image the component should match; the critic compares the render to it.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['documentId', 'message'], 'properties': {'kind': {'enum': ['deck', 'illustration', 'design', 'express'], 'type': 'string', 'description': "Which engine. 'deck' (default) = the premium on-brand HTML deck (conversational, build + edit); 'illustration' and 'design' are conversational variants. 'express' = the native, deterministic branded-executive deck (faster, lower fidelity, one-shot, not conversational)."}, 'title': {'type': 'string', 'description': 'Optional title. If omitted, a clear one is derived from the brief.'}, 'deckId': {'type': 'string', 'description': "Optional. An existing deck to continue designing (usually you pass sessionId instead; when both are given the session's deck wins)."}, 'confirm': {'type': 'boolean', 'description': 'Set true ONLY after the user has approved the cost (50 for a build, 10 for an edit). Leave unset/false on the first call of a turn to receive the cost quote plus balance. A clarifying question turn is never charged.'}, 'message': {'type': 'string', 'description': "This turn's message in plain language: the design brief on the first turn, an edit instruction later, or the user's ANSWER to a clarifying question the agent asked. On a follow-up turn, pass this together with the sessionId (or deckId) from the earlier call. If the user mentioned how many slides they want, ALSO pass slideCount with that number â\x80\x94 never leave the count only in prose, and never outline more slides in this message than slideCount."}, 'sessionId': {'type': 'string', 'description': 'The design conversation to continue, as returned by an earlier designDeckInWhiteboard call. Pass it together with message to answer a question, make an edit, or send a follow-up. Omit on the very first call to start a new conversation.'}, 'brandKitId': {'type': 'string', 'description': "Optional brand kit id (from listBrandKits) to theme the deck. If omitted, the organisation's effective brand is used."}, 'documentId': {'type': 'string', 'description': "The whiteboard the deck lives in. REQUIRED: a deck cannot exist without a whiteboard, and this is that whiteboard's id. If you do not already have a whiteboard id, ASK THE USER which whiteboard to design the deck in â\x80\x94 never create one automatically. Only call createWhiteboard first if the user explicitly wants a new board."}, 'imageCount': {'type': 'number', 'description': 'Deprecated and ignored. Still accepted so existing callers do not break; passing it changes nothing.'}, 'slideCount': {'type': 'number', 'description': "The number of slides to build â\x80\x94 a hard requirement: the deck is built with exactly this many slides. SET THIS whenever the user states or implies a count, EXACT OR APPROXIMATE: '12 slides' â\x86\x92 12, 'about 15' / '15 or so' â\x86\x92 15, 'no more than 10' â\x86\x92 10. Never expand the user's number: if they said 'about 15', pass 15 and shape the brief to fit 15 â\x80\x94 outlining 19 sections in the message does not raise the count, it just fights this parameter. It is PERSISTED on the conversation, so send it ONCE (on the turn that states it) and every later build turn of the same conversation carries it automatically; send it again only to CHANGE the target. It is honoured on edit turns too ('cut it to 8 slides'). THERE IS NO MAXIMUM: ask for 40, 60 or 100 slides and that is what gets built. Longer decks cost proportionally more (50 credits per 30 slides) and take proportionally longer. Omit ONLY when the user gave no count at all; the designer then chooses (typical 6 to 12)."}, 'attachments': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'A public https URL to the image.'}, 'data': {'type': 'string', 'description': 'The image as base64 (no data: prefix). Provide mediaType alongside it.'}, 'name': {'type': 'string', 'description': 'Optional human-readable name for the image.'}, 'type': {'type': 'string', 'description': 'Optional attachment type hint, passed through to the design worker.'}, 'mediaType': {'type': 'string', 'description': "The image MIME type, e.g. 'image/png' or 'image/jpeg'."}}, 'description': 'One reference image: give a public url, OR base64 data plus its mediaType.'}, 'description': 'Optional reference images for THIS turn (up to 8; images only). The agent lifts palette, layout, and tone from them (it does not pixel-copy). Non-image attachments are ignored.'}, 'advancedDeckBuilding': {'type': 'boolean', 'description': "Optional, OFF by default. Build the deck with ADVANCED DECK BUILDING: instead of one composer pass, the deck is redrafted and reviewed over several rounds by a panel of design, brand, accessibility and copy reviewers, each round scoring the deck and listing what must be fixed. It usually produces a higher-quality deck, but it is not a guarantee. TIME: a standard build takes roughly 2 to 8 minutes; advanced deck building takes roughly 15 to 20 minutes. COST: 15 extra credits per depth level on top of the turn fee, so the default depth of 3 adds 45 credits and makes a 50-credit build cost 95. This is the user's deliberate choice, so only switch it on when they have asked for the best possible deck and accepted the wait and the cost. Quote the turn FIRST (call without confirm) so the user sees the real total before approving. Set it once and it is remembered for the rest of the conversation; pass false to turn it off again."}, 'advancedDeckBuildingDepth': {'type': 'number', 'description': 'Optional. How many redraft-and-review rounds advanced deck building may run: 1 to 3, default 3. Each round is a full redraft plus four reviews, adds roughly 5 minutes, and costs 15 credits (depth 1 = +15, depth 2 = +30, depth 3 = +45). Ignored unless advancedDeckBuilding is true.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['documentId', 'message'], 'properties': {'title': {'type': 'string', 'description': 'Optional title. If omitted, a clear one is derived from the brief.'}, 'deckId': {'type': 'string', 'description': "Optional. An existing illustration to continue refining (usually you pass sessionId instead; when both are given the session's illustration wins). The id is called deckId because illustrations and decks share the same conversation spine."}, 'confirm': {'type': 'boolean', 'description': 'Set true ONLY after the user has approved the cost (50 for a build, 10 for an edit). Leave unset/false on the first call of a turn to receive the cost quote plus balance. A clarifying question turn is never charged.'}, 'message': {'type': 'string', 'description': "This turn's message in plain language: the illustration brief on the first turn, a change instruction later, or the user's ANSWER to a clarifying question the agent asked. On a follow-up turn, pass this together with the sessionId (or deckId) from the earlier call."}, 'sessionId': {'type': 'string', 'description': 'The design conversation to continue, as returned by an earlier designIllustrationInWhiteboard call. Pass it together with message to answer a question, make a change, or send a follow-up. Omit on the very first call to start a new conversation.'}, 'brandKitId': {'type': 'string', 'description': "Optional brand kit id (from listBrandKits) to colour-condition the illustration. If omitted, the organisation's effective brand is used."}, 'documentId': {'type': 'string', 'description': "The whiteboard the illustration lives in. REQUIRED: an illustration cannot exist without a whiteboard, and this is that whiteboard's id. If you do not already have a whiteboard id, ASK THE USER which whiteboard to design the illustration in â\x80\x94 never create one automatically. Only call createWhiteboard first if the user explicitly wants a new board."}, 'attachments': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'A public https URL to the image.'}, 'data': {'type': 'string', 'description': 'The image as base64 (no data: prefix). Provide mediaType alongside it.'}, 'name': {'type': 'string', 'description': 'Optional human-readable name for the image.'}, 'type': {'type': 'string', 'description': 'Optional attachment type hint, passed through to the design worker.'}, 'mediaType': {'type': 'string', 'description': "The image MIME type, e.g. 'image/png' or 'image/jpeg'."}}, 'description': 'One reference image: give a public url, OR base64 data plus its mediaType.'}, 'description': 'Optional reference images for THIS turn (up to 8; images only). The agent lifts palette, layout, and tone from them (it does not pixel-copy). Non-image attachments are ignored.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['improvementId'], 'properties': {'improvementId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'applied': {'type': 'boolean', 'description': 'True when the apply call has been atomically committed.'}}}
输入模式
{'type': 'object', 'required': ['documentId'], 'properties': {'dx': {'type': 'number', 'description': 'Horizontal offset for the copy (default 40). Use the element width + a gap to place copies side by side.'}, 'dy': {'type': 'number', 'description': 'Vertical offset for the copy (default 40).'}, 'ids': {'type': 'array', 'items': {'type': 'string'}, 'description': "Element ids to copy. Each id's full group + any bound text are auto-included. Use this and/or groupId."}, 'group': {'type': 'boolean', 'description': 'Group the copy into one new unit so it moves/duplicates together (default true).'}, 'groupId': {'type': 'string', 'description': "Copy EVERY element in this group as one unit â\x80\x94 e.g. a placed stencil's `groupId` returned by addWhiteboardElements."}, 'documentId': {'type': 'string', 'description': "The whiteboard's documentId."}, 'includeGroupPeers': {'type': 'boolean', 'description': 'Auto-include the full group of any id you pass (default true).'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['documentId'], 'properties': {'title': {'type': 'string', 'description': 'New title.'}, 'dryRun': {'type': 'boolean', 'description': 'If true, apply the patches and RETURN the resulting document text without saving â\x80\x94 no version bump, no lock required. Use to preview/verify a patch before committing. Default false.'}, 'patches': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['oldText', 'newText'], 'properties': {'after': {'type': 'string', 'description': 'Optional. Text that appears immediately after oldText, used to disambiguate.'}, 'before': {'type': 'string', 'description': 'Optional. Text that appears immediately before oldText, used to disambiguate when oldText occurs more than once.'}, 'newText': {'type': 'string', 'description': 'Replacement text. Empty string to delete the matched text.'}, 'oldText': {'type': 'string', 'description': 'Exact existing text to replace. Must match the document byte-for-byte and be unique (or use before/after to disambiguate).'}}, 'description': 'Anchor patch (recommended): replace an exact, unique snippet of existing text. Drift-proof â\x80\x94 no line numbers needed.'}, {'type': 'object', 'required': ['startLine', 'endLine', 'replacement'], 'properties': {'endLine': {'type': 'number', 'description': '1-based end line (inclusive).'}, 'startLine': {'type': 'number', 'description': '1-based start line.'}, 'replacement': {'type': 'string', 'description': 'Replacement text. Empty string to delete lines.'}}, 'description': 'Line patch: 1-based inclusive line range. Requires fresh line numbers from getDocument().'}]}, 'description': 'Patches to apply. Use EITHER anchor patches OR line patches, not both in the same call. May be empty if only updating title, folderId, or position.'}, 'folderId': {'type': ['string', 'null'], 'description': 'MOVE the document into this folder (null moves it to the project root). Send it with patches:[] to file the document without touching its content â\x80\x94 a folder-only move updates folder_id, creates NO version-history entry, and does not bump the document version. To move many documents at once use reorderDocuments, which takes folderId per item.'}, 'position': {'type': 'number', 'description': 'Sort position within the parent folder. Use to reposition a single document; like folderId, a position-only change creates no version. For batch sibling reorder/move, use reorderDocuments.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'documentId': {'type': 'string'}, 'changeSummary': {'type': 'string', 'description': 'Version history summary.'}, 'expectedVersion': {'type': 'number', 'description': 'Legacy integer version guard, checked in addition to versionTimestamp. Prefer versionTimestamp â\x80\x94 this exists for older clients and is optional.'}, 'versionTimestamp': {'type': 'number', 'description': "Optimistic-lock token from getDocument() or any mutating tool's response. Required unless dryRun:true. (Alias accepted: documentVersionTimestamp.)"}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'document': {'type': 'object'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['documentId', 'elementId', 'maskBase64', 'prompt'], 'properties': {'prompt': {'type': 'string', 'description': "What to put in the masked area, in plain language (e.g. 'replace the car with a red bicycle')."}, 'strength': {'type': 'number', 'description': 'Optional 0..1: how far the regenerated area may diverge from the original. The editing model may balance this from the prompt instead, so leave it unset unless you need it.'}, 'elementId': {'type': 'string', 'description': 'The id of the image element on the board to edit (from getWhiteboard includeElements=true).'}, 'documentId': {'type': 'string', 'description': 'The whiteboard document that holds the image element.'}, 'maskBase64': {'type': 'string', 'description': 'A PNG mask (base64, with or without a data: prefix) the same shape as the image. WHITE pixels are regenerated; BLACK pixels are preserved.', 'contentEncoding': 'base64'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['documentId', 'designId'], 'properties': {'kind': {'enum': ['deck'], 'type': 'string', 'description': "Which engine. 'deck' (default)."}, 'format': {'enum': ['pptx', 'pdf', 'png'], 'type': 'string', 'description': "Output format. 'pptx' (default) = editable PowerPoint; 'pdf' = vector PDF; 'png' = one image per slide. HTML is not available."}, 'designId': {'type': 'string', 'description': 'The design to export (the deck id), as returned by designDeckInWhiteboard.'}, 'brandKitId': {'type': 'string', 'description': 'Optional brand kit id (reserved for future per-export theming; the design is already branded, so this is usually unnecessary).'}, 'documentId': {'type': 'string', 'description': 'The whiteboard that hosts the design.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['documentId', 'find', 'replace'], 'properties': {'find': {'type': 'string', 'description': 'Text to search for.'}, 'replace': {'type': 'string', 'description': 'Replacement text. Empty string to delete occurrences.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'documentId': {'type': 'string'}, 'caseSensitive': {'type': 'boolean', 'description': 'Case-sensitive matching. Default: true.'}, 'changeSummary': {'type': 'string', 'description': 'Version history summary.'}, 'versionTimestamp': {'type': 'number', 'description': 'Optional optimistic-lock token from getDocument() or a previous write; validated when provided. (Alias accepted: documentVersionTimestamp.)'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'document': {'type': 'object'}, 'replacements': {'type': 'number', 'description': 'Count of substitutions made.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'properties': {}}
输出模式
{'type': 'object', 'description': 'CDMD authoring guide.'}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'organisation_id': {'type': 'string', 'description': "UUID of the organisation. Must match the credential's organisation."}}}
输出模式
{'type': 'object', 'properties': {'balance': {'type': 'number'}, 'currency': {'type': 'string'}}}
输入模式
{'type': 'object', 'properties': {}}
输出模式
{'type': 'object', 'properties': {'packages': {'type': 'array', 'items': {'type': 'object'}}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'organisation_id': {'type': 'string', 'description': "Organisation UUID. Must equal the credential's organisation."}}}
输出模式
{'type': 'object', 'description': 'Current org tier, feature flags, seat counts and KG eligibility.'}
输入模式
{'type': 'object', 'properties': {}}
输出模式
{'type': 'object', 'properties': {'email': {'type': ['string', 'null']}, 'user_id': {'type': 'string', 'description': "The authenticated user's UUID."}, 'full_name': {'type': ['string', 'null']}, 'avatar_url': {'type': ['string', 'null']}, 'display_name': {'type': ['string', 'null']}, 'preferred_name': {'type': ['string', 'null']}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'return_url': {'type': 'string'}, 'organisation_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'Stripe Customer Portal URL â\x80\x94 single-use, short TTL.'}}}
输入模式
{'type': 'object', 'required': ['documentId', 'deckId'], 'properties': {'deckId': {'type': 'string', 'description': 'The deck or illustration to poll, as returned by designDeckInWhiteboard or designIllustrationInWhiteboard.'}, 'documentId': {'type': 'string', 'description': 'The whiteboard that hosts the deck or illustration (it lives inside the board). REQUIRED.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['diagramId'], 'properties': {'scale': {'enum': [1, 2, 3], 'type': 'number', 'description': 'Raster resolution multiplier 1x/2x/3x (default 2). Ignored for svg.'}, 'format': {'enum': ['png', 'jpeg', 'svg'], 'type': 'string', 'description': "png (default) or jpeg = raster; svg is scalable. A platform default diagram's SVG contains a browser foreignObject scene, so use PNG/JPEG where foreignObject SVG is unsupported."}, 'diagramId': {'type': 'string', 'description': "The diagram's id (from getDocument markers / getDiagramInDocument)."}, 'background': {'type': 'string', 'description': "Background for png/jpeg, e.g. '#ffffff' or 'transparent' (png only)."}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['diagramId'], 'properties': {'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field projection. Valid fields: diagramId, documentId, type, name, diagramCode, nlDescription, colorPlan, renderStatus, renderError, createdAt, updatedAt, versionTimestamp.'}, 'diagramId': {'type': 'string', 'description': 'Diagram ID from DIAGRAM_OMITTED markers.'}}}
输出模式
{'type': 'object', 'properties': {'diagram': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['type'], 'properties': {'type': {'type': 'string', 'description': "A diagram type from listDiagramTypes (e.g. 'default', 'mermaid', 'bpmn'), or a diagram family slug or name (e.g. 'bpmn-process'), which resolves to the family's default renderer."}, 'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field projection. Valid fields: type, label, description, whenToUse, dslLanguage, dslInstructions, exampleDsl, enabled, sortOrder, updatedAt.'}}}
输出模式
{'type': 'object', 'properties': {'note': {'type': 'string', 'description': 'Set when this type is only an alternative renderer: the default renderer of each family it draws.'}, 'diagramType': {'type': 'object', 'description': 'The catalogue row: type, label, whenToUse, dslInstructions, exampleDsl and so on.'}, 'resolvedFrom': {'type': 'object', 'description': 'Set when `type` named a diagram family: the family and a note naming its default renderer.'}, 'supportedDiagrams': {'type': 'array', 'items': {'type': 'object'}, 'description': 'The diagram families this type draws, each with its defaultRenderer.'}}, 'description': 'DSL writing instructions for the requested diagram type.'}
输入模式
{'type': 'object', 'required': ['documentId'], 'properties': {'limit': {'type': 'number', 'description': 'Max lines to return. Default: 200.'}, 'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field projection. Valid fields: id, title, friendlyId, friendlyIdNumber, projectId, folderId, createdAt, updatedAt, versionTimestamp.'}, 'offset': {'type': 'number', 'description': 'Lines to skip from start. Default: 0.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'documentId': {'type': 'string', 'description': 'The document ID to read. Accepts either the UUID or the friendly id (e.g. DOC-815); friendly ids are resolved within your organisation.'}, 'contentFields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Content field projection. Valid fields: offset, limit, totalLines, nextOffset, metadata, text.'}, 'includeDiagramDsl': {'type': 'boolean', 'description': "If true, inline each diagram's full DSL (as diagramCode) and its versionTimestamp into the DIAGRAM_OMITTED markers, so you can inspect and then edit a diagram (updateDiagramInDocument with diagramVersionTimestamp) without a second read. Default false. Note: large DSL inflates the response."}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'content': {'type': 'object', 'description': 'Numbered text lines for editDocument input.'}, 'document': {'type': 'object'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['jobId'], 'properties': {'jobId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'job': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['user_id', 'resource_type', 'resource_id'], 'properties': {'user_id': {'type': 'string', 'description': 'UUID of the user to check'}, 'resource_id': {'type': 'string'}, 'resource_type': {'enum': ['workspace', 'project', 'folder', 'document', 'improvement', 'plan'], 'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'sources': {'type': 'array', 'items': {'type': 'object'}}, 'effective_level': {'type': ['string', 'null']}}}
输入模式
{'type': 'object', 'properties': {'query': {'type': 'string', 'description': 'Filter by name/title (case-insensitive).'}, 'toDate': {'type': 'string', 'description': 'ISO 8601 date filter (to).'}, 'folderId': {'type': 'string', 'description': 'The folder ID to start from. Omit and pass projectId to get the project root hierarchy.'}, 'fromDate': {'type': 'string', 'description': 'ISO 8601 date filter (from).'}, 'maxDepth': {'type': 'number', 'description': 'Max nesting depth. Default: 10, max: 20.'}, 'dateField': {'type': 'string', 'description': 'Date field to filter. Default: updated_at.'}, 'projectId': {'type': 'string', 'description': "Return the whole project's folder tree from the root. Provide this or folderId."}, 'includeDocuments': {'type': 'boolean', 'description': 'Include documents. Default: true.'}}}
输出模式
{'type': 'object', 'properties': {'folder': {'type': 'object'}, 'folders': {'type': 'array', 'items': {'type': 'object'}}, 'documents': {'type': 'array', 'items': {'type': 'object'}}}}
输入模式
{'type': 'object', 'required': ['documentId', 'storagePath'], 'properties': {'documentId': {'type': 'string'}, 'storagePath': {'type': 'string', 'description': 'Storage path from IMAGE_OMITTED marker.'}}}
输出模式
{'type': 'object', 'properties': {'image': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['improvementId'], 'properties': {'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'improvementId': {'type': 'string', 'description': 'Accepts either the UUID or the friendly id (e.g. IMP-42); friendly ids are resolved within your organisation.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'improvement': {'type': 'object', 'description': 'The improvement resource.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'project_id': {'type': 'string', 'description': "Optional â\x80\x94 narrow the result to this project's subtree"}, 'workspace_id': {'type': 'string', 'description': "Optional â\x80\x94 narrow the result to this workspace's subtree"}, 'organisation_id': {'type': 'string', 'description': "Must match the credential's org"}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'rows': {'type': 'array', 'items': {'type': 'object'}}}}
输入模式
{'type': 'object', 'required': ['sessionId'], 'properties': {'sessionId': {'type': 'string', 'description': 'The meeting scribe session to poll, as returned by startMeetingScribe.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['organisation_id', 'user_id'], 'properties': {'user_id': {'type': 'string', 'description': 'User UUID of the member to fetch.'}, 'organisation_id': {'type': 'string', 'description': "Organisation UUID. Must match the credential's organisation."}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'member': {'type': 'object', 'description': 'The member resource.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'organisation_id': {'type': 'string', 'description': "Organisation UUID. Must equal the credential's organisation."}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'organisation': {'type': 'object', 'description': 'The organisation resource.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'organisation_id': {'type': 'string', 'description': "Organisation UUID. Must equal the credential's organisation."}}}
输出模式
{'type': 'object', 'properties': {'settings': {'type': 'object'}, 'enabledFeatures': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['planId'], 'properties': {'planId': {'type': 'string', 'description': 'Accepts either the UUID or the friendly id (e.g. PLN-3); friendly ids are resolved within your organisation.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'plan': {'type': 'object', 'description': 'The plan resource.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['planId'], 'properties': {'planId': {'type': 'string', 'description': 'Accepts either the UUID or the friendly id (e.g. PLN-3); friendly ids are resolved within your organisation.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}}}
输出模式
{'type': 'object', 'properties': {'plan': {'type': 'object'}, 'tasks': {'type': 'array', 'items': {'type': 'object'}}, 'phases': {'type': 'array', 'items': {'type': 'object'}}}}
输入模式
{'type': 'object', 'required': ['phaseId'], 'properties': {'planId': {'type': 'string', 'description': "Optional. Narrows a friendly-id lookup to one plan, given as the plan's UUID or friendly id (such as PLN-3). Phase ids are numbered per plan, so PHA-2 exists in every plan and planId is what makes one unique. Ignored when phaseId is a UUID."}, 'phaseId': {'type': 'string', 'description': 'Accepts either the UUID or the friendly id (e.g. PHA-7); friendly ids are resolved within your organisation.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'phase': {'type': 'object', 'description': 'The phase resource.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['tier'], 'properties': {'tier': {'enum': ['free', 'pro', 'enterprise'], 'type': 'string', 'description': 'Subscription tier.'}}}
输出模式
{'type': 'object', 'description': 'Per-tier price and seat limits.'}
输入模式
{'type': 'object', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'description': 'Project UUID.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'project': {'type': 'object', 'description': 'The project resource.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'properties': {'query': {'type': 'string', 'description': 'Filter by name/title (case-insensitive).'}, 'toDate': {'type': 'string', 'description': 'ISO 8601 date filter (to).'}, 'folderId': {'type': 'string', 'description': 'Start from this folder instead of project root.'}, 'fromDate': {'type': 'string', 'description': 'ISO 8601 date filter (from).'}, 'maxDepth': {'type': 'number', 'description': 'Max nesting depth. Default: 10, max: 20.'}, 'dateField': {'type': 'string', 'description': 'Date field to filter. Default: updated_at.'}, 'projectId': {'type': 'string', 'description': 'Project ID. Required if folderId not provided.'}, 'includeDocuments': {'type': 'boolean', 'description': 'Include documents. Default: true.'}}}
输出模式
{'type': 'object', 'properties': {'plans': {'type': 'array', 'items': {'type': 'object'}}, 'folders': {'type': 'array', 'items': {'type': 'object'}}, 'project': {'type': 'object'}, 'documents': {'type': 'array', 'items': {'type': 'object'}}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'organisation_id': {'type': 'string', 'description': "UUID of the organisation. Must match the credential's organisation."}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['taskId'], 'properties': {'taskId': {'type': 'string', 'description': 'Accepts either the UUID or the friendly id (e.g. TAS-176); friendly ids are resolved within your organisation.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'task': {'type': 'object', 'description': 'The task resource.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['teamId'], 'properties': {'teamId': {'type': 'string', 'description': 'Team UUID.'}, 'includeMembers': {'type': 'boolean', 'description': "Include the team's members enriched with user profile info. Default true."}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'team': {'type': 'object', 'description': 'The team resource.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'properties': {}}
输出模式
{'type': 'object', 'properties': {'preferences': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['documentId'], 'properties': {'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'documentId': {'type': 'string', 'description': 'Accepts either the UUID or the friendly id (e.g. WBD-12); friendly ids are resolved within your organisation.'}, 'includeElements': {'type': 'boolean', 'description': 'When true, returns the full Excalidraw scene so it can be modified and written back.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'properties': {}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['documentId'], 'properties': {'theme': {'enum': ['light', 'dark', 'both'], 'type': 'string', 'description': "Which theme variant(s) to render. 'light' is fastest and right for inspecting your own edits; 'both' (default) also produces the dark variant used by the chat widget."}, 'region': {'type': 'object', 'required': ['x', 'y', 'width', 'height'], 'properties': {'x': {'type': 'number', 'description': 'Window left edge (scene coordinates).'}, 'y': {'type': 'number', 'description': 'Window top edge (scene coordinates).'}, 'width': {'type': 'number', 'description': 'Window width (> 0).'}, 'height': {'type': 'number', 'description': 'Window height (> 0).'}}, 'description': "Capture only this scene-coordinate window instead of the whole board â\x80\x94 e.g. the user's current viewport, or the neighbourhood you are editing. The output is cropped to the exact rectangle."}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'background': {'type': 'string', 'description': "Canvas background colour (default white), e.g. '#ffffff' or 'transparent'."}, 'documentId': {'type': 'string', 'description': "The whiteboard's documentId. Accepts either the UUID or the friendly id (e.g. WBD-12); friendly ids are resolved within your organisation."}, 'elementIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Render only these element ids (plus their bound labels + group peers) instead of the whole board.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['workspace_id'], 'properties': {'workspace_id': {'type': 'string', 'description': 'Workspace UUID.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'workspace': {'type': 'object', 'description': 'The workspace resource.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['team_id', 'workspace_id', 'permission_level'], 'properties': {'team_id': {'type': 'string'}, 'workspace_id': {'type': 'string'}, 'permission_level': {'enum': ['read', 'write', 'admin'], 'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'access': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['documentId', 'type', 'diagramCode', 'prompt'], 'properties': {'type': {'type': 'string', 'description': "Diagram type, meaning the renderer (e.g. default, mermaid, plantuml, bpmn, d2; 'default' is the platform default renderer). For a diagram family such as a BPMN process, an ERD or a flowchart, use the family's defaultRenderer from listDiagramTypes or getDiagramTypeGuide. Call listDiagramTypes for all types."}, 'align': {'enum': ['left', 'center', 'right'], 'type': 'string', 'description': 'Alignment.'}, 'prompt': {'type': 'string', 'description': 'Short description of what the diagram shows (1-2 sentences).'}, 'caption': {'type': 'string', 'description': 'Caption below the diagram.'}, 'afterLine': {'type': 'number', 'description': 'Insert after this line, counting the SAME line numbers getDocument prints (1-based; frontmatter is not counted, and every diagram/image marker counts as exactly one line). 0 inserts at the very beginning; omit it to append at the end. Re-read with getDocument if the document may have changed, since the number is positional.'}, 'colorPlan': {'type': 'object', 'required': ['byElementId'], 'properties': {'byElementId': {'type': 'object', 'description': 'Map of element IDs to color swatch names.', 'additionalProperties': {'type': 'string'}}}, 'description': 'BPMN only. Color plan: { byElementId: { ElementId: SwatchName } }.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'brandKitId': {'type': 'string', 'description': 'Optional brand kit UUID (see listBrandKits) to theme with instead of the cascade default. Must belong to your organisation.'}, 'documentId': {'type': 'string'}, 'imageScale': {'enum': [1, 2, 3], 'type': 'number', 'description': 'Raster resolution 1x/2x/3x when returnImage:true (default 2).'}, 'diagramCode': {'type': 'string', 'description': "Diagram DSL code. Call getDiagramTypeGuide for syntax. For 'default', provide MDP JSON with stable IDs and omit every entity x/y for automatic layout; fully positioned manual diagrams are also supported, and icons must be exact iconKey values from listArchitectureIcons. EXCEPTION â\x80\x94 for type 'infographic', put a plain-English DESCRIPTION of the infographic here (NOT code); the system designs the AntV spec and renders it."}, 'imageFormat': {'enum': ['png', 'jpeg', 'svg'], 'type': 'string', 'description': 'Image format when returnImage:true (default png).'}, 'returnImage': {'type': 'boolean', 'description': 'If true, also render the inserted diagram and return it as an image inline (one-call insert-and-get-image). Defaults false.'}, 'nlDescription': {'type': 'string', 'description': 'Extended description of the diagram (2-4 sentences).'}, 'applyBrandTheme': {'type': 'boolean', 'description': "Brand theming is ON BY DEFAULT: the document's effective BRAND KIT (colours only â\x80\x94 typefaces are never injected) is baked into the diagram DSL before it is validated, rendered and stored, so the diagram is on-brand everywhere it appears (cascade: brandKitId override â\x86\x92 project default â\x86\x92 workspace default â\x86\x92 org default â\x86\x92 the built-in Stable Baseline theme). Set false to keep the library's stock styling. Themable types: mermaid, plantuml, graphviz, d2, systemsarchitecture, vega, vegalite, infographic â\x80\x94 other types (incl. bpmn, which has colorPlan) are always stored unchanged. Author theming in the DSL wins (an existing mermaid %%{init}%%, plantuml !theme, d2 vars.d2-config, or a hand-written infographic palette is never overridden). The stored diagramCode is the THEMED source."}, 'imageBackground': {'type': 'string', 'description': "Background for the returned png/jpeg (e.g. '#ffffff' or 'transparent')."}, 'documentVersionTimestamp': {'type': 'number', 'description': "Optimistic-lock token: the document's versionTimestamp from getDocument() or any mutating tool's response. (Alias accepted: versionTimestamp.)"}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'diagram': {'type': 'object'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['documentId', 'nlDescription', 'caption'], 'properties': {'alt': {'type': 'string', 'description': 'Alt text. Defaults to caption.'}, 'align': {'enum': ['left', 'center', 'right'], 'type': 'string', 'description': 'Alignment. Default: center.'}, 'width': {'type': 'number', 'description': 'Width in pixels.'}, 'height': {'type': 'number', 'description': 'Height in pixels.'}, 'caption': {'type': 'string', 'description': 'Caption below the image.'}, 'fileName': {'type': 'string', 'description': 'Original filename.'}, 'imageUrl': {'type': 'string', 'description': 'URL to fetch image from, or assetUrl from createImageUploadSession.'}, 'afterLine': {'type': 'number', 'description': 'Insert after this line, counting the SAME line numbers getDocument prints (1-based; frontmatter is not counted, and every diagram/image marker counts as exactly one line). 0 inserts at the very beginning; omit it to append at the end. Re-read with getDocument if the document may have changed, since the number is positional.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'documentId': {'type': 'string'}, 'imageBase64': {'type': 'string', 'description': 'Base64-encoded image data. Mutually exclusive with imageBinary/imageUrl.', 'contentEncoding': 'base64'}, 'imageBinary': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Raw binary as byte array. Mutually exclusive with imageBase64/imageUrl.'}, 'nlDescription': {'type': 'string', 'description': 'Description of image content for semantic search.'}, 'documentVersionTimestamp': {'type': 'number', 'description': "Optimistic-lock token: the document's versionTimestamp from getDocument() or any mutating tool's response. (Alias accepted: versionTimestamp.)"}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'image': {'type': 'object'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['documentId', 'diagramType', 'source'], 'properties': {'x': {'type': 'number', 'description': 'Top-left x on the canvas. Omit to auto-place (or to keep the existing position when updateElementId is given).'}, 'y': {'type': 'number', 'description': 'Top-left y on the canvas. Omit to auto-place (or to keep the existing position when updateElementId is given).'}, 'fit': {'enum': ['contain'], 'type': 'string', 'description': "When 'contain' AND both width and height are given, treat width/height as a BOUNDING BOX: the diagram is scaled to its natural aspect ratio to fit inside the box (never upscaled past 1.5x natural) and centred, so it never stretches. The response's diagram.{x,y,width,height} carry the final drawn geometry. Omit for the exact width/height behaviour."}, 'align': {'enum': ['left', 'center', 'right'], 'type': 'string', 'description': 'Horizontal alignment relative to existing content (placed below it). Ignored if x/y given.'}, 'width': {'type': 'number', 'description': 'Display width in px (aspect ratio preserved). Auto-size caps at 480px; an explicit width is honoured up to 1200px.'}, 'height': {'type': 'number', 'description': 'Display height in px (defaults from width + aspect).'}, 'source': {'type': 'string', 'description': "The diagram DSL / code. For 'default', provide MDP JSON with stable IDs and omit entity x/y for automatic layout; fully positioned manual sources remain valid; icons must be exact iconKey values from listArchitectureIcons. For 'infographic', provide a plain-English description instead (the system designs the AntV infographic spec)."}, 'caption': {'type': 'string', 'description': 'Optional caption shown beneath the diagram.'}, 'brandKitId': {'type': 'string', 'description': 'Optional brand kit UUID (see listBrandKits) to theme with instead of the cascade default. Must belong to your organisation.'}, 'documentId': {'type': 'string', 'description': "The whiteboard's documentId."}, 'diagramType': {'type': 'string', 'description': "Diagram language, e.g. 'default', 'bpmn', 'mermaid', 'd2', 'plantuml', 'graphviz'. For a diagram family, use its defaultRenderer from listDiagramTypes."}, 'applyBrandTheme': {'type': 'boolean', 'description': "Brand theming is ON BY DEFAULT: the board's effective BRAND KIT (colours only â\x80\x94 typefaces are never injected) is baked into the diagram before it is rendered and its editable source stored (cascade: brandKitId override â\x86\x92 project â\x86\x92 workspace â\x86\x92 org default â\x86\x92 the built-in Stable Baseline theme). Set false to keep the library's stock styling. Themable types: mermaid, plantuml, graphviz, d2, systemsarchitecture, vega, vegalite, infographic; author theming in the DSL always wins."}, 'updateElementId': {'type': 'string', 'description': 'Element id of an EXISTING embedded diagram to re-render and replace in place (keeps the element id + board position). Omit for a fresh insert. If the id is not on the board, a new element is created with it.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['documentId'], 'properties': {'x': {'type': 'number', 'description': 'Top-left x on the canvas. Omit to auto-place.'}, 'y': {'type': 'number', 'description': 'Top-left y on the canvas. Omit to auto-place.'}, 'align': {'enum': ['left', 'center', 'right'], 'type': 'string', 'description': 'Horizontal alignment relative to existing content (placed below it). Ignored if x/y are provided.'}, 'width': {'type': 'number', 'description': 'Display width in px (resize). Defaults to ~360.'}, 'height': {'type': 'number', 'description': 'Display height in px. Derived from width at 4:3 if omitted.'}, 'locked': {'type': 'boolean', 'description': 'Lock the placed image so it cannot be moved, resized, or deleted by hand (e.g. a deck-owned framed slide image that changes only via the deck conversation). Defaults to false.'}, 'caption': {'type': 'string', 'description': 'Optional caption shown as a text label grouped beneath the image.'}, 'fileName': {'type': 'string', 'description': 'Optional original filename (for storage + type hinting).'}, 'imageUrl': {'type': 'string', 'description': 'URL to fetch the image from, or an assetUrl returned by createImageUploadSession.'}, 'customData': {'type': 'object', 'description': 'Arbitrary Excalidraw customData stored on the element (e.g. { deckId } so a board image resolves back to its source deck). Merged with any builder-set customData.', 'additionalProperties': True}, 'documentId': {'type': 'string', 'description': "The whiteboard's documentId."}, 'imageBase64': {'type': 'string', 'description': 'Base64-encoded image bytes (a data: URL prefix is allowed). Best for small images.', 'contentEncoding': 'base64'}, 'imageBinary': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Raw image bytes as an array of 0-255 values (alternative to imageBase64).'}, 'nlDescription': {'type': 'string', 'description': 'Optional plain-language description of the image, stored on the element for accessibility and so agents reading the board later know what it depicts.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['organisation_id', 'email', 'organization_role'], 'properties': {'email': {'type': 'string', 'description': 'Email address. Lowercased and trimmed. Max 320 chars.'}, 'message': {'type': 'string', 'maxLength': 500, 'description': 'Optional personal message attached to the invitation email.'}, 'organisation_id': {'type': 'string', 'description': "Organisation UUID. Must match the credential's organisation."}, 'organization_role': {'enum': ['member', 'admin'], 'type': 'string', 'default': 'member', 'description': "Role to grant on accept. 'owner' is never assignable via MCP."}}}
输出模式
{'type': 'object', 'properties': {'expires_at': {'type': 'string'}, 'invitation_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'backlinks': {'type': 'array', 'items': {'type': 'object'}}}}
输入模式
{'type': 'object', 'required': ['chunkIds'], 'properties': {'chunkIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Array of kg_chunks.id values to assess.'}}}
输出模式
{'type': 'object', 'properties': {'buckets': {'type': 'object'}, 'summary': {'type': 'string'}, 'distribution': {'type': 'object'}}}
输入模式
{'type': 'object', 'properties': {'asOf': {'type': 'string', 'description': 'Dated facts: return what held on this day (YYYY-MM-DD) instead of what holds now. For example the owner, status or supplier as it was on a past date.'}, 'name': {'type': 'string'}, 'history': {'type': 'boolean', 'description': 'Dated facts: return every fact with its dates, including facts that have ended (and how they ended) and planned ones, oldest first. Use for "how did X change" or "what was X before".'}, 'entityId': {'type': 'string'}, 'timeZone': {'type': 'string', 'description': "Dated facts: the IANA time zone to give days in (for example Australia/Sydney, Asia/Kolkata, America/New_York). Defaults to the user's saved time zone, else UTC."}, 'projectId': {'type': 'string', 'description': 'Scope the lookup to one project. Recommended when resolving by `name`, since the same entity name can exist in several projects.'}}}
输出模式
{'type': 'object', 'properties': {'entity': {'type': 'object'}}}
输入模式
{'type': 'object', 'properties': {'slug': {'type': 'string'}, 'communityId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'page': {'type': 'object'}, 'community_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'properties': {'level': {'type': 'number', 'default': 0}, 'projectId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'communities': {'type': 'array', 'items': {'type': 'object'}}}}
输入模式
{'type': 'object', 'required': ['sourceType', 'sourceId'], 'properties': {'limit': {'type': 'number', 'default': 10}, 'sourceId': {'type': 'string'}, 'sourceType': {'enum': ['document', 'diagram', 'improvement', 'plan', 'task'], 'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'documents': {'type': 'array', 'items': {'type': 'object'}}}}
输入模式
{'type': 'object', 'properties': {'folderId': {'type': 'string'}, 'projectId': {'type': 'string'}, 'documentId': {'type': 'string'}, 'workspaceId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'project_scopes': {'type': 'array'}, 'workspace_scopes': {'type': 'array'}, 'organisation_scope': {'type': 'object'}}}
输入模式
{'type': 'object', 'properties': {'asOf': {'type': 'string', 'description': 'Dated facts: return what held on this day (YYYY-MM-DD) instead of what holds now. For example the owner, status or supplier as it was on a past date.'}, 'mode': {'enum': ['local', 'global', 'graph', 'path', 'ppr'], 'type': 'string', 'default': 'local', 'description': "Retrieval strategy. See tool description for when to use each â\x80\x94 strongly prefer 'global' for thematic/overview questions."}, 'depth': {'type': 'number', 'default': 2, 'description': 'Hop depth for graph/path modes.'}, 'limit': {'type': 'number', 'default': 20}, 'query': {'type': 'string', 'description': 'Natural-language query. Required for local/global/ppr; optional for graph (use srcEntityId instead). With artefactMetadataOnly:true this is the artefact name, friendly id or uuid to find.'}, 'offset': {'type': 'number', 'description': 'Only with artefactMetadataOnly:true. Skip this many results for paging.'}, 'history': {'type': 'boolean', 'description': 'Dated facts: return every fact with its dates, including facts that have ended (and how they ended) and planned ones, oldest first. Use for "how did X change" or "what was X before".'}, 'timeZone': {'type': 'string', 'description': 'Dated facts: the IANA time zone to give days in (for example Australia/Sydney, Asia/Kolkata, America/New_York). Defaults to the user\'s saved time zone, else UTC. Pass the user\'s zone when you know it, so "today" and dates match their calendar.'}, 'projectId': {'type': 'string', 'description': 'STRONGLY RECOMMENDED â\x80\x94 in practice required. The KG is scoped per project/workspace and there is usually no organisation-wide default, so a call with no projectId and no workspaceId typically matches no scope rule and returns nothing useful. Use listProjects to find the id.'}, 'dstEntityId': {'type': 'string', 'description': "Required for mode='path'. Target entity to find a path TO."}, 'srcEntityId': {'type': 'string', 'description': "Required for mode='path'. Optional source entity for mode='graph'."}, 'workspaceId': {'type': 'string', 'description': 'Alternative to projectId â\x80\x94 searches the whole workspace subtree. Give one of the two.'}, 'artefactTypes': {'type': 'array', 'items': {'enum': ['document', 'whiteboard', 'improvement', 'task', 'plan', 'compliance'], 'type': 'string'}, 'description': 'Only with artefactMetadataOnly:true. Restrict the search to these artefact types. Omit to search all of them. Unknown values are rejected rather than ignored.'}, 'artefactMetadataOnly': {'type': 'boolean', 'default': False, 'description': 'Find artefacts BY NAME/ID instead of retrieving knowledge. Matches title + friendly id + uuid only â\x80\x94 never document content â\x80\x94 across all artefact types, and does not require the knowledge graph to be enabled. Default false.'}}}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'mode': {'enum': ['local', 'global', 'ppr'], 'type': 'string'}, 'query': {'type': 'string'}, 'scope': {'type': 'object'}, 'chunks': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Hybrid-retrieved chunks with grounding-aware reranker scores.'}, 'reason': {'type': 'string', 'description': 'Set when scope_disabled â\x80\x94 KG not enabled or out of scope.'}}}
输入模式
{'type': 'object', 'properties': {'projectId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'questions': {'type': 'array', 'items': {'type': 'string'}}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'number'}, 'query': {'type': 'string', 'description': 'Search by icon name, exact iconKey, category, vendor, description or aliases.'}, 'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field projection. Valid fields: id, iconPath (existing relative paths only), iconUrl, iconName, category, categories, sources, iconKey, iconKeys, iconKeyUrl, d2IconPath, subcategory, vendor, description, searchTerms, tags, useCases, aliases, isFeatured, displayOrder.'}, 'offset': {'type': 'number'}, 'category': {'type': 'string', 'description': 'Filter by category, e.g. AWS, Azure, GCP, Technology, Oracle Cloud, Kubernetes, Networking, General.'}}}
输出模式
{'type': 'object', 'properties': {'icons': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of icons.'}, 'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'required': ['projectId'], 'properties': {'q': {'type': 'string', 'description': 'Deprecated alias for `query`, still accepted. Prefer `query` â\x80\x94 that is the name every other list tool uses.'}, 'kind': {'enum': ['all', 'user', 'team'], 'type': 'string', 'description': "Filter to one principal kind. Default 'all' returns users first then teams."}, 'limit': {'type': 'number', 'description': 'Max results per page (1-100, default 20).'}, 'query': {'type': 'string', 'description': 'Optional ILIKE search filter â\x80\x94 matched against display_name + email (users) and team name (teams).'}, 'offset': {'type': 'number', 'description': 'Pagination offset.'}, 'projectId': {'type': 'string', 'description': 'Project to scope assignees to. Required.'}, 'workspaceId': {'type': 'string', 'description': 'Workspace UUID. Optional but recommended â\x80\x94 when present, the result includes ALL org members; when omitted, only direct project grants + team-expanded users are returned.'}}}
输出模式
{'type': 'object', 'properties': {'teams': {'type': 'array', 'items': {'type': 'object'}}, 'users': {'type': 'array', 'items': {'type': 'object'}}}}
输入模式
{'type': 'object', 'required': ['organizationId'], 'properties': {'organizationId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'items': {'type': 'array', 'items': {'type': 'object'}}, 'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'limit': {'type': 'number', 'description': 'Max rows (default 50, max 200).'}, 'offset': {'type': 'number', 'description': 'Pagination offset (default 0).'}, 'organisation_id': {'type': 'string', 'description': "UUID of the organisation. Must match the credential's organisation."}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'purchases': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of purchases.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'number'}, 'query': {'type': 'string', 'description': "Keyword or intent, e.g. 'circuit', 'wiring harness', 'timing', 'BPMN process'. Semantic-backed: matches descriptions and diagram family names, not just type names."}, 'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field projection. Valid fields: type, label, description, whenToUse, dslLanguage, dslInstructions, exampleDsl, enabled, availableOnFree, sortOrder, updatedAt, supportedDiagrams.'}, 'offset': {'type': 'number'}, 'enabledOnly': {'type': 'boolean'}}}
输出模式
{'type': 'object', 'properties': {'diagramTypes': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Diagram types (renderers). Each lists supportedDiagrams: the families it draws, each with its defaultRenderer.'}, 'matchedDiagramFamilies': {'type': 'array', 'items': {'type': 'object'}, 'description': 'When the query names a diagram family: the family, its defaultRenderer and all its renderers.'}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'number'}, 'query': {'type': 'string', 'description': 'Search text. Matched against title, friendlyId AND full document content. Returns the matching lines per document (grep). Case-insensitive unless caseSensitive:true; treated as a regex if isRegex:true.'}, 'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field projection for the document metadata. Valid fields: id, title, friendlyId, friendlyIdNumber, projectId, folderId, createdAt, updatedAt, href. (contentMatches/matchCount are always included when query is set.)'}, 'offset': {'type': 'number', 'description': 'Pagination offset over the MATCHES. When searching, use scanOffset (not this) to reach documents the scan has not covered.'}, 'toDate': {'type': 'string', 'description': 'ISO 8601 date filter (to).'}, 'isRegex': {'type': 'boolean', 'description': 'Treat `query` as a JavaScript regular expression (grep -E). Default false (literal substring). Regex search requires a project/workspace/folder scope and scans a bounded window of documents.'}, 'folderId': {'type': 'string'}, 'fromDate': {'type': 'string', 'description': 'ISO 8601 date filter (from).'}, 'dateField': {'type': 'string', 'description': 'Date field to filter. Default: updated_at.'}, 'projectId': {'type': 'string'}, 'scanOffset': {'type': 'number', 'description': 'Search-only. Where to start the document scan within the scope. One call examines a bounded window; when the response reports truncated:true it also returns nextScanOffset â\x80\x94 repeat with scanOffset set to that value until nextScanOffset is absent, and union the results, to search a scope larger than one window exhaustively.'}, 'workspaceId': {'type': 'string'}, 'contextLines': {'type': 'number', 'description': 'Lines of surrounding context to include with each match (grep -C). 0-5, default 0.'}, 'caseSensitive': {'type': 'boolean', 'description': 'Case-sensitive matching. Default false.'}, 'maxMatchesPerDocument': {'type': 'number', 'description': 'Cap on matching lines returned per document. 1-20, default 5.'}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'documents': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of documents.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'required': ['documentId'], 'properties': {'limit': {'type': 'number', 'description': 'Max versions. Default: 50, max: 200.'}, 'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field projection. Valid fields: id, documentId, versionNumber, title, contentMarkdown, changeSummary, createdBy, createdAt.'}, 'offset': {'type': 'number', 'description': 'Pagination offset.'}, 'toDate': {'type': 'string', 'description': 'ISO 8601 date filter (to).'}, 'fromDate': {'type': 'string', 'description': 'ISO 8601 date filter (from).'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'documentId': {'type': 'string', 'description': 'Accepts either the UUID or the friendly id (e.g. DOC-815); friendly ids are resolved within your organisation.'}, 'sortAscending': {'type': 'boolean', 'description': 'Sort oldest first. Default: false.'}, 'versionNumber': {'type': 'number', 'description': 'Filter to a specific version.'}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'versions': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of versions.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'required': ['projectId'], 'properties': {'limit': {'type': 'number'}, 'query': {'type': 'string'}, 'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field projection. Valid fields: id, projectId, parentId, name, position, createdAt, updatedAt.'}, 'offset': {'type': 'number'}, 'toDate': {'type': 'string', 'description': 'ISO 8601 date filter (to).'}, 'fromDate': {'type': 'string', 'description': 'ISO 8601 date filter (from).'}, 'parentId': {'type': 'string'}, 'dateField': {'type': 'string', 'description': 'Date field to filter. Default: updated_at.'}, 'projectId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'folders': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of folders.'}, 'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'categories': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of categories.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'required': ['projectId'], 'properties': {'type': {'type': 'string', 'description': "Filter by type: feature, enhancement, bug, tech_debt, architecture_gap, documentation_gap, risk, epic, user_story, requirement, test_case, spike, task. Tasks (is_task=true) always have type='task'."}, 'limit': {'type': 'number', 'description': 'Max results (1-100, default 50).'}, 'query': {'type': 'string', 'description': 'Grep across title, friendlyId and problem_statement. Substring by default; a regular expression when isRegex:true; case-insensitive unless caseSensitive:true.'}, 'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field projection. Valid fields: id, friendly_id, friendlyId, title, type, status, priority, source, category_id, categoryId, parent_item_id, parentItemId, parentItem, created_at, createdAt, updated_at, updatedAt, versionTimestamp, href.'}, 'offset': {'type': 'number', 'description': 'Pagination offset.'}, 'source': {'type': 'string', 'description': 'Filter: agent_review, human_manual, doc_comment, feedback, incident, etc.'}, 'status': {'type': 'string', 'description': 'Filter: captured, triaging, shaped, approved, ready_for_agent, in_progress, ready_for_review, in_review, blocked, done, rejected, deferred.'}, 'isRegex': {'type': 'boolean', 'description': 'Treat query as a regular expression (grep -E), e.g. "ACME-\\d+". Default false (literal substring).'}, 'priority': {'type': 'string', 'description': 'Filter: low, medium, high, critical.'}, 'projectId': {'type': 'string'}, 'scanRunId': {'type': 'string', 'description': 'Filter by compliance scan run.'}, 'sortField': {'type': 'string', 'description': 'Sort field. Default: position.'}, 'agentReady': {'type': 'boolean', 'description': 'Filter by agent readiness.'}, 'categoryId': {'type': 'string', 'description': 'Filter by category ID.'}, 'frameworkKey': {'type': 'string', 'description': 'Filter by framework (e.g. soc2, iso27001).'}, 'parentItemId': {'type': 'string', 'maxLength': 64, 'description': 'Only the children of this item in the work hierarchy (its UUID or friendly id, such as IMP-12), whatever plan or phase they are in. "none" lists only the items with no parent. The work hierarchy is not the plan outline nesting (setPlanItemParent).'}, 'caseSensitive': {'type': 'boolean', 'description': 'Case-sensitive matching. Default false.'}, 'sortAscending': {'type': 'boolean', 'description': 'Sort ascending. Default: true.'}, 'complianceOnly': {'type': 'boolean', 'description': 'Only compliance-linked improvements.'}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}, 'improvements': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of improvements.'}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'limit': {'type': 'number', 'default': 50, 'maximum': 200, 'minimum': 1}, 'offset': {'type': 'number', 'default': 0, 'minimum': 0}, 'status': {'enum': ['pending', 'accepted', 'expired', 'declined', 'revoked', 'all'], 'type': 'string', 'default': 'pending'}, 'organisation_id': {'type': 'string', 'description': "Organisation UUID. Must match the credential's organisation."}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}, 'invitations': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of invitations.'}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'limit': {'type': 'number', 'description': 'Max rows (default 50, max 200).'}, 'offset': {'type': 'number', 'description': 'Pagination offset (default 0).'}, 'organisation_id': {'type': 'string', 'description': "UUID of the organisation. Must match the credential's organisation."}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'invoices': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of invoices.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'limit': {'type': 'number', 'default': 50, 'maximum': 200, 'minimum': 1}, 'offset': {'type': 'number', 'default': 0, 'minimum': 0}, 'include_invited': {'type': 'boolean', 'default': False, 'description': "When true, include rows that haven't joined yet (joined_at IS NULL)."}, 'organisation_id': {'type': 'string', 'description': "Organisation UUID. Must match the credential's organisation."}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'members': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of members.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'number'}, 'query': {'type': 'string'}, 'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field projection. Valid fields: id, name, slug, subscription_tier, created_at.'}, 'offset': {'type': 'number'}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}, 'organisations': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of organisations.'}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'organisation_id': {'type': 'string', 'description': "UUID of the organisation. Must match the credential's organisation."}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}, 'payment_methods': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of payment_methods.'}}}
输入模式
{'type': 'object', 'required': ['planId'], 'properties': {'planId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'phases': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of phases.'}, 'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'required': ['projectId'], 'properties': {'limit': {'type': 'number', 'description': 'Max results (1-100, default 50).'}, 'query': {'type': 'string', 'description': 'Grep across title, friendlyId and description. Substring by default; a regular expression when isRegex:true; case-insensitive unless caseSensitive:true.'}, 'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field projection. Valid fields: id, friendly_id, friendlyId, title, description, status, priority, icon, color, start_date, startDate, end_date, endDate, created_at, createdAt, updated_at, updatedAt, versionTimestamp, href.'}, 'offset': {'type': 'number', 'description': 'Pagination offset.'}, 'status': {'type': 'string', 'description': 'Filter: draft, planning, active, on_hold, completed, cancelled.'}, 'isRegex': {'type': 'boolean', 'description': 'Treat query as a regular expression (grep -E), e.g. "ACME-\\d+". Default false (literal substring).'}, 'priority': {'type': 'string', 'description': 'Filter: low, medium, high, critical.'}, 'projectId': {'type': 'string'}, 'sortField': {'type': 'string', 'description': 'Sort field. Default: created_at.'}, 'caseSensitive': {'type': 'boolean', 'description': 'Case-sensitive matching. Default false.'}, 'sortAscending': {'type': 'boolean', 'description': 'Sort ascending. Default: false.'}}}
输出模式
{'type': 'object', 'properties': {'plans': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of plans.'}, 'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'required': ['workspaceId'], 'properties': {'limit': {'type': 'number'}, 'query': {'type': 'string'}, 'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field projection. Valid fields: id, name, description, workspace_id, created_at, updated_at.'}, 'offset': {'type': 'number'}, 'toDate': {'type': 'string', 'description': 'ISO 8601 date filter (to).'}, 'fromDate': {'type': 'string', 'description': 'ISO 8601 date filter (from).'}, 'dateField': {'type': 'string', 'description': 'Date field to filter. Default: updated_at.'}, 'workspaceId': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'projects': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of projects.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'required': ['resource_type', 'resource_id'], 'properties': {'resource_id': {'type': 'string', 'description': 'UUID of the resource'}, 'resource_type': {'enum': ['workspace', 'project', 'folder', 'document', 'improvement', 'plan'], 'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}, 'permissions': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of permissions.'}}}
输入模式
{'type': 'object', 'properties': {'itemId': {'type': 'string', 'description': "Limit to one item's edges."}, 'planId': {'type': 'string', 'description': 'Limit to one plan.'}, 'direction': {'enum': ['predecessors', 'successors', 'both'], 'type': 'string', 'description': 'Only meaningful with itemId. Default: both.'}, 'projectId': {'type': 'string', 'description': 'Limit to one project (all plans).'}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}, 'dependencies': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of dependencies.'}}}
输入模式
{'type': 'object', 'required': ['planId'], 'properties': {'limit': {'type': 'number', 'description': 'Max results (1-100, default 50).'}, 'query': {'type': 'string', 'description': 'Grep across title, friendlyId and description. Substring by default; a regular expression when isRegex:true; case-insensitive unless caseSensitive:true.'}, 'offset': {'type': 'number', 'description': 'Pagination offset.'}, 'planId': {'type': 'string'}, 'status': {'type': 'string', 'description': 'Filter by status.'}, 'isRegex': {'type': 'boolean', 'description': 'Treat query as a regular expression (grep -E), e.g. "ACME-\\d+". Default false (literal substring).'}, 'phaseId': {'type': 'string', 'description': 'Filter by phase.'}, 'priority': {'type': 'string', 'description': 'Filter by priority.'}, 'sortField': {'type': 'string', 'description': 'Sort field. Default: position.'}, 'parentItemId': {'type': 'string', 'maxLength': 64, 'description': 'Only the children of this item in the work hierarchy (its UUID or friendly id, such as IMP-12), whatever plan or phase they are in. "none" lists only the items with no parent. The work hierarchy is not the plan outline nesting (setPlanItemParent).'}, 'caseSensitive': {'type': 'boolean', 'description': 'Case-sensitive matching. Default false.'}, 'sortAscending': {'type': 'boolean', 'description': 'Sort ascending. Default: true.'}}}
输出模式
{'type': 'object', 'properties': {'tasks': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of tasks.'}, 'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'properties': {'q': {'type': 'string', 'description': 'Deprecated alias for `query`, still accepted. Prefer `query` â\x80\x94 that is the name every other list tool uses.'}, 'limit': {'type': 'number', 'description': 'Max teams per page (1-200, default 50).'}, 'query': {'type': 'string', 'description': 'Optional ILIKE search on team name/slug.'}, 'offset': {'type': 'number', 'description': 'Pagination offset.'}, 'workspaceId': {'type': 'string', 'description': 'Workspace UUID. The parent organization is resolved from v_workspaces.'}, 'includeMembers': {'type': 'boolean', 'description': 'When true, each team gets a `members` array (user_id, role, joined_at). Capped at 500 total members across the page. Default false.'}, 'organizationId': {'type': 'string', 'description': 'Organization UUID. Either this OR workspaceId is required.'}}}
输出模式
{'type': 'object', 'properties': {'teams': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of teams.'}, 'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'required': ['projectId'], 'properties': {'query': {'type': 'string', 'description': 'Grep across title and friendlyId. Substring by default; a regular expression when isRegex is true.'}, 'isRegex': {'type': 'boolean', 'description': 'Treat `query` as a regular expression.'}, 'projectId': {'type': 'string'}, 'caseSensitive': {'type': 'boolean', 'description': 'Match case exactly. Default false.'}}}
输出模式
{'type': 'object', 'properties': {'items': {'type': 'array', 'items': {'type': 'object'}}, 'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'properties': {'pack': {'type': 'string', 'description': "Restrict to one pack, e.g. 'Flowchart', 'BPMN', 'UML & ER', 'Scrum Board', 'Lo-Fi Wireframes', 'Org Chart'."}, 'limit': {'type': 'number', 'description': 'Max results (default 60, max 200).'}, 'query': {'type': 'string', 'description': "Free-text search across name + pack + category (e.g. 'decision', 'database table', 'phone frame', 'actor', 'kanban column')."}, 'category': {'type': 'string', 'description': "Filter by category: 'Notes & Planning', 'Diagramming', 'UI & Wireframing', 'Data & Charts', 'People & Fun'."}}}
输出模式
{'type': 'object', 'properties': {'items': {'type': 'array', 'items': {'type': 'object'}}, 'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}}}
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'number'}, 'query': {'type': 'string'}, 'fields': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Field projection. Valid fields: id, name, slug, organization_id, created_at, updated_at.'}, 'offset': {'type': 'number'}, 'toDate': {'type': 'string', 'description': 'ISO 8601 date filter (to).'}, 'fromDate': {'type': 'string', 'description': 'ISO 8601 date filter (from).'}, 'dateField': {'type': 'string', 'description': 'Date field to filter. Default: updated_at.'}, 'organisationId': {'type': 'string', 'description': 'Return only workspaces in this organisation. Use listOrganisations to find the id. (organizationId is accepted as a spelling alias.)'}, 'organizationId': {'type': 'string', 'description': 'Spelling alias for organisationId.'}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}, 'workspaces': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Page of workspaces.'}}}
输入模式
{'type': 'object', 'required': ['device_code'], 'properties': {'device_code': {'type': 'string', 'description': 'The device_code returned from startSignup.'}}}
输出模式
{'type': 'object', 'properties': {'status': {'enum': ['pending', 'approved', 'denied', 'expired'], 'type': 'string'}, 'api_key': {'type': 'string', 'description': 'Set when status=approved. Format: sta_*.'}, 'user_id': {'type': 'string'}, 'organisation_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'force': {'type': 'boolean'}, 'project_id': {'type': 'string'}, 'workspace_id': {'type': 'string'}, 'organisation_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'summary': {'type': 'object', 'description': 'Human-readable summary of the proposed change for the user to review before confirming.'}, 'expires_at': {'type': 'string', 'format': 'date-time'}, 'confirmation_token': {'type': 'string', 'description': 'Server-minted token. Pass to the matching apply* tool to commit the change. Single-use, 10-minute TTL.'}}}
输入模式
{'type': 'object', 'required': ['organisation_id', 'changes'], 'properties': {'changes': {'type': 'array', 'items': {'type': 'object', 'required': ['scope_type', 'scope_id', 'new_state'], 'properties': {'scope_id': {'type': 'string'}, 'new_state': {'enum': ['on', 'off', 'inherit'], 'type': 'string'}, 'scope_type': {'enum': ['organisation', 'workspace', 'project', 'folder', 'document'], 'type': 'string'}}, 'additionalProperties': False}, 'maxItems': 200, 'minItems': 1}, 'organisation_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'summary': {'type': 'object', 'description': 'Human-readable summary of the proposed change for the user to review before confirming.'}, 'expires_at': {'type': 'string', 'format': 'date-time'}, 'confirmation_token': {'type': 'string', 'description': 'Server-minted token. Pass to the matching apply* tool to commit the change. Single-use, 10-minute TTL.'}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'organisation_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'summary': {'type': 'object', 'description': 'Human-readable summary of the proposed change for the user to review before confirming.'}, 'expires_at': {'type': 'string', 'format': 'date-time'}, 'confirmation_token': {'type': 'string', 'description': 'Server-minted token. Pass to the matching apply* tool to commit the change. Single-use, 10-minute TTL.'}}}
输入模式
{'type': 'object', 'required': ['organisation_id', 'target_tier'], 'properties': {'target_tier': {'enum': ['free', 'pro', 'enterprise'], 'type': 'string'}, 'target_seats': {'type': 'integer', 'minimum': 1}, 'organisation_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'summary': {'type': 'object', 'description': 'Human-readable summary of the proposed change for the user to review before confirming.'}, 'expires_at': {'type': 'string', 'format': 'date-time'}, 'confirmation_token': {'type': 'string', 'description': 'Server-minted token. Pass to the matching apply* tool to commit the change. Single-use, 10-minute TTL.'}}}
输入模式
{'type': 'object', 'required': ['planId'], 'properties': {'planId': {'type': 'string', 'description': 'Plan to evaluate.'}, 'forwardOnly': {'type': 'boolean'}, 'pinnedItemIds': {'type': 'array', 'items': {'type': 'string'}}}}
输出模式
{'type': 'object', 'properties': {'summary': {'type': 'object', 'description': 'Human-readable summary of the proposed change for the user to review before confirming.'}, 'expires_at': {'type': 'string', 'format': 'date-time'}, 'confirmation_token': {'type': 'string', 'description': 'Server-minted token. Pass to the matching apply* tool to commit the change. Single-use, 10-minute TTL.'}}}
输入模式
{'type': 'object', 'required': ['quote_token'], 'properties': {'quote_token': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'applied': {'type': 'boolean', 'description': 'True when the apply call has been atomically committed.'}}}
输入模式
{'type': 'object', 'required': ['organisation_id', 'package_id'], 'properties': {'package_id': {'type': 'string', 'description': 'v_credit_packages.id'}, 'organisation_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'summary': {'type': 'object', 'description': 'Human-readable summary of the proposed change for the user to review before confirming.'}, 'expires_at': {'type': 'string', 'format': 'date-time'}, 'confirmation_token': {'type': 'string', 'description': 'Server-minted token. Pass to the matching apply* tool to commit the change. Single-use, 10-minute TTL.'}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'organisation_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'subscription': {'type': 'object'}}}
输入模式
{'type': 'object', 'properties': {'types': {'type': 'array', 'items': {'enum': ['tool', 'stencil', 'icon', 'infographic_template', 'whiteboard_component', 'skill'], 'type': 'string'}, 'description': 'Which catalogs to sync. Defaults to all six (tool, stencil, icon, infographic_template, whiteboard_component, skill).'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['organisation_id', 'user_id'], 'properties': {'user_id': {'type': 'string'}, 'organisation_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['team_id', 'user_id'], 'properties': {'team_id': {'type': 'string'}, 'user_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['workspace_id', 'user_id'], 'properties': {'user_id': {'type': 'string'}, 'workspace_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['diagramType', 'source'], 'properties': {'scale': {'enum': [1, 2, 3], 'type': 'number', 'description': 'Raster resolution multiplier 1x/2x/3x (default 2). Ignored for svg.'}, 'format': {'enum': ['png', 'jpeg', 'svg'], 'type': 'string', 'description': "png (default) or jpeg = raster; svg is scalable. A platform default diagram's SVG contains a browser foreignObject scene, so use PNG/JPEG where foreignObject SVG is unsupported."}, 'source': {'type': 'string', 'description': "The diagram DSL / code to render. For 'default', provide MDP JSON with stable IDs and omit entity x/y for automatic layout; fully positioned manual sources remain valid; icons must be exact iconKey values from listArchitectureIcons. For 'infographic', provide a plain-English description instead (the system designs the AntV infographic spec)."}, 'projectId': {'type': 'string', 'description': 'Optional project UUID used to resolve the project â\x86\x92 workspace â\x86\x92 org brand-kit cascade. Without it the built-in Stable Baseline brand themes the render.'}, 'background': {'type': 'string', 'description': "Background for png/jpeg, e.g. '#ffffff' or 'transparent' (png only)."}, 'brandKitId': {'type': 'string', 'description': 'Optional brand kit UUID (see listBrandKits) to theme with instead of the cascade default. Must belong to your organisation.'}, 'diagramType': {'type': 'string', 'description': "Diagram language, e.g. 'default', 'mermaid', 'd2', 'plantuml', 'graphviz', 'bpmn', 'vegalite'. For a diagram family, use its defaultRenderer from listDiagramTypes."}, 'applyBrandTheme': {'type': 'boolean', 'description': "Brand theming is ON BY DEFAULT: the effective BRAND KIT (colours only â\x80\x94 typefaces are never injected) is baked into the diagram before rendering (cascade: brandKitId override â\x86\x92 project default â\x86\x92 workspace default â\x86\x92 org default â\x86\x92 the built-in Stable Baseline theme). Set false to render with the library's stock styling instead. Themable types: mermaid, plantuml, graphviz, d2, systemsarchitecture, vega, vegalite, infographic â\x80\x94 other types always render unchanged. Author theming in the DSL wins (an existing mermaid %%{init}%%, plantuml !theme, d2 vars.d2-config, or a hand-written infographic palette is never overridden)."}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['items'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['documentId'], 'properties': {'folderId': {'type': ['string', 'null'], 'description': 'MOVE the document into this folder; null moves it to the project root. Omit to leave its current folder untouched. The folder must exist and belong to the same project.'}, 'position': {'type': 'number', 'description': 'Optional. Sort position among siblings (non-negative integer). OMIT to let the server place it: appended to the end of the target folder when the folder changes, otherwise left where it is. Omitting is the norm when filing; supply positions only when you are deliberately ordering siblings, usually renumbering them 0, 1, 2â\x80¦.'}, 'documentId': {'type': 'string'}}}, 'minItems': 1, 'description': 'Documents to file. All must belong to the same project (a batch spanning projects is rejected).'}}}
输出模式
{'type': 'object', 'properties': {'reordered': {'type': 'number'}}}
输入模式
{'type': 'object', 'required': ['items'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['folderId', 'position'], 'properties': {'folderId': {'type': 'string'}, 'position': {'type': 'number'}}}, 'minItems': 1, 'description': 'List of folder position updates. All folders must belong to the same project.'}}}
输出模式
{'type': 'object', 'properties': {'reordered': {'type': 'number'}}}
输入模式
{'type': 'object', 'required': ['items'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['categoryId', 'sortOrder'], 'properties': {'sortOrder': {'type': 'number'}, 'categoryId': {'type': 'string'}}}, 'description': 'Array of {categoryId, sortOrder}.'}}}
输出模式
{'type': 'object', 'properties': {'categories': {'type': 'array', 'items': {'type': 'object'}}}}
输入模式
{'type': 'object', 'required': ['items'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['phaseId', 'position'], 'properties': {'phaseId': {'type': 'string'}, 'position': {'type': 'number'}}}, 'description': 'Array of {phaseId, position}.'}}}
输出模式
{'type': 'object', 'properties': {'phases': {'type': 'array', 'items': {'type': 'object'}}}}
输入模式
{'type': 'object', 'required': ['invitation_id'], 'properties': {'invitation_id': {'type': 'string', 'description': "Invitation UUID. Must currently be in 'pending' status."}}}
输出模式
{'type': 'object', 'properties': {'invitation': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['document_id'], 'properties': {'document_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}}}
输入模式
{'type': 'object', 'required': ['team_id', 'workspace_id'], 'properties': {'team_id': {'type': 'string'}, 'workspace_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean', 'description': 'Alias of success.'}, 'success': {'type': 'boolean', 'description': 'True when the deletion completed.'}, 'deleted_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'number', 'description': 'Max results (default 20, max 50).'}, 'query': {'type': 'string', 'description': 'Search query â\x80\x94 meaning, a name fragment, or a friendly id (e.g. "IMP-2", "TAS-7").'}, 'types': {'type': 'array', 'items': {'enum': ['improvement', 'task'], 'type': 'string'}, 'description': 'Narrow to one kind. Omit (or pass both) to search improvements and tasks together. Other artefact types are NOT accepted here â\x80\x94 use kg_search with artefactMetadataOnly:true for those.'}, 'projectId': {'type': 'string', 'description': 'Limit to a project.'}, 'workspaceId': {'type': 'string', 'description': 'Limit to a workspace.'}}}
输出模式
{'type': 'object', 'properties': {'total': {'type': 'number'}, 'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'matches': {'type': 'array', 'items': {'type': 'object'}}, 'artefacts': {'type': 'array', 'items': {'type': 'object'}}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}, 'improvements': {'type': 'array', 'items': {'type': 'object'}}, 'totalMatches': {'type': 'number'}}}
输入模式
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'number', 'description': 'Max templates to return (default 12).'}, 'query': {'type': 'string', 'description': "What the infographic should show (intent/topic), e.g. 'compare pros and cons', 'launch roadmap timeline', 'market share pie'."}}}
输出模式
{'type': 'object', 'properties': {'hasMore': {'type': 'boolean', 'description': 'True if more rows are available beyond the returned page.'}, 'matches': {'type': 'array', 'items': {'type': 'object'}}, 'nextOffset': {'type': 'number', 'description': 'Pass as `offset` on the next call to continue paging.'}, 'totalCount': {'type': 'number', 'description': 'Total matching rows (when the data source provides it).'}, 'totalMatches': {'type': 'number'}}}
输入模式
{'type': 'object', 'properties': {'query': {'type': 'string', 'description': 'Natural language description of what you want to do.'}, 'category': {'enum': ['navigation', 'folders', 'documents', 'diagrams', 'images', 'whiteboards', 'data', 'improvements', 'plans', 'knowledge_graph', 'organization', 'members', 'teams', 'permissions', 'billing', 'kg_admin', 'settings', 'signup'], 'type': 'string', 'description': "Category filter. One of the 18 categories returned in each result's `category` field."}}}
输出模式
{'type': 'object', 'properties': {'error': {'type': 'string', 'description': 'Set when category filter is invalid.'}, 'matches': {'type': 'array', 'items': {'type': 'object', 'properties': {'name': {'type': 'string'}, 'score': {'type': 'number'}, 'category': {'type': 'string'}, 'description': {'type': 'string'}}}, 'description': 'Tool catalogue entries ranked by relevance to the query.'}, 'message': {'type': 'string', 'description': 'Set when query/category is missing â\x80\x94 agent should retry.'}, 'categories': {'type': 'array', 'items': {'type': 'string'}}, 'totalTools': {'type': 'number'}, 'totalMatches': {'type': 'number'}, 'toolCountByCategory': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['scope', 'scopeId'], 'properties': {'scope': {'enum': ['organization', 'workspace', 'project', 'folder', 'document'], 'type': 'string'}, 'scopeId': {'type': 'string', 'description': 'The org/workspace/project/folder/document id for the chosen scope.'}, 'brandKitId': {'type': ['string', 'null'], 'description': 'Brand kit to make default, or null to clear.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['document_id', 'state'], 'properties': {'state': {'enum': ['on', 'off', 'inherit'], 'type': 'string'}, 'document_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['folder_id', 'state'], 'properties': {'state': {'enum': ['on', 'off', 'inherit'], 'type': 'string'}, 'folder_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['project_id', 'mode'], 'properties': {'mode': {'enum': ['strict', 'permissive', 'open'], 'type': 'string'}, 'project_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['workspace_id', 'state'], 'properties': {'state': {'enum': ['on', 'off', 'inherit'], 'type': 'string'}, 'workspace_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['organisation_id', 'user_id', 'is_active'], 'properties': {'user_id': {'type': 'string'}, 'is_active': {'type': 'boolean'}, 'organisation_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'member': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['itemId'], 'properties': {'itemId': {'type': 'string', 'description': 'Item ID to indent or un-indent in the plan outline.'}, 'parentId': {'type': 'string', 'description': "The outline parent's ID, in the same plan and phase. Null to un-indent. Not the work hierarchy parent (parentItemId)."}}}
输出模式
{'type': 'object', 'properties': {'item': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['permission_id', 'override_kind', 'axis', 'value'], 'properties': {'axis': {'enum': ['read', 'write', 'delete'], 'type': 'string'}, 'value': {'type': ['boolean', 'null'], 'description': 'true=allow, false=deny, null=inherit'}, 'override_kind': {'enum': ['documents', 'improvements', 'plans'], 'type': 'string'}, 'permission_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'permission': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['documentId', 'meetingUrl'], 'properties': {'agenda': {'type': 'array', 'items': {'type': 'object', 'required': ['label'], 'properties': {'id': {'type': 'string', 'description': 'Optional stable id; one is minted if omitted.'}, 'label': {'type': 'string', 'description': 'The agenda item text.'}, 'status': {'enum': ['pending', 'active', 'done'], 'type': 'string', 'description': 'Optional starting status sticker. Default: pending.'}}, 'description': 'One agenda item.'}, 'description': 'Optional agenda pre-drawn on the board as a left rail; each item gets a status sticker (pending, active, done) as the conversation reaches it. Omit to let the rail build itself from the topics that emerge.'}, 'confirm': {'type': 'boolean', 'description': 'Set true ONLY after the user has approved the per-minute cost. Leave unset/false on the first call to receive the quote plus balance.'}, 'settings': {'type': 'object', 'description': "Optional per-meeting settings: { language (BCP-47, e.g. 'en'), sttProvider ('assemblyai' default, or 'captions'), presentMode ('off' default, or 'camera'/'screenshare' to stream the live board back into the meeting), botName (override the default '{Org} Scribe (Stable Baseline)') }.", 'additionalProperties': True}, 'documentId': {'type': 'string', 'description': 'The whiteboard the scribe paints into. REQUIRED: a meeting scribe always paints an existing board. If you do not have a whiteboard id, ask the user which whiteboard to use; never create one automatically.'}, 'meetingUrl': {'type': 'string', 'description': 'The meeting link to join: a Zoom, Google Meet, Microsoft Teams, or Webex URL (https only). Any other host is rejected.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'properties': {'intent': {'enum': ['mcp_setup'], 'type': 'string', 'description': "Reason for the signup. Currently only 'mcp_setup' is supported."}, 'agent_label': {'type': 'string', 'maxLength': 60, 'description': "Self-identification of the calling agent (e.g. 'Claude Desktop', 'Cursor', 'Custom CLI'). Shown to the user on the confirmation page so they know what they're authorizing."}, 'desired_org_name': {'type': 'string', 'maxLength': 80, 'description': 'Optional hint for the org name to suggest if the user has no organisation yet. Ignored for users who already have an org.'}}}
输出模式
{'type': 'object', 'properties': {'interval': {'type': 'number', 'description': 'Seconds between pollSignupStatus calls.'}, 'user_code': {'type': 'string'}, 'expires_at': {'type': 'string'}, 'device_code': {'type': 'string'}, 'verification_url': {'type': 'string'}, 'verification_url_complete': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['sessionId'], 'properties': {'sessionId': {'type': 'string', 'description': 'The meeting scribe session to stop, as returned by startMeetingScribe.'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['documentId'], 'properties': {'x': {'type': 'number', 'description': 'Top-left x on the canvas. Omit to auto-place to the right of existing content.'}, 'y': {'type': 'number', 'description': 'Top-left y on the canvas. Omit to auto-place.'}, 'style': {'enum': ['sketch', 'color', 'poster'], 'type': 'string', 'description': "Vectorisation style. 'sketch' = clean line art (default), 'color' = more colors, 'poster' = posterised."}, 'width': {'type': 'number', 'description': 'Target display width in px (default 520); the drawing scales to fit, aspect preserved.'}, 'imageUrl': {'type': 'string', 'description': 'URL to fetch the image from (http/https; private and metadata hosts are blocked).'}, 'mimeType': {'type': 'string', 'description': "Optional image MIME type hint (e.g. 'image/png'); auto-detected otherwise."}, 'maxColors': {'type': 'number', 'description': 'Palette size 2-16 (defaults by style: sketch 3, color 8, poster 12).'}, 'documentId': {'type': 'string', 'description': "The whiteboard's documentId."}, 'maxStrokes': {'type': 'number', 'description': 'Cap on the number of strokes, 20-1200 (default 600). Lower = simpler and faster.'}, 'imageBase64': {'type': 'string', 'description': 'Base64-encoded image bytes (a data: URL prefix is allowed). Use instead of imageUrl.', 'contentEncoding': 'base64'}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['confirmation_token'], 'properties': {'confirmation_token': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'ok': {'type': 'boolean'}, 'batch_id': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['organisation_id', 'email'], 'properties': {'email': {'type': 'string'}, 'organisation_id': {'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'billing_email': {'type': 'string'}}}
输入模式
{'type': 'object', 'required': ['diagramId'], 'properties': {'align': {'enum': ['left', 'center', 'right'], 'type': 'string', 'description': 'Alignment.'}, 'prompt': {'type': 'string', 'description': 'New short description (metadata only â\x80\x94 does NOT change the rendered diagram).'}, 'caption': {'type': 'string', 'description': 'New caption.'}, 'colorPlan': {'type': 'object', 'required': ['byElementId'], 'properties': {'byElementId': {'type': 'object', 'description': 'Map of element IDs to color swatch names.', 'additionalProperties': {'type': 'string'}}}, 'description': 'BPMN only. Updated color plan. Set to null to remove.'}, 'diagramId': {'type': 'string', 'description': 'Diagram ID from DIAGRAM_OMITTED markers.'}, 'brandKitId': {'type': 'string', 'description': 'Optional brand kit UUID (see listBrandKits) to theme with instead of the cascade default. Must belong to your organisation.'}, 'diagramCode': {'type': 'string', 'description': "New diagram DSL source code. REQUIRED to change what the diagram visually renders. Call getDiagramTypeGuide for syntax. Must provide the COMPLETE updated DSL, not just the changed parts. For 'default', provide complete MDP JSON and preserve stable IDs; omit entity x/y for automatic layout, or preserve all x/y in a manually positioned legacy diagram. Root layout.mode='auto' can explicitly rearrange an existing diagram. Its icons must be exact iconKey values from listArchitectureIcons. EXCEPTION â\x80\x94 for type 'infographic', pass either a plain-English DESCRIPTION of the new infographic (the system designs, renders, and stores the AntV spec, same as insert) or complete AntV Infographic DSL (first line `infographic <template-name>`)."}, 'nlDescription': {'type': 'string', 'description': 'New extended description (metadata only â\x80\x94 does NOT change the rendered diagram).'}, 'applyBrandTheme': {'type': 'boolean', 'description': "Brand theming is ON BY DEFAULT when diagramCode is provided: the document's effective BRAND KIT is baked into the new DSL before it is validated, rendered and stored. Set false to keep the library's stock styling. Same cascade + themable types + author-wins guards as insertDiagramInDocument. The stored diagramCode is the THEMED source."}, 'diagramVersionTimestamp': {'type': 'number', 'description': "Diagram-level optimistic lock: versionTimestamp of THIS diagram (from getDiagramInDocument, getDocument with includeDiagramDsl:true, or a previous write's response). Preferred: locks only this diagram, so concurrent edits to OTHER diagrams in the same document don't conflict. (Alias accepted: versionTimestamp.) The response returns the new diagram.versionTimestamp for chaining further edits."}, 'documentVersionTimestamp': {'type': 'number', 'description': 'Document-level optimistic lock: versionTimestamp from getDocument(). Locks the whole document. Provide this OR diagramVersionTimestamp (at least one is required).'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'diagram': {'type': 'object'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['folderId'], 'properties': {'name': {'type': 'string'}, 'folderId': {'type': 'string'}, 'parentId': {'type': 'string'}, 'position': {'type': 'number'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'folder': {'type': 'object', 'description': 'The folder after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['imageId'], 'properties': {'alt': {'type': 'string', 'description': 'New alt text.'}, 'align': {'enum': ['left', 'center', 'right'], 'type': 'string', 'description': 'Alignment.'}, 'width': {'type': 'number', 'description': 'Width in pixels.'}, 'height': {'type': 'number', 'description': 'Height in pixels.'}, 'caption': {'type': 'string', 'description': 'New caption.'}, 'imageId': {'type': 'string', 'description': 'Image ID from IMAGE_OMITTED markers.'}, 'nlDescription': {'type': 'string', 'description': 'New image description.'}, 'documentVersionTimestamp': {'type': 'number', 'description': "Optimistic-lock token: the document's versionTimestamp from getDocument() or any mutating tool's response. (Alias accepted: versionTimestamp.)"}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'image': {'type': 'object'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'properties': {'type': {'type': 'string', 'description': "One of: feature (New capability for users); enhancement (An improvement to something that already exists); bug (Something that does not work as it should); tech_debt (Work that makes the system easier and safer to change); architecture_gap (A missing or weak part of the architecture); documentation_gap (Documentation that is missing or out of date); risk (Something that could go wrong, to track and reduce); epic (A large body of work, delivered through several stories, features or tasks); user_story (A need told from a user's view: as a role, I want a goal, so that a benefit); requirement (A condition or capability the solution must meet, stated so it can be verified); test_case (Steps that verify a requirement or story, each with its expected result); spike (Time-boxed research to answer a question before committing to the work); task (A unit of work in a plan). Changing the type keeps everything written on the item, its parent and children included. The id's prefix follows the type (see createImprovement's type) and its number stays, so the id can change (STY-30 becomes IMP-30 when a story becomes a feature): the answer's note then gives the new id, and the old one still resolves."}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['improvementId', 'versionTimestamp'], 'properties': {'type': {'type': 'string'}, 'title': {'type': 'string'}, 'status': {'enum': ['captured', 'triaging', 'shaped', 'approved', 'ready_for_agent', 'in_progress', 'ready_for_review', 'in_review', 'blocked', 'done', 'rejected', 'deferred'], 'type': 'string'}, 'details': {'type': 'object', 'properties': {'as_a': {'type': ['string', 'null'], 'maxLength': 500}, 'i_want': {'type': ['string', 'null'], 'maxLength': 500}, 'source': {'type': ['string', 'null'], 'maxLength': 500}, 'so_that': {'type': ['string', 'null'], 'maxLength': 500}, 'timebox': {'type': ['string', 'null'], 'maxLength': 500}, 'findings': {'type': ['string', 'null'], 'maxLength': 20000}, 'question': {'type': ['string', 'null'], 'maxLength': 20000}, 'rationale': {'type': ['string', 'null'], 'maxLength': 20000}, 'statement': {'type': ['string', 'null'], 'maxLength': 20000}, 'test_data': {'type': ['string', 'null'], 'maxLength': 20000}, 'test_steps': {'type': ['array', 'null'], 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'maxLength': 64}, 'action': {'type': 'string', 'maxLength': 4000}, 'expected': {'type': 'string', 'maxLength': 4000}}}, 'maxItems': 200}, 'last_result': {'enum': ['not_run', 'passed', 'failed', 'blocked', None], 'type': ['string', 'null']}, 'last_run_on': {'type': ['string', 'null']}, 'story_points': {'type': ['number', 'null'], 'maximum': 1000, 'minimum': 0}, 'preconditions': {'type': ['string', 'null'], 'maxLength': 20000}, 'requirement_kind': {'enum': ['functional', 'non_functional', 'interface', 'data', 'business_rule', 'constraint', 'compliance', None], 'type': ['string', 'null']}, 'success_measures': {'type': ['string', 'null'], 'maxLength': 20000}, 'verification_method': {'enum': ['test', 'inspection', 'analysis', 'demonstration', None], 'type': ['string', 'null']}}}, 'is_task': {'type': 'boolean'}, 'plan_id': {'type': 'string'}, 'urgency': {'type': 'string'}, 'why_now': {'type': 'string'}, 'end_date': {'type': 'string'}, 'metadata': {'type': 'object'}, 'owner_id': {'type': ['string', 'null']}, 'phase_id': {'type': 'string'}, 'position': {'type': 'number'}, 'priority': {'type': 'string'}, 'wbs_code': {'type': 'string'}, 'checklist': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string'}, 'text': {'type': 'string'}, 'due_date': {'type': 'string'}, 'completed': {'type': 'boolean'}, 'updated_at': {'type': 'string'}, 'updated_by': {'type': 'string'}, 'completed_at': {'type': 'string'}, 'completed_by': {'type': 'string'}, 'updated_by_credential_name': {'type': 'string'}, 'completed_by_credential_name': {'type': 'string'}}}}, 'non_goals': {'type': 'array', 'items': {'type': 'string'}}, 'start_date': {'type': 'string'}, 'agent_brief': {'type': 'string'}, 'agent_ready': {'type': 'boolean'}, 'category_id': {'type': 'string'}, 'constraints': {'type': 'array', 'items': {'type': 'string'}}, 'description': {'type': 'string'}, 'target_date': {'type': 'string'}, 'user_impact': {'type': 'string'}, 'docs_updated': {'type': 'boolean'}, 'parentItemId': {'type': ['string', 'null'], 'maxLength': 64}, 'improvementId': {'type': 'string'}, 'owner_team_id': {'type': ['string', 'null']}, 'relationships': {'type': 'object'}, 'blocked_comment': {'type': 'string'}, 'business_impact': {'type': 'string'}, 'desired_outcome': {'type': 'string'}, 'agent_complexity': {'type': 'string'}, 'agent_confidence': {'type': 'number'}, 'follow_up_needed': {'type': 'boolean'}, 'metadata_replace': {'type': 'boolean'}, 'percent_complete': {'type': 'number'}, 'reopened_comment': {'type': 'string'}, 'versionTimestamp': {'type': 'number'}, 'impacted_diagrams': {'type': 'array', 'items': {'type': 'object'}}, 'problem_statement': {'type': 'string'}, 'rejection_comment': {'type': 'string'}, 'resolution_pr_url': {'type': 'string'}, 'agent_missing_info': {'type': 'array', 'items': {'type': 'string'}}, 'completion_comment': {'type': 'string'}, 'impacted_documents': {'type': 'array', 'items': {'type': 'object'}}, 'resolution_summary': {'type': 'string'}, 'acceptance_criteria': {'type': 'array', 'items': {'anyOf': [{'type': 'string'}, {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string'}, 'text': {'type': 'string'}, 'updated_at': {'type': 'string'}, 'updated_by': {'type': 'string'}, 'updated_by_credential_name': {'type': 'string'}}}]}}, 'impacted_components': {'type': 'array', 'items': {'type': 'string'}}, 'linked_document_ids': {'type': 'array', 'items': {'type': 'string'}}, 'impacted_repositories': {'type': 'array', 'items': {'type': 'string'}}, 'agent_recommended_action': {'type': 'string'}}}, 'maxItems': 200, 'minItems': 1, 'description': 'Optional bulk form: update up to 200 improvements in one call, each entry { improvementId, versionTimestamp, ...the fields to change } with the same fields as a single call. Every entry is checked and written on its own (permission, optimistic lock, audit), so one entry\'s conflict or error never stops the others. The answer has one row per entry, in your order: { index, id, status: "updated", versionTimestamp } or { index, id, status: "conflict" or "failed", error } (a conflict also carries currentVersionTimestamp), plus summary { requested, updated, failed, conflicts }. With items, send nothing else at the top level except projectId, planId and fields; fields then picks extra fields for each updated row (a row\'s status is its outcome, so the improvement\'s own status comes back as improvementStatus).'}, 'title': {'type': 'string'}, 'fields': {'type': 'array', 'items': {'type': 'string', 'maxLength': 64}, 'maxItems': 50, 'description': 'Optional. Answer with only these fields instead of the whole improvement, for example ["id", "versionTimestamp"]. Any of the improvement\'s own fields (snake_case or camelCase) or of the keys around it in the full answer (versionTimestamp, href and, where present, url, title, trackingId, message). The id is always returned, and so is any notice that needs your attention (a note, such as a phase\'s dates following its tasks or an item\'s id changing with its type, and a date change\'s cascadePreview). Unknown names are ignored.'}, 'planId': {'type': 'string', 'description': "Optional. Narrows a friendly-id lookup (such as IMP-42) to one plan, given as the plan's UUID or friendly id (such as PLN-3): the item must be in that plan. It never moves anything (plan_id does that) and is ignored when the id is a UUID."}, 'status': {'enum': ['captured', 'triaging', 'shaped', 'approved', 'ready_for_agent', 'in_progress', 'ready_for_review', 'in_review', 'blocked', 'done', 'rejected', 'deferred'], 'type': 'string'}, 'details': {'type': 'object', 'properties': {'as_a': {'type': ['string', 'null'], 'maxLength': 500, 'description': 'As a (role or persona)'}, 'i_want': {'type': ['string', 'null'], 'maxLength': 500, 'description': 'I want (what they want to do)'}, 'source': {'type': ['string', 'null'], 'maxLength': 500, 'description': 'Source (A stakeholder, regulation or document)'}, 'so_that': {'type': ['string', 'null'], 'maxLength': 500, 'description': 'So that (the benefit to them)'}, 'timebox': {'type': ['string', 'null'], 'maxLength': 500, 'description': 'Timebox (e.g. 3 days)'}, 'findings': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Findings (What was learned, and the recommendation...)'}, 'question': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Question (What does this spike need to find out?)'}, 'rationale': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Rationale (Why it is needed...)'}, 'statement': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Requirement (The system shall...)'}, 'test_data': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Test Data (Inputs, accounts or records the steps use...)'}, 'test_steps': {'type': ['array', 'null'], 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'maxLength': 64, 'description': 'Optional; minted if omitted. Echo it back on the steps you keep.'}, 'action': {'type': 'string', 'maxLength': 4000, 'description': 'What the tester does.'}, 'expected': {'type': 'string', 'maxLength': 4000, 'description': 'What should happen.'}}}, 'maxItems': 200, 'description': 'Test Steps, in order. The list you send REPLACES the stored one.'}, 'last_result': {'enum': ['not_run', 'passed', 'failed', 'blocked', None], 'type': ['string', 'null'], 'description': 'Last Result'}, 'last_run_on': {'type': ['string', 'null'], 'description': 'Last Run, YYYY-MM-DD.'}, 'story_points': {'type': ['number', 'null'], 'maximum': 1000, 'minimum': 0, 'description': 'Story Points (e.g. 3)'}, 'preconditions': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Preconditions (What must be true before the test starts...)'}, 'requirement_kind': {'enum': ['functional', 'non_functional', 'interface', 'data', 'business_rule', 'constraint', 'compliance', None], 'type': ['string', 'null'], 'description': 'Kind'}, 'success_measures': {'type': ['string', 'null'], 'maxLength': 20000, 'description': 'Success Measures (How will you know this epic delivered its outcome?)'}, 'verification_method': {'enum': ['test', 'inspection', 'analysis', 'demonstration', None], 'type': ['string', 'null'], 'description': 'Verified By'}}, 'description': "The type's own fields. On update they MERGE key by key: keys you leave out are kept and null removes one. epic: success_measures. user_story: as_a, i_want, so_that (read as 'As a <as_a>, I want <i_want>, so that <so_that>') and story_points. requirement: statement ('The system shall...'), requirement_kind, rationale, source, verification_method. test_case: preconditions, test_steps (ordered { action, expected }), test_data, last_result, last_run_on. spike: question, timebox, findings. An item keeps its details when its type changes."}, 'is_task': {'type': 'boolean', 'description': "Mark as task. Prefer setting type='task' instead â\x80\x94 is_task is kept in sync from the type enum by a DB trigger."}, 'plan_id': {'type': 'string', 'description': 'Link to plan. Null to unlink.'}, 'urgency': {'type': 'string'}, 'why_now': {'type': 'string'}, 'end_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'metadata': {'type': 'object', 'description': "Free-form JSON. MERGES into the stored object key by key: keys you don't send are left alone, and sending a key with value null deletes it. Send metadata_replace:true to overwrite the whole object instead. (Merging is the default so a partial write can never destroy a sibling key written by another actor.)"}, 'owner_id': {'type': ['string', 'null'], 'description': "User UUID to assign as owner, or null to unassign. MUTUALLY EXCLUSIVE with owner_team_id â\x80\x94 when switching from a user to a team owner, send `owner_id: null` in the same call as `owner_team_id`. Use listAssignablePrincipals(projectId, kind='user', q='â\x80¦') to look up valid UUIDs."}, 'phase_id': {'type': 'string', 'description': 'Assign to phase. Null to unassign.'}, 'position': {'type': 'number'}, 'priority': {'type': 'string'}, 'wbs_code': {'type': 'string'}, 'checklist': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string', 'description': 'Optional â\x80\x94 server mints one if omitted. Preserve on edits.'}, 'text': {'type': 'string'}, 'due_date': {'type': 'string', 'description': 'Optional YYYY-MM-DD; null to clear.'}, 'completed': {'type': 'boolean', 'description': 'true = ticked, false/omitted = not done. Server stamps timestamp + actor.'}, 'updated_at': {'type': 'string', 'description': 'Server-stamped. Echo back unchanged; ignored on new rows.'}, 'updated_by': {'type': 'string', 'description': 'Server-stamped user id. Echo back unchanged.'}, 'completed_at': {'type': 'string', 'description': 'Server-stamped ISO timestamp. Prefer `completed`; an explicit value here wins if both are sent.'}, 'completed_by': {'type': 'string', 'description': 'Server-stamped user id. Echo back unchanged.'}, 'updated_by_credential_name': {'type': 'string', 'description': 'Server-stamped credential label. Echo back unchanged.'}, 'completed_by_credential_name': {'type': 'string', 'description': 'Server-stamped credential label. Echo back unchanged.'}}}, 'description': 'Tick-box checklist shown above acceptance_criteria. The full array REPLACES the stored list on update, and array order = display order â\x80\x94 to edit, fetch via getTask/getImprovement, modify, and send back the whole list. Operations: mark done with `completed: true`; un-mark with `completed: false`; add rows by appending `{ text }` (id is auto-minted); remove by omitting; reorder by rearranging. Echo back each existing `id` you keep so per-row attribution (who added/completed it, when) survives.'}, 'non_goals': {'type': 'array', 'items': {'type': 'string'}}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'start_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'agent_brief': {'type': 'string'}, 'agent_ready': {'type': 'boolean'}, 'category_id': {'type': 'string', 'description': 'Category ID. Null to unassign.'}, 'constraints': {'type': 'array', 'items': {'type': 'string'}}, 'description': {'type': 'string'}, 'target_date': {'type': 'string'}, 'user_impact': {'type': 'string'}, 'docs_updated': {'type': 'boolean'}, 'parentItemId': {'type': ['string', 'null'], 'maxLength': 64, 'description': "The work item this one belongs to in the work hierarchy: an epic for a story, a story for its tasks or test cases. Any item in the same project, in any plan or phase. Not the plan outline nesting, which setPlanItemParent sets. Give its UUID or friendly id (such as IMP-12 or TAS-3). Rules: the same project; no loops (an item cannot sit inside its own children); at most 5 levels, counting this item's own children. null removes the parent."}, 'improvementId': {'type': 'string', 'description': "Required unless you send items. The improvement's UUID or friendly id (such as IMP-42)."}, 'owner_team_id': {'type': ['string', 'null'], 'description': "Team UUID to assign as owner, or null to unassign. MUTUALLY EXCLUSIVE with owner_id â\x80\x94 when switching from a team to a user owner, send `owner_team_id: null` in the same call as `owner_id`. Use listTeams or listAssignablePrincipals(kind='team') to look up valid UUIDs."}, 'relationships': {'type': 'object', 'description': 'Free-form JSON for logical links: blocks, blocked_by, duplicates, supersedes, relates_to (arrays of item IDs). REPLACES the stored object wholesale â\x80\x94 read it first and send the complete set.'}, 'blocked_comment': {'type': 'string', 'description': 'Required when status=blocked.'}, 'business_impact': {'type': 'string'}, 'desired_outcome': {'type': 'string'}, 'agent_complexity': {'type': 'string'}, 'agent_confidence': {'type': 'number'}, 'follow_up_needed': {'type': 'boolean'}, 'metadata_replace': {'type': 'boolean', 'description': 'Opt out of the metadata merge: true means the object you send REPLACES everything stored, deleting any key you omit. Default false.'}, 'percent_complete': {'type': 'number', 'description': 'Progress percentage (0-100). Null to clear.'}, 'reopened_comment': {'type': 'string', 'description': 'Required when moving OUT of a closed status. The closed set is blocked, done, rejected and deferred â\x80\x94 note that `blocked` counts as closed, so blocked -> in_progress needs this comment.'}, 'versionTimestamp': {'type': 'number', 'description': "Required unless you send items. The item's current versionTimestamp (its updated_at in epoch ms), as listImprovements, getPlan, getImprovement or your last write of it returned."}, 'impacted_diagrams': {'type': 'array', 'items': {'type': 'object'}}, 'problem_statement': {'type': 'string'}, 'rejection_comment': {'type': 'string', 'description': 'Required when status=rejected.'}, 'resolution_pr_url': {'type': 'string'}, 'agent_missing_info': {'type': 'array', 'items': {'type': 'string'}}, 'completion_comment': {'type': 'string', 'description': 'Required when status=done.'}, 'impacted_documents': {'type': 'array', 'items': {'type': 'object'}}, 'resolution_summary': {'type': 'string'}, 'acceptance_criteria': {'type': 'array', 'items': {'anyOf': [{'type': 'string', 'description': 'Shorthand for `{ text: "..." }`.'}, {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string', 'description': 'Optional â\x80\x94 server mints one if omitted. Preserve on edits.'}, 'text': {'type': 'string'}, 'updated_at': {'type': 'string', 'description': 'Server-stamped. Echo back unchanged; ignored on new rows.'}, 'updated_by': {'type': 'string', 'description': 'Server-stamped user id. Echo back unchanged.'}, 'updated_by_credential_name': {'type': 'string', 'description': 'Server-stamped credential label. Echo back unchanged.'}}}]}, 'description': 'Acceptance criteria â\x80\x94 ordered list of pass/fail statements that define "done" for this item. Each row is `{ id, text }` with server-stamped `updated_at / updated_by / updated_by_credential_name`. REPLACES the whole array on update. Echo back existing `id`s on rows you keep so attribution stamps survive. Bare strings are accepted for convenience (e.g. `["row 1", "row 2"]`) and auto-converted to `{ id, text }`.'}, 'impacted_components': {'type': 'array', 'items': {'type': 'string'}}, 'linked_document_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Document IDs to link.'}, 'impacted_repositories': {'type': 'array', 'items': {'type': 'string'}}, 'agent_recommended_action': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'improvement': {'type': 'object', 'description': 'The improvement after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['categoryId'], 'properties': {'icon': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'color': {'type': 'string'}, 'sortOrder': {'type': 'number'}, 'categoryId': {'type': 'string'}, 'description': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'category': {'type': 'object', 'description': 'The category after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['activityId', 'versionTimestamp', 'comment'], 'properties': {'comment': {'type': 'string', 'description': 'New comment text.'}, 'activityId': {'type': 'string', 'description': 'Activity ID from getImprovement activity array.'}, 'versionTimestamp': {'type': 'number', 'description': "Comment's updated_at as Unix ms for optimistic locking."}}}
输出模式
{'type': 'object', 'properties': {'comment': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['organisation_id', 'user_id', 'organization_role'], 'properties': {'user_id': {'type': 'string', 'description': 'Target user UUID.'}, 'organisation_id': {'type': 'string', 'description': "Organisation UUID. Must match the credential's organisation."}, 'organization_role': {'enum': ['member', 'admin'], 'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'description': {'type': ['string', 'null'], 'maxLength': 2000}, 'organisation_id': {'type': 'string', 'description': "Organisation UUID. Must equal the credential's organisation."}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'organisation': {'type': 'object', 'description': 'The organisation after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['organisation_id'], 'properties': {'plans': {'type': 'boolean'}, 'documents': {'type': 'boolean'}, 'compliance': {'type': 'boolean'}, 'improvements': {'type': 'boolean'}, 'meeting_scribe': {'type': 'boolean'}, 'knowledge_graph': {'type': 'boolean'}, 'organisation_id': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'enabled_features': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['organisation_id', 'settings'], 'properties': {'settings': {'type': 'object', 'description': 'JSONB patch â\x80\x94 top-level keys deep-merged with existing settings; null removes a key. enabledFeatures is rejected.', 'additionalProperties': True}, 'organisation_id': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'settings': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['planId', 'versionTimestamp'], 'properties': {'icon': {'type': 'string'}, 'color': {'type': 'string'}, 'title': {'type': 'string'}, 'fields': {'type': 'array', 'items': {'type': 'string', 'maxLength': 64}, 'maxItems': 50, 'description': 'Optional. Answer with only these fields instead of the whole plan, for example ["id", "versionTimestamp"]. Any of the plan\'s own fields (snake_case or camelCase) or of the keys around it in the full answer (versionTimestamp, href and, where present, url, title, trackingId, message). The id is always returned, and so is any notice that needs your attention (a note, such as a phase\'s dates following its tasks or an item\'s id changing with its type, and a date change\'s cascadePreview). Unknown names are ignored.'}, 'planId': {'type': 'string'}, 'status': {'type': 'string', 'description': 'Status: draft, planning, active, on_hold, completed, cancelled.'}, 'end_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'metadata': {'type': 'object'}, 'priority': {'type': 'string', 'description': 'Priority: low, medium, high, critical.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'start_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'description': {'type': 'string'}, 'linked_documents': {'type': 'array', 'items': {'type': 'object'}}, 'versionTimestamp': {'type': 'number', 'description': "The plan's current versionTimestamp (its updated_at in epoch ms), as listPlans, getPlan or your last write of it returned."}, 'linked_document_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Document IDs to link.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'plan': {'type': 'object', 'description': 'The plan after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['activityId', 'versionTimestamp', 'comment'], 'properties': {'comment': {'type': 'string', 'description': 'New comment text.'}, 'activityId': {'type': 'string', 'description': 'Activity ID from getPlan activity array.'}, 'versionTimestamp': {'type': 'number', 'description': "Comment's updated_at as Unix ms for optimistic locking."}}}
输出模式
{'type': 'object', 'properties': {'comment': {'type': 'object'}}}
输入模式
{'type': 'object', 'properties': {'name': {'type': 'string'}, 'color': {'enum': ['#3b82f6', '#f59e0b', '#8b5cf6', '#ec4899', '#06b6d4', '#14b8a6', '#6366f1', '#6b7280', None], 'type': ['string', 'null'], 'description': 'Phase color. Must be one of: #3b82f6 (Blue), #f59e0b (Amber), #8b5cf6 (Purple), #ec4899 (Pink), #06b6d4 (Cyan), #14b8a6 (Teal), #6366f1 (Indigo), #6b7280 (Gray). Red and green are reserved for blocked / done item statuses. Pass null to clear.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['phaseId', 'versionTimestamp'], 'properties': {'name': {'type': 'string'}, 'color': {'enum': ['#3b82f6', '#f59e0b', '#8b5cf6', '#ec4899', '#06b6d4', '#14b8a6', '#6366f1', '#6b7280', None], 'type': ['string', 'null']}, 'status': {'type': 'string'}, 'phaseId': {'type': 'string'}, 'end_date': {'type': ['string', 'null']}, 'position': {'type': 'number'}, 'priority': {'type': 'string'}, 'wbs_code': {'type': 'string'}, 'date_mode': {'enum': ['auto', 'manual'], 'type': 'string'}, 'start_date': {'type': ['string', 'null']}, 'description': {'type': 'string'}, 'versionTimestamp': {'type': 'number'}}}, 'maxItems': 200, 'minItems': 1, 'description': 'Optional bulk form: update up to 200 phases in one call, each entry { phaseId, versionTimestamp, ...the fields to change } with the same fields as a single call. Every entry is checked and written on its own (permission, optimistic lock, audit), so one entry\'s conflict or error never stops the others. The answer has one row per entry, in your order: { index, id, status: "updated", versionTimestamp } or { index, id, status: "conflict" or "failed", error } (a conflict also carries currentVersionTimestamp), plus summary { requested, updated, failed, conflicts }. With items, send nothing else at the top level except projectId, planId and fields; fields then picks extra fields for each updated row (a row\'s status is its outcome, so the phase\'s own status comes back as phaseStatus).'}, 'fields': {'type': 'array', 'items': {'type': 'string', 'maxLength': 64}, 'maxItems': 50, 'description': 'Optional. Answer with only these fields instead of the whole phase, for example ["id", "versionTimestamp"]. Any of the phase\'s own fields (snake_case or camelCase) or of the keys around it in the full answer (versionTimestamp, href and, where present, url, title, trackingId, message). The id is always returned, and so is any notice that needs your attention (a note, such as a phase\'s dates following its tasks or an item\'s id changing with its type, and a date change\'s cascadePreview). Unknown names are ignored.'}, 'planId': {'type': 'string', 'description': "Optional. Narrows a friendly-id lookup to one plan, given as the plan's UUID or friendly id (such as PLN-3). Phase ids are numbered per plan, so PHA-2 exists in every plan and planId is what makes one unique. Ignored when phaseId is a UUID."}, 'status': {'type': 'string', 'description': 'Status: not_started, in_progress, completed, on_hold, cancelled.'}, 'phaseId': {'type': 'string', 'description': "Required unless you send items. The phase's UUID or friendly id (such as PHA-7); with a friendly id, give planId too, since PHA- ids repeat in every plan."}, 'end_date': {'type': ['string', 'null'], 'description': "YYYY-MM-DD on or after start_date, or null to clear. While date_mode is 'auto' and the phase has dated tasks, the tasks' range wins and the reply carries a note saying so; send date_mode 'manual' with it to set it by hand."}, 'position': {'type': 'number'}, 'priority': {'type': 'string', 'description': 'Priority: low, medium, high, critical.'}, 'wbs_code': {'type': 'string'}, 'date_mode': {'enum': ['auto', 'manual'], 'type': 'string', 'description': "auto: the phase's dates follow its tasks (earliest task start to latest task end, kept current). manual: the dates you set are kept. Switching to auto recomputes the dates at once when the phase has dated tasks."}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'start_date': {'type': ['string', 'null'], 'description': "YYYY-MM-DD, or null to clear. While date_mode is 'auto' and the phase has dated tasks, the tasks' range wins and the reply carries a note saying so; send date_mode 'manual' with it to set it by hand."}, 'description': {'type': 'string'}, 'versionTimestamp': {'type': 'number', 'description': "Required unless you send items. The phase's own current versionTimestamp (its updated_at in epoch ms), as listPlanPhases, getPlan (phases[].versionTimestamp), getPlanPhase or your last write of it returned. Not the plan's."}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'phase': {'type': 'object', 'description': 'The phase after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['user_id'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'email': {'type': 'string', 'maxLength': 320}, 'user_id': {'type': 'string'}, 'organisation_id': {'type': 'string', 'description': 'Required when editing another user.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'profile': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['project_id'], 'properties': {'icon': {'type': ['string', 'null'], 'maxLength': 32, 'description': 'Pass null to clear.'}, 'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'project_id': {'type': 'string', 'description': 'Project UUID.'}, 'description': {'type': ['string', 'null'], 'maxLength': 2000, 'description': 'Pass null to clear.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'project': {'type': 'object', 'description': 'The project after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['permission_id', 'level'], 'properties': {'level': {'enum': ['none', 'read', 'write', 'admin'], 'type': 'string'}, 'permission_id': {'type': 'string', 'description': 'UUID of the resource_permissions row'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'permission': {'type': 'object'}}}
输入模式
{'type': 'object', 'properties': {'type': {'type': 'string', 'description': "Changing the type converts the task and its id takes the new type's prefix, keeping its number (TAS-12 becomes STY-12 as a user_story): the answer's note then gives the new id, and the old one still resolves."}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['taskId', 'versionTimestamp'], 'properties': {'type': {'type': 'string'}, 'title': {'type': 'string'}, 'status': {'enum': ['captured', 'triaging', 'shaped', 'approved', 'ready_for_agent', 'in_progress', 'ready_for_review', 'in_review', 'blocked', 'done', 'rejected', 'deferred'], 'type': 'string'}, 'taskId': {'type': 'string'}, 'plan_id': {'type': 'string'}, 'urgency': {'type': 'string'}, 'why_now': {'type': 'string'}, 'end_date': {'type': 'string'}, 'metadata': {'type': 'object'}, 'owner_id': {'type': ['string', 'null']}, 'phase_id': {'type': 'string'}, 'position': {'type': 'number'}, 'priority': {'type': 'string'}, 'wbs_code': {'type': 'string'}, 'checklist': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string'}, 'text': {'type': 'string'}, 'due_date': {'type': 'string'}, 'completed': {'type': 'boolean'}, 'updated_at': {'type': 'string'}, 'updated_by': {'type': 'string'}, 'completed_at': {'type': 'string'}, 'completed_by': {'type': 'string'}, 'updated_by_credential_name': {'type': 'string'}, 'completed_by_credential_name': {'type': 'string'}}}}, 'non_goals': {'type': 'array', 'items': {'type': 'string'}}, 'start_date': {'type': 'string'}, 'agent_brief': {'type': 'string'}, 'agent_ready': {'type': 'boolean'}, 'constraints': {'type': 'array', 'items': {'type': 'string'}}, 'description': {'type': 'string'}, 'target_date': {'type': 'string'}, 'user_impact': {'type': 'string'}, 'docs_updated': {'type': 'boolean'}, 'parentItemId': {'type': ['string', 'null'], 'maxLength': 64}, 'owner_team_id': {'type': ['string', 'null']}, 'relationships': {'type': 'object'}, 'blocked_comment': {'type': 'string'}, 'business_impact': {'type': 'string'}, 'desired_outcome': {'type': 'string'}, 'agent_complexity': {'type': 'string'}, 'agent_confidence': {'type': 'number'}, 'follow_up_needed': {'type': 'boolean'}, 'metadata_replace': {'type': 'boolean'}, 'percent_complete': {'type': 'number'}, 'reopened_comment': {'type': 'string'}, 'versionTimestamp': {'type': 'number'}, 'impacted_diagrams': {'type': 'array', 'items': {'type': 'object'}}, 'problem_statement': {'type': 'string'}, 'rejection_comment': {'type': 'string'}, 'resolution_pr_url': {'type': 'string'}, 'agent_missing_info': {'type': 'array', 'items': {'type': 'string'}}, 'completion_comment': {'type': 'string'}, 'impacted_documents': {'type': 'array', 'items': {'type': 'object'}}, 'resolution_summary': {'type': 'string'}, 'acceptance_criteria': {'type': 'array', 'items': {'anyOf': [{'type': 'string'}, {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string'}, 'text': {'type': 'string'}, 'updated_at': {'type': 'string'}, 'updated_by': {'type': 'string'}, 'updated_by_credential_name': {'type': 'string'}}}]}}, 'impacted_components': {'type': 'array', 'items': {'type': 'string'}}, 'linked_document_ids': {'type': 'array', 'items': {'type': 'string'}}, 'impacted_repositories': {'type': 'array', 'items': {'type': 'string'}}, 'agent_recommended_action': {'type': 'string'}}}, 'maxItems': 200, 'minItems': 1, 'description': 'Optional bulk form: update up to 200 tasks in one call, each entry { taskId, versionTimestamp, ...the fields to change } with the same fields as a single call. Every entry is checked and written on its own (permission, optimistic lock, audit), so one entry\'s conflict or error never stops the others. The answer has one row per entry, in your order: { index, id, status: "updated", versionTimestamp } or { index, id, status: "conflict" or "failed", error } (a conflict also carries currentVersionTimestamp), plus summary { requested, updated, failed, conflicts }. With items, send nothing else at the top level except projectId, planId and fields; fields then picks extra fields for each updated row (a row\'s status is its outcome, so the task\'s own status comes back as taskStatus).'}, 'title': {'type': 'string'}, 'fields': {'type': 'array', 'items': {'type': 'string', 'maxLength': 64}, 'maxItems': 50, 'description': 'Optional. Answer with only these fields instead of the whole task, for example ["id", "versionTimestamp"]. Any of the task\'s own fields (snake_case or camelCase) or of the keys around it in the full answer (versionTimestamp, href and, where present, url, title, trackingId, message). The id is always returned, and so is any notice that needs your attention (a note, such as a phase\'s dates following its tasks or an item\'s id changing with its type, and a date change\'s cascadePreview). Unknown names are ignored.'}, 'planId': {'type': 'string', 'description': "Optional. Narrows a friendly-id lookup (such as TAS-55) to one plan, given as the plan's UUID or friendly id (such as PLN-3): the task must be in that plan. It never moves anything (plan_id does that) and is ignored when the id is a UUID."}, 'status': {'enum': ['captured', 'triaging', 'shaped', 'approved', 'ready_for_agent', 'in_progress', 'ready_for_review', 'in_review', 'blocked', 'done', 'rejected', 'deferred'], 'type': 'string'}, 'taskId': {'type': 'string', 'description': "Required unless you send items. The task's UUID or friendly id (such as TAS-55)."}, 'plan_id': {'type': 'string', 'description': 'Link to plan. Null to unlink.'}, 'urgency': {'type': 'string'}, 'why_now': {'type': 'string'}, 'end_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'metadata': {'type': 'object', 'description': "Free-form JSON. MERGES into the stored object key by key: keys you don't send are left alone, and sending a key with value null deletes it. Send metadata_replace:true to overwrite the whole object instead. (Merging is the default so a partial write can never destroy a sibling key written by another actor.)"}, 'owner_id': {'type': ['string', 'null'], 'description': "User UUID to assign as owner, or null to unassign. MUTUALLY EXCLUSIVE with owner_team_id â\x80\x94 when switching from a user to a team owner, send `owner_id: null` in the same call as `owner_team_id`. Use listAssignablePrincipals(projectId, kind='user', q='â\x80¦') to look up valid UUIDs."}, 'phase_id': {'type': 'string', 'description': 'Assign to phase. Null to unassign.'}, 'position': {'type': 'number'}, 'priority': {'type': 'string'}, 'wbs_code': {'type': 'string'}, 'checklist': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string', 'description': 'Optional â\x80\x94 server mints one if omitted. Preserve on edits.'}, 'text': {'type': 'string'}, 'due_date': {'type': 'string', 'description': 'Optional YYYY-MM-DD; null to clear.'}, 'completed': {'type': 'boolean', 'description': 'true = ticked, false/omitted = not done. Server stamps timestamp + actor.'}, 'updated_at': {'type': 'string', 'description': 'Server-stamped. Echo back unchanged; ignored on new rows.'}, 'updated_by': {'type': 'string', 'description': 'Server-stamped user id. Echo back unchanged.'}, 'completed_at': {'type': 'string', 'description': 'Server-stamped ISO timestamp. Prefer `completed`; an explicit value here wins if both are sent.'}, 'completed_by': {'type': 'string', 'description': 'Server-stamped user id. Echo back unchanged.'}, 'updated_by_credential_name': {'type': 'string', 'description': 'Server-stamped credential label. Echo back unchanged.'}, 'completed_by_credential_name': {'type': 'string', 'description': 'Server-stamped credential label. Echo back unchanged.'}}}, 'description': 'Tick-box checklist shown above acceptance_criteria. The full array REPLACES the stored list on update, and array order = display order â\x80\x94 to edit, fetch via getTask/getImprovement, modify, and send back the whole list. Operations: mark done with `completed: true`; un-mark with `completed: false`; add rows by appending `{ text }` (id is auto-minted); remove by omitting; reorder by rearranging. Echo back each existing `id` you keep so per-row attribution (who added/completed it, when) survives.'}, 'non_goals': {'type': 'array', 'items': {'type': 'string'}}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'start_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'agent_brief': {'type': 'string'}, 'agent_ready': {'type': 'boolean'}, 'constraints': {'type': 'array', 'items': {'type': 'string'}}, 'description': {'type': 'string'}, 'target_date': {'type': 'string', 'description': 'YYYY-MM-DD.'}, 'user_impact': {'type': 'string'}, 'docs_updated': {'type': 'boolean'}, 'parentItemId': {'type': ['string', 'null'], 'maxLength': 64, 'description': "The work item this one belongs to in the work hierarchy: an epic for a story, a story for its tasks or test cases. Any item in the same project, in any plan or phase. Not the plan outline nesting, which setPlanItemParent sets. Give its UUID or friendly id (such as IMP-12 or TAS-3). Rules: the same project; no loops (an item cannot sit inside its own children); at most 5 levels, counting this item's own children. null removes the parent."}, 'owner_team_id': {'type': ['string', 'null'], 'description': "Team UUID to assign as owner, or null to unassign. MUTUALLY EXCLUSIVE with owner_id â\x80\x94 when switching from a team to a user owner, send `owner_team_id: null` in the same call as `owner_id`. Use listTeams or listAssignablePrincipals(kind='team') to look up valid UUIDs."}, 'relationships': {'type': 'object', 'description': 'Free-form JSON for logical links: blocks, blocked_by, duplicates, supersedes, relates_to (arrays of item IDs). REPLACES the stored object wholesale â\x80\x94 read it first and send the complete set.'}, 'blocked_comment': {'type': 'string', 'description': 'Required when status=blocked.'}, 'business_impact': {'type': 'string'}, 'desired_outcome': {'type': 'string'}, 'agent_complexity': {'type': 'string'}, 'agent_confidence': {'type': 'number'}, 'follow_up_needed': {'type': 'boolean'}, 'metadata_replace': {'type': 'boolean', 'description': 'Opt out of the metadata merge: true means the object you send REPLACES everything stored, deleting any key you omit. Default false.'}, 'percent_complete': {'type': 'number', 'description': 'Progress percentage (0-100). Null to clear.'}, 'reopened_comment': {'type': 'string', 'description': 'Required when moving OUT of a closed status. The closed set is blocked, done, rejected and deferred â\x80\x94 note that `blocked` counts as closed, so blocked -> in_progress needs this comment.'}, 'versionTimestamp': {'type': 'number', 'description': "Required unless you send items. The task's current versionTimestamp (its updated_at in epoch ms), as listTasks, getPlan, getTask or your last write of it returned."}, 'impacted_diagrams': {'type': 'array', 'items': {'type': 'object'}}, 'problem_statement': {'type': 'string'}, 'rejection_comment': {'type': 'string', 'description': 'Required when status=rejected.'}, 'resolution_pr_url': {'type': 'string'}, 'agent_missing_info': {'type': 'array', 'items': {'type': 'string'}}, 'completion_comment': {'type': 'string', 'description': 'Required when status=done.'}, 'impacted_documents': {'type': 'array', 'items': {'type': 'object'}}, 'resolution_summary': {'type': 'string'}, 'acceptance_criteria': {'type': 'array', 'items': {'anyOf': [{'type': 'string', 'description': 'Shorthand for `{ text: "..." }`.'}, {'type': 'object', 'required': ['text'], 'properties': {'id': {'type': 'string', 'description': 'Optional â\x80\x94 server mints one if omitted. Preserve on edits.'}, 'text': {'type': 'string'}, 'updated_at': {'type': 'string', 'description': 'Server-stamped. Echo back unchanged; ignored on new rows.'}, 'updated_by': {'type': 'string', 'description': 'Server-stamped user id. Echo back unchanged.'}, 'updated_by_credential_name': {'type': 'string', 'description': 'Server-stamped credential label. Echo back unchanged.'}}}]}, 'description': 'Acceptance criteria â\x80\x94 ordered list of pass/fail statements that define "done" for this item. Each row is `{ id, text }` with server-stamped `updated_at / updated_by / updated_by_credential_name`. REPLACES the whole array on update. Echo back existing `id`s on rows you keep so attribution stamps survive. Bare strings are accepted for convenience (e.g. `["row 1", "row 2"]`) and auto-converted to `{ id, text }`.'}, 'impacted_components': {'type': 'array', 'items': {'type': 'string'}}, 'linked_document_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Document IDs to link.'}, 'impacted_repositories': {'type': 'array', 'items': {'type': 'string'}}, 'agent_recommended_action': {'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'task': {'type': 'object', 'description': 'The task after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['dependencyId'], 'properties': {'lagDays': {'type': 'integer', 'description': 'Positive = lag, negative = lead.'}, 'dependencyId': {'type': 'string'}, 'dependencyType': {'enum': ['FS', 'SS', 'FF'], 'type': 'string'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'dependency': {'type': 'object', 'description': 'The dependency after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['team_id'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'color': {'type': 'string', 'pattern': '^#[0-9a-fA-F]{6}$'}, 'team_id': {'type': 'string'}, 'description': {'type': ['string', 'null'], 'maxLength': 2000}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'team': {'type': 'object', 'description': 'The team after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['team_id', 'workspace_id', 'permission_level'], 'properties': {'team_id': {'type': 'string'}, 'workspace_id': {'type': 'string'}, 'permission_level': {'enum': ['read', 'write', 'admin'], 'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'access': {'type': 'object'}}}
输入模式
{'type': 'object', 'properties': {'grids': {'type': 'array', 'items': {'type': 'object', 'required': ['project_id', 'grid_key'], 'properties': {'grid_key': {'type': 'string'}, 'view_name': {'type': 'string', 'description': "Defaults to 'default'"}, 'is_default': {'type': 'boolean'}, 'project_id': {'type': 'string'}, 'sort_config': {'type': ['object', 'array', 'null'], 'items': {'type': 'object'}, 'description': 'Sort rules â\x80\x94 array of { id, desc } when an array.'}, 'column_order': {'type': ['object', 'array', 'null'], 'items': {'type': 'string'}, 'description': 'Ordered column ids (string[]) when an array.'}, 'column_widths': {'type': ['object', 'array', 'null'], 'items': {'type': 'number'}, 'description': 'Column widths â\x80\x94 a { colId: px } map, or a number[] when an array.'}, 'filter_config': {'type': ['object', 'array', 'null'], 'items': {'type': 'object'}, 'description': 'Filter state â\x80\x94 usually a { pageSize, tab, filters } object.'}, 'visible_columns': {'type': ['object', 'array', 'null'], 'items': {'type': 'string'}, 'description': 'Visible column ids (string[]) when an array.'}}}}, 'notifications': {'type': 'object', 'properties': {'email_low_credits': {'type': 'boolean'}, 'email_credit_reset': {'type': 'boolean'}, 'in_app_low_credits': {'type': 'boolean'}, 'email_payment_failed': {'type': 'boolean'}, 'low_credit_threshold': {'type': ['integer', 'null']}, 'in_app_payment_updates': {'type': 'boolean'}, 'email_subscription_updates': {'type': 'boolean'}}, 'additionalProperties': False}}}
输出模式
{'type': 'object', 'properties': {'preferences': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['documentId'], 'properties': {'mode': {'enum': ['patch', 'append', 'replace'], 'type': 'string', 'description': "How to apply your `elements`. patch (DEFAULT â\x80\x94 use this for ANY partial edit): merges each item into the element with the same id and leaves everything else untouched, like find-and-replace by id; new ids are added. append: only adds your items, changes nothing else. replace: OVERWRITES THE WHOLE CANVAS â\x80\x94 every existing element you don't resend is DELETED â\x80\x94 so use it ONLY to set an entire board at once. To change or rebuild just a SECTION, use patch (+ deleteIds to remove specific ids), NEVER replace. A replace that would drop any existing element is rejected unless confirmReplace:true."}, 'files': {'type': 'object', 'description': 'Optional Excalidraw BinaryFiles map (for embedded images), merged in.'}, 'appState': {'type': 'object', 'description': 'Optional Excalidraw appState fields to merge (e.g. viewBackgroundColor).'}, 'elements': {'type': 'array', 'items': {'type': 'object'}, 'description': "Elements to write. For mode 'patch', each may be a partial { id, ...changedFields } merged into the matching element by id; full Excalidraw elements for 'replace'/'append' (or new ids in 'patch')."}, 'deleteIds': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Element ids to remove from the scene.'}, 'projectId': {'type': 'string', 'description': 'Optional. Narrows a friendly-id lookup to one project. Only needed when a friendly id is ambiguous â\x80\x94 TAS-/IMP-/PLN- ids are numbered per PROJECT, so the same id can exist in several. Ignored when the id is a UUID.'}, 'documentId': {'type': 'string'}, 'confirmReplace': {'type': 'boolean', 'description': "Safety acknowledgement for mode 'replace' ONLY. A replace that would DELETE ANY existing element not present in your `elements` is rejected unless this is true. Leave it unset and use mode:'patch' to edit part of a board (it merges by id and keeps the rest); set true only when you truly intend to overwrite the WHOLE scene."}, 'versionTimestamp': {'type': 'number', 'description': "Optional optimistic-locking token from getWhiteboard. Only used for mode 'replace': if the board changed since you read it, the replace is rejected so you don't overwrite a collaborator's newer edits â\x80\x94 re-read with getWhiteboard and retry. Not needed for patch/append, which automatically merge onto the latest scene."}}}
输出模式
{'type': 'object'}
输入模式
{'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'workspace_id': {'type': 'string', 'description': 'Workspace UUID.'}}}
输出模式
{'type': 'object', 'properties': {'href': {'type': 'string', 'description': 'Web URL of the resource in the Stable Baseline app.'}, 'workspace': {'type': 'object', 'description': 'The workspace after the mutation.'}, 'versionTimestamp': {'type': 'number', 'description': 'Milliseconds since epoch. Pass back as `versionTimestamp` on subsequent edit/update calls for optimistic locking.'}}}
输入模式
{'type': 'object', 'required': ['workspace_id', 'user_id', 'workspace_role'], 'properties': {'user_id': {'type': 'string'}, 'workspace_id': {'type': 'string'}, 'workspace_role': {'enum': ['owner', 'admin', 'editor', 'viewer'], 'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'member': {'type': 'object'}}}
输入模式
{'type': 'object', 'required': ['resource_type', 'resource_id', 'principal_type', 'principal_id', 'level'], 'properties': {'level': {'enum': ['none', 'read', 'write', 'admin'], 'type': 'string'}, 'resource_id': {'type': 'string', 'description': 'UUID of the resource'}, 'principal_id': {'type': 'string', 'description': 'UUID of the user or team'}, 'resource_type': {'enum': ['workspace', 'project', 'folder', 'document', 'improvement', 'plan'], 'type': 'string'}, 'principal_type': {'enum': ['user', 'team'], 'type': 'string'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'properties': {'permission': {'type': 'object'}}}
近期工具变更
类似的 MCP 服务器
mcp
Manages Nestr workspaces, roles, circles, tensions, governance proposals, comments, daily plans, graph relationships, agents, and…
CollHub
Exposes CollHub documents, projects, comments, workflows, and connected data sources.
mcp
Provides access to company operations such as motions, plans, files, approvals, and shared organizational knowledge.
freedom-mcp
Supports company operations through commitments, teams, agents, customer evidence, leads, content workflows, spreadsheets, commer…
Dayze — Life Context
Provides authenticated personal life-context data and tools for contacts, memories, events, expenses, trips, assets, places, and …
YouSpot
Connects personal contacts, companies, notes, files, CRM records, email, Slack, LinkedIn, and calendars, with search, relationshi…
TaScan
Manages field-service projects, workers, task lists, subtasks, dispatch, geofenced work zones, inspections, remediation workflows…
Tango
Manages shared work between humans and agents through tasks, leases, handoffs, approvals, artifacts, comments, integrations, prog…