Skip to content
Strata/Docs

MCP Tools Reference

Strata exposes 14 tools via the Model Context Protocol, organized into groups. By default, only core tools are enabled. Enable additional groups via the X-Strata-Tool-Groups header.

Tool Groups

Header Configuration

Add the X-Strata-Tool-Groups header to your MCP client configuration to enable tool groups. Use comma-separated group names, or "all" to enable everything.

json
{
  "url": "https://api.strata.space/mcp",
  "headers": {
    "X-Strata-Tool-Groups": "core,comments,agents"
  }
}

Core

default

Read, edit, search, and graph documents and spaces

#app_get_section_content

Get the full content of a document section by document ID and section ID. Returns the section text and heading context.

ParameterTypeDescription
chunkIdstringThe chunk ID to retrieve
documentIdstringThe document ID containing the section

#edit_document

Edit a document, manage access, or upload content from a file.

ACTIONS - "create": title, [content], [folderId] — create with inline content. - "createFromTemplate": templateDocumentId, title, [folderId], [variables] — create from a template, substituting its declared variables. Locate templates with find; they live in templates folders and declare name, description, and variables in frontmatter. - "move": documentId, folderId — change a document's audience by moving it into that folder. A personal folder is owner-only, a tier folder is visible to its members; to make a document private, move it to the user's personal folder. - "edit": documentId, oldString, newString, [replaceAll] — targeted replacement. - "write": documentId, newContent — full INLINE replacement. - "share": documentId, email, role — grant access. - "unshare": documentId, targetUserId — revoke access. - "presignUpload": contentLength + (documentId OR title [+folderId]). Returns { uploadId, uploadUrl, requiredHeaders, expiresAt }. - "finalizeUpload": uploadId. Idempotent. Returns { documentId, bytes, created }.

Upload flow (prefer when content already exists as a file or as bytes you generated — avoids re-emitting them as tool input): 1. wc -c file.md → byte count 2. presignUpload(contentLength, ...) → { uploadUrl } 3. PUT file to uploadUrl with requiredHeaders 4. finalizeUpload(uploadId) → { documentId }

ParameterTypeDescription
actionstringAction to perform (see tool description)
content?stringInitial markdown body (action `create`)
contentLength?integer (uint64)Byte count of payload (action `presignUpload`)
documentId?stringDocument ID
email?stringRecipient email (action `share`)
folderId?stringFolder ID (actions `create`, `presignUpload`)
newContent?stringFull new body (action `write`)
newString?stringReplacement text (action `edit`)
oldString?stringText to find (action `edit`)
replaceAll?booleanReplace every match, default false (action `edit`)
role?stringviewer, commenter, or editor (action `share`)
targetUserId?stringUser to revoke (action `unshare`)
templateDocumentId?stringTemplate document ID to instantiate (action `createFromTemplate`)
title?stringDocument title (actions `create`, `presignUpload`)
uploadId?stringID from `presignUpload` (action `finalizeUpload`)
variables?objectVariable values keyed by the template's declared keys (action `createFromTemplate`)

#find

Search, list, or discover documents, spaces, and folders across the workspace. Use this tool whenever you need to locate content before reading it — set intent to the kind of discovery (search, list, recent, related, info) and scope to where to look. List folders and their scopes (a document's audience comes from its folder) with intent='list', scope.type='folders'. Important: scope is a JSON object with a type field, not a string. Examples: {"scope":{"type":"all"}}, {"scope":{"type":"space","id":"space_..."}}, {"scope":{"type":"document","id":"doc_..."}}. Search uses hybrid keyword + semantic retrieval fused via Reciprocal Rank Fusion, so both short keywords and natural sentences work as queries. Use filters for status, owner, date ranges, includeShared, direction, sinceDays (for intent='recent'), and tokenBudget. Returns a uniform shape with items that carry id, title, snippet, score, and source attribution; follow up with read_document to fetch full content for any item you want to use. If you receive zero results, broaden the scope before reformulating the query — narrow scopes can return empty even when content exists.

ParameterTypeDescription
intentunknownDiscovery intent. "search" ranks by relevance, "list" enumerates, "recent" returns newest changes within filters.sinceDays, "related" finds documents similar to scope.id (requires scope.type="document"), "info" returns metadata about the scoped entity
scopeunknownWhere to look. `scope` must be an object with `type`, not a string: `{ "type": "all" }`, `{ "type": "space", "id": "space_..." }`
filters?objectNarrowing filters. Ignored when inapplicable to the chosen intent; for intent="recent", set filters.sinceDays (default 7)
limit?integer (uint32)Max results. Default: 10. Max: 50
nextToken?stringPagination cursor from a prior find result. Pass through unchanged
query?stringSearch text. Required when intent="search"
tokenBudget?integer (uint32)Per-chunk content size budget for intent="search". Default: server-chosen

#get_document_graph

Get the connection graph neighborhood around a document. Returns nodes (documents) and edges (connections) discovered by BFS traversal.

Optional parameters: - depth: BFS depth (default 2, max 5) - maxNodes: Maximum nodes to return (default 50, max 200)

ParameterTypeDescription
documentIdstringThe document ID to start the graph traversal from
depth?integer (uint32)BFS traversal depth (default 2, max 5)
maxNodes?integer (uint32)Maximum number of nodes to return (default 50, max 200)

#get_image

Retrieve an image from a document as base64-encoded data. Use when you need to analyze, describe, or understand an image referenced in a document.

The imageId is found in document content as [Image: alt text (imageId: <id>)] markers or ![alt](strata://image/<id>) in markdown.

Returns the image as inline base64 PNG data that can be viewed directly.

ParameterTypeDescription
documentIdstringDocument the image belongs to. The caller must have `DocumentRead` on this document before bytes are returned
imageIdstringImage ID (SHA256 hex from document content)
maxWidth?integer (uint32)Maximum width to resize to before encoding (saves tokens). Defaults to 1024

#read_document

Read a document's content by ID.

Returns rendered Markdown. Use before editing. Large documents automatically return a structural outline instead of full content (default budget: 10000 tokens). Use the sections parameter with heading paths from the outline to read specific sections.

Workflow: read_document(id) → outline (if large) → read_document(id, sections: ["Heading > Subheading"]) → section content.

ParameterTypeDescription
documentIdstringDocument ID to read, like `doc_01JAB...`
commentFormat?stringComment output format: "footnotes" (default, inline markdown footnotes) or "structured" (appends a JSON block with full comment thread data)
includeComments?booleanWhether to include comments in the response. Comments are rendered as inline footnotes in the markdown output
includeSuggestions?booleanWhether to include pending suggestions as a JSON block appended to the markdown content
maxTokens?integer (uint32)Token budget (default: 10000). Documents exceeding this return an outline instead of full content. Set to 0 to always get the outline
sections?string[]Heading paths to read, like `["Architecture > Database Layer"]`. Prefix matching: `"Architecture"` returns that section and all sub-sections. Use paths from a prior outline response

Collaboration

Live presence on documents

#get_presence

Query who is currently viewing or editing a document. Returns a list of collaborators with their entity type, display name, active section, status, and presence color. Useful for understanding who else is working on the document before making edits.

ParameterTypeDescription
documentIdstringDocument ID to query presence for

Comments

Comment threads and edit suggestions

#manage_comments

Manage comments on a document.

Actions: - "create": Create a new comment. Requires "body". Optionally provide "quotedText" to anchor the comment to specific text, and "headingContext" for disambiguation. - "reply": Reply to an existing thread. Requires "parentCommentId" and "body". - "resolve": Resolve a comment thread. Requires "commentId". - "reopen": Reopen a resolved thread. Requires "commentId". - "list": List comments on the document. Optionally filter by "status" ("active" or "resolved").

ParameterTypeDescription
actionstringThe action to perform: "create", "reply", "resolve", "reopen", or "list"
documentIdstringThe document ID (required for all actions)
body?stringComment body text (required for "create" and "reply")
commentId?stringComment ID (required for "resolve" and "reopen")
headingContext?string[]Heading breadcrumbs for disambiguation when `quotedText` appears multiple times in the document (optional, for "create")
parentCommentId?stringParent comment ID to reply to (required for "reply")
quotedText?stringExact text in the document to anchor the comment to (optional, for "create"). The server resolves this to Yjs relative positions for precise anchoring
status?stringFilter by status when listing: "active" or "resolved" (optional for "list")

#manage_suggestions

Manage suggestions on a document.

Actions: - "propose": Create a new suggestion. Requires "originalText" (exact text to replace) and "replacementText" (proposed replacement markdown). Optionally provide "headingContext" for disambiguation, "severity" (info/warning/error), "confidence" (0.0–1.0), and "rationale". - "accept": Accept a pending suggestion (applies the edit). Requires "suggestionId". - "reject": Reject a pending suggestion (no edit applied). Requires "suggestionId". - "withdraw": Withdraw your own pending suggestion. Requires "suggestionId". - "list": List pending suggestions on the document.

ParameterTypeDescription
actionstringThe action to perform: "propose", "accept", "reject", "withdraw", or "list"
documentIdstringThe document ID (required for all actions)
confidence?number (double)Confidence score from 0.0 to 1.0 (optional, for "propose")
headingContext?string[]Heading breadcrumbs for disambiguation when `originalText` appears multiple times (optional, for "propose")
originalText?stringExact text to replace (required for "propose")
rationale?stringRationale explaining why the suggestion is being made (optional, for "propose")
replacementText?stringProposed replacement text in markdown (required for "propose")
severity?stringSuggestion severity: "info", "warning", or "error" (optional, for "propose")
suggestionId?stringSuggestion ID (required for "accept", "reject", and "withdraw")

Publishing

Publish and unpublish public document snapshots

#get_publish_status

Check the publish status of a document. Returns the current state (draft/published), version number, and whether there are unpublished changes (content hash comparison).

ParameterTypeDescription
documentIdstringDocument ID to check status for

#publish_document

Publish a document to your public profile. Creates a frozen snapshot of the current content. If the content hasn't changed since last publish, returns the existing version (idempotent).

Side effects: Creates a PublishedVersion record and copies Yjs state to a versioned S3 key. Your creator profile is provisioned at signup, so no profile is created as a side effect of publishing.

ParameterTypeDescription
documentIdstringDocument ID to publish
pinToProfile?booleanWhether to pin to profile after publishing

#unpublish_document

Unpublish a document, removing it from public view. The document returns to draft state and public URLs return 404. Published version records are retained for potential rollback.

ParameterTypeDescription
documentIdstringDocument ID to unpublish

Agents

Invoke platform and user agents and poll their status

#get_agent_status

Check the status of an agent task.

Returns the current status, tool call count, and output (if completed) or error (if failed). Poll this after invoke_agent to track completion.

Possible statuses: pending, running, completed, failed, cancelled, timedOut.

ParameterTypeDescription
taskIdstringThe task ID returned by `invoke_agent`

#invoke_agent

Invoke a platform agent to perform a task.

Specify the agent by ID or by name (mutually exclusive). Optionally provide a target document and a natural-language instruction.

Returns a task ID — use get_agent_status to poll for status and output. The agent executes asynchronously; this tool returns immediately after the task is created.

ParameterTypeDescription
agentId?stringAgent ID to invoke (mutually exclusive with `agent_name`)
agentName?stringAgent name to invoke (mutually exclusive with `agent_id`)
documentId?stringTarget document ID (optional)
idempotencyKey?stringIdempotency key (optional)
instruction?stringNatural-language instruction for the agent