Extend MCP
Server Details
Turn documents into structured data with Extend: parse (OCR to markdown), extract fields, classify, split multi-document bundles, and fill PDF forms.
- Status
- Healthy
- Uptime
- 98.8% over 21 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 86 tools
Every tool targets a distinct resource and operation, with clear group-prefix naming (e.g., classify, extract, split, workflow) that eliminates ambiguity. Even the many get_*_run tools are distinct by their group name and are clearly described. No two tools appear to do the same thing.
All tool names follow a strict verb_noun pattern (e.g., create_classifier, list_extract_runs, cancel_split_run), with consistent snake_case. The few exceptions (get_me, get_documentation, search_documentation) are clearly distinguished as utility tools and do not break the overall pattern.
With 86 tools, the surface is far beyond the 3-15 range considered well-scoped. Even for a comprehensive document processing platform, this is an extreme number that will overwhelm agents, and the many per-resource repetitions (get_*_run, list_*_runs, batch getters) inflate the count significantly.
The API covers full lifecycle operations for every resource type: create, get/list, update, delete for classifiers, extractors, splitters, workflows; run, cancel, poll for all run types; batch submission and status; evaluation sets and items; webhooks; and file management. There are very few dead ends, and the documentation tools fill any knowledge gaps.
Available Tools
86 toolsadd_evaluation_itemsAdd evaluation items (bulk)AInspect
Bulk-add ground-truth examples (1-100 per call) to an evaluation set (evaluations group). Each item pairs an already-uploaded file with the output the resource SHOULD produce for it.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | 1-100 ground-truth items. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| evaluationSetId | Yes | Evaluation set ID (ev_...). |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-read-only, non-idempotent, and non-destructive; the description adds useful context by stating the batch size limit and the prerequisite that files must already be uploaded. However, it does not clarify behavior on duplicate items, whether existing items are appended or replaced, or what side effects may occur. This leaves some behavioral ambiguity for a mutating operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant filler. The key information—bulk add, quantity range, target resource, item composition—is front-loaded and every sentence contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich parameter schema, the prerequisite about already-uploaded files, and the presence of an output schema, the description is largely complete for an agent deciding whether and how to invoke the tool. A small gap remains around duplicate handling and append-vs-replace semantics, but this does not block correct invocation in the common bulk-add use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters in detail. The description adds no parameter-specific meaning beyond what the schema provides, which is acceptable but not additional value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (bulk-add ground-truth examples), a clear resource (evaluation set), and a defined scope (1-100 items per call). It also clarifies what each item consists of: an already-uploaded file paired with expected output. This clearly distinguishes it from related tools like update_evaluation_item or create_evaluation_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: when adding multiple ground-truth examples in bulk to an evaluation set, with an explicit batch limit. It does not name alternatives or exclusions, but the bulk-addition framing and prerequisite that files must already be uploaded provide sufficient guidance for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_classify_runCancel a classify runADestructiveIdempotentInspect
Cancel a queued or in-flight classify run (classify group). Best-effort: a run already finishing may still complete.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The run ID from classify_document. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation destructive, non-read-only, and idempotent. The description adds meaningful behavioral context beyond that: it is best-effort and may not stop a run that is already finishing, which is useful for setting agent expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The main action and scope are front-loaded, and the best-effort caveat is appended compactly without repeating schema or annotation information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-required-parameter cancel operation with an output schema and clear annotations, the description is largely complete. The only omission is an explicit statement of what happens if the run is already completed or not found, but the best-effort caveat and output schema mitigate this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter, runId, environment, and workspaceId, already has a rich description including granted-target constraints. The tool description itself adds no parameter-specific semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb (cancel) and resource (classify run), and adds the key scope 'queued or in-flight' and '(classify group)'. It is unambiguous from the sibling cancel_* tools, though it does not explicitly name a sibling alternative as a differentiator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear condition for use: cancel a queued or in-flight classify run, and warns that a run already finishing may still complete. It does not explicitly state when to prefer delete_classify_run or get_classify_run, but 'cancel' versus 'delete' and the queued/in-flight scope imply the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_extract_runCancel an extract runADestructiveIdempotentInspect
Cancel a queued or in-flight extract run (extract group). Best-effort: a run already finishing may still complete.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The run ID from extract_data. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint and idempotentHint. The description adds valuable behavioral nuance beyond annotations with 'Best-effort: a run already finishing may still complete', which tells the agent that cancellation is not guaranteed. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted words. The core action is front-loaded, and the critical best-effort caveat is included immediately. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter tool with 100% schema coverage, a full output schema, and annotations covering destructive/idempotent behavior, the description is complete. It states the target state, the caveat, and the resource type. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already documented in detail, including environment pinning and get_me workspace grants. The description itself adds no additional parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Cancel a queued or in-flight extract run', and adds clarifying scope with '(extract group)'. It clearly distinguishes this tool from sibling cancel_* tools by naming the resource type and target run state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear usage context: cancel only queued or in-flight runs, and expect best-effort behavior. It does not explicitly name alternatives like delete_extract_run or other cancel_* siblings, but the resource-specific wording makes the correct use case clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_split_runCancel a split runADestructiveIdempotentInspect
Cancel a queued or in-flight split run (split group). Best-effort: a run already finishing may still complete.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The run ID from split_document. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a meaningful behavioral caveat beyond the annotations: cancellation is best-effort and a run already finishing may still complete. The annotations already cover destructive and idempotent behavior, so this is appropriately supplemental rather than duplicative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the core action, the scope, and the key caveat with zero redundant phrasing. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple cancellation tool with full schema coverage, an output schema, and annotations covering destructiveness and idempotency, the description provides the remaining essential context: what states are cancellable and the best-effort nature of cancellation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters already have descriptions in the schema (100% coverage), including the environment pinning detail and runId provenance. The tool description adds no additional parameter-level meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Cancel'), a specific resource ('split run'), and narrows the scope to 'queued or in-flight' runs. It clearly distinguishes this from sibling cancel_* tools by focusing on the split-run resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description communicates clear context: use this to cancel a split run that is either queued or currently in flight. It does not explicitly name alternatives like delete_split_run or cancel_classify_run, but the scope is clear enough for an agent to infer correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_workflow_runCancel a workflow runADestructiveIdempotentInspect
Cancel a queued or in-flight workflow run (workflows group). Best-effort: a run already finishing may still complete.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The run ID from run_workflow. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description adds a valuable, non-obvious behavioral caveat: 'Best-effort: a run already finishing may still complete.' This goes beyond what the annotations convey and does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The action and scope are front-loaded, and the best-effort caveat is a compact second sentence. Every word contributes to the agent's understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a focused cancellation action, the description, full parameter documentation, and annotations together cover cancellation semantics, applicable run states, and best-effort behavior. It does not discuss delete_workflow_run as an alternative, but the output schema and annotations make the definition sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with runId, environment, and workspaceId each already documented, including enum values and references to get_me and run_workflow. The tool description itself adds no parameter-specific meaning, but the schema carries the full burden, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Cancel a queued or in-flight workflow run.' The parenthetical '(workflows group)' helps distinguish this from sibling cancel_classify_run, cancel_extract_run, and cancel_split_run, so the agent can select the right tool without inspecting other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use the tool: for queued or in-flight workflow runs. It does not explicitly name alternatives like delete_workflow_run or the other cancel_* tools, so exclusions are implied rather than spelled out, but the state-based context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classify_documentClassify a documentAInspect
Categorize a document into one of a set of types, e.g. MSA vs SOW vs NDA (classify group), using a saved classifier or an inline list of classifications. Provide exactly one of classifier or config. Inline config.classifications must include one entry with type: "other" as the fallback and unique ids per entry. Returns the winning type with a confidence score. Async: a status: "running" result with a runId is not an error — resume with get_classify_run passing that runId, the same workspaceId and environment, and wait: true, repeating until the status is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/classification/response-format.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Document to classify. Exactly one of id/url/text — e.g. { "url": "https://..." } or { "id": "file_..." }, never a bare string. | |
| config | No | Inline classify config: { classifications: [{ id, type, description }], classificationRules?, advancedOptions?, parseConfig? }. Must include a type: "other" entry as the fallback; ids must be unique. Before authoring a config by hand, call get_documentation with https://docs.extend.ai/classification/configuration.md and follow it. | |
| detail | No | "concise" (default): status, output, failure fields, dashboardUrl. "full": adds config, confidence/citations, usage, timestamps. | |
| metadata | No | Arbitrary key-value metadata stored on the run. | |
| priority | No | Queue priority (1-100). | |
| classifier | No | Saved classifier to run. Provide exactly one of classifier or config. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | No | |
| runId | Yes | |
| output | No | Winning classification (PROCESSED only). |
| status | Yes | Terminal status, or "running" (resume via the get tool). |
| runType | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false) by disclosing the async contract: a status 'running' result with a runId is not an error, the caller must poll with get_classify_run, and re-submission is forbidden. It also documents error-recovery behavior for UNAUTHORIZED/NOT_FOUND, which the schema and annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose and modes, config constraint, async polling behavior, error recovery, and output documentation link. It front-loads the core purpose before the async protocol, and avoids filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 9-parameter, async mutation tool with nested inputs and an existing output schema, the description covers the essential invocation details: one-of classifier/config, config fallback requirements, async resumption, re-submission prohibition, auth failure handling, and where to find the output shape. Combined with 100% schema coverage, output schema, and annotations, nothing critical is left for an agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents the classifier/config exclusivity, the required 'other' fallback entry, unique ids, and environment constraints. The description restates these rules but adds little new parameter meaning beyond what the schema provides; the async and error-handling notes concern process behavior, not parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-and-resource statement: 'Categorize a document into one of a set of types, e.g. MSA vs SOW vs NDA.' This clearly distinguishes the tool from siblings like extract_data, parse_document, and split_document, and names the two modes of operation (saved classifier or inline config).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: 'Provide exactly one of classifier or config,' explains the async workflow with get_classify_run, warns never to re-submit the document, and specifies what to do on UNAUTHORIZED/NOT_FOUND. It does not explicitly name alternatives such as run_classify_batch for batch usage, so it stops short of full when-to-use versus when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_classifierCreate a classifierAInspect
Create a saved, reusable classifier (classify group). Start from config (inline classifications list — call get_documentation with https://docs.extend.ai/classification/configuration.md before hand-authoring one) or cloneClassifierId (copy another classifier's draft config) — mutually exclusive; name alone creates an empty draft. There is no generate mode (extractors only). The draft is the only mutable surface — edit it with update_classifier, freeze it with publish_classifier_version, run it with classify_document.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the classifier. | |
| config | No | Inline classify config: { classifications: [{ id, type, description }], classificationRules?, advancedOptions?, parseConfig? }. Must include a type: "other" entry as the fallback; ids must be unique. Before authoring a config by hand, call get_documentation with https://docs.extend.ai/classification/configuration.md and follow it. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| cloneClassifierId | No | Existing classifier (cl_...) whose draft config to copy. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| createdAt | No | |
| updatedAt | No | |
| draftVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with annotations present, the description adds meaningful behavioral detail: the created object is a draft, the draft is the only mutable surface, and it must be published before use. It also clarifies that cloneClassifierId copies another classifier's draft config, and that name alone creates an empty draft. This goes well beyond the raw annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences cover purpose, initialization modes, the absence of generate mode, and the subsequent lifecycle, all without wasted words. The most important information is front-loaded and each clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity with five parameters, nested config, and multiple initialization modes, the description is remarkably complete. It explains how to start, what not to attempt, and what to do next with the draft. The presence of an output schema also means return-value explanation is unnecessary here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter. The description adds relational and workflow semantics not present in the schema: config and cloneClassifierId are mutually exclusive, name alone yields an empty draft, and clone copies a draft config. This is a meaningful supplement even though the schema already carries the basic parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a saved, reusable classifier (classify group).' It clearly distinguishes this from sibling tools like create_extractor and create_splitter, and further differentiates by stating 'There is no generate mode (extractors only).' The purpose is immediately unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit setup paths: start from config, clone an existing classifier via cloneClassifierId, or use name alone for an empty draft, and notes that config and cloneClassifierId are mutually exclusive. It also explains the lifecycle by naming the correct sibling tools for editing, publishing, and running, and explicitly warns against expecting a generate mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_evaluation_setCreate an evaluation setAInspect
Create an evaluation set — a named collection of ground-truth examples scoped to ONE extractor, classifier, or splitter via entityId (evaluations group). The iteration loop: create a set → add items with add_evaluation_items → publish a new version of the resource → run_evaluation against that version → read accuracy metrics with get_evaluation_run. New to evaluations? Call get_documentation with https://docs.extend.ai/evaluation/overview.md first (set authoring in detail: https://docs.extend.ai/evaluation/creating-evaluation-sets.md).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the evaluation set. | |
| entityId | Yes | The extractor (ex_...), classifier (cl_...), or splitter (spl_...) this set evaluates. | |
| description | No | What this set covers. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| entity | Yes | |
| createdAt | No | |
| updatedAt | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, so the agent already knows this is a non-read, non-destructive mutation without idempotency. The description adds context about the 'evaluations group' and the resource scoping via entityId, but does not explicitly state side effects beyond creation (e.g., whether creation is isolated until items are added, or whether the set is immediately usable). Since annotations carry the core safety profile, the additional context is useful but limited — a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient: the core definition and scope constraint are front-loaded in the first sentence, followed by the workflow loop and a conditional documentation pointer. The three sentences each earn their place. It loses one point only because the workflow enumeration is a touch long relative to the simple create action, though the detail is genuinely valuable for correct sequencing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with a full 100%-coverage schema, an output schema, and annotations covering the safety profile, the description supplies what is missing: the scoping rule, the sequencing, and the newcomer pointer to docs. An agent has everything needed to call the tool correctly and understand its place in the evaluation workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters. The description goes further by clarifying entityId as the scoping mechanism tying the set to a single extractor/classifier/splitter, and by framing workspaceId/environment as granted-target constraints (implying get_me validation). It names the resource types the entityId accepts, adding practical meaning beyond the raw schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create an evaluation set'), immediately defines its scope constraint (scoped to ONE extractor, classifier, or splitter via entityId), and places it in the evaluations group. It distinguishes the tool from siblings like create_extractor/create_classifier and from list_evaluation_sets, so an agent can tell what this tool does and what it does not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly walks through the end-to-end iteration loop (create set → add items with add_evaluation_items → publish a version → run_evaluation → read metrics with get_evaluation_run), naming the relevant sibling tools. It also gives a conditional usage guide for newcomers: call get_documentation first for the overview and set-authoring details, including specific URLs. This tells the agent when to use the tool and what precedes/follows it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_extractorCreate an extractorAInspect
Create a saved, reusable extractor (extract group). Three starting points, mutually exclusive: config (inline schema — call get_documentation with https://docs.extend.ai/extraction/schema.md BEFORE writing one by hand), cloneExtractorId (copy another extractor's draft config), or generate (Extend writes the schema from 1-5 sample documents plus optional instructions; no docs needed); name alone creates an empty draft. The draft is the only mutable surface — edit it with update_extractor, freeze it with publish_extractor_version, run it with extract_data.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the extractor. | |
| config | No | Inline extraction config: { schema?, extractionRules?, baseProcessor?, advancedOptions?, parseConfig? }. Writing schema by hand? ALWAYS call get_documentation with https://docs.extend.ai/extraction/schema.md FIRST and follow the returned dialect — the rules below are only a summary (field-naming best practices: https://docs.extend.ai/extraction/best-practices/field-names-and-prompt-crafting.md). schema is a JSON Schema: root "type": "object"; primitives nullable via a type array (["string","null"]); objects/arrays keep a plain "type" (never a nullable array) and objects always need "properties"; max depth 5; enums include null; no anyOf/oneOf/allOf/patterns. Date/currency/signature fields add "extend:type" alongside a normal type. A currency field is exactly: { "type": "object", "extend:type": "currency", "properties": { "amount": { "type": ["number", "null"] }, "iso_4217_currency_code": { "type": ["string", "null"] } } } — never a bare number. Omit schema for schema-less mode (no docs needed): extractionRules then doubles as schema-generation instructions. | |
| generate | No | Auto-generate the schema from sample documents. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| cloneExtractorId | No | Existing extractor (ex_...) whose draft config to copy. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| createdAt | No | |
| updatedAt | No | |
| draftVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, etc.), the description discloses that the result is a draft, that the draft is the only mutable surface, and that it must be edited, published, and then run. It also warns about the schema dialect and the need to consult documentation, adding significant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences that efficiently cover purpose, starting points, and lifecycle, with zero fluff. It front-loads the core purpose and packs all critical guidance into a compact, readable structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (6 params, nested objects, output schema exists), the description covers all necessary guidance: starting points, mutual exclusivity, alternative tools, and the draft lifecycle. The output schema handles return values, so nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema by explaining that config, cloneExtractorId, and generate are mutually exclusive, and provides strategic guidance on choosing among them. It also clarifies the name-only case and references get_documentation for schema rules, which the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a saved, reusable extractor and distinguishes it from siblings like create_classifier and create_splitter by specifying 'extractor (extract group)'. The verb 'Create' plus the resource is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly lists three mutually exclusive starting points (config, cloneExtractorId, generate) and explains when to use each, including the recommendation to call get_documentation for hand-written schemas. It also describes the name-only case and the subsequent lifecycle steps (update_extractor, publish_extractor_version, extract_data), giving full context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_splitterCreate a splitterAInspect
Create a saved, reusable splitter (split group). Start from config (inline split classifications — call get_documentation with https://docs.extend.ai/splitting/configuration.md before hand-authoring one) or cloneSplitterId (copy another splitter's draft config) — mutually exclusive; name alone creates an empty draft. The draft is the only mutable surface — edit it with update_splitter, freeze it with publish_splitter_version, run it with split_document.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the splitter. | |
| config | No | Inline split config: { splitClassifications: [{ id, type, description, identifierKey? }], splitRules?, advancedOptions?, parseConfig? }. Must include a type: "other" entry; ids must be unique. identifierKey names a per-segment value the splitter reads off each segment (e.g. an invoice number), surfaced as identifier on each returned split. Before authoring a config by hand, call get_documentation with https://docs.extend.ai/splitting/configuration.md and follow it. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| cloneSplitterId | No | Existing splitter (spl_...) whose draft config to copy. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| createdAt | No | |
| updatedAt | No | |
| draftVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutation (readOnlyHint=false) and non-idempotency, and the description adds meaningful behavioral context: the result is a saved, reusable draft; the draft is the only mutable surface; and the creation modes have mutually exclusive semantics. This goes beyond what annotations alone convey, though it does not describe response details—which is acceptable given an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences carry all essential information with no filler. The core purpose is front-loaded, and each sentence adds a distinct layer: what is created, how to start, and what happens next in the lifecycle.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with nested objects and an output schema, the description covers the creation workflow, parameter relationships, documentation prerequisite, and downstream lifecycle. Combined with the fully described schema, nothing needed to invoke it correctly seems missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds relationship semantics not present in the schema: config and cloneSplitterId are mutually exclusive and name alone creates an empty draft. It also restates the critical config constraint (must include a type: "other" entry) in prose, reinforcing the schema without fully duplicating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a saved, reusable splitter (split group)', which clearly distinguishes it from sibling creation tools like create_classifier or create_extractor. The lifecycle references to update_splitter, publish_splitter_version, and split_document further anchor its unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains the two starting modes (config vs cloneSplitterId) and that they are mutually exclusive, plus the fallback of name-only creating an empty draft. It also directs the agent to call get_documentation before hand-authoring config and names the exact downstream tools for editing, publishing, and running the splitter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_webhook_endpointCreate a webhook endpointAInspect
Register an HTTPS URL to receive Extend events (webhooks group). CRITICAL: the response's signingSecret is shown ONLY on this call — store it immediately; it cannot be retrieved later. Receivers verify HMAC-SHA256 of "v0:{timestamp}:{body}" against it (reject timestamps older than 5 minutes). enabledEvents here are workspace-global and NOT every event type is valid globally: resource-run events such as workflow_run.completed are rejected here and must instead be scoped to a specific resource via create_webhook_subscription (create the endpoint with enabledEvents [], then subscribe it to the workflow/extractor/etc.). Setting up webhooks by hand? Call get_documentation with https://docs.extend.ai/webhooks/configuration.md first.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTPS URL events are POSTed to. | |
| name | Yes | Display name for the endpoint. | |
| status | No | Defaults to enabled. | |
| apiVersion | No | Payload API version for deliveries. Defaults to 2026-02-09 (this server's pinned version). | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| enabledEvents | Yes | Workspace-global event types only — full list: https://docs.extend.ai/webhooks/events.md. Resource-run events like "workflow_run.completed" are NOT valid here; pass [] and scope them with create_webhook_subscription. | |
| advancedOptions | No | Optional { headers?: { [name]: value }, payload?: { format: "json"|"url", urlThresholdBytes? } } — "url" delivers a presigned URL instead of inlining large payloads. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| name | No | |
| status | Yes | |
| createdAt | No | |
| apiVersion | No | |
| enabledEvents | Yes | |
| signingSecret | Yes | Shown ONCE, on creation only — store it immediately. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only signal that this is a mutating, non-idempotent call; the description adds substantial behavioral detail beyond that. It reveals that signingSecret is shown only once and cannot be retrieved later, explains receiver verification via HMAC-SHA256 with timestamp rejection, and clarifies global vs. resource-scoped event validity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: the one-time secret warning, verification mechanics, the global-vs-scoped event caveat, and the documentation pointer. The core action is front-loaded, and the critical constraints are prominently marked.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with an output schema and nested options, this description is complete: it covers the one-time secret, verification requirements, valid event scoping, the sibling subscription path, and a documentation fallback. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has a detailed description including the enabledEvents restriction, environment grant requirement, and advancedOptions shape. The description reinforces the enabledEvents constraint but does not define new parameter semantics beyond what the schema already provides, so the high-coverage baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Register an HTTPS URL to receive Extend events (webhooks group).' It also distinguishes itself from create_webhook_subscription by explaining that resource-run events belong on the subscription tool, so an agent can tell them apart 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-not-to-use guidance: resource-run events such as workflow_run.completed are rejected here and must be scoped via create_webhook_subscription. It even prescribes the correct sequence (create endpoint with enabledEvents [] then subscribe) and suggests calling get_documentation first for manual setup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_webhook_subscriptionCreate a webhook subscriptionAInspect
Subscribe an existing webhook endpoint to events from ONE specific extractor, classifier, splitter, or workflow (webhooks group) — deliveries for other resources are unaffected. Use this instead of global enabledEvents when only some resources matter. Configuration rules: call get_documentation with https://docs.extend.ai/webhooks/configuration.md first (event catalog: https://docs.extend.ai/webhooks/events.md).
| Name | Required | Description | Default |
|---|---|---|---|
| resourceId | Yes | The specific resource to watch (ex_/cl_/spl_/workflow_...). | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| resourceType | Yes | What kind of resource resourceId names. | |
| enabledEvents | Yes | Event types valid for the resourceType, e.g. ["extract_run.processed", "extract_run.failed"] or ["workflow_run.completed"]. | |
| webhookEndpointId | Yes | Endpoint (wh_...) that receives the deliveries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| createdAt | No | |
| resourceId | Yes | |
| resourceType | Yes | |
| enabledEvents | Yes | |
| webhookEndpointId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, and idempotent=false. The description adds useful behavior beyond that: deliveries for other resources are unaffected, and the endpoint must already exist. This helps the agent understand the operation's scoped side effects without repeating annotation fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with high information density. The core purpose and scoping constraint are front-loaded, the alternative is named, and the documentation requirement is appended without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 6 required parameters, but 100% schema coverage and an output schema cover structured details. The description supplies the missing contextual layer: when to use it, what scope it affects, and where to get configuration rules and event catalogs. Nothing critical is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning by clarifying that only one resource per subscription is allowed, defining the resource family (extractor/classifier/splitter/workflow), and linking to the event catalog that informs valid enabledEvents values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific action ('Subscribe an existing webhook endpoint') and precisely scopes the resource to 'ONE specific extractor, classifier, splitter, or workflow'. It clearly distinguishes this from creating an endpoint and from the sibling create_webhook_endpoint tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this instead of global enabledEvents when only some resources matter', giving a clear when-to-use condition and a named alternative. It also provides a prerequisite action by instructing the agent to call get_documentation with the configuration URL first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_workflowCreate a workflowAInspect
Create a workflow — a multi-step document pipeline (workflows group): parse → extract/classify/split → validations → human review. name alone creates an empty draft; steps builds the graph up front (call get_documentation with https://docs.extend.ai/workflows/configuring-workflows.md before hand-authoring a step graph). The draft is the only mutable surface — edit with update_workflow, freeze with deploy_workflow_version, run with run_workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the workflow (1-255 chars). | |
| steps | No | Step graph (max 100 steps), TRIGGER → PARSE first. Every step needs { type, name }; "name" is REQUIRED and is what other steps route to. Route via next, an ARRAY of objects: linear steps (TRIGGER/PARSE/EXTRACT) use next: [{ step: "<target name>" }]; CLASSIFY/SPLIT branch with next: [{ step, classificationId }] (classificationId = a classification id from the config, not its type). TRIGGER routes to exactly one PARSE. Types: TRIGGER, PARSE, EXTRACT, CLASSIFY, SPLIT, MERGE_EXTRACT, CONDITIONAL, CONDITIONAL_EXTRACT, EXTERNAL_DATA_VALIDATION, WEBHOOK_RESPONSE, RULE_VALIDATION, VALIDATION, ROUTER, HUMAN_REVIEW, COLLECT, FILE_CONVERSION. EXTRACT/CLASSIFY/SPLIT need a config with exactly one of a saved ref or inline config (EXTRACT: config.extractor {id,version} or config.extractorConfig with REQUIRED schema; CLASSIFY: config.classifier {id,version} or config.classifierConfig); next is only allowed once config is set. Classifier/splitter refs can't be "latest" — use semver or "draft". The rules here are a summary — before authoring a step graph by hand, call get_documentation with https://docs.extend.ai/workflows/configuring-workflows.md and follow it. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| createdAt | No | |
| updatedAt | No | |
| draftVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the description does not need to repeat those. It adds useful behavioral context by stating that the created object is a draft and that the draft is the only mutable surface, which indirectly clarifies side effects. It could go further on failure/validation behavior when steps are invalid, but the schema and docs link mitigate that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences cover purpose, usage modes, documentation pointer, and lifecycle routing without redundancy. The core action is front-loaded, and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex, but the description plus the highly detailed input schema plus the presence of an output schema leave no significant gap. It provides the high-level model, the key parameter split, the documentation link for step-graph authoring, and the lifecycle sibling tools. An agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value by explaining the semantic distinction between name (creates an empty draft) and steps (builds the graph up front). It also ties the steps parameter to a documentation URL for correct authoring. Environment and workspaceId are already well described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Create a workflow' and defines it as a multi-step document pipeline, which clearly distinguishes it from sibling create_* tools that create classifiers, extractors, splitters, etc. It also sketches the pipeline stages (parse → extract/classify/split → validations → human review), giving an agent an accurate mental model of the resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly maps different usage patterns: name alone creates an empty draft while steps builds the graph up front, and it directs the agent to get_documentation before hand-authoring. It also names the lifecycle alternatives — update_workflow for editing, deploy_workflow_version for freezing, run_workflow for running — so the agent knows exactly when create_workflow is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_classify_runDelete a classify runADestructiveIdempotentInspect
Permanently delete a classify run and its stored outputs (classify group). Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The run ID from classify_document. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false, but the description adds meaningful context by naming what gets destroyed (stored outputs/classify group) and emphasizing irreversibility. This goes beyond the structured hints without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence delivers the action, scope, and consequence with no filler. The most important information ('Permanently delete') is front-loaded, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 100% schema parameter coverage, output schema presence, and annotations covering safety/destructiveness, the description is complete. It adds the critical deletion scope and irreversibility warning without omitting anything needed to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are fully documented in the schema. The description does not add per-parameter meaning beyond the already-rich schema descriptions, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Permanently delete') and resource ('a classify run') plus the exact scope ('and its stored outputs (classify group)'). This clearly distinguishes it from related deletion tools like delete_extract_run or delete_parse_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Cannot be undone' implies the tool should be used only when permanent deletion is intended, but the description never explicitly contrasts it with alternatives such as cancel_classify_run. The when-to-use vs alternatives is left to inference rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_edit_runDelete an edit runADestructiveIdempotentInspect
Permanently delete an edit run and its stored outputs (edit group). Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The run ID from edit_pdf. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true, readOnlyHint=false, and idempotentHint=true. The description adds valuable context by naming exactly what gets destroyed ('stored outputs (edit group)') and emphasizing irreversibility ('Cannot be undone'), which goes beyond the annotation labels. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the essential message with zero filler. The action, target, and key consequence (irreversibility) are front-loaded, making the description easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, 100% schema coverage with per-parameter guidance, and an existing output schema, the description completes the picture: it fully explains what the tool does, what is destroyed, and the irreversible nature. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter has a clear description (runId from edit_pdf, environment pinned by API key, workspaceId from get_me). The tool description adds no additional parameter-level meaning beyond echoing the 'edit group' concept already implicit in the schema's runId reference. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('delete'), a precise resource ('edit run'), and its scope ('and its stored outputs (edit group)'). This clearly distinguishes it from sibling delete_*_run tools (e.g., delete_extract_run, delete_workflow_run) by naming the edit-run type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the tool's use case: permanently removing an edit run and its outputs. It does not explicitly name alternatives or exclusion conditions, but the phrasing 'permanently delete' and 'cannot be undone' signals the destructive decision point. Among the many delete_*_run siblings, the resource type is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_evaluation_itemDelete an evaluation itemADestructiveIdempotentInspect
Permanently remove one ground-truth item from an evaluation set (evaluations group). Past run metrics are unaffected. This cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Item ID (evi_...) to delete. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| evaluationSetId | Yes | Evaluation set ID (ev_...). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, and the description adds valuable behavioral context: the deletion is permanent, cannot be undone, and does not affect past run metrics. This goes beyond the annotation flags without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler: the first states the action and resource, the second states permanence and non-impact on past runs. Important caveats are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a delete operation with a full input schema, output schema, and annotations covering destructive intent, the description covers the essential behavioral facts. Nothing an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for all four parameters including ID formats and environment constraints. The tool description itself adds no parameter-specific guidance, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (permanently remove), a precise resource (one ground-truth item from an evaluation set), and the scope of the effect. This clearly distinguishes it from sibling tools like update_evaluation_item or add_evaluation_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The operation is unambiguous: use this when a specific evaluation item must be permanently removed. It doesn't explicitly name alternatives, but the resource and action are specific enough that an agent can determine when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_extract_runDelete an extract runADestructiveIdempotentInspect
Permanently delete an extract run and its stored outputs (extract group). Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The run ID from extract_data. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral detail beyond the annotations: it specifies that the deletion is permanent ('Cannot be undone') and that stored outputs are also deleted. This is useful context even though destructiveHint=true already signals destructive intent. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action and irreversibility. It contains no filler and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a full output schema, detailed annotations, and complete parameter descriptions, the description covers the essential behavioral aspects: the permanent deletion of the run and its outputs. No critical information is missing for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter (runId, environment, workspaceId) already has a thorough description in the schema. The tool description adds no additional parameter-specific semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('delete') and resource ('extract run'), and adds the scope of deletion ('stored outputs (extract group)'), which clearly distinguishes it from sibling delete_* tools like delete_classify_run or delete_parse_run. It is unambiguous and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, such as cancel_extract_run or other delete_* tools. The usage is implied by the resource name and the destructive nature, but no conditions or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_fileDelete a fileADestructiveIdempotentInspect
Permanently delete an uploaded file from Extend (files group). Runs that already processed the file keep their outputs, but the file's bytes and parsed contents are gone. This cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | file_... ID to delete. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses irreversibility, that run outputs persist, and that bytes and parsed contents are gone—detail beyond the destructiveHint annotation. This gives an agent a precise model of side effects without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with the core purpose and consequential side effects front-loaded. No filler; every clause contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, schema, output schema, and annotations together cover what the tool does, when to use it, and its irreversible side effects. Nothing an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description is not required to add parameter-level detail. It adds no extra semantics beyond the schema, which meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (permanently delete) and the resource (uploaded file from Extend files group). It distinguishes from sibling delete tools by explicitly targeting a file rather than runs, webhooks, or other resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context that processed runs keep their outputs while the file's bytes and parsed contents are removed, helping an agent understand consequences. It does not explicitly name alternatives, but the file scope and deletion semantics make the appropriate use case unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_parse_runDelete a parse runADestructiveIdempotentInspect
Permanently delete a parse run and its stored outputs (parse group). Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The run ID from parse_document. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description adds value by specifying exactly what is destroyed (the parse run and its stored outputs) and emphasizing irreversibility with 'Cannot be undone.' This goes beyond the structured annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes: 'permanently delete' conveys irreversibility, 'parse run' identifies the target, and 'stored outputs (parse group)' explains the scope of deletion.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the fully documented schema, the destructive and idempotent annotations, and the presence of an output schema, the description covers all essential behavioral and operational aspects. No critical information needed to call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (runId, environment, workspaceId) are already documented in the input schema. The description adds no additional parameter meaning, matching the baseline of 3 for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('delete') and resource ('parse run'), and clarifies that it also removes the stored outputs (parse group). This clearly distinguishes it from sibling delete_* tools such as delete_classify_run or delete_extract_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this tool to permanently delete a parse run and its outputs. It does not explicitly mention alternatives or exclusion criteria, but the resource type is unambiguous enough to guide selection among the many sibling delete tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_split_runDelete a split runADestructiveIdempotentInspect
Permanently delete a split run and its stored outputs (split group). Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The run ID from split_document. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the destructiveHint annotation: it specifies that stored outputs (the split group) are also deleted and that the operation is irreversible. This gives the agent the key consequence of invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tightly packed sentence covers the operation, deletion scope, and irreversibility with zero filler. The most important qualifier ('Permanently delete') is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A delete tool with a simple parameter set, full schema descriptions, and destructive/idempotent annotations is adequately covered. The description explains what is destroyed and that it cannot be undone, so no essential calling context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented in the input schema. The tool description adds nothing parameter-specific, which is acceptable but not additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('delete'), the resource ('split run'), and the scope of deletion ('and its stored outputs (split group)'). This clearly distinguishes it from other delete_*_run siblings and from cancel_split_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Permanently delete' and 'Cannot be undone' imply this is the final-destruction option rather than a cancellation tool. However, it never explicitly names cancel_split_run as the alternative for non-permanent cancellation, leaving the routing partially implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_webhook_endpointDelete a webhook endpointADestructiveIdempotentInspect
Permanently delete a webhook endpoint (webhooks group). This ALSO deletes every subscription attached to it, and deliveries stop immediately. This cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook endpoint ID (wh_...) to delete. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description adds critical behavioral context: deletion cascades to all attached subscriptions, deliveries stop immediately, and the operation is irreversible. This meaningfully informs an agent about side effects and risk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core action and then packs the consequential side effects and permanence into a tight, readable format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-resource operation, the description captures what is deleted, what else is impacted, immediacy, and irreversibility. Combined with complete schema documentation, an output schema, and strong annotations, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents all three required parameters, including allowed values and usage notes, at 100% coverage. The description adds no additional parameter-level meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Permanently delete'), a specific resource ('webhook endpoint'), and clarifies the scope ('webhooks group'). It also distinguishes this from deleting a mere subscription by noting that every attached subscription is removed as well.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear when this tool is appropriate: when a webhook endpoint must be permanently deleted. However, it does not explicitly name or contrast the sibling tool delete_webhook_subscription for cases where only a subscription should be removed, so the choice versus alternatives is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_webhook_subscriptionDelete a webhook subscriptionADestructiveIdempotentInspect
Permanently delete a webhook subscription (webhooks group). The endpoint and its global events are unaffected. This cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Subscription ID (whes_...) to delete. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and idempotentHint=true, but the description adds critical behavioral context: 'Permanently delete' and 'This cannot be undone' reinforce irreversibility, and the note that endpoint/global events are unaffected clarifies side effects. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. The core action is front-loaded, and the irreversibility warning is placed immediately after. Every word adds value, and the structure is scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has an output schema, full parameter documentation, and annotations covering destructiveness and idempotency, the description is complete for an agent to call it correctly. The irreversibility and scope notes fill the key gap that structured fields do not capture. It could mention return format or confirmation behavior, but the output schema likely covers that, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (id, environment, workspaceId) are fully documented in the input schema. The description adds no additional parameter-level detail or usage nuance, so it meets the baseline for high schema coverage but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'Permanently delete a webhook subscription.' It immediately specifies the scope ('webhooks group') and clarifies what is NOT affected (endpoint and global events), which differentiates it from sibling tools like delete_webhook_endpoint. This makes the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly name an alternative or give a 'when to use' directive, but it does explain that the endpoint and its global events are unaffected, implying that this tool is specifically for subscriptions rather than endpoints. This gives contextual guidance that helps an agent pick the right tool, though it stops short of an explicit 'use this instead of X when...' statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_workflow_runDelete a workflow runADestructiveIdempotentInspect
Permanently delete a workflow run and its stored outputs (workflows group). Cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The run ID from run_workflow. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false; the description adds value by specifying what gets destroyed ('stored outputs') and that the action 'Cannot be undone,' which is richer than the bare destructive flag. It is consistent with idempotentHint=true and openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the scope ('workflow run and stored outputs') is front-loaded and the irreversibility warning comes second, before any parameter detail is needed. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-param delete tool the combination is complete: the schema documents all parameters, annotations carry the safety profile, an output schema exists, and the description covers scope and irreversibility. The only notable omission is a pointer to cancel_workflow_run for in-flight runs, which is a usage-guidance nicety rather than a correctness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — all three required parameters (runId, environment, workspaceId) carry their own descriptions, so the baseline is 3. The description adds no parameter-level detail, but it does not need to since the schema is fully documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('permanently delete') and a precise resource ('a workflow run and its stored outputs'), and the qualifier '(workflows group)' positions it inside the workflow family. This lets an agent distinguish it from the many sibling delete_* run tools (delete_extract_run, delete_classify_run, delete_parse_run, delete_split_run) without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when/when-not statement, but the '(workflows group)' qualifier plus the run resource make the intended context clear among the run-deletion siblings. There is no exclusion note such as 'use cancel_workflow_run to stop an in-flight run instead,' so it stops 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.
deploy_workflow_versionDeploy a workflow versionAInspect
Deploy the workflow's current draft as a new immutable version (workflows group). Unlike extractor/classifier/splitter publishing there is NO releaseType — workflow versions are integer deploy numbers ("1", "2", ...) with an optional display name referenced at run time. Pass steps to deploy that graph instead of the draft. Deployed versions never change — keep iterating on the draft.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Workflow ID (workflow_...). | |
| name | No | Display name for this deployed version (max 255 chars). | |
| steps | No | Deploy these steps instead of the current draft. Step graph (max 100 steps), TRIGGER → PARSE first. Every step needs { type, name }; "name" is REQUIRED and is what other steps route to. Route via next, an ARRAY of objects: linear steps (TRIGGER/PARSE/EXTRACT) use next: [{ step: "<target name>" }]; CLASSIFY/SPLIT branch with next: [{ step, classificationId }] (classificationId = a classification id from the config, not its type). TRIGGER routes to exactly one PARSE. Types: TRIGGER, PARSE, EXTRACT, CLASSIFY, SPLIT, MERGE_EXTRACT, CONDITIONAL, CONDITIONAL_EXTRACT, EXTERNAL_DATA_VALIDATION, WEBHOOK_RESPONSE, RULE_VALIDATION, VALIDATION, ROUTER, HUMAN_REVIEW, COLLECT, FILE_CONVERSION. EXTRACT/CLASSIFY/SPLIT need a config with exactly one of a saved ref or inline config (EXTRACT: config.extractor {id,version} or config.extractorConfig with REQUIRED schema; CLASSIFY: config.classifier {id,version} or config.classifierConfig); next is only allowed once config is set. Classifier/splitter refs can't be "latest" — use semver or "draft". The rules here are a summary — before authoring a step graph by hand, call get_documentation with https://docs.extend.ai/workflows/configuring-workflows.md and follow it. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| steps | No | |
| version | Yes | |
| createdAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a mutating operation but not destructive, and the description adds meaningful behavioral context: deployed versions are immutable, integer deploy numbers, and iteration continues on the draft. This goes beyond the annotations by clarifying the versioning model and permanence of deployments.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose before moving to distinctions and usage nuance. Every sentence earns its place, including the caution that deployed versions never change and iteration should continue on the draft.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema carries the heavy detail for the step graph and environment constraints, while the description fills in the workflow-specific versioning model and immutability. With annotations and an output schema present, the description is largely sufficient, though it could briefly mention relevant permissions or side effects given this is a mutating operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters extensively. The description adds useful param-level nuance, such as names being referenced at runtime and the optional 'steps' override that deploys a graph instead of the draft. This supplements the schema rather than merely repeating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific operation: deploy the workflow's current draft as a new immutable version in the workflows group. It clearly distinguishes itself from extractor/classifier/splitter publishing by noting the absence of releaseType and the integer deploy numbering. An agent can immediately understand what this tool uniquely does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool, contrasting it with publishing in other tool groups and explaining workflow-specific behavior. It does not give an explicit 'use this instead of X when Y' conditional, but the distinction from sibling publish tools is strong and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_form_fieldsDetect PDF form fields / generate an edit schemaAInspect
Detect the fillable fields in a PDF form and return an edit schema (edit group): each property is a detected field with its type (text/checkbox/radio/dropdown/signature/table), page index, and bounding box. Use it to see what a form asks for, or as the scaffold for a structured fill — set extend_edit:value on each field and pass the populated schema to edit_pdf. Pass inputSchema to re-run detection against an existing schema (mapping mode) — for the edit-schema rules, call get_documentation with https://docs.extend.ai/editing/configuration.md first. Async: a status: "running" result with a runId is not an error — resume with get_form_detection_run passing that runId, the same workspaceId and environment, and wait: true, repeating until the status is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/editing/response-format.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The form PDF. Exactly one of id/url — e.g. { "url": "https://..." } or { "id": "file_..." }, never a bare string. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| inputSchema | No | Existing edit schema to map against. | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| instructions | No | Guidance for schema generation. | |
| advancedOptions | No | { tableParsingEnabled?, radioEnumsEnabled?, nativeFieldsOnly?, conditionalGenerationEnabled? } |
Output Schema
| Name | Required | Description |
|---|---|---|
| runId | Yes | |
| output | No | Detected edit schema (PROCESSED only). |
| status | Yes | PROCESSING | PROCESSED | FAILED, or "running" (resume via the get tool). |
| metrics | No | |
| runType | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations. It discloses the async behavior (status 'running' with runId is not an error, resume with wait:true), the mapping-mode semantics, and the error handling for UNAUTHORIZED/NOT_FOUND. It also points to external documentation for the output shape. No contradiction with annotations; readOnlyHint=false is consistent with the read-like detection operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries unique information—purpose, usage, async pattern, error handling, and doc links. It is front-loaded with the core purpose, then procedural details. Though dense, it avoids repetition and fluff, earning a high score for efficiency despite its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 7 parameters, nested objects, and an output schema, the description covers all essential aspects: what it returns, how to use it as a scaffold, the mapping mode, async resumption, error recovery, and links to authoritative docs for rules and output format. Nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with per-parameter descriptions. The description adds valuable context beyond the schema: the 'exactly one of id/url, never a bare string' constraint for file, the mapping mode for inputSchema, and the purpose of waitSeconds. AdvancedOptions and instructions are only named, but the schema already covers them. This is a solid improvement over the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Detect'), a concrete resource ('fillable fields in a PDF form'), and the output ('edit schema'). It clearly distinguishes from siblings like edit_pdf (filling) by defining detection as the scaffold. The return structure is explicitly enumerated (field type, page index, bounding box), leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'see what a form asks for' or 'scaffold for a structured fill' with a concrete follow-up (set extend_edit:value and pass to edit_pdf). It also covers the mapping mode (inputSchema) and the async resume pattern with get_form_detection_run, plus error recovery (re-call get_me). This is thorough and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_pdfFill a PDF formAInspect
Fill form fields in a PDF and return the edited file (edit group). Values come from instructions (free-form prose, e.g. "name is Acme Corp; date is 2026-04-15") and/or schema (an edit schema from detect_form_fields with extend_edit:value set per field; extend_edit:image with an image_url for signature images). The document passed here must be the TARGET form, not the source you read values from — parse or extract the source first, then fill. Before authoring a schema fill by hand, call get_documentation with https://docs.extend.ai/editing/configuration.md and follow it. templateId runs a saved edit template instead of file; its stored schema/instructions apply unless overridden below. Output is a pointer { id, presignedUrl } to the filled PDF; the URL expires in ~15 minutes (re-fetch with get_file). Async: a status: "running" result with a runId is not an error — resume with get_edit_run passing that runId, the same workspaceId and environment, and wait: true, repeating until the status is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/editing/response-format.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | The PDF form to fill. Exactly one of id/url — e.g. { "url": "https://..." } or { "id": "file_..." }, never a bare string. | |
| schema | No | Populated edit schema (root type: "object", fields carrying extend_edit:* keys). Generate with detect_form_fields. | |
| templateId | No | ID of a saved edit template to use instead of file; instructions/schema/advancedOptions below override the template's values when provided. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| instructions | No | Prose fill values and/or formatting guidance. | |
| advancedOptions | No | { flattenPdf?, preserveSignatureValidity?, tableParsingEnabled?, radioEnumsEnabled?, nativeFieldsOnly?, conditionalGenerationEnabled? }. preserveSignatureValidity defaults to false. When enabled on signed or append-only PDFs, fills existing compatible fields using extend_edit:source_acroform.fieldName or matching schema field names. Missing text, choice, checkbox, and table fields are skipped. New signatures may still be added where permitted. Defaults flattenPdf to false; flattening signed or append-only PDFs is not supported in this mode. Requires Edit engine 1.0.0-beta or later. |
Output Schema
| Name | Required | Description |
|---|---|---|
| runId | Yes | |
| output | No | Pointer to the filled PDF (PROCESSED only); the presignedUrl expires in ~15 minutes. |
| status | Yes | PROCESSING | PROCESSED | FAILED, or "running" (resume via the get tool). |
| metrics | No | |
| runType | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses async behavior (running status, resume with get_edit_run), output URL expiry (~15 minutes, re-fetch with get_file), template override semantics, advancedOptions defaults (preserveSignatureValidity false), and error handling. It adds substantial context beyond annotations (readOnlyHint false, etc.) without any contradiction. Fully aware of mutation nature and idempotency implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Though long, every sentence earns its place—covering input requirements, async flow, error handling, and advanced options. The text is organized logically, front-loading the core purpose and then addressing usage, async, and edge cases. No redundancy or filler; easily scannable by an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, nested objects, async behavior, and template support, the description covers every aspect needed for correct use: inputs, async polling, error recovery, output pointer structure, template override, and advanced options. It even directs to external documentation for response format, which is acceptable since an output schema exists. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3, but the description adds critical meaning: file must be exactly one of id/url (never bare string), schema originates from detect_form_fields, waitSeconds is clamped, advancedOptions details (flattening, signature validity), and templateId override behavior. These constraints are not obvious from the schema alone and are essential for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb 'fill' with resource 'PDF form fields' and output 'edited file'. Clearly distinguishes from sibling tools like detect_form_fields (schema generation) and get_edit_run (async polling) by explaining inputs and flow. The purpose is unambiguous and directly usable by an agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: the target must be the form, not the source; parse/extract first; when to call get_documentation before hand-authoring a schema; templateId alternative; and error recovery via get_me. Names alternatives (detect_form_fields, get_edit_run) and gives conditions for their use. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_dataExtract structured data from a documentAInspect
Extract specific structured values (totals, line items, dates, names, tables) from a document (extract group) using a saved extractor, an inline JSON Schema, or schema-less inference. If the user says "OCR" but wants specific values out, use this tool; for the raw text/markdown of the pages use parse_document instead. Provide exactly one of extractor or config, or omit both for schema-less inference (guided by config.extractionRules when config has no schema; not usable with package). If a saved extractor turns out not to exist, rerun THIS tool without the extractor (schema-less) — do not fall back to parse_document for value extraction. For one merged result across 2-50 related documents, pass package instead of file. detail: "full" returns per-field source citations and confidence — the only way to prove where a value came from (provenance); parsing cannot cite. Async: a status: "running" result with a runId is not an error — resume with get_extract_run passing that runId, the same workspaceId and environment, and wait: true, repeating until the status is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape (output.value, per-field metadata, confidence, citations) is documented at https://docs.extend.ai/extraction/response-format.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | The document to extract from. Mutually exclusive with package. Exactly one of id/url/text — e.g. { "url": "https://..." } or { "id": "file_..." }, never a bare string. | |
| config | No | Inline extraction config: { schema?, extractionRules?, baseProcessor?, advancedOptions?, parseConfig? }. Writing schema by hand? ALWAYS call get_documentation with https://docs.extend.ai/extraction/schema.md FIRST and follow the returned dialect — the rules below are only a summary (field-naming best practices: https://docs.extend.ai/extraction/best-practices/field-names-and-prompt-crafting.md). schema is a JSON Schema: root "type": "object"; primitives nullable via a type array (["string","null"]); objects/arrays keep a plain "type" (never a nullable array) and objects always need "properties"; max depth 5; enums include null; no anyOf/oneOf/allOf/patterns. Date/currency/signature fields add "extend:type" alongside a normal type. A currency field is exactly: { "type": "object", "extend:type": "currency", "properties": { "amount": { "type": ["number", "null"] }, "iso_4217_currency_code": { "type": ["string", "null"] } } } — never a bare number. Omit schema for schema-less mode (no docs needed): extractionRules then doubles as schema-generation instructions. | |
| detail | No | "concise" (default): status, output, failure fields, dashboardUrl. "full": adds config, confidence/citations, usage, timestamps. | |
| package | No | Multi-document corpus (2-50 files, id/url only) extracted into one merged result. Mutually exclusive with file; not usable with schema-less mode. | |
| metadata | No | Arbitrary key-value metadata stored on the run. | |
| priority | No | Queue priority (1-100). | |
| extractor | No | Saved extractor to run. Mutually exclusive with config; omit both for schema-less inference. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | No | |
| files | No | |
| runId | Yes | |
| output | No | Extracted values (PROCESSED only). |
| status | Yes | Terminal status, or "running" (resume via the get tool). |
| runType | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only set openWorldHint and a few flags, so the description carries the full burden of behavioral disclosure. It explicitly states that a status: 'running' result is not an error, dictates resuming via get_extract_run with wait: true, and warns never to re-submit the document. It also discloses that detail: 'full' provides provenance/citations, which parsing cannot offer, and points to external documentation for output shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but every sentence carries operational weight: mode selection, async behavior, error recovery, and documentations links. It is front-loaded with the core purpose and then layers conditions, though it is a dense continuous paragraph that could benefit from light structuring. Still, for a 10-parameter, multi-mode tool, the length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given high complexity, nested objects, async semantics, and multiple mutually exclusive modes, the description is remarkably complete. It covers what the tool does, when to use alternatives, how to handle async statuses, authentication errors, package constraints, schema dialect details, and even provenance semantics. The presence of an output schema and a documentation link further fills any remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, which gives a baseline of 3, but the description adds substantial meaning beyond parameter names. It explains the exact JSON Schema dialect rules for config, gives the precise structure for currency fields, enforces mutual exclusivity of file/package/extractor, and links workspace/environment constraints to get_me. This is far more than the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Extract specific structured values (totals, line items, dates, names, tables) from a document'. It also enumerates the three modes of operation (saved extractor, inline JSON Schema, or schema-less inference), making the tool's scope unmistakable. It distinguishes itself from parse_document by clarifying that raw page text belongs to parse_document, which is strong sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: use extract_data when the user wants specific values, and parse_document for raw text/markdown. It also provides fallback behavior when a saved extractor does not exist, explains package vs. file selection for multi-document corpora, and gives precise async resume instructions with get_extract_run. Error handling for UNAUTHORIZED or NOT_FOUND is called out with a concrete next action (re-call get_me).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_classifierGet a classifier (or one of its versions)ARead-onlyIdempotentInspect
Get a classifier with its draft config, or one specific version's config via version (classify group). Use list_classifiers to discover IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Classifier ID (cl_...). | |
| version | No | "draft", "latest" (latest published), "MAJOR.MINOR" (e.g. "1.2"), or a clv_... version ID. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| config | No | |
| version | No | |
| draftVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that the tool returns 'draft config' or 'specific version's config,' clarifying the return semantics. It does not contradict annotations and adds meaningful behavioral context beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the main action, then adds the version capability and a practical pointer. There is no fluff or redundant wording; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and annotations covering safety, the description is largely complete. It explains the core behavior (draft vs. specific version) and tells the agent how to find IDs. The only minor gap is not mentioning list_classifier_versions for discovering version identifiers, and the default version behavior is implied rather than explicit, but this is a small omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal extra meaning: it implies the default version is 'draft' and that version selects a config, but this is largely redundant with the schema's version description. No new parameter-level insights are provided beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('get'), a specific resource ('classifier'), and distinguishes between retrieving the draft config or a specific version's config. It also names the sibling for ID discovery, which differentiates it from list_classifiers. The only minor ambiguity is the phrase 'classify group,' but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to use list_classifiers for discovering IDs, which is a direct usage pointer. However, it does not contrast with list_classifier_versions for version listing, nor does it state when not to use this tool (e.g., when only IDs are needed). This is a useful hint but not a full usage guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_classify_batchGet a classify batchARead-onlyIdempotentInspect
Get the aggregate status of a classify batch (classify group) submitted by run_classify_batch. wait: true polls until terminal. Statuses: PENDING, PROCESSING, PROCESSED, FAILED, CANCELLED. While non-terminal, call again with wait: true; do not re-submit the batch. Individual results: list_classify_runs filtered by batchId (status: "FAILED" for per-run failure reasons). Batch semantics: https://docs.extend.ai/general/batch-processing.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Poll until the batch reaches a terminal status (within the wait budget). | |
| batchId | Yes | The bpr_... ID from run_classify_batch. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes | |
| runCount | No | |
| createdAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial behavioral context: polling semantics, terminal statuses, the non-terminal re-call behavior, and where to find per-run failure reasons. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose, polling behavior, terminal statuses, re-call guidance, per-run result routing, and a documentation link. It is dense but not bloated, and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the agent needs to safely and correctly invoke the tool: how to poll, what statuses to expect, what not to do (re-submit), and where to get individual results. The output schema handles return-value details, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents batchId, workspaceId, environment, wait, and waitSeconds. The description does not add new parameter-level meaning beyond clarifying the wait behavior, which the schema already covers. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get the aggregate status') and resource ('classify batch'), clarifies the related submission tool (run_classify_batch), and distinguishes aggregate status from individual results, which are routed to list_classify_runs. This clearly separates it from sibling tools like get_classify_run and list_classify_runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to re-poll with wait: true, warns not to re-submit the batch, and directs users to list_classify_runs filtered by batchId for per-run failures. This is strong when-to-use/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_classify_runGet (or wait on) a classify runARead-onlyIdempotentInspect
Get the state and output of a classify run (classify group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/classification/response-format.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Block until terminal or budget expiry. Default false. | |
| runId | Yes | The run ID returned by classify_document or list_classify_runs. | |
| detail | No | "concise" (default): status, output, failure fields, dashboardUrl. "full": adds config, confidence/citations, usage, timestamps. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | No | |
| runId | Yes | |
| output | No | Winning classification (PROCESSED only). |
| status | Yes | Terminal status, or "running" (resume via the get tool). |
| runType | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the blocking/wait behavior, the repeat-call pattern, and the error-handling strategy—all beyond what the annotations (readOnlyHint, idempotentHint) provide. It also references external documentation for the output shape, clarifying what will be returned. These are meaningful additions that help an agent predict the tool's runtime behavior accurately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient: it front-loads the primary purpose, then systematically covers wait semantics, polling instructions, error recovery, and output documentation. Every sentence earns its place; there is no fluff or repetition. The structure makes critical usage rules immediately visible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has an output schema (so return values need not be explained) and a complex set of behaviors (waiting, polling, error recovery), the description covers all essential aspects: the state transition pattern, the need for consistent workspaceId/environment, and the guidance to re-fetch targets on auth errors. It even points to external docs for the full response format, leaving no critical gap for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides detailed descriptions for all six parameters, including the meaning of 'wait' and 'waitSeconds'. The description adds little about individual parameters; it reiterates the wait:true behavior (already in the schema) and frames the repeat-call pattern, which is more usage guidance than parameter semantics. With 100% schema coverage, this is an adequate but not exceptional score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get the state and output of a classify run.' It further specifies the exact use cases ('resume a running run or inspect a failed one'), which distinguishes it from sibling operations like cancel or delete. The phrase 'classify group' adds specificity about the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage instructions: it explains the polling pattern ('While status is "running", call again with wait: true...until it is terminal'), and the error-recovery step ('On UNAUTHORIZED or NOT_FOUND, re-call get_me'). It also warns against re-submitting the document, preventing a common mistake. These are concrete, actionable guidelines that clearly separate when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_documentationFetch an Extend docs pageARead-onlyIdempotentInspect
Fetch an Extend docs page as markdown, live from docs.extend.ai. Pass a URL from a tool description, an error's docUrl, or a search_documentation result. truncated: true means the page was cut at a section boundary to fit the response budget; the returned url has the full page. Always available, no workspace targeting.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | A https://docs.extend.ai/... page URL — from a tool description, an error's docUrl, or a search_documentation result. Only docs.extend.ai pages are fetchable. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| content | Yes | |
| truncated | No | true when the page was cut at a section boundary to fit the budget; url has the full page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds valuable context: that the tool always works without workspace targeting, and explains the 'truncated' flag behavior (page cut at section boundary, full page available via returned url). This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with three sentences that are all information-dense. It front-loads the core action and then adds usage guidance and a behavioral note. No redundant or filler language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with an output schema available, the description covers all necessary aspects: how to obtain the URL, the behavior of truncated responses, and the always-available nature. The output schema likely explains the returned structure, so no further detail is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains the url parameter well. However, the description reinforces the valid sources for the URL and adds the constraint that only docs.extend.ai URLs are fetchable, which is not fully explicit in the schema. This adds meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Fetch') and resource ('Extend docs page') and specifies the output format (markdown) and source (docs.extend.ai). It distinguishes itself from siblings like search_documentation by indicating it fetches a specific page rather than searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: pass a URL from a tool description, an error's docUrl, or a search_documentation result. This provides clear context and implicitly differentiates from search_documentation, which is for searching rather than fetching a known URL.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_edit_runGet (or wait on) an edit runARead-onlyIdempotentInspect
Get the state and output of an edit run (edit group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry. Edit runs have no list endpoint — keep the run ID. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. output.editedFile.presignedUrl expires in ~15 minutes (re-fetch with get_file). Output shape is documented at https://docs.extend.ai/editing/response-format.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Block until terminal or budget expiry. Default false. | |
| runId | Yes | The run ID returned by edit_pdf. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| runId | Yes | |
| output | No | Pointer to the filled PDF (PROCESSED only); the presignedUrl expires in ~15 minutes. |
| status | Yes | PROCESSING | PROCESSED | FAILED, or "running" (resume via the get tool). |
| metrics | No | |
| runType | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent hints, and the description adds substantial operational context: the wait/polling mechanism, the 'no list endpoint' constraint, error recovery steps, and the ~15-minute presigned URL expiry. It enhances transparency without contradicting any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence carries actionable information: purpose, wait behavior, list limitation, polling pattern, error handling, and URL expiry. It is front-loaded with the core purpose and structured logically, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with an output schema, the description covers all critical usage aspects: how to wait, when to re-call, how to handle errors, and where to find the output format. It also notes the presigned URL expiry, which is essential for correct follow-up actions. Nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining how wait and waitSeconds interact in polling, emphasizing that environment must match a granted target, and tying runId to the 'no list endpoint' workflow. This is a modest but real increment over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the state and output of an edit run, distinguishes it from sibling run-getters by specifying 'edit run (edit group)', and notes the absence of a list endpoint, which clarifies its unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: keep the run ID because there's no list endpoint, poll with wait:true while running, never re-submit the document, and handle UNAUTHORIZED/NOT_FOUND by re-calling get_me. It also directs re-fetching expired URLs via get_file, leaving no ambiguity about the correct workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_evaluation_runGet an evaluation runARead-onlyIdempotentInspect
Get an evaluation run's status and accuracy metrics — this is the ONLY tool that returns them, not a get-batch tool (evaluations group). An evaluation is an async job: a fresh run reports PROCESSING, so pass wait: true to block until it finishes; if it is still non-terminal afterward, call again with wait: true rather than re-submitting. Metrics by resource type: extractors { accuracy, fieldMetrics per field path — each field has countExpected/countAccurate, and accuracy is aggregated across items, not per-item }; classifiers { accuracy, classificationMetrics with precision/recall/f1 per type }; splitters { precision, recall, f1, split counts }. Terminal statuses: PROCESSED, FAILED, CANCELLED.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Poll until the evaluation run reaches a terminal status (within the wait budget). | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| evaluationRunId | Yes | The bpr_... ID returned by run_evaluation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| entity | No | |
| status | Yes | |
| metrics | No | |
| entityVersion | No | |
| evaluationSetId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, nondestructive behavior, so the description adds meaningful behavioral context beyond that: fresh runs report PROCESSING, wait: true blocks until terminal, non-terminal runs should be re-polled, and terminal statuses are PROCESSED, FAILED, CANCELLED. It even clarifies aggregation semantics of accuracy metrics across items, which is not visible from annotations or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the core purpose and its unique value, and every sentence adds operational value. It is fairly long and packed into one paragraph, but it earns its length by covering async semantics, terminal statuses, and metric shapes. Slight structural improvement would come from breaking it into bulleted sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the async nature of evaluations, the presence of an output schema, and the complexity of different metric shapes per resource type, the description is complete. It tells the agent how to handle polling, what statuses to expect, and what metrics are returned for extractors, classifiers, and splitters. Nothing needed to invoke the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds important context for 'wait' behavior and the relationship between evaluationRunId and run_evaluation, plus metric names per resource type. This elevates it slightly above the baseline but does not need to carry the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get an evaluation run's status and accuracy metrics.' It also explicitly differentiates itself from get-batch tools by saying it is the ONLY tool that returns these metrics, making its purpose unambiguous among a large group of sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance for the async job scenario: pass wait: true to block, and call again with wait: true rather than re-submitting if still non-terminal. It also names the alternative category (get-batch tool) and distinguishes the evaluation-run use case, so the agent knows when to use this tool vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_extract_batchGet an extract batchARead-onlyIdempotentInspect
Get the aggregate status of an extract batch (extract group) submitted by run_extract_batch. wait: true polls until terminal. Statuses: PENDING, PROCESSING, PROCESSED, FAILED, CANCELLED. While non-terminal, call again with wait: true; do not re-submit the batch. Individual results: list_extract_runs filtered by batchId (status: "FAILED" for per-run failure reasons). Batch semantics: https://docs.extend.ai/general/batch-processing.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Poll until the batch reaches a terminal status (within the wait budget). | |
| batchId | Yes | The bpr_... ID from run_extract_batch. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes | |
| runCount | No | |
| createdAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds genuine value by disclosing the polling contract, the set of terminal statuses, and links to batch-processing documentation. Slight gap: the wait budget and clamping behavior are only hinted at via waitSeconds, but the terminal-state semantics are well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but well-organized — the core purpose and polling behavior come first, followed by statuses, per-run failure routing, and a doc link. Every sentence carries operational value with no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations carry the safety profile, the description fully covers what an agent needs: how to poll, what terminal states look like, how to avoid re-submission, and where to get per-run details. No critical operational gap remains for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds cross-parameter semantics beyond the schema: it ties batchId to the bpr_... ID produced by run_extract_batch, explains which polling parameter to use and when, and connects statuses to the wait flag. This meaningfully enriches what the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('get the aggregate status of an extract batch') and names the submitting tool (run_extract_batch). It also differentiates from per-run tools by pointing to list_extract_runs for individual results, so an agent can distinguish it from get_extract_run and get_classify_batch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit polling instructions ('wait: true polls until terminal... While non-terminal, call again with wait: true') and a clear negative directive ('do not re-submit the batch'). It also routes per-run failure investigation to list_extract_runs with a status filter, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_extractorGet an extractor (or one of its versions)ARead-onlyIdempotentInspect
Get an extractor with its draft config, or one specific version's config via version (extract group). Use list_extractors to discover IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Extractor ID (ex_...). | |
| version | No | "draft", "latest" (latest published), "MAJOR.MINOR" (e.g. "1.2"), or an exv_... version ID. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| config | No | |
| version | No | |
| draftVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description adds useful context beyond annotations by explaining that omitting version returns the draft config, which clarifies default behavior. No contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the primary purpose, then immediately provides the critical discovery pointer. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent get operation with full schema coverage and an output schema present, the description covers the essential usage context: what it returns, how version selection works, and how to find IDs. Nothing required for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters with meaningful descriptions and an enum for environment. The description adds the high-level distinction between draft config and version-specific config, but no additional parameter-level semantics beyond that. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get an extractor with its draft config, or one specific version's config via version'. It clearly distinguishes the tool from siblings like get_extract_run and list_extractors by naming the discovery tool and focusing on extractor config retrieval. The versioning nuance is explicit and immediately meaningful.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes the agent to list_extractors for finding IDs, giving clear guidance for a key prerequisite. However, it does not mention list_extractor_versions as the way to discover available version IDs, even though the version parameter accepts version IDs. This is a minor gap in when-to-use guidance for the version-specific use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_extract_runGet (or wait on) an extract runARead-onlyIdempotentInspect
Get the state and output of an extract run (extract group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/extraction/response-format.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Block until terminal or budget expiry. Default false. | |
| runId | Yes | The run ID returned by extract_data or list_extract_runs. | |
| detail | No | "concise" (default): status, output, failure fields, dashboardUrl. "full": adds config, confidence/citations, usage, timestamps. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | No | |
| files | No | |
| runId | Yes | |
| output | No | Extracted values (PROCESSED only). |
| status | Yes | Terminal status, or "running" (resume via the get tool). |
| runType | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this readOnlyHint, idempotentHint, and destructiveHint=false. The description adds non-obvious behavioral context: wait blocks until terminal or budget expiry, polls may need repeated calls, and the caller must reuse the same workspaceId and environment. It also links to output format documentation, which is useful beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary purpose, then covers the polling behavior, error handling, and documentation link in a compact set of sentences. Every clause earns its place and no content is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only polling tool, the description covers state retrieval, wait semantics, repeated polling, error recovery, and points to detailed output documentation. With a full output schema present and annotations already declaring safety, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra parameter-related nuance by saying the caller must reuse the same workspaceId and environment when resuming, and warns against re-submitting the document. It does not repeat the schema text, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get the state and output of an extract run (extract group)' and immediately clarifies the two main use cases: resuming a running run or inspecting a failed one. This clearly differentiates it from extraction-related siblings like run_extract_batch or cancel_extract_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to and when-not-to guidance: call again with wait: true while status is 'running', never re-submit the document, and on UNAUTHORIZED or NOT_FOUND call get_me. It also names get_me as a recovery path, which counts as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fileGet file metadata, download URL, or parsed contentsARead-onlyIdempotentInspect
Get a file's metadata and a fresh presigned download URL — expires in ~15 minutes, re-call to refresh (files group). Set contents to also return parsed text; contents: null means "not parsed yet", not an error (run parse_document first). Split-produced child files carry parentSplit (source file, page range) in metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | file_... ID. | |
| contents | No | Which parsed representation to include, when available. Default "none". | |
| maxChars | No | Truncation cap for returned contents (default 50000). | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| type | No | |
| contents | No | |
| metadata | No | |
| truncated | No | |
| parentFileId | No | |
| presignedUrl | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description correctly avoids repeating those. It adds valuable behavior beyond annotations: the presigned URL expires in ~15 minutes and requires re-calling to refresh, the 'contents: null' means 'not parsed yet' rather than an error, and split-produced child files carry parentSplit metadata. These are non-obvious behaviors that help the agent use the tool correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose (metadata and presigned URL), then efficiently covers the expiry, contents semantics, and parentSplit metadata. Every sentence earns its place without redundancy. It is well-structured and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description doesn't need to explain return values. It covers the essential operational details: URL expiry, refresh behavior, contents null semantics, and parentSplit metadata. The only minor gap is that it doesn't mention any limits on file size or number of requests, but these are not critical for a single-file fetch operation. Overall it is complete for its purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by clarifying the 'contents' parameter semantics (null means not parsed yet, not an error) and implying that re-calling refreshes the URL. This enriches the parameter understanding beyond the enum and default value in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Get a file's metadata and a fresh presigned download URL', and optionally parsed contents. It clearly identifies the resource (a file) and the outputs (metadata, URL, contents). It distinguishes from siblings like list_files (which lists files) and parse_document (which parses) by focusing on a single file's details. The title reinforces the purpose with a clear verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical context: the URL expires in ~15 minutes and should be re-fetched, and it notes that parsed contents require running parse_document first (a sibling tool). This provides guidance on when to use this tool and prerequisites. It does not explicitly name alternative tools for fetching metadata, but the purpose is clear enough that an agent would select it when needing a single file's metadata or download URL.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_uploadGet the result of a user file uploadARead-onlyIdempotentInspect
Get the status and uploaded file ids of an upload link created by upload_file (files group). Default is one instant status check; wait: true blocks until the user finishes or the wait budget runs out. Statuses: pending (the user has not completed the upload — call again with wait: true once they say they are done); completed (files lists the uploaded file ids, usable as { "id": "file_..." } inputs in any file-accepting tool); expired or cancelled (the link is no longer usable — call upload_file for a fresh one).
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | true = block until the user completes the upload or the wait budget runs out. Default false: one instant status check. | |
| uploadId | Yes | Upload session id (upl_...) from upload_file. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | No | Present once completed: the uploaded file ids. |
| status | Yes | pending | completed | expired | cancelled |
| uploadId | Yes | |
| expiresAt | No | Present while pending: when the link stops accepting uploads. |
| completedAt | No | |
| completedBy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond that: wait-budget blocking, status transitions, and that completed file ids are usable as file_ inputs in other tools. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized: purpose first, then wait behavior, then statuses with follow-up actions. Every sentence contributes necessary information without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations, full parameter schema, and output schema, the description covers all the behavior an agent needs to decide when to call this tool and how to interpret its result. Status semantics and next steps are fully specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds extra operational meaning beyond the schema: what pending means in practice, when to retry with wait:true, and that completed ids become valid file_ references. This pushes it above baseline, though it does not fundamentally compensate for missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: get status and uploaded file ids of an upload link created by upload_file. It clearly distinguishes this from upload_file (which creates the link) and get_file (which retrieves file content).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit guidance on the wait parameter, explains what each status means, and prescribes the next action: call again with wait:true while pending, use the file ids once completed, or call upload_file for a fresh link when expired/cancelled. This is actionable and resolves ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_form_detection_runGet (or wait on) a form detection runARead-onlyIdempotentInspect
Get the state and output of a form detection run (edit group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry. Form detection runs have no list endpoint — keep the run ID. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/editing/response-format.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Block until terminal or budget expiry. Default false. | |
| runId | Yes | The run ID returned by detect_form_fields. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| runId | Yes | |
| output | No | Detected edit schema (PROCESSED only). |
| status | Yes | PROCESSING | PROCESSED | FAILED, or "running" (resume via the get tool). |
| metrics | No | |
| runType | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint, covering safety. The description adds valuable context: waiting semantics, absence of a list endpoint, and error handling (re-calling get_me). It does not contradict annotations and enriches understanding of runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense yet well organized: primary purpose first, then waiting behavior, then workflow-specific caveats, then error handling, then doc reference. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent operation with full schema coverage and annotations, the description covers all necessary aspects: what to do, when to use it, waiting semantics, error recovery, and where to find output shape. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are fully documented. The description adds practical meaning: 'keep the run ID' because no list endpoint exists, and 'must match a granted target from get_me' for environment and workspace. This goes beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves the state and output of a form detection run, with specific verbs 'Get' and options to 'wait'. It distinguishes from siblings by noting there's no list endpoint and that it's the companion to detect_form_fields, so an agent can easily differentiate it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: resume running runs, inspect failed ones, use wait:true to block, and re-call until terminal. It also warns against re-submitting the document and instructs to re-call get_me on errors, giving clear decision rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meShow the authenticated identity and granted targetsARead-onlyIdempotentInspect
Return the connected organization, the credential in use, and the granted workspace + environment ("TEST" or "PRODUCTION") targets — exactly the values the required workspaceId/environment arguments on targeted tools accept. Always available; call this first, and again whenever a tool returns UNAUTHORIZED or NOT_FOUND unexpectedly, or after this connection's access changes — resources live per-workspace.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| object | Yes | |
| credential | Yes | |
| organization | Yes | |
| grantedTargets | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds substantial behavioral context beyond that: an availability guarantee ('Always available'), ordering guidance, troubleshooting scenarios tied to error codes, and the cross-tool contract that its return values are exactly what targeted tools' workspaceId/environment arguments accept.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler. The first sentence front-loads the return contract, and the second delivers all usage guidance. Every clause earns its place, including the parenthetical enum values and the per-workspace rationale.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, rich annotations, and an existing output schema (which relieves the description of explaining return shapes), nothing is missing. The description covers what it returns, the values' meaning for other tools, when to call it, and why its results can go stale. An agent has everything needed to invoke and trust this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4; there is nothing for the description to clarify about inputs. It instead adds cross-tool semantic value by explaining that the returned targets are precisely the values other tools' required arguments accept, which is more useful than parameter documentation for this introspection tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Return the connected organization, the credential in use, and the granted workspace + environment targets') and names the exact values returned. It clearly distinguishes itself from the large get_*/list_* sibling cluster, which all retrieve domain resources, whereas this tool returns the caller's own identity and granted scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit operational guidance is given: 'Always available; call this first,' plus two concrete re-call triggers — unexpected UNAUTHORIZED/NOT_FOUND errors and access changes — with the rationale that 'resources live per-workspace.' This is stronger than merely stating context; it tells the agent exactly when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parse_batchGet a parse batchARead-onlyIdempotentInspect
Get the aggregate status of a parse batch (parse group) submitted by run_parse_batch. wait: true polls until terminal. Statuses: PENDING, PROCESSING, PROCESSED, FAILED, CANCELLED. While non-terminal, call again with wait: true; do not re-submit the batch. Individual results: list_parse_runs filtered by batchId (status: "FAILED" for per-run failure reasons). Batch semantics: https://docs.extend.ai/general/batch-processing.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Poll until the batch reaches a terminal status (within the wait budget). | |
| batchId | Yes | The bpar_... ID from run_parse_batch. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes | |
| runCount | No | |
| createdAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds valuable behavioral context: the polling behavior ('wait: true polls until terminal'), the set of statuses (PENDING, PROCESSING, PROCESSED, FAILED, CANCELLED), and the instruction not to re-submit. This goes beyond what annotations state, though the polling semantics are also echoed in the wait parameter description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense. Each sentence serves a purpose: purpose, statuses, polling guidance, alternative for individual runs, and a documentation reference. It is front-loaded with the core function and immediately gives actionable instructions, with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, output schema present), the description covers everything an agent needs: how to poll, what statuses to expect, what to do on non-terminal results, and where to find per-run errors. The output schema handles return-value structure, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter (batchId, environment, workspaceId, wait, waitSeconds). The description mentions 'batchId' coming from run_parse_batch and 'wait: true' behavior, but these are also present in the schema descriptions. No additional parameter semantics are added beyond the schema, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get the aggregate status of a parse batch (parse group)'. It explicitly differentiates from siblings by pointing to list_parse_runs for individual results and references run_parse_batch as the submission counterpart, so an agent can immediately tell it apart from get_parse_run or list_parse_runs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage instructions: 'wait: true polls until terminal' and 'While non-terminal, call again with wait: true; do not re-submit the batch.' It also names the alternative for per-run failures (list_parse_runs filtered by batchId) and links to external docs for batch semantics, leaving no ambiguity about when to use this tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parse_runGet (or wait on) a parse runARead-onlyIdempotentInspect
Get the state and output of a parse run (parse group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry. Supports pageRange/maxChars/rawBlocks output slicing as in parse_document. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. truncated: true means the markdown was cut at maxChars — re-call with pageRange for the pages you need, or rawBlocks: true for block-level output. pageRange/maxChars/rawBlocks are not remembered between calls; pass them again when resuming with get_parse_run. Output shape is documented at https://docs.extend.ai/parsing/response-format.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Block until terminal or budget expiry. Default false. | |
| runId | Yes | The run ID returned by parse_document or list_parse_runs. | |
| maxChars | No | Truncation cap for returned text (default 50000). | |
| pageRange | No | Return only these pages of the output. | |
| rawBlocks | No | Return block-level chunks instead of concatenated markdown. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | No | |
| runId | Yes | |
| chunks | No | Block-level output (rawBlocks: true). |
| status | Yes | Terminal status, or "running" (resume via the get tool). |
| runType | No | |
| markdown | No | Concatenated page-delimited markdown (default output). |
| pageCount | No | |
| truncated | No | true when markdown was cut at maxChars; re-call with pageRange or rawBlocks for the rest. |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and idempotent; the description adds substantial behavioral context: wait semantics, budget expiry, the need to reuse the same workspaceId/environment when polling, error recovery, and the non-persistence of pageRange/maxChars/rawBlocks between calls. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: it covers purpose, wait behavior, error handling, output slicing, state behavior, and a doc link. The most important operational guidance is front-loaded, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 parameters, nested objects, output schema, many siblings), the description is complete: it explains how to poll, what to do on errors, how to handle truncation, that slicing state is not remembered, and where to find the output shape. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds meaning beyond the schema: it clarifies what wait: true does, that waitSeconds is clamped, that slicing parameters must be re-passed when resuming, and how pageRange/rawBlocks address truncated output. This is valuable operational semantics, not schema repetition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Get the state and output of a parse run (parse group)' and clearly differentiates the use cases: resuming a running run or inspecting a failed one. It is specific to get_parse_run and not confused with batch or list operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit behavioral instructions: call again with wait: true until terminal, never re-submit the document, re-call get_me on UNAUTHORIZED/NOT_FOUND, and pass slicing parameters again because they are not remembered. It also explains the truncated output case with a concrete recovery path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_split_batchGet a split batchARead-onlyIdempotentInspect
Get the aggregate status of a split batch (split group) submitted by run_split_batch. wait: true polls until terminal. Statuses: PENDING, PROCESSING, PROCESSED, FAILED, CANCELLED. While non-terminal, call again with wait: true; do not re-submit the batch. Individual results: list_split_runs filtered by batchId (status: "FAILED" for per-run failure reasons). Batch semantics: https://docs.extend.ai/general/batch-processing.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Poll until the batch reaches a terminal status (within the wait budget). | |
| batchId | Yes | The bpr_... ID from run_split_batch. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes | |
| runCount | No | |
| createdAt | No | |
| updatedAt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate read-only and idempotent behavior, and the description adds meaningful behavioral detail beyond that: the polling semantics of wait, the exact status set, the terminal versus non-terminal distinction, and where to find per-run failures. This gives the agent an accurate model of how the call behaves over time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: four sentences that front-load the core purpose, then cover statuses, retry behavior, per-run results, and documentation. Every sentence adds usable information and there is no filler or repetition of schema field descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, full schema coverage, and presence of an output schema, the description covers the remaining context an agent needs: polling loop, status semantics, prohibition on resubmission, and how to obtain individual run results. The documentation link is an additional fallback for batch-processing details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra meaning by clarifying that wait: true polls until terminal status and that callers should re-invoke with wait: true while non-terminal. It also ties batchId to run_split_batch, though the schema already captures that. The description does not need to restate environment or workspace constraints because the schema covers them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get the aggregate status of a split batch submitted by run_split_batch. It also differentiates batch-level status from individual results by pointing to list_split_runs filtered by batchId, so it is clear how this tool differs from sibling get_*_batch and get_split_run tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to call the tool again: while status is non-terminal, call again with wait: true. It also provides an exclusion by telling the agent not to re-submit the batch, and routes per-run failure details to list_split_runs, which is concrete alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_split_runGet (or wait on) a split runARead-onlyIdempotentInspect
Get the state and output of a split run (split group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/splitting/response-format.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Block until terminal or budget expiry. Default false. | |
| runId | Yes | The run ID returned by split_document or list_split_runs. | |
| detail | No | "concise" (default): status, output, failure fields, dashboardUrl. "full": adds config, confidence/citations, usage, timestamps. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | No | |
| runId | Yes | |
| output | No | Typed segments with page ranges (PROCESSED only). |
| status | Yes | Terminal status, or "running" (resume via the get tool). |
| runType | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive, and the description adds meaningful context beyond them: wait-budget expiry, repeated polling advice, workspace/environment consistency, the 'never re-submit' rule, and error-recovery behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with purpose and status scope. Every sentence earns its place: polling behavior, resubmission warning, error handling, and documentation link. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema is declared, so return values need no explanation. The description covers retrieval, blocking semantics, polling protocol, error handling, and a documentation reference — everything an agent needs to call this tool correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents all six parameters. The description reinforces the wait behavior and polling loop but adds little new parameter-level meaning beyond what the schema already states; this matches the baseline for complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the state and output of a split run') and clarifies its role via 'resume a status: "running" run or inspect a failed one.' This distinguishes it from cancel/delete/list/batch siblings without needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: wait:true blocks until terminal, call again with wait:true while running, never re-submit the document, and re-call get_me on UNAUTHORIZED/NOT_FOUND. It does not explicitly name sibling alternatives, but the polling/inspection context is clear enough for an agent to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_splitterGet a splitter (or one of its versions)ARead-onlyIdempotentInspect
Get a splitter with its draft config, or one specific version's config via version (split group). Use list_splitters to discover IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Splitter ID (spl_...). | |
| version | No | "draft", "latest" (latest published), "MAJOR.MINOR" (e.g. "1.2"), or a splv_... version ID. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| config | No | |
| version | No | |
| draftVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds value by clarifying that omitting version returns the draft config and that a version parameter selects a specific split group config. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler. The first sentence front-loads the core behavior and version distinction; the second gives practical discovery guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, 100% schema parameter coverage, and annotations covering safety and idempotency, the description's guidance on draft vs. version and ID discovery is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptions, including version value formats and environment/workspace constraints. The description adds only light context about draft vs. version config, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), resource ('splitter'), and the two modes ('draft config' or 'one specific version's config'). It is clearly distinct from sibling list/get tools like list_splitters and get_split_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names list_splitters as the discovery tool for IDs and explains when to use draft vs. a specific version via the version parameter. This gives an agent a clear routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflowGet a workflow (or one of its versions)ARead-onlyIdempotentInspect
Get a workflow with its draft step graph, or one specific deployed version's steps via version (workflows group). Use list_workflows to discover IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Workflow ID (workflow_...). | |
| version | No | Deploy number ("1", "2", ...), "latest" (latest deployed), "draft", or a workflow_version_... ID. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | No | |
| steps | No | |
| version | No | |
| draftVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/openWorld/idempotent/non-destructive, so the description only needs to add scope. It adds useful semantic context by stating what the draft vs deployed-version requests return (step graph vs deployed steps). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and variant behavior, ending with a terse discovery pointer. No filler or repeated schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations cover safety and idempotency and an output schema exists for return values, the description covers the invocation path: which resource, which mode, and where to find IDs. It is complete for a read-only getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds extra meaning by tying the version parameter to the two output modes (draft step graph vs deployed steps). The schema handles the enum and format details (workflow_, ws_, TEST/PRODUCTION), so the description doesn't need to repeat them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific retrieval operation ('Get a workflow') and clarifies the two payload variants: draft step graph vs deployed version's steps. The phrase '(workflows group)' and the pointer to list_workflows help distinguish it from sibling get/list tools. No ambiguity about resource or action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly guides discovery: 'Use list_workflows to discover IDs.' It also communicates the main mode choice through 'or one specific deployed version's steps via version,' so an agent knows when to supply the version parameter. It doesn't name exclusions or alternatives beyond list_workflows, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workflow_runGet (or wait on) a workflow runARead-onlyIdempotentInspect
Get the state and output of a workflow run (workflows group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry. Workflow runs commonly take minutes to hours — repeated running responses are normal. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Statuses: PROCESSED; FAILED (retryable: true means the failureReason is usually transient and one retry is reasonable); NEEDS_REVIEW (paused for a human reviewer in the dashboard — share dashboardUrl with the user and re-check the run after they finish; do not retry or re-submit); REJECTED (a reviewer rejected the run in the dashboard — final; dashboardUrl has their reasoning); CANCELLED.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Block until terminal or budget expiry. Default false. | |
| runId | Yes | The run ID returned by run_workflow or list_workflow_runs. | |
| detail | No | "concise" (default): status, output, failure fields, dashboardUrl. "full": adds config, confidence/citations, usage, timestamps. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | No | |
| runId | Yes | |
| status | Yes | PROCESSED | FAILED | NEEDS_REVIEW | REJECTED | CANCELLED, or "running" (resume via the get tool). |
| outputs | No | Per-step output values from completed steps. |
| runType | No | |
| retryable | No | Present on FAILED runs: true when the failureReason is usually transient and one retry is reasonable. |
| stepSummary | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses wait-blocking behavior, expected run durations, repeated 'running' responses as normal, error recovery via get_me, and status-specific responses including retryability and reviewer involvement. This is substantially richer than what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and wait behavior, then efficiently handles polling, errors, and statuses. Despite its length, every clause earns its place—there is no filler and the status list is condensed but necessary for correct agent behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the full run lifecycle, wait semantics, error handling, status meanings, and expected agent actions. Since an output schema exists, omitting return-value details is acceptable, and nothing an agent needs to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so params are already documented. The description adds useful semantics for wait:true blocking until terminal or budget expiry, the need to reuse the same workspaceId and environment during polling, and how statuses drive retry decisions. It earns above the baseline because it connects parameter behavior to the run lifecycle.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Get the state and output of a workflow run' and scopes it to the 'workflows group', distinguishing it from sibling run-retrieval tools like get_extract_run or get_parse_run. It also adds lifecycle purpose—resume a running run or inspect a failed one—so an agent knows exactly what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a detailed polling protocol: call again with wait:true until terminal, do not re-submit, re-check after NEEDS_REVIEW, and do not retry REJECTED runs. It does not explicitly contrast this tool with sibling retrieval or cancellation tools, but the behavioral guidance is strong enough that an agent knows when and how to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_classifiersList classifiersARead-onlyIdempotentInspect
List the workspace's classifiers, newest first (classify group). Fetch a specific one's config with get_classifier. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| sortBy | No | Default updatedAt. | |
| sortDir | No | Default desc. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as readOnly, idempotent, and non-destructive. The description adds behavioral context beyond annotations: the default sort order ('newest first') and the pagination semantics ('hasMore: true means more items exist'). This helps the agent anticipate response behavior and decide how to iterate, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The main purpose is front-loaded, the sibling pointer comes second, and the pagination caveat third. Every sentence adds actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values are already documented. The description covers ordering, pagination behavior, and the alternative tool for detail retrieval. For a list operation with full schema coverage and safe annotations, nothing an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful guidance for nextPageToken ('pass nextPageToken only when every item is needed') and implicitly mentions narrowing filters, which enriches the parameter usage beyond the schema's bare 'Opaque cursor' description. It does not repeat parameter docs, which is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List the workspace's classifiers, newest first', and immediately disambiguates from the sibling tool by adding '(classify group)' and pointing to get_classifier for fetching a single classifier's config. This lets an agent distinguish it from list_classifier_versions and get_classifier without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternative (get_classifier) and the condition that selects it ('Fetch a specific one's config'). It also gives pagination guidance: prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed. This is clear when-to-use and when-not-to-use guidance beyond what annotations or schema provide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_classifier_versionsList classifier versionsARead-onlyIdempotentInspect
List a classifier's published (immutable) versions (classify group). Fetch one version's config with get_classifier. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Classifier ID (cl_...). | |
| limit | No | Page size (default 25). | |
| sortDir | No | Default desc. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds valuable behavioral nuance beyond that: versions are immutable, hasMore indicates more items exist, and nextPageToken should only be used when every item is needed. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each earning its place: the core purpose, the relevant alternative, and the pagination behavior. No fluff or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is fully documented and there is an output schema, so the description need not re-explain return values. The description covers immutability, the get_classifier alternative, and pagination. The only slight gap is the vague 'narrowing filters' advice, but overall the definition is complete enough for correct tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since the schema already describes 100% of parameters, the baseline is 3. The description adds extra practical guidance about nextPageToken and hasMore, telling the agent not to paginate unless necessary and to prefer filters. This is useful but the phrase 'narrowing filters' is a bit vague given there are no explicit filter parameters beyond the required identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: list a classifier's published, immutable versions汪汪. It also names the classify group and points to get_classifier for fetching one version's config, distinguishing it from related list tools and the singular get tool. This is tightly scoped and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context and an explicit alternative for fetching a single version's config. It also provides pagination guidance about hasMore and nextPageToken. It does not explicitly contrast with list_classifiers or state when not to use this tool, but the purpose is clear enough that the usage context is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_classify_runsList classify runsARead-onlyIdempotentInspect
List recent classify runs, newest first (classify group). Filter rather than paginate: status, classifierId, batchId, fileNameContains. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| sortBy | No | Default updatedAt. | |
| status | No | Status filter. | |
| batchId | No | Filter to runs created by one batch submission. | |
| sortDir | No | Default desc. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| classifierId | No | Filter to runs of one classifier (cl_...). | |
| nextPageToken | No | Opaque cursor from the previous page. | |
| fileNameContains | No | Substring match on input file name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive safety. The description adds genuinely useful behavioral context beyond that: default ordering, the hasMore contract, and a clear policy on when to paginate. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with no filler. The core action and ordering are front-loaded, followed by filters and pagination guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a fully documented 10-parameter schema, an output schema, and safety annotations, the description covers the remaining behavioral knowledge an agent needs: ordering, filtering strategy, and pagination semantics. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning by grouping the four important filters (status, classifierId, batchId, fileNameContains) and explaining the nextPageToken use case, which is more than the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List recent classify runs' plus the ordering guarantee 'newest first'. The '(classify group)' tag helps distinguish this from sibling list_*_runs tools, so an agent can identify the right tool immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong practical guidance: prefer filters over pagination, use nextPageToken only when every item is needed, and treat hasMore as a signal to narrow filters. It does not explicitly name an alternative tool such as get_classify_run, so it stops just short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_evaluation_itemsList evaluation itemsARead-onlyIdempotentInspect
List an evaluation set's items — file pairings only; expected outputs are not included in summaries (evaluations group). Item IDs feed update_evaluation_item / delete_evaluation_item and subset runs. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| sortDir | No | Default desc. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. | |
| evaluationSetId | Yes | Evaluation set ID (ev_...). |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context beyond annotations: what is excluded ('expected outputs are not included in summaries') and pagination semantics ('hasMore: true means more items exist'). This is valuable but not exhaustive; no contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler, and the core purpose is front-loaded. Each sentence earns its place: the first defines the result scope, the second connects outputs to downstream tools, and the third explains pagination behavior with a clear recommendation. The structure is tight and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, annotations, and presence of an output schema, the description covers the important non-obvious details: exclusions from summaries, relationship to update/delete tools, hasMore semantics, and pagination guidance. Nothing critical an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all six parameters documented, so the schema carries the parameter-semantics burden. The description adds minimal parameter-specific value, only mentioning that item IDs feed other operations and advising against excessive pagination. This meets the baseline 3 for well-covered schemas but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb, resource, and scope: 'List an evaluation set's items.' It adds a precise distinguishing detail—'file pairings only; expected outputs are not included in summaries'—which differentiates it from broader evaluation-set or run-related tools. The explicit mention of item IDs feeding update/delete tools further anchors its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives actionable usage guidance: item IDs feed update_evaluation_item / delete_evaluation_item and subset runs, and it advises preferring narrowing filters over pagination. It does not explicitly contrast with list_evaluation_sets or add_evaluation_items, but the guidance is strong enough for an agent to know when and how 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.
list_evaluation_setsList evaluation setsARead-onlyIdempotentInspect
List evaluation sets, optionally scoped to one extractor/classifier/splitter via entityId (evaluations group). There is no get-by-id tool — this list returns full set objects. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| sortBy | No | Default updatedAt. | |
| sortDir | No | Default desc. | |
| entityId | No | Only sets evaluating this resource (ex_/cl_/spl_...). | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, but the description adds meaningful behavioral context beyond those: it returns full set objects and explains the hasMore flag semantics. This helps the agent understand the operational behavior of the list response without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, with the core action and scoping front-loaded. Every sentence adds value: what the tool lists, why it should be used over a nonexistent get-by-id tool, and how to handle pagination. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and safety annotations, the description covers all necessary usage context: optional scoping, full-object results, lack of a get-by-id alternative, and pagination behavior. Nothing essential is missing for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed parameter descriptions for entityId, environment, workspaceId, pagination, and sorting. The tool description adds little beyond restating that entityId scopes to one extractor/classifier/splitter, so it does not substantially supplement the schema. Baseline 3 is appropriate given the rich schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List evaluation sets') and immediately clarifies optional scoping by entityId to an extractor/classifier/splitter. It also disambiguates from a hypothetical get-by-id tool by noting none exists and that this list returns full set objects. This is clear and distinct from sibling tools like list_evaluation_items or create_evaluation_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: use this tool because there is no get-by-id endpoint, prefer narrowing filters over pagination, and pass nextPageToken only when every item is needed. This directly tells the agent when and how to use the tool instead of relying on generic pagination behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_extractorsList extractorsARead-onlyIdempotentInspect
List the workspace's extractors, newest first (extract group). Fetch a specific one's config with get_extractor. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| sortBy | No | Default updatedAt. | |
| sortDir | No | Default desc. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds meaningful behavioral context beyond these: the hasMore pagination signal, default ordering, and the recommendation to prefer filters over pagination. This goes beyond what annotations provide, though it does not detail any side effects (consistent with read-only).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The main purpose is front-loaded, followed by targeted guidance on alternative tool usage and pagination. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, return-value details are not required. The description covers the core behavior (listing, ordering, pagination) and routes to the correct alternative. A minor gap is the vague reference to 'narrowing filters' when no explicit filter parameters exist in the schema, but this does not hinder effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters documented, so the baseline is 3. The description does not add parameter-specific meaning beyond the schema, though it clarifies the behavior of nextPageToken and the hasMore flag in relation to pagination. This is sufficient but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the workspace's extractors, notes the default ordering ('newest first'), and explicitly places it in the 'extract group' to distinguish it from sibling list tools. It also points to get_extractor for fetching a specific config, removing ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use get_extractor when a specific extractor's config is needed, and gives concrete pagination guidance: hasMore indicates more items, prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed. This is direct when-to-use vs. when-not-to-use advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_extractor_versionsList extractor versionsARead-onlyIdempotentInspect
List an extractor's published (immutable) versions (extract group). Fetch one version's config with get_extractor. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Extractor ID (ex_...). | |
| limit | No | Page size (default 25). | |
| sortDir | No | Default desc. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, non-destructive), the description discloses pagination behavior (hasMore indicates more items) and recommends narrowing filters over paginating, which is operational context not covered by annotations. It also notes versions are immutable, adding semantic detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loaded with the core purpose, then the alternative tool, then pagination guidance. Every sentence adds value with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, covering return values, and the description adds the key operational detail (pagination behavior) and the pointer to get_extractor. For a listing tool with 6 well-documented parameters, nothing critical is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are fully documented in the schema. The description adds no additional meaning about parameters themselves, only mentioning hasMore which is an output field. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists an extractor's published (immutable) versions, using a specific verb and resource. It distinguishes itself from siblings like get_extractor (fetch config) and other version-listing tools (classifier, splitter, workflow) by naming the extract group and noting the immutable nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent to use get_extractor when a single version's config is needed, and gives operational guidance on handling pagination (hasMore, nextPageToken). However, it does not explicitly state when to prefer this tool over other version-listing tools, though the tool name and context make that clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_extract_runsList extract runsARead-onlyIdempotentInspect
List recent extract runs, newest first (extract group). Filter rather than paginate: status, extractorId, batchId, fileNameContains. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| sortBy | No | Default updatedAt. | |
| status | No | Status filter. | |
| batchId | No | Filter to runs created by one batch submission. | |
| sortDir | No | Default desc. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| extractorId | No | Filter to runs of one extractor (ex_...). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. | |
| fileNameContains | No | Substring match on input file name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses the default sort order ('newest first'), the presence and meaning of a hasMore flag, and the recommended pagination strategy. This gives the agent insight into how the API behaves when items exceed the page size. The description is consistent with annotations, adding value rather than contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with the main action front-loaded ('List recent extract runs, newest first'). Every clause carries information: default ordering, filter list, pagination semantics, and the recommended usage pattern. There is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter list tool with a full output schema, the description covers the essential behavioral guidance: default ordering, filtering preference, and cursor handling. Required-parameter constraints (workspaceId, environment) and parameter formats are already documented in the schema, so nothing critical is missing. The only minor gap is the unexplained '(extract group)' term, but the surrounding clarity compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already explains each parameter. The description adds value by identifying which parameters are intended as filters and by prioritizing them over pagination, which is not evident from the schema alone. It also ties nextPageToken to the hasMore semantics, enriching the bare cursor definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action (List), the resource (recent extract runs), and the default ordering (newest first). This makes it immediately distinguishable from sibling tools like list_extractors or list_extractor_versions, which target different resources. The only minor ambiguity is the parenthetical '(extract group)', but it does not obscure the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit direction to prefer filters (status, extractorId, batchId, fileNameContains) over pagination, and explains when to use nextPageToken ('only when every item is needed'). It also clarifies the meaning of hasMore, providing clear decision-making context. However, it does not contrast this tool with alternatives such as get_extract_run or list_extractors, so no when-not-to-use/exclusion guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesList filesARead-onlyIdempotentInspect
List files in the workspace, newest first (files group). Filter with nameContains rather than paginating broadly. Use get_file for a download URL or parsed contents. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| sortDir | No | Default desc. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nameContains | No | Substring match on file name. | |
| nextPageToken | No | Opaque cursor from the previous page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond that: results are newest-first, hasMore indicates more items exist, and the tool intentionally does not return download URLs or parsed contents. This exceeds what the annotations or schema alone would convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all information-dense and front-loaded. The core action and ordering appear first, followed by practical filtering guidance, a pointer to get_file, and pagination behavior. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the annotations cover safety, and the schema documents all parameters, the description covers the remaining contextual needs: ordering, pagination semantics, filter-first guidance, and the handoff to get_file. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful param-level guidance by telling agents to prefer nameContains over pagination and to only use nextPageToken when full enumeration is required. It does not re-describe each field, which is appropriate since the schema already handles that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List files in the workspace'), adds ordering semantics ('newest first'), and clarifies scope by referencing the 'files group'. It also distinguishes list_files from the related get_file tool, making its purpose clear without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage direction: prefer nameContains over broad pagination, use get_file for download URLs or parsed contents, and only pass nextPageToken when every item is needed. It also explains hasMore semantics, leaving no ambiguity about when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_parse_runsList parse runsARead-onlyIdempotentInspect
List recent parse runs, newest first (parse group). Filter rather than paginate: status, batchId, fileNameContains. Results come back in the upstream default order — this endpoint does not support sorting. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| status | No | Status filter. | |
| batchId | No | Filter to runs created by one batch submission. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. | |
| fileNameContains | No | Substring match on input file name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: results come in upstream default order, no sorting support, hasMore semantics, and guidance to prefer narrowing filters over paginating. This goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no waste. The key behavioral guidance (newest first, filter over paginate, no sorting, hasMore semantics) is front-loaded, and the nextPageToken guidance is concise. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a list tool. The output schema exists, so return values are covered. The description covers ordering, pagination semantics, filtering guidance, and the annotations cover safety. Nothing an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 7 parameters. The description adds context for the filter parameters (status, batchId, fileNameContains) and the pagination behavior, but doesn't add much beyond what the schema descriptions already provide. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists recent parse runs, newest first, and identifies the resource as parse group. It distinguishes itself from sibling list tools by specifying the parse-run resource and the 'newest first' ordering, which is a specific behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises filtering over paginating, states that sorting is not supported, and explains when to use nextPageToken ('only when every item is needed'). This gives clear guidance on when to use this tool and how to behave, though it doesn't name a specific alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_split_runsList split runsARead-onlyIdempotentInspect
List recent split runs, newest first (split group). Filter rather than paginate: status, splitterId, batchId, fileNameContains. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| sortBy | No | Default updatedAt. | |
| status | No | Status filter. | |
| batchId | No | Filter to runs created by one batch submission. | |
| sortDir | No | Default desc. | |
| splitterId | No | Filter to runs of one splitter (spl_...). | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. | |
| fileNameContains | No | Substring match on input file name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavior beyond that: how hasMore signals additional items and the recommended pagination strategy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the core action and ordering front-loaded before pagination guidance. Every sentence adds distinct value: what the tool returns and how to handle pagination.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema, output schema, and safety annotations, the description covers the remaining practical concern—pagination behavior—clearly and completely. An agent can determine how to call and use this tool correctly without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds semantic meaning beyond the schema by grouping filter parameters (status, splitterId, batchId, fileNameContains) and explaining when nextPageToken should be used, which the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('List recent split runs') and the ordering ('newest first'), which distinguishes it from sibling list tools by resource type. The parenthetical '(split group)' reinforces the domain scope without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit operational guidance: prefer filtering over paginating, and only pass nextPageToken when every item is needed. It does not directly name sibling alternatives, but the resource-specific scope and pagination guidance make intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_splittersList splittersARead-onlyIdempotentInspect
List the workspace's splitters, newest first (split group). Fetch a specific one's config with get_splitter. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| sortBy | No | Default updatedAt. | |
| sortDir | No | Default desc. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the call read-only, idempotent, open-world, and non-destructive. The description adds behavioral detail beyond that: newest-first ordering, hasMore flag semantics, and guidance that pagination is not the preferred path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences deliver purpose, alternative tool, and pagination behavior with no filler. The parenthetical 'split group' is slightly cryptic, but it does not undermine the front-loaded, efficient structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, safety annotations, and output schema, the description covers the key operational concerns: what is listed, in what order, when to call get_splitter, and how to handle hasMore/pagination. No critical call-precondition is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 6 parameters have 100% schema description coverage, including enum meanings and workspace/environment constraints, so the description does not need to restate them. It adds pagination context around nextPageToken/hasMore, but no significant new meaning for individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and target ('List the workspace's splitters') and adds ordering ('newest first'). It also points to get_splitter as the tool for a specific one's config, which separates it from sibling list/get tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly routes to get_splitter when a specific splitter's config is needed. It also gives concrete pagination guidance: prefer narrowing filters over paginating, and use nextPageToken only when every item is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_splitter_versionsList splitter versionsARead-onlyIdempotentInspect
List a splitter's published (immutable) versions (split group). Fetch one version's config with get_splitter. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Splitter ID (spl_...). | |
| limit | No | Page size (default 25). | |
| sortDir | No | Default desc. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful context beyond that: versions are immutable and published, hasMore signals remaining items, and pagination should be avoided unless necessary. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: it front-loads the core purpose, then packs the alternative tool and pagination policy. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, a present output schema, and strong safety annotations, the necessary call information is covered. The description completes the picture by noting version immutability and pagination behavior, leaving no major gap for an agent deciding how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions, so the baseline is 3. The description adds extra meaning for nextPageToken usage and the hasMore response signal. However, the phrase 'narrowing filters' is vague because the schema exposes no explicit filter parameters beyond the required identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact action and resource: 'List a splitter's published (immutable) versions.' It also distinguishes itself from get_splitter by pointing to that tool for fetching a single version's config, so an agent can tell list behavior from fetch behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names get_splitter as the alternative when one version's config is needed and provides concrete pagination rules: prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed. This is actionable when-to/not-to guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhook_endpointsList webhook endpointsARead-onlyIdempotentInspect
List the workspace's webhook endpoints with their global event lists (webhooks group). Signing secrets are never returned here — they are shown once at creation only. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| status | No | Filter by endpoint status. | |
| sortDir | No | Default desc. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations declaring read-only, open-world, and idempotent behavior, the description adds meaningful context: signing secrets are never returned and are only shown once at creation. The hasMore explanation also clarifies list semantics beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no wasted words. It front-loads the core purpose, then adds the security disclosure and pagination guidance, with each sentence earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool, the description is complete: it states scope, discloses a critical security behavior, and explains pagination semantics. An output schema exists to cover return-value details, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all six parameters with 100% coverage, so the baseline is 3. The description adds value by explaining when to pass nextPageToken and recommending filters over pagination, which gives additional semantic guidance for the pagination-related parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: list the workspace's webhook endpoints, including their global event lists. The parenthetical '(webhooks group)' helps distinguish this tool from related webhook subscription tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear guidance on pagination behavior: hasMore means more items exist, narrowing filters is preferred over paginating, and nextPageToken should only be passed when every item is needed. It does not explicitly name an alternative sibling to use instead, but the context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhook_subscriptionsList webhook subscriptionsARead-onlyIdempotentInspect
List resource-scoped webhook subscriptions, filterable by endpoint or by the watched resource (webhooks group). hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| sortDir | No | Default desc. | |
| resourceId | No | Only subscriptions watching this resource. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. | |
| webhookEndpointId | No | Only subscriptions attached to this endpoint (wh_...). |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds the hasMore semantic and the recommendation to prefer filters over pagination, which is behavioral context beyond the annotations. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence states purpose and filters; the second gives pagination guidance. The purpose is front-loaded and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list operation with an output schema and annotations covering safety, the description is sufficiently complete. It covers the resource scope, filters, and pagination behavior. It does not mention error cases or required parameters, but those are documented in the schema. The guidance about preferring filters is a notable positive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters are already documented in the schema. The description adds a small clarification that the resourceId filter targets the 'webhooks group,' but otherwise does not enrich parameter meaning beyond what the schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List resource-scoped webhook subscriptions' and specifies the two filtering dimensions (endpoint or watched resource). It distinguishes itself from the sibling list_webhook_endpoints by explicitly calling out 'resource-scoped' and the filter options, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete usage guidance on pagination: 'prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.' It does not explicitly name alternatives or when to use this over list_webhook_endpoints, but the filtering guidance is actionable and implies when 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.
list_workflow_runsList workflow runsARead-onlyIdempotentInspect
List recent workflow runs, newest first (workflows group). Filter rather than paginate: status, workflowId, batchId, fileNameContains. Workflow batches have no batch-get endpoint — track them here via batchId. NEEDS_REVIEW runs are paused for human review. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| sortBy | No | Default updatedAt. | |
| status | No | Status filter. | |
| batchId | No | Filter to runs created by one batch submission. | |
| sortDir | No | Default desc. | |
| workflowId | No | Filter to runs of one workflow (workflow_...). | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. | |
| fileNameContains | No | Substring match on input file name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds beyond that by explaining the newest-first ordering, the hasMore pagination semantics, and the meaning of NEEDS_REVIEW status. This is valuable context that helps the agent reason about results and pagination without contradicting any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core action, and every sentence carries distinct value: scope, filtering guidance, and batch-tracking/pagination notes. There is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 10 parameters, an output schema, and annotations covering safety, the description covers the essential operational details: ordering, filtering strategy, hasMore semantics, special status, and the batch-tracking workaround. It leaves nothing an agent needs to invoke the tool correctly or interpret its results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented. The description adds strategic guidance on which parameters to use as filters (status, workflowId, batchId, fileNameContains) and distinguishes filtering from pagination, which helps the agent choose parameters effectively. It doesn't add per-parameter details but provides contextual grouping that goes beyond a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List recent workflow runs') and clearly scopes it to the workflow group, distinguishing it from sibling list tools like list_extract_runs and list_split_runs. It also names the key filters, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to 'Filter rather than paginate' and lists the relevant filter parameters. It also notes that workflow batches have no batch-get endpoint, so this tool is the place to track them via batchId — giving a clear alternative-condition pairing. The hasMore guidance further refines when to paginate versus narrow filters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workflowsList workflowsARead-onlyIdempotentInspect
List the workspace's workflows, newest first (workflows group). Fetch a specific one's step graph with get_workflow. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size (default 25). | |
| sortBy | No | Default updatedAt. | |
| sortDir | No | Default desc. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description doesn't need to repeat safety semantics. It adds useful behavioral context beyond annotations: newest-first ordering, hasMore semantics, and guidance to avoid unnecessary pagination. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no filler. Core purpose and ordering are front-loaded, the alternative get_workflow is given second, and pagination guidance is compact. The parenthetical '(workflows group)' is slightly odd but harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values don't need elaboration; annotations cover the safety profile. The description covers ordering, pagination semantics, and the correct sibling for step graphs, while all six parameters are fully documented in the schema. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even without additional parameter detail in the description. The only added parameter context is nextPageToken guidance ('pass nextPageToken only when every item is needed') and its relationship to hasMore, which is mild extra value but not enough to raise the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource with 'List the workspace's workflows, newest first', making the core function unambiguous. It also distinguishes itself from get_workflow by directing agents there for a specific workflow's step graph. It doesn't explicitly differentiate from list_workflow_runs or list_workflow_versions, but the resource scope and get_workflow contrast are sufficient.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: use get_workflow to fetch a specific workflow's step graph, and prefer narrow filters over pagination, only using nextPageToken when every item is needed. It doesn't cover when to choose list_workflow_versions or list_workflow_runs, but it covers the most likely alternative and the pagination decision clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workflow_versionsList workflow versionsARead-onlyIdempotentInspect
List a workflow's deployed (immutable) versions — integer deploy numbers with optional names (workflows group). Fetch one version's steps with get_workflow. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Workflow ID (workflow_...). | |
| limit | No | Page size (default 25). | |
| sortDir | No | Default desc. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| nextPageToken | No | Opaque cursor from the previous page. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| hasMore | Yes | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint and destructiveHint, so the safety profile is known. The description adds behavioral context about immutability of versions and the hasMore flag indicating pagination, which are not captured in annotations. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The main purpose is front-loaded, and the pagination guidance is tucked into the second sentence without redundancy. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full parameter documentation, the description adds the key behavioral notes (immutability, hasMore, pagination) and a pointer to get_workflow. It's complete for a read-only listing tool; nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers all 6 parameters with detailed descriptions (100% coverage), so the description adds no additional parameter meaning. The mention of hasMore is about output, not parameters. Baseline of 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists a workflow's deployed (immutable) versions, specifying the resource and that they are integer deploy numbers with optional names. It also differentiates from get_workflow by noting that tool fetches a version's steps, so an agent can distinguish it from siblings like list_workflows or list_workflow_runs without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit pagination guidance (prefer narrowing filters over paginating, pass nextPageToken only when every item is needed) and names the alternative get_workflow for fetching steps. It doesn't explicitly state when not to use this tool versus list_workflows or list_workflow_runs, but the context is sufficient for most agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_documentParse a document to markdown/textAInspect
Convert a document (PDF, image, Office doc, spreadsheet) into clean structured text — markdown by default (parse group). Right when the user wants the content of the pages ("OCR this", "what does this document say", feed text to another step); for specific field values — or when values need source citations/provenance — use extract_data instead. No saved resource needed. Use pageRange to return only the pages of interest; full output of a long document is large, and maxChars caps it. To work on one section of a bundle, split_document it first and parse the relevant segment's fileId. rawBlocks returns block-level structure (tables, figures, coordinates). Async: a status: "running" result with a runId is not an error — resume with get_parse_run passing that runId, the same workspaceId and environment, and wait: true, repeating until the status is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Parse runs cannot be cancelled. truncated: true means the markdown was cut at maxChars — re-call with pageRange for the pages you need, or rawBlocks: true for block-level output. pageRange/maxChars/rawBlocks are not remembered between calls; pass them again when resuming with get_parse_run. Output shape is documented at https://docs.extend.ai/parsing/response-format.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Document to parse. Exactly one of id/url — e.g. { "url": "https://..." } or { "id": "file_..." }, never a bare string. | |
| config | No | Parse config: { target?, chunkingStrategy?, blockOptions?, advancedOptions? } — e.g. blockOptions.tables.targetFormat, advancedOptions.pageRanges, Excel modes. Before authoring a config by hand, call get_documentation with https://docs.extend.ai/parsing/configuration.md and follow it. | |
| maxChars | No | Truncation cap for returned text (default 50000); response sets truncated: true when hit. | |
| metadata | No | Arbitrary key-value metadata stored on the run. | |
| pageRange | No | Return only these 1-indexed pages of the output (post-parse slice; the whole document is still parsed and billed). | |
| rawBlocks | No | Return block-level output (chunks/blocks with types and page metadata) instead of concatenated markdown. Default false. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | No | |
| runId | Yes | |
| chunks | No | Block-level output (rawBlocks: true). |
| status | Yes | Terminal status, or "running" (resume via the get tool). |
| runType | No | |
| markdown | No | Concatenated page-delimited markdown (default output). |
| pageCount | No | |
| truncated | No | true when markdown was cut at maxChars; re-call with pageRange or rawBlocks for the rest. |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations providing readOnlyHint=false, idempotentHint=false, destructiveHint=false, the description adds substantial behavioral context: async status 'running' is not an error, runs cannot be cancelled, truncation behavior with truncated flag, and that pageRange/maxChars/rawBlocks are not remembered between calls. This goes far beyond the annotations and is critical for correct usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient, covering all necessary operational details in a single paragraph. It is front-loaded with the core purpose and usage, then expands into async handling. While long, every sentence conveys essential information; a slightly more structured format could improve readability, but it is not redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 params, async, error handling, output schema documented externally), the description is remarkably complete. It covers when to use, how to handle async runs, error recovery, truncation, and configuration guidance. The output schema exists and is referenced via documentation, so absence of inline return details is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and descriptions are detailed (e.g., file exactly one of id/url, environment must match granted target). The description adds value by explaining how pageRange works (post-parse slice) and that config should be authored via get_documentation, though it doesn't detail each config sub-parameter; the schema covers those adequately. A 4 is justified for the extra behavioral guidance on maxChars and rawBlocks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts various document types into structured text (markdown default), explicitly naming the 'parse group' and contrasting with extract_data. It uses a specific verb ('Convert') and resource ('document'), making it distinct from siblings like classify_document or edit_pdf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('when the user wants the content of the pages', 'OCR this', 'what does this document say'), when NOT to use it (for specific field values or when citations needed, use extract_data), and even guides workflow with split_document for bundle segments. It also covers async resumption and error handling, which is comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_classifier_versionPublish a classifier versionAInspect
Publish the classifier's current draft config as a new immutable semver version ("1.2"-style) that runs and evaluations can pin (classify group). releaseType picks the major or minor bump; pass config to publish that config instead of the draft. Published versions never change — keep iterating on the draft.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Classifier ID (cl_...). | |
| config | No | Publish this config instead of the current draft. Same shape and rules as config on create_classifier / classify_document. | |
| description | No | What changed in this version. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| releaseType | Yes | Which semver component to bump. | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| config | No | |
| version | Yes | |
| createdAt | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-read-only, non-idempotent, and non-destructive. The description adds valuable behavioral context beyond that: published versions are immutable, never change, and can be pinned by runs and evaluations. This explains the key side effect of publishing without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, no filler, and the core purpose is front-loaded. Every sentence adds either the mechanism, the optional behavior, or the consequence of publishing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with the 100% schema coverage, annotations, and output schema, gives an agent everything needed to call this tool correctly. It explains immutability, the draft-vs-config choice, version bump selection, and the pinning use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning by explaining the relationship between the current draft, the optional config parameter, and releaseType's major/minor bump behavior, which ties the parameters together in a way the schema does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Publish'), a precise resource ('classifier's current draft config'), and the resulting artifact ('new immutable semver version'). It clearly distinguishes this from sibling tools like publish_extractor_version and publish_splitter_version by targeting classifiers specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: publish the draft or supply a config instead, and keep iterating on the draft afterward. It doesn't explicitly name the alternative tool (e.g., update_classifier) for editing the draft, so it falls just short of fully explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_extractor_versionPublish an extractor versionAInspect
Publish the extractor's current draft config as a new immutable semver version ("1.2"-style) that runs and evaluations can pin (extract group). releaseType picks the major or minor bump; pass config to publish that config instead of the draft. Published versions never change — keep iterating on the draft.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Extractor ID (ex_...). | |
| config | No | Publish this config instead of the current draft. Same shape and rules as config on create_extractor / extract_data. | |
| description | No | What changed in this version. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| releaseType | Yes | Which semver component to bump. | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| config | No | |
| version | Yes | |
| createdAt | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide the safety profile (readOnly=false, openWorld=true, idempotent=false, destructive=false), while the description adds important non-obvious behavior: published versions never change, the default source is the current draft, and config can override the draft. This goes beyond what the annotations alone signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences front-load the core purpose and the immutability guarantee. There is slight redundancy between 'immutable semver version' and 'Published versions never change', but it is acceptable emphasis and every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema (100% parameter coverage, output schema, enums) and annotations, the description covers the remaining contextual needs: why to publish, what happens to the draft, and the releaseType/config behavior. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes further by explaining that releaseType selects the major/minor bump and that passing config publishes that config instead of the draft. This adds meaning beyond the schema's enum and property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Publish') and a clear resource ('the extractor's current draft config') and defines the output as an immutable semver version. It distinguishes this from update-style tools by emphasizing that published versions are immutable and can be pinned by runs and evaluations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It conveys when to use it: to turn a draft into a stable, pin-able version and to continue iterating on the draft after publishing. It does not explicitly name sibling alternatives like update_extractor or publish_classifier_version, but the 'extract group' cue and immutable-version framing make the intended context clear without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_splitter_versionPublish a splitter versionAInspect
Publish the splitter's current draft config as a new immutable semver version ("1.2"-style) that runs and evaluations can pin (split group). releaseType picks the major or minor bump; pass config to publish that config instead of the draft. Published versions never change — keep iterating on the draft.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Splitter ID (spl_...). | |
| config | No | Publish this config instead of the current draft. Same shape and rules as config on create_splitter / split_document. | |
| description | No | What changed in this version. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| releaseType | Yes | Which semver component to bump. | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| config | No | |
| version | Yes | |
| createdAt | No | |
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true. The description adds meaningful behavioral context: published versions are immutable ('Published versions never change'), releaseType picks the bump, and passing config publishes that config instead of the draft. This goes beyond the annotations and helps the agent understand side effects and constraints. It doesn't mention permissions or rate limits, but the schema already covers environment/workspace grants, so the description's added value is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action and outcome, and every clause earns its place. It packs the immutability warning, the releaseType behavior, the config override, and the draft-iteration guidance into a compact, readable form. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are already documented. The description covers the key behavioral aspects: what gets published, how releaseType works, the config override, and immutability. It doesn't explicitly state what happens to existing pinned versions or whether publishing requires a prior draft, but the draft-centric language and the output schema cover most of what an agent needs. A small gap is not mentioning that the draft remains editable after publishing, though 'keep iterating on the draft' implies it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters. The description adds a little extra meaning by explaining the relationship between releaseType and semver bumping, and by clarifying that config overrides the draft. However, it doesn't add much beyond the schema's own descriptions, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Publish'), a resource ('splitter's current draft config'), and the result ('a new immutable semver version'). It also distinguishes the tool from siblings like publish_classifier_version and publish_extractor_version by naming the splitter resource and the draft-to-version flow. The title reinforces the same message, and the description adds the key immutability trait that makes the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool: when you want to pin a splitter config for runs and evaluations, and it notes that you should keep iterating on the draft after publishing. It does not explicitly name alternatives or exclusions, but the context of sibling tools (publish_classifier_version, publish_extractor_version) and the splitter-specific language make the usage context clear. A small gap is that it doesn't say 'use update_splitter to modify the draft instead' explicitly, but the draft iteration guidance implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_classify_batchRun a batch of classify runsAInspect
Submit up to 1,000 documents as one batch of classify runs (classify group) against a saved processor. Returns a batchId immediately; runs execute async — poll aggregate status with get_classify_batch (wait: true), and fetch individual results with the classify-run list tool filtered by batchId.
| Name | Required | Description | Default |
|---|---|---|---|
| inputs | Yes | 1-1000 documents. | |
| priority | No | Queue priority (1-100). | |
| processor | Yes | The saved processor every run in the batch uses. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| batchId | Yes | |
| runCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false, idempotentHint=false, etc., which are generic. The description adds critical behavioral traits: returns a batchId immediately, runs execute asynchronously, and describes the polling and result-fetching workflow. This goes well beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. The core action and size limit are front-loaded in the first sentence, and the async workflow is appended in the second. Every sentence earns its place, and the structure leads with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema and the presence of an output schema, the description covers the essential operational context: submission, size limit, async behavior, and how to track results. The only notable gap is the vague phrase 'the classify-run list tool' instead of naming list_classify_runs, which is a minor friction point.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with rich property descriptions (e.g., 'Exactly one of id/url/text', 'Must match a granted target from get_me'). The description adds no new parameter semantics beyond restating the 1-1000 document limit already present in the schema's maxItems/minItems.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Submit'), specifies the resource ('batch of classify runs'), quantifies the limit ('up to 1,000 documents'), and names the target ('saved processor'). This clearly distinguishes it from single-run tools like classify_document and other batch tools such as run_extract_batch, even without explicitly naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies batching multiple documents and gives explicit follow-up guidance: poll get_classify_batch with wait:true and fetch results via the classify-run list tool filtered by batchId. It does not explicitly name classify_document as the alternative for single runs, but the context of 'up to 1,000 documents as one batch' provides sufficient usage signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_evaluationRun an evaluationAInspect
Run an evaluation set against a version of its resource and score the results against the ground truth (evaluations group). Async: returns immediately with a bpr_... run ID — poll it with get_evaluation_run (evaluationRunId, wait: true; NOT a get-batch tool, even though the ID looks like a batch), and do not re-submit while it runs. Defaults to the set's resource at its latest published version; pass entity to pin { id, version: "1.2" | "latest" | "draft" }.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | No | Which resource + version to evaluate. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| evaluationSetId | Yes | Evaluation set ID (ev_...). | |
| evaluationSetItemIds | No | Run only these items (evi_...) instead of the whole set. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes | |
| evaluationSetId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-read-only and non-idempotent behavior, while the description adds crucial behavioral detail: async execution, immediate run ID return, polling requirements, re-submission warning, and default-to-latest-published-version semantics. This materially helps an agent avoid common asynchronous pitfalls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences that front-load the core purpose and then cover async behavior, polling, re-submission, and entity defaults. Every sentence earns its place with no redundant filler or schema repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the input schema fully documents all parameters, the description covers the non-obvious operational context: async polling, the bpr_... ID confusion, idempotency concerns, and version pinning defaults. Nothing an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds value by explaining the entity parameter's default behavior and the accepted version values ('1.2' | 'latest' | 'draft'). It also clarifies the resource scope, which helps the agent understand how entity relates to evaluationSetId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: run an evaluation set against a version of its resource and score results against ground truth. It also distinguishes itself from the many run_* batch siblings and from get_evaluation_run, so an agent can identify it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational guidance: it is async, returns a bpr_... ID, should be polled via get_evaluation_run with wait:true, and should not be re-submitted while running. It also warns that this is NOT a get-batch tool, preventing a likely misuse, though it does not enumerate broader alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_extract_batchRun a batch of extract runsAInspect
Submit up to 1,000 documents as one batch of extract runs (extract group) against a saved processor. Returns a batchId immediately; runs execute async — poll aggregate status with get_extract_batch (wait: true), and fetch individual results with the extract-run list tool filtered by batchId.
| Name | Required | Description | Default |
|---|---|---|---|
| inputs | Yes | 1-1000 documents. | |
| priority | No | Queue priority (1-100). | |
| processor | Yes | The saved processor every run in the batch uses. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| batchId | Yes | |
| runCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that runs execute asynchronously, returning a batchId immediately, and provides the exact polling and result-fetching mechanism. This goes beyond the annotations (readOnlyHint false, openWorldHint true, idempotent false) by revealing the async execution pattern and the need to poll. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the core purpose and then give the essential async follow-up. Every clause carries information: batch size, resource, immediate return, async execution, and specific next steps. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, nested objects, output schema), the description is complete: it explains the async behavior and precisely names the poll and list tools. The output schema handles return values, so no further return-format detail is needed. The only minor omission is an explicit mention of the single-document alternative, which is more a usage-guidelines concern.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so every parameter (inputs, processor, environment, workspaceId, priority) is already documented with descriptions and constraints. The description adds only a restatement of the batch size ('up to 1,000 documents') and 'saved processor,' which are already in the schema. Per the baseline rule for high schema coverage, this warrants a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Submit up to 1,000 documents as one batch of extract runs (extract group) against a saved processor.' This clearly differentiates it from single-run tools like extract_data and from other batch tools (run_classify_batch, etc.) by naming the resource type and batch size. The title complements the description without becoming a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent to use this tool to submit multiple documents as a batch and immediately provides the follow-up workflow: poll with get_extract_batch (wait: true) and fetch individual results with the extract-run list tool filtered by batchId. This gives clear context on when to invoke it (when a batch of extractions is needed) but does not explicitly name the single-document alternative (extract_data) or state when not to use it. The absence of an explicit exclusion drops it from a 5, but the guidance is still actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_parse_batchRun a batch of parse runsAInspect
Submit up to 1,000 documents as one batch of parse runs (parse group); no saved processor needed — an optional inline config applies to every run. Returns a batchId immediately; poll aggregate status with get_parse_batch and fetch individual results with list_parse_runs filtered by batchId.
| Name | Required | Description | Default |
|---|---|---|---|
| config | No | Inline parse config applied to every run (same shape as parse_document's config). | |
| inputs | Yes | 1-1000 documents. | |
| priority | No | Queue priority (1-100). | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| batchId | Yes | |
| runCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering read/write safety, the description adds valuable behavioral detail: it returns a batchId immediately, is asynchronous, requires no saved processor, and applies an optional inline config to all runs. No contradiction with the annotations is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences convey the core behavior, capacity limit, configuration model, asynchronous nature, and follow-up workflow with no filler. The most important facts are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficiently complete for an agent to invoke the tool and know how to retrieve results, especially since an output schema exists. It covers the async flow and batch semantics; minor omissions like explicit idempotency caveats are already represented by the annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented. The description adds context that the inline config applies to every run and that no saved processor is needed, but it does not substantially expand per-parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as submitting up to 1,000 documents as a batch of parse runs, distinguishing it from single-document operations like parse_document and from batch operations in other domains. It uses specific language: 'Submit', 'batch of parse runs', and 'parse group'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the batch submission use case and gives actionable follow-up guidance (poll get_parse_batch, fetch with list_parse_runs filtered by batchId). It does not explicitly exclude single-document cases or name parse_document as the alternative, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_split_batchRun a batch of split runsAInspect
Submit up to 1,000 documents as one batch of split runs (split group) against a saved processor. Returns a batchId immediately; runs execute async — poll aggregate status with get_split_batch (wait: true), and fetch individual results with the split-run list tool filtered by batchId.
| Name | Required | Description | Default |
|---|---|---|---|
| inputs | Yes | 1-1000 documents (id/url file sources only). | |
| priority | No | Queue priority (1-100). | |
| processor | Yes | The saved processor every run in the batch uses. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| batchId | Yes | |
| runCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing that runs execute asynchronously and that a batchId is returned immediately. This is important behavioral context the annotations do not convey. It does not contradict the readOnlyHint=false or idempotentHint=false annotations, and it aligns with the non-idempotent batch-submission nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences carry all essential information: what the tool does, the batch limit, the async behavior, and the follow-up workflow. There is no filler or redundancy; the key constraint and guidance are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async batch tool with a rich schema and output schema, the description provides the missing operational context: immediate batchId return, polling via get_split_batch, and retrieving individual results by batchId. An agent has enough guidance to invoke the tool and continue the workflow correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Since schema description coverage is 100%, the baseline is 3 and the schema already documents all parameters thoroughly. The description adds little parameter-level semantics beyond restating the batch limit and saved processor concept, which are already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Submit up to 1,000 documents as one batch of split runs'), the target resource ('a saved processor'), and the async return mode. It is easy to distinguish from sibling run_*_batch tools because it explicitly names 'split runs' and the batch submission pattern.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is appropriate: submitting a large batch of split runs against a saved processor. It also provides concrete follow-up usage guidance by naming get_split_batch for polling and a split-run list tool filtered by batchId for results, though it does not explicitly contrast with single-document alternatives like split_document.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_workflowRun a workflow on a documentAInspect
Start a run of a deployed multi-step workflow on a document (workflows group; not runnable until a version is deployed, or pass version "draft"). Workflow runs commonly take minutes to hours. Async: a status: "running" result with a runId is not an error — resume with get_workflow_run passing that runId, the same workspaceId and environment, and wait: true, repeating until the status is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Statuses: PROCESSED; FAILED (retryable: true means the failureReason is usually transient and one retry is reasonable); NEEDS_REVIEW (paused for a human reviewer in the dashboard — share dashboardUrl with the user and re-check the run after they finish; do not retry or re-submit); REJECTED (a reviewer rejected the run in the dashboard — final; dashboardUrl has their reasoning); CANCELLED. For one merged run over 2-50 related files, pass package instead of file. outputs injects pre-computed results for specific extractors/classifiers/splitters so the workflow skips recomputing them (not allowed with package).
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Input document. Mutually exclusive with package. Exactly one of id/url/text — e.g. { "url": "https://..." } or { "id": "file_..." }, never a bare string. | |
| detail | No | "concise" (default): status, output, failure fields, dashboardUrl. "full": adds config, confidence/citations, usage, timestamps. | |
| outputs | No | Pre-computed results the workflow should use instead of recomputing those steps. Not allowed with package. | |
| package | No | 2-50 files (id/url only) processed together as one merged run. Mutually exclusive with file and with outputs. | |
| secrets | No | Secrets passed to external-data-validation steps. | |
| metadata | No | Arbitrary key-value metadata stored on the run. | |
| priority | No | Queue priority (1-100). | |
| workflow | Yes | The workflow to run. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | No | |
| runId | Yes | |
| status | Yes | PROCESSED | FAILED | NEEDS_REVIEW | REJECTED | CANCELLED, or "running" (resume via the get tool). |
| outputs | No | Per-step output values from completed steps. |
| runType | No | |
| retryable | No | Present on FAILED runs: true when the failureReason is usually transient and one retry is reasonable. |
| stepSummary | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint: false, openWorldHint: true, idempotentHint: false, destructiveHint: false. The description carries the full behavioral burden and does so thoroughly: explains that runs are async, can take minutes to hours, that a 'running' status is not an error, and how to poll for terminal status. It also discloses that retrying is only appropriate for retryable failures, and that NEEDS_REVIEW/REJECTED require human interaction. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place. It front-loads the core purpose and async/status behavior before diving into parameters. Statuses are enumerated clearly, and constraints (e.g., outputs not allowed with package) are highlighted. The structure is logical: purpose, async handling, statuses, then parameter-specific notes. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 params, nested objects, async execution, output schema), the description covers all essential aspects: how to invoke, how to handle async results, what each status means, error recovery steps, and the distinction between file/package/outputs. It also references get_me for granted targets and get_workflow_run for polling. Nothing an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema description coverage, the description adds substantial meaning beyond the schema. It explains the mutual exclusivity of file and package, the requirement of exactly one of id/url/text, the meaning of the 'detail' enum values, the shape of pre-computed outputs, the default for workflow.version, and the environment/target constraints from get_me. This goes far beyond the schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb+resource: 'Start a run of a deployed multi-step workflow on a document.' It immediately distinguishes this from sibling run tools (e.g., run_workflow_batch) by specifying it's for a single document (or package) and mentions the 'workflows group' context. It also clarifies prerequisites (deployment or draft version), making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use and when-not-to-use guidance: states package is for 2-50 files instead of file, and outputs are not allowed with package. It explains async behavior and tells the agent to resume with get_workflow_run, never re-submitting. It also gives specific handling for statuses (retryable, NEEDS_REVIEW, REJECTED) and error cases (UNAUTHORIZED/NOT_FOUND → call get_me). This is comprehensive and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_workflow_batchRun a batch of workflow runsAInspect
Submit up to 1,000 documents as one batch of workflow runs (workflows group). Returns a batchId immediately; workflow batches have NO batch-get endpoint — track progress with list_workflow_runs filtered by batchId; do not re-submit the documents.
| Name | Required | Description | Default |
|---|---|---|---|
| inputs | Yes | 1-1000 documents. | |
| priority | No | Queue priority (1-100). | |
| workflow | Yes | The deployed workflow every run in the batch executes. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| batchId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses critical behavior: returns a batchId immediately, has NO batch-get endpoint, and requires polling via list_workflow_runs. The 'do not re-submit' warning complements the idempotentHint=false annotation with concrete guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry all essential information: the action, the limit, the immediate return, the missing endpoint, the tracking mechanism, and the re-submission warning. No filler or repeated schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex nested-parameter tool, the description covers the batch lifecycle completely: submission, immediate response, progress tracking, and the absence of a get-endpoint. The output schema can handle return-value details, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented in detail. The description adds batch-level context (1000 docs, batchId) but no param-specific semantics beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Submit'), a specific resource ('a batch of workflow runs'), and an explicit scope ('up to 1,000 documents'). This clearly differentiates it from the single-run sibling run_workflow and from other batch tools like run_extract_batch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description directly tells the agent how to track progress after submission: 'track progress with list_workflow_runs filtered by batchId'. It also warns 'do not re-submit the documents', which is an important usage constraint. It doesn't explicitly contrast with run_workflow, but the batch context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_documentationSearch the Extend documentationARead-onlyIdempotentInspect
Search the Extend documentation. Returns matching pages with URLs — results are pointers, not content: fetch the most relevant with get_documentation. An empty results list means nothing matched; different domain terms (feature names, API field names, product vocabulary) usually do. Always available, no workspace targeting.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What to look for in the Extend docs — topic keywords work best. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the read-only, open-world, idempotent annotations by disclosing that results are page pointers, that empty results mean no match rather than an error, and that query terminology matters. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with no filler. The core purpose and result type are front-loaded, and each subsequent sentence adds genuinely useful operational context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a single-parameter search tool with annotations and an output schema. It covers result semantics, empty-result behavior, follow-up tool routing, and availability context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single query parameter, so the baseline is 3. The description adds extra practical meaning by naming the kinds of terms that work (feature names, API field names, product vocabulary) and explaining how to interpret an empty result.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: searching the Extend documentation. It clearly distinguishes itself from the sibling get_documentation by explaining that results are pointers with URLs, not content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: if results are relevant, fetch full content with get_documentation. It also gives actionable guidance for empty results—try different domain terms—and notes the tool is always available with no workspace targeting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
split_documentSplit a multi-document file into segmentsAInspect
Divide a combined file, e.g. a scanned bundle of invoices or a merged PDF of statements, into typed segments with page ranges (split group), using a saved splitter or inline split classifications. Also the right FIRST step to locate one document or section inside a larger bundle — split, then parse/extract only the relevant segment instead of processing the whole file. Provide exactly one of splitter or config; inline config.splitClassifications needs a type: "other" entry. Each split includes startPage/endPage and, when Extend materializes child files, a fileId usable directly in other tools. Raw text input is not supported — splitting is page-based. Async: a status: "running" result with a runId is not an error — resume with get_split_run passing that runId, the same workspaceId and environment, and wait: true, repeating until the status is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/splitting/response-format.md (get_documentation).
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The bundle to split. Exactly one of id/url — e.g. { "url": "https://..." } or { "id": "file_..." }, never a bare string. | |
| config | No | Inline split config: { splitClassifications: [{ id, type, description, identifierKey? }], splitRules?, advancedOptions?, parseConfig? }. Must include a type: "other" entry; ids must be unique. identifierKey names a per-segment value the splitter reads off each segment (e.g. an invoice number), surfaced as identifier on each returned split. Before authoring a config by hand, call get_documentation with https://docs.extend.ai/splitting/configuration.md and follow it. | |
| detail | No | "concise" (default): status, output, failure fields, dashboardUrl. "full": adds config, confidence/citations, usage, timestamps. | |
| metadata | No | Arbitrary key-value metadata stored on the run. | |
| priority | No | Queue priority (1-100). | |
| splitter | No | Saved splitter to run. Provide exactly one of splitter or config. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| waitSeconds | No | Max seconds to block waiting on the run (clamped to the server wait budget). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | No | |
| runId | Yes | |
| output | No | Typed segments with page ranges (PROCESSED only). |
| status | Yes | Terminal status, or "running" (resume via the get tool). |
| runType | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses async behavior ('status: "running" result with a runId is not an error'), the recovery pattern via get_split_run, the instruction to never re-submit the document, and the UNAUTHORIZED/NOT_FOUND handling via get_me. It also notes that materialized child files yield a fileId usable elsewhere. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence contributes: purpose, alternatives, constraints, async behavior, and error handling. It is front-loaded with the core action and use case before moving to operational details. No filler or repeated schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, nested, async tool, the description covers invocation mode selection, config requirements, page-based limitations, async run lifecycle, error recovery, and points to external documentation for the output shape. Nothing essential for an agent to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents splitter/config structure, file id/url exclusivity, environment, and waitSeconds. The main description reinforces the exactly-one-of-splitter-or-config rule and the required type: 'other' entry, but adds little new parameter-level meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Divide a combined file ... into typed segments with page ranges', with concrete examples (scanned bundle of invoices, merged PDF of statements). It also names the two invocation modes (saved splitter or inline config), which differentiates it from downstream parse/extract tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says split_document is the 'right FIRST step' for locating one document in a larger bundle, and advises splitting then parsing/extracting only the relevant segment rather than processing the whole file. It also gives hard constraints: provide exactly one splitter or config, raw text is unsupported, and async runs must be resumed rather than re-submitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_classifierUpdate a classifier's draftADestructiveIdempotentInspect
Update a classifier's mutable draft (classify group): rename it and/or replace the draft config (hand-editing it? call get_documentation with https://docs.extend.ai/classification/configuration.md first). Published versions are immutable and unaffected — runs pinned to them keep working.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Classifier ID (cl_...). | |
| name | No | New display name. | |
| config | No | Replaces the whole DRAFT config. Same shape and rules as config on create_classifier / classify_document. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| createdAt | No | |
| updatedAt | No | |
| draftVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-read-only and destructive, so the description's added value is scoping the mutation: only the draft config/name changes, while published versions and runs pinned to them keep working. This prevents an agent from assuming a destructive update invalidates deployed artifacts. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description packs purpose, scope, and a documentation pointer into two sentences. The parenthetical phrasing ('classify group', 'hand-editing it?') is slightly compressed, but each clause carries information and there is no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a 5-param schema, full schema documentation, an output schema, and annotations, the description covers the only semantic nuance an agent needs: draft-only mutation and published-version immutability. It also points to docs for hand-authored config. Nothing necessary for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description reinforces that name maps to renaming and config maps to replacing the whole draft. It adds a pointer to external documentation for config shape, but does not materially extend what the schema already provides. This is adequate without being strongly additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Update') on a specific resource ('a classifier's mutable draft') and spells out what that means: rename it and/or replace the draft config. The phrase 'Published versions are immutable and unaffected' separates it from publish_classifier_version and related version tools. This is unambiguous even among many update_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tells the agent the operation applies only to the mutable draft, not to published versions, and warns that runs pinned to published versions are unaffected. It also supplies a when-to prerequisite: if hand-editing the config, call get_documentation with the configuration link first. It does not explicitly name a sibling for publishing a new version, but the draft-vs-published distinction is enough to route the call correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_evaluation_itemUpdate an evaluation itemADestructiveIdempotentInspect
Replace one evaluation item's expected output (evaluations group). The file pairing cannot change — delete and re-add for that.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Item ID (evi_...). | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| expectedOutput | Yes | Ground truth matching the evaluated resource type. Extractor sets: { value: { <fields matching the extractor's schema> } }. Classifier sets: { id, type, confidence? } (the winning classification). Splitter sets: { splits: [{ identifier?, classificationId?, startPage, endPage }] }. | |
| evaluationSetId | Yes | Evaluation set ID (ev_...). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| file | Yes | |
| expectedOutput | No | |
| evaluationSetId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and non-read-only behavior; the description adds useful nuance by specifying that only expectedOutput is replaced and that file pairing is immutable. This is compatible with idempotentHint and adds behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: the first states the main action, the second states a critical constraint. No filler, no repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a detailed input schema, annotations, and an output schema available, the description covers the tool's mutation scope and its essential limitation. It could mention side effects more explicitly, but the surrounding structured signals fill most remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema descriptions cover 100% of the 5 parameters, including detailed semantics for expectedOutput, environment, and workspaceId. The description contributes general scope but does not add per-parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Replace'), names the resource ('evaluation item') and the exact field ('expected output'), which clearly differentiates it from sibling tools like add_evaluation_items and delete_evaluation_item. The 'evaluations group' parenthetical and the note about file pairing further narrow the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states what the tool can do (replace expected output) and what it cannot do (change file pairing), and points to delete-and-re-add as the alternative workflow. This gives the agent clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_extractorUpdate an extractor's draftADestructiveIdempotentInspect
Update an extractor's mutable draft (extract group): rename it and/or replace the draft config (hand-editing the schema? call get_documentation with https://docs.extend.ai/extraction/schema.md first). Published versions are immutable and unaffected — runs pinned to them keep working.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Extractor ID (ex_...). | |
| name | No | New display name. | |
| config | No | Replaces the whole DRAFT config. Same shape and rules as config on create_extractor / extract_data. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| createdAt | No | |
| updatedAt | No | |
| draftVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the safety profile is known. The description adds meaningful behavior beyond that: it clarifies that the draft is mutable while published versions are immutable, and that runs pinned to published versions keep working. This addresses a key state-change consequence that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the core action, scope, a documentation pointer, and an important immutability caveat. The key facts are front-loaded ('Update an extractor's mutable draft...'), and there is no filler or repetition of schema contents. The parenthetical about get_documentation is slightly interruptive but earns its place by preventing a common mistake.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with an output schema and informative annotations, the description is nearly complete. It explains the draft/published distinction, the effect on existing runs, and where to find schema reference. It doesn't discuss failure modes or idempotency semantics, but given the rich schema and annotation hints, the description is sufficient for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter (id, name, config, environment, workspaceId) has a clear description. The tool description adds no new parameter-level value beyond what the schema already states, such as 'replaces the whole DRAFT config' and the env/workspace grant requirements. Therefore the baseline score of 3 for fully covered schemas is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific action (update), a precise resource (an extractor's mutable draft/extract group), and the scope of what can be changed (rename and/or replace draft config). It also explicitly distinguishes the draft from published versions, which prevents confusion with publish_extractor_version or get_extractor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this tool is for editing the mutable draft only, and notes that published versions are immutable and unaffected — a useful when-not-to-use boundary. It also advises calling get_documentation before hand-editing the schema, giving practical workflow guidance. It doesn't name alternative siblings explicitly (e.g., create_extractor), but the draft-vs-published contrast is strong enough for most routing decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_splitterUpdate a splitter's draftADestructiveIdempotentInspect
Update a splitter's mutable draft (split group): rename it and/or replace the draft config (hand-editing it? call get_documentation with https://docs.extend.ai/splitting/configuration.md first). Published versions are immutable and unaffected — runs pinned to them keep working.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Splitter ID (spl_...). | |
| name | No | New display name. | |
| config | No | Replaces the whole DRAFT config. Same shape and rules as config on create_splitter / split_document. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| createdAt | No | |
| updatedAt | No | |
| draftVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the safety profile is covered. The description adds useful context: updating replaces the whole draft config, published versions are unaffected, and runs pinned to them keep working. However, it does not disclose what happens if no draft exists yet or what the response contains, so the added value is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste, and the key scope constraint ('mutable draft') is front-loaded. The parenthetical about calling get_documentation is a useful, purpose-driven digression. The sentence is slightly dense due to the parenthetical, but overall it is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with rich annotations, 100% schema coverage, and an output schema, the description covers the essential behavioral aspects: what is mutable, what is not, and a critical pre-step for hand-editing configs. The only notable gap is not explaining whether a draft must already exist before calling this tool. Still, an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters, including the config shape, environment constraints, and workspace requirements. The description adds a small amount of value by clarifying that config replaces the whole draft and by pointing to get_documentation for the config format, but it mostly restates what the schema already says. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb ('Update'), a specific resource ('a splitter's mutable draft'), and the exact scope of the operation: rename and/or replace the draft config. It clearly distinguishes this from publishing by explicitly stating published versions are immutable and unaffected, which differentiates it from the publish_splitter_version sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly says when to use this tool (to mutate the draft, not the published version) and states that published versions are unaffected. It implies the alternative is publish_splitter_version but does not name it explicitly. The guidance is clear enough for an agent to route correctly, though it could explicitly mention the sibling for completeness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_webhook_endpointUpdate a webhook endpointADestructiveIdempotentInspect
Update a webhook endpoint's URL, name, status (enable/disable deliveries), global event list, or advanced options (webhooks group). The signing secret never changes and is not returned.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Webhook endpoint ID (wh_...). | |
| url | No | New HTTPS delivery URL. | |
| name | No | New display name. | |
| status | No | disabled pauses all deliveries. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| enabledEvents | No | Full replacement of the global event list. | |
| advancedOptions | No | { headers?, payload?: { format: "json"|"url", urlThresholdBytes? } } |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| name | No | |
| status | Yes | |
| createdAt | No | |
| apiVersion | No | |
| enabledEvents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint=false, destructiveHint=true, and idempotentHint=true, the description adds the genuinely useful behavioral disclosure that the signing secret never changes and is not returned, and that status toggles deliveries. This does not contradict the annotations, though it does not spell out which specific actions are destructive (e.g., replacing the event list or URL).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both earning their place: the first is a compact, front-loaded summary of scope, and the second delivers a valuable behavioral note. The '(webhooks group)' parenthetical is cryptic and slightly detracts, but there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with a rich schema, annotations, and an output schema, the description covers the purpose and the one non-obvious behavior (secret stability) well. It falls short on explicitly distinguishing this endpoint-update tool from update_webhook_subscription and leaves the '(webhooks group)' notation unexplained, but those gaps are minor given the schema carries the parameter-level detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already documents each parameter. The description's field list largely mirrors the schema and adds only a marginal gloss on status ('enable/disable deliveries'), which the schema states more precisely ('disabled pauses all deliveries').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific verb (update) and resource (webhook endpoint) and enumerates the mutable fields (URL, name, status, global event list, advanced options), which clearly differentiates it from siblings like create_webhook_endpoint, delete_webhook_endpoint, and list_webhook_endpoints. The only slight blemish is the cryptic '(webhooks group)' parenthetical, but it does not obscure the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly name alternatives or give when-to-use/when-not-to-use guidance. Usage is implied only by the verb 'update' and the required id parameter (wh_...), which signals an existing endpoint; an agent must infer the boundary against create_webhook_endpoint and update_webhook_subscription on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_webhook_subscriptionUpdate a webhook subscriptionADestructiveIdempotentInspect
Replace a webhook subscription's event list (webhooks group). The endpoint and watched resource cannot change — delete and recreate the subscription for that.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Subscription ID (whes_...). | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. | |
| enabledEvents | Yes | Full replacement of the subscription's event list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| createdAt | No | |
| resourceId | Yes | |
| resourceType | Yes | |
| enabledEvents | Yes | |
| webhookEndpointId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutating nature of the tool is known. The description adds useful behavioral context by stating that the endpoint and watched resource cannot change, which is a non-obvious constraint beyond the schema. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core operation is front-loaded, and the important limitation plus alternative is provided in the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a complete input schema, an output schema, and annotations covering safety hints, the description fully covers what an agent needs: what the tool updates, what it cannot update, and what to do instead. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the input schema. The description does not add substantial parameter-level detail beyond saying 'event list', but it does clarify that enabledEvents is a full replacement rather than an incremental update. This matches the schema's 'Full replacement' wording, so the value added beyond the schema is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation — replacing a webhook subscription's event list — and clearly scopes it to the webhooks group. It also distinguishes itself from the sibling create_webhook_subscription and delete_webhook_subscription tools by noting that endpoint and watched resource cannot change. This is unambiguous and differentiates the tool from related update tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when this tool is appropriate (replacing the event list) and when it is not (changing the endpoint or watched resource), and gives the alternative: delete and recreate the subscription. This is direct, actionable guidance that prevents an agent from attempting an unsupported update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_workflowUpdate a workflow's draftADestructiveIdempotentInspect
Update a workflow's mutable draft (workflows group): rename it and/or replace the entire draft step graph (hand-editing steps? call get_documentation with https://docs.extend.ai/workflows/configuring-workflows.md first). Deployed versions are immutable and unaffected — runs pinned to them keep working.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Workflow ID (workflow_...). | |
| name | No | New display name. | |
| steps | No | Replaces the whole DRAFT step graph. Step graph (max 100 steps), TRIGGER → PARSE first. Every step needs { type, name }; "name" is REQUIRED and is what other steps route to. Route via next, an ARRAY of objects: linear steps (TRIGGER/PARSE/EXTRACT) use next: [{ step: "<target name>" }]; CLASSIFY/SPLIT branch with next: [{ step, classificationId }] (classificationId = a classification id from the config, not its type). TRIGGER routes to exactly one PARSE. Types: TRIGGER, PARSE, EXTRACT, CLASSIFY, SPLIT, MERGE_EXTRACT, CONDITIONAL, CONDITIONAL_EXTRACT, EXTERNAL_DATA_VALIDATION, WEBHOOK_RESPONSE, RULE_VALIDATION, VALIDATION, ROUTER, HUMAN_REVIEW, COLLECT, FILE_CONVERSION. EXTRACT/CLASSIFY/SPLIT need a config with exactly one of a saved ref or inline config (EXTRACT: config.extractor {id,version} or config.extractorConfig with REQUIRED schema; CLASSIFY: config.classifier {id,version} or config.classifierConfig); next is only allowed once config is set. Classifier/splitter refs can't be "latest" — use semver or "draft". The rules here are a summary — before authoring a step graph by hand, call get_documentation with https://docs.extend.ai/workflows/configuring-workflows.md and follow it. | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| createdAt | No | |
| updatedAt | No | |
| draftVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructiveness, idempotency, and non-read-only behavior. The description adds valuable context: the update replaces the entire draft graph, deployed versions remain unaffected, and pinned runs keep working. This gives the agent a clear mental model of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with purpose and scope. The step-graph authoring details are lengthy but necessary given the open schema. Minor redundancy exists because the get_documentation prerequisite appears twice, but the overall structure earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool, the description covers scope, side effects, prerequisites, step-graph constraints, and routing semantics. An output schema exists, so not explaining return values is acceptable. An agent has enough context to call this tool correctly and avoid common authoring mistakes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the step parameter schema is mostly open (additionalProperties). The description compensates richly: it explains `next` routing arrays, `classificationId`, config refs vs inline configs, step ordering, the 100-step limit, and the restriction on classifier/splitter 'latest' refs. This is far beyond what the schema alone communicates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Update a workflow's mutable draft (workflows group)' and specifies exactly what can be changed ('rename it and/or replace the entire draft step graph'). It also differentiates the tool from deployed-version tools by noting deployed versions are immutable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use conditions (modify the draft before deployment) and when-not-to-use boundaries ('Deployed versions are immutable and unaffected — runs pinned to them keep working'). It also provides a prerequisite: call get_documentation before hand-authoring a step graph.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_fileUpload a file from the user's computerAInspect
Upload a file from the user's computer (files group). Returns a dashboard upload link; uploaded file IDs only become available after the user completes the upload in their browser, so the link should be surfaced to the user before calling get_file_upload with the returned uploadId. The link expires at expiresAt and cannot be re-fetched — call this tool again for a fresh one. Documents already at a public https:// URL can be passed to tools directly without uploading.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | One line shown to the user on the upload page, e.g. "Upload the invoice you mentioned". | |
| maxFiles | No | Max files the user may upload on the page (default 20). | |
| environment | Yes | "TEST" = the Test (development) environment, "PRODUCTION" = live. Must match a granted target from get_me (an API key pins one environment). | |
| workspaceId | Yes | Target workspace (ws_...). Must be a granted workspace — get_me lists the accepted values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | Dashboard upload page for the user to open in a browser. |
| maxFiles | Yes | |
| uploadId | Yes | Pass to get_file_upload to retrieve the uploaded file ids. |
| expiresAt | Yes | When the upload link stops accepting uploads. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important non-obvious behavior beyond the annotations: the upload link expires at expiresAt, cannot be re-fetched, and a fresh one requires calling this tool again. It also discloses that file IDs become available only after the user completes the browser upload, which is essential for correct agent behavior. This goes well beyond the read/idempotent/destructive hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence adds critical operational information: the core action, the asynchronous browser step, the expiry/non-refetch behavior, and the public-URL alternative. It is front-loaded with the main purpose and stays within a compact length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that depends on a user-side browser action, the description is complete: it explains the returned link, the uploadId timing, expiry, re-fetch behavior, and when not to use the tool. An output schema exists, so return-value detail is not the description's burden, and the description still names the key returned fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all four parameters with 100% coverage, including the environment enum, workspace ID format, message purpose, and maxFiles default. The description does not add parameter-level detail, but with complete schema coverage the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Upload a file from the user's computer' and distinguishes this tool from get_file_upload by explaining the upload-link flow and the later retrieval step. It is unambiguous and clearly not a generic file retrieval or listing operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool (files from the user's computer) and gives a concrete alternative: public https:// documents can be passed directly to tools without uploading. It also explains the required sequencing with get_file_upload, telling the agent to surface the link before calling that sibling.
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 tool update
- Changed
edit_pdf2 fields changed- added
Input schema / properties / templateIdAdded value: +{ + "description": "ID of a saved edit template to use instead of file; instructions/schema/advancedOptions below override the template's values when provided.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "workspaceId", - "environment", - "file" -]New value: +[ + "workspaceId", + "environment" +]
48 tool updates
- Changed
classify_document1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
detect_form_fields1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
edit_pdf1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
extract_data1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
get_classify_batch1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
get_classify_run1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
get_documentation2 fields changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -} - added
Output schema / properties / truncated / descriptionAdded value: +"true when the page was cut at a section boundary to fit the budget; url has the full page."
- Changed
get_edit_run1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
get_evaluation_run1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
get_extract_batch1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
get_extract_run1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
get_file_upload5 fields changed- changed
Input schema / properties / uploadId / descriptionPrevious value: -"Upload session id (upl_...) from request_file_upload."New value: +"Upload session id (upl_...) from upload_file." - added
Output schema / properties / expiresAt / descriptionAdded value: +"Present while pending: when the link stops accepting uploads." - added
Output schema / properties / files / descriptionAdded value: +"Present once completed: the uploaded file ids." - removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -} - added
Output schema / properties / status / descriptionAdded value: +"pending | completed | expired | cancelled"
- Changed
get_form_detection_run1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
get_parse_batch1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
get_parse_run2 fields changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -} - added
Output schema / properties / truncated / descriptionAdded value: +"true when markdown was cut at maxChars; re-call with pageRange or rawBlocks for the rest."
- Changed
get_split_batch1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
get_split_run1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
get_workflow_run2 fields changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -} - added
Output schema / properties / retryableAdded value: +{ + "description": "Present on FAILED runs: true when the failureReason is usually transient and one retry is reasonable.", + "type": "boolean" +}
- Changed
list_classifier_versions1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_classifiers1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_classify_runs1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_evaluation_items1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_evaluation_sets1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_extract_runs1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_extractor_versions1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_extractors1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_files1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_parse_runs1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_split_runs1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_splitter_versions1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_splitters1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_webhook_endpoints1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_webhook_subscriptions1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_workflow_runs1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_workflow_versions1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
list_workflows1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
parse_document2 fields changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -} - added
Output schema / properties / truncated / descriptionAdded value: +"true when markdown was cut at maxChars; re-call with pageRange or rawBlocks for the rest."
- Removed
request_file_upload - Changed
run_classify_batch1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
run_evaluation1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
run_extract_batch1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
run_parse_batch1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
run_split_batch1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
run_workflow2 fields changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -} - added
Output schema / properties / retryableAdded value: +{ + "description": "Present on FAILED runs: true when the failureReason is usually transient and one retry is reasonable.", + "type": "boolean" +}
- Changed
run_workflow_batch1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
search_documentation1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Changed
split_document1 field changed- removed
Output schema / properties / llmContextRemoved value: -{ - "type": "string" -}
- Added
upload_file
1 tool update
- Changed
edit_pdf1 field changed- changed
Input schema / properties / advancedOptions / descriptionPrevious value: -"{ flattenPdf?, tableParsingEnabled?, radioEnumsEnabled?, nativeFieldsOnly?, conditionalGenerationEnabled? }"New value: +"{ flattenPdf?, preserveSignatureValidity?, tableParsingEnabled?, radioEnumsEnabled?, nativeFieldsOnly?, conditionalGenerationEnabled? }. preserveSignatureValidity defaults to false. When enabled on signed or append-only PDFs, fills existing compatible fields using extend_edit:source_acroform.fieldName or matching schema field names. Missing text, choice, checkbox, and table fields are skipped. New signatures may still be added where permitted. Defaults flattenPdf to false; flattening signed or append-only PDFs is not supported in this mode. Requires Edit engine 1.0.0-beta or later."
86 tool updates
- First observed
add_evaluation_items - First observed
cancel_classify_run - First observed
cancel_extract_run - First observed
cancel_split_run - First observed
cancel_workflow_run - First observed
classify_document - First observed
create_classifier - First observed
create_evaluation_set - First observed
create_extractor - First observed
create_splitter - First observed
create_webhook_endpoint - First observed
create_webhook_subscription - First observed
create_workflow - First observed
delete_classify_run - First observed
delete_edit_run - First observed
delete_evaluation_item - First observed
delete_extract_run - First observed
delete_file - First observed
delete_parse_run - First observed
delete_split_run - First observed
delete_webhook_endpoint - First observed
delete_webhook_subscription - First observed
delete_workflow_run - First observed
deploy_workflow_version - First observed
detect_form_fields - First observed
edit_pdf - First observed
extract_data - First observed
get_classifier - First observed
get_classify_batch - First observed
get_classify_run - First observed
get_documentation - First observed
get_edit_run - First observed
get_evaluation_run - First observed
get_extract_batch - First observed
get_extract_run - First observed
get_extractor - First observed
get_file - First observed
get_file_upload - First observed
get_form_detection_run - First observed
get_me - First observed
get_parse_batch - First observed
get_parse_run - First observed
get_split_batch - First observed
get_split_run - First observed
get_splitter - First observed
get_workflow - First observed
get_workflow_run - First observed
list_classifier_versions - First observed
list_classifiers - First observed
list_classify_runs - First observed
list_evaluation_items - First observed
list_evaluation_sets - First observed
list_extract_runs - First observed
list_extractor_versions - First observed
list_extractors - First observed
list_files - First observed
list_parse_runs - First observed
list_split_runs - First observed
list_splitter_versions - First observed
list_splitters - First observed
list_webhook_endpoints - First observed
list_webhook_subscriptions - First observed
list_workflow_runs - First observed
list_workflow_versions - First observed
list_workflows - First observed
parse_document - First observed
publish_classifier_version - First observed
publish_extractor_version - First observed
publish_splitter_version - First observed
request_file_upload - First observed
run_classify_batch - First observed
run_evaluation - First observed
run_extract_batch - First observed
run_parse_batch - First observed
run_split_batch - First observed
run_workflow - First observed
run_workflow_batch - First observed
search_documentation - First observed
split_document - First observed
update_classifier - First observed
update_evaluation_item - First observed
update_extractor - First observed
update_splitter - First observed
update_webhook_endpoint - First observed
update_webhook_subscription - First observed
update_workflow
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.167 npm1MIT
- AlicenseCqualityAmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs119 npm49 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceEnables tracking competitor websites, changelogs, blog feeds, and pricing pages with meaningful diffs, classification, and Markdown digests via MCP tools for listing, adding, removing competitors, running checks, and retrieving digests or changes.MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.