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
- Unhealthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
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. Follow any llmContext guidance included in results.
| 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 convey write behavior and non-idempotency. The description adds meaningful behavioral context beyond annotations: it requires already-uploaded files, enforces a batch size limit, clarifies that items are ground-truth pairings, and instructs the agent to follow llmContext guidance in results. This is useful, non-redundant behavioral 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 two sentences with no fluff. It front-loads the core action and batch constraint, then explains the item structure, and closes with an actionable instruction about llmContext. 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 the detailed schema, output schema, and annotations, the description provides sufficient context for correct invocation. It covers batch limits, item composition, and response-related guidance. It could theoretically warn about environment pinning or duplicate handling, but those are already addressed or inferable from the schema.
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 100% coverage with detailed descriptions for every parameter, including nested expectedOutput formats. The description adds only general framing ('ground-truth examples', 'already-uploaded file') without introducing new parameter-level meaning, so a 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 clearly states the tool's function: bulk-add ground-truth examples to an evaluation set. It specifies the resource ('evaluation set'), the action ('bulk-add'), and the content of each item (file + expected output), making it easy to distinguish from sibling tools like run_evaluation or list_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 description establishes clear usage context: adding ground-truth examples in batches of 1-100, pairing uploaded files with expected outputs. It does not explicitly name alternatives or exclusions, but the purpose is clear enough that an agent can infer when to use it versus update_evaluation_item or delete_evaluation_item.
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. Follow any llmContext guidance included in results.
| 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?
Beyond the annotations (destructive, idempotent, open-world), the description discloses best-effort cancellation behavior, the possibility that a finishing run may still complete, and the need to follow llmContext guidance in results. This adds meaningful behavioral context that annotations alone do not 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 two sentences long, front-loads the core action, and every sentence adds value: the scope, the best-effort caveat, and the llmContext instruction. There is 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?
With a complete parameter schema, an output schema present, and annotations indicating destructive/idempotent behavior, the description covers the essential operational semantics: what can be canceled, the best-effort outcome, and the finishing-race caveat. Nothing critical is missing for making the call 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 documents all three parameters thoroughly, including source of runId, enum constraints on environment, and workspace restrictions. The description itself adds no additional parameter-level detail, 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 uses a specific verb ('Cancel') and resource ('classify run'), and further specifies the scope as 'queued or in-flight'. This clearly distinguishes it from siblings like cancel_extract_run or delete_classify_run, at least by domain and operation intent.
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 cancellation applies ('queued or in-flight') and a practical caveat ('a run already finishing may still complete'). It does not explicitly name alternatives such as delete_classify_run or other cancel_* tools, but the scope is clear enough for an agent to select this tool appropriately.
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. Follow any llmContext guidance included in results.
| 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?
Beyond the annotations, the description discloses best-effort cancellation behavior ('a run already finishing may still complete') and instructs the agent to follow dynamic llmContext guidance. This adds meaningful behavioral context that the annotations alone do not 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?
Three short sentences, each earning its place: purpose, behavioral caveat, and open-world guidance. 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?
The combination of annotations, full schema coverage, and the description's best-effort caveat makes this complete for an agent to call correctly. It could be even stronger by explicitly contrasting with delete_extract_run, but that is not a significant gap for this low-complexity cancellation 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 description coverage is 100%, so the parameters are already well-documented. The description adds no additional parameter-level semantics, which is acceptable because the schema carries the full 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?
The description states a specific verb ('Cancel'), a specific resource ('extract run'), and clarifies the scope ('queued or in-flight'). It also adds the useful alias 'extract group', which helps disambiguate from related run-management tools like 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 explicitly says the tool applies to queued or in-flight runs, giving clear conditions for when it is appropriate. It does not explicitly name alternatives like delete_extract_run or other cancel_* siblings, but the resource and state scoping make the intended usage clear.
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. Follow any llmContext guidance included in results.
| 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 meaningful behavior beyond annotations: it says cancellation is best-effort and that a run already finishing may still complete, and it instructs the agent to follow llmContext guidance in results. This complements the destructiveHint and idempotentHint 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?
Two tight sentences deliver the core action, scope, caveat, and a follow-up instruction. No filler or redundant restatement 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 cancellation operation, the description covers the state eligibility, best-effort semantics, and result-related guidance. Output schema and parameter schema handle the remaining details, making this complete.
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 referencing workspace grants and the run ID source. The tool description does not need to add parameter details, so 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 ('Cancel') and resource ('split run'), and clarifies scope with 'queued or in-flight' and 'split group'. This clearly distinguishes it from sibling cancel_* tools that target other resource types.
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 this applies to queued or in-flight runs and notes best-effort behavior. It does not explicitly name alternatives such as delete_split_run or state when not to use this tool, but the context is sufficient for most selection decisions.
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. Follow any llmContext guidance included in results.
| 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 carry the safety profile (destructiveHint=true, readOnlyHint=false, idempotentHint=true), and the description adds genuinely new behavioral context: the best-effort race condition where an already-finishing run may still complete, plus the instruction to follow llmContext guidance in results. No contradiction with annotations — the best-effort note is consistent with idempotentHint=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 sentences with the action and scope front-loaded, the sibling disambiguator in a tight parenthetical, and the best-effort caveat immediately after. The llmContext instruction is short and non-redundant with the schema or annotations; no filler survives.
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 covers return values, annotations cover the destructive/idempotent profile, and the schema covers all three parameters, so the description only needed to handle applicability and edge behavior — which it does via the queued/in-flight scope and best-effort disclosure. Minor gap: it doesn't discuss downstream effects of canceling (e.g., dependent runs or webhook notifications), but nothing critical is missing for this complexity.
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 of 3 applies. All three parameters (runId, environment, workspaceId) are already documented with provenance ('The run ID from run_workflow') and validation rules ('Must match a granted target from get_me'), so the description need not add parameter detail.
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 ('Cancel') and a precise resource ('a queued or in-flight workflow run'). The parenthetical '(workflows group)' disambiguates it from sibling cancelers cancel_classify_run, cancel_extract_run, and cancel_split_run, and the cancel-vs-delete verb distinction separates it from delete_workflow_run without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'queued or in-flight' qualifier gives clear context for when this tool applies, and the best-effort caveat ('a run already finishing may still complete') marks the applicability boundary. However, it never explicitly names alternatives (e.g., delete_workflow_run for finished runs) or states when not to cancel, so some routing 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.
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. Creates a classify run: may return status: "running" with a runId — normal, not an error; poll it with get_classify_run. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | 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 key side effect beyond what annotations provide: 'Creates a classify run' and the async contract — 'may return status: "running" with a runId — normal, not an error; poll it with get_classify_run.' It also states the return essence (winning type with confidence) and instructs the agent to follow llmContext guidance, which is valuable operational context not present in 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 four dense sentences with no filler: purpose, input selection, config constraints, and async behavior each earn their place. It is front-loaded with the primary purpose and then adds only high-value operational details, making it appropriately sized for a complex 9-parameter tool.
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 annotations, the description covers the remaining essentials: document input via examples, classifier vs config choice, fallback rules, async status and polling, and llmContext handling. Nothing needed to invoke the tool or follow up on the created run 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, which establishes a baseline of 3. The description reinforces important constraints like exactly-one-of classifier/config and inline config fallback rules, but these same constraints already appear in the schema property descriptions, so the description adds little new parameter-level meaning.
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 concrete verb and resource: 'Categorize a document into one of a set of types,' and gives concrete examples (MSA vs SOW vs NDA) that clearly differentiate classification from sibling operations like extract or parse. It also establishes the single-document action by describing a classify run and polling with get_classify_run, distinguishing it from batch, list, and get 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?
The description gives explicit selection guidance for the main input modes: 'Provide exactly one of classifier or config,' plus clear rules for inline config (fallback type 'other' and unique ids). It does not explicitly name sibling alternatives such as run_classify_batch or create_classifier, so the guidance is clear for internal choices but not fully framed against sibling tools.
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. Follow any llmContext guidance included in results.
| 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?
Annotations provide only readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false. The description goes well beyond these: it reveals that the draft is the only mutable surface, that name alone yields an empty draft, that there is no generate-mode fallback, and that llmContext guidance in results should be followed. 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, creation modes with prerequisite, exclusion, lifecycle routing, and result guidance. It is front-loaded with the core purpose. It loses a point for density — the mutually exclusive modes and lifecycle routing are packed into long clauses that would be more scannable as bullets or separate sentences.
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, nested-object creation tool, the description covers the full decision space: how to start (config, clone, or name-only), what not to do (no generate mode), what happens next (update/publish/run), and where to get authoritative config docs. An output schema exists, so return-value explanation is unnecessary. 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?
Schema coverage is 100%, so the baseline is 3. The description adds real value on top: the mutual exclusivity of config vs cloneClassifierId (not stated in the schema), the 'name alone creates an empty draft' default that explains what happens when both optional params are omitted, and the confirmation that generate-mode is absent. This justifies a 4.
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+resource: 'Create a saved, reusable classifier (classify group)'. It distinguishes itself from sibling creation tools (create_extractor, create_splitter, create_workflow) by scoping to classifiers and further clarifies the creation step from lifecycle siblings: 'edit it with update_classifier, freeze it with publish_classifier_version, run it with classify_document'.
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 states the two valid creation modes and their exclusivity: 'Start from config ... or cloneClassifierId ... — mutually exclusive'. It gives a prerequisite ('call get_documentation ... before hand-authoring one'), an exclusion ('There is no generate mode (extractors only)'), and a default behavior ('name alone creates an empty draft'). An agent knows exactly when and how 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.
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). Follow any llmContext guidance included in results.
| 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 already provide readOnlyHint=false, idempotentHint=false, and destructiveHint=false, but the description adds meaningful behavioral context: the set is scoped to exactly one entity, belongs to the evaluations group, and participates in a multi-step iteration workflow. The instruction to follow llmContext guidance also signals behavior that is not encoded in the schema. It could go slightly deeper into side effects or lifecycle expectations, but this is strong coverage.
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 longer than average but every section earns its place: definition, iteration loop, onboarding pointer, and result-handling instruction. It is front-loaded with the core definition and then layers workflow context. A little trimming could improve scannability, but overall it is well-structured and 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, the description is complete: it explains the tool's role in the evaluation workflow, documents prerequisites and next steps, and relies on a fully described schema and output schema for parameter and return details. An agent has everything needed to select and 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 schema already documents all parameters well. The description adds the meaningful scoping nuance that entityId must identify a single extractor, classifier, or splitter, but it mostly relies on the schema's rich parameter descriptions. This meets the baseline for fully covered schema 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: 'Create an evaluation set — a named collection of ground-truth examples scoped to ONE extractor, classifier, or splitter via entityId (evaluations group).' This precisely distinguishes the tool from related tools like add_evaluation_items, list_evaluation_sets, and run_evaluation. The resource scope and group context are immediately clear.
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 lays out the full iteration loop: create a set → add items with add_evaluation_items → publish a new version → run_evaluation → read metrics with get_evaluation_run. It also directs new users to call get_documentation first with a specific URL. This gives an agent clear when-to-use and next-step guidance beyond what the schema conveys.
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. Follow any llmContext guidance included in results.
| 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?
Annotations only signal general side-effect hints (not read-only, not idempotent, not destructive); the description adds the key behavioral model: creation always results in a draft, the draft is the only mutable surface, and the three starting points are mutually exclusive. It also introduces the custom llmContext guidance behavior, which is not visible in 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 but tightly written: the first sentence front-loads the three mutually exclusive modes, and later sentences cover the lifecycle and a non-obvious result behavior. Every sentence earns its place for a tool with six parameters and nested objects.
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 captures the creation modes, required prerequisites for hand-written schemas, and the follow-up workflow; with a rich input schema, output schema, and annotations already covering the rest, nothing critical is missing. It even mentions the unusual llmContext instruction behavior that an agent would otherwise miss.
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 coverage, the schema already documents each parameter, so the baseline is 3. The description adds relational semantics not in the schema: config/cloneExtractorId/generate are mutually exclusive, name alone yields an empty draft, and generate requires no schema docs. This is genuinely useful supplementary meaning, but the description still leans on the schema for individual property details.
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 extractor (extract group).' It distinguishes this tool from sibling create_* tools by naming the extractor domain and the three creation modes, so an agent can tell create_extractor from create_classifier or create_splitter 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 explicitly covers when to use each mode: config with get_documentation first, cloneExtractorId for copying, generate for sample documents, and name alone for an empty draft. It then routes the agent through the lifecycle (update_extractor, publish_extractor_version, extract_data), which prevents misuse and makes the tool's role in the workflow explicit.
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. Follow any llmContext guidance included in results.
| 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 only declare write/non-idempotent/non-destructive/open-world traits; the description adds the substantive behavioral detail: creation produces a mutable draft ('the only mutable surface'), name-only yields an empty draft, and results may carry llmContext guidance that should be followed. All claims are consistent with annotations — readOnlyHint=false aligns with a create operation, so there is 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?
The description is dense but tightly packed: the core purpose is front-loaded in the first clause, and every subsequent clause — init modes, mutual exclusivity, lifecycle, llmContext note — carries distinct operational value. There is no filler, no restatement of the title, and no repetition of schema content beyond the single cloneSplitterId overlap.
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 open-world creation tool with an output schema to cover return values, the description provides everything an agent needs: the three initialization paths, the decision rule between them, the full lifecycle of the created artifact, and the llmContext operational warning. The environment/workspaceId constraints are fully handled by the schema's own descriptions, 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?
With 100% schema coverage the baseline is 3, but the description adds real value: the mutual-exclusivity constraint between config and cloneSplitterId is absent from the schema, the pointer to get_documentation for hand-authoring configs gives construction guidance, and 'name alone creates an empty draft' ties the name parameter to a default behavior. Minor redundancy with cloneSplitterId's existing schema description keeps it one notch below perfect.
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 saved, reusable splitter (split group)', a specific verb+resource statement that clarifies both the action and what a splitter is (a saved, reusable split group). It also establishes the crucial draft-versus-published distinction, which differentiates this tool from siblings like publish_splitter_version and other create_* 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 gives explicit init-mode guidance: 'Start from config ... or cloneSplitterId ... — mutually exclusive; name alone creates an empty draft' tells the agent exactly how to choose between the three input paths. It then names the exact alternatives for the follow-on workflow: 'edit it with update_splitter, freeze it with publish_splitter_version, run it with split_document.'
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. Follow any llmContext guidance included in results.
| 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?
Goes far beyond the annotations, disclosing that signingSecret is only returned on this call and cannot be retrieved later, the exact HMAC-SHA256 verification scheme, and the 5-minute timestamp rejection window. It also warns that enabledEvents are workspace-global with a validation constraint. No contradiction with annotations — readOnlyHint=false, idempotentHint=false, and openWorldHint=true all align with a stateful create operation that has external 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?
Long but earned — every sentence carries either a critical caveat (one-time secret), a security contract (HMAC verification), a routing rule (subscription vs endpoint), or a documentation pointer. The CRITICAL warning is front-loaded right after the purpose sentence. Minor deductions for the somewhat run-on enabledEvents sentence and the trailing llmContext advice, which could be tightened.
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 creation tool with nested objects and a close sibling, this is remarkably complete: the one-time secret, the verification contract, the event-scoping trap, and an escape hatch to documentation are all present. The output schema covers the response structure, so the description doesn't need to explain return values. 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 schema already covers all 8 parameters at 100%, so the baseline is 3. The description adds genuine meaning for the trickiest parameter, enabledEvents, by explaining the workspace-global vs resource-scoped distinction that the schema only gestures at, and by naming the subscription tool that handles the rejected event types. Other parameters need nothing more, but the description adds per-parameter value only for this one.
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?
Opens with a specific verb and resource — 'Register an HTTPS URL to receive Extend events' — and immediately names the webhooks group. It also distinguishes itself from its closest sibling, create_webhook_subscription, by explaining which event types each handles, so an agent can tell them apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when NOT to use this tool: resource-run events such as workflow_run.completed are rejected here and must go to create_webhook_subscription, including the exact two-step workflow (create endpoint with [], then subscribe). It also routes manual setup to get_documentation with a concrete URL. This is textbook when-to-use guidance with a named alternative.
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). Follow any llmContext guidance included in results.
| 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 establish readOnly=false, idempotent=false, and destructive=false, so the description only needs to add context beyond those. It adds the scoping guarantee that 'deliveries for other resources are unaffected' and points to external docs for event catalogs. It does not discuss duplicate-subscription behavior, but that is partially covered by the idempotentHint.
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 core action is front-loaded in the first sentence, and the alternative is clearly stated in the second. The configuration-rules sentence is longer but earns its place by providing the required documentation URLs and llmContext instruction.
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?
Despite six required parameters, the description covers scope, when to use it, and a mandatory documentation prerequisite. An output schema exists to describe return values, and the input schema fully covers parameter formats, so no critical calling 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 description coverage is 100%, so the baseline is 3. The description's mention of 'ONE specific extractor, classifier, splitter, or workflow' aligns with resourceType and resourceId, but it adds no syntax, format, or allowed-value detail beyond what the input 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 specific verb ('Subscribe') with a clear object: an existing webhook endpoint receiving events from ONE extractor, classifier, splitter, or workflow. It also distinguishes the tool from global enabledEvents behavior, so an agent can tell this apart from a global webhook configuration 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?
It explicitly says 'Use this instead of global enabledEvents when only some resources matter,' giving both a condition and an alternative. It also instructs the agent to call get_documentation with a specific configuration URL first and to follow any llmContext guidance, which is concrete operational guidance.
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. Follow any llmContext guidance included in results.
| 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 communicate readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the description's value is additive. It discloses that the created draft is the only mutable surface, outlines the workflow lifecycle, and directs the agent to follow llmContext guidance in results. 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?
Each of the four sentences earns its place: definition, creation modes, lifecycle, and result-context instruction. The stage-flow shorthand (parse → extract/classify/split → validations → human review) is compact and informative, though the second sentence is dense enough that a slight split would improve readability.
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 high-complexity tool with an output schema, the description covers creation modes and lifecycle, and deliberately defers deep step-graph authoring rules to a linked documentation call. The steps-param routing rules live in the schema, and return values are covered by the output schema, so nothing critical for 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 baseline is 3 — the schema already documents all four parameters. The description adds cross-parameter semantics that isolated property descriptions cannot convey: name alone creates an empty draft, while steps builds the graph eagerly. This is meaningful supplemental meaning.
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 concrete verb-object pair ('Create a workflow') and clarifies what the resource is — a multi-step document pipeline with a specific stage flow (parse → extract/classify/split → validations → human review). It also distinguishes itself from lifecycle siblings like update_workflow, deploy_workflow_version, and run_workflow, so the agent can pick the right 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?
It explicitly contrasts the two creation modes — name alone yields an empty draft, while steps builds the graph eagerly — and instructs the agent to call get_documentation with a specific URL before hand-authoring a step graph. It also names the alternatives for subsequent operations (update_workflow, deploy_workflow_version, run_workflow), giving clear when-and-when-not context.
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. Follow any llmContext guidance included in results.
| 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 carry the safety profile (destructiveHint=true, readOnlyHint=false), and the description adds value beyond them by disclosing exactly what gets destroyed ('stored outputs (classify group)'), irreversibility ('Cannot be undone'), and an unusual operational instruction to follow llmContext guidance in results. No contradiction with annotations — idempotentHint=true is consistent with an irreversible delete, and openWorldHint=true aligns with the cascading deletion scope.
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 with zero filler: the core action is front-loaded, followed by the irreversibility warning, then the llmContext instruction. Each sentence carries distinct information 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?
With an output schema covering return values, rich parameter documentation, and annotations covering the safety profile, the description only needs to add behavioral facts — which it does (cascade scope, irreversibility, llmContext note). The one notable omission is the destructive-vs-cancel decision context, but an agent otherwise has what it needs 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 coverage is 100%, and the schema descriptions are rich: runId cites classify_document as provenance, environment explains the get_me API-key environment pinning, and workspaceId states the ws_... format plus the grant requirement. The tool description itself adds nothing parameter-specific, so the baseline 3 for high schema coverage 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+resource: 'Permanently delete a classify run and its stored outputs (classify group).' This clearly differentiates it from sibling delete_*_run tools (delete_extract_run, delete_split_run, delete_parse_run) by naming the exact resource type. The addition of the cascading 'classify group' scope makes the action precise with no 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?
No guidance is given on when to use this versus cancel_classify_run, which is the natural alternative for stopping or discarding a run without permanently destroying it and its outputs. The 'Cannot be undone' warning conveys stakes but not selection criteria, and the llmContext note concerns post-call behavior rather than tool choice. Given the sibling set contains both cancel_*_run and delete_*_run variants, the missing differentiation is a substantive gap.
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. Follow any llmContext guidance included in results.
| 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 declare destructiveHint=true and readOnlyHint=false, and the description adds valuable behavioral context: deletion is permanent, stored outputs are included in the deletion scope, and llmContext guidance should be followed. 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?
Three short, purposeful sentences: the first states the action and object, the second the key irreversible consequence, and the third an operational instruction. There is no filler or redundant restating of the title or annotations.
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 destructive tool with a rich input schema and an output schema, the description covers all essential behavioral caveats: permanence, scope of deletion, and the llmContext instruction. The output schema handles return-value expectations, so 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%, with all three parameters documented in detail, including the environment enum and granted workspace constraints. The description itself offers only minimal parameter-related context, but the schema carries the burden, 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?
The description uses a specific verb and resource: it 'permanently delete[s] an edit run and its stored outputs (edit group)'. This clearly distinguishes it from the many delete_* siblings that target other run types, 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 clearly establishes the use case: deleting an edit run. It also provides a caution ('Cannot be undone') that helps an agent confirm destructive intent. It does not explicitly name alternatives, but the sibling set shows no overlapping edit-run deletion tool, so the usage context is effectively 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. Follow any llmContext guidance included in results.
| 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 and readOnlyHint false, and the description adds important non-obvious behavior: deletion is permanent, cannot be undone, and past run metrics are unaffected. This goes beyond the structured hints and clarifies the side-effect profile for a destructive 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 short and front-loaded: the first sentence states the core purpose and the second states the key side effect. Minor redundancy exists between 'Permanently remove' and 'This cannot be undone,' and the final instruction about llmContext guidance is vague and less directly useful for tool invocation.
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 annotations covering the destructive safety profile, the description adds the essential non-obvious facts: permanence, irreversibility, and metric preservation. The instruction to follow llmContext guidance hints at handling result-provided context, though it remains somewhat unclear.
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 repeats domain concepts like 'ground-truth item' and 'evaluation set' but does not add ID formats, environment constraints, or value semantics 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 first sentence names a specific action ('Permanently remove'), a specific resource ('one ground-truth item'), and the containing context ('evaluation set (evaluations group)'). This clearly distinguishes the tool from sibling delete_* tools and from update_evaluation_item by focusing on item-level removal.
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 such as update_evaluation_item or add_evaluation_items, but it supplies clear decision-relevant context: the operation is permanent and past run metrics remain unaffected. This lets an agent infer that the tool is for removing items without altering historical evaluation results.
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. Follow any llmContext guidance included in results.
| 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?
No annotations are provided, so the description carries the full burden, and it delivers the essential behavioral facts for a destructive operation: the deletion is permanent, it cascades to stored outputs (extract group), and it cannot be undone. The llmContext instruction adds procedural context. Minor gaps, such as permissions and whether a running run can be deleted, remain.
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 with no wasted words. The primary purpose and destructive scope are front-loaded, the irreversibility warning immediately follows, and the llmContext note is a single compact closing sentence. 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 destructive tool with no annotations and no output schema, the description discloses the critical facts (permanence, cascading deletion). However, it omits state prerequisites (e.g., whether a run must be canceled before deletion), what the response contains, and how this relates to the extract group lifecycle. Adequate but with clear 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?
Schema coverage is effectively 100%: workspaceId, environment, and runId all have descriptions, including the runId provenance ('The run ID from extract_data') and the environment-API-key pinning constraint. Per the baseline rule, the description need not re-explain parameters, and it doesn't.
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 (delete) and resource (extract run), and expands scope by naming what else is affected ('stored outputs (extract group)'). The resource naming 'extract run' distinguishes it from the sibling delete_classify_run, delete_split_run, and delete_workflow_run tools without requiring schema inspection.
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 when-to-use, when-not-to-use, or alternative guidance is provided. Critically, the sibling cancel_extract_run exists and stops a run without deleting it; the description never clarifies when an agent should cancel versus permanently delete. 'Cannot be undone' is a caution, not usage direction.
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. Follow any llmContext guidance included in results.
| 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?
The description goes well beyond the annotations by explaining that runs which already processed the file retain their outputs, while the file's bytes and parsed contents are destroyed, and that the operation cannot be undone. This discloses important irreversible consequences 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?
The description is compact, direct, and front-loaded with the core purpose. Every sentence adds value: the action, the preservation of run outputs, the irreversibility, and the operational instruction about llmContext guidance. No fluff 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 destructive single-resource operation with three fully documented required parameters and an output schema available, the description covers what an agent needs to know: scope, side effects, irreversibility, and a non-obvious follow-up instruction about llmContext. 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 provides 100% coverage with detailed descriptions for all three parameters (fileId, environment, workspaceId). The description adds no additional parameter-level meaning, so the baseline score 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 and resource: 'Permanently delete an uploaded file from Extend (files group).' This clearly distinguishes it from sibling tools that delete runs, webhooks, or subscriptions, and leaves no ambiguity about what action is performed.
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 the tool's purpose clear and implies it should be used when permanently removing an uploaded file is intended. It does not explicitly contrast with alternatives like get_file or list_files, but the file-specific deletion scope is enough to route an agent to the correct tool among the many delete_* siblings.
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. Follow any llmContext guidance included in results.
| 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 mark the tool as destructive and idempotent, and the description adds meaningful context beyond them: the deletion is permanent, cannot be undone, and removes stored outputs (the parse group). The instruction to follow any llmContext guidance in results is an additional behavioral detail. 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?
The description is three short sentences with no filler. It front-loads the core action and affected resources, then the key consequence, then the operational follow-up instruction. 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 destructive tool with a full input schema, an output schema, and annotation flags, the description is complete. It tells the agent what is deleted, that the action is irreversible, what exactly is destroyed, and that llmContext guidance in results should be followed. 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 input schema fully documents runId, environment, and workspaceId, including the environment enum and granted-workspace requirements. The description adds no parameter-specific meaning, which is acceptable given the high schema coverage; 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, resource, and affected object: 'Permanently delete a parse run and its stored outputs (parse group).' It clearly distinguishes this tool from sibling delete_*_run tools by naming the parse-specific run and its associated parse group, and the 'Cannot be undone' warning reinforces the operation's 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?
No explicit guidance is given for when to choose this tool over alternatives or when not to use it. The 'Cannot be undone' warning implies caution, but it does not state conditions, prerequisites, or compare this with other run lifecycle tools like cancellation or listing. The instruction to follow llmContext guidance concerns post-call behavior, not tool selection.
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. Follow any llmContext guidance included in results.
| 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?
Annotations already mark the tool as destructive, but the description adds meaningful specifics: deletion is permanent, stored outputs are removed, and any llmContext guidance in results should be followed. This goes beyond the generic destructiveHint and gives an agent actionable 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?
Three short sentences, each earning its place: the action and scope, the irreversibility warning, and the operational instruction about llmContext. 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?
For a simple irreversible delete operation with full schema coverage and annotations, the description is largely complete. A small gap: it does not explicitly mention cancel_split_run as the non-destructive alternative, which would make the decision context fully complete.
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 explains its meaning and constraints. The description does not need to repeat parameter details, 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 opens with a specific verb and resource: 'Permanently delete a split run and its stored outputs (split group).' This clearly distinguishes the tool from siblings like get_split_run, list_split_runs, and especially 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 wording 'Permanently delete' and 'Cannot be undone' implies the tool is for irreversible deletion, but the description never explicitly says when to use it versus cancel_split_run or when not to use it. Usage context is implied 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_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. Follow any llmContext guidance included in results.
| 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?
The description goes well beyond the destructiveHint annotation by disclosing the permanent nature, cascade deletion of subscriptions, immediate delivery stop, and irreversibility. It also includes an instruction to follow llmContext guidance. This adds meaningful behavioral context that annotations alone do not 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 compact and front-loaded with the core action, followed by essential warnings. The final instruction about llmContext is somewhat generic but not harmful. It avoids unnecessary elaboration while covering key behavioral 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 simple delete operation with an output schema, annotations, and detailed parameter documentation, the description covers all critical operational concerns: permanence, cascading effects, and immediate impact. Nothing essential 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 description coverage is 100%, and the schema already details each parameter including ID format, environment restrictions, and workspace constraints. The description adds no additional parameter-level meaning, so the baseline score 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 states a specific verb and resource: 'Permanently delete a webhook endpoint', which distinguishes it from related siblings like create_webhook_endpoint, update_webhook_endpoint, and delete_webhook_subscription. The 'webhooks group' qualifier adds context 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 provides clear context that deleting an endpoint also deletes all attached subscriptions, implying this tool should be used when the entire endpoint should be removed. It doesn't explicitly name alternatives like delete_webhook_subscription, but the cascade behavior makes the scope clear enough for an agent to choose correctly.
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. Follow any llmContext guidance included in results.
| 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 this as destructive, but the description adds important behavioral context: the deletion is permanent, cannot be undone, and does not affect the endpoint or its global events. It also instructs the agent to follow llmContext guidance included in results, which is useful operational direction.
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 short sentences with no filler. Each sentence earns its place: deleting the subscription, scoping the side effects, emphasizing irreversibility, and providing follow-up 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?
For a destructive operation with a fully documented input schema and an output schema present, the description covers the essential behavioral facts: irreversibility, side-effect scope, and result guidance. 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%, and the schema already documents all three required parameters, including IDs, environment enum meaning, and workspace constraints. The description adds no parameter-specific 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?
States a specific action and resource: 'Permanently delete a webhook subscription.' The parenthetical '(webhooks group)' and the note that the endpoint and its global events are unaffected clearly distinguish this from deleting a webhook endpoint or updating a subscription.
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: this tool removes only the subscription, not the endpoint or its events. It does not explicitly name an alternative sibling tool such as delete_webhook_endpoint, but the scoping statement effectively tells the agent when this tool is appropriate and when it is not.
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. Follow any llmContext guidance included in results.
| 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?
Beyond the annotations (destructiveHint: true, readOnlyHint: false), the description adds meaningful behavioral context: deletion is permanent, cannot be undone, and also removes stored outputs. It also instructs the agent to follow any llmContext guidance in results, which is an operational behavior not captured by structured 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 action, states the consequential side effect, and includes a brief agent-relevant instruction about llmContext. 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-parameter destructive tool with a 100% described schema, strong annotations, and an output schema, the description is nearly complete. It covers purpose, scope, permanence, and side effects. The only notable gap is the lack of an explicit alternative comparison with cancel_workflow_run.
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 complete descriptions for all three parameters, including the runId source and environment pinning constraints. The description adds no parameter-specific semantics beyond the general statement about stored outputs, so the schema carries the load and the baseline score 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 uses a specific verb ('delete') and resource ('a workflow run'), and further defines the scope by saying it removes stored outputs specifically for the 'workflows group'. This distinguishes it from sibling delete_*_run tools (classify, extract, split, etc.) without needing to inspect each.
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 that this tool applies to workflow runs, but it does not explicitly state when to prefer deletion over cancellation or other operations. Given that cancel_workflow_run exists as a sibling, guidance on 'use cancel if you only need to stop a run' would improve this dimension, but the resource type is clearly implied.
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. Follow any llmContext guidance included in results.
| 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 establish this is a mutating, non-idempotent operation (readOnlyHint=false, idempotentHint=false). The description adds meaningful behavioral context beyond that: versions are immutable, use integer deploy numbers, have no releaseType, and an optional display name referenced at run time. 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 sentences with zero waste, front-loaded with the core purpose and immediately followed by the key sibling distinction. Every sentence earns its place, including the irreversibility note and the llmContext reminder.
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 very rich parameter schema, existing output schema, and annotations, the description covers the essential deployment semantics (immutability, numbering, draft vs. steps, runtime reference). The main gap is routing the agent toward run_workflow for executing the deployed version, but the complex step-graph rules are already delegated to get_documentation in the schema.
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 the steps parameter description is exceptionally detailed, so the baseline is 3. The description adds value on top by explaining the steps/name semantics: 'Pass steps to deploy that graph instead of the draft' and 'optional display name referenced at run time', which clarify relationships not fully spelled out 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 verb and resource: 'Deploy the workflow's current draft as a new immutable version (workflows group)'. It explicitly distinguishes itself from the sibling publishing tools by stating 'Unlike extractor/classifier/splitter publishing there is NO releaseType', so an agent can tell it apart 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 clear usage context: deploy makes an immutable run-time version, 'Deployed versions never change — keep iterating on the draft', and it contrasts the workflow deploy path with extractor/classifier/splitter publishing. It does not explicitly state when to use run_workflow instead of deploying, so the guidance stops short of a full when-to-use/when-not-to-use matrix.
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. Inspect runs with get_form_detection_run. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavior beyond annotations by explaining the returned schema structure, the mapping-mode behavior of inputSchema, the existence of inspectable runs via get_form_detection_run, and that llmContext guidance may appear in results. This meaningfully complements the sparse 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 not bloated: it front-loads the core purpose and return contract, then gives crisp workflow guidance, documentation pointers, and run inspection. Every sentence contributes 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?
Despite having 7 parameters and nested objects, the description is complete enough: the schema handles parameter details, an output schema exists, and the description covers the main use cases, mapping mode, documentation lookup, run inspection, and result guidance. No critical behavioral 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 coverage is 100%, so the baseline is 3. The description adds extra value by explaining that inputSchema triggers mapping mode and by clarifying how detected fields and extend_edit values connect to edit_pdf. This goes beyond the schema's own 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 states a specific verb ('detect'), a clear resource ('fillable fields in a PDF form'), and the exact deliverable ('return an edit schema (edit group)'). It differentiates the tool from siblings by scoping it to form-field detection rather than extraction, splitting, or editing.
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 context: use it to see what a form asks for, as a scaffold for a structured fill, and in mapping mode with an existing inputSchema. It also names the relevant downstream/alternative tools: edit_pdf, get_form_detection_run, and get_documentation.
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. Output is a pointer { id, presignedUrl } to the filled PDF; the URL expires in ~15 minutes (re-fetch with get_file). Inspect runs with get_edit_run. Follow any llmContext guidance included in results.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | 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. | |
| 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?, tableParsingEnabled?, radioEnumsEnabled?, nativeFieldsOnly?, conditionalGenerationEnabled? } |
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 | |
| llmContext | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint=false, and the description adds valuable behavioral detail: output is a pointer { id, presignedUrl }, the URL expires in ~15 minutes, runs can be inspected via get_edit_run, and llmContext guidance should be followed. The target-vs-source warning also surfaces a common misuse.
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, value sources, target/source caveat, documentation prerequisite, output format, expiry, and follow-up inspection. It is front-loaded with the core purpose and avoids 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 a complex mutation tool with 7 parameters, the description covers the full workflow: what inputs to pass, how they are derived, what the output looks like, how to monitor it, and how to handle expiration. The output schema exists, and environment/workspace constraints are already in the schema, 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 coverage is 100%, so the baseline is 3, and the description adds meaningful semantics beyond the schema: file must be the target form rather than the source, schema should come from detect_form_fields with extend_edit keys, and instructions are free-form prose with a concrete example. This justifies a score above baseline.
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: fill form fields in a PDF and return the edited file. It also distinguishes itself from parse/extract siblings by explicitly requiring the TARGET form, not the source document, which removes ambiguity about its role in the pipeline.
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 workflow guidance: parse or extract the source first, use a schema from detect_form_fields, call get_documentation before hand-authoring a schema, inspect runs with get_edit_run, and re-fetch expired output with get_file. This tells the agent when to use this tool and which sibling tools support it.
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. Creates an extract run: may return status: "running" with a runId — normal, not an error; poll it with get_extract_run. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key runtime behavior beyond annotations: the call 'Creates an extract run' and may return status "running" with a runId — 'normal, not an error; poll it with get_extract_run'. It also flags that detail:"full" is 'the only way to prove where a value came from (provenance)' and instructs agents to follow any llmContext guidance. These traits are consistent with annotations (readOnlyHint=false, idempotentHint=false), so 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?
Every sentence earns its place — there is no filler, and the core purpose and primary sibling distinction are front-loaded. However, the operational details (mode rules, package handling, detail/provenance, polling, llmContext) are packed into a dense single block without internal grouping, making it harder to scan; a 5 would require clearer structural organization.
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 highly complex tool (10 parameters, nested objects, three execution modes, async runs, an output schema), the description covers every operational decision an agent faces: mode selection, sibling routing, error recovery when an extractor is missing, polling on 'running' status, provenance via detail:"full", and llmContext handling. The output schema covers return-value structure, so no further documentation 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 baseline is 3. The description adds genuine relational meaning beyond the schema by stating cross-parameter constraints: 'exactly one of extractor or config, or omit both,' 'schema-less ... not usable with package,' and 'package instead of file' for 2-50 documents. These mode-selection semantics materially help an agent choose the right parameter combination, which justifies a 4.
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?
Opens with a specific verb+resource: 'Extract specific structured values (totals, line items, dates, names, tables) from a document,' and enumerates the three execution modes (saved extractor, inline JSON Schema, schema-less inference). It explicitly distinguishes itself from parse_document ('for the raw text/markdown of the pages use parse_document instead'), so an agent can tell the two apart 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?
Provides explicit when-to-use guidance and names alternatives with conditions: 'If the user says "OCR" but wants specific values out, use this tool; ... use parse_document instead.' It also states the mode-selection rule ('Provide exactly one of extractor or config, or omit both'), the file-vs-package condition, and an error-recovery path ('rerun THIS tool without the extractor ... do not fall back to parse_document'). This is exemplary routing guidance.
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. Follow any llmContext guidance included in results.
| 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 cover readOnly, idempotent, non-destructive, and open-world behavior, so the bar is lower. The description adds meaningful behavioral context by explaining the draft-versus-version config behavior and instructing the agent to follow llmContext guidance in results, which is 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?
Three short sentences with no wasted words. The core behavior is front-loaded, discovery guidance is given, and the llmContext follow-up instruction is the final sentence. 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 rich output schema and annotations covering safety, the description doesn't need to explain return values. It covers retrieval modes, discovery via list_classifiers, and post-result guidance. It could be slightly more explicit about the default behavior when version is omitted, though the draft-config phrasing 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 coverage is 100%, so the baseline is 3. The description adds value by clarifying the version parameter's purpose ('one specific version's config via version') and by connecting the id parameter to list_classifiers for discovery.
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 ('Get') and resource ('classifier'), and clarifies the two distinct retrieval modes: draft config versus a specific version's config via the version parameter. It clearly distinguishes itself from list_classifiers by pointing to that sibling as the discovery tool for IDs.
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 directs the agent to use list_classifiers to discover IDs, which is key usage guidance. It also orients the agent to the 'classify group' family, but it doesn't spell out when not to use this tool versus close siblings like get_classify_run or list_classifier_versions.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive behavior, so the description does not need to repeat safety. It adds genuinely useful behavior: wait: true polls until terminal, enumerates the possible statuses, and instructs the agent to follow llmContext guidance in results. This goes beyond 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?
Three short sentences front-load the core action, then add polling behavior, statuses, and the llmContext note. Every sentence earns its place and there is no filler or redundant 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?
For a read-only status tool with a full input schema and an output schema, this is nearly complete: it identifies the batch source, status vocabulary, polling behavior, and a follow-up instruction about llmContext. It could be more explicit about default wait behavior or alternative tools, but 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 fully documents all five parameters. The description only reinforces the wait semantics and does not add meaning beyond the schema, 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?
The description names a specific resource (classify batch / classify group), a specific action (get aggregate status), and ties it to run_classify_batch. The 'aggregate' wording separates it from per-run tools like get_classify_run, and the status list removes ambiguity about what is being queried.
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 clearly implies when to use it: after submitting a classify batch via run_classify_batch, to check its aggregate status, with optional polling. However, it does not explicitly contrast it with get_classify_run or list_classify_runs, nor state when those alternatives should be preferred.
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 (call again to keep waiting). Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent, and non-destructive behavior, and the description adds meaningful non-obvious behavior: wait: true blocks until terminal or wait-budget expiry, repeated calls are needed to continue waiting, and llmContext guidance in results should be followed. 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 sentences with no wasted words: the core purpose is front-loaded, then the wait behavior, then the llmContext follow-up instruction. 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 the detailed input schema, the annotations, and an output schema, the description captures the essential runtime behaviors an agent needs: polling, non-terminal states, wait-budget behavior, and llmContext handling. Nothing critical 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%, and each parameter already has a rich description including defaults, enums, and constraints. The description adds useful behavioral framing for wait but does not meaningfully expand on parameter semantics beyond the schema, 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 states a specific verb and resource: 'Get the state and output of a classify run.' It also clarifies the operational purpose—resuming a running run or inspecting a failed one—which distinguishes it from list/cancel/batch siblings 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?
The description gives clear context for when to use this tool: resume a 'running' run or inspect a failed one, and use wait: true to block. It doesn't explicitly name alternatives or exclusion cases, but the context is strong enough for an agent to select it over listing or cancellation tools.
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. 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 | |
| llmContext | 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 meaningful context beyond annotations: the fetch is live from docs.extend.ai, accepts only docs.extend.ai pages, and requires no workspace targeting. This helps the agent understand external dependency and scope 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?
Two sentences with no filler. The main action and format are front-loaded, and the remaining sentence provides exactly the practical guidance needed for invocation.
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 simple: one parameter, output schema exists, and annotations cover safety and idempotency. The description fully explains what the tool does, where URLs come from, and its availability. Nothing essential is missing for an agent to select and 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 description coverage is 100%, and the single 'url' parameter is already well-documented in the schema with the same source examples. The description reinforces the parameter's purpose but does not add significant semantic information beyond what the schema 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 ('Fetch'), resource ('an Extend docs page'), and format ('as markdown, live from docs.extend.ai'). It distinguishes itself from search_documentation by focusing on retrieving a known page rather than discovering pages.
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 input sources: 'a URL from a tool description, an error's docUrl, or a search_documentation result.' It also notes availability constraints ('Always available, no workspace targeting'). It does not explicitly name an alternative for when no URL is available, but the mention of search_documentation results implies the search tool handles discovery.
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 (call again to keep waiting). Edit runs have no list endpoint — keep the run ID. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| failureReason | No | |
| failureMessage | 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 genuinely useful behavioral detail: wait blocking semantics, wait-budget expiry, calling again to continue waiting, and following llmContext guidance in results.
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-loaded with the core purpose, then the key behavioral details. No filler; every clause adds decision-relevant 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 a full output schema, annotations, and this description, an agent has everything needed to invoke correctly: run lifecycle, wait behavior, no-list constraint, and output guidance. 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 structured schema already documents all five parameters. The description reinforces wait and runId semantics but does not significantly extend parameter meaning beyond the schema, so the 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 operation—'Get the state and output of an edit run'—and identifies the exact resource ('edit run (edit group)'). It also names the intended scenarios (resume a running run, inspect a failed one), making it easy to distinguish from other get_*_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 provides clear use context: use it to poll a running run or inspect a failed one, and wait:true to block. It also warns that edit runs have no list endpoint so the run ID must be retained. It stops short of naming an alternative tool for edge cases, but the guidance is sufficient.
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 instead of polling in a loop. 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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| entityVersion | No | |
| evaluationSetId | 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 behavior: async processing with PROCESSING status, terminal statuses, wait semantics, and metric aggregation rules. Also notes llmContext guidance should be followed. No contradictions.
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 structured description, front-loaded with purpose and exclusivity. The metric breakdown by resource type is long but useful for the agent to know what to expect; 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?
Complete for a read-only retrieval tool: describes statuses, metrics by resource, wait behavior, terminal states, and post-processing guidance. Output schema further covers return shape.
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 meaning beyond the schema by explaining wait:true as a blocking alternative to polling, and clarifies metrics are aggregated across items rather than per-item. This enriches the parameter's purpose, though most param details remain 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?
States a specific verb ('Get') and resource ('evaluation run's status and accuracy metrics'), and explicitly distinguishes itself from sibling get-batch tools in the evaluations group, saying it is the ONLY tool that returns these. This makes selection 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?
Explicitly tells the agent when to use it (to obtain status/metrics), how to handle async runs (pass wait:true instead of polling), and references terminal statuses and llmContext guidance. Also implies this is for evaluation runs, vs batch tools for other groups.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | 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 goes beyond that by disclosing polling behavior ('wait: true polls until terminal'), enumerating the full status set (PENDING, PROCESSING, PROCESSED, FAILED, CANCELLED), and instructing the agent to follow llmContext guidance in results — all meaningful behavioral context not available from annotations alone.
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: the core purpose is in the first sentence, followed by focused behavioral notes. Every sentence earns its place, though the status enumeration overlaps somewhat with what an output schema likely already specifies. Slightly tighter than ideal, but very efficient overall.
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 batch-status polling tool with 5 well-documented parameters and a rich annotation set, the description is complete: it covers purpose, originating tool, polling semantics, terminal statuses, and result guidance. The output schema handles return-value details, and annotations handle the safety profile, so 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 fully documents all five parameters (wait, batchId, environment, waitSeconds, workspaceId), including enum constraints and format hints like bpr_... IDs. The description adds only the 'wait: true polls until terminal' usage hint, which is a minor complement rather than substantial new 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 uses a specific verb and resource: 'Get the aggregate status of an extract batch (extract group) submitted by run_extract_batch.' This precisely distinguishes it from sibling tools like get_extract_run (single-run status) and list_extract_runs (listing runs). An agent can tell what this tool is for 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 clearly ties the tool to its companion producer, run_extract_batch, and gives concrete usage guidance for the wait parameter ('wait: true polls until terminal'). However, it does not explicitly name alternatives such as get_extract_run or cancel_extract_run, nor state when not to use this tool, leaving some routing 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. Follow any llmContext guidance included in results.
| 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 establish that this is read-only, idempotent, and non-destructive. The description adds useful behavioral context: results may include llmContext guidance to follow, and the tool can return either draft or version-specific configs. It does not cover permission or not-found behavior, but the safety profile is already handled by 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 short sentences with the core behavior front-loaded, followed by discovery and result-handling guidance. The parenthetical '(extract group)' is slightly awkward and adds little clarity, but overall the text is compact and free of 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?
For a read-only getter with full parameter schema and an output schema, the description covers the main access patterns: draft configs, versioned configs, ID discovery via list_extractors, and following llmContext guidance. It does not mention list_extractor_versions for discovering version IDs, but the version parameter schema already documents the accepted version identifiers, so this is a minor 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%, so the schema already documents all four parameters, including the version forms and environment enum. The description adds a little meaning by mapping 'draft' to the draft config and suggesting list_extractors for IDs, but it does not substantially expand on the 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 uses a specific verb-resource pair and clearly distinguishes the two main cases: fetching an extractor's draft config or fetching a specific version's config. It also points to list_extractors for ID discovery, which helps differentiate this getter from the listing 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?
It gives concrete routing guidance: use list_extractors to discover IDs, and use this tool to get draft or versioned extractor configs. It does not explicitly state when not to use the tool, such as using list_extractor_versions to enumerate available versions, so it falls just short of full guidance.
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 (call again to keep waiting). Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral detail beyond annotations: wait blocks until terminal or budget expiry, repeated calls are required, and llmContext guidance in results should be followed.
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, followed by the most important behavioral nuance (waiting). Every sentence contributes value, and there is no redundant restatement of the title or schema.
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 output schema, the description covers the essential operational details: what the tool does, how waiting works, and how to handle results. It could be slightly more explicit about when to choose this over related sibling tools, but it is otherwise complete for a read-only polling 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 all parameters are already documented in the input schema. The description adds useful context for the wait parameter and the overall polling pattern, but does not materially expand on runId, detail, environment, or workspaceId beyond what the schema 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 clearly states the tool retrieves the state and output of a specific extract run, with the added nuance of waiting on running runs or inspecting failed ones. This distinguishes it from list_extract_runs (listing), cancel_extract_run (canceling), and delete_extract_run (deleting).
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 on when to use this tool: to resume waiting on a running run or to inspect a failed one. It also explains the wait behavior and that repeated calls are needed to continue waiting, though it does not explicitly name alternative tools for list/cancel/delete scenarios.
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. Follow any llmContext guidance included in results.
| 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?
The description adds substantial behavioral context beyond the annotations: the presigned URL expires in about 15 minutes and requires a re-call to refresh, null contents means 'not parsed yet' rather than an error, split-produced children carry parentSplit metadata, and llmContext guidance should be followed. This goes well beyond the readOnly/idempotent hints and meaningfully informs agent 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 compact and front-loaded with the core purpose, then adds only high-value caveats: expiry, parsed-content semantics, parentSplit metadata, and llmContext. Every sentence earns its place, and there is no filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only file retrieval tool with a rich output schema and strong annotations, the description covers the important behavioral nuances an agent needs: URL expiry and refresh, contents semantics, parentSplit metadata, and following llmContext. Nothing critical for correct invocation or interpretation appears to be 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 meaning by clarifying that contents: null is a state, not an error, and explaining the freshness/expiry semantics of the returned URL. This supplements the schema's enum and descriptions without duplicating 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 names a specific verb and resource: get a file's metadata, presigned download URL, and optionally parsed contents. It also scopes itself to the files group, distinguishing it from related tools like list_files and get_file_upload. The purpose is immediately clear and distinct from 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?
The description gives clear context on when to set contents and explicitly tells the agent to run parse_document first when contents are null, which is useful routing guidance. It does not enumerate exclusions against every file-related sibling, but it provides enough direction for correct tool selection.
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
Check an upload link created by request_file_upload and get the uploaded file ids (files group). Call it on the user's message after they were shown the link — never in the same turn that shared it. Default is one instant status check; wait: true blocks until the user finishes or the wait budget runs out (call again to keep waiting). Follow any llmContext guidance included in results.
| 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 request_file_upload. | |
| 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 | |
| status | Yes | |
| uploadId | Yes | |
| expiresAt | No | |
| llmContext | No | |
| completedAt | No | |
| completedBy | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only/idempotent, and the description adds behavioral context beyond that: default is one instant status check, wait:true blocks until completion or budget expiry, and results may carry llmContext guidance to follow. This meaningfully informs agent expectations for polling and continuation.
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 first states what it does, the second mandates when not to call it, the third explains the wait modes and result guidance. Every sentence carries operational value and the most critical info appears first.
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 present, the description correctly focuses on invocation context rather than return fields. It covers the prerequisite (request_file_upload), the correct timing relative to the user message, wait semantics, and how to handle llmContext — everything an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the description repeats rather than extends the wait parameter's meaning ('true = block until the user completes...'). It adds no new parameter semantics beyond what the schema already provides, 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 names a specific verb ('Check'), the exact resource ('an upload link created by request_file_upload'), and the result ('uploaded file ids (files group)'). This clearly distinguishes it from siblings like request_file_upload (which creates the link) and get_file (which fetches an existing file).
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 states when to call ('on the user's message after they were shown the link'), includes a hard exclusion ('never in the same turn that shared it'), and explains the wait/default behavior and retry pattern ('call again to keep waiting'). This gives the agent a precise invocation rule.
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 (call again to keep waiting). Form detection runs have no list endpoint — keep the run ID. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important runtime behavior beyond the annotations: wait mode blocks until terminal state or budget expiry, repeated calls are needed to continue waiting, and results may include llmContext guidance. This is genuinely useful and not already captured by readOnly/openWorld/idempotent 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 compact and front-loaded: purpose first, then wait behavior, then operational constraints, then output guidance. Every sentence adds actionable information without waste.
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 existence of an output schema, the description covers the important gaps: it tells the agent that there is no list endpoint, that run IDs must be retained, how waiting works, and that llmContext should be followed. This is complete for safe and 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 value by explaining the waiting loop ('call again to keep waiting') and framing wait behavior around terminal states and budgets, which enriches the wait/waitSeconds parameter semantics beyond the 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 clearly states a specific action ('Get the state and output of a form detection run') and names the exact resource type. It also distinguishes this tool from the broader sibling set by noting that form detection runs have no list endpoint, so this is the run-specific retrieval path.
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: use it to resume a running run, inspect a failed one, and call again to keep waiting when wait budget expires. It does not explicitly name alternative tools or state when not to use it, but the context is sufficient for an agent to pick it for form detection run status/output.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | 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 beyond those by explaining wait polling, terminal status names, and the instruction to follow llmContext guidance within results. This is meaningful behavioral context not encoded in 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 short, dense sentences with no filler. The core purpose is front-loaded, and the status list plus llmContext note each earn their place as operationally useful 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?
For a read-only, idempotent tool with a fully documented input schema and an output schema present, the description is complete. It covers the batch scope, polling behavior, statuses, and result-side guidance without over-explaining.
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 a small amount of semantic value by interpreting wait ('true polls until terminal') and naming the statuses, but it does not substantially expand on what each parameter means 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?
States a specific verb ('Get'), a specific resource ('parse batch'), and the aggregate nature of the status, while naming the submitting sibling tool run_parse_batch. This clearly distinguishes it from get_parse_run and other batch getters.
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 this applies (batches submitted by run_parse_batch) and how the wait parameter changes behavior. It does not explicitly exclude alternatives like get_parse_run, but the aggregate batch framing plus the wait/polling semantics gives solid usage context.
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 (call again to keep waiting). Supports pageRange/maxChars/rawBlocks output slicing as in parse_document. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior, so the description's added details about wait-budget expiry, repeated calls to keep waiting, and following llmContext guidance provide genuine extra value. 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?
The description is compact and front-loaded, with four sentences that each carry distinct information: purpose, wait behavior, output slicing, and result guidance. There is no filler or redundant restating of the tool name.
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 safety annotations, the description covers the key behaviors an agent needs: state retrieval, waiting, slicing, and follow-up guidance. A minor gap is that it does not explicitly differentiate from get_parse_batch, but the output schema and annotations fill most of the remaining 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%, so the schema already documents all parameters. The description adds meaning by explaining the wait semantics, tying runId to parse_document/list_parse_runs, and referencing pageRange/maxChars/rawBlocks output slicing as in parse_document, which enriches parameter understanding 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 states a specific verb and resource: 'Get the state and output of a parse run (parse group).' It goes beyond a generic label by specifying the two typical goals — resuming a running run or inspecting a failed one — which makes the tool's purpose clear and distinct from listing or batch 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 clear usage context: runId comes from parse_document or list_parse_runs, wait: true blocks until terminal or budget expiry, and output slicing works as in parse_document. It does not explicitly name alternatives like get_parse_batch or state when not to use this tool, so it stops short of full exclusion guidance.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses polling behavior via wait, enumerates terminal/non-terminal statuses, and instructs the agent to follow llmContext guidance in results. Annotations already mark the tool readOnly and idempotent, so these additions build on rather than repeat structured metadata.
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 compact sentences deliver the core purpose, polling option, status vocabulary, and result guidance without wasted words. The most important info 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?
Given the annotations, output schema, and fully documented parameters, the description covers everything essential: what the batch status represents, optional polling, terminal statuses, and llmContext handling. Nothing critical for invoking 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 baseline is 3. The description mostly restates the wait parameter's meaning and adds mild context for batchId by referencing run_split_batch, but it does not substantially enrich parameter understanding 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?
Description clearly identifies the action (get aggregate status), the resource (split batch), and ties it to run_split_batch. It distinguishes an aggregate batch-level view from the singleton get_split_run by using 'aggregate status' and 'split group', though it does not explicitly name the 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 says this tool is for the batch submitted by run_split_batch and explains the wait polling option. It does not explicitly say when to prefer this over get_split_run, but the batch/run distinction is implied through 'aggregate status' and the referenced submission tool.
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 (call again to keep waiting). Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, and the description adds valuable extra context: wait blocks until terminal or budget expiry, repeated calls continue waiting, and llmContext guidance in results should be followed. 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 three short sentences with the core action front-loaded, followed by targeted wait behavior and a notable open-world instruction. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a polling-style read tool, the description clearly covers the wait loop, terminal/budget timeout, and result-related guidance. The rich schema and output schema carry most parameter and return-value detail, leaving only minor ambiguity about what 'terminal' means in this 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%, so the schema already documents all parameters. The description adds operational nuance around wait behavior but does not materially expand per-parameter meaning beyond what the schema 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 names a specific operation on a specific resource: 'Get the state and output of a split run'. This clearly differentiates it from list_split_runs and get_split_batch, and the parenthetical 'split group' plus running/failed statuses sharpen the scope further.
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 clear context for when to call: to continue waiting on a running run or inspect a failed one. It also explains wait-mode blocking and budget-expiry behavior, though it does not explicitly contrast with sibling get/list tools.
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. Follow any llmContext guidance included in results.
| 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 read-only, idempotent, and non-destructive behavior, so the bar for additional behavioral context is lower. The description adds useful operational detail by explaining the draft/version behavior and instructing agents to follow any llmContext guidance in results.
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: what the tool returns, how to discover IDs, and a follow-up instruction about llmContext. The phrasing is front-loaded and contains minimal ambiguity.
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, complete parameter schema, and presence of an output schema, the description covers the remaining essential context: the draft-versus-version distinction, ID discovery, and the llmContext follow-up instruction. 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 all parameters. The description adds value by clarifying that omitting version returns the draft config and by instructing agents to use list_splitters to discover valid IDs, which goes 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 and resource: get a splitter's draft config or a specific version's config. It also directs users to list_splitters for ID discovery, which differentiates it from list-type siblings and other 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?
The description explicitly routes discovery to list_splitters, which gives practical usage context. It could more explicitly mention when to prefer list_splitter_versions or other alternatives, but the core when-to-use guidance is present.
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. Follow any llmContext guidance included in results.
| 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 mark the tool read-only, idempotent, and non-destructive. The description adds useful behavioral context: it returns a draft step graph or a deployed version's steps depending on version, and instructs following any llmContext guidance in results. No contradictions 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 short, purposeful sentences. The core behavior is front-loaded, followed by a discovery pointer and a result-handling instruction. No filler or redundant restatement of the schema.
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 input schema, an output schema, and annotations covering safety semantics, the description provides the remaining operational guidance: how to use version, how to discover IDs, and how to handle returned llmContext. Nothing needed for correct invocation appears 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 beyond the schema by clarifying that omitting version returns the draft step graph while specifying a version returns deployed steps, and by pointing to list_workflows for discovering valid id 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?
States a specific verb and resource ('Get a workflow') and immediately distinguishes two retrieval modes: draft step graph vs deployed version's steps. The parenthetical '(workflows group)' helps separate it from run-related tools such as get_workflow_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?
Explicitly directs the agent to use list_workflows to discover IDs and explains how the version parameter selects between draft and deployed content. It does not explicitly exclude siblings like get_workflow_run or list_workflow_versions, so it falls just short of full alternative-routing guidance.
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 (call again to keep waiting). Workflow runs commonly take minutes to hours — repeated running responses are normal. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| stepSummary | 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 as read-only, idempotent, and non-destructive, so the description adds meaningful behavioral context: wait semantics, budget expiry, the expectation of repeated 'running' responses, and the instruction to follow llmContext guidance. This gives the agent a clear mental model of how the tool 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 and front-loaded with the primary purpose, then adds wait behavior, expected runtime, and instruction-following guidance. Every sentence contributes useful information without 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 a read-only polling operation with an output schema and full schema coverage, the description covers all necessary operational context: what the tool returns, when waiting is appropriate, how long waits may take, and how to behave upon receiving results. 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 goes further by explaining the wait parameter behavior in operational terms ('blocks until terminal or wait-budget expiry', 'call again to keep waiting'), and by contextualizing runId through the workflow run lifecycle. This adds genuine value 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?
States the specific verb 'Get', the resource 'workflow run', and its core purpose: retrieving state and output. It also distinguishes its place among run-related tools by noting it operates on the workflows group and by describing the wait behavior, setting it apart from sibling get_*_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?
Provides clear context for when to use it: resume a running workflow run or inspect a failed one. It does not explicitly name alternative tools or exclusion conditions, but the guidance around waiting and repeated running responses is strong enough for an agent to choose this tool correctly.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context by noting the 'newest first' ordering and instructing the agent to 'Follow any llmContext guidance included in results,' which is beyond what annotations or the schema express.
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 filler. The primary purpose and ordering are front-loaded, the sibling alternative is stated compactly, and the actionable llmContext instruction is included 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 list tool with an output schema and complete parameter schema coverage, the description provides the essential operational context: what is listed, ordering, the related get tool, and a behavioral instruction about llmContext. 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 schema already documents all six parameters, including defaults and constraints. The description adds no parameter-specific semantics, 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 clearly states the action ('List'), the resource ('the workspace's classifiers'), and a distinguishing detail ('newest first'). It also places the tool within the 'classify group' and contrasts it with get_classifier, making it easy for an agent to distinguish from related siblings like list_classifier_versions or get_classifier.
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 concrete guidance on when to use a different tool ('Fetch a specific one's config with get_classifier'), which helps route the agent appropriately. It does not explicitly enumerate all alternatives, but for a list operation this is sufficient context.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| 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 the safety profile is covered. The description adds meaningful behavioral context beyond annotations by emphasizing versions are published and immutable, and by warning that results may include llmContext guidance that the agent should follow. This is useful operational behavior not present in the schema or 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 short sentences with no filler. It front-loads the core purpose, then adds the relevant sibling reference and an important output-behavior instruction. 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?
The description covers the essential purpose, directs the agent to the right sibling for fetching configs, and mentions the unusual llmContext guidance behavior. The output schema and 100% parameter coverage supply the remaining details like pagination and defaults. It is slightly less complete than it could be regarding pagination workflow, but not deficient.
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 all six parameters, including defaults and the meaning of environment and workspaceId. The description adds no additional parameter-level semantics beyond mentioning published versions, which is appropriate given complete schema coverage. 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 opens with a specific verb and resource: 'List a classifier's published (immutable) versions.' It distinguishes itself from closely related siblings like get_classifier and list_classifiers by narrowing scope to published versions and noting immutability. The '(classify group)' qualifier adds domain context that helps orient the 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?
The description gives clear context for when to use the tool: when listing published versions of a classifier. It also points to get_classifier as the alternative for fetching a single version's config, which helps the agent choose between sibling tools. It does not explicitly state when NOT to use it, but the alternative reference is strong enough guidance.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| nextPageToken | 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 useful behavioral context beyond those: results are ordered newest first, filtering is preferred over pagination, and any llmContext guidance in results should be followed. This is meaningful operational guidance that the annotations do not 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?
Two sentences with no filler: the core action and ordering are front-loaded, then filters are summarized, then the llmContext instruction is given. Every sentence earns its place and the description is compact yet informative.
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 annotations covering read-only/idempotent safety, the description covers the remaining important context: ordering, filtering strategy, and how to handle llmContext guidance in results. 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 description coverage is 100%, so the parameters are already fully documented. The description merely lists some filter parameters that are already present in the schema, adding no new type, format, or semantic detail. The filter-rather-than-paginate advice is usage guidance rather than parameter-level 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 states a specific verb and resource: 'List recent classify runs, newest first.' The phrase '(classify group)' further distinguishes it from sibling list tools like list_extract_runs, list_parse_runs, and list_split_runs. It is immediately clear what the tool does and how it differs from others.
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 guidance: 'Filter rather than paginate' and enumerates the relevant filter fields (status, classifierId, batchId, fileNameContains). This tells the agent a strategy for narrowing results. It does not explicitly name alternatives like get_classify_run for fetching a single run, so it misses the full when-to-use-versus-alternatives picture.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds value by disclosing that summaries omit expected outputs, that items are file pairings, and that llmContext guidance in results should be followed — useful 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?
The description is compact: three sentences, no filler, with the core behavior and key exclusions front-loaded. The parenthetical '(evaluations group)' is slightly cryptic, but it does not meaningfully hurt clarity.
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, output schema, and annotations, the description covers the important behavioral edges: what is excluded from results, how item IDs should be used, and that llmContext guidance may appear. The only mild gap is not explicitly contrasting with list_evaluation_sets, but the item-level scope is sufficiently clear.
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 well documented with defaults, enums, and value format guidance. The description adds no parameter-specific semantics beyond noting that item IDs are operationally important, which concerns results more than input 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 uses a specific verb ('List') and resource ('an evaluation set's items') and immediately distinguishes the tool by stating 'file pairings only; expected outputs are not included in summaries'. It also names downstream consumers of the item IDs, making the tool's role in the evaluations workflow 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 clearly indicates the primary use case: retrieving item IDs to feed update_evaluation_item / delete_evaluation_item and subset runs. It does not explicitly name list_evaluation_sets as the sibling to choose instead for set-level listing, but the item-level scoping makes the intended context clear.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the description's job is to add behavioral context, which it does: results may contain llmContext guidance the agent must follow, and the list returns full set objects rather than summaries. This exceeds what annotations alone convey, though it does not disclose pagination behavior beyond the schema's nextPageToken.
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, each carrying distinct information: the core action with scoping, the no-get-by-id disambiguation paired with return shape, and the llmContext instruction. The most decision-relevant facts are front-loaded 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 100% schema coverage, a complete safety annotation set, and an output schema present, the structured fields already carry most of the burden. The description rounds this out with the llmContext behavior disclosure and the scoping explanation. The only notable gap is the lack of explicit differentiation from list_evaluation_items, given the large sibling list.
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, but the description adds meaning on top: it maps entityId to concrete accepted value domains (extractor/classifier/splitter IDs) and justifies the pagination parameters by noting full set objects are returned. The description compensates where the schema is terse without 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?
States a specific verb and resource ('List evaluation sets') with an explicit scope qualifier ('optionally scoped to one extractor/classifier/splitter via entityId'). The 'evaluations group' parenthetical and the explicit note about the absence of a get-by-id tool distinguish it from the many get_* and list_* siblings without requiring schema inspection.
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 for when to call it — enumerate evaluation sets, optionally filtered to one entity — and clarifies that there is no get-by-id alternative, so this list is the way to retrieve full set objects. It stops short of explicit when-not-to-use guidance or contrasting sibling tools such as list_evaluation_items, leaving some routing to inference.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| 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 behavior beyond annotations by specifying 'newest first' and the directive to follow llmContext guidance in results. It could go further by noting pagination behavior, but the provided behavioral details are useful and non-redundant.
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 short sentences with no filler. The main action is front-loaded, the alternative tool is named in the second sentence, and the llmContext note is a valuable usage detail. 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 read-only/idempotent annotations covering safety, a 100%-coverage schema documenting all parameters, and an output schema available, the description does not need to explain return values or parameter syntax. It adds the essential contextual piece—differentiation from get_extractor—and the non-obvious llmContext behavior. 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 fully documents all six parameters including defaults and constraints. The description adds a small semantic improvement by interpreting the default sort as 'newest first', but it does not add meaningful parameter-level detail beyond what the schema already 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 the exact scope ('List the workspace's extractors'), the ordering ('newest first'), and the resource type. It also distinguishes itself from get_extractor by noting that fetching a specific one's config is a separate operation, making it easy for an agent to pick the right tool among many list_* 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?
The description explicitly names get_extractor as the alternative when a specific extractor's config is needed, giving clear selection guidance. The additional instruction to follow llmContext guidance in results further clarifies how to handle the output, and the reading context makes the typical use case obvious.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| 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 useful context beyond annotations by explaining that versions are published and immutable, and by instructing the agent to follow any llmContext guidance in results. This is valuable behavioral detail 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 two sentences with no filler, front-loading the core purpose immediately. The second sentence adds a useful next-step reference, and the llmContext instruction is brief and meaningful.
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 annotations, the description covers what is needed: it identifies the resource, notes immutability/published status, points to the correct sibling for config retrieval, and flags result-level guidance. 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 every parameter already documented in the input schema. The description itself adds no parameter-level meaning, so the baseline of 3 applies as 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 states a precise action and resource: 'List an extractor's published (immutable) versions.' This clearly distinguishes it from sibling list tools like list_classifier_versions and list_workflow_versions, and the mention of 'extract group' reinforces the extractor-specific 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?
The description gives clear context by noting it lists published versions and directly routes the agent to get_extractor for fetching a single version's config. It does not explicitly state when not to use this tool versus all possible alternatives, but it provides enough direction for the primary decision.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, open-world, and non-destructive behavior, lowering the burden. The description adds genuinely valuable behavioral details: newest-first ordering, the recommendation to filter instead of paginate, and the instruction to follow any llmContext guidance included in results. This goes beyond what annotations alone communicate.
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 short sentences with no filler. It front-loads the core purpose, then gives practical filtering guidance, then an important behavioral follow-up about llmContext. 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 100%-covered schema, rich annotations, and an output schema present, the description does not need to restate parameter details. It appropriately adds ordering behavior, filtering guidance, and the llmContext follow-up instruction. Slightly cryptic 'extract group' phrasing and the lack of an explicit note about nextPageToken keep it from being fully complete, but overall it is adequate 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?
Parameter coverage in the schema is 100%, so the baseline is 3. The description repeats a few filter parameter names but does not add any deeper semantics beyond what the schema already provides. The 'filter rather than paginate' note is the only added value, but it is more of a usage strategy than a parameter 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 opens with a specific verb and resource: 'List recent extract runs, newest first'. This clearly identifies the object (extract runs) and the primary behavior. It also names concrete filter dimensions (status, extractorId, batchId, fileNameContains), which helps distinguish it from sibling list_*_runs tools even without 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 gives useful in-tool guidance ('Filter rather than paginate') and tells the agent to follow llmContext guidance in results, but it does not explicitly say when to choose this tool over siblings like get_extract_run or list_parse_runs. The usage context is implied rather than explicitly contrasted with alternatives.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds meaningful context beyond annotations: files are sorted newest first, results may carry llmContext guidance, and pagination should be used narrowly. This is useful behavioral information without contradicting 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 compact and front-loaded: the core purpose and ordering come first, followed by two targeted usage instructions and one result-handling note. Every sentence earns its place with no 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 list operation with an output schema and safety annotations, the description covers what an agent needs: scope, ordering, filtering strategy, the relevant sibling for file content, and guidance about llmContext in results. Required parameters and pagination mechanics are already captured by the schema.
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 advising nameContains over broad pagination and by clarifying the default ordering ('newest first') which maps to sortDir default desc. This goes beyond the schema's bare 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 clearly states the action ('List files'), the resource ('in the workspace'), and the ordering ('newest first'), and it differentiates from the sibling get_file by directing download/parsed-content needs there. It is unambiguous about what this 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 gives concrete usage guidance: use nameContains filtering instead of broad pagination, and use get_file when a download URL or parsed contents are needed. It also instructs the agent to follow llmContext guidance in results, which is actionable and specific.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds genuine behavioral context beyond annotations: upstream-default ordering, lack of sorting support, and the instruction to follow llmContext guidance in results. This meaningfully shapes agent expectations about response ordering and downstream action.
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 short sentences, each earning its place: purpose, filter strategy, ordering limitation, and a result-consumption note. The core purpose is front-loaded and there is zero redundancy with the schema or annotations.
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 7-param read-only list tool with 100% schema coverage, rich annotations, and an output schema, the description covers the non-obvious aspects: ordering, sorting limitation, and llmContext handling. The only minor gap is that 'parse group' is referenced but never defined, leaving the agent to infer its meaning from 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%, so the baseline is 3. The description adds value above that by grouping status, batchId, and fileNameContains as filters and recommending them over pagination — semantic guidance the schema alone does not convey. It does not duplicate the enum or format details 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 uses a specific verb-resource pair ('List recent parse runs') and adds ordering scope ('newest first'). The parenthetical '(parse group)' distinguishes it from sibling list_*_runs tools (classify, extract, split, workflow) 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 actionable usage guidance: 'Filter rather than paginate' names the preferred strategy and calls out status, batchId, fileNameContains as the filter dimensions. It also warns that sorting is unsupported. However, it never explicitly names alternative tools or states when NOT to use it, leaving sibling differentiation to inference.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral context beyond these: newest-first ordering, the split-group scope, the recommendation to filter rather than paginate, and the existence of llmContext guidance in results. 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, no filler, and the most important behavioral facts are front-loaded: recency, ordering, and scope. The filter guidance and llmContext note each earn their 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?
With a rich input schema, full parameter coverage, a present output schema, and strong annotations, the description supplies the remaining practical context: ordering behavior, filter-first strategy, and follow-up instructions from results. Slight ambiguity in the phrase 'split group' prevents a 5, but 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 itself documents all 10 parameters. The description adds a usage strategy by naming four filter parameters and saying to prefer filtering over pagination, but it does not add meaningfully richer semantics for individual parameters beyond what the schema already 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 states a specific action and resource: 'List recent split runs, newest first'. It also distinguishes the tool's scope by noting '(split group)' and naming the distinct filter dimensions, which separates it from sibling run-listing tools like list_extract_runs 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 strategy: 'Filter rather than paginate' followed by the exact filter fields, and instructs the agent to follow any llmContext guidance in results. It does not explicitly state exclusions such as 'use get_split_run for a single run', but the guidance is clear and practical for invoking this tool correctly.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| 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 the safety profile is covered. The description adds behavioral context beyond annotations by specifying default newest-first ordering and by warning that results may carry llmContext guidance that should be followed, which is genuinely useful for an agent.
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 contain the core function, default ordering, an explicit pointer to get_splitter, and a unique instruction to follow llmContext guidance. Every sentence earns its place, and the main action 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?
This is a simple read-only list tool with an output schema present, complete schema documentation for all six parameters, and annotations covering its behavior. The description adds the essential cross-reference to get_splitter and the llmContext instruction, making it fully 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 description coverage is 100%, so the baseline is 3. The description does not repeat parameter details, but 'newest first' and 'split group' subtly contextualize sort defaults and scope. No additional parameter semantics are needed because the schema fully documents each field.
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 operation: 'List the workspace's splitters' with a specific default ordering, 'newest first (split group).' It also distinguishes itself from the related get_splitter tool by explicitly directing config-specific fetches there, making the intended use 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 for when to use this tool versus get_splitter: list for a collection, get_splitter for a specific config. It instructs following any llmContext guidance in results, aiding downstream behavior. It doesn't explicitly exclude alternatives like list_splitter_versions, but the tool name and 'splitters' noun make the primary use clear.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds useful context beyond that: versions are published and immutable, and results may include llmContext guidance that should be followed. This is meaningful behavioral information not present in 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 short sentences, each earning its place: the core operation, the relevant sibling tool for one version's config, and an actionable instruction to follow llmContext guidance. 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?
For a list tool with full schema coverage and an output schema, the description is complete. It explains the versioning concept, points to the next step for fetching config, and alerts the agent to llmContext guidance. Pagination and authorization are already covered in the schema descriptions.
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 fully documents all six parameters, including environment constraints, workspace grants, pagination token, and sorting. The description does not add parameter-specific 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 verb ('List') and resource ('a splitter's published (immutable) versions'), clearly distinguishing this from related siblings like list_splitters and get_splitter. It also explicitly names get_splitter as the tool for fetching one version's config, reinforcing the boundary.
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: listing published versions is this tool's job, and fetching a single version's config is get_splitter's job. It does not explicitly state when not to use this tool versus list_splitters, but the purpose is clear enough that an agent can route correctly.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| 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 genuinely non-obvious behavior beyond those annotations: signing secrets are never returned (shown once at creation only), results carry global event lists, and 'llmContext guidance included in results' should be followed. No contradiction with the read-only 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, each earning its place: the core purpose is front-loaded, the second sentence adds a security-relevant behavioral warning, and the third gives a concrete follow-up directive about llmContext. There is zero 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 list tool with full annotations (read-only, idempotent, non-destructive), 100% schema coverage across 6 parameters, and an output schema present, the description adds exactly what structured fields cannot: family grouping, the secrets-never-returned behavior, and the llmContext follow-up rule. 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%, and the schema's parameter descriptions are already rich: environment pins to get_me, workspaceId must be a granted workspace listed by get_me, limit/enum docs are explicit, and nextPageToken is described as an opaque cursor. The prose description adds only marginal workspace-scope context ('the workspace's'), 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?
The description states a specific verb and resource: 'List the workspace's webhook endpoints,' with explicit scope ('the workspace's') and what is included ('with their global event lists (webhooks group)'). The resource name 'endpoints' plus the group parenthetical cleanly distinguishes it from sister tools like list_webhook_subscriptions, so an agent can tell them apart 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 provides clear context — it operates on webhook endpoints within the webhooks group and clarifies a key behavioral boundary: signing secrets are never available here, only at creation time, which implicitly routes agents to create_webhook_endpoint for that need. However, it never explicitly names an alternative tool or states a when-not-to-use condition, stopping short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhook_subscriptionsList webhook subscriptionsARead-onlyIdempotentInspect
List resource-scoped webhook subscriptions, filterable by endpoint or by the watched resource (webhooks group). Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds useful behavioral context by noting the subscriptions are 'resource-scoped' and by instructing the agent to 'Follow any llmContext guidance included in results.' This goes beyond the structured 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 and front-loaded with the core purpose and filters. The second sentence about llmContext guidance earns its place as an operational instruction. Minor jargon such as 'webhooks group' keeps it from being perfectly crisp.
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 strong annotations, 100% schema coverage, and an output schema, the description covers the essential selection filters and adds a key follow-up instruction. Pagination and default behavior are already documented in the schema, so no critical 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 schema fully documents all seven parameters including defaults, enum meanings, and required workspace/environment constraints. The description adds only a high-level mapping of filtering by endpoint or watched resource, which is helpful but not necessary given the exhaustive 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 ('List') and a specific resource ('resource-scoped webhook subscriptions'), and it clarifies the two key filtering dimensions: endpoint and watched resource. This clearly distinguishes the tool from siblings like list_webhook_endpoints, create_webhook_subscription, and update_webhook_subscription.
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 its use case by naming the resource and filters, but it does not explicitly say when to prefer this tool over alternatives or when not to use it. There is no exclusions or alternative routing, though the verb and resource make the intended purpose reasonably inferable.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent safe behavior, and the description adds concrete operational detail: default ordering, filter-before-pagination advice, the batchId fallback for batch tracking, the meaning of NEEDS_REVIEW (paused for human review), and the directive to follow llmContext guidance in results. These traits go well beyond what annotations or schema 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?
Five short sentences, all information-dense and front-loaded with the core purpose. The batchId workaround and llmContext note earn their place as tool-specific behavior an agent must know. The phrase 'workflows group' is slightly vague but doesn't add bloat.
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 read-only annotations, 100% parameter description coverage, and an output schema, the description covers the remaining operational essentials: ordering, filtering strategy, batch tracking, status special case, and result-processing instructions. An agent can select and invoke this tool correctly without further investigation.
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 covers all 10 parameters, so baseline is 3; the description adds meaning by calling out the key filters (status, workflowId, batchId, fileNameContains) and explaining that batchId is the way to track workflow batches. It also clarifies the NEEDS_REVIEW enum value, which the schema lists without explanation.
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 ('List') and resource ('workflow runs'), with ordering behavior ('newest first'). The '(workflows group)' qualifier and the named filter fields differentiate it from sibling list_* tools for extract/classify/parse/split runs. No ambiguity about what is returned.
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 instructs to filter rather than paginate, naming the exact filter parameters. Notes that workflow batches have no batch-get endpoint, so batchId tracking should happen through this tool. It gives clear context and a specific alternative, though it doesn't explicitly compare against other list_* sibling tools by name.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior. The description adds useful behavioral context not in annotations: results are ordered newest first by default, and results may carry llmContext guidance that should be followed. This meaningfully supplements the structured metadata.
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 terse sentences each add value: the first defines the primary operation and ordering, the second routes to the appropriate sibling for a specific workflow, and the third instructs on handling dynamic result guidance. No redundant wording 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 schema, output schema, and annotations, the description covers the essential operational behavior: listing, default order, the get_workflow alternative, and llmContext follow-up. It does not explicitly distinguish from list_workflow_runs or list_workflow_versions, but those differences are largely recoverable from tool names and schema.
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 fully documents all parameters and their constraints, including workspaceId/environment grants and pagination tokens. The description's 'newest first' reinforces the default sort direction implied by sortBy/sortDir, but adds little beyond what the schema already 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 states a specific verb and resource: 'List the workspace's workflows.' It adds default ordering ('newest first') and explicitly distinguishes itself from get_workflow by directing users to that tool for a specific workflow's step graph. This clearly differentiates the listing tool from its main 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 provides clear usage context and names an alternative: 'Fetch a specific one's step graph with get_workflow.' It also notes to follow llmContext guidance in results. It does not explicitly contrast with list_workflow_runs or list_workflow_versions, but the core listing-vs-fetch distinction is well-covered.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| nextPageToken | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: versions are immutable, results may include llmContext guidance that should be followed, and get_workflow is the expected follow-up for step details. 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. The first sentence states purpose and scope, and the second provides a concrete follow-up tool and notes the llmContext behavior. Every sentence earns its place and 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?
The tool has an output schema, 100% schema description coverage, and annotations covering read-only and idempotent behavior. The description fills the remaining gaps by noting immutability, the follow-up get_workflow action, and the llmContext instruction. 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 all six parameters are already documented in the input schema with meaningful descriptions. The description adds little parameter-specific meaning; 'integer deploy numbers with optional names' describes the result contents rather than input semantics. The baseline score of 3 is appropriate when the schema carries 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?
The description states a specific verb and resource: 'List a workflow's deployed (immutable) versions,' and clarifies the result shape as 'integer deploy numbers with optional names.' It also distinguishes itself from get_workflow by explicitly naming that tool for fetching steps, and the resource scope separates it from list_workflows and list_workflow_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 concrete routing guidance by telling the agent to use get_workflow for fetching a version's steps. It does not explicitly state when to choose this tool over list_workflows or list_workflow_runs, but the strong resource focus makes the intended use clear.
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. NEVER pull a whole multi-page document into context when only a section matters: pass pageRange to return just those pages, or split_document the bundle first and parse only the relevant segment's fileId — this applies even when you have not yet located the section. Full output of a long document is large — maxChars caps it; rawBlocks returns block-level structure (tables, figures, coordinates). Creates a parse run: may return status: "running" with a runId — normal, not an error; poll it with get_parse_run. Parse runs cannot be cancelled. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations by disclosing that it creates a parse run, may return status 'running' with a runId (normal), cannot be cancelled, should be polled via get_parse_run, and that pageRange slices output post-parse while the whole document is still billed. These are critical behavioral details not present in 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, covering purpose, usage boundaries, async behavior, truncation, block output, and cancellation. It is front-loaded with the core conversion purpose before moving to caveats and alternatives.
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 tool with nested objects and an output schema, the description covers all key operational concerns: async status handling, polling, cancellation, truncation, page-range behavior, raw-block output, billing implications, and environment/workspace targeting. Nothing essential 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%, and the description adds substantial meaning beyond the schema: file must be exactly one of id/url, never a bare string; pageRange is 1-indexed; maxChars truncates and sets truncated=true; environment must match a granted target from get_me; config should follow get_documentation. This deepens parameter understanding significantly.
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: converts documents (PDF, image, Office, spreadsheet) into clean structured markdown/text, and explicitly contrasts itself with extract_data for field-value/provenance needs. This clearly distinguishes it from sibling tools like extract_data and split_document.
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 when-to-use guidance ('when the user wants the content of the pages', 'OCR this', 'what does this document say') and explicit when-not-to-use alternatives ('for specific field values... use extract_data'). It also advises on partial-document scenarios with pageRange or split_document, and directs following llmContext guidance.
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. Follow any llmContext guidance included in results.
| 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 state readOnlyHint=false and destructiveHint=false. The description adds valuable behavioral context: versions are immutable, publishing operates on the draft unless a config is passed, and llmContext guidance may need to be followed. 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 sentences, front-loaded with the core purpose. Each sentence earns its place, but the phrase '(classify group)' is slightly ambiguous and the final llmContext instruction, while useful, reads as generic. Overall compact and 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?
With a complete schema (100% parameter coverage), output schema present, and annotations provided, the description covers purpose, behavior (immutability), and the config override option. It omits edge cases like failure conditions or permission prerequisites, but those are partially covered by schema descriptions (workspaceId and environment). Adequate for a publish 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%, with each parameter already described. The description adds a small amount of reinforcement ('releaseType picks the major or minor bump; pass config to publish that config instead of the draft') but does not substantially extend beyond what the schema already 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 ('Publish'), resource ('classifier's current draft config'), and outcome ('new immutable semver version'). Clearly distinguishes from related operations like create_classifier or update_classifier by focusing on versioning. The mention of pinning in runs and evaluations adds further specificity.
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?
Implies when to use this tool: when a stable, immutable classifier version is needed for pinning, vs iterating on the draft. It does not explicitly name alternative tools (e.g., update_classifier, create_classifier, publish_extractor_version), but the workflow context ('Published versions never change — keep iterating on the draft') provides clear usage framing.
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. Follow any llmContext guidance included in results.
| 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 only basic flags (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the description adds meaningful behavioral context: published versions never change, releaseType drives the bump, and a config can be passed to publish that config instead of the draft. This goes beyond the structured annotations 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?
The description is efficient: three sentences front-load the core publishing behavior, then add releaseType, config override, and immutability guidance. The parenthetical '(extract group)' and the 'llmContext guidance' sentence are slightly opaque, but they do not cause significant bloat or confusion.
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 has an output schema and a detailed input schema, the description does not need to explain return values or every parameter. It covers the central immutable-version semantics, the draft workflow, and the release-type behavior. Minor ambiguity around 'extract group' and the llmContext instruction prevents a perfect score.
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 the parameters thoroughly. The description adds little beyond restating what releaseType and config do, which is already in the schema. This is a baseline-3 situation where the schema handles 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 uses a specific verb ('Publish') and a specific resource ('the extractor's current draft config as a new immutable semver version'), and it clearly distinguishes this from sibling tools like publish_classifier_version and publish_splitter_version by scoping it to extractors. It also adds the key semantic that published versions are immutable, so it is far from 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 makes the use case clear: publish versions so runs and evaluations can pin them, and keep iterating on the draft instead of changing published versions. It implies the workflow and says when to use the tool, though it does not explicitly name alternatives or state when-not-to-use conditions, so it stops short of perfect guidance.
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. Follow any llmContext guidance included in results.
| 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?
Beyond the annotations (which indicate a non-read-only, non-idempotent mutation), the description discloses key behaviors: published versions are immutable ('Published versions never change'), publishing the current draft does not freeze the draft ('keep iterating on the draft'), and any llmContext guidance in results should be followed. This is meaningful behavioral context that the 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?
The description is compact and front-loaded. The first sentence establishes the core purpose, the second adds the two key options (releaseType and config), and the final sentences cover immutability and result guidance. Every sentence earns its place with 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?
Given the output schema exists and the input schema fully documents all six parameters, the description covers the remaining behavioral essentials: draft vs. published config, semver immutability, how releaseType works, and the llmContext instruction. An agent has enough information to decide when and how 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 coverage is 100%, so the baseline is 3. The description goes further by explaining the role of releaseType ('picks the major or minor bump') and the meaning of config ('publish that config instead of the draft'), which adds semantic clarity beyond the schema's property names. It does not repeat every parameter, but the schema already documents them fully.
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 exact action ('publish the splitter's current draft config'), the output ('new immutable semver version'), and the purpose ('runs and evaluations can pin'), which clearly distinguishes it from siblings like publish_classifier_version and publish_extractor_version. The splitter-specific context and draft-to-version flow make the tool's identity 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 provides clear context for when to use the tool: when you need an immutable, pinnable splitter version. It also hints at the alternative workflow ('keep iterating on the draft') and explains the config override path. It does not explicitly name alternative tools such as update_splitter or publish_classifier_version, but the usage context is clear enough to steer an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_file_uploadRequest a browser file upload from the userAInspect
Create an upload link for the user to add files from their computer (files group). Returns a dashboard URL; the user uploads in their browser and the files land in the target workspace. Call this last in your turn: write the returned link in your reply, then END THE TURN — do not call get_file_upload or any other tool until the user says they are done uploading. Follow any llmContext guidance included in results.
| 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 | |
| maxFiles | Yes | |
| uploadId | Yes | |
| expiresAt | Yes | |
| llmContext | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses key interaction behavior: this tool is not just a simple API call but initiates a browser-based flow, returns a dashboard URL, requires ending the turn, and should not be followed by other tool calls until the user signals completion. This is the kind of behavioral context 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?
The description is compact yet information-dense. It front-loads the core purpose, then packs essential operational warnings — end the turn, don't call other tools, respect llmContext — into a few well-structured sentences. No sentence 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?
Given the interaction complexity, the description covers purpose, return value, user flow, tool ordering, and result handling. The output schema exists, so detailed return fields need not be repeated. The description is complete enough for an agent to invoke and manage 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 (message, maxFiles, environment, workspaceId) already has a clear schema description including examples, defaults, and grant requirements. The tool description does not add 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 — 'Create an upload link for the user to add files from their computer' — and clarifies the overall flow: returns a dashboard URL, the user uploads in the browser, and files land in the target workspace. It also distinguishes this tool from the sibling get_file_upload by explicitly instructing the agent not to call that tool until upload is complete.
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: 'Call this last in your turn: write the returned link in your reply, then END THE TURN'. It also names the alternative to avoid (get_file_upload) and the condition for continuing, and instructs the agent to follow any llmContext guidance in results. This leaves little ambiguity about ordering and turn-taking.
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, and fetch individual results with the classify-run list tool filtered by batchId. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare generic hints (readOnlyHint false, idempotentHint false, destructiveHint false), so the description carries the burden for nontrivial behavior. It discloses the non-blocking nature ('Returns a batchId immediately; runs execute async'), names the polling path, and mentions llmContext guidance in results. This adds real behavioral value 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 no filler: the core submission capability, the async return behavior, and the result-retrieval path are each given one sentence. Key constraints and workflow are front-loaded, and 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 the high parameter complexity, the schema already covers parameter semantics fully, and an output schema covers return values. The description adds what is not derivable from the schema: async execution, immediate batchId, the polling tools to use, and the note to follow llmContext guidance. This makes the definition complete for an agent deciding to invoke 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 baseline is 3. The description's 'up to 1,000 documents' and 'saved processor' reflect schema facts already present in inputs.maxItems and processor, and it does not add meaning beyond the schema for parameters like environment, priority, or workspaceId.
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: 'Submit up to 1,000 documents as one batch of classify runs ... against a saved processor.' It is immediately distinguishable from sibling tools like classify_document and get_classify_batch while making the batch/async nature explicit.
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 follow-up usage guidance: 'poll aggregate status with get_classify_batch' and 'fetch individual results with the classify-run list tool filtered by batchId.' It does not explicitly contrast with single-run classify_document, so it misses an explicit when-not/alternative statement, but the intended workflow is clear.
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 (NOT a get-batch tool, even though the ID looks like a batch). Defaults to the set's resource at its latest published version; pass entity to pin { id, version: "1.2" | "latest" | "draft" }. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| evaluationSetId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already show this is not read-only and not destructive. The description adds useful behavioral context: the call is async, returns immediately with a bpr_... run ID, defaults to the latest published version, and may return llmContext guidance to follow. It doesn't fully describe side effects, but it covers the key runtime behavior 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?
The description is compact and front-loaded: purpose, async behavior, polling route, version pinning, and follow-up guidance are each covered in a short sentence with no filler. 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 the 5 parameters, nested entity object, and existing output schema, the description covers the essential runtime behavior an agent needs: async semantics, ID format, polling path, default version behavior, and llmContext follow-up. 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 parameters well. The description adds extra value by explaining the version shorthand, the default entity/version behavior, and by clarifying that the bpr_ run ID is polled via get_evaluation_run rather than a batch 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 states a specific action ('Run an evaluation set against a version of its resource') and the purpose ('score the results against the ground truth (evaluations group)'). It also clarifies the async return behavior and run ID, making it easy to distinguish from related run/batch 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 instructs to poll with get_evaluation_run and warns 'NOT a get-batch tool, even though the ID looks like a batch'. It also explains the default behavior (latest published version) and how to pin a specific version, giving an agent clear when-to-use guidance.
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, and fetch individual results with the extract-run list tool filtered by batchId. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=false), the description discloses the key behavioral trait: runs execute asynchronously and the response returns only a batchId, not results. It also tells the agent to follow llmContext guidance in results, which is useful non-obvious behavior. 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?
Three sentences, each earning its place: the first states scope and limit, the second explains the async contract and follow-up tools, and the third adds an important instruction about result guidance. It is front-loaded and free of 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?
With a rich input schema, an output schema present, and safety annotations available, the description adds exactly the missing contextual pieces: batch-size cap, async semantics, aggregation polling, individual-result retrieval, and llmContext handling. Nothing important needed for an agent to call and follow up on this tool 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 five parameters, including constraints like maxItems, enums, and the exactly-one-of id/url/text requirement. The description adds little parameter-level meaning beyond framing inputs as 1-1000 documents and the processor as 'saved'. This is the expected baseline when the schema carries the full 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?
The description states a specific action (submit), a specific resource (batch of extract runs/extract group), and a specific target (a saved processor). It clearly distinguishes this batch tool from single-run operations such as extract_data and from sibling batch tools like run_parse_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 gives clear operational guidance: it explains that the call returns immediately, that execution is asynchronous, and that follow-up must be done via get_extract_batch and the extract-run list tool filtered by batchId. It does not explicitly name a single-run alternative or state when not to use this tool, but the batching and async framing sufficiently imply the intended usage.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by disclosing asynchronous behavior: it returns a batchId immediately rather than blocking, and requires polling get_parse_batch or fetching results via list_parse_runs. It also notes the inline config applies uniformly and mentions following llmContext guidance in results, which helps agents understand expected 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?
Three sentences deliver the core action, the async follow-up pattern, and a notable behavioral instruction. The description is front-loaded with the key capability and limit, with 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?
Given the output schema exists and the input schema is already very detailed, the description completes the picture by explaining the batch lifecycle and how results are retrieved. Nothing critical is missing for an agent to call and consume 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?
The input schema already provides 100% parameter coverage with rich descriptions, including the file id/url/text union, environment pinned via get_me, workspace grants, and maxItems. The description adds little beyond the existing schema details, 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 states a specific action: submit up to 1,000 documents as a batch of parse runs. It also adds differentiating detail — no saved processor needed and optional inline config — so the tool is distinct from a single parse or other batch workflows.
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: batching multiple documents, returning a batchId immediately, and using get_parse_batch or list_parse_runs for follow-up. It does not explicitly contrast with parse_document or other run_*_batch siblings, but the context is strong enough to guide selection.
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, and fetch individual results with the split-run list tool filtered by batchId. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a mutating, non-idempotent, open-world operation; the description adds the most important trait beyond them — runs execute asynchronously and only a batchId is returned immediately. It also discloses the non-obvious instruction to follow any llmContext guidance included in results, which annotations cannot express.
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 zero filler: the core action, the async follow-up workflow, and the llmContext caveat. The purpose is front-loaded before orchestration details, and 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 an output schema present and full parameter documentation, the description correctly targets what is not in the schema: the async contract, the polling route, and result-handling guidance. Edge cases like rate limits, quotas, or failure behavior are unmentioned, but nothing necessary for a correct first call 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 the schema already documents each parameter in depth (exactly-one id/url, processor version semantics, environment enum with get_me note, workspace constraints). The description only restates the 1,000-document cap already present as maxItems, adding no new parameter-level meaning.
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 (submit) plus resource (batch of split runs against a saved processor) and scope (up to 1,000 documents). The async-execution qualifier and parenthetical (split group) clearly separate it from sibling batch tools like run_parse_batch and run_classify_batch, and from single-run split_document.
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 a concrete orchestration contract: returns batchId immediately, execute async, poll get_split_batch, fetch individual results via the split-run list tool filtered by batchId. However, it never explicitly names alternatives or states when not to use it (e.g., for a single document), so exclusions are absent.
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: a status: "running" response is normal, not an error — NEEDS_REVIEW means paused for human review in the dashboard (see dashboardUrl). 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). Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| stepSummary | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry only generic flags (readOnlyHint=false, idempotentHint=false, openWorldHint=true), so the description carries the behavioral burden and delivers. It discloses that runs take minutes to hours and a 'running' response is normal rather than an error, that NEEDS_REVIEW means paused for human review in the dashboard, and that the workflow must be deployed before it is runnable. It also adds the outputs/package exclusion and directs the agent to follow llmContext guidance in results.
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, each carrying operational weight: purpose, deployment prerequisite, async/status semantics, the package alternative, outputs injection, and llmContext guidance. Purpose is front-loaded and there is no filler, though the trailing llmContext clause is a slightly tacked-on afterthought and the density makes it a demanding read for an 11-parameter tool.
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 high-complexity tool with nested objects, mutual exclusions, and an output schema, the description covers the operational essentials: deployment gating, async expectations, special status meanings, mode selection, and the draft version escape hatch. The output schema handles return-value documentation and the schema handles parameter detail, so nothing an agent needs to invoke 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 every parameter is already richly documented, including mutual-exclusivity constraints on file/package/outputs and environment restrictions tied to get_me. The description adds some semantic rationale (why outputs exists: to skip recomputation; package for merged multi-file runs) but mostly restates what the schema already covers, so the marginal value over the schema is modest.
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+resource: 'Start a run of a deployed multi-step workflow on a document.' It anchors the tool in the 'workflows group' and its single-run scope distinguishes it from siblings like run_workflow_batch, get_workflow_run, and cancel_workflow_run. The file-vs-package modes further delimit the tool's 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?
Provides concrete when-to-use context: a workflow is not runnable until a version is deployed (or pass 'draft'), and for one merged run over 2-50 related files you should use package instead of file. The async status note implies the agent should poll elsewhere, but it never explicitly names alternative tools (e.g., run_workflow_batch or get_workflow_run), so routing guidance is clear but not fully explicit.
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. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=false (writes), openWorldHint=true (may trigger arbitrary downstream behavior), idempotentHint=false, destructiveHint=false. The description adds the key real-world behavioral fact: the tool returns a batchId immediately rather than waiting for completion, and progress must be polled via a different endpoint. It also flags that results may include llmContext guidance the agent should follow. These are not inferable from annotations, so this adds genuine value. Minor gap: doesn't mention failure semantics or partial-failure behavior, but the coverage 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?
Three sentences, zero fluff. The critical operational fact (no batch-get endpoint; use list_workflow_runs by batchId) is front-loaded in the second sentence, and the llmContext note is the only trailing detail. Every sentence earns its place, and the structure is ideal for an agent scanning fast.
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 complete for a batch-submission tool of moderate complexity. With an output schema present, the agent already knows the return shape. The description covers the key operational flow (submit → get batchId → poll list endpoint), and the schema covers parameters thoroughly. It doesn't explain retry, throttling, or partial failure, and it doesn't mention whether results arrive asynchronously per-run, but no output schema exists to confirm results structure. Given openWorldHint=true, a small note about side effects would have pushed this to 5.
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 per the rubric the baseline is 3. The description adds a small but valuable amount: it clarifies that the 'file' object requires exactly one of id/url/text and must not be a bare string, which is a subtle gotcha not fully obvious from the schema alone. It also summarizes the inputs array as '1-1000 documents.' The description does not fully restate the environment/workspace constraints, but the schema's get_me references already cover those. The description's added value nudges this above baseline.
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+resource ('Submit up to 1,000 documents as one batch of workflow runs') and clearly distinguishes it from run_workflow (single run) and list_workflow_runs (progress tracking). It names the missing batch-get endpoint, which fully disambiguates the tool from get_workflow_run and list_workflow_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 explicitly states when to use this tool (for batching 1-1,000 documents) and, crucially, tells the agent what NOT to expect: 'workflow batches have NO batch-get endpoint — track progress with list_workflow_runs filtered by batchId.' This routes the agent to the correct sibling for follow-up, which is exactly the kind of when-to-use vs alternative guidance that's needed.
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 — fetch the most relevant with get_documentation. 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 | |
| llmContext | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, idempotent, and non-destructive behavior. The description adds useful behavioral context by stating the return type (matching pages with URLs) and availability characteristics, which go beyond the structured 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 concise sentences deliver the core purpose, return behavior, and a pointer to the follow-up tool. Every sentence earns its place 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?
For a single-parameter search tool with an output schema and rich annotations, the description covers all necessary context: what it returns, how to follow up, availability, and workspace scoping. 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 single parameter is already well documented. The tool description does not add parameter-specific detail, but the schema's guidance ('topic keywords work best') is sufficient, keeping this at the baseline.
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 ('Search') and resource ('the Extend documentation'), and clearly distinguishes itself from get_documentation by noting that search returns matching pages with URLs. The purpose is unambiguous and differentiated from its 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?
Explicitly directs the agent to use get_documentation after finding the most relevant pages. Also clarifies that the tool is always available and requires no workspace targeting, which helps the agent decide when to use it without needing external context.
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. Creates a split run: may return status: "running" with a runId — normal, not an error; poll it with get_split_run. Follow any llmContext guidance included in results.
| 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 | |
| llmContext | No | |
| dashboardUrl | No | |
| failureReason | No | |
| failureMessage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only signal mutation (readOnlyHint=false), but the description adds rich behavioral disclosure well beyond that: the run may return status 'running' with a runId and that this is normal and should be polled via get_split_run; raw text input is unsupported because splitting is page-based; child file materialization produces a fileId usable in other tools; and results may carry llmContext guidance to follow. 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?
Seven sentences, each carrying distinct information: core function, positioning, mutual-exclusivity constraint, output shape, input limitation, async behavior, and result guidance. It is dense rather than padded, and front-loads the core function first. A small amount of redundancy with schema text (type: 'other', exactly-one-of) keeps it from a 5, but for a 9-parameter tool with async semantics this 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 the tool's complexity (9 params, nested objects, async runs, output schema present), the description covers everything an agent needs that isn't already in structured fields: when to use it, the splitter-or-inline-config decision, the type 'other' requirement, page-based limitation, runId polling behavior, the fileId handoff to other tools, and llmContext handling. The schemas cover parameters and return values, 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 coverage is 100%, so the baseline is 3. The description adds genuine value on top: the 'Raw text input is not supported — splitting is page-based' note corrects a false affordance in the schema (file.name mentions 'text inputs'), and the prominent 'Provide exactly one of splitter or config' reinforces a critical constraint. Some content duplicates schema text (the type: 'other' requirement), which prevents a higher 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 opens with a specific verb+resource pairing: 'Divide a combined file... into typed segments with page ranges', with concrete examples (scanned invoice bundles, merged PDFs of statements). It also differentiates itself from siblings by positioning split as the first step before parse/extract, which separates it from run_split_batch and the get_* inspection 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 gives explicit situational guidance: it is '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.' This clearly states when to use the tool. However, it never names alternatives or exclusions (e.g., when to reach for run_split_batch for bulk processing instead), so guidance stops short of being fully explicit.
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. Follow any llmContext guidance included in results.
| 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?
Description complements the annotations well: it spells out that the draft config is wholly replaced, that published versions are unaffected, and that runs pinned to them keep working. It also warns that destructive replacement is happening, which aligns with destructiveHint=true, and adds the llmContext follow-up behavior not present in 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, front-loaded with purpose, no filler. The parenthetical get_documentation tip and the immutability note each add meaningful guidance. It is compact but information-dense.
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, output schema, and schema descriptions, the tool description sufficiently covers the mutation semantics, side effects, scope of changes, and a reference for config format. An agent has what it needs to decide whether to call this tool and what to expect.
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 parameter descriptions already explain id, name, config, workspaceId, and environment. The description's phrase 'rename it and/or replace the draft config' matches the schema semantics but does not add significant new param-level meaning beyond what the schema already 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 clearly states the action (update), the resource (classifier's mutable draft), and the specific operations (rename and/or replace draft config). It goes beyond the title by clarifying that only the draft is affected and that published versions are immutable, which distinguishes it from publish_classifier_version and get_classifier.
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: it is for updating a draft, not a published version, and it even includes practical guidance to call get_documentation before hand-editing config. It does not explicitly name alternative tools like create_classifier or publish_classifier_version, but the 'draft vs published' framing strongly implies the intended scope.
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. Follow any llmContext guidance included in results.
| 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?
With destructiveHint and idempotentHint already present in annotations, the description adds useful behavioral context: only the expected output is replaced, the file pairing is immutable through this operation, and deletion/re-adding is the route for pairing changes. 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 compact, front-loaded with the core behavior, and every sentence earns its place. The key constraint and the alternative path are conveyed in two sentences with no redundant 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 annotations, the description covers the essential behavioral constraint and usage nuance. It could go slightly further by naming the specific alternative sibling tool or clarifying how llmContext guidance appears, but it is essentially complete for an agent selecting and invoking the 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?
Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-level detail beyond the schema, but it does clarify the conceptual scope of the update ('expected output') and the immutable file pairing.
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 ('Replace') on a precise resource ('one evaluation item's expected output') and clarifies that this belongs to the 'evaluations group.' It also distinguishes itself from sibling tools by noting that file pairing cannot be changed here and requires delete/re-add.
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 provides a when-not-to-use condition: if the file pairing needs to change, do not use this tool; instead delete and re-add the item. It also instructs the agent to follow any llmContext guidance included in results, giving clear contextual direction.
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. Follow any llmContext guidance included in results.
| 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?
The description adds meaningful behavioral nuance beyond annotations: it clarifies that only the draft is mutable, published versions stay intact, and runs pinned to published versions keep working. It also warns about the config replacement semantics and mentions following llmContext guidance. This goes beyond the raw destructiveHint/idempotentHint flags.
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 core purpose is front-loaded, and each subsequent sentence adds a distinct piece of useful context: immutability, schema documentation reference, and llmContext follow-up 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 essential behavioral contract: what changes, what doesn't change, what to consult before hand-editing schema, and how to handle result guidance. With an output schema present and annotations carrying safety signals, nothing critical 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 coverage is 100%, so the baseline is 3. The description adds extra value by clarifying that config replaces the whole draft config and by referencing create_extractor for shape/rules, plus noting the 'rename and/or replace' relationship between name and config. This improves on the schema's already-present 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 clearly states the action ('Update'), the specific resource ('extractor's mutable draft'), and the two concrete operations ('rename it and/or replace the draft config'). This distinguishes it from related tools like create_extractor or publish_extractor_version.
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 on what can be updated and explicitly notes published versions are immutable and unaffected, steering the agent away from expecting published changes. It also points to get_documentation when hand-editing schema, providing useful alternative guidance. It doesn't explicitly enumerate all sibling alternatives, but the context is strong.
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. Follow any llmContext guidance included in results.
| 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 carry the safety profile (destructiveHint=true, readOnlyHint=false, idempotentHint=true), and the description adds genuinely new context: replacing the whole draft config destroys prior draft state, published versions and runs pinned to them keep working, and agents should follow llmContext guidance in results. No contradiction with annotations — destructiveHint=true aligns with the whole-config replacement warning.
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 front-loaded and no filler. The get_documentation pointer and llmContext note each earn their place as behavioral guidance, though the parenthetical with the full URL makes the middle sentence slightly dense.
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, annotations, and 100% schema coverage, the description only needs to convey lifecycle behavior — and it does: draft mutability, published immutability, and pinned-run stability are all covered. Complete enough for an agent to invoke correctly, with minor room for explicit sibling routing to publish_splitter_version.
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 name, config, id, workspaceId, and environment are fully documented in the schema itself. The description adds only the framing that rename and config replacement are independent optional operations ('and/or'), a marginal increment over the schema's own config description. 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?
States a specific verb and resource — 'update a splitter's mutable draft (split group)' — and enumerates concrete actions: 'rename it and/or replace the draft config.' The explicit draft-vs-published contrast distinguishes it from create_splitter, publish_splitter_version, and get_splitter without needing to name them. Scope 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?
Frames when the tool applies (drafts, not published versions) and warns that published versions are immutable and unaffected, telling the agent this is not the tool for altering released configs. It also routes config hand-editing to get_documentation with a direct URL. It stops short of explicitly naming sibling alternatives such as publish_splitter_version for the publishing step.
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. Follow any llmContext guidance included in results.
| 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?
Annotations declare destructiveHint=true, idempotentHint=true, openWorldHint=true, and readOnlyHint=false. The description adds valuable behavior beyond those: the signing secret is immutable and will not be returned, the call replaces the global event list, and status controls delivery enable/disable. It also instructs the agent to follow llmContext results, which is practical operational guidance. It does not spell out the exact effect of advancedOptions or whether non-mentioned fields are patched, but the schema already documents fields, so a 4 is fair.
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, zero fluff, front-loaded verb+resource, followed by a compact field list and two high-value caveats. The important constraint (secret immutable) and cross-tool instruction (follow llmContext) are included without bloating the text.
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 schema, output schema, and annotations, the description covers the top-level concerns: what can change, the runtime mode instruction, and the secret caveat. The only minor omissions are explicit warning that the event list is replaced (though the schema already says full replacement) and any note about advancedOptions applying to the webhooks group — but the description names that group itself. Value-adding behavior is complete enough for 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?
Schema description coverage is 100% and quite rich: IDs are typed (wh_..., ws_...), environment is pinned by get_me grants, and enabledEvents explicitly means full replacement. The description reinforces the most semantically loaded points (status controls deliveries, advanced options are grouped, secret never changes). It doesn't redefine everything, which is correct given the schema already carries the parameter meaning.
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 ('update') and resource ('webhook endpoint') and enumerates all mutable fields (URL, name, status, event list, advanced options), which clearly distinguishes it from siblings like create_webhook_endpoint, delete_webhook_endpoint, or update_webhook_subscription. It also adds a precise non-negotiable fact: the signing secret never changes. The action and scope are 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 say 'when not to use this tool or alternatives,' but 'Update' plus the full list of supported fields provides clear context that this is the editing endpoint for a webhook endpoint rather than creation/deletion or subscription editing. The final instruction to follow llmContext guidance in results is a useful decision-continuation cue. Absence of an explicit alternative-routing statement is the only gap.
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. Follow any llmContext guidance included in results.
| 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 indicate non-read-only, destructive, idempotent behavior. The description adds useful behavioral specifics: the operation is a full replacement, endpoint/watched resource are immutable, and any llmContext guidance in results should be followed. This complements 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 sentences with no filler. It front-loads the core operation, then states the key constraint and an actionable alternative. 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?
Combined with a fully documented 4-parameter schema, an output schema, and sibling context, the description gives enough information to select and invoke the tool correctly. The only minor gap is the unexplained phrase 'webhooks group,' which creates a small amount of ambiguity.
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 meaningful description—for example, enabledEvents is described as 'Full replacement of the subscription's event list.' The tool description adds no new parameter-level detail, 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 opens with a specific verb and resource: 'Replace a webhook subscription's event list,' which directly states what the tool does. It also distinguishes itself from siblings by noting that the endpoint and watched resource cannot change, so the agent knows this is not a general 'update subscription' 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?
The description explicitly states when to use the tool (to replace the event list) and when not to use it: 'The endpoint and watched resource cannot change — delete and recreate the subscription for that.' This names a clear alternative and condition, which is strong usage guidance.
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. Follow any llmContext guidance included in results.
| 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 flag mutation and destructiveness, so the description adds value by stating that deployed versions are immutable, runs pinned to them keep working, and only the draft is affected. The instruction to follow llmContext guidance in results is an extra behavioral disclosure beyond the 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?
Three concise, information-dense sentences front-load the action and scope, then add a documentation pointer and a safety-relevant immutability note. There is no filler and 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 complex tool with a detailed schema and an output schema, the description is nearly complete: it explains the update scope, the destructive boundary, and where to get authoritative step-graph documentation. It could be slightly stronger by explicitly naming sibling tools for creating or deploying workflows, but that is not a significant 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 description coverage is 100%, so the baseline is 3. The description maps the high-level actions 'rename' and 'replace step graph' to parameters, but it adds no syntax or format details beyond what the schema already provides. The schema itself carries the detailed step-graph rules.
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: 'Update a workflow's mutable draft' and then enumerates exactly what can change: rename it and/or replace the entire draft step graph. This clearly distinguishes the tool from siblings like create_workflow, get_workflow, and deploy_workflow_version.
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 clearly positions the tool for editing an existing draft and explicitly advises calling get_documentation before hand-authoring a step graph. It does not explicitly contrast with create_workflow or deploy_workflow_version, but the draft-versus-deployed immutability statement gives strong contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user or an account that owns the GitHub organization, then choose Claim with GitHub.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables detection and analysis of pre-public product launches through web search, content extraction, AI-powered scoring, and automated alerting. Provides comprehensive tools for surfacing stealth startup signals before they trend publicly.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- AlicenseNot gradedqualityCmaintenanceEnables AI chat clients to perform market research and competitive intelligence by gathering company overviews, competitor lists, product portfolios, pricing snapshots, and recent news via live Tavily search.MIT
- AlicenseAqualityAmaintenanceDetects hiring intent signals by scanning job boards for specific companies. Returns structured role data for outbound sales targeting.13061MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool targets a distinct resource+action combination, and the descriptions actively disambiguate potential overlaps (e.g., extract_data vs parse_document, detect_form_fields vs edit_pdf, get_file vs get_file_upload). The consistent verb_noun prefix pattern makes the semantic boundary of every tool immediately recognizable.
The dominant verb_noun pattern is highly consistent across all nine domains (list_*, get_*, create_*, update_*, delete_*, run_*, get_*_run, get_*_batch, publish_*_version). Minor deviations exist: deploy_workflow_version vs publish_*_version for the same freeze-a-draft concept, and get_form_detection_run doesn't mirror its detect_form_fields counterpart.
86 tools is a very heavy agent-facing surface, well past the 25+ threshold. The count is inflated by the near-identical 13-tool lifecycle repeated across extract, classify, and split (each with list/get/create/update/publish/runs/batches/versions), and while each tool has a distinct purpose, the sheer volume makes selection harder.
Core lifecycles are thoroughly covered: create → update → publish → run (single and batch) → poll → cancel → delete-run → list runs/versions. Notable gaps include no delete tool for extractors, classifiers, splitters, workflows, or evaluation sets, and edit/form-detection runs have no list endpoint (documented workaround: keep run IDs). These are hygenic gaps that don't block primary workflows.