Skip to main content
Glama

Typebar (formerly SuperDocs)

Server Details

AI document editing: edits the exact section, leaves the rest. 38 MCP tools; agent self-signup.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
superdocsapp/superdocs-plugin
GitHub Stars
1
Server Listing
Typebar (formerly SuperDocs)

TDQS

A3.9/5.0

Scored across 38 tools

Disambiguation4/5

Most tools target distinct resources or actions, and the detailed descriptions clarify boundaries such as chat vs chat_async, job polling vs listing, and session vs document operations. However, export_document and request_download_url overlap almost completely, and the multiple upload pathways (inline vs pre-signed vs processed) require careful reading.

Naming Consistency4/5

Almost all tools use a predictable snake_case verb_noun or clear noun/verb pattern across document, session, job, upload, and account families. Minor deviations like chat, health, redo_revert, and init_session are readable but keep it from perfect consistency.

Tool Count2/5

At 38 tools, the surface is well above the 25-tool threshold for being too many, creating discoverability and selection burden even though the platform is broad. Grouping related operations or trimming overlapping tools would make the set more appropriate.

Completeness4/5

Core document lifecycle coverage is strong: loading, listing, detail, rename, archive/unarchive, editing via chat, export, plus session, job, attachment, template, and account operations. Gaps remain around permanent document deletion, template detail/update, and setting or getting cross-session memory (only clearing is exposed), but agents can mostly work around them.

Available Tools

38 tools
approve_changeAInspect

Used with chat_async when approval_mode='ask_every_time'. For each proposed change (with chunk_id and HTML diff), respond approved=true|false plus optional feedback for the AI to revise on. Approved changes apply atomically; denied changes are discarded; the AI may revise based on feedback in the next turn. Required for regulated workflows (legal, medical, compliance) where every AI edit must be reviewed before it touches the document. For single changes: set approved=true/false and optionally provide feedback. For batch decisions: provide a 'changes' array with per-change decisions. After approval, the job resumes processing and eventually reaches status=completed.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesJob ID that is awaiting approval.
changesNoBatch decisions: array of {change_id, approved, feedback} objects. Use for 'Accept All' or 'Deny All'.
approvedYesWhether to approve (true) or deny (false) the change.
feedbackNoOptional feedback explaining why a change was denied. Helps the AI adjust future suggestions.
change_idNoSpecific change to approve/deny (for individual decisions). Get change IDs from the job's pending_changes.
session_idYes
authorizationNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses that approved changes apply atomically, denied changes are discarded, the AI may revise on feedback next turn, and the job resumes to status=completed. It does not explain the 'authorization' parameter or any permission requirements, so a small gap remains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition and the core decision semantics, then adds workflow context. It is somewhat long and has mild redundancy (approved/denied restated), but every section addresses a distinct invocation concern rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by stating the downstream effect (changes apply/discard, job resumes and reaches status=completed). Combined with coverage of the single/batch modes and the regulated-workflow requirement, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 71%, so the schema already documents most parameters. The description still adds value by explaining the single-change path (approved + optional feedback) versus the batch path ('changes' array with per-change decisions), including the semantics of feedback as revision input. It does not clarify the undocumented 'authorization' parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (approve/deny each proposed change) and ties it explicitly to the sibling chat_async under approval_mode='ask_every_time', so it is clearly distinguishable from the dozens of other session/job tools. An agent understands exactly what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use triggers (approval_mode='ask_every_time', regulated workflows requiring every edit to be reviewed) and breaks down single-change vs batch-change invocation. The alternative paths (per-change vs 'changes' array) are named rather than left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_documentAInspect

Soft-archive a saved document — it leaves the Files view but is recoverable server-side. Presence-aware: if the document is currently open in ANOTHER session and force is not set, the request FAILS honestly with HTTP 409 (code:"document_in_use" + open_in_sessions:N + suggested_action) so callers can confirm "open in N other session(s) — delete anyway?" and re-call with force=true. On force=true it archives, unlinks every session, and notifies the other sessions (which then prompt the user to keep editing or honor the deletion).

A no-op never wears a success status: if nothing was archived you get the 409 above, so a 2xx always means the archive actually happened.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoConfirm deletion of a doc that is open in another session. Without it, deleting an in-use doc fails with HTTP 409 (code document_in_use, open_in_sessions:N) instead of tombstoning — nothing is archived until you re-call with force=true.
document_idYes
from_sessionNoThe caller's own session id (so it is excluded from the in-use check). Omit for a pure Files-view delete.
authorizationNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so richly: it discloses soft-archive recoverability, the precise 409 conflict semantics with error code, open_in_sessions count and suggested_action, side effects under force (unlinks every session, notifies other sessions), and the invariant that a 2xx always means the archive happened. This is exactly the behavioral context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and the failure/recovery flow in a logical order. Some redundancy: the force/409 behavior is restated in the closing 'no-op never wears a success status' paragraph and duplicates the force parameter's schema description, though the emphasized lines still earn most of their space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, so the description must cover the full behavioral profile — and it does cover errors, side effects, and the force contract well. It falls short only on the uninstrumented document_id/authorization parameters and on clarifying the 'saved document' vs session-document distinction.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Coverage is 50%. The description reinforces the force flow (which the schema already documents) and adds meaning to from_session via 'unlinks every session,' but says nothing about document_id or authorization, leaving two of four parameters undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource ('Soft-archive a saved document') and immediately distinguishes it from deletion semantics by noting the doc 'leaves the Files view but is recoverable server-side.' This differentiates it clearly from destructive siblings like delete_attachment and routes to unarchive_document conceptually.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong operational guidance on the force flow — when the call fails (409), why, and how to re-call with force=true — but never names or contrasts an explicit alternative sibling (e.g., unarchive_document, close_session_document) or states when NOT to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_jobAInspect

Stops a running turn, or ends a turn that is waiting for your review by discarding its staged changes. Already-applied changes are preserved in the document; anything still pending is discarded. Use to abort work that is no longer wanted (e.g. the user changed their mind, or you want to retry with different parameters or model_tier). The response tells you whether the work was stopped here and now (stop_state: "stopped_here") or the stop was ACCEPTED and is being carried out by the instance running the turn (stop_state: "accepted") — in the accepted case poll get_job until metadata.stopped_unwound is true or the job reaches a terminal status. A turn that already finished cannot be stopped and returns 409 naming its status.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes
authorizationNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and does so well: it discloses what is destroyed (pending/staged changes), what survives (already-applied changes), the dual-mode response (stop_state stopped_here vs accepted), the required polling loop with a concrete termination condition (metadata.stopped_unwound or terminal status), and the 409 error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, then behavior, then usage, then response semantics. Dense but nearly every clause adds operational value. Slightly long middle sentence about stop_state could be tightened, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description still conveys the mutation semantics, the response shape, and the async polling protocol, which is the critical missing structured data. The main residual gap is the undocumented authorization parameter and how to obtain a valid job_id.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both parameters. The description never explains job_id (format, where to obtain it — presumably list_jobs/get_session_jobs) nor the optional authorization parameter, which is entirely unaddressed. With zero schema coverage, this is a real gap the description should have filled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource — stops a running turn or ends a turn awaiting review by discarding staged changes — and clarifies the scope boundary (applied changes preserved, pending changes discarded). This is immediately distinguishable from siblings like get_job, list_jobs, or approve_change.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the triggering conditions (user changed their mind, retry with different parameters or model_tier) and the negative case (a turn that already finished cannot be stopped and returns 409). It also routes the agent to the correct follow-up action by naming get_job as the polling tool for the accepted case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chatAInspect

Synchronous AI chat that can rewrite specific paragraphs, add or remove table rows, restructure sections, generate new content from templates, or transform an entire document. Pass document_html only to load or replace the document; once a session holds a document the server persists it across turns, so omit it on follow-up turns. To replace the whole document with EXACT content you already hold, pass that content in document_html (a verbatim load — the AI never re-types it) or upload it via upload_document_base64; describing the content only in message makes the AI author it, which can drift from your text. Returns AI response text plus structural document changes (HTML edits, additions, deletions) with chunk IDs. One billable operation per document-modifying turn; very large multi-section edits bill one operation per 25 sections changed. For long-running edits or human-in-the-loop approval, use chat_async. Optional: model_tier (core/turbo/pro/max), thinking_depth (fast/balanced/deep), image_attachments for multimodal vision. RECOMMENDED for AI agents working with large documents (>20 pages): set response_mode='compact' to skip the full HTML in the response (the AI returns only per-section diffs in chunk_diffs) and save thousands of tokens per turn. To read sections in compact mode, just send a natural-language request like 'show me the force majeure section' — the AI returns the content in the reply text. Always use natural language to describe what you want; the AI handles all internal section lookups.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesYour message to the AI assistant.
user_idNoUser identifier. Automatically set from authentication — typically omit this.
window_idNoOptional identifier for the client window (set by the web app) so concurrent edits from two windows of the same chat are merged rather than overwritten. Agents/API may omit.
model_tierNoAI model to use: 'core' (default, fast), 'turbo' (fastest), 'pro' (advanced reasoning), 'max' (most capable).
session_idYesUnique session identifier. Reuse to continue a conversation.
document_idNoTarget a specific open document by id (ids come from /v1/sessions/{session_id}/documents). Omit to target the focused document (default — unchanged single-document behaviour). When set, that document becomes the focus for this turn.
approval_modeNoChange review mode: 'approve_all' (default, auto-applies changes) or 'ask_every_time' (pauses for your review).
authorizationNo
document_htmlNoCurrent document HTML. OMIT this when the session already holds the document — the server persists it across turns, so you don't re-send it every turn; pass it only to load new content or replace the document wholesale (a verbatim load — the AI never re-types content passed here). Include data-chunk-id attributes on elements to enable targeted AI edits.
response_modeNoResponse shape control. 'full' (default) returns the complete updated document HTML — required by web app editors and recommended for small documents (<20 pages). 'compact' (recommended for AI agents editing large documents) suppresses the full HTML and returns only per-section diffs (chunk_diffs) for changed sections, saving thousands of tokens per turn. To read sections in compact mode, just send a natural-language request like 'show me the force majeure section' — the AI returns the content in the chat reply text.full
cursor_contextNoEditor cursor context at message time, used to default the insert location for new images, diagrams, or sections when the user's prompt doesn't name a position. Shape: {chunk_id: str, pos_in_chunk?: int, text_before?: str, text_after?: str}. Omit when the user typed in chat without focusing the editor first.
thinking_depthNoReasoning depth: 'fast', 'balanced' (default), or 'deep'. Controls how much analysis the AI performs.
image_attachmentsNoInline images for vision-based analysis (base64-encoded).
touched_chunk_idsNoOptional list of chunk ids (data-chunk-id values) the user actually edited since the last sync, sent alongside document_html. When present, a chunk NOT in this list whose text is unchanged keeps its stored formatting byte-for-byte even if the client serialized it differently (protects styling from editor round-trip loss). Chunks in the list — and any chunk whose text changed — always take the submitted content. Omit for the default behavior (any differing chunk is treated as an edit).
cross_session_scopeNoOptional list of session ids to restrict cross-session SEARCH to (e.g. one end-customer's sessions). Omit to search all of this account's sessions. Only narrows within the API-key owner; ignored unless cross_session_search is on.
cross_session_memoryNoWhen true, the AI carries a private rolling memory of context across THIS account's chats (off by default). Per-request override of your saved Settings default.
cross_session_searchNoWhen true, the AI may search your PAST chats and documents on demand to reuse prior work and open a found document (off by default). Per-request override of your saved Settings default; never affects the always-on search of the open document.
deleted_part_chunk_idsNoOptional list of chunk ids (data-chunk-id values) of OUT-OF-FLOW part sections (page headers/footers, footnote/endnote bodies, comments) to delete explicitly, sent alongside document_html. Out-of-flow parts absent from document_html are always KEPT — an editor view not containing them is their normal state, never a deletion — so removing one requires naming its id here. Ids that are not stored out-of-flow parts are ignored (in-flow content keeps the default behavior). Omit when deleting nothing.
cross_session_memory_keyNoOptional per-request id of YOUR end-customer so the cross-session memory note is kept in a separate file per end-customer. Omit for one account-level note (the default / B2C).

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoAdvisory guidance for API callers (additive; absent on most responses). Currently: prefer_chat_async_for_large_generations — this turn ran long enough that the same work submitted via POST /v1/chat/async would be safer (no gateway timeout risk) and reports progress.
usageNoOperation usage data. Present for authenticated users with usage tracking.
responseYesAI assistant's response text.
session_idYesSession identifier for this conversation.
document_changesNoDocument modifications made by the AI. Present only when the document was changed.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so: it discloses cross-turn document persistence, the drift risk of describing content in `message`, billing granularity (one operation per modifying turn, per 25 sections for large edits), the response payload shape (reply text plus structural changes with chunk IDs), and the compact-mode token trade-off.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: capability statement, then document_html handling, then billing, then alternatives, then optional params. Nearly every sentence adds operational value, though the compact-mode guidance is partly restated from the schema and the prose runs long for a single tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 19-parameter mutation tool with an output schema, the description covers what an agent needs: session/document handling, billing, async alternative, response shape, and optional tuning parameters. Nothing material to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 95%, so the schema already documents most parameters and the baseline is 3. The description adds real semantic value on top: when document_html must be sent versus omitted, the verbatim-vs-authored distinction, and why response_mode='compact' is recommended for agents — beyond what the enum and field docs state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Synchronous AI chat') and enumerates concrete capabilities (rewrite paragraphs, add/remove table rows, restructure sections, generate content, transform document). It also explicitly distinguishes itself from the sibling chat_async, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use rules: pass document_html only to load/replace and omit it on follow-ups, use upload_document_base64 or verbatim document_html for exact content, use chat_async for long-running or human-in-the-loop edits, and set response_mode='compact' for large documents. Alternatives and exclusions are both named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chat_asyncAInspect

Use instead of chat when (a) the edit is large or multi-step, (b) you need human approval on each proposed change before it applies (set approval_mode='ask_every_time'), or (c) you can't afford to block on a synchronous response. To replace the whole document with EXACT content you already hold, pass that content in document_html (a verbatim load — the AI never re-types it) or upload it via upload_document_base64; describing the content only in message makes the AI author it, which can drift from your text. Returns a job_id immediately. Poll get_job to track progress and retrieve the final document. Approve or deny pending changes via approve_change. Job state is durable and survives server restarts. Optional: model_tier (core/turbo/pro/max), thinking_depth (fast/balanced/deep), image_attachments for multimodal vision. RECOMMENDED for AI agents working with large documents (>20 pages): set response_mode='compact' so the job result skips the full HTML and surfaces only per-section diffs in chunk_diffs, saving thousands of tokens per poll. To read sections in compact mode, just send a natural-language chat request ('show me the pricing section') — the AI returns the content in the reply text. Always use natural language; the AI handles all internal section lookups. HITL workflow (approval_mode='ask_every_time'): 1) poll get_job until status=awaiting_approval, 2) read metadata.pending_changes for proposed edits, 3) call approve_change per change, 4) continue polling until status=completed.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesYour message to the AI assistant.
user_idNoUser identifier. Automatically set from authentication — typically omit this.
window_idNoOptional identifier for the client window (set by the web app) so concurrent edits from two windows of the same chat are merged rather than overwritten. Agents/API may omit.
async_modeNoMust be true for async processing. Included for backward compatibility.
model_tierNoAI model to use: 'core' (default, fast), 'turbo' (fastest), 'pro' (advanced reasoning), 'max' (most capable).
session_idYesUnique session identifier. Reuse to continue a conversation.
document_idNoTarget a specific open document by id (ids come from /v1/sessions/{session_id}/documents). Omit to target the focused document (default — unchanged single-document behaviour). When set, that document becomes the focus for this turn.
approval_modeNoChange review mode: 'approve_all' (default, auto-applies changes) or 'ask_every_time' (pauses for your review).
authorizationNo
document_htmlNoCurrent document HTML. OMIT this when the session already holds the document — the server persists it across turns, so you don't re-send it every turn; pass it only to load new content or replace the document wholesale (a verbatim load — the AI never re-types content passed here). Include data-chunk-id attributes on elements to enable targeted AI edits.
response_modeNoResponse shape control. 'full' (default) puts the complete updated document HTML in the job result — required by web app editors and recommended for small documents. 'compact' (recommended for AI agents editing large documents) suppresses the full HTML and stores only per-section diffs (chunk_diffs), saving thousands of tokens when polling get_job. To read sections in compact mode, send a natural-language request to chat ('show me the pricing section') — the AI returns the content in the reply text.full
cursor_contextNoEditor cursor context at message time, used to default the insert location for new images, diagrams, or sections when the user's prompt doesn't name a position. Shape: {chunk_id: str, pos_in_chunk?: int, text_before?: str, text_after?: str}. Omit when the user typed in chat without focusing the editor first.
thinking_depthNoReasoning depth: 'fast', 'balanced' (default), or 'deep'. Controls how much analysis the AI performs.
image_attachmentsNoInline images for vision-based analysis (base64-encoded).
touched_chunk_idsNoOptional list of chunk ids (data-chunk-id values) the user actually edited since the last sync, sent alongside document_html. When present, a chunk NOT in this list whose text is unchanged keeps its stored formatting byte-for-byte even if the client serialized it differently (protects styling from editor round-trip loss). Chunks in the list — and any chunk whose text changed — always take the submitted content. Omit for the default behavior (any differing chunk is treated as an edit).
cross_session_scopeNoOptional list of session ids to restrict cross-session SEARCH to (e.g. one end-customer's sessions). Omit to search all of this account's sessions. Only narrows within the API-key owner; ignored unless cross_session_search is on.
cross_session_memoryNoWhen true, the AI carries a private rolling memory of context across THIS account's chats (off by default). Per-request override of your saved Settings default.
cross_session_searchNoWhen true, the AI may search your PAST chats and documents on demand to reuse prior work and open a found document (off by default). Per-request override of your saved Settings default; never affects the always-on search of the open document.
deleted_part_chunk_idsNoOptional list of chunk ids (data-chunk-id values) of OUT-OF-FLOW part sections (page headers/footers, footnote/endnote bodies, comments) to delete explicitly, sent alongside document_html. Out-of-flow parts absent from document_html are always KEPT — an editor view not containing them is their normal state, never a deletion — so removing one requires naming its id here. Ids that are not stored out-of-flow parts are ignored (in-flow content keeps the default behavior). Omit when deleting nothing.
cross_session_memory_keyNoOptional per-request id of YOUR end-customer so the cross-session memory note is kept in a separate file per end-customer. Omit for one account-level note (the default / B2C).

Output Schema

ParametersJSON Schema
NameRequiredDescription
job_idYesJob identifier. Poll GET /v1/jobs/{job_id} for status and results.
statusYesInitial job status (always 'pending').
messageNoHuman-readable status message.
session_idYesSession identifier for this conversation.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and does so: it discloses that the call returns a job_id immediately rather than blocking, that job state is durable across server restarts, that polling happens via get_job and approval via approve_change, and that compact mode trades full HTML for per-section chunk_diffs. The verbatim-load vs AI-authored-content distinction is a non-obvious behavioral trap it proactively warns about.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the routing decision, which is the highest-value sentence, and every later sentence covers a distinct concern (verbatim loading, polling, approval, compaction, HITL steps). It is a dense single block with no paragraph breaks, so it reads as a run-on and repeats the compact-mode explanation that also lives in the schema; a 20-parameter async tool justifies the length, but tighter structure would help.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still supplies the one thing an agent needs to act on the response — that it returns a job_id and must be polled via get_job. Combined with the approval loop, the durability guarantee, and the token-saving guidance for large documents, nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 95%, so the baseline is 3, and the description earns above that by explaining the semantic difference between passing content in document_html (verbatim load, never re-typed) versus describing it in `message` (AI authors it, can drift) — a distinction the schema does not draw. It also motivates response_mode, approval_mode, model_tier, thinking_depth, and image_attachments, though it stays silent on cross_session_*, touched_chunk_ids, deleted_part_chunk_ids and cursor_context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (async chat turn) and immediately distinguishes itself from its sibling: 'Use instead of chat when...'. The three qualifying conditions (large/multi-step edit, per-change approval, non-blocking need) let an agent route between chat and chat_async without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use conditions (a)(b)(c), a named alternative (chat), a recommendation keyed to document size (>20 pages → response_mode='compact'), and a numbered HITL workflow for approval_mode='ask_every_time'. This is as close to prescriptive routing as a description gets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clear_cross_session_memoryAInspect

Delete the caller's cross-session memory note. Owner-scoped: a caller can only clear its OWN note. With no key this clears the account-level note; with a memory_key it clears that one end-customer's note. Idempotent (removed=0 if it didn't exist).

ParametersJSON Schema
NameRequiredDescriptionDefault
memory_keyNoClear ONE end-customer's stored memory (the cross_session_memory_key you send on chat). Omit to clear the account-level note (the B2C default).
authorizationNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the owner-scoping restriction (a caller can only clear its OWN note), the destructive nature of the operation, and idempotency semantics (removed=0 if it didn't exist). It omits any mention of authentication requirements despite an authorization parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action and scope, followed by the parameter modes and the idempotency caveat. No filler or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No annotations and no output schema, so the description must cover behavior, and it covers deletion scope, ownership constraints, and the removed return value. The unexplained authorization parameter is the remaining gap for a delete operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: memory_key is well documented in the schema and the description reinforces it with account-level vs per-customer framing. The authorization parameter is undocumented in both places, so the description does not fully compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Delete) and resource (caller's cross-session memory note), and immediately clarifies scope: account-level vs a single end-customer's note. No sibling tool does anything comparable, so the agent can place it precisely without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditional guidance for the two invocation modes: omit memory_key to clear the account-level note, supply it to clear one end-customer's note. It does not name an alternative tool or state when not to use it, but the mode selection is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

close_session_documentAInspect

Remove document_id from the session's open documents (the tab close button). If it's the focused document, focus another open document — next_focus if it's still open (so the client can pick the adjacent tab), else the next remaining one; closing the last document leaves the session empty. Returns the updated document roster + the now-focused document's HTML.

The close takes effect immediately and is persisted, so a later reconnect or session restore won't bring the closed document back. Persistence is best-effort — a failure is logged, not fatal (the close still holds for the active session).

ParametersJSON Schema
NameRequiredDescriptionDefault
next_focusNo
session_idYes
document_idYes
include_htmlNoInclude each document's full reassembled HTML body. Default false (token-light — recommended for AI agents enumerating or switching tabs): returns only ids, title, section count, focused flag, and page setup, omitting the body which can be hundreds of KB per document. The web app passes true to render document content.
authorizationNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so thoroughly: it discloses that the close is immediate and persisted, that persistence is best-effort with failures logged rather than fatal, how focus is transferred (next_focus if still open, else next remaining), and that closing the last document leaves the session empty. This is exactly the side-effect and failure-mode context an agent needs for a mutation with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight paragraphs: behavior first, persistence caveat second, with the key action and the focus fallback chain front-loaded. Nearly every sentence earns its place, though the phrasing is dense enough that a small trim would still preserve all signal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterized mutation with no output schema, the description explains side effects, focus behavior, and the returned roster + HTML, which is sufficient to call it correctly. The only material omission is any mention of the authorization parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (20%, only include_html documented), so the description must compensate. It usefully explains document_id's role and the otherwise-undocumented next_focus selection logic, and the return payload covers the output side. But it adds nothing about authorization or session_id, leaving part of the coverage gap unfilled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Remove document_id from the session's open documents') and anchors it to a concrete UI metaphor ('the tab close button'), making the operation instantly recognizable. The contrast with siblings like archive_document or focus_session_document is implicit but unmistakable given the 'open documents' scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the tab-close framing and the note that a later reconnect/restore won't restore the document, which signals intent. However, it never names an alternative (e.g., archive_document for durable removal) or states when-not to use this tool, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

continue_chatAInspect

Used with chat_async when a large edit paused to ask whether to keep going. Poll get_job until status=awaiting_approval AND metadata.awaiting_kind='continue_prompt'; then POST here with continue=true to resume (the AI picks up where it left off with a fresh time/step budget) or continue=false to stop (everything applied so far is kept). The job then resumes/finishes and reaches status=completed. This is NOT the change- approval endpoint (that is approve_change) — it can only act on a continue-prompt pause.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesJob ID awaiting a continue decision.
continueYesTrue to resume with a fresh budget; false to stop here (work so far is kept).
session_idYes
authorizationNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden but discloses strong behavioral detail: continue=true resumes with a fresh time/step budget, continue=false stops while keeping everything applied so far, and the job reaches status=completed. It omits auth/permission requirements despite an authorization parameter being present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Information-dense but well front-loaded: the trigger condition comes first, then the action, then the exclusion. Every sentence carries operational weight, though the multi-line flow is slightly long for what is essentially a poll-then-post pattern.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a resume/stop control on an async job with no output schema and no annotations, the description covers the full lifecycle (pause detection, resume, stop, terminal status). The remaining gap is the auth requirement and what session_id must reference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, so the description must compensate. It clarifies continue's two outcomes ('fresh budget' vs 'work so far is kept') beyond the schema's own text, and ties job_id to the awaiting-decision state, but leaves session_id and authorization undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (resume a paused async chat job awaiting a continue decision) and explicitly names the sibling it is not (approve_change). An agent can distinguish it from get_job, cancel_job, and approve_change without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger condition to poll get_job until status=awaiting_approval AND metadata.awaiting_kind='continue_prompt', then act. It also names the alternative endpoint (approve_change) and states the exclusion that this tool 'can only act on a continue-prompt pause'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_attachmentAInspect

Removes the attachment from the session; the AI will no longer reference it in subsequent chat turns. If processing is still in progress, also cancels the underlying job. Use to free up context, remove sensitive files mid-session, or replace a stale reference document. The attachment_id can be either the final attachment ID or the job ID (during processing).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
attachment_idYes
authorizationNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it discloses the context effect, the job-cancellation side effect, and the dual-ID acceptance. It omits whether removal is reversible, whether the underlying stored file is destroyed, and what authorization is required despite an authorization parameter existing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the primary effect, then usage scenarios, then the parameter caveat. Every sentence adds distinct information with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers the key behavioral effects and the tricky ID semantics. It is slightly incomplete on irreversibility/storage fate and the undocumented authorization parameter, but nothing critical to invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 3 params, so the description must compensate. It adds real value for attachment_id (may be the final attachment ID or the job ID during processing), but says nothing about session_id or the authorization parameter, leaving part of the surface undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Removes) and resource (the attachment from the session) and immediately clarifies the downstream effect on the AI's context. It also distinguishes itself from the job-oriented siblings by noting it cancels the underlying job when processing is still in progress.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives three concrete use cases (free context, remove sensitive files mid-session, replace a stale reference document), which is clear guidance. It stops short of naming explicit alternatives/conditions such as when to call cancel_job or close_session_document instead, so it is not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_user_templateAInspect

Soft-deletes the template; only the owner (user or organization) can delete. Once deleted, the template no longer appears in list_user_templates and cannot be referenced by the AI for new documents. Existing documents already drafted from the template are unaffected.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_idYes
authorizationNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden and does disclose a lot: soft-delete semantics, the ownership authorization requirement, disappearance from list_user_templates, loss of AI referenceability, and that existing drafted documents are unaffected. It still omits reversibility/restore behavior and any response/error semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and its soft-delete nature, then layers the authorization constraint and side-effect scope. Every clause adds distinct information with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no annotations and no output schema, the description covers the important behavioral surface (ownership, listing, AI reference, existing documents). The main residual gaps are parameter-level detail and success/error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both parameters, so the description must compensate but largely does not. It supplies no format or meaning for template_id and does not explain the authorization parameter (anyOf string/null), beyond an indirect hint that owner authorization is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Soft-deletes the template') and goes beyond the name by marking it as a soft delete and naming the sibling it affects (list_user_templates). An agent can tell exactly what happens and how it differs from a hard delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context: only the owner (user or organization) may call it, and it removes the template from listing and AI reference. However it names no explicit alternative or when-not-to-use condition, so there is room beyond straightforward context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_documentAInspect

Round-trips the document through the original docx renderer, preserving tables, borders, shading, alternating row colors, headers, footers, fonts, inline styling, and embedded images. Two modes: pass html directly to export ad-hoc content, OR pass session_id to export the session's current state. Format options: 'docx' (default, native Open XML, best for programmatic processing or mail merge), 'pdf', 'html', 'markdown', or 'txt' ('doc' is a legacy Word-compatible HTML alias). Fidelity is the differentiator vs naive HTML to docx converters. When called as an MCP tool, binary formats (docx/pdf/doc) are returned as a short-lived signed download_url in a JSON envelope (fetch it to get the file); text formats (html/markdown/txt) are returned inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlNoHTML content to export inline. Used instead of the session document if provided.
formatNoExport format. One of docx (default), pdf, html, markdown, txt.docx
optionsNoCustomization (paper, margins, filename, watermark, etc.).
filenameNoDEPRECATED. Use options.filename. Top-level kept for legacy callers.
upload_idNoID returned by /v1/uploads (large-document upload flow, for payloads above ~25 MB). When set, the route fetches the HTML body from the uploaded payload instead of using the html field.
session_idNoSession ID to export from (the document is taken from the session). Required if html is omitted.
authorizationNo
source_filenameNoThe document's original/source filename (e.g. the name it was uploaded under). Used as the default export filename when no explicit options.filename is set, taking precedence over the first heading.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the MCP return contract (binary formats yield a short-lived signed download_url in a JSON envelope; text formats return inline), the strict vs compat fidelity semantics, and the default docx behavior. It omits permissions/auth requirements and any note on side effects or rate limits, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: fidelity/preservation claim first, then modes, then formats, then the MCP return behavior. Every sentence carries information, though the fidelity marketing line and the format enumeration make it longer than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 8-parameter tool with nested options and no output schema, the description compensates by explaining the return envelope and format-dependent output. It stops short of covering the upload_id large-payload flow or error behavior, which the schema alone carries, leaving a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 88%, so the schema documents most parameters. The description still adds value by explaining the mutual-exclusion relationship between html and session_id, clarifying that 'doc' is a legacy HTML alias (not stated in the enum description), and characterizing the docx default for downstream processing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource (export a document) and goes further, naming the two input modes (html for ad-hoc content, session_id for session state) and the exact fidelity behaviors preserved (tables, borders, shading, headers, footers, images). It also positions itself against naive HTML-to-docx converters, so an agent can distinguish it from generic conversion utilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear routing guidance for the two modes ('pass html directly... OR pass session_id') and per-format advice ('docx... best for programmatic processing or mail merge'). It does not name sibling alternatives such as request_download_url or get_document_detail, nor state when NOT to export, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

focus_session_documentAInspect

Make document_id the focused document (the editor's active document and the default edit target). Accepts either the session slot id OR the permanent document id (the UUID shown by list_documents/Files, returned as durable_document_id by list_session_documents). Persists the outgoing focused document into the session's document map and returns the now-focused document's HTML.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
document_idYes
include_htmlNoInclude each document's full reassembled HTML body. Default false (token-light — recommended for AI agents enumerating or switching tabs): returns only ids, title, section count, focused flag, and page setup, omitting the body which can be hundreds of KB per document. The web app passes true to render document content.
authorizationNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the burden; it does disclose a real side effect (the outgoing focused document is persisted into the session's document map) plus the return content. However, it states unconditionally that the call 'returns the now-focused document's HTML', which conflicts with include_html defaulting to false (token-light ids/title/section count only). Auth requirements are also unaddressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with the core action stated first and the id semantics and side effect following. The parenthetical asides are dense but each carries information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description does cover the state change and the return channel. It still leaves the HTML-vs-token-light return behavior ambiguous despite include_html existing, and says nothing about required authorization, so an agent could easily expect a payload it will not receive by default.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds genuinely useful semantics for document_id — that either a session slot id or a durable_document_id UUID is valid — which the bare 'Document Id' schema title does not convey. But with only 25% schema coverage it leaves session_id and authorization unexplained, and its unconditional 'returns ... HTML' claim overrides rather than supports include_html's documented default of false.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource ('Make document_id the focused document') and immediately defines what 'focused' means in operational terms: the editor's active document and the default edit target. It is clearly separable from siblings such as open_documents, close_session_document, and list_session_documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains which identifier forms are accepted and where to obtain them (the session slot id, or the permanent UUID surfaced by list_documents/Files and returned as `durable_document_id` by list_session_documents). This is concrete routing guidance, but it never states when to prefer this over open_documents or close_session_document, so no true alternatives/exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_account_statusAInspect

Check your Typebar account status: tier, monthly operations used/remaining, and (for agent accounts) whether a human has adopted it.

Call this with your sk_ key. Useful before doing work (to confirm you have operations left) and before signing up again (to reuse your account).

Nearing your monthly cap and need to keep going? Hand the account to a human: POST /v1/agents/handoff with their email returns a one-time takeover code to give them; they open the emailed link, enter the code, and adopt the account in place (your work and this API key keep working) so they can upgrade and pay. No human? POST /v1/agents/request-upgrade instead. Full flow: https://docs.superdocs.app/introduction/agent-signup

ParametersJSON Schema
NameRequiredDescriptionDefault
authorizationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNo
tierYes
quotaYes
adoptedNoFor agent accounts: whether a human has adopted it yet. Null for regular accounts.
account_idYes
is_agent_accountYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden well: it discloses that an `sk_` key is required, that the operation is a status check, and that human adoption preserves both work and the API key while enabling payment/upgrade. It does not explicitly state read-only/no-side-effects, but the 'check' framing and account-state descriptions are informative.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The status-check purpose is front-loaded and concise. The subsequent upgrade/handoff instructions are longer and somewhat tangential to merely checking status, but they earn their place by explaining what to do when operations are low.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a simple one-parameter tool with an output schema, the description covers purpose, authentication, usage timing, and account-reuse/upgrade edge cases. Nothing essential for calling it correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single `authorization` parameter, but the description compensates by saying 'Call this with your `sk_` key,' which explains the required credential despite being technically optional in the schema. It does not add further format details, but for one parameter this is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Check your Typebar account status: tier, monthly operations used/remaining, and ... whether a human has adopted it.' It clearly distinguishes this informational account-status check from sibling tools like request_limit_increase or health.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage contexts: use before doing work to confirm operations remain, and before signing up again to reuse the account. It also explains what to do when nearing the monthly cap, including handoff versus request-upgrade, though it frames these as HTTP endpoints rather than sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_attachment_statusAInspect

Returns each attachment's processing state (pending/processing/completed/failed) plus extracted text length and chunk count once ready. Poll this after upload_attachment_base64 to know when an attachment becomes queryable by the AI. Surfaces processing errors with actionable messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
authorizationNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the polling interaction pattern, the exact state values, what becomes available once 'completed', and that errors are surfaced with actionable messages. It omits whether the call is read-only, any auth/permission requirements (despite an `authorization` parameter), and any rate-limit or polling-cost caveats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the return contract before the usage instruction. No filler and every sentence adds distinct information (payload, polling trigger, error behavior).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by enumerating the returned fields and states, which is the right move for a status-polling tool. The gap is parameter documentation for `session_id`/`authorization`, leaving the description one step short of fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and there are two parameters, so the description must compensate — but it never mentions `session_id` or `authorization`. An agent gets no statement of which session's attachments are returned or how credentials are supplied. The word 'attachment' implies session scoping only indirectly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns each attachment's processing state') and enumerates the exact payload (pending/processing/completed/failed, extracted text length, chunk count). This is clearly the attachment-status reader, distinct from upload_attachment_base64, delete_attachment, and the generic get_job/list_jobs siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use context: 'Poll this after upload_attachment_base64 to know when an attachment becomes queryable by the AI.' It names the predecessor tool and the goal state, which is strong routing guidance. It lacks any when-not guidance or mention of how often/when to stop polling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_document_detailAInspect

One saved document's metadata plus a STRUCTURE outline and the chat sessions that have it open (prior-chats-per-file). Owner-scoped — 404 if the document isn't yours.

structure (always included, token-light, NON-BILLABLE) is the cheap verify step after any edit: headings (level + text + position), section_count (heading-anchored), block_count (editable chunks), media (image/diagram counts). It answers "did my edit land?" for free — never export a whole document just to check its structure. Pass include_html=true only when you need the body.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYes
include_htmlNoWhen true, also returns the document's full reassembled HTML body (`html`), plus its `page_setup` and `version_id`. Default false returns metadata + structure + prior-chats only, keeping the response token-light. This is the by-id way to read a saved document's body without opening it into a session.
authorizationNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden well: it discloses owner-scoping (404 if not yours), cost behavior (token-light, NON-BILLABLE), and that structure is always included. It doesn't state permissions/rate limits explicitly or whether the read is side-effect free, leaving slight gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the opening sentence, followed by scoped detail on structure and include_html. Every sentence carries information, though the structure-component enumeration is somewhat dense; nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description still fully specifies the return shape (headings/section_count/block_count/media, prior-chats, and html/page_setup/version_id when include_html=true). An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% — document_id and authorization are undocumented in both schema and description. The description clarifies include_html's purpose and default and explains the return is metadata+structure unless include_html=true, partially compensating, but the required document_id gets no elaboration.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (one saved document) and enumerates the exact payload: metadata, STRUCTURE outline, and chat sessions that have it open. It differentiates itself from siblings like list_documents and export_document by clearly being the by-id detail/verify call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use guidance ('cheap verify step after any edit', 'did my edit land?') and an explicit when-not/alternative ('never export a whole document just to check its structure'). It also scopes include_html with a clear condition: use only when you need the body.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jobAInspect

Returns the job's current state (pending, in_progress, awaiting_approval, completed, failed, or cancelled), intermediate AI responses streamed during execution, the final document HTML once complete, and any pending changes awaiting user approval (with chunk IDs and proposed HTML diffs in metadata.pending_changes). Poll this after chat_async to track progress and retrieve results. When status is awaiting_approval, call POST /v1/chat/{session_id}/approve to approve or deny each pending change. Headless/MCP clients get the same typed progress events the web SSE stream delivers via metadata.intermediate_responses (e.g. documents_changed, continue_prompt, model_fallback, proposed_change_batch); cross-session document updates from OTHER sessions are reported separately by polling GET /v1/sessions/{session_id}/doc-events.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes
compactNoWhen true, omit the heavy result body + streamed intermediate events from the response (status/progress/ids/timestamps/pending-change ids remain). Recommended for AI agents polling a large-document job: poll compact while it runs, then fetch once non-compact when status is completed to retrieve the final HTML.
authorizationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message. Present when status is 'failed'.
job_idYesUnique job identifier. Use this to poll for status updates.
resultNoJob output. Present when status is 'completed'. Contains AI response and document changes for chat jobs.
statusYesCurrent status: 'pending', 'in_progress', 'awaiting_approval', 'completed', 'failed', or 'cancelled'.
user_idNoUser that owns this job (null for organization jobs).
job_typeYesType of job: 'chat' or 'attachment_processing'.
metadataNoJob metadata and context. Contains pending_changes when status is 'awaiting_approval'.
progressYesProgress percentage (0-100).
created_atYesISO 8601 timestamp when the job was created.
session_idYesSession associated with this job.
updated_atYesISO 8601 timestamp of the last status change.
organization_idNoOrganization that owns this job (null for user jobs).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and largely meets it: it discloses the status lifecycle, that intermediate responses are streamed, that pending changes carry chunk IDs and HTML diffs in metadata.pending_changes, and that headless/MCP clients receive typed progress events (documents_changed, continue_prompt, model_fallback, proposed_change_batch). It stops short of stating auth/permission requirements or rate-limiting expectations for polling, which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The response payload is front-loaded in the first sentence, followed by usage guidance and then the approval/streaming details. It is dense and runs long, but nearly every clause carries non-obvious behavioral information rather than restating structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, the description need not explain return values, yet it usefully ties the status values to the approval workflow and streaming events an agent must act on. Combined with the polling guidance and the cross-session alternative, an agent has everything needed to call and follow up on this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% — only 'compact' is documented, while job_id and authorization are undocumented in both schema and description. The description implies job_id via 'the job's current state' but adds no meaning for the authorization parameter, so it does not compensate for the low coverage; job_id is self-evident from the tool name, keeping this at a baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (returns the job's current state) and enumerates the exact status values (pending, in_progress, awaiting_approval, completed, failed, cancelled), plus the full payload. It clearly distinguishes get_job from siblings like list_jobs, get_session_jobs, and cancel_job by describing per-job result retrieval rather than listing or mutating.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit routing: 'Poll this after chat_async to track progress and retrieve results,' and names the follow-up action when status is awaiting_approval (POST /v1/chat/{session_id}/approve). It also points to an alternative for a related need (GET /v1/sessions/{session_id}/doc-events for cross-session updates), so when-to-use and when-to-use-something-else are both covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_session_historyAInspect

Returns complete message history (user and AI), final document HTML with chunk IDs preserved, attachment list, and editor actions (font, color, alignment changes). Use to continue editing a document you started in a prior session. The AI rehydrates with full context of all prior decisions, chunk IDs, and attachments. Pass include_document_html=false to skip the full document body when you only need the conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
authorizationNo
focus_document_idNoDurable id of the document to focus on restore (e.g. the file the user clicked in the Files view). When set, that document is shown in the editor and marked focused in the roster; omit to use the session's own last-focused document.
include_document_htmlNoWhen false, omit the restored document's full HTML body (document_state.html_content) to keep your context small — agents that just need the conversation + metadata should set false. Default true (the web app needs the body to re-render the editor).

Output Schema

ParametersJSON Schema
NameRequiredDescription
messagesYesOrdered list of messages. Each item has: id (string), sender ('user' or 'ai'), content (string), timestamp (ISO 8601), turn_index (int), checkpoint_id (string or null — present on turns recorded after the revertability feature shipped; null for legacy turns where revert is unavailable).
session_idYesSession identifier.
editor_actionNoClient instruction: 'update' (load document_state HTML into editor), 'clear' (reset editor), or 'keep' (no change).
restore_errorNoTrue ONLY when the document RESTORE itself failed transiently (its content load timed out or errored, typically under backend memory pressure) — as distinct from a genuine document-less session ('clear') or an intentional no-change ('keep'). editor_action stays 'keep' so the editor is left exactly as-is (never wrongly cleared); this flag lets the client offer a non-blocking retry instead of silently leaving the user on an empty editor. Null/absent on success and on the genuine no-document path.
document_stateNoCurrent document state. Present if the session has an active document.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full disclosure burden and does much of it: it explains that the AI rehydrates with prior decisions/chunk IDs/attachments, and highlights the context-size trade-off of include_document_html. It says nothing about the authorization parameter, permission requirements, or failure modes, which is the remaining behavioral gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, most of which earn their place, with the core return payload and the continuation use case front-loaded. 'The AI rehydrates with full context of all prior decisions, chunk IDs, and attachments' partially repeats the earlier return inventory, so it is slightly longer than needed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not strictly required, yet the description usefully characterizes what rehydration gives the agent. The main omission is any mention of the authorization parameter or access prerequisites for a session-history read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: focus_document_id and include_document_html are already documented in the schema, and the description largely restates the include_document_html behavior rather than adding new meaning. session_id and authorization have no description anywhere, and the description does not compensate for those gaps — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('get_session_history') with an explicit inventory of what is returned: message history, document HTML with chunk IDs, attachment list, and editor actions. It is clear what the tool retrieves, but it never contrasts itself with nearby siblings such as get_document_detail or list_sessions, so an agent must infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States a clear usage context ('Use to continue editing a document you started in a prior session') and gives a conditional guideline for include_document_html=false when only the conversation is needed. It stops short of naming alternatives or exclusions, so it is clear context rather than full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_session_jobsAInspect

Returns the full job history of one document. Useful for auditing what the AI did to a document over time, or finding a specific job that's waiting for HITL approval. Same shape as list_jobs but scoped to one session.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of jobs to return
compactNoWhen true, omit each job's heavy result body + streamed intermediate events — returns just status/progress/ids/timestamps. Recommended for agents listing many jobs.
session_idYes
authorizationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobsYesArray of job details.
totalYesTotal number of jobs returned.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses scope (one session) and output shape parity with list_jobs, which is genuinely useful. However, it says nothing about permissions/auth requirements, pagination, or whether the full history is truncated by default limits — meaningful gaps for a history-listing read tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core behavior, then use cases, then the sibling contrast. Every sentence earns its place, though the final sentence slightly restates the scoping already implied by the opening.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value details need not be spelled out, and the description correctly covers purpose, scope, and routing. Missing pieces are secondary: auth expectations and pagination/limit behavior for a tool that can return unbounded history.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%; the compact parameter is well documented in the schema itself, but limit and session_id carry only titles or a terse one-liner. The description reinforces that session_id scopes the call ('scoped to one session') but adds no format, default, or interaction details for limit/compact and says nothing about the authorization parameter. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Returns the full job history of one document,' and immediately differentiates from the sibling list_jobs. Slight friction in naming a 'session' as a 'document' and back again, which could momentarily blur what the scoping key means, but the intent is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete use cases (auditing AI actions over time, finding a job awaiting HITL approval) and routes the agent relative to a named sibling: 'Same shape as list_jobs but scoped to one session.' No explicit when-not-to-use, but the alternative and its selection condition are both present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

healthAInspect

Returns 200 with {"status":"healthy"} when the API is up. Call this once after MCP install to confirm the connection works before invoking other tools. No authentication required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it discloses the exact status code and payload and that no auth is needed. It does not mention timeouts, rate limits, or that it is a safe read-only probe, but for a trivial health endpoint the disclosure is largely sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the observable result, then the when, then the auth note. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the return value even though no output schema exists, and with zero parameters and a trivial surface there is nothing else an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing the description needs to compensate for; schema coverage is 100% on an empty object. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb (returns) and the exact resource/response (200 with {"status":"healthy"}) plus the condition (when the API is up). No sibling tool performs a connectivity check, so this is unambiguously distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to call it once after MCP install and before invoking other tools, which is exactly the when-to-use guidance an agent needs. It also pre-empts an auth concern by stating no authentication is required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

init_sessionAInspect

Create a session AND open N saved documents into it in ONE call (the documents are SHARED, never copied — the same cross-session behavior as /documents/open). The web UI passes its own session_id so its session model stays consistent; an MCP/API integrator can omit it and the server mints one — the one-call way to start a session with documents already open. With no document_ids it just returns a fresh, empty session. The open semantics (first document focused, durable binding, returned roster) are identical to /documents/open.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoOptional client-chosen session id (the web UI passes its own so its session model stays consistent). Omit and the server mints one — the one-call way for an MCP/API integrator to start a session with documents already open.
document_idsNoDurable document ids (from GET /v1/documents) to open into the brand-new session. Omit/empty to start an empty session.
include_htmlNoInclude each document's full reassembled HTML body. Default false (token-light — recommended for AI agents enumerating or switching tabs): returns only ids, title, section count, focused flag, and page setup, omitting the body which can be hundreds of KB per document. The web app passes true to render document content.
authorizationNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that documents are SHARED and never copied, that the first document is focused, the binding is durable, and a roster is returned. It is silent on the authorization parameter and on error/failure behavior, which are meaningful gaps for a session-creating mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, but the text repeats the 'one-call way to start a session with documents already open' idea and the '/documents/open' cross-reference twice. Some sentences could be consolidated without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a combined create-plus-open tool with no annotations and no output schema, the description covers the key behaviors an agent needs (sharing semantics, focus, empty-session case). It lacks only authorization and failure-mode detail to be fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and the description reinforces session_id semantics (client-chosen vs server-minted) and the document_ids roles beyond the schema. It adds little for include_html (already fully documented) and leaves the authorization parameter unaddressed in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource (create a session and open N documents) and precisely scopes it as a combined one-call operation. It implicitly separates this from the sibling open_documents by framing it as the way to start a session with documents already open.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete usage context: the web UI passes its own session_id, while an MCP/API integrator omits it and the server mints one; with no document_ids it returns an empty session. It never names the sibling open_documents or states an explicit when-not-to-use, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_documentsAInspect

List the authenticated user/org's saved documents, most-recently-updated first (metadata only — no document content). Each carries a session_count ("N chats"). Documents become durable + reusable automatically as you create or edit them; on the FIRST call we also one-time import the documents of pre-Files-view chats so prior work appears here too. Pass archived=true to browse the soft-deleted set (the Files "Archived" filter).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of documents to return.
offsetNoOffset for pagination.
archivedNoWhen true, list your ARCHIVED (soft-deleted) documents instead of the live set — backs the Files view's Archived filter. Restore one with POST /v1/documents/{document_id}/unarchive.
authorizationNo
include_previewNoInclude a small preview_html (first chunks) per document for thumbnails. The web Files view sets this; agents leave it off to stay token-light.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the one-time import of pre-Files-view chats on the FIRST call (a surprising side effect for a read-shaped tool), the soft-delete semantics of the archived view, the ordering, and that results are metadata-only. That is exactly the non-obvious behavior an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose, ordering, and the metadata-only constraint are front-loaded in the first sentence; the remaining sentences each add a distinct operational fact (session_count, auto-durability, first-call import, archived filter). No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-param, no-annotation, no-output-schema tool, the description covers purpose, both boolean flags, the ordering, and the notable side effect. It stops short of describing the returned record shape beyond metadata-only and session_count, which matters slightly given there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 80%, so baseline is 3, but the description adds meaning beyond the schema for two parameters: archived is framed as the Files 'Archived' filter over soft-deleted records, and include_preview is framed as token-light for agents. limit/offset are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource+scope: 'List the authenticated user/org's saved documents, most-recently-updated first (metadata only — no document content)'. That ordering and metadata-only qualifier cleanly separates it from get_document_detail and the content-bearing siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete conditions: 'Pass archived=true to browse the soft-deleted set', and tells agents to leave include_preview off to stay token-light. It does not explicitly name alternative tools (e.g., get_document_detail, list_session_documents) for the case of fetching content, so routing is implied rather than complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_jobsAInspect

Returns jobs sorted by most recent, optionally filtered by status. Use to monitor long-running AI edits started via chat_async, see which jobs are paused waiting for human approval, or audit completed work. Each job tracks the chat that started it, the changes made, and any HITL decisions logged.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of jobs to return
statusNoFilter by job status
compactNoWhen true, omit each job's heavy result body + streamed intermediate events — returns just status/progress/ids/timestamps. Recommended for agents listing many jobs.
authorizationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobsYesArray of job details.
totalYesTotal number of jobs returned.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses the ordering, the optional status filter, and what each job record contains (originating chat, changes, HITL decisions), but is silent on pagination behavior, the authorization requirement, and the compact-mode tradeoff beyond what the schema already states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with what the tool returns before moving to use cases and record contents. Every sentence carries information; only the final sentence about tracked fields is somewhat expendable given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape detail is optional, and the description still conveys the record contents. For a zero-annotation, four-param list tool it covers purpose, use cases, and ordering, but leaves auth requirements and the relationship to get_job/get_session_jobs unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, near the threshold where the schema does the heavy lifting. The description adds the sort order ('most recent') and confirms status filtering, but says nothing about limit, compact, or authorization; the compact param is documented only in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns jobs'), plus ordering ('sorted by most recent') and optional status filtering. This clearly separates it from get_job (single job) and cancel_job, though it never names those siblings explicitly, so it falls short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives three concrete when-to-use scenarios: monitoring chat_async edits, spotting jobs paused for human approval, and auditing completed work. Strong contextual guidance, but no explicit exclusions or named alternatives (get_job, get_session_jobs) for narrower lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_session_documentsAInspect

Returns the editable documents open in this session (focused first), each with its id, chunk count, and focused flag — so a client can render document tabs. The response is token-light by default; pass include_html=true to also get each document's reassembled HTML.

ID MAPPING: document_id is the SESSION-LOCAL slot id ("doc_primary", "doc_ab12…"); durable_document_id is the PERMANENT document id (a UUID) — the SAME id list_documents (Files) shows and get_document_detail / rename_document / archive_document / open_documents take (null until the document's first save). focus_session_document, close_session_document, and chat's document_id accept EITHER form, so you can drive a session entirely with durable ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
include_htmlNoInclude each document's full reassembled HTML body. Default false (token-light — recommended for AI agents enumerating or switching tabs): returns only ids, title, section count, focused flag, and page setup, omitting the body which can be hundreds of KB per document. The web app passes true to render document content.
authorizationNo
report_changedNoResume awareness: when true, each doc carries `changed_since_seen` = its committed version is newer than the version THIS session last saw (changed by another session while away). The web UI sets this ONLY on resume / a chat switch (never on the ~2s poll) so it can show a one-time 'changed since you were last here' notice — ongoing changes are surfaced through the normal change feed. Computed before the roster updates the version this session has seen.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden — and it does substantial work: it warns that the body can be hundreds of KB per document and is omitted by default, explains the focused-first ordering, and flags that `durable_document_id` is null until the first save. It does not cover auth requirements or rate/refresh caveats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core behavior in the first sentence and uses a labeled ID MAPPING block to organize the denser id-semantics content. Some of the mapping prose is verbose (multiple sibling names in a single clause), but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description must describe returns itself — and it does, listing id, chunk count, focused flag, and changed_since_seen. The inclusion of the id-mapping rules is essential context that a bare schema would hide, though session_id semantics and error behavior remain unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: `include_html` and `report_changed` are already well documented in the schema, while `session_id` and `authorization` are undocumented in both places. The description reinforces when to set include_html=true but adds no syntax or constraints for the required `session_id`, so it only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: returns the editable documents open in *this session*, focused first, with named fields. It also explicitly distinguishes itself from `list_documents` (Files) via the ID MAPPING section, so an agent can tell session-scoped from durable-document listing without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for use (render document tabs; enumerate/switch tabs token-light) and names the alternative form of the id accepted by `focus_session_document`, `close_session_document`, and `chat`. It does not explicitly state when *not* to use this versus `list_documents`, but the id mapping effectively routes the agent between them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sessionsAInspect

Returns sessions sorted by most recent activity, with message counts and last-updated timestamps. Each session represents one document with full edit history and AI conversation persisted server-side. Use to find a previous editing context to resume (then call get_session_history) or to audit your workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of sessions to return
user_idNoFilter by user ID (deprecated - auth determines scope)
authorizationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYesTotal number of sessions returned.
sessionsYesArray of session summaries, ordered by most recent activity.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses ordering, output contents, and that history/conversation is persisted server-side, but says nothing about auth/permission requirements or pagination beyond the limit default. The deprecation note about user_id vs auth scope lives only in the schema, not here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: output shape first, then the resource definition, then usage. Front-loaded and waste-free, though the middle sentence could be slightly trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description covers purpose, usage, and session semantics well. The remaining gap is auth/scope behavior and the undocumented authorization parameter, which is minor but not negligible for a listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, with 'authorization' carrying no description anywhere, yet the description adds no parameter-level meaning at all. It neither clarifies the deprecated user_id behavior nor explains limit/pagination semantics, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns sessions') plus the sort order and the fields returned (message counts, last-updated timestamps). It also defines what a session is ('one document with full edit history and AI conversation persisted server-side'), which cleanly separates it from list_documents and list_jobs without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit use cases ('find a previous editing context to resume', 'audit your workspace') and even names the follow-up call (get_session_history). It lacks an exclusion statement (e.g., when to use list_documents or list_session_documents instead), which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_user_templatesAInspect

Returns active (non-deleted) templates with name, format, size, and creation date metadata. Use to show the AI what reusable document structures are available for drafting new documents. Templates are scoped to the authenticated entity: users via the web app or sk_ key see only their own templates; organizations via lce_ key see theirs.

ParametersJSON Schema
NameRequiredDescriptionDefault
authorizationNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the filtering criterion (active, non-deleted), the return payload fields (name, format, size, creation date), and the critical auth scoping rule (users via web app or sk_ key see only their own; organizations via lce_ key see theirs). Gaps remain: pagination, ordering, size limits, and error behavior are not described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the return value, then usage guidance, then scoping detail. No wasted words, and each sentence adds relevant information, though it could be slightly tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 1 optional parameter, no output schema, and no annotations, the description is nearly complete: it covers return fields, scoping, and usage. The main omission is pagination/result-size behavior and the authorization parameter's expected form.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One optional parameter 'authorization' has 0% schema description coverage. The description partially compensates by explaining how the authenticated entity (web app/sk_ key vs lce_ key) scopes results—effectively the parameter's impact—but does not explain its expected format or how to supply it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Returns') and resource ('active (non-deleted) templates'), enumerates the returned metadata fields, and implicitly distinguishes from siblings like delete_user_template by describing a read/list operation. It also separates templates from documents, which are covered by list_documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use to show the AI what reusable document structures are available for drafting new documents,' giving clear context for when to call it. It does not name alternative tools or when-not-to-use conditions (e.g., use delete_user_template for removal).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_documentsAInspect

Load one or more SAVED documents into a session as editable tabs. The SAME durable document is attached (never copied), so edits flow back to the one shared row with cross-session soft-collaboration. The first listed document is focused. Returns the refreshed document roster so the client can render tabs immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
document_idsYesDurable document ids (from GET /v1/documents) to open into the session.
include_htmlNoInclude each document's full reassembled HTML body. Default false (token-light — recommended for AI agents enumerating or switching tabs): returns only ids, title, section count, focused flag, and page setup, omitting the body which can be hundreds of KB per document. The web app passes true to render document content.
authorizationNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and mostly does: it discloses that the same durable row is attached rather than copied, that edits propagate back to a shared row, that this creates cross-session soft-collaboration, and that the first listed document is the one focused. It omits auth/permission requirements and error behavior, which keeps it out of 5 territory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, followed by attachment semantics and the return contract, so the structure is easy to scan. It is slightly padded ('cross-session soft-collaboration') but every sentence still carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, the description does the heavy lifting: it explains the return value ('refreshed document roster so the client can render tabs immediately') and the token-light behavior of include_html. What remains missing is any mention of authorization requirements or prerequisites such as session initialization.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, and the description's 'The first listed document is focused' adds genuinely non-obvious ordering semantics for document_ids that the schema does not convey. However, session_id and the anyOf string/null 'authorization' parameter are undocumented in both places, so the description only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Load ... SAVED documents into a session as editable tabs') and pins down that only durable/saved documents are eligible, contrasting implicitly with the many upload_* and process_uploaded_document siblings. It does not explicitly name a sibling it differs from (e.g. get_document_detail or list_session_documents), so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Load one or more SAVED documents' framing implies the use case, and include_html's schema text touches on agent workflows ('enumerating or switching tabs'), but the description never states when to prefer this over list_documents, get_document_detail, or focus_session_document, nor any precondition like whether an init_session must come first. Usage must be inferred from context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

process_uploaded_documentAInspect

Fetches the file uploaded via request_upload_url and runs the same parsing pipeline as upload_document_base64: every paragraph, heading, table, row, and cell gets a unique chunk ID, enabling targeted structural edits via chat ("remove row 3 of the pricing table" works), with tables, borders, shading, alternating row colors, fonts, and inline styling preserved on edit and export. By default the response is compact (metadata only, no document body) to keep your context small — the document is loaded into the session and you edit it via chat; pass return_html=true if you need the parsed HTML inline. Uploading and parsing is NOT itself a billable operation — you are charged only when the AI edits the document. Specify parse_mode='document' to load as the active editable document, or parse_mode='attachment' to load as a read-only AI-searchable reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesSame filename passed to request_upload_url.
upload_idYesThe upload_id returned by request_upload_url.
parse_modeNo'document' = parse and load as the active editable doc; 'attachment' = process asynchronously as AI-searchable reference (returns job_id to poll).document
session_idYesSession ID to load this document/attachment into. Must match the chat/async session-id format — letters, digits, '_', '-', '.' only (no ':'); max 256 chars.
return_htmlNoWhen false (default), the response is compact — metadata only (chunks_count, version_id, page_setup), no document body — to keep your context small; the document is loaded into the session and you edit it via chat. Set true only if you actually need the parsed HTML returned inline.
authorizationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
htmlNo
job_idNo
statusYes
filenameYes
warningsNo
page_setupNo
parse_modeYes
session_idYes
version_idNo
chunks_countNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the non-billable upload/parse model (charged only on AI edits), the compact-by-default response to protect context, that the document is loaded into the session and edited via chat, and that attachment mode processes asynchronously returning a job_id to poll. These are non-obvious, high-value behavioral facts an agent could not infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Content is dense and front-loaded, leading with the verb and pipeline rather than burying it, and every sentence carries information. However, it is delivered as one long run-on paragraph with several em-dash asides, which hurts scannability for a definition this content-rich.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be explained, and the description covers the workflow prerequisite (request_upload_url), both parse modes, the async job_id path, the default response shape, and the billing model. For a 6-parameter parsing/ingestion tool with no annotations, nothing essential to calling it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, so the schema already documents filename, upload_id, session_id, parse_mode, and return_html in detail, and the description largely restates the parse_mode and return_html semantics rather than adding new syntax or constraints. The added framing (edit-via-chat, context-size tradeoff) is useful but not parameter-level detail, so the baseline 3 holds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('fetches the file uploaded via request_upload_url and runs the same parsing pipeline as upload_document_base64') and immediately positions itself relative to two named siblings, making the distinction from upload_document_base64 explicit. The scope of what gets parsed (paragraphs, headings, tables, rows, cells) further sharpens what the tool actually produces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly conditions usage on the preceding request_upload_url call and explains the parse_mode='document' vs 'attachment' choice and the return_html default. It does not explicitly state when to prefer this over upload_document_base64/upload_attachment_base64, leaving the routing between upload paths to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redo_revertAInspect

Revert is non-destructive: this restores the session FORWARD to the pre-revert state (returned by the revert as redo_checkpoint_id), restores the document to that state while still merging any concurrent edits from other sessions (keeping both where they conflict), and un-archives exactly the chat turns the revert hid. Intended for use immediately after a revert; once a new message is sent the timeline diverges and the web app stops offering it.

ParametersJSON Schema
NameRequiredDescriptionDefault
window_idNoOptional identifier for the client window issuing the request, used to coordinate concurrent reverts from multiple browser tabs.
session_idYes
turn_indexYesThe turn the revert rewound to (rows at/after this were archived); redo un-archives exactly those.
authorizationNo
redo_checkpoint_idYesThe identifier of the pre-revert state, returned by the revert response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dry_runNoEchoes the request's dry_run: when true nothing was committed/archived — this is a preview only.
session_idYesSession identifier.
compose_textYesThe text of the user message that was reverted. Clients should pre-fill the compose box with this so the user can edit and resend.
editor_actionNoClient instruction: 'update' to load the restored document, or 'clear' to reset the editor to empty.
document_stateNoRestored document state. Null when the session is reset to empty.
revert_changesNoPer-document (slug -> change-set) revert diff. Applying these merges the revert onto any concurrent live edits — a conflicting section is surfaced for you to resolve rather than replacing the whole document. On dry_run this is the preview; on a real revert it is what was committed.
revert_conflictsNoPer-document (slug -> entries) sections whose restore did NOT fully land. TWO classes, told apart by the 'displaced' flag. (1) NOT LANDED ('displaced' absent/false): content another writer committed was preserved instead (reason 'concurrent_edit_preserved' / 'lineage_unknown'), or a removal could not be resolved against the live document; the matching revert_changes entry is annotated 'conflict': true and carries the preserved bytes as new_html (the honest committed state) plus the un-landed restore as restore_html. (2) LANDED IN THE WRONG PLACE ('displaced': true): the content WAS restored but not at its original position — reason 'restored_elsewhere' (it was added at the end of the document because the section it anchors to is gone) or 'position_not_restored' (a concurrent writer's placement won). These carry an empty their_html (nothing of another writer's was preserved, so there is nothing to adopt) plus the raw 'resolution' token, and the matching revert_changes entry is annotated 'displaced': true — never 'conflict', because new_html is still the restored content. (3) NOT SAVED AT ALL ('write_failed': true, operation 'write', chunk_id null): the document's recovery write did not commit — reason 'document_deleted' (archived mid-revert), 'storage_paused' (durable saving paused for this account) or 'write_failed'. Document-level, so there is no matching revert_changes entry; storage still holds the pre-revert content while document_state shows the reverted document, so a client MUST re-read the document before saving again. Null/absent when the revert landed cleanly everywhere.
reverted_to_turnYesTurn index that the active conversation now ends at (the AI reply preceding the reverted user message). -1 when the session is reset to its initial empty state (revert from the very first user message).
redo_checkpoint_idNoThe identifier of the pre-revert state. Revert is non-destructive — passing this back to POST /sessions/{id}/redo (with the same turn_index) restores it and un-archives the rolled-back turns, undoing the revert. Null on a dry-run, and null when the pre-revert state could not be captured — in that case redo_unavailable_reason says which, so absence by design and absence by failure are never the same value.
archived_turn_countYesNumber of chat rows soft-archived by this revert (turns hidden from the UI but retained for audit).
redo_unavailable_reasonNoPresent ONLY when redo_checkpoint_id is null because the pre-revert state could not be captured (never on a dry-run, where null is by design). The revert itself succeeded and is durable; what is unavailable is the one-step undo of it. Treat a non-null value as: do not attempt redo_revert for this revert — it has no argument to pass.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden and does well: it declares the operation non-destructive, explains conflict merging ('keeping both where they conflict'), and specifies exactly what is un-archived. It omits any authorization/permission requirements, which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key trait ('Revert is non-destructive') is front-loaded and the sentences are dense and purposeful. The trailing intended-use sentence is valuable but the overall block is slightly overloaded for a single tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description covers the state-change semantics, the temporal usage window, and the checkpoint provenance. For a revert tool with annotations absent, this is complete enough to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60%, so the schema already documents turn_index and redo_checkpoint_id. The description reinforces that redo_checkpoint_id comes from the revert response and that turn_index marks the rewind point, but adds little syntax or format meaning, and says nothing about window_id or authorization.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (revert forward / redo a revert) and precisely describes the resulting state change (restores session, document, un-archives chat turns). It does not name the sibling revert_session_to_message, so an agent must infer the pairing, keeping this below 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('intended for use immediately after a revert') and when-not ('once a new message is sent the timeline diverges and the web app stops offering it'). The temporal constraint that selects this tool over any alternative is fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_documentAInspect

Rename one of your saved documents and/or update its out-of-flow parts. Parts are the document's out-of-flow content — headers/footers, footnote and endnote bodies, comments, and per-section page geometry. Every fragment is sanitized on write, writes are versioned and safe under concurrent editors, and parts revert with the document. A title-only call behaves exactly as the original rename (response status:"renamed"). Part content lives in the document body and is edited exactly like any other document content (via chat or the document write endpoints); a legacy parts payload returns 400 parts_moved_to_chunks pointing you there.

ParametersJSON Schema
NameRequiredDescriptionDefault
partsNoDocument-parts patch — the document's OUT-OF-FLOW content, keyed by any of: sections, headers, footers, footnotes, endnotes, comments. Each key you send REPLACES that whole part family; a null value clears it; keys you omit are untouched. Every HTML fragment is sanitized server-side. Headers/footers are keyed by section index with default/first/even variants; dynamic page fields use <span data-field="PAGE|NUMPAGES|DATE">cached text</span>.
titleNoNew document title.
base_partsNoOptional concurrency guard: the parts subtree your edit was based on (as last read). If another writer changed one of the same part families since, your write still lands (newest-write-wins) and the overwritten families are reported in `parts_conflicts`. Send it whenever you can — it makes the report PRECISE. Omit it and the write is treated as unvouched: every family whose existing content your payload replaces or clears is reported in `parts_conflicts`, since without a base the server cannot tell an intended update from an accidental overwrite. Each family you send REPLACES that family whole, so sibling entries you omit (e.g. the `first`-page header variant) are deleted.
document_idYes
authorizationNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so richly: server-side sanitization of every fragment, versioned writes that are safe under concurrent editors, parts reverting with the document, newest-write-wins semantics, and the `parts_conflicts` reporting behavior. It even documents the specific error code for the legacy payload, which is exactly the behavioral context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and operation in the first sentence, then layered behavior. It is dense and slightly repetitive with the schema on parts semantics, but every sentence carries real information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation tool with no annotations, no output schema, and 60% param coverage, the description covers error paths, concurrency, sanitization, revert behavior, and conflict reporting well. The remaining gap is the undocumented identity/authorization parameters and the shape of a successful parts response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60%, and the description adds mostly conceptual routing rather than parameter-level meaning. The two fully documented params (`parts`, `base_parts`) already carry the important semantics in the schema, while `document_id` and `authorization` are left undocumented in both places. Baseline 3 is appropriate given the schema does most of the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Rename one of your saved documents') and extends it to out-of-flow parts, and it names an alternative path (chat / document write endpoints) for editing part content. It is clear what the tool does, though it does not directly name a sibling tool by name for the rename-vs-update distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says a title-only call is equivalent to the old rename, routes part-content editing elsewhere, and warns that a legacy `parts` payload returns 400 `parts_moved_to_chunks`. That is clear when-to-use and when-not guidance, though it stops short of naming the successor write endpoint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_download_urlAInspect

Returns a short-lived (15-minute) GET URL plus a ready-to-run curl_example. An agent with shell access can run the curl_example directly to save the exported file to the working directory, so the bytes never pass through its context window; clients without shell execution (or callers who only want the link) can use the signed URL directly. Generates the document in the requested format and returns a time-limited signed download URL. Specify format as 'pdf', 'docx', 'html', 'markdown', or 'txt' (legacy 'doc' also accepted).

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoExport format (docx, pdf, html, markdown, txt).docx
optionsNoCustomization (paper, margins, filename, watermark, etc.). Mirrors ExportRequest.options.
filenameNoOptional Content-Disposition filename for the download (without extension). Auto-detected from the document's first heading if not provided.
session_idYesSession ID whose current document should be exported and packaged for download.
authorizationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
formatYes
filenameYes
expires_atYes
curl_exampleYes
download_urlYes
expires_in_secondsYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the 15-minute URL lifetime, that the URL is signed and time-limited, that the bytes can bypass the context window via curl_example, and the accepted formats. It omits auth/permission requirements despite an authorization parameter, and says nothing about error cases or regenerating an expired link.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the return value and the curl_example, and the format list comes last where it belongs. One sentence is partly redundant - 'Generates the document in the requested format and returns a time-limited signed download URL' restates the opening claim, costing a little length without adding information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be re-explained, and the description covers the critical operational facts (link lifetime, curl path, format set). It stops short of documenting the nested options object, the authorization parameter, or what happens on expiry, which leaves a small gap for a 5-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is already ~80%, so baseline is 3. The description adds genuine value beyond the schema by calling out the legacy 'doc' format (the schema's own format description omits it) and by naming the ready-to-run curl_example that the schema does not document. It does not touch options, filename, or authorization.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: generates the document in the requested format and returns a short-lived signed GET URL, plus a curl_example. This clearly distinguishes it from request_upload_url (the inverse direction) and export_document, and the colour on the 15-minute lifetime makes the resource concrete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the two consumption modes explicitly: shell-capable agents should run the curl_example to save bytes to the working directory, while clients without shell execution use the signed URL directly. That is clear context for how to use it, but it never states when to choose this tool over the sibling export_document.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_limit_increaseAInspect

Request a higher scale limit for your account in ONE call.

WHEN TO USE: after any 413 with error_code DOCUMENT_TOO_COMPLEX (a single document crossed the standard per-document page limit) or SESSION_TOO_FULL (the documents open in one chat crossed the standard per-chat limit). These are stability limits, not hard caps: the platform supports larger deployments, and limits are raised per account on request.

WHAT HAPPENS: the Typebar team is notified immediately with your account identity and the numbers you send; limits are typically expanded within a day and you are contacted at your account email. No email writing needed — though hello@superdocs.app also works if you prefer.

ALTERNATIVES while you wait: split the file into smaller documents, upload it as an attachment (reference/search, not editing), start another session for additional documents (init_session), or close documents you no longer need (close_session_document).

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoWhat you hit: 'document_scale' = a single document crossed the per-document page limit (413 DOCUMENT_TOO_COMPLEX); 'session_scale' = the documents open in one chat crossed the per-chat limit (413 SESSION_TOO_FULL); 'other' = anything else (explain in note).document_scale
noteNoAnything else that helps us size your limits (workload, cadence, deadline).
filenameNoThe file that hit the limit, if any.
authorizationNo
attempted_pagesNoApproximate page count you were trying to work with (from the 413 message).
attempted_sectionsNoExact section count from the 413 detail (section_count / document_section_count), if you have it.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that the Typebar team is notified with account identity and submitted numbers, that turnaround is typically within a day, and that the account email is contacted. It stops short of explaining the authorization parameter or whether repeated requests are rate-limited, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core promise ('in ONE call'), then uses labeled WHEN TO USE / WHAT HAPPENS / ALTERNATIVES sections. Every sentence carries actionable content with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a request tool with no output schema and no annotations, the description supplies trigger conditions, effect and timeline, contact channel, and waiting-period alternatives. An agent has everything needed to decide and call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, so the schema does most of the work; the description only loosely alludes to 'the numbers you send' without adding format or meaning. It does not compensate for the undocumented 'authorization' parameter, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (request a higher scale limit for your account) and emphasizes 'ONE call', immediately distinguishing it from any retry/upload sibling. The trigger (413 with DOCUMENT_TOO_COMPLEX or SESSION_TOO_FULL) makes the intent unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit WHEN TO USE gated on two specific error codes, plus a named set of ALTERNATIVES with sibling tools (init_session, close_session_document, upload as attachment). Leaves nothing about timing or fallback to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_upload_urlAInspect

Returns a short-lived (5-minute) PUT URL plus a ready-to-run curl_example. An agent with shell access can run the curl_example directly to push the file to cloud storage, so the bytes never pass through its context window; clients without shell execution can surface the command or URL for the caller to run. After upload completes, call process_uploaded_document with the upload_id to trigger parsing. For files <100KB where token cost is trivial, upload_document_base64 still works inline. Max file size: 100 MB. Supported formats: .pdf, .docx, .txt, .rtf, .md, .html, .htm, .tex (plus .zip LaTeX project archives).

ParametersJSON Schema
NameRequiredDescriptionDefault
purposeNoWhat this file will be used for. 'document' = the active editable doc; 'attachment' = read-only AI-searchable reference; 'export-html' = HTML payload destined for /v1/documents/export (large-export upload flow, for documents above ~25 MB).document
filenameYesOriginal filename including extension (e.g. 'contract.docx'). Used downstream for file-type detection.
size_bytesYesFile size in bytes. Must be > 0 and <= 104857600 (100 MB).
content_typeYesMIME type the agent will PUT with (e.g. 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' for .docx).
authorizationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
upload_idYes
expires_atYes
upload_urlYes
curl_exampleYes
max_size_bytesYes
expires_in_secondsYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the 5-minute URL expiry, the 100 MB cap, supported formats, and the side benefit that bytes never enter the agent's context. It omits auth/credential requirements for the PUT and what happens if the URL expires mid-upload, which are real gaps for a write-flow tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the return value and the primary workflow, and each sentence adds routing or constraint information rather than restating the name. It is dense and long-ish for a single paragraph, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return structure needn't be explained; the description instead covers the full multi-step flow (request URL, PUT, then `process_uploaded_document` with `upload_id`), limits, and format support. An agent has everything needed to execute the flow correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is ~80%, so the schema already documents `purpose`, `filename`, `size_bytes` and `content_type`. The description adds the supported-extension list, which helps validate `filename`/`content_type`, but says nothing about the optional `authorization` parameter or enum semantics beyond what the schema states. Baseline 3 is right.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: returns a short-lived (5-minute) PUT URL plus a ready-to-run `curl_example`. It is immediately distinguishable from `request_download_url` (direction) and the `upload_*_base64` siblings (inline bytes vs. direct PUT).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: shell-access agents run the `curl_example`, non-shell clients surface the URL/command, files under 100KB should use `upload_document_base64`, and the follow-up call to `process_uploaded_document` is named. When-to-use and named alternatives are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revert_session_to_messageAInspect

Rewinds a chat session to the state immediately before a specific user message. The document, conversation history, and supporting context all snap back to that point. The text of the reverted message is returned (compose_text) so the caller can edit and resend it. Messages from the reverted turn forward are soft-archived: hidden from active reads but retained for audit. The original conversation is preserved server-side; the restored conversation becomes the active timeline. Rejects with 409 if the session has a chat job in progress or awaiting approval — wait for the job to settle before reverting. Returns 422 (code 'turn_has_no_restore_point') when the turn recorded no restore point — typically because the message before it did not finish normally; the response carries revertable_turns, a possibly-empty list of turns that can be rewound to.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoWhen true, compute the per-document revert diff WITHOUT committing or archiving anything — used to render a preview before the user confirms.
window_idNoOptional identifier for the client window issuing the revert, used to coordinate concurrent reverts from multiple browser tabs.
session_idYes
turn_indexYesTurn index of the user message to revert. The text of that message is returned in compose_text so the caller can re-edit and resend it. Every chat row at this turn or later is soft-archived (hidden from active reads but retained for audit).
authorizationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dry_runNoEchoes the request's dry_run: when true nothing was committed/archived — this is a preview only.
session_idYesSession identifier.
compose_textYesThe text of the user message that was reverted. Clients should pre-fill the compose box with this so the user can edit and resend.
editor_actionNoClient instruction: 'update' to load the restored document, or 'clear' to reset the editor to empty.
document_stateNoRestored document state. Null when the session is reset to empty.
revert_changesNoPer-document (slug -> change-set) revert diff. Applying these merges the revert onto any concurrent live edits — a conflicting section is surfaced for you to resolve rather than replacing the whole document. On dry_run this is the preview; on a real revert it is what was committed.
revert_conflictsNoPer-document (slug -> entries) sections whose restore did NOT fully land. TWO classes, told apart by the 'displaced' flag. (1) NOT LANDED ('displaced' absent/false): content another writer committed was preserved instead (reason 'concurrent_edit_preserved' / 'lineage_unknown'), or a removal could not be resolved against the live document; the matching revert_changes entry is annotated 'conflict': true and carries the preserved bytes as new_html (the honest committed state) plus the un-landed restore as restore_html. (2) LANDED IN THE WRONG PLACE ('displaced': true): the content WAS restored but not at its original position — reason 'restored_elsewhere' (it was added at the end of the document because the section it anchors to is gone) or 'position_not_restored' (a concurrent writer's placement won). These carry an empty their_html (nothing of another writer's was preserved, so there is nothing to adopt) plus the raw 'resolution' token, and the matching revert_changes entry is annotated 'displaced': true — never 'conflict', because new_html is still the restored content. (3) NOT SAVED AT ALL ('write_failed': true, operation 'write', chunk_id null): the document's recovery write did not commit — reason 'document_deleted' (archived mid-revert), 'storage_paused' (durable saving paused for this account) or 'write_failed'. Document-level, so there is no matching revert_changes entry; storage still holds the pre-revert content while document_state shows the reverted document, so a client MUST re-read the document before saving again. Null/absent when the revert landed cleanly everywhere.
reverted_to_turnYesTurn index that the active conversation now ends at (the AI reply preceding the reverted user message). -1 when the session is reset to its initial empty state (revert from the very first user message).
redo_checkpoint_idNoThe identifier of the pre-revert state. Revert is non-destructive — passing this back to POST /sessions/{id}/redo (with the same turn_index) restores it and un-archives the rolled-back turns, undoing the revert. Null on a dry-run, and null when the pre-revert state could not be captured — in that case redo_unavailable_reason says which, so absence by design and absence by failure are never the same value.
archived_turn_countYesNumber of chat rows soft-archived by this revert (turns hidden from the UI but retained for audit).
redo_unavailable_reasonNoPresent ONLY when redo_checkpoint_id is null because the pre-revert state could not be captured (never on a dry-run, where null is by design). The revert itself succeeded and is durable; what is unavailable is the one-step undo of it. Treat a non-null value as: do not attempt redo_revert for this revert — it has no argument to pass.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full behavioral burden and does so richly: it discloses soft-archive semantics (hidden from active reads, retained for audit), that the original conversation is preserved server-side, which timeline becomes active, and two specific failure modes (409 in-progress job, 422 'turn_has_no_restore_point' with a revertable_turns payload).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and its effects, then failure handling; every sentence carries information. It is dense but slightly over-long, and the error-code detail could be compressed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description still covers mutation side effects, timeline state, and both error paths with remediation hints. For a destructive rewind tool with no annotations, nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 60%, so the description must compensate; it explains turn_index's downstream effect (message text returned in compose_text, all rows at that turn or later archived) and surfaces the revertable_turns field returned on error. However, session_id and authorization are left entirely undocumented, so the gap is not fully closed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource+scope: 'Rewinds a chat session to the state immediately before a specific user message,' and enumerates exactly what snaps back (document, history, context). An agent can distinguish this rewind operation from siblings like redo_revert without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear triggering context ('rewind to the point before a user message') and precondition states (wait for a chat job to settle before reverting; job-in-progress yields 409). It does not explicitly name the inverse sibling redo_revert or say when to undo a revert, so alternative-routing guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unarchive_documentAInspect

Restore (un-archive) a saved document by its id — the mirror of archive_document. The document re-enters your Files view and can be opened/edited again (open it into a chat with open_documents). document_id is the same id used by list_documents / archive_document. Idempotent: restoring an already-active (or unknown) document is a no-op. Non-billable.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYes
authorizationNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden and does well: it discloses the state transition (document re-enters Files view, becomes editable), idempotency semantics (already-active or unknown ids are a no-op), and cost ('Non-billable'). It stops short of noting permission/authorization requirements, which matters given the undocumented `authorization` parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then building outward to effect, id linkage, idempotency, and billing. Every clause adds decision-relevant information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no annotations and no output schema, the description covers state effects, idempotency, cross-tool id consistency, and billing. The remaining gap is the unexplained `authorization` parameter and any indication of what is returned after restore.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain `document_id` meaningfully by anchoring it to the same id used by list_documents/archive_document, but it says nothing about the `authorization` parameter or the id's expected format. Half the parameters remain undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Restore (un-archive) a saved document by its id') and explicitly positions itself against a named sibling ('the mirror of archive_document'). An agent can distinguish this from archive_document, delete_document-style tools, and open_documents without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Establishes the context for use (re-entering a document into the Files view) and routes the agent to related tools: archive_document as the inverse, list_documents/archive_document as the id source, and open_documents for the follow-up action. It lacks an explicit 'when-not' clause, but the idempotency note effectively tells the agent not to pre-check state.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_attachment_base64AInspect

Files are processed asynchronously and become AI-searchable once ready. The AI can then reference the attachment's content during chat (e.g., "rewrite section 3 to match the style guide PDF I attached"). Images are queryable via multimodal vision. Poll get_attachment_status to know when ready. Distinct from upload_document_base64: attachments are read-only context for the AI to reference, not the editable working document. Supported formats: .pdf, .docx, .txt, .rtf, .md, .html, .htm, .tex (plus .zip LaTeX project archives). Max 50 MB validated; note the hosted transport layer caps any REQUEST BODY at ~32 MB and rejects larger ones at the gateway with an HTML (not JSON) error — base64 inflates content ~33%, so inline uploads are reliable up to ~20 MB of file bytes; beyond that use request_upload_url (pre-signed flow, up to 100 MB). Requires session_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesOriginal filename with extension (e.g. 'contract.pdf'). Used for file type detection.
session_idNoSession ID. Auto-generated if not provided.
file_base64YesBase64-encoded file content.
return_htmlNoWith a session_id: false (default) returns compact metadata only (chunks_count, version_id, page_setup) — the document is loaded into the session and you edit it via chat, keeping your context small; true returns the full parsed HTML inline. Ignored on the convert-only path (no session_id), which always returns the converted html.
authorizationNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the full burden and does so richly: asynchronous processing, AI-searchable once ready, multimodal vision for images, a gateway-level 32 MB request-body cap that fails with an HTML (not JSON) error, and base64 ~33% inflation. This is exactly the behavioral context a caller needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads async behavior and the sibling distinction before formats and transport limits, and every sentence carries information. It is dense and long, but the length is justified by the number of real constraints it must convey.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-param, no-output-schema upload tool, it covers async semantics, polling, size/transport limits, and the return_html tradeoff is handled by the schema. Only minor gaps remain, such as the session_id ambiguity and lack of explicit error-handling guidance beyond the gateway cap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the baseline is 3; the description adds the 50 MB validation limit, the base64 encoding context, and the filename-driven type detection. Slight tension: it states 'Requires session_id' while the schema says session_id is auto-generated if not provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (upload attachment) and explicitly differentiates from the sibling upload_document_base64, explaining attachments are read-only AI context rather than the editable working document. An agent can pick it correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditions: poll get_attachment_status for readiness, and use request_upload_url beyond ~20 MB of file bytes. It names the alternative and its trigger. Lacks an explicit 'when not to use attachments at all', so a 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_document_base64AInspect

Parses the file into structured HTML where every paragraph, heading, table, row, and cell has a unique chunk ID, enabling the AI to make targeted structural edits via chat ("remove row 3 of the pricing table" works). Tables, borders, shading, alternating row colors, fonts, and inline styling are preserved on edit and export. Also works for AI-generated content: if you've drafted an outline or partial document in your context, upload it here as the working doc, then use chat to fill in the rest. This is also the reliable way to REPLACE a session's document with exact content you already hold — the upload is a verbatim load, so it can never come back paraphrased or placeholder-shaped the way asking chat to re-type it can. When you pass a session_id the response is compact by default (metadata only — pass return_html=true for the full parsed HTML); the document is loaded into the session and you edit it via chat. For files >100KB, prefer request_upload_url (pre-signed URL flow) to avoid token bloat from base64 through the agent context. Supported formats: .pdf, .docx, .txt, .rtf, .md, .html, .htm, .tex (plus .zip LaTeX project archives). Max 50 MB validated; note the hosted transport layer caps any REQUEST BODY at ~32 MB and rejects larger ones at the gateway with an HTML (not JSON) error — base64 inflates content ~33%, so inline uploads are reliable up to ~20 MB of file bytes; beyond that use request_upload_url (pre-signed flow, up to 100 MB).

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesOriginal filename with extension (e.g. 'contract.pdf'). Used for file type detection.
session_idNoSession ID. Auto-generated if not provided.
file_base64YesBase64-encoded file content.
return_htmlNoWith a session_id: false (default) returns compact metadata only (chunks_count, version_id, page_setup) — the document is loaded into the session and you edit it via chat, keeping your context small; true returns the full parsed HTML inline. Ignored on the convert-only path (no session_id), which always returns the converted html.
authorizationNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so richly: it discloses compact-by-default responses when session_id is passed, the verbatim (never paraphrased) load semantics, the 50 MB validation cap, the ~32 MB transport body cap with a non-JSON HTML error at the gateway, and the ~33% base64 inflation. It also explains the convert-only path behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first sentence, and each later clause adds distinct value (editing, seeding, verbatim replace, size limits). It is dense and slightly repetitive on size thresholds, but no sentence is pure filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter tool lacking an output schema and annotations, the description supplies everything needed: response shape (compact metadata vs full HTML), session behavior, supported formats, and layered size limits with the correct fallback. Nothing required to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so baseline is 3, but the description meaningfully adds to it: it explains that return_html is only meaningful with session_id and ignored otherwise, and that session_id loads the doc for chat-based editing. It does not add much on filename/base64/authorization, hence not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource (parses an uploaded file into structured HTML with unique chunk IDs) and immediately contrasts with alternatives like request_upload_url and the chat-editing workflow. An agent can distinguish this from sibling upload tools (upload_attachment_base64, upload_image_base64, upload_template_base64) without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing rules are given: use request_upload_url for files >100KB or beyond ~20 MB inline, use chat to make targeted edits once loaded, use this tool to verbatim-replace a session document, and use it to seed AI-drafted content. Conditions and alternatives are named, not left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_image_base64AInspect

Upload an image (base64-encoded) and get a stable URL to reference in a document via .

Accepts PNG/JPEG/WebP/GIF/SVG, up to 10 MB decoded. Send raw base64 or a data: URL in image_base64. This is the agent-friendly counterpart to the browser multipart upload — use it to save a generated or fetched image so a document can embed it.

Embed the returned url (the stable canonical reference — it never expires and every document read serves it as a fresh time-limited signed link). view_url is such a signed link for immediately viewing/downloading the image outside a document; it expires, so never embed it.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNoOptional original filename (used only to infer content type).
content_typeNoOptional MIME type, e.g. image/png. Defaults to image/png.
image_base64YesThe image bytes, base64-encoded (raw base64 or a data: URL).
authorizationNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses accepted formats (PNG/JPEG/WebP/GIF/SVG), a 10 MB decoded size limit, and the crucial lifetime distinction between the permanent `url` and the expiring `view_url`. It omits auth/permission requirements (the schema exposes an `authorization` field that is never explained) and any rate-limit or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight paragraphs, front-loaded with the core action and return value, then input constraints, then the embed-vs-view warning. The parenthetical asides add length but each carries a real constraint; nothing is pure filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates well by explaining both returned fields (`url` vs `view_url`) and which one to embed. It is nearly complete for an upload tool; the only real gap is the unexplained `authorization` parameter and any error/failure semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so the baseline is 3. The description reinforces `image_base64` (raw base64 or data: URL) and adds genuine constraints the schema lacks (10 MB decoded, accepted formats), but it says nothing about `authorization`, `filename`, or `content_type` beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('upload an image (base64-encoded)') plus the outcome ('get a stable URL to reference in a document'). It also distinguishes itself from the browser multipart upload path, so an agent can place it against siblings like upload_attachment_base64 without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the use case ('save a generated or fetched image so a document can embed it') and names the browser multipart upload as the alternative it replaces. It does not, however, explain when to prefer it over the sibling upload_attachment_base64 or upload_document_base64 tools, which are the closest neighbors in the list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_template_base64AInspect

Templates persist across sessions and can be referenced by the AI when drafting new documents (e.g., "draft an NDA using my standard template"). Stored at user or organization scope. Ideal for boilerplate, branded letterheads, recurring document structures, or compliance-required templates. Supports the same formats as document upload: .docx, .pdf, .txt, .rtf, .md, .html, .htm, .tex. Max 50 MB validated; note the hosted transport layer caps any REQUEST BODY at ~32 MB and rejects larger ones at the gateway with an HTML (not JSON) error — base64 inflates content ~33%, so inline uploads are reliable up to ~20 MB of file bytes; beyond that use request_upload_url (pre-signed flow, up to 100 MB).

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYesOriginal filename with extension (e.g. 'contract.pdf'). Used for file type detection.
session_idNoSession ID. Auto-generated if not provided.
file_base64YesBase64-encoded file content.
return_htmlNoWith a session_id: false (default) returns compact metadata only (chunks_count, version_id, page_setup) — the document is loaded into the session and you edit it via chat, keeping your context small; true returns the full parsed HTML inline. Ignored on the convert-only path (no session_id), which always returns the converted html.
authorizationNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and delivers unusually rich operational detail: 50 MB validated cap, ~32 MB gateway body limit, ~33% base64 inflation, ~20 MB practical inline ceiling, and the failure mode (HTML, not JSON, error from the gateway). It does not cover permission/auth requirements or collision/overwrite behavior for existing templates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the template concept and use cases, then formats, then the size/transport caveat; every sentence carries weight. The single dense paragraph with multiple em-dash clauses is heavier to parse than it needs to be, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-annotation, no-output-schema, 5-param mutation tool, the description covers formats, persistence, size limits, error shape, and the large-file alternative. Gaps remain around how user-vs-organization scope is chosen (no scope parameter exists) and what authorization is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the baseline is 3, but the description adds real meaning for file_base64 (effective inline size ceiling and inflation math) and for filename (supported extensions drive type detection). The undocumented authorization parameter and the unclear mechanism for selecting user vs organization scope are not compensated for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explains the resource (templates persisted across sessions, user/org scoped) and its intended AI use case, and differentiates from document upload by noting shared formats and from request_upload_url as the escalation path. The verb itself is only implied via the tool name; the text never literally says 'uploads a template,' so it stops short of a full 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names concrete use cases ('boilerplate, branded letterheads, recurring document structures, compliance-required templates') and an explicit alternative with a threshold: use request_upload_url for pre-signed flow beyond ~20 MB of file bytes. Scope (user vs organization) is also stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 38 tool updates
    • First observedapprove_change
    • First observedarchive_document
    • First observedcancel_job
    • First observedchat
    • First observedchat_async
    • First observedclear_cross_session_memory
    • First observedclose_session_document
    • First observedcontinue_chat
    • First observeddelete_attachment
    • First observeddelete_user_template
    • First observedexport_document
    • First observedfocus_session_document
    • First observedget_account_status
    • First observedget_attachment_status
    • First observedget_document_detail
    • First observedget_job
    • First observedget_session_history
    • First observedget_session_jobs
    • First observedhealth
    • First observedinit_session
    • First observedlist_documents
    • First observedlist_jobs
    • First observedlist_session_documents
    • First observedlist_sessions
    • First observedlist_user_templates
    • First observedopen_documents
    • First observedprocess_uploaded_document
    • First observedredo_revert
    • First observedrename_document
    • First observedrequest_download_url
    • First observedrequest_limit_increase
    • First observedrequest_upload_url
    • First observedrevert_session_to_message
    • First observedunarchive_document
    • First observedupload_attachment_base64
    • First observedupload_document_base64
    • First observedupload_image_base64
    • First observedupload_template_base64

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Structure-preserving Word DOCX editing MCP server with a .NET Open XML backend and Office.js live sessions. Enables safe, auditable, incremental editing of Microsoft Word documents for AI agents.
    63
    7 npm
    10
    AGPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to intelligently analyze and fill any Word document tables using precise coordinate-based filling and 42 MCP tools.
    93 PyPI
    71
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.