John's Essentials
Server Details
144 deterministic file tools: PDF, image, media, convert, analyze. Connect in one click (OAuth).
- Status
- Healthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 142 tools
Several tools are near-duplicates: octopus_mkdir duplicates octopus_make_folder, octopus_move duplicates octopus_move_file, analyze_hash overlaps generate_hash, and photo_compress/photo_compress_to_size have fuzzy boundaries. The conversion cluster (convert_file, convert_video, convert_document, convert_word_to_pdf) especially requires careful reading to pick correctly. Detailed descriptions help, but an agent is likely to misselect among the overlapping pairs.
Most names follow a category-prefixed snake_case pattern (pdf_, photo_, convert_, generate_), but the set mixes naming philosophies: octopus_* uses both verbose verbs and Unix-style mkdir, duplicate operations have different names (move vs move_file, search vs search_meta), and noun-style names like analyze_duplicate_detector, pdf_file_info, and convert_unit_convert break the verb_noun pattern. Not chaotic, but too inconsistent for a 142-tool surface.
142 tools is an extreme number for any single MCP server; even for a broad 'essentials' scope, this far exceeds what an agent can browse and select from effectively. Many tools are thin variants of each other, so the high count adds clutter rather than genuine coverage. This is a clear over-scoping failure.
For the very broad scope, coverage is unusually thorough: file storage CRUD, PDF lifecycle, conversion, image/photo, media, and generation workflows all have end-to-end paths, with batch and inspect variants supporting complex jobs. Some gaps remain (no folder deletion, no bulk OCR, no arbitrary folder listing beyond metadata search), but common workflows are not stranded. The server has more redundancy than missing functionality, so completeness is the strongest dimension.
Available Tools
142 toolsanalyze_audioARead-onlyInspect
Audio Analyzer — Analyse an audio file: duration, sample rate, bit rate, channels, codec, waveform data. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (MP3, WAV, AAC, FLAC, OGG) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds the specific set of extracted audio properties, including waveform data. This gives the agent a concrete sense of what will happen without contradicting the read-only annotation. It stops short of describing output format or limits, but annotations lower the bar here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with the action and resource front-loaded, followed by a useful property list. The 'Audio Analyzer —' prefix is redundant with the title, but the remaining text earns its place without 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?
For a single-parameter, read-only analysis tool with no output schema, the description provides the expected return dimensions and the schema handles input format documentation. It could mention output format or file-size constraints, but nothing essential is missing for correct 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%: the file parameter is already documented as an input file with accepted formats (MP3, WAV, AAC, FLAC, OGG). The description adds no additional parameter-level meaning 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 ('Analyse') and resource ('audio file'), then enumerates concrete output dimensions: duration, sample rate, bit rate, channels, codec, and waveform data. This clearly distinguishes the tool from generic analyze_file and sibling tools like analyze_video.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this tool when audio properties are needed. It does not explicitly name alternatives or exclusions, but the strong audio-specific framing and property list make the intended use obvious among the many analyze_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_color_paletteCRead-onlyInspect
Color Palette Extractor — Extract the dominant colour palette from an image. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Image (JPG, PNG, WebP) | |
| colors | No | How many dominant colours to pull out of the image. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that: no note on processing limits, supported image constraints beyond the schema, or what the extraction produces. It contributes no behavioral context of its own.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with the action stated first. The appended '[category: analyze]' tag is redundant noise but does not bloat the description meaningfully.
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?
There is no output schema, so the description could usefully say what is returned (palette list, hex values, ordering), but it does not. For a simple two-parameter read-only tool this is adequate but leaves the return shape unspecified.
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 both parameters (file and colors, with min/max/default) are fully documented in the schema. The description adds no additional meaning about the colours count or input format, 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?
States a specific verb and resource ('Extract the dominant colour palette from an image'), which is clear and actionable. It does not name or contrast with any sibling (e.g. analyze_image_quality, photo_color_adjuster), so an agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or alternative-tool guidance anywhere in the description. The '[category: analyze]' tag only restates the name prefix and provides no selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_csvBRead-onlyInspect
CSV Analyzer — Analyse a CSV file: row/column count, data types, null counts, min/max/mean per column. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (CSV) | |
| strict | No | Files over 10,000 rows are analysed from the first 10,000 only. Switch on to get an error instead of statistics that cover part of the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the specific statistics computed, which is useful context, but discloses nothing about return format or the 10,000-row sampling behavior (that lives only 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?
One compact sentence with the verb and the computed outputs front-loaded; nothing is wasted. The trailing '[category: analyze]' tag adds little selection value and is the only slight noise.
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 read-only two-parameter tool with no output schema, enumerating the returned statistics in the description is exactly the right compensation. It is nearly complete, missing only an explicit note that large files are sampled unless 'strict' is set.
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 both 'file' and 'strict' (including the row-cap behavior) are fully documented in the schema. The description adds no parameter detail beyond that, 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?
States a specific verb and resource ('Analyse a CSV file') and enumerates the concrete outputs it computes (row/column count, data types, null counts, min/max/mean per column), which is unusually informative. It does not, however, differentiate itself from format-sibling tools like analyze_file, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or alternative-tool guidance. The implicit applicability to CSV files is the only cue, and the '[category: analyze]' tag is metadata rather than routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_duplicate_detectorARead-onlyInspect
Duplicate Detector — Identify duplicate or near-duplicate files in a batch upload using perceptual hashing. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | 2-20 files to compare (any type). Files beyond the first 20 are silently ignored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds value by disclosing the perceptual-hashing mechanism, which implies approximate matching rather than byte-level comparison. It does not disclose result format, similarity threshold, or behavior on mixed file types, but the schema's note about silently ignoring files beyond 20 covers the main edge case.
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?
A single tight sentence that front-loads the purpose before the method. The 'Duplicate Detector —' prefix slightly redundantly repeats the tool name, but there is no other wasted content, and the key discriminator (perceptual hashing) is included.
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 one-parameter, read-only analyze tool with a fully documented schema, the definition covers the essential context: what it does, how it does it, and the input constraints. The main gaps — return value shape and near-duplicate threshold — are minor for an analyze-category tool with no output schema and would likely be observable at runtime.
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%: the 'files' parameter already documents the 2-20 range, accepted types, and silent-ignore behavior. The description's 'batch upload' phrasing adds minor framing but no new semantic detail 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 states a specific verb ('Identify'), a specific resource ('duplicate or near-duplicate files in a batch upload'), and the method ('perceptual hashing'). This distinguishes it from siblings like analyze_hash (plain hashing) and analyze_image_similarity (image-specific similarity) — an agent can tell what this tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'in a batch upload' implies the intended scenario (comparing a set of files at once), and the schema's 2-20 file range reinforces this. However, the description gives no explicit when-to-use vs. when-not-to-use guidance and names no alternatives, leaving the agent to infer the boundary against near-siblings like analyze_image_similarity and analyze_hash.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_encoding_detectorARead-onlyInspect
Encoding Detector — Detect the character encoding of a text or HTML file. Use when accented letters, apostrophes or quotation marks arrive as garbled symbols: it identifies which character set the file was saved in (UTF-8, Windows-1252, ISO-8859-1, UTF-16 and so on). It REPORTS the encoding only — it does not convert or rewrite the file. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (TXT, HTML, CSV, XML) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, and the description reinforces this by explicitly stating the tool only reports and does not convert or rewrite the file. It also adds useful behavioral context about what kinds of files and encoding issues it addresses. The description aligns with and slightly extends the annotation-provided safety profile.
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, starting with a clear one-line summary followed by a practical use case and an explicit scope limitation. Every sentence earns its place, and the category tag is unobtrusively appended.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, single-parameter, read-only detector tool, the description covers the trigger scenario, supported encodings, input file types, and the boundary of what it does not do. No output schema exists, but the description's 'reports the encoding only' sufficiently conveys the outcome. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'file' is already fully documented in the schema with type, format, and accepted extensions (TXT, HTML, CSV, XML), so schema coverage is 100%. The description adds no new parameter-specific semantics beyond listing example encodings, which is marginal value. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the specific action 'Detect the character encoding' and the resource 'text or HTML file.' It also distinguishes itself from conversion tools by stating 'It REPORTS the encoding only — it does not convert or rewrite the file,' making its purpose unmistakable among the large sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit trigger condition: 'Use when accented letters, apostrophes or quotation marks arrive as garbled symbols.' It also clarifies what it does not do, so an agent knows not to use it for conversion or rewriting. However, it does not name specific alternative tools or state when not to use it beyond the conversion exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_fileARead-onlyInspect
File Analyzer — Analyse a file and return type, encoding, size, MIME type, magic bytes, and structure summary. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (any) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the tool's safety profile is clear. The description adds useful behavioral context beyond the annotations by specifying the exact output facets the analysis returns (type, encoding, size, MIME type, magic bytes, structure summary). It does not disclose limitations like file size limits, but the low-risk read-only nature makes that acceptable.
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 one front-loaded sentence that immediately states the action and the return values. The 'File Analyzer —' prefix redundantly repeats the tool name and the '[category: analyze]' tag adds marginal value, but there is no meaningful padding or wasted prose.
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 one-parameter read-only tool with no output schema, the description covers the essential information: what the tool does and what it returns. The lack of explicit guidance about specialized sibling tools is a gap, but the low complexity and full schema coverage keep the definition reasonably 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?
The schema has 100% description coverage: the single binary 'file' parameter is documented as 'Input file (any)'. The description adds no extra parameter-level details, so the baseline score of 3 is appropriate since the schema fully handles parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Analyse') and names the resource ('a file') while enumerating concrete outputs: type, encoding, size, MIME type, magic bytes, and structure summary. However, it does not explicitly distinguish itself from specialized sibling analyzers such as analyze_metadata or analyze_encoding_detector, leaving some ambiguity about which tool to choose for a generic 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?
The generic phrasing 'Analyse a file' and the '[category: analyze]' tag imply this is a general-purpose analyzer, but there is no explicit statement about when to use it instead of specialized tools like analyze_audio, analyze_csv, or analyze_pdf_inspector. No alternatives or exclusions are mentioned, so the agent must infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_file_diffBRead-onlyInspect
File Diff — Show a line-by-line diff between two text files (file_a + file_b) or two pasted texts (text_a + text_b). Provide one complete pair. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file_a | No | First file — TXT, CSV, JSON, XML. Send file_a AND file_b together (file mode). | |
| file_b | No | Second file. | |
| strict | No | Only the first 2,000 lines of each side are compared. Switch on to get an error instead of a comparison that covers part of the files. | |
| text_a | No | The BEFORE version. Anything that appears only here is reported as removed. | |
| text_b | No | The AFTER version. Anything that appears only here is reported as added. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the two operating modes and the pairing constraint, but it omits the 2,000-line truncation behavior (that detail lives only in the strict parameter's schema text), so it contributes limited behavioral context beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and the two supported input shapes, with no filler. The category tag adds no value, and the trailing 'Provide one complete pair' sentence is slightly clipped, keeping it short of a 5.
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 no output schema, the description carries some burden for describing return values, yet it only says 'line-by-line diff' without indicating the format (unified, split, etc.). Input modes are adequately covered, but output expectations for a diff tool remain underspecified.
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 the pairing rule and the 2,000-line/strict behavior. The description's reference to (file_a + file_b) and (text_a + text_b) restates what the schema already conveys, 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 verb and resource ('Show a line-by-line diff between two text files... or two pasted texts'), which is far clearer than a generic name restatement. It does not explicitly differentiate itself from the closest sibling, photo_image_diff, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Provide one complete pair' gives a useful mutual-exclusivity constraint (file mode vs. text mode), which is real usage guidance. However, there is no explicit when-to-use, when-not-to-use, or pointer to any alternative tool, so it remains 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.
analyze_font_detectorARead-onlyInspect
Font Detector — Detect fonts used in a PDF or DOCX document. Images are not supported. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF, DOCX) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already communicates that this is a non-mutating operation. The description adds useful behavioral context by limiting inputs to PDF/DOCX and excluding images, but it does not disclose additional behaviors such as output format, behavior on unsupported files, or font-detection limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact, front-loaded sentence. It leads with the tool's role, follows with accepted formats, and ends with the key exclusion. No unnecessary 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 simple one-parameter, read-only tool with no output schema, the description adequately covers the core scenario: input file types and an important unsupported case. It does not detail return structure, but the tool name and action make the expected output reasonably 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?
The schema already documents the single 'file' parameter as PDF/DOCX input, so the description is not the only source. However, it adds meaningful semantic value by explicitly stating that images are unsupported, which clarifies the accepted input domain 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 action ('Detect fonts') and the resource scope ('PDF or DOCX document'), with an explicit exclusion of images. This makes it unmistakable what the tool does and distinguishes it from the many sibling analyze_* 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 when-to-use context: any PDF or DOCX where font detection is needed. It also gives a when-not-to-use signal by explicitly stating that images are not supported, though it does not name a specific alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_grammar_checkBRead-onlyInspect
Grammar Checker — Hybrid LanguageTool + Grok grammar checker with rule citations, style-guide awareness (APA/MLA/Chicago/AP/IEEE), dialect enforcement (US/UK/CA/AU), and per-issue severity. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Keep my voice leaves your phrasing alone; Strict also flags casual or loose wording. | tone-preserving |
| text | Yes | The text to check (max 50,000 characters). | |
| style | No | Style-guide conventions to enforce (e.g. Oxford comma for APA/MLA/IEEE/Chicago, dropped for AP). | none |
| dialect | No | English dialect for spelling and grammar rules. | en-US |
| include_llm | No | Adds a second pass that catches wording and context problems the rule checker cannot see. Turn off for rule-based results only, which is faster. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds meaningful behavioral context such as the two-engine hybrid design that 'catches wording and context problems the rule checker cannot see' and the per-issue severity output. It stops short of describing permissions, limits, or return structure.
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?
A single dense sentence front-loads the tool category ('Grammar Checker —') and then enumerates differentiating features without redundancy. The trailing '[category: analyze]' tag is minor metadata clutter but the rest 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 five-parameter read-only analysis tool with no output schema, the definition covers capabilities well but omits return shape (e.g., structured issue list vs text) and the 50k character limit lives only in the schema. Adequate but not complete for an agent that needs to know what comes back.
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 all five parameters carry detailed descriptions, enums, and UI labels, so the schema does the heavy lifting. The description names the style guides and dialects but adds no syntax or format detail beyond what the schema already provides, matching the baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb-resource pair (grammar checking of text) and enriches it with concrete capabilities: hybrid LanguageTool + Grok engine, rule citations, style-guide and dialect enforcement, and per-issue severity. The purpose is unambiguous, though it never distinguishes itself from the sibling analyze_grammar_check_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 lists features but gives no when-to-use or when-not-to-use guidance. It never explains how this single-text checker relates to analyze_grammar_check_batch, leaving the agent to infer which tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_grammar_check_batchBRead-onlyInspect
Grammar Checker (Batch) — Run the hybrid grammar checker across up to 20 texts in one call; per-item style, dialect, and mode supported. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Up to 20 texts to check. Each item carries its own style / dialect / mode / include_llm. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered externally. The description adds the 20-text cap and the hybrid nature of the checker, which is useful. It does not disclose latency, rate limits, or output shape beyond what the schema 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?
A single, front-loaded sentence that names the tool, its scope, and the per-item flexibility without padding. Efficient, though the 'hybrid' qualifier and category tag add marginal clutter.
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 read-only tool with full schema coverage and no output schema, the description covers the essentials. However, it does not describe the return shape (per-item results keyed by id) or failure behavior for invalid items, leaving a small gap an agent would benefit from knowing.
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 id, mode, text, style, dialect, and include_llm with enum semantics. The description only restates that per-item style/dialect/mode are supported, adding no meaning beyond the schema. 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+resource: run the hybrid grammar checker across up to 20 texts. The batch scope and per-item override are clear. It does not explicitly distinguish from the singular sibling analyze_grammar_check, but the 'Batch' label and 'up to 20 texts' phrasing implies the distinction.
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 'up to 20 texts in one call' implies batch usage, but the description never says when to prefer this over analyze_grammar_check or what to do beyond the 20-item limit. Usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_hashBRead-onlyInspect
Hash Generator (File) — Compute MD5, SHA-1, SHA-256, and SHA-512 hashes of an uploaded file. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | The file to hash. Any type, of any size we accept. | |
| text | No | Hash typed text instead of a file. Ignored if a file is attached — the file wins. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that hashing accepts files of any size, but says nothing about output format, performance on large files, or how it differs behaviorally from generate_hash.
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?
Single dense sentence with no waste, title prefixed at the front and algorithms listed inline. The bracketed '[category: analyze]' tag is metadata noise but harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the core operation and the algorithm set for a 2-param, no-output-schema tool. But with a confusingly similar sibling (generate_hash), the definition should clarify the file-vs-generated-text distinction to be 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 coverage is 100%, and the schema descriptions are actually richer than the tool description (they document the file-vs-text precedence rule: 'the file wins'). The description adds no parameter meaning beyond what the schema already provides, 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?
States a specific verb (compute hashes), resource (uploaded file), and enumerates the algorithms (MD5, SHA-1, SHA-256, SHA-512). It does not differentiate itself from the sibling 'generate_hash', which is a near-identical name, leaving the agent to guess which to pick.
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 on when to use this vs. the sibling 'generate_hash', nor any prerequisites. The only hint is the '(File)' suffix in the title, which is not framed as an explicit routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_image_qualityARead-onlyInspect
Image Quality Analyzer — Measure sharpness, noise level, compression artefacts, and BRISQUE quality score of an image. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (JPG, PNG, WebP) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds behavioral detail by enumerating exactly what the tool computes. It does not discuss output format or file size limits, but for a read-only analyzer these gaps are minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with the core operation front-loaded and no filler. The leading 'Image Quality Analyzer' phrase slightly duplicates the tool title/annotation, keeping it from a perfect score.
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 one-parameter, read-only analysis tool, the description sufficiently explains what the tool does and what metrics it returns. It omits the exact return format, but the listed metrics are enough for an agent 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%: the only parameter, 'file', is already documented with accepted formats. The description's phrase 'of an image' adds little semantic value beyond the schema, 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 uses a specific verb, 'Measure', and names four concrete outputs: sharpness, noise level, compression artefacts, and BRISQUE quality score. This clearly distinguishes it from sibling tools like analyze_image_similarity or analyze_metadata.
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: use this tool when you need objective image quality metrics. It does not explicitly mention alternatives or when-not-to-use conditions, so it stops just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_image_similarityBRead-onlyInspect
Image Similarity — Compute a perceptual similarity score between two images (pHash distance). Takes two separately-named uploads: 'file_a' and 'file_b'. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file_a | Yes | First image — JPG, PNG | |
| file_b | Yes | Second image — JPG, PNG |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only safety (readOnlyHint=true), and the description adds the algorithmic context that 'similarity' means pHash distance, which is genuinely useful. It also clarifies that file_a and file_b must be separately-named uploads, a non-obvious calling trait. However, it does not disclose the output score's range, direction, or thresholds, leaving result interpretation ambiguous.
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?
A single front-loaded sentence that leads with the core purpose, then the calling detail, then a category tag — no filler. The only redundancy is restating the exact title 'Image Similarity' at the start, which is a minor deduction.
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 low-complexity, read-only tool with fully documented parameters, inputs and core behavior are adequately covered. The notable gap is the absence of an output schema combined with no description of the score's format or interpretation, which an agent needs to judge how to use the result. Adequate but not 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%, both binary params are documented with accepted formats (JPG, PNG), so the baseline of 3 applies. The description adds only the minor clarification that the two uploads must be separately named, which is a small enhancement over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Compute') and resource ('perceptual similarity score between two images'), and pins down the method (pHash distance). The pHash detail implicitly differentiates it from siblings like photo_image_diff (pixel diff) and analyze_image_quality, so an agent can tell them apart 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?
No guidance on when to choose this tool over its many related siblings (photo_image_diff, analyze_image_quality, describe_image, etc.). There are no conditions, exclusions, or alternative tool names. The only operational hint — that inputs are two separately-named uploads — concerns calling convention, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_link_extractorARead-onlyInspect
Link Extractor — Extract all hyperlinks from a PDF or HTML file, or from pasted text. Other file types are scanned as raw text. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | A PDF or HTML file to pull the links out of. Any other type is read as plain text. | |
| text | No | Paste text or HTML to pull links out of. Ignored if a file is attached — the file wins. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety and locality are covered. The description adds one genuine behavioral trait beyond the annotations — that non-PDF/HTML files are scanned as raw text — but says nothing about return format, link deduplication, or error behavior. With annotations carrying the safety profile, this is adequate but thin.
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, the primary purpose front-loaded before the fallback caveat. Efficient and easy to scan. The trailing '[category: analyze]' tag is minor filler rather than useful 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 two-optional-parameter tool with no output schema, the description covers what is extracted and how non-target formats are handled, which is most of what an agent needs. It omits expected output shape, but with no output schema present and a simple read-only operation, the gap is minor.
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 both parameters are fully documented in the schema, including the 'file wins over text' precedence rule. The description adds only the raw-text fallback framing, which is already implied by the file parameter's own description. Baseline 3 is correct when 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?
States a specific verb (extract) and resource (hyperlinks) plus the input scope (PDF, HTML, or pasted text), so the agent knows exactly what this tool produces. It does not explicitly distinguish itself from adjacent siblings like pdf_to_text or web_scrape_page, which is the only thing keeping it from a 5.
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 when to use it by listing accepted input types and the raw-text fallback for other files, which is useful. However, it never names an alternative (e.g. pdf_to_text, web_scrape_page) or states when another tool would be preferable, so usage 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.
analyze_metadataARead-onlyInspect
Metadata Viewer — Extract and display all metadata from a file (EXIF, PDF info, document properties, audio tags). [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (any) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe, read-only operation. The description adds useful scope by enumerating metadata types, but it does not disclose output format, potential limitations of 'all metadata', or how results are returned, leaving a moderate behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with useful examples and no fluff. The 'Metadata Viewer —' prefix is slightly redundant with the annotation title, and the '[category: analyze]' tag adds minimal value, which keeps it from a perfect score.
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 low-complexity tool with one required parameter, a readOnlyHint annotation, and a simple 'display all metadata' output concept, the description is mostly sufficient. The lack of an output schema and any mention of output format or supported file limitations is a minor gap, but not enough to make the tool hard to invoke.
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%: the only parameter, 'file', is already described as 'Input file (any)'. The description adds the context that the file's metadata will be extracted, but it does not add format, size, or encoding semantics 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 clear action ('Extract and display') on a well-defined resource ('all metadata from a file') and gives concrete metadata categories (EXIF, PDF info, document properties, audio tags). It does not explicitly distinguish itself from siblings like photo_exif_viewer or pdf_get_metadata, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use this when you need general metadata from a file. However, it provides no explicit guidance about when to choose this instead of the more specialized metadata-related siblings, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_pdf_inspectorARead-onlyInspect
PDF Inspector — Deep inspection of a PDF: page count, fonts used, annotations, form fields, embedded files. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with readOnlyHint:true and openWorldHint:false, and 'inspection' signals no mutation. It adds the scope of what is read but does not disclose potential limits like file-size restrictions, authentication needs, or response format. Because annotations already cover the read-only safety profile, the description meets the baseline but adds limited extra behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with the tool's role followed by an enumerative list of inspection targets and a category tag. It contains no filler, though the phrase 'PDF Inspector' slightly duplicates the title annotation.
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-input, read-only inspection tool, the description is largely sufficient: it names the input type, the operation, and the main output categories. However, since there is no output schema and several overlapping PDF-analysis siblings exist, a brief note on where this tool fits among them would make it fully self-sufficient.
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 only parameter, file, is fully documented in the schema as 'Input file (PDF)' with binary format. The description repeats the PDF context but contributes no additional constraints or format details. With 100% schema description coverage, 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 identifies a specific function—deep inspection of a PDF—and enumerates concrete deliverables (page count, fonts, annotations, form fields, embedded files). It clearly places the tool in the analysis category, though it does not explicitly distinguish it from overlapping PDF-analysis siblings like pdf_file_info or pdf_page_count.
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 [category: analyze] tag and the 'deep inspection' phrasing imply the tool is for broad read-only analysis of a PDF. However, the description provides no explicit guidance on when to use this tool instead of alternatives such as pdf_page_count, pdf_file_info, or analyze_metadata, and gives no when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_readabilityBRead-onlyInspect
Readability Scorer — Calculate Flesch Reading Ease and Flesch-Kincaid Grade Level for a text. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Alternative: upload a .txt, .pdf, or .docx document (max 25MB). | |
| text | No | Paste the text to score — about five words minimum. Leave blank if you are uploading a document instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint=false annotations already establish this as a safe, local, non-mutating computation, so the bar is lower. The description adds only the implicit fact that two numeric scores are returned; it says nothing about determinism, language limitations, or error behavior for very short input.
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?
A single front-loaded sentence states the tool and its two exact output metrics; the category tag is the only inert token. Nothing is padded or repeated.
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 deterministic two-input calculator with fully documented parameters and read-only annotations, the description covers what the agent needs to invoke it. The lack of any output-format or edge-case note is a minor gap given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — the file field explains accepted formats and the 25MB cap, and the text field explains the ~5 word minimum and the upload alternative. The description adds no parameter meaning beyond that, 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?
Names a specific verb (Calculate) and precise resources (Flesch Reading Ease, Flesch-Kincaid Grade Level) applied to a text, so the agent knows exactly what it produces. It does not differentiate itself from adjacent siblings such as analyze_grammar_check or analyze_word_count, which is the only thing keeping it from a 5.
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 is a pure capability statement: it never says when to reach for this tool versus analyze_grammar_check, analyze_word_count, or analyze_word_frequency, and states no prerequisites or exclusions. Nothing about alternative selection is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_sslARead-onlyInspect
SSL Checker — Check an SSL certificate for a hostname: expiry, issuer, validity, cipher suite. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | The site to check, e.g. example.com — just the address, with no https:// in front and no page path. A port number is ignored; 443 is always used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows this is a safe, outbound read. The description adds the returned fields but says nothing about behavior beyond that — no timeouts, no rate limits, and crucially no statement of what happens on an expired, self-signed, or unresolvable certificate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight, front-loaded sentence that leads with the verb and resource and ends with the payload fields. The bracketed '[category: analyze]' tag is metadata noise that adds no agent-facing value.
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 no output schema, the description responsibly enumerates the return fields, and the single required parameter is fully documented. What's missing is failure-mode behavior, which matters for a network-dependent check against hosts that may not be reachable.
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 hostname field is documented in detail (no scheme, no path, port ignored, 443 forced). The description contributes nothing 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?
States a specific verb (Check) and resource (SSL certificate) and enumerates what it reports: expiry, issuer, validity, cipher suite. No sibling in the analyze_* family touches TLS/SSL, so the tool is unambiguous against its peers.
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?
Usage is readily inferable from the description (check the certificate of a host), but there is no explicit when-to-use or when-not, no note on prerequisites (network reachability, DNS resolution), and no mention of an alternative for related checks. Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_videoARead-onlyInspect
Video Inspector — Inspect a video: duration, resolution, frame rate, codec, audio tracks, bitrate. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (MP4, MOV, AVI, MKV, WebM) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'Inspect' and 'Video Inspector'. The description adds value by specifying the exact behavioral scope—what properties are examined—without claiming any side effects. No contradictions with annotations exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one tight sentence with a clear title prefix, an action verb, and a comma-separated list of outputs. Every word earns its place, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with one binary input and no output schema, the description sufficiently conveys what the tool returns by listing the inspected video properties. The agent can select and call the tool with confidence without missing critical 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?
The schema has 100% description coverage for the single 'file' parameter, including supported formats. The tool description does not add additional parameter-level meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Inspect') and resource ('a video') and enumerates the exact properties inspected: duration, resolution, frame rate, codec, audio tracks, and bitrate. This clearly distinguishes it from sibling tools like analyze_audio or analyze_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?
The description implies this tool is for inspecting video metadata and properties, so an agent can infer when it is appropriate to use. However, it does not explicitly state when to prefer it over related tools such as analyze_file, analyze_metadata, or media_extract_audio, nor does it provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_word_countBRead-onlyInspect
Word Counter — Count words, characters, sentences, paragraphs, and reading time in a text or uploaded document (.txt/.pdf/.docx). [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Alternative: upload a .txt, .pdf, or .docx document (max 25MB). | |
| text | No | Paste the text to count. Leave blank if you are uploading a document instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds supported input modes (pasted text or uploaded .txt/.pdf/.docx) and the metric set, which is useful context, but says nothing about limits, failure modes, or output behavior beyond what the schema states.
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?
A single front-loaded sentence that names the tool and enumerates its outputs immediately. Efficient, with only the trailing '[category: analyze]' tag as mild noise.
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 read-only counting utility with two optional, fully documented parameters, the description covers inputs and metrics adequately. The only gap is that no output schema exists and the shape of the returned counts is never described.
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 both parameters are already documented with their formats and the file size limit. The description's mention of the same file types duplicates the schema rather than adding syntax or precedence guidance, 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?
States a specific verb (Count) and resource (words, characters, sentences, paragraphs, reading time) across two input modes, so the agent knows exactly what the tool produces. It does not, however, differentiate itself from close siblings like analyze_word_frequency or analyze_readability, which is what a 5 would require.
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 never says when to reach for this tool instead of analyze_word_frequency, analyze_readability, or analyze_grammar_check, which all operate on text. Usage is only implied by the 'Count' verb; there are no named alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_word_frequencyBRead-onlyInspect
Word Frequency Analyzer — Analyse word frequency distribution in a text or document file. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Text or document file | |
| text | No | Direct text input. Provide either file or text. | |
| topN | No | Show this many of the most common words, most frequent first. | |
| exclude | No | Comma-separated, e.g. the, and, of. Capitals and spacing do not matter. Words under two letters are always ignored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds only that input may be a text or document file, which the schema already states; it discloses nothing about ordering of results, edge cases (e.g. words under two letters being ignored), or usage limits 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?
One front-loaded sentence states the tool's function with no wasted prose. The appended category tag is mildly redundant but does not impede comprehension.
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 read-only analysis tool with full schema coverage and no output schema, the description is minimally adequate — it names the function and input sources. It omits any hint about output shape or result ordering, which the absent output schema leaves unexplained.
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 every parameter (file, text, topN, exclude) is already documented in the schema, and the baseline is 3. The description adds no syntax, formatting, or mutual-exclusivity detail 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 states a specific verb and resource — analysing word frequency distribution — and clarifies the input can be either a text or a document file. It is clear enough to distinguish from generic analysis siblings, though it never explicitly contrasts with close relatives like analyze_word_count or analyze_readability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as analyze_word_count or analyze_duplicate_detector. The agent must infer that this tool is for frequency distribution rather than simple counting purely from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_archiveAInspect
Archive Converter — Convert between archive formats. Input: ZIP, RAR, 7Z, GZ/TAR.GZ, TAR.BZ2, TAR.XZ, TAR, CAB, ISO — recognized by filename extension or file signature, so misnamed uploads work. Output: ZIP, TAR, TAR.GZ, TAR.BZ2, TAR.XZ, 7Z. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The archive format you want back. ZIP opens on every computer without extra software. | zip |
| file | Yes | Archive to convert — ZIP, RAR, 7Z, GZ, TAR, TAR.BZ2, TAR.XZ, CAB, ISO (max 200MB) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (readOnly=false, destructive=false, openWorld=false). The description adds real value beyond them by disclosing that inputs are detected via filename extension OR file signature, which is a non-obvious behavioral trait (misnamed uploads still work). It does not clarify that output is a newly produced file, leaving one small gap.
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?
Front-loaded with the purpose, then terse Input/Output format lists, with no filler. The trailing [category: convert] tag is brief metadata that does not bloat the definition.
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 no output schema, the description carries the burden of describing results; it thoroughly covers accepted and produced formats but never states what is actually returned (e.g., a converted file/download). That single gap keeps it from being fully complete for a conversion 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 both parameters are already documented, including the 'to' enum values and the 200MB limit. The description's format lists largely restate the enum and accepted input types, adding little beyond the schema. 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+resource ('Convert between archive formats') and enumerates concrete input and output formats, so the scope is unambiguous. It does not name or differentiate from adjacent siblings such as files_zip, files_unzip, or convert_file, which keeps it at 4 rather than 5.
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 input/output format lists imply the usage context (you have one listed format, want another), but there is no explicit when-to-use guidance, no exclusions, and no pointer to alternatives like files_zip/files_unzip. Usage must be inferred from the format coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_batchAInspect
Batch Converter — Convert many files in one request and download a ZIP of the results. Auto-target rules pick a sensible output format per file (docx→pdf, heic→jpg, mov→mp4, etc.) or specify a global target like 'pdf' or a per-extension override map. Free tier supports up to 5 files; Business tier up to 50. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | 200 MB combined cap. Rows that can't convert are skipped, not fatal — check _manifest.txt in the ZIP for per-row status. | |
| target | No | What to turn every file into. Leave it on 'auto' and we pick a sensible result for each one (Word becomes PDF, HEIC photos become JPG, MOV becomes MP4). Type a single format, like pdf, to force them all the same way. | auto |
| filenames | No | Not used by this tool — the names come from the uploaded files themselves. Leave it empty. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (readOnly=false, destructive=false, openWorld=false). The description adds real behavioral context beyond that: output is a ZIP download, tier-based file caps (5 free / 50 business), and the auto-target mapping rules. It does not cover failure handling, though the schema's per-row skip behavior is disclosed on the files param.
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?
Front-loaded with the core action and return value in the first clause, followed by target modes and tier limits in a logical order. It is appropriately sized, with only the trailing '[category: convert]' tag adding noise.
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 no output schema, the description carries the burden of explaining the return (a ZIP) and does so, plus the auto-target behavior and tier caps. The only gap is the under-explained 'per-extension override map' whose accepted format is left vague.
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 beyond the schema by explaining the auto-target mapping (docx→pdf, heic→jpg, mov→mp4) and a 'per-extension override map' mode not reflected in the string-typed target field. That extra mode is mentioned without format detail, which weakens the addition slightly.
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 ('Convert many files in one request') and the outcome ('download a ZIP of the results'), which clearly distinguishes it from the many single-file convert_* siblings and from the pdf_*_batch tools. An agent can tell it is the multi-file, mixed-format converter without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear in-tool routing ('many files in one request', auto vs global target vs per-extension override) so the agent knows which mode to pick, and the tier limits imply when it is inappropriate (over 5 files on free tier). It does not explicitly name a sibling alternative for single-file conversions, so no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_contactAInspect
Contact Converter — Convert contact/calendar/email formats: vCard↔CSV, vCard→XLSX (vcf to excel), ICS→JSON/CSV, MSG→EML, EML→PDF. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Target format. Only these pairs are valid: vcf→csv, vcf→xlsx, csv→vcf, ics→json, ics→csv, msg→eml, eml→pdf. | |
| file | Yes | Parsed as the declared 'from' — bytes are never sniffed. Size caps vary by pair: 10 MB vcf/csv/ics, 25 MB eml, 50 MB msg. | |
| from | Yes | Source format. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the operation is not read-only and not destructive, so the description adds little behavioral context beyond that. It does not state what happens to the input, how the output is returned, or any side effects. The format list is more about scope/parameters than 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 a single, readable sentence that front-loads the tool's purpose and supported conversions. It contains minor redundancy ('vcf to excel' repeats vCard→XLSX, and 'Contact Converter —' echoes the title), but it is still compact and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully covers the parameters, and the description clarifies the conversion domain, making the tool invocable. However, there is no output schema and the description does not explain what the tool returns or how the converted file is delivered, which is a notable gap for a conversion 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 even though the description adds minimal parameter detail. The description repeats valid format pairs that are already documented in the 'to' parameter description, so it does not meaningfully enhance the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's specific verb ('Convert') and resource ('contact/calendar/email formats'), listing exact format pairs. This distinguishes it from the many generic convert_* siblings like convert_file and convert_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?
The description gives clear context on when to use the tool by enumerating supported conversions (vCard↔CSV, vCard→XLSX, ICS→JSON/CSV, MSG→EML, EML→PDF). It does not explicitly name alternatives or exclusions, but the domain is specific enough for an agent to route appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_dataAInspect
Data Converter — Convert a data file between formats (JSON, NDJSON/JSONL, CSV, TSV, XML, YAML, TOML, INI). Upload the data file and pick a target format; the result comes back as a downloadable file (so it chains in workflows). Inline text is also accepted via a JSON-body 'input' string instead of a file. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The format you want back. It has to be different from what you put in. | json |
| file | Yes | The data file to convert (max 5MB). | |
| from | No | Source format. Optional — inferred from the file extension when omitted. 'ndjson' (aka jsonl) is newline-delimited JSON; 'tsv' is tab-separated values. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond the annotations: the result is returned as a downloadable file ('so it chains in workflows') and inline text can be supplied instead of a file. Annotations already establish the write/non-destructive profile. It still omits failure behavior (e.g. what happens when source == target), which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded paragraph that leads with verb+resource, then the format list, then the two notable behaviors. Every sentence carries information; the trailing '[category: convert]' tag is minor noise but the body is efficient.
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 no output schema, the description steps in to explain that output is a downloadable file, and it covers both input modes. It is nearly complete for a converter, with the only gap being the undocumented 'input' path and no statement of conversion failure conditions.
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 three parameters at 100%, so the baseline is 3. The description adds some meaning (inline mode, chaining) but also references an 'input' JSON-body string that does not appear in the schema, creating a mild mismatch rather than enriched semantics for the actual 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?
States a specific verb and resource ('Convert a data file between formats') and enumerates the exact format set (JSON, NDJSON/JSONL, CSV, TSV, XML, YAML, TOML, INI). That format list implicitly distinguishes it from sibling converters like convert_video, convert_archive, photo_format_converter or convert_word_to_pdf, but no sibling is named explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the mechanics of invocation (upload a file and pick a target format, or pass inline text) which implies usage, but gives no when-to-use/when-not guidance and never names an alternative such as convert_file, convert_text or convert_parquet. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_documentAInspect
Document Converter — Office & document converter — DOCX/DOC/ODT/RTF/XLSX/XLS/ODS/CSV/PPTX/PPT/ODP/HTML/EPUB/TXT → PDF plus office round-trips (csv→xlsx, docx→odt, epub→pdf) via LibreOffice; MARKDOWN → pdf/docx/html/epub/txt via pandoc with real GFM semantics (headings, lists, tables, code fences); and DOCX/HTML/PDF → MARKDOWN (the LLM-ingestion direction — turn a document into clean GFM an agent can read; PDF via text-layer extraction); plus Jupyter notebooks (.ipynb) → pdf/html/docx/md via pandoc. Pass 'from' so the converter knows the source format. For images/audio/video use convert_file; for data-text transforms use convert_data. Capability envelope: a PDF source extracts to text/markdown only (to=md) — for editable output from a PDF use pdf_to_word / pdf_to_excel / pdf_to_text / pdf_to_images. Office conversions are same-category only (Word↔Word, Sheet↔Sheet, Slides↔Slides) plus any→pdf; cross-category conversions (e.g. Word→slides, Sheet→Word) are not supported. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | What you want back. PDF works from every source. Word stays Word, spreadsheets stay spreadsheets, slides stay slides — a Word file cannot become slides. A PDF source can only come back as Markdown. | |
| file | Yes | Max 25 MB. Routed by filename extension first; the 'from' field is the fallback for synthetic/extensionless names. | |
| from | Yes | What the file is now. We normally read this from the file name; set it when the file has no name or an odd one. Markdown and Jupyter notebooks always take their own route, so say so here for those two. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=false. The description adds real behavioral context beyond them: the LibreOffice-vs-pandoc routing, the same-category restriction, and the PDF-extracts-to-text-only limitation. It stops short of describing side effects of file creation/output location, which keeps it below a 5.
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?
Front-loads the primary conversion matrix and constraints before the alternative-tool routing. It is dense and slightly repetitive (the long format list and the 'Pass from' instruction partially restate the schema), but 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?
For a 3-param, mutation-flagged conversion tool with no output schema, the description covers inputs, conversion limits, engine routing, and alternative tools comprehensively. It does not describe the returned artifact's form, but that is a minor gap given the thoroughness elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining converter routing per source ('from' selects the conversion engine; md and ipynb always take their own route) and re-emphasizing the 'Pass from' requirement, though much of the format list duplicates the enum 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+resource (document conversion) and enumerates the supported format families and conversion matrices. It explicitly distinguishes itself from sibling tools (convert_file, convert_data) and enumerates the route taken per source (LibreOffice vs pandoc). An agent can tell exactly what this tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names alternatives conditionally: 'For images/audio/video use convert_file; for data-text transforms use convert_data', and routes PDF-to-editable output to pdf_to_word / pdf_to_excel / pdf_to_text / pdf_to_images. It also states the exclusion envelope (same-category office only, plus any→pdf; cross-category unsupported), so when-not-to-use is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_ebookAInspect
eBook Converter — Convert ebooks between formats with calibre: mobi, azw3, fb2, lit and pdf → EPUB, plus epub → mobi/azw3 for older devices. EPUB is the format modern Kindles accept for send-to-device, so →epub is the recommended direction. DRM-protected books cannot be converted. pdf→epub reflows fixed pages, so quality varies with layout complexity; epub→pdf is handled by convert_document (LibreOffice). [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The format you want back. EPUB is what a modern Kindle accepts when you send a book to it, so it is the usual answer. Pick MOBI or AZW3 only for an older device. | epub |
| file | Yes | The ebook itself. Bytes are sniffed and must match 'from' (mismatch = 400). DRM-protected books always fail. | |
| from | Yes | Source ebook format — REQUIRED. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (non-readOnly, non-destructive, closed-world), so the description's added value is the operational caveats: DRM-protected books always fail, byte sniffing must match 'from' or the call 400s, and pdf→epub reflow quality varies with layout. These are real behavioral traits beyond the annotations, though return format/pagination are not addressed (not applicable without an output 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?
A single dense, front-loaded paragraph that leads with the action and conversion directions before caveats. Efficient overall, though the bracketed category tag and some format-list redundancy slightly dilute it.
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 3/3 required params, 100% schema coverage, and no output schema to explain, the description covers everything an agent needs: supported directions, the recommended target, failure modes (DRM, sniff mismatch), and the sibling route for the uncovered direction.
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 largely restates the schema's own guidance (EPUB recommended, older-device fallback). It adds only marginal new 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 verb (Convert) and resource (ebooks) and enumerates supported directions (mobi/azw3/fb2/lit/pdf → EPUB, epub → mobi/azw3). It also explicitly distinguishes itself from convert_document, which handles epub→pdf, so an agent can route correctly without opening both 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?
Gives clear when-to-use guidance (→epub is the recommended direction because modern Kindles accept it), when to pick alternatives (mobi/azw3 only for older devices), and an explicit hand-off to a sibling for the one direction this tool does not cover. Also states an exclusion (DRM-protected books cannot be converted).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_fileAInspect
Universal File Converter — Convert a file between formats: image↔image (jpg/png/webp/bmp/tiff/gif/avif/ico, plus heic/svg/psd as inputs), audio↔audio (mp3/wav/ogg/opus/flac/aac/m4a/wma/aiff, plus alac=Apple Lossless delivered as .m4a), video↔video/GIF (Business gate on some edges) plus legacy flv/wmv/3gp/mpg/vob/ts/m2ts → mp4, extract audio from video (mp4/mov/mkv/webm/avi → mp3/wav/aac/m4a/ogg/flac/opus/aiff/alac), subtitles (srt↔vtt, and srt/vtt→txt), DOC/DOCX/TXT→PDF, image→PDF, comic archive CBZ→PDF. Office/document conversions (xlsx, pptx, csv→xlsx, epub, html) live in convert_document; archives in convert_archive; data formats in convert_data. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The format you want back. Apple Lossless (alac) is delivered as a .m4a file. | |
| file | Yes | The file to convert. We read its current format from the file itself, so you only need to say what you want back. | |
| from | No | Leave blank and we read the format from the file itself. Only set it if the file has no name or an odd one. | |
| gif_fps | No | Frames per second. Higher is smoother and bigger. If the width and frame rate together are too heavy we keep the width and ease this down. | |
| gif_width | No | How wide the GIF should be, in pixels. Height follows automatically. Very wide plus very smooth is capped - we keep the width you asked for and ease the frame rate down. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the agent knows it's a non-destructive, closed-world mutation. The description adds useful format-edge notes (alac delivered as .m4a, heic/svg/psd input-only, legacy video formats normalized to mp4, GIF capping behavior) that go beyond annotations. But the 'Business gate on some edges' is mentioned without explanation of what triggers it or how to handle a gated failure.
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 first sentence front-loads purpose well, but the remainder is a dense single-paragraph enumeration of formats that is hard to parse. Separating the format-direction ranges and the sibling routing into distinct sentences or lines would improve scanability without losing content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 params, 100% schema coverage, and no output schema, the description does a good job covering conversion scope, direction constraints, and sibling routing. Gaps remain around the undefined 'Business gate', error/response shape (no output schema), and whether conversions are free or billed, but the core callable information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: 'to', 'file', 'from', 'gif_fps' and 'gif_width' are all documented in the schema with enums and defaults. The description adds format-direction hints (image↔image, audio↔audio, video↔video/GIF) that hint at valid edge combinations, but does not enumerate which combinations are actually supported, leaving the agent to infer from the enums.
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 (convert) and the resource families (image, audio, video, subtitle, document-to-PDF), and names the sibling converters (convert_document, convert_archive, convert_data) it is not. The enumeration is exhaustive but front-loaded well enough that an agent can identify the tool'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?
Explicitly routes non-matching formats to convert_document, convert_archive, and convert_data, which is strong sibling differentiation. However, it does not mention the 'Business gate on some edges' cause or what an agent should do if a conversion is rejected by that gate, and overlap with convert_video, photo_format_converter, and media_extract_audio is not addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_geoAInspect
GPS & Map Converter — Convert between GPX, KML, KMZ and GeoJSON — the GPS-track and mapping formats used by Garmin, Strava, Google Earth and every GIS tool. Track segments, per-point timestamps, elevations and polygon holes all survive the trip. Anything that cannot survive (a polygon becoming a GPX track, an unlocated feature) is reported in the X-Conversion-Notes header rather than dropped quietly; pass strict=true to refuse instead. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Must differ from the detected source — gpx→gpx is a 400; format-version upgrades happen implicitly on read. | |
| file | Yes | A .gpx, .kml, .kmz or .geojson file. | |
| from | No | Optional. Detected from content; declare it only when the upload has no meaningful filename. | |
| strict | No | Stop the conversion rather than hand back a file that has lost something. Off by default: you get the result plus a note about anything that could not be carried over. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: it discloses what metadata survives conversion, how non-convertible content is reported via X-Conversion-Notes, and how strict=true changes failure behavior. These are exactly the operational details an agent needs for a lossy conversion tool with readOnlyHint=false and destructiveHint=false.
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 purpose is front-loaded in the first sentence, followed by preservation behavior and error handling. Every sentence contributes useful selection or invocation information, with no significant 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?
The description covers format scope, data preservation, loss reporting, and strict mode, which is strong for a conversion tool with no output schema and rich parameter descriptions. It stops short of explicitly describing the exact response shape or how the converted file is returned, so a minor gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters, including format detection and strict behavior. The description reinforces strict=true but does not add parameter syntax or constraints beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: convert between GPX, KML, KMZ, and GeoJSON. It names the exact formats and the domain, so an agent can distinguish it from generic siblings like convert_file or convert_data 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?
Provides clear context for when this tool applies: GPS tracks and mapping data from Garmin, Strava, Google Earth, and GIS tools. It does not explicitly exclude other tools or name alternatives, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_jpg_to_pdfBInspect
JPG to PDF — Convert one or more JPG/PNG images to a PDF document. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Input files (JPG, PNG) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already signal that this is not read-only and not destructive; the description adds that the tool takes one or more images and produces a PDF, which is useful. However, it does not disclose output format details, whether the images are merged in order, side effects, or any limits, so the behavioral context is minimal beyond the basic 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, with the core action stated immediately. The leading 'JPG to PDF' and the '[category: convert]' tag are somewhat redundant given the tool name and sibling context, but the overall structure is still efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter conversion tool, the description covers the input and output at a high level. However, there is no output schema and no guidance about how the resulting PDF is returned or how this differs from pdf_images_to_pdf, leaving some ambiguity in a large sibling toolset.
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 describes the only parameter as 'Input files (JPG, PNG)' with 100% coverage, so the schema carries the parameter meaning. The description adds the phrase 'one or more,' but this is already implied by the array type, so it provides little additional semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Convert') and resource ('one or more JPG/PNG images to a PDF document'), so an agent can understand the core function. However, it does not distinguish itself from the closely related sibling pdf_images_to_pdf, and the leading 'JPG to PDF' essentially restates the tool name.
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 the tool should be used when JPG/PNG images need to be converted to a PDF, and it mentions the acceptable input formats. It does not explicitly say when to prefer this tool over alternatives like pdf_images_to_pdf, convert_file, or convert_batch, so the usage guidance is mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_parquetAInspect
Parquet Converter — Convert Apache Parquet to CSV, TSV, JSON, NDJSON or Excel — and back. Types are preserved in both directions: numbers stay numbers in JSON, blank cells become real nulls in Parquet, and identifier columns like '01924' stay text instead of losing their leading zero. Flat schemas only; nested or repeated columns are reported rather than silently flattened. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | 'jsonl' is accepted as an alias for ndjson. One side of the pair must be parquet — table→table pairs belong to convert_data. | |
| file | Yes | A .parquet file, or a .csv/.tsv/.json/.ndjson/.xlsx table to turn into Parquet. | |
| from | No | Optional but recommended when uploading csv/tsv/json/ndjson: those are indistinguishable by content, so declare which one it is. | |
| sheet | No | Which worksheet to read. Leave it blank for the first one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare this as a non-readonly, non-destructive, closed-world operation; the description goes well beyond that by disclosing fidelity guarantees (numbers stay numbers, blank cells become real nulls, leading zeros preserved) and a failure mode (nested/repeated columns reported rather than flattened). This is substantive behavioral context not derivable from 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?
Front-loads the verb and resource before the format list, then layers behavioral guarantees and the flat-schema limitation. Every sentence carries distinct information 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 four-parameter conversion tool with no output schema and full annotation coverage, the description covers directionality, supported formats, type-fidelity guarantees, and schema limits. An agent has everything needed to invoke it correctly and anticipate the nested-column outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters, including the jsonl alias and the parquet-on-one-side rule. The description adds no additional parameter-level syntax or format detail beyond what the schema 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?
States a specific verb (Convert) and resource (Apache Parquet) plus the full set of target/source formats, and the 'and back' framing makes the bidirectional scope explicit. An agent can distinguish this from convert_data or convert_csv 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 description gives a clear operating constraint ('Flat schemas only; nested or repeated columns are reported rather than silently flattened') that defines when the tool applies. Alternatives are only routed in the schema text ('table→table pairs belong to convert_data'), not the description itself, so it stops short of full when-vs-which guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_sqliteAInspect
SQLite Converter — Export a SQLite database (.db/.sqlite) to CSV, JSON or Excel. A database holds many tables, so the output adapts: CSV gives one file per table (zipped when there are several), JSON gives rows as objects (keyed by table when there are several), and Excel gives ONE workbook with one worksheet per table. Pass an optional 'table' to export just one. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | What you want back. A database holds several tables, so the shape follows: CSV gives one file per table (zipped if there is more than one), Excel gives one workbook with a sheet per table, JSON gives the rows as records. | csv |
| file | Yes | SQLite database file. | |
| table | No | Optional: export only this table (must match a table in the database). | |
| strict | No | Stop rather than hand back a partial export. Off by default: a very large database comes back with whatever we could reach, and a note saying what was left out. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds the multi-table output adaptation (zipped CSV, one workbook with a sheet per table), which is genuinely useful, but that same behavior is already spelled out in the 'to' schema description, so the added value over structured data is limited.
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?
Front-loaded with the tool's identity and purpose, then the output-shape behavior, then the optional table argument. Efficient single paragraph, though a couple of clauses re-state schema content and could be trimmed.
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 four-parameter conversion tool with no output schema and light annotations, the description is largely complete: format options, multi-table behavior, and single-table export are all covered. It omits where/how output files are returned and naming, but 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 description coverage is 100%, so the input schema already documents 'to', 'file', 'table', and the nuanced 'strict' flag. The description's recounting of format-specific output shapes largely duplicates the schema, adding little beyond the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (export) and resource (SQLite database .db/.sqlite) plus the exact output formats (CSV, JSON, Excel). The resource is clearly named, so an agent can distinguish it from generic siblings like convert_data or convert_parquet without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It notes the optional 'table' argument to export a single table, which implies a use case, but gives no explicit when-to-use/when-not guidance or named alternatives (e.g., convert_data, convert_parquet) that an agent could route against. Usage 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.
convert_textAInspect
Text Converter — Convert text/data formats: Markdown↔HTML, CSV↔JSON, JSON↔XML/YAML, Base64 and URL encode/decode. Takes 'text' + 'from' + 'to' — there is no 'conversion_type' field. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | What you want back. Must differ from the source. For a Base64 or URL encode/decode, leave this on the format you want the result read as — do NOT pick plain text, which currently returns the input untouched. | html |
| from | Yes | What the text is now — or the encoding job to run (Base64 / URL encode and decode ride in this field). | md |
| text | Yes | The text/data to convert. Field name is 'text' — not 'content'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, which already tells the agent this is a safe, non-destructive, closed-world transformation. The description adds a warning that selecting 'txt' as the target currently returns the input untouched, which is a useful behavioral quirk not present in annotations. However, it doesn't explain side effects (e.g., whether any state is persisted) or the exact return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence followed by a brief clarifying note. It is front-loaded with the tool's core capability and contains no filler words; every clause adds distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three required parameters, 100% schema coverage, and no output schema, the description covers the essential operational guidance: supported conversions and the explicit parameter names. It is nearly complete but lacks details on error handling or return structure, and it doesn't reference sibling alternatives.
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 provides detailed parameter descriptions, enum values, and defaults. The description reinforces that fields are 'text', 'from', and 'to' and explicitly denies the existence of a 'conversion_type' field, which is a minor addition. Baseline 3 is appropriate when schema carries the bulk of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (convert) and enumerates the exact format pairs supported (Markdown↔HTML, CSV↔JSON, JSON↔XML/YAML, Base64, URL encode/decode). It also distinguishes itself from the similarly named sibling convert_data by proclaiming 'there is no conversion_type field,' steering the agent away from a wrong parameter guess.
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 hints at usage through the format list and a critical caveat for Base64/URL operations, but it never explicitly says when to pick this tool over siblings like convert_data, convert_file, or analyze_encoding_detector. The guidance 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.
convert_unit_convertAInspect
Unit Converter — Convert between units of measurement: length, weight, temperature, volume, area, speed, time, and data sizes. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The unit you want. It must belong to the same kind of measurement as the one you have. | |
| from | Yes | The unit you have. It must belong to the kind of measurement chosen above. Data sizes are the computing kind (1 kilobyte = 1024 bytes). | |
| value | Yes | The amount to convert. Negative numbers are fine (below-zero temperatures, drops in weight). | |
| category | Yes | What kind of measurement this is. Pick this first — it decides which units are available. | length |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral information beyond the schema's own category list. Annotation readOnlyHint=false is questionable for what is conceptually a pure computation with no side effects, and the description does nothing to clarify that no state is mutated. With annotations present the bar is lower, but zero behavioral content is still a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with the tool name followed by the concrete action and scope — efficient and easy to scan. The trailing '[category: convert]' tag is internal metadata noise that earns no place in the description.
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 4-parameter, all-required, enum-driven computation tool with no output schema and full schema coverage, the description is sufficient to call it correctly. It is only slightly thin on the edge cases (invalid cross-category pairs, negative values) that the schema partially handles.
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% (including the 'pick this first' guidance on category and the 1024-byte note on data sizes), so the schema carries all parameter meaning. The description only restates the category domains and adds no syntax, format, or constraint detail beyond it; 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?
States a specific verb and resource ('Convert between units of measurement') and enumerates the eight supported measurement domains, which cleanly separates it from the file-oriented convert_* siblings (convert_file, convert_data, convert_document). An agent can tell at a glance this is a unit-math tool, not a file format converter.
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?
Usage is implied by the purpose — the tool is self-evidently for unit conversion — but there is no explicit when-to-use, when-not-to-use, or pointer to alternatives among the many convert_* siblings. The guidance is adequate only because the domain is so narrow that inference is easy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_url_to_pdfAInspect
Webpage to PDF — Convert a live web page (URL) to PDF. Fetches the page and every asset server-side through an SSRF-guarded fetcher, inlines them, and renders offline — pass a JSON-body 'url'. JavaScript is NOT executed (static rendering), so SPAs may render sparsely. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The http(s) URL of the web page to render to PDF. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses significant behavior beyond annotations: the SSRF-guarded fetcher, server-side asset fetching and inlining, offline rendering, and the static-rendering limitation. This is exactly the kind of behavioral context that helps an agent predict side effects and failure modes.
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 but information-dense: it front-loads the core purpose, then covers mechanism, security, and limitations in a few sentences. Every clause adds value, and there is 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?
For a simple one-parameter conversion tool, the description is complete enough: it explains what it converts, how it fetches and renders, the key security trait, and the main limitation. No output schema exists, but the output is clearly implied by 'to PDF', and nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents the single 'url' parameter with a clear description, so the baseline is 3. The description adds a small amount of extra meaning by specifying that the URL should be passed as a JSON-body property, but this is marginal 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 names a specific verb (Convert), a specific resource (a live web page/URL), and a concrete output (PDF). It also distinguishes itself from HTML-to-PDF or file-conversion siblings by emphasizing 'live web page' and 'server-side fetcher'.
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 the tool is appropriate: converting a live URL to PDF. It also provides an important when-not signal by stating JavaScript is not executed, so SPAs may render sparsely. It stops short of naming an alternative tool explicitly, which keeps it just below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_videoAInspect
Video Converter — Convert a video so it PLAYS or IMPORTS where it currently will not: a camera, phone or camcorder recording that your editing software, media player, website or social platform refuses to accept, open or upload. Converts between mp4, mov, webm, mkv, avi, and animated GIF with codec/resolution/bitrate control and TikTok/Reels/Shorts/Twitter/WhatsApp presets. Also converts legacy formats (flv, wmv, 3gp, mpg, vob, ts, m2ts) to mp4. Free tier covers mp4/mov/webm at ≤720p; mkv, avi, gif, 1080p+ and AV1 require Business. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The format you want back. MP4 plays almost everywhere. MKV, AVI and animated GIF need Business. A GIF is made at 480p unless you set the size below. | mp4 |
| crf | No | Picture quality. Lower is better-looking and bigger; higher is smaller and rougher. 23 is the everyday setting for H.264. Each compression method reads this scale differently - left alone we pick the matching everyday value (28 for H.265, 32 for VP9, 30 for AV1). Out-of-range values are pulled back into range rather than refused, and the whole setting is ignored if you set a data rate or pick a platform preset. | |
| file | Yes | Max 500 MB; duration ≤5 min on Free, 30 min on Business. Format is sniffed from bytes; the filename extension is the fallback when sniffing fails. | |
| codec | No | How the picture is compressed. Leave it on Automatic unless you know you need otherwise — a compression method the chosen format cannot carry (H.265 in a WebM, say) will fail during conversion. H.265 and AV1 need Business. | auto |
| resolution | No | How big the picture should be. 'Source' keeps the original size. Height is set and the shape is kept. 1080p and 4K need Business. | source |
| preset_name | No | Make it ready for one place in particular. Picking one sets the format, size, compression and data rate for you and ignores your choices above. Business only. | |
| bitrate_kbps | No | Aim for a file size instead of a quality level. Setting this overrides the quality slider. Leave it alone unless you have a size you must hit. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false, destructiveHint=false, and openWorldHint=false, indicating a non-destructive write operation with local scope. The description adds valuable context about free vs. Business tier limitations, format support, and preset behavior. It does not contradict annotations. Missing some detail on output format or processing 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 front-loaded with the core purpose and then details formats, presets, legacy support, and tier restrictions. It is somewhat lengthy but every sentence adds useful information for an agent to select and invoke the tool correctly.
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 no output schema, the description covers what the tool does, its limitations, and parameter effects. It doesn't explain return values or output format, but it provides enough for an agent to call it correctly. The tier restrictions and preset overrides are particularly important 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 description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds meaning by explaining the practical implications of settings (e.g., free tier format/resolution restrictions, preset behavior, legacy format support) that complement 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 gives a specific verb (convert) and resource (video), states the goal clearly ('so it PLAYS or IMPORTS where it currently will not'), and lists formats and presets. It distinguishes from siblings like media_compress_video by emphasizing format conversion rather than compression.
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 explains when to use this tool: when a video won't play or upload elsewhere. It lists supported formats and presets. However, it doesn't explicitly differentiate from sibling tools like media_compress_video or media_trim_video, leaving the agent to infer that those are for other purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_word_to_pdfAInspect
Word to PDF — Convert a Word document (.docx, .doc) to PDF using LibreOffice. [category: convert]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (DOCX, DOC) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=false, destructiveHint=false), and the description adds the LibreOffice engine and accepted formats beyond that. It does not disclose output behavior (returned file vs. link) or limitations like size or .doc fidelity, though the simple schema lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that states the action immediately. The '[category: convert]' tag is mild redundancy given the convert_ prefix, but it adds no significant 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?
For a one-parameter converter with no output schema, the description covers the input side adequately. It does not state what the tool returns after conversion, and given dozens of convert siblings, a routing hint toward/away from convert_document or pdf_to_word would improve completeness.
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 single 'file' parameter is described as 'Input file (DOCX, DOC)' in the schema itself. The description repeats the format scope but adds no new parameter-level meaning, so the high-coverage 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 and resource: 'Convert a Word document (.docx, .doc) to PDF using LibreOffice.' The explicit format coverage (.docx/.doc) and target output (PDF) distinguish it from the many convert_* and pdf_* siblings without needing to open 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?
Usage is implied by the name and format details — an agent can infer 'when a Word file needs PDF output.' However, no alternatives or exclusions are mentioned, which is a gap given the broad sibling list includes convert_document, convert_file, convert_batch, and pdf_to_word (the reverse operation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_to_fileAInspect
Save as File — Write the result of an earlier step to a real, downloadable file: .txt, .csv, .json or .md. Use after any step that produces text or data rather than a file — Colour Palette Extractor, Password Generator, Photo to Text (OCR), EXIF Viewer, Scrape Page, Word Frequency, Describe Image, PDF to Text — so the result can be downloaded, emailed, zipped or converted. A list of values saved as CSV becomes a spreadsheet with a header row. [category: utility]
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | File name without the extension — the extension comes from the format above. Anything over 80 characters is shortened. | data |
| text | Yes | The result to save. Point this at the earlier step whose text or data you want in the file — the colour palette, the password, the extracted text. | |
| format | No | What kind of file to write. csv turns a list of values into a spreadsheet — a header row and one row per value — and anything it cannot tabulate becomes a single column. json is pretty-printed, and data that is not valid JSON is saved as plain text instead. | txt |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the bar is lower. The description still adds that this yields a 'real, downloadable file' suitable for emailing/zipping/converting, which frames persistence and downstream consumability beyond annotations — though the CSV header row and pretty-printed JSON details are largely duplicated from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads verb and resource in the first sentence, then usage, then format behavior. Slightly heavy with the eight-tool em-dash list and restated CSV/JSON details, but every sentence is oriented toward routing or output shape.
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?
No output schema exists, and the description compensates by describing the artifact produced (a downloadable file in the chosen format) and its downstream uses. Format semantics are covered, so an agent has enough to invoke it correctly; only the exact return payload/URL is unspecified.
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, text and format are already fully documented (including the 80-char truncation and CSV/JSON behavior). The description's parameter-related content ('Point this at the earlier step...') restates the schema, 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?
States a specific verb ('Write the result of an earlier step') plus the exact resource produced (a real, downloadable .txt/.csv/.json/.md file). An agent can distinguish this 'materialize output as a file' tool from save/convert/octopus_write siblings 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?
Explicitly says when to use it ('after any step that produces text or data rather than a file') and names the concrete upstream tools it pairs with (Colour Palette Extractor, Password Generator, Photo to Text, EXIF Viewer, Scrape Page, Word Frequency, Describe Image, PDF to Text), plus the downstream reasons (download, email, zip, convert).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_uploadAInspect
Save to Google Drive — Save a finished file into the signed-in user's own Google Drive. Use as the last step of a workflow when the user asks for the result to be put in, saved to, or uploaded to their Drive. Needs their Google account to be connected on the Integrations page. Only ever writes: it cannot read, list or search anything already in their Drive. [category: utility]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The file to save — usually the previous step's output. | |
| filename | No | Optional. The name the file gets in Drive, extension included. Leave blank to keep the name it already has. | |
| folder_name | No | Optional. We create this folder the first time and put later files in the same one. We cannot see folders you made yourself, so if you already have one with this name you will end up with two — leave it blank to save straight into My Drive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though readOnlyHint=false already signals a write operation, the description adds valuable behavioral detail: the tool writes only and cannot read, list, or search existing Drive itemsikuha. It also highlights the account-connection requirement NH the folder-creation side effect described in the folder_name parameter. This adds 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 core description is three focused sentences: purpose, usage trigger, and write-only scope. It is front-loaded and free of redundancy, aside from the trivial trailing '[category: utility]' tag. This is concise without losing key operational constraints.
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 uploader with one required parameter, the combination of description and schema covers the full call contract: what it does, when to use it, authentication need, write-only nature, and parameter semantics. The only absence is a return-value description, but a simple upload operation does not need one, especially without an output 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 plain description does not need to explain the parameters. The description does not add anything about the file, filename, or folder_name beyond what the input schema already specifies. Per the rubric, baseline 3 is appropriate when the schema fully documents 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 says exactly what the tool does: 'Save a finished file into the signed-in user's own Google Drive.' It also explicitly scopes the tool as write-only ('Only ever writes: it cannot read, list or search anything already in their Drive'), which clearly distinguishes it from read/search siblings and storage 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 an explicit usage scenario: 'Use as the last step of a workflow when the user asks for the result to be put in, saved to, or uploaded to their Drive.' It also states a clear prerequisite: 'Needs their Google account to be connected on the Integrations page.' However, it does not name alternative tools or give a when-not-to-use statement, so it is not fully explicit about exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_fileAInspect
Email My File — Email a finished file to the user themselves, with the file attached. It goes to the Google account they connected, so it appears in both their Sent folder and their inbox. The recipient is ALWAYS the current user — this tool cannot email anyone else and cannot send custom or user-authored content. Use ONLY when the user explicitly asks to have a result emailed to them. [category: utility]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The file to email — a file_id, typically the previous step's output. | |
| note | No | Optional one-line note to put in the email body. The mail is sent from your own connected Google account, to you — files up to 5 MB. | |
| subject | No | Subject line of the email. | Your file is ready |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Addresses key traits beyond annotations: the email always goes to the connected Google account, appears in Sent and inbox, cannot target others, and cannot send custom/user-authored content. It also notes the 5 MB limit in the schema's note parameter, giving agents important constraints before calling.
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?
Well-structured with the action first, then constraints, then usage guidance; every sentence earns its place. The 'Email My File' lead-in and '[category: utility]' suffix add minor redundancy but don't 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?
Complete for a simple delivery tool: describes destination, constraints, and when to use it; annotations plus schema cover safety and parameters. No output schema is present, and a success message isn't critical to avoid misuse, so the description is sufficient but not exhaustive.
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 has 100% coverage and already documents file, note, and subject, including the 5 MB limit and account context in note. The description reinforces overall behavior but doesn't add parameter-specific meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Email... to the user themselves') and resource ('a finished file'), and clearly defines the recipient as the current user. This distinguishes it from sibling tools in the file/delivery space without needing 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?
Explicitly instructs 'Use ONLY when the user explicitly asks to have a result emailed to them,' and rules out emailing anyone else or sending custom content. This leaves no ambiguity about when to invoke it vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esign_placeAInspect
PDF E-Signature — Place signature, initial, date or text fields onto a PDF — draw or type a signature — and (Pro+) append a cryptographic ed25519 audit trail. Free tier: 3 signed documents per month. [category: sign]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | PDF to sign | |
| fields | Yes | Where each signature, initial, date or text box sits on the page. Build these on the PDF E-Signature page — it draws them on the document and gives you this value — then paste it here. Up to 100 placements; each names a page, a box in points from that page's top-left corner, and a type: signature, initial, date or text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, openWorldHint=false, and destructiveHint=false, so the agent knows this is a write operation confined to the tool's environment. The description adds valuable behavioral context: Free tier limit, Pro+ audit trail feature, and the fact that the tool draws or types a signature. It doesn't mention reversibility or permissions, but with annotations covering the safety profile, this 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?
Compact single sentence with key details front-loaded: action, methods, Pro+ feature, and tier limit. It's efficient but could be slightly more structured, as the category tag at the end feels like metadata rather than description.
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 two-parameter tool with full schema coverage, no output schema, and clear annotations, the description covers the essential: what it does, how to use it, tier constraints, and a distinguishing feature (audit trail). Nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are fully documented in the schema. The description adds practical guidance by explaining how to build the 'fields' parameter (use the PDF E-Signature page to draw boxes and paste the value) and notes the 100-placement limit, which goes beyond the schema's technical description.
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+resource: placing signature, initial, date, or text fields onto a PDF. It clearly distinguishes itself from sibling tools like esign_prepare and pdf_watermark by naming the exact placement action and the Pro+ audit trail feature.
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 it (to add signature fields to a PDF) and mentions the Free tier limit of 3 signed documents per month, which is useful context. However, it does not explicitly state when NOT to use it or name alternatives like esign_prepare for a different signing workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
esign_prepareAInspect
E-Sign: Prepare — Return page count and per-page point dimensions for a PDF so signature fields can be positioned by the editor. [category: sign]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly states what the tool returns, which is helpful. However, annotations mark readOnlyHint as false, implying possible side effects, but the description does not disclose any state changes, storage, or session behavior. It avoids contradicting the annotations but leaves the side-effect profile ambiguous.
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?
A single, front-loaded sentence states the action, the resource, the output, and the purpose. The trailing [category: sign] is compact metadata. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, no output schema, and a simple purpose, the description covers the essential return values and context. It does not specify the exact output format or failure behavior, but for this low-complexity tool the description is largely sufficient for an agent to select and 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% for the only parameter, file, which is already documented as 'Input file (PDF).' The description adds nothing about the parameter beyond what the schema provides, 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 and resource: 'Return page count and per-page point dimensions for a PDF.' It also explains the purpose—positioning signature fields—which clearly distinguishes this from generic PDF tools like pdf_page_count or pdf_file_info and from the sibling esign_place.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'so signature fields can be positioned by the editor' gives clear context for when this tool should be used: in an e-sign workflow before placing signatures. It does not explicitly mention when not to use it or name alternative siblings, but the intended context is apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
files_unzipAInspect
Open Archive — Open a .zip archive and hand the files inside it to the next step, as a list. Use when an earlier step produced a ZIP (PDF Thumbnails, PDF to Images, Split PDF, Extract Frames, the batch converters) and the next step works on the individual files. Converts nothing. Up to 200 files. [category: utility]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The archive to open — normally the previous step's output, e.g. {{step_1.file_id}}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavioral context beyond the sparse annotations: the 200-file extraction limit, the pass-through semantics ('Converts nothing'), and the list-shaped output. No contradiction with readOnlyHint=false or destructiveHint=false; unzipping producing outputs without destroying inputs is consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences front-load the purpose, then usage, then constraints, with zero filler. The category tag is the only marginal element and it is unobtrusive. 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 single-parameter utility with no output schema, the description is complete: it conveys the return shape ('as a list'), the pipeline context (previous step's output), and the operational limit (200 files). Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds modest value by reinforcing that the file must be a .zip and implying a file-count constraint, but the schema already explains the parameter's role as the previous step's output. No substantial new parameter meaning is added.
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 ('Open a .zip archive') plus the output shape ('hand the files inside it to the next step, as a list'). 'Converts nothing' explicitly separates it from convert_archive and other transform tools, and the output behavior distinguishes it from the inverse sibling files_zip.
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 triggering conditions: 'Use when an earlier step produced a ZIP' and names the exact producers (PDF Thumbnails, PDF to Images, Split PDF, Extract Frames, batch converters) plus the downstream condition ('next step works on the individual files'). It lacks an explicit 'do not use if' clause, but 'Converts nothing' serves as an implicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
files_zipAInspect
Zip Files — Bundle several files — uploads or the results of earlier steps — into ONE .zip archive, unchanged. Use when the user says zip / bundle / archive / put them all in one file, or wants several results delivered as one attachment. Converts nothing (for converting many files use convert_batch). 1-50 files. [category: utility]
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name for the archive, without .zip. Leave it blank and the archive is named johns-essentials- plus today's date. | |
| files | Yes | The files to bundle: uploaded file ids, {{step_N.files}} (everything a step that ran once per file made), or {{file_ids}} (every upload). 1-50 files. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false), so the description adds useful context beyond them: files are bundled 'unchanged', nothing is converted, and the 1-50 file limit is stated. It does not describe the return format or what happens if the limit is exceeded.
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?
Front-loads the core purpose and packs triggers, exclusion, and limits into a compact block. It's dense (em-dash fragments) but every clause carries information; minor redundancy on the file-count limit repeated from 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 simple utility with no output schema and full schema coverage, the description covers purpose, triggers, exclusion, and constraints. Only return-value behavior is unaddressed, which is a minor gap given the tool's simplicity.
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 both parameters (name, files) are already documented, including defaults and accepted id forms. The description echoes the same 1-50 limit and file sources without adding new syntax or format detail — 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?
States a specific verb (zip/bundle) and resource (files into one .zip archive) and explicitly contrasts with the sibling convert_batch and its non-converting nature. An agent can distinguish it from convert_* and files_unzip 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?
Explicit trigger phrases ('zip / bundle / archive / put them all in one file') plus the delivery use case (several results as one attachment), and a named alternative condition ('for converting many files use convert_batch'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_ascii_artAInspect
ASCII Art Generator — Convert text or an image to ASCII art. Mode 'text' (default) requires 'text'; mode 'image' requires 'file'. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | The picture to convert (max 10 MB). | |
| font | No | Lettering style. | standard |
| mode | No | Draw your words as big letters, or turn a picture into characters. If you attach a picture and type nothing, picture mode is used automatically. | text |
| text | No | The words to draw. Longer than 100 characters is trimmed. | |
| width | No | How many characters wide the picture is. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds the default mode and gating rules, but says nothing about whether the result is returned inline or written to a file/attachment despite readOnlyHint=false, and no rate or size behavior beyond what the schema already states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact line with the core action front-loaded, followed by the mode/parameter rules. Nothing is redundant, and the '[category: generate]' tag is standard metadata rather than 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 five parameters, zero required fields, and no output schema, the description supplies the critical gating rules an agent needs to call it correctly. The one remaining gap is that it never states the form of the returned art (inline text vs. file), which matters given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 one step further by documenting the cross-parameter conditional requirements (which parameter each mode demands), which the per-field schema descriptions and x-show-when hints only imply.
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 pair ('Convert text or an image to ASCII art') and immediately enumerates the two operating modes, so the agent knows exactly what the tool produces. No sibling in the list overlaps this capability, and the two-mode framing makes the tool self-distinguishing.
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 conditional usage: mode 'text' (default) requires 'text', mode 'image' requires 'file'. That tells the agent which configuration to pick, but it names no alternatives or exclusions (e.g., when to prefer another generator or converter for the same input).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_barcodeBInspect
Barcode Generator — Generate a barcode (Code128, EAN-13, DataMatrix, PDF417, etc.) as a PNG image. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Which barcode standard to make. Code 128 takes any text or number; EAN-13 needs 12-13 digits and EAN-8 needs 7-8; UPC-A needs 11-12; Code 39 takes capitals and digits; ITF-14 needs 13-14 digits; Data Matrix, PDF417 and QR are the square ones that hold any text. Anything we do not recognise is made as a Code 128. | code128 |
| height | No | How tall the bars are, in pixels. The width follows automatically. | |
| content | Yes | The data to encode | |
| showText | No | Print the encoded digits underneath the bars, so a cashier can key them in if a scan fails. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, openWorldHint=false and destructiveHint=false, so the safety profile is largely covered by structured data. The description adds that the output is a PNG and that multiple symbologies are supported, but never says whether the image is returned inline or written to storage — the key behavior implied by readOnlyHint=false.
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?
Single front-loaded sentence with the verb, resource, formats and output type; no filler. It is arguably too terse rather than bloated, which slightly suppresses the score.
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?
No output schema exists, so the description should clarify the return shape (image bytes vs. file path/URL) — a meaningful gap for a tool with readOnlyHint=false. Parameter coverage is otherwise complete via the schema, so this is an adequate but not complete definition.
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 enum already labels every symbology with its digit requirements, so the schema carries the semantic load. The description's parenthetical format list is a partial duplicate of the enum rather than added 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+resource (generate a barcode) and the output artifact (PNG image), plus examples of supported symbologies. It does not, however, disambiguate from the sibling generate_qr_code, which matters because 'qr' is also a valid type here.
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 guidance and no alternative named. With generate_qr_code in the sibling list, an agent gets no help deciding between the two even though their scopes appear to overlap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_business_cardAInspect
Business Card Generator — Generate a printable business card (PDF or PNG) from name, job title, company, and contact details. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| No | Printed verbatim in the contact block — no validation, no mailto link; empty = line omitted. | ||
| phone | No | Printed verbatim in the contact block; empty = line omitted. No formatting applied. | |
| format | No | 'pdf' (default) or 'png' (300 DPI Ghostscript raster, 1050x600). Any other value silently returns the PDF. | |
| company | No | Printed under the name; omitted entirely when empty. Latin-1 only — CJK/emoji glyphs render as '.'. | |
| website | No | Printed exactly as sent — strip 'https://' yourself if unwanted; empty = line omitted. | |
| fullName | Yes | Full name printed on the card. Field name is 'fullName' — not 'name'. | |
| jobTitle | No | Job title. Field name is 'jobTitle' — not 'title'. | |
| template | No | Card layout. | modern |
| primaryColor | No | Hex color WITHOUT the leading '#'. | 1a1a2e |
| secondaryColor | No | Hex color WITHOUT the leading '#'. | E05535 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the output artifact types (PDF/PNG) but does not disclose the delivery mechanism — whether the file is written to disk, returned inline, or where — which is the one behavior an agent would most want here, especially with readOnlyHint=false and no output 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?
A single front-loaded sentence that states purpose, output, and inputs with no filler; the trailing [category: generate] tag is minor metadata noise but not wasteful. Very tight, though arguably minimal for a 10-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 generator with 1 required parameter out of 10, full schema coverage, and no output schema, the description covers the essentials of what is produced. The main omission is how the generated artifact is returned or saved, which the absence of an output schema leaves unspecified.
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 10 parameters in detail, including enum values, defaults, Latin-1 limitation, and hex-color formatting. The description only echoes the top-level fields (name, job title, company, contact details) without adding syntax or format meaning beyond the schema, 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 gives a specific verb (Generate), a concrete resource (printable business card), the output formats (PDF or PNG), and the key inputs (name, job title, company, contact details). No sibling tool produces a business card, so the resource alone disambiguates it from generate_qr_code, generate_barcode, generate_invoice, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no named alternative. The reader must infer that it is used when a business card artifact is desired; nothing explains when another generate_* tool would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_certificateAInspect
Certificate Generator — Generate a printable certificate of achievement or completion as PDF or PNG. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Free text centred at the bottom, printed verbatim ('12 June 2026' works); empty = omitted. | |
| format | No | 'pdf' (default) or 'png' (300 DPI Ghostscript raster). Any other value silently returns the PDF. | |
| template | No | Kept for older calls; it does not change the certificate. Set the heading with Cert title and the look with Border style. | achievement |
| certTitle | No | Certificate heading. Field name is 'certTitle' — not 'title'. | Certificate of Achievement |
| issuerName | No | Printed above the signature line. Empty hides the WHOLE issuer block, issuerTitle included. | |
| borderStyle | No | Unknown values fall back to gold. This is the main visual lever — it colours border, corners, and title. | gold |
| description | No | Optional body text under the title. | |
| issuerTitle | No | Italic line under the signature — rendered only when issuerName is also set. | |
| orientation | No | 'landscape' (default) or 'portrait' (A4). Any value other than 'portrait' renders landscape. | landscape |
| recipientName | Yes | Recipient's name (REQUIRED). Field name is 'recipientName' — not 'recipient'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the output formats (PDF/PNG), which is useful context, but does not say how the artifact is delivered (file path, download link, base64) — a real gap for a generation tool with no output 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?
A single front-loaded sentence that leads with the resource and immediately covers the output formats; nothing is padded. The '[category: generate]' tag is redundant metadata rather than substance, which keeps it from a full 5.
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 ten-parameter generation tool with no output schema, the description omits what the caller receives back and how the file is returned, which an agent needs to chain this call. Annotations cover the mutability profile, but the return-handling gap leaves it only adequate.
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 ten parameters are fully documented in the schema itself, making the baseline 3 appropriate. The description adds no parameter-level detail beyond restating the PDF/PNG option, and nothing about the required recipientName or the interaction between issuerName and issuerTitle.
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 ('Generate') and resource ('certificate of achievement or completion'), and names the two output formats. This is clearly distinguishable from nearby siblings like generate_invoice or generate_business_card, and no schema inspection is needed to know what it produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use, when-not-to-use, or alternatives are given, but the purpose is narrow and self-evident among the generate_* siblings, so usage is implied. It stops short of any guidance such as prerequisites or inputs required before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_faviconAInspect
Favicon Generator — Generate a favicon set (ico + png sizes) from a source image, with optional rounded corners. This is the tiny icon a browser shows in the tab, beside a bookmark, and on a phone home screen — without one, visitors see a blank page symbol next to your site's name. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Source image (PNG, SVG, JPG — max 20MB) | |
| background | No | Fill behind a logo that is not square. None leaves it see-through, which suits both light and dark browser tabs. A hex colour such as #1a1a1a is also accepted; anything we do not recognise is treated as see-through. | none |
| includeIco | No | Also generate favicon.ico. | |
| borderRadius | No | Rounded-corner radius as a percent (0-50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that the output is a multi-file set (ico plus png sizes), which is useful, but it says nothing about how the result is delivered, whether anything is stored, or processing limits beyond the schema's 20MB note.
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 first sentence is tightly front-loaded and does the real work. The second sentence is a long, marketing-flavored explanation of what a favicon is that adds little for an agent selecting a tool, so the description is somewhat padded.
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 no output schema, the description does name the returned set (ico + png sizes), and all four parameters are fully documented in the schema. The main residual gap is how the generated files are surfaced to the caller, which is left unstated for a file-producing 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 only restates the optional rounded corners and the ico-plus-png output; it adds no syntax or behavior beyond what the schema already documents for file, background, includeIco, and borderRadius.
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 (generate), resource (favicon set), the output composition (ico + png sizes), and the input (a source image) plus an option (rounded corners). An agent can distinguish it from generate_placeholder_image or generate_qr_code without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence explains what a favicon is and why it matters, which implies the use case, but it never states when to reach for this tool versus sibling generators nor any exclusions (e.g. square vs non-square source handling). Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_hashAInspect
Hash Generator — Compute MD5, SHA-1, SHA-256, and SHA-512 hashes of text (or an uploaded file). Always returns all four — there is no algorithm selection and bcrypt is not supported. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | A file to hash instead of typed text. If you attach one, the file wins. | |
| text | No | The text to hash. Leave it blank when you are hashing a file instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, openWorldHint=false, destructiveHint=false) already define the safety profile, so the bar is lower. The description adds genuinely useful behavior: it always returns all four digests regardless of input, there is no algorithm parameter, and bcrypt is unsupported — output-shape information the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence that front-loads the resource and algorithm list, with the constraints appended immediately after. It is well-structured, though the trailing '[category: generate]' tag is metadata overhead rather than useful 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 no output schema and only two optional parameters, the description correctly fills the return-value gap by stating all four hashes are always returned. The main omission is sibling routing against analyze_hash, but for a zero-required-param pure-compute tool it is otherwise 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%, so the baseline is 3. The description's input guidance (text or an uploaded file; 'the file wins') restates what the parameter descriptions already say, adding no new syntax, limits, or format 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?
Starts with a specific verb+resource ('Hash Generator — Compute ... hashes') and enumerates the exact algorithms produced (MD5, SHA-1, SHA-256, SHA-512). It goes further by ruling out two plausible expectations ('no algorithm selection', 'bcrypt is not supported'), which sharply bounds what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of the obvious sibling analyze_hash, so an agent cannot tell from this text which of the two hash tools to pick. The only routing-ish information is input-related (text vs file), which is covered by the schema rather than the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_invoiceAInspect
Invoice Generator — Generate a professional PDF invoice from line items, client details, and company info. Takes a JSON body (camelCase fields), not form fields. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Line items. Keys MUST be description/quantity/unitPrice — other keys are silently ignored and amounts render as 0. | |
| notes | No | Wrapped text under a 'Notes / Terms' heading at the bottom; empty hides the section. | |
| dueDate | No | Free text printed as 'Due: <value>' — never parsed or validated; empty hides the line. | |
| currency | No | Sets the printed symbol ONLY — no conversion. Unknown codes print '$'; INR prints 'Rs'. | USD |
| clientName | Yes | Client name (REQUIRED). Field name is 'clientName' — not 'client_name'. | |
| taxPercent | No | Percent added to the subtotal. At 0 the tax line is left off the invoice. | |
| clientEmail | No | Printed in BILL TO under the client name; empty = line omitted. Never validated. | |
| companyName | Yes | Issuing company name (REQUIRED). | |
| invoiceDate | No | Free text printed as 'Date: <value>' — never parsed; empty hides the line. | |
| companyEmail | No | Printed in the issuer header block; empty = line omitted. Never validated. | |
| companyPhone | No | Printed in the issuer header block; empty = line omitted. | |
| clientAddress | No | One printed line under BILL TO — no wrapping, so keep it short; empty = line omitted. | |
| invoiceNumber | No | Auto-generated 'INV-<8hex>' when omitted. | |
| companyAddress | No | One printed line in the issuer header — no wrapping; empty = line omitted. | |
| discountPercent | No | Percent added to the subtotal. At 0 the tax line is left off the invoice. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish a safe, non-destructive, closed-world generator (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds genuinely useful context beyond them: the required JSON-body invocation contract with camelCase keys, and that the output is a rendered PDF. It stops short of describing where the PDF is delivered or any size/limit constraints.
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-loaded with the core purpose before the invocation detail. Only the '[category: generate]' metadata tag is low-value noise in an otherwise efficient description.
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 15-parameter tool with no output schema, the description states the output type (PDF invoice) and the invocation contract, which is enough for an agent to call it correctly. It omits how the resulting PDF is returned (download link, file path, inline bytes), which is a minor gap given the otherwise complete picture.
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 per-field schema text is highly detailed (required flags, print-only behavior, enum, defaults), so the description does not need to carry parameter meaning. The only added value is the camelCase convention hint, which is marginal since field names already show it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Generate a professional PDF invoice from line items, client details, and company info.' It also names the output medium (PDF) and category. However, it does not explicitly distinguish itself from the many other generate_* siblings (business card, certificate, barcode), relying on the unique resource name to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is an implicit usage note about invocation format ('Takes a JSON body (camelCase fields), not form fields'), which tells the agent how to call it. But there is no explicit when-to-use/when-not guidance and no named alternatives, leaving usage largely implied by the invoice use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_lorem_ipsumBInspect
Lorem Ipsum Generator — Generate lorem ipsum placeholder text by word count or paragraph count. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Unit to generate. Field names are 'type' + 'count' — 'paragraphs'/'words_per_paragraph' do not exist. | paragraphs |
| count | No | How many words/sentences/paragraphs to generate. | |
| startLorem | No | Start with the classic 'Lorem ipsum dolor sit amet' opening. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide little safety context (readOnlyHint: false, destructiveHint: false), so the description carries the burden. It adds that generation is driven by word or paragraph count, but it does not disclose whether the output is plain text, whether it is returned directly to the caller, or whether any file is created. For a simple generator this is a modest but acceptable transparency level.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded clause followed by a category tag, with no filler or redundant explanation. It is appropriately sized for a simple tool, even though it omits one supported mode, which is an accuracy issue rather than a conciseness issue.
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 generator with fully documented parameters and no output schema, the description covers the core purpose and main modes. Missing details such as exact return format or whether output is a file are not clearly stated, but 'placeholder text' strongly implies the result is returned text, making the definition mostly 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%, so the baseline is 3. The description adds little beyond the schema; it reinforces the concept of count-based generation but does not explain parameter interplay or the startLorem option, which the schema already documents adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as generating lorem ipsum placeholder text and mentions word/paragraph count modes, so the resource and action are specific. However, it does not explicitly differentiate from sibling generators such as generate_placeholder_image, and it omits the 'sentences' mode that the schema supports, making it slightly incomplete.
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 no guidance on when to use this tool versus related alternatives like generate_placeholder_image or other text-generating tools. There are no when/when-not conditions or explicit exclusions; the intended usage must be inferred from the resource name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_passwordAInspect
Password Generator — Generate a cryptographically secure random password with configurable length and character sets. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of passwords to generate. | |
| length | No | Characters per password. | |
| numbers | No | Include digits 0-9. Turning all four off is the same as leaving all four on. | |
| symbols | No | Include symbols from !@#$%^&*()-_=+[]{}|;:,.<>? - quotes, backslash, backtick, tilde and slash are never used. Turning all four off is the same as leaving all four on. | |
| lowercase | No | Include small letters a-z. Turning all four off is the same as leaving all four on. | |
| uppercase | No | Include capital letters A-Z. Turning all four off is the same as leaving all four on. | |
| excludeSimilar | No | Exclude look-alike characters (iIlL1oO0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false, openWorldHint=false and readOnlyHint=false, covering the safety profile. The description adds one genuinely useful behavioral claim — that the output is cryptographically secure — which the annotations do not convey. It says nothing, however, about determinism, whether generated values are persisted, or what is actually returned when count > 1.
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?
A single front-loaded sentence that states the action, the security property, and the configurability, plus a short category tag. Nothing is padded and the most important information comes 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 no output schema and seven parameters, the description should ideally sketch what comes back (e.g., an array of passwords sized by count) and note the secure-randomness guarantee's practical implications. It covers the essentials for calling the tool but leaves the return shape implicit; the singular 'a password' wording also sits slightly awkwardly against count up to 50.
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 every one of the seven parameters is already documented in detail by the schema. The description only restates two parameter concepts ('length and character sets') without adding format, range, or exclusion semantics, so the schema carries the weight and 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 verb ('Generate') and resource ('random password') and adds a qualifier ('cryptographically secure random password with configurable length and character sets'). The resource is unambiguous and naturally distinct from siblings like generate_hash or generate_qr_code, though no sibling is named explicitly.
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?
Usage is only implied: the mention of 'configurable length and character sets' tells the agent the tool is parameterizable, but there is no statement of when to reach for this tool versus alternatives (e.g., generate_hash) or any preconditions. For a self-evident generator this is tolerable, but it is not explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_placeholder_imageCInspect
Placeholder Image — Generate a placeholder image at any dimension with custom background colour and label text. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Label text. Defaults to '<width> × <height>'. | |
| width | No | Pixels wide. >4096 clamps to 4096; 0/omitted = 640. The default label text shows the FINAL clamped size. | |
| format | No | Image file type to save as. | png |
| height | No | Pixels tall. >4096 clamps to 4096; 0/omitted = 480. | |
| bgColor | No | Background hex color, with or without '#'. Field name is 'bgColor' — not 'bg_color'. | 3B82F6 |
| fgColor | No | Label text hex color. Field name is 'fgColor' — not 'text_color'. | FFFFFF |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the agent knows this produces rather than reads. The description adds nothing behavioral: it does not say a file is written, where it is written, or what is returned. "Any dimension" also overstates behavior the schema explicitly clamps at 4096, though this is a schema understatement rather than an annotation 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?
A single front-loaded sentence that names the resource first and then the configurable attributes, with no filler beyond the trailing category tag. Efficient, though the category tag adds little for selection.
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 six-parameter generation tool with no output schema, the definition is minimally viable: purpose is clear and all parameters are covered by the schema. The notable gap is the result side — where the generated image goes and what the caller receives — which matters because nothing else in the structured data supplies 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 width, height, text, bgColor and fgColor are all documented in the schema; the description only restates dimensions, background colour and label text and omits fgColor and format. With the schema doing the heavy lifting, 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 verb+resource ("Generate a placeholder image") and names the attributes it can vary (dimension, background colour, label text), which is enough to separate it from siblings like generate_qr_code or generate_favicon. It never explicitly names or contrasts an alternative, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as generate_favicon or photo_resize when an image already exists. The "any dimension / custom colour / label" phrasing only hints at the use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_qr_codeCInspect
QR Code Generator — Generate a QR code from a URL, text, or vCard data as a PNG image. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Width and height of the square image, in pixels. | |
| level | No | Error-correction level | M |
| content | Yes | The URL, text, or vCard data to encode |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and destructiveHint=false, which already signal that this is a non-destructive operation. The description adds the output format (PNG) but says nothing about whether the image is returned inline, saved to a path, or how large the payload might be. With annotations only covering the basic safety profile, more behavioral context would be expected.
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?
A single efficient sentence covers purpose, inputs, and output format without filler. The bracketed category tag at the end is administrative noise rather than useful description content, keeping it from a 5.
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 generate tool with only three parameters and full schema coverage, the description covers the essentials. However, with no output schema to explain the return value and no annotations beyond basic safety hints, the description should say more about what the agent receives back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (content, size, level) are documented in the schema itself. The description marginally reinforces the content parameter by listing accepted input types, but adds no syntax or format guidance beyond the schema. Baseline 3 is appropriate when 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?
States a clear verb+resource (generate a QR code) and enumerates the accepted input types (URL, text, vCard) plus the output format (PNG). It does not explicitly differentiate itself from the sibling generate_barcode, which is the nearest competitor, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites, and no routing to alternatives such as generate_barcode. The description only says what the tool produces, leaving the agent to infer selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_add_watermarkCInspect
Video Watermark — Overlay a text watermark onto a video using FFmpeg, with position and opacity control. [category: media]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Video to watermark. Forces a full H.264 re-encode into MP4 (audio copied) — among the platform's slowest ops on long videos. | |
| text | No | Watermark text. | John's Essentials |
| opacity | No | How solid the watermark looks: 1 is fully solid, 0.3 is a faint ghost. | |
| fontsize | No | Text size in pixels. Leave it at 0 and the size is worked out from the video's own height - about 36 on a 1080p video. Sizes below 6 are treated the same as 0. | |
| position | No | Which corner of the frame the watermark sits in. | bottomright |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, and the description is consistent with them. However, the description itself discloses nothing beyond safety: it omits that the operation requires a full H.264 re-encode, that output is a new MP4 with audio copied, and that it is one of the slowest operations (the schema carries that detail, so the description gets no credit for it).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the resource, mechanism, and controls in order, plus a harmless category tag. Nothing is padded, though it is arguably under-specified rather than optimally concise.
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 five parameters, 100% schema coverage, and no output schema, the description covers the essentials an agent needs to select the tool, but it leaves the result shape and processing cost unstated at the description level. Adequate but not complete for a re-encoding media mutation.
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 file, text, opacity, fontsize, and position, including units, defaults, and edge behavior. The description only gestures at 'position and opacity control' and adds no syntax or constraints beyond what is already structured, which is the baseline 3 case.
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 ('Overlay a text watermark onto a video'), names the mechanism (FFmpeg), and scopes the controllable knobs (position and opacity). It is clearly a video-domain complement to the pdf_watermark and photo_watermark siblings without naming them, so it is a strong but not fully differentiated statement of purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no pointer to alternatives such as photo_watermark or pdf_watermark for other media types. An agent must infer the usage context entirely from the tool name and the word 'video'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_compress_videoAInspect
Compress Video — Reduce video file size using H.264 re-encoding with FFmpeg (quality presets high/medium/low). [category: media]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Video in any FFmpeg-readable container; always comes back as H.264/AAC MP4 (yuv420p, faststart) whatever went in. | |
| quality | No | Quality preset mapping to H.264 CRF 18/23/28. Field name is 'quality' — there is no 'crf' parameter. | medium |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the sparse annotations by naming FFmpeg, H.264 re-encoding, and quality presets. It does not explain output-file handling or non-destructiveness, but the schema's file parameter already documents the returned MP4 format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with the key behavior front-loaded. The 'Compress Video —' prefix and '[category: media]' tag are slightly redundant with the tool name and sibling context, but they add minimal overhead.
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 two-parameter tool with full schema coverage, the description plus schema is sufficient to select and invoke the tool correctly. Although there is no output schema, the file parameter description already specifies the H.264/AAC MP4 result, so the description does not need to repeat 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 schema already explains the output format for 'file' and the CRF mapping for 'quality'. The description only repeats the high/medium/low preset names without adding new 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-resource pair ('Compress Video') and explains the outcome (reduce file size) and method (H.264 re-encoding with FFmpeg). It is easy to tell apart from convert_video and media_trim_video, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Reduce video file size' implies the obvious use case, but there is no explicit when-to-use/when-not-to-use guidance or mention of alternatives. In a large media/convert sibling set, an agent gets limited help choosing between this and convert_video or other compression tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_extract_audioBInspect
Extract Audio — Extract the audio track from a video file as MP3, WAV, OGG, FLAC, or AAC. [category: media]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Video to pull the soundtrack from (any FFmpeg-readable container). Audio is always re-encoded to `format`, never stream-copied. | |
| format | No | What to save the soundtrack as. WAV and FLAC keep every bit of the original; MP3, OGG and AAC are smaller but re-compressed. | mp3 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the available output formats as context but says nothing about where the resulting file is written or that a new artifact is produced, so it stays at a baseline level.
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?
A single front-loaded sentence that leads with the verb and resource, with no wasted clauses. The trailing '[category: media]' tag is minor noise but does not impair 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 simple two-parameter tool with full schema coverage this is largely complete, but with no output schema the description should ideally state what is returned or where the extracted audio is saved. It leaves that gap for what is a file-producing (non-read-only) 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%, and the schema already documents both parameters, including the re-encode-never-copy behavior. The prose format list merely restates the enum, adding no syntax or constraint detail beyond structured data, 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?
States a specific verb and resource ('Extract the audio track from a video file') and enumerates the output formats, so the tool's function is unambiguous. However, it does not differentiate itself from close siblings like media_merge_audio, media_trim_audio, or media_mute_video, which an agent could confuse for audio-track 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 no when-to-use guidance, prerequisites, or alternatives; usage is only inferable from the name. In a sibling set containing media_merge_audio and media_trim_audio, the absence of any routing cues leaves genuine ambiguity about which audio tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_extract_framesBInspect
Extract Frames — Extract frames from a video at a specified frame rate as JPEG images (returned as a ZIP). [category: media]
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | How many frames to take per second of video. 1 means one frame a second. | |
| max | No | Stop after this many frames, however long the video is. | |
| file | Yes | Video to sample. Frames are always JPEGs (frame_0001.jpg…) in a ZIP — no PNG option despite the tool blurb. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the return packaging ('returned as a ZIP') which is real behavioral value given there is no output schema, but it says nothing about size/time limits, frame-count caps, or what happens on very long videos.
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?
A single front-loaded sentence that wastes nothing; the only filler is the name echo and the '[category: media]' tag. Efficient, though not maximally 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?
For a three-parameter extraction tool with full schema coverage and annotations, the description covers what is extracted, in what format, and how it is returned (ZIP of JPEGs), which substitutes for the absent output schema. The gap is routing guidance against the many media/pdf/image siblings, which the description never addresses.
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 parameter docs are unusually good (fps min/max semantics, max frames, the explicit 'no PNG option' note). The description only alludes to 'a specified frame rate' and adds nothing the schema does not already say, 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?
Specific verb+resource combination ('Extract frames from a video') with an explicit qualifier ('at a specified frame rate') and output format (JPEGs in a ZIP). It is clearly distinguishable from siblings like convert_video or analyze_video by the framing of its output, but it never names an adjacent tool to route the agent, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusion (e.g. 'does not decode audio'), and no pointer to alternatives such as analyze_video, media_trim_video, or media_compress_video. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_merge_audioAInspect
Merge Audio — Concatenate multiple audio files (at least 2) into one MP3 using FFmpeg. [category: media]
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Input audio files (MP3, WAV, AAC, OGG) — at least 2 required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the operation is not read-only and not destructive. The description adds that the output is MP3 and that FFmpeg is used, but it does not disclose side effects, mixed-format handling, or output delivery behavior. This is a modest addition beyond annotations, not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with the essential constraint front-loaded and a useful category tag. There is no filler or redundant explanation.
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 one-parameter tool with annotations and a fully descriptive schema, the description provides enough information to invoke the tool correctly. A note about output/return behavior or ordering would make it fully complete, 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?
The schema already documents the files parameter fully, including accepted formats and the at-least-2 constraint. The description only restates 'at least 2' and adds no new parameter-level semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation (merge/concatenate), the resource (multiple audio files), the minimum count (at least 2), and the output format (one MP3 via FFmpeg). This distinguishes it well from sibling tools like media_trim_audio and media_extract_audio.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear usage context: use this tool to concatenate two or more audio files into a single MP3. However, it does not explicitly name alternative tools or state when not to use it, so the guidance is sufficient but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_mute_videoAInspect
Mute Video — Remove the audio track from a video file. [category: media]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (MP4, MOV, AVI, MKV) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the core behavioral effect: the audio track is removed, which goes beyond the annotations' readOnlyHint=false and destructiveHint=false. However, it does not clarify whether the input file is modified in place or a new muted video file is produced, which matters for an agent invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that immediately states the verb and object. The category tag is compact and useful, and there is no redundant or filler 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 simple one-parameter tool with no output schema, the description sufficiently communicates the input and the transformation. It could explicitly mention the return value, but the fact that the result is a muted video is strongly implied by the 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?
The only parameter, 'file', is fully described in the input schema with its accepted formats (MP4, MOV, AVI, MKV), so schema coverage is complete. The description adds little parameter-specific meaning beyond calling it a 'video file,' 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 verb and resource: 'Remove the audio track from a video file.' It clearly distinguishes the tool from related siblings like media_extract_audio or media_trim_video by describing a distinct outcome.
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 when to use the tool—when a muted/silent video is needed—but it gives no explicit alternatives, exclusions, or when-not-to-use guidance. It does not mention related media tools such as media_extract_audio or media_trim_video.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_trim_audioAInspect
Trim Audio — Trim an audio file to a specified start and end time using FFmpeg. [category: media]
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End time e.g. '00:01:30'. Omit to trim to the end of the file; when set it must be after start. | |
| file | Yes | Audio to trim. Output keeps this file's container/codec (stream copy); a filename with no extension is treated as .mp3. | |
| start | No | Start time e.g. '00:00:10'. Defaults to the beginning. | 0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a non-read-only, non-destructive safety profile, lowering the bar. The description adds only 'using FFmpeg' as mechanism context; it does not disclose whether the original file is overwritten, where the output is written, or whether the operation is lossless versus re-encoded. The stream-copy behavior is mentioned in the file parameter schema, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded, single-purpose sentence with no filler. Minor redundancy: the leading title 'Trim Audio' restates the verb+resource of the following sentence, and the '[category: media]' tag contributes little value to an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter tool with 100% schema coverage, safety annotations, and no nested objects, the description plus schema is nearly sufficient for correct invocation. The main gap is explicit output file naming/overwrite behavior, which is only hinted at through the schema's note that an extension-less filename is treated as .mp3.
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 'start and end time' phrase loosely maps to the start/end parameters but adds no format guidance, default values, or constraints beyond what the schema already fully 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?
States a specific verb (Trim), resource (audio file), and the precise operation (specified start and end time), plus the mechanism (FFmpeg). This distinguishes it from near siblings like media_trim_video (video resource), media_extract_audio (extraction, not trimming), and media_merge_audio (merging, not trimming) without needing to open 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 purpose statement implies when to use this tool — when an audio file needs to be cropped to a time range — but the description offers no explicit when/when-not guidance or named alternatives. Given the direct sibling media_trim_video (which also handles audio tracks within video), an explicit exclusion would meaningfully help an agent pick correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_trim_videoAInspect
Trim Video — Trim a video clip to a specified start and end time without re-encoding. [category: media]
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End time. Omit to trim to the end of the file; when set it must be after start. | |
| file | Yes | Video to trim. Stream copy — output keeps this container/codec, and the cut starts at the keyframe at or before `start`. | |
| start | No | Start time e.g. '00:00:10'. Defaults to the beginning. | 0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The 'without re-encoding' phrase adds a meaningful behavioral trait beyond the annotations, implying stream-copy behavior and keyframe-aligned cuts. However, the description does not state what the tool returns or how it handles the output file, and there is no contradiction with the provided 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 a single, front-loaded sentence that immediately states the tool's title and purpose. There is no filler or redundant information; the category tag is minimal and unobtrusive.
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 input parameters are fully documented in the schema and the annotations cover the safety profile, so an agent can select and invoke the tool correctly. The only minor gap is the lack of an explicit description of the return value, but for a trim operation the result is reasonably inferable and not needed for 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 detailed descriptions for file, start, and end, so the description does not need to repeat parameter meaning. The description's mention of 'specified start and end time' aligns cleanly with the schema but adds no new semantic 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?
The description names a specific operation ('Trim'), a specific resource ('a video clip'), and the control parameters ('specified start and end time'). The qualifier 'without re-encoding' helps distinguish this from convert/compress video tools, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: when a video clip needs trimming to a start/end time without re-encoding. It does not explicitly name siblings like media_trim_audio or exclusion conditions, so it stops short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
octopus_deleteADestructiveInspect
Delete a file. Default behaviour is a soft delete (the file goes to the trash and can be restored). Pass hard: true to permanently remove a file that's ALREADY in the trash — this also reclaims storage quota.
| Name | Required | Description | Default |
|---|---|---|---|
| hard | No | Hard-delete (only allowed on files already in trash). | |
| file_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses side effects: soft delete moves to trash (restorable), hard delete permanently removes and reclaims storage. This goes beyond the annotations (destructiveHint=true) and gives the agent a precise mental model of the outcome.
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 (two sentences), uses clear formatting for the hard:true flag, and avoids redundancy. Every sentence contributes to understanding the tool's 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?
For a simple delete operation with one required and one optional parameter, the description covers all necessary context: default behavior, hard-delete condition, and side effects on storage. No output schema is needed, and the description is sufficient 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?
The 'hard' parameter is well-described in both schema and tool description. The 'file_id' parameter lacks a schema description, but the tool's purpose makes it obvious that it identifies the file to delete. The overall parameter semantics are clear, with a minor gap for file_id.
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 deletes a file, with a specific verb ('Delete') and resource ('a file'). It also distinguishes the soft vs hard delete behavior, making its purpose unambiguous among sibling tools like octopus_move or octopus_read.
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 explains the default soft delete and the hard delete condition, providing clear guidance on when to use hard:true. While it doesn't explicitly contrast with alternatives, the deletion semantics are sufficiently contextualized.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
octopus_listARead-onlyInspect
List My Files — List the user's own saved files (their file storage), newest first, with an optional folder filter. Returns file names, types, folders, and IDs — never file contents. Use it to see what files the user has or to find which one they mean. [category: files]
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1-100; values outside this range silently fall back to 20. | |
| folder | No | Folder to list, written exactly as it is stored, closing slash included: /Tax/2026/. Leave blank for every recent file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely useful non-annotation behavior: newest-first ordering and the fact that it returns names, types, folders, and IDs but "never file contents" – a key expectation-setting 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?
Front-loaded with the core purpose, then scope, return contents, and usage in compact sentences. The trailing "[category: files]" tag is low-value noise, but overall the text is efficient and well ordered.
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?
No output schema exists, so the description responsibly summarizes returned fields (names, types, folders, IDs) and explicitly rules out contents. Combined with 100% schema coverage on inputs, an agent has enough to call it correctly; only sibling routing is underspecified.
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 both parameters are already fully documented in the schema (including the folder exact-format and limit fallback). The description's "optional folder filter" adds no details 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?
States a specific verb and resource: "List the user's own saved files (their file storage)", with ordering ("newest first") and an optional folder filter. It clearly separates itself from read/write tools by noting it returns metadata only, though it does not name the closest sibling (octopus_search) to sharpen the distinction.
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 intent guidance ("Use it to see what files the user has or to find which one they mean"), which implies the query-style use case. However, it never states when NOT to use it or name alternatives such as octopus_search / octopus_search_meta, so the agent must infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
octopus_make_folderAInspect
Create Folder — Create a folder (and any missing parent folders) in the user's file storage. [category: files]
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Folder path to create, e.g. /Clients/Acme. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations by stating that missing parent folders are also created, which clarifies the side-effect scope of the mutation. It does not specify behavior when the folder already exists, but for a simple creation tool the important non-destructive intent is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded, and wastes little space, with a useful category tag. There is minor redundancy because 'Create Folder' repeats the title before 'Create a folder,' but the overall structure is clean.
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 one-parameter create tool, the description covers what action is taken, where it happens, and the parent-folder behavior, while the schema completes the path format. It omits collision or existing-folder behavior, but this is a minor gap given the tool's simplicity.
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 the single path parameter with an example (/Clients/Acme), so schema coverage is 100%. The description itself adds no parameter-level detail, so it earns the baseline rather than extra credit.
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 folder (and any missing parent folders) in the user's file storage,' giving a clear verb, resource, and scope. It is plainly a creation operation, but it never contrasts itself with the similarly named sibling octopus_mkdir, so it does not fully distinguish between related 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?
No guidance is provided about when to use this tool rather than siblings such as octopus_mkdir, octopus_write, or octopus_move. The category tag and verb imply a file-storage creation context, but no explicit conditions, prerequisites, or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
octopus_mkdirAIdempotentInspect
Create a folder. Any missing parent folders along the path are auto-created. Idempotent — creating an existing folder is a no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Folder path to create, e.g. /Tax/2026/. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description transparently states the tool's behavior: creates folders, recursively creates missing parents, and does nothing if the folder already exists. This aligns with the annotations (idempotentHint=true, readOnlyHint=false, destructiveHint=false) and adds useful context about parent creation 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 exceptionally concise, using three short sentences to cover the core action, parent-creation behavior, and idempotency. Every sentence adds distinct value without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential functional details and the parameter adequately. However, given the presence of the sibling tool octopus_make_folder, it lacks a clarifying note about when to prefer this tool over the sibling, which slightly reduces completeness in the broader tool 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?
The description of the 'path' parameter is clear and includes an example ('/Tax/2026/'). This adds practical context beyond the schema's minimal string type and required flag, helping agents understand the expected format and nesting behavior.
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 'create' and resource 'folder', with additional details about auto-creating parents and idempotency. However, it does not explicitly distinguish itself from the sibling tool octopus_make_folder, which appears to have a nearly identical purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It implicitly suggests it can create nested paths and is safe to call on existing folders, but it never references the similar octopus_make_folder or other folder-related tools, leaving selection ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
octopus_moveAIdempotentInspect
Move a file to a different folder in Octopus, optionally renaming it at the same time. Folders are auto-created if they don't exist. This is a metadata-only change — no bytes are copied.
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | ||
| to_path | Yes | Destination folder path. | |
| new_name | No | Optional new filename. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-readonly, non-destructive, idempotent operation. The description adds useful side-effect details: folders are auto-created, and the operation is metadata-only with no byte copying. This provides good transparency, though it doesn't mention failure modes or whether the source is removed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundant information. The description is well-structured, front-loading the core action and then adding relevant 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 simple move operation with no output schema, the description covers the essential behavior, side effects, and optional parameters. It lacks error-handling or return-value details but is sufficient given the tool's simplicity.
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 to_path and new_name with descriptions but file_id has none. The tool description clarifies to_path behavior (auto-created folders) and new_name (optional rename), adding some meaning beyond the schema, but file_id remains underspecified. Coverage is 67% – not high enough for baseline 3, but not low enough to demand heavy compensation.
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 ('Move') and resource ('a file in Octopus'), with clear optional behaviors (renaming, auto-creating folders) and a distinguishing characteristic (metadata-only, no bytes copied). Even with the sibling octopus_move_file, this description clearly defines the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context on when to use (moving a file, optionally renaming, auto-creating folders) but does not explicitly contrast with alternatives like octopus_move_file or octopus_copy. The metadata-only note helps differentiate from copying, but no direct alternative guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
octopus_move_fileAInspect
Move File to Folder — Move one of the user's files — an upload or a result from a previous step — into a folder of their file storage, optionally renaming it. Creates the folder if it doesn't exist. Use when the user says save / put / move / file this into a folder. [category: files]
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | The file to move: an uploaded file id or a previous step's {{step_N.file_id}}. | |
| to_path | Yes | Destination folder path, e.g. /Tax/2026. Created if missing. | |
| new_name | No | Optional new file name, with extension. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the key behavioral side effects beyond the readOnlyHint=false annotation: it moves the file, optionally renames it, and creates the destination folder if missing. It does not mention overwrite behavior or what happens when a file with the same name exists, but the main mutation semantics are clear.
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: one sentence defines the action and effects, and a second provides concrete usage triggers. Every part earns its place, with no fluff 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 simple three-parameter move tool with no output schema, the description covers the essential aspects: target path semantics, optional rename, side-effect of folder creation, and when to invoke it. It omits overwrite and return-value details, but those are not critical for a 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 parameters are already well documented. The description adds only minor reinforcement by mentioning 'optionally renaming' for new_name and 'Creates the folder if it doesn't exist' for to_path, but no meaningful new parameter-level information.
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: 'Move one of the user's files ... into a folder of their file storage,' with optional renaming and folder creation. It is more specific than many siblings like octopus_make_folder or octopus_list, though it does not explicitly differentiate itself from octopus_move.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit trigger phrases: 'Use when the user says save / put / move / file this into a folder.' However, it does not state when not to use it or mention alternatives such as octopus_move, so it lacks explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
octopus_readARead-onlyInspect
Read the contents of a file the user has stored in Octopus. Small files (<=2 MiB) come back inline as base64 (or UTF-8 text for text/* MIMEs). Larger files return a short-lived presigned download URL the agent can fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| as_text | No | If true and MIME is text-like, return content as UTF-8 string instead of base64. | |
| file_id | Yes | FileID (UUID) from octopus.list / octopus.search. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals no mutation, and the description adds concrete details about inline base64/UTF-8 vs presigned URL behavior. Error cases are not mentioned, but this is not a significant gap.
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 brief, direct, and free of redundant information. Every sentence adds value about behavior or usage.
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?
Although there is no output schema, the description explains the two possible return formats and references the source tools for obtaining file_id, making it complete enough for an agent to use 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 useful context: file_id originates from octopus.list/octopus.search, and as_text determines UTF-8 vs base64 return format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Read' and the resource 'file in Octopus', and the inline-vs-URL behavior distinguishes it from sibling tools like octopus_list, octopus_search, and octopus_write.
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 behavior for small vs larger files and points to octopus.list/octopus.search as the source for file_id. It does not explicitly contrast with all sibling read-like tools, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
octopus_searchARead-onlyInspect
Search the user's Octopus files by filename, tag, or folder. Pass query as a substring to match against names; combine with tag: or in:/path/ filter syntax (e.g. query: invoice tag:tax in:/Finance/). Returns up to limit matching files.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Free-text + optional tag:/ in:/ qualifiers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions that it returns up to `limit` matching files, which is basic output behavior. It relies on the readOnlyHint annotation for read-only status and does not explicitly state that it does not modify files, but the annotation covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the purpose, the second gives usage syntax and an example. It is concise, well-structured, and contains 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 search tool with two parameters, the description covers the query syntax, the limit behavior, and the return type. It does not mention error handling, sorting, or pagination beyond the limit, but these are not critical for basic usage.
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 only describes the `query` parameter, but the description adds meaning to `limit` by explaining it controls the maximum number of returned files. It also enriches `query` with a concrete example, going beyond the schema's brief description.
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: searching Octopus files by filename, tag, or folder. It also provides concrete filter syntax, distinguishing it from sibling tools like octopus_list or octopus_search_meta.
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 specific usage instructions with a query example and explains the `tag:` and `in:/path/` qualifiers. However, it does not explicitly compare with alternative sibling tools or state when to prefer this over octopus_list, though the search intent is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
octopus_search_metaARead-onlyInspect
Find My Files — Find the user's saved files by name, tag, or folder (metadata only — does NOT read file contents). Use it to resolve a reference like 'the invoice from this morning' or 'my Q1 report' to a real file. Returns matching names, types, folders, and IDs. [category: files]
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Text matched against file names and tags. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already covering safety, the description earns credit by disclosing search scope ('user's saved files'), matching criteria (name, tag, folder), and a return contract ('Returns matching names, types, folders, and IDs'). It aligns with readOnlyHint and openWorldHint=false, though it does not mention no-match behavior or result limits.
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, each earning its place: purpose+scope, usage example, return contract, and a category tag. The most decision-relevant fact — 'metadata only — does NOT read file contents' — is front-loaded in the first sentence, and there is zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only tool with no output schema, the description covers search scope, input semantics, and return values, effectively substituting for the missing output schema. Minor gaps remain: no-match behavior and result limits are undisclosed, and the relationship to the sibling octopus_search is implicit rather than explicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning by extending query targets beyond the schema's 'file names and tags' to include folders, and by signaling that natural-language references like 'my Q1 report' are valid query inputs.
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 pair — 'Find the user's saved files by name, tag, or folder' — and immediately differentiates from content-search siblings by adding 'metadata only — does NOT read file contents.' Concrete examples like 'the invoice from this morning' make the tool's purpose vivid and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it to resolve a reference like ... to a real file' provides explicit when-to-use guidance with realistic examples. The clause 'does NOT read file contents' implies a when-not boundary, but no alternative tool (e.g., octopus_search or octopus_read) is named to route content-requiring intents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
octopus_writeAInspect
Save a new file the agent has produced (a report, a summary, generated code, etc.) into Octopus. If path is omitted the file lands in /agent/{session}/ — the convention that keeps agent output separate from user uploads. Provide ONE of content_text (UTF-8) or content_base64 (binary).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Filename including extension. | |
| path | No | Folder to write into. Defaults to /agent/{session}/. | |
| tags | No | Optional tags. | |
| mime_type | No | Optional. Sniffed from extension if omitted. | |
| content_text | No | UTF-8 content (use for text/markdown/json). Provide exactly ONE of content_text or content_base64. Max 25 MiB. | |
| content_base64 | No | Base64 content (use for binary). Decoded size max 25 MiB. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so the description's write operation is consistent. The description does not mention whether overwriting existing files is allowed, potential side effects, or any permissions required, leaving some behavioral details unspecified.
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 but information-dense, front-loading the core purpose and then covering key usage constraints 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?
The description is sufficiently complete for correct invocation: it explains path defaults, content selection, and size limits. It omits overwrite semantics and return behavior, but no output schema exists so return details are not required.
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 meaningful context beyond the schema by explaining the path default, the content exclusivity rule (exactly one of content_text/content_base64), the max size, and the MIME type fallback behavior.
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 saves a new file the agent produced into Octopus, with a specific verb ('Save') and resource ('new file to Octopus'), distinguishing it from related tools like octopus_delete, octopus_read, and octopus_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use it (for agent-produced files), the default path convention, and that exactly one of content_text or content_base64 must be provided, which is essential usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_compressAInspect
Compress PDF — Reduce PDF file size while preserving readability. Quality presets: light (300 DPI), balanced (150 DPI, default), mobile (96 DPI), maximum (72 DPI). Also supports metadata-only stripping and a target-size mode. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | PDF to compress | |
| quality | No | How hard to squeeze. Light keeps print quality (300 DPI); balanced is the everyday choice (150 DPI); mobile (96 DPI) and maximum (72 DPI) trade sharpness for size. | balanced |
| targetSize | No | Squeeze until the file fits this size. Overrides the preset above. | |
| metadataOnly | No | Only strip the hidden details - author, title, producing software - and leave every page exactly as it is. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false), so the description only needs to add context. It usefully discloses the quality/DPI tradeoffs, a target-size mode that overrides presets, and that metadata-only leaves every page 'exactly as it is.' It stops short of stating whether output overwrites the original or emits a new file.
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?
A single dense paragraph, front-loaded with the verb and resource, with presets and modes enumerated compactly. Efficient, though the bracketed '[category: pdf]' tag adds little.
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 4-param tool with a full schema and no output schema, the description covers purpose, presets, target-size override, and metadata mode. The main gap is output behavior (new file vs in-place), which an agent would need before invoking.
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 file, quality, targetSize, and metadataOnly in full. The description echoes the same preset names and DPI values without adding syntax or behavior beyond the schema, matching the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Compress PDF — Reduce PDF file size') and is unambiguously distinguished from format-specific siblings like photo_compress and media_compress_video.
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 the modes and presets but gives no explicit when-to-use vs alternatives or exclusions. Usage is implied by the PDF resource and the reduction goal, but no sibling routing or prerequisite guidance is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_cropAInspect
Crop PDF — Crop the visible area of all pages in a PDF by setting new margins. Margins are in PostScript points; EVERY omitted edge defaults to 36pt — send 0 to leave an edge uncropped. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | How much to cut off the top edge, in points - 72 points is one inch. 0 leaves this edge alone. Cut away more than the page holds and you get a 1-point page rather than an error. | |
| file | Yes | Input PDF (max 25MB) | |
| left | No | How much to cut off the left edge, in points - 72 points is one inch. 0 leaves this edge alone. Cut away more than the page holds and you get a 1-point page rather than an error. | |
| right | No | How much to cut off the right edge, in points - 72 points is one inch. 0 leaves this edge alone. Cut away more than the page holds and you get a 1-point page rather than an error. | |
| bottom | No | How much to cut off the bottom edge, in points - 72 points is one inch. 0 leaves this edge alone. Cut away more than the page holds and you get a 1-point page rather than an error. | |
| outputFilename | No | Optional custom output filename. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark it non-read-only but non-destructive, and the description usefully discloses a real gotcha beyond them: EVERY omitted edge silently defaults to 36pt, so callers must send 0 to leave an edge alone. It does not state whether the original file is overwritten or where output goes, but the silent-default warning is substantive 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?
Two tight sentences with the purpose front-loaded and the default behavior warning placed immediately after, followed by a compact category tag. No filler, though the default-value note partially duplicates schema defaults.
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 6-parameter mutation tool with no output schema, the description covers purpose, units, defaulting behavior, and the uncrop escape hatch. It could still say whether it writes a new file or overwrites, but it is otherwise complete 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 schema already documents every parameter, its default, range, and the 1-point-page edge case. The description reinforces the default-36pt and 0-means-uncropped semantics but adds little beyond what the schema already states, matching the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Crop PDF') and adds scope ('the visible area of all pages'), which an agent can use to distinguish it from photo_crop or pdf_resize-style siblings. It stops short of explicitly naming the alternative tool or clarifying that it operates on PDFs only via the name itself.
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?
Usage is implied by the operation (crop using margin values) but there is no explicit when-to-use/when-not-to-use guidance and no named alternative such as photo_crop for images. The default/zero behavior is helpful operational guidance but is not routing guidance between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_delete_pagesCInspect
Delete Pages — Remove specific pages from a PDF. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF to edit. Password-protected input is rejected 400 — run pdf_unlock first. | |
| pages | Yes | Pages to delete e.g. '1,3,5-7' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only restates that pages are removed; it does not disclose whether the original file is modified or a new PDF is returned, nor any non-obvious side effects. Annotations declare readOnlyHint=false and destructiveHint=false, so the description adds little beyond what annotations already imply.
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 substantive sentence is short and front-loaded, clearly naming the action and target. The repeated 'Delete Pages' prefix and category tag add minimal value, so it is not a perfect 5.
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 file-mutating tool with no output schema and many PDF siblings, this description leaves out return behavior, whether the operation is reversible, and how to choose it over similar tools. It is adequate for invocation once selected but incomplete for distinguishing and predicting the result.
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 are informative, especially the 400 rejection for password-protected input. The main description adds no parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific verb 'Remove' and resource 'pages from a PDF', so an agent immediately knows what the tool does. It doesn't explicitly contrast with pdf_extract_pages or pdf_split, but the semantics are 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?
No guidance is given on when to choose this over pdf_extract_pages, pdf_split, or pdf_reorder, and there are no exclusions or prerequisites. The only useful routing detail (password-protected inputs require pdf_unlock first) lives in the schema's file parameter, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_excel_to_pdfAInspect
Excel to PDF — Convert Excel spreadsheets (.xlsx / .xls / .csv / .ods) to PDF with fit-to-page, orientation control, paper size, sheet selection, repeat header rows, custom header/footer, PDF/A output, password protection, watermark, and per-sheet split mode. Hybrid pipeline: excelize preprocesses the xlsx (page layout, sheet visibility) then LibreOffice converts. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input spreadsheet (.xlsx, .xls, .csv, .ods) | |
| pdfa | No | Save in the PDF/A archive format, which embeds everything the file needs to open correctly in decades' time. Off unless you need it; 2b is the version most archives ask for. | none |
| scale | No | Print size as a percentage, where 100 is life size and less shrinks the sheet to fit more on a page. Leave it blank unless you want a specific percentage - setting any value here turns Fit to page off. | |
| footer | No | Per-page footer template. Same tokens as header. | |
| header | No | Per-page header template. Tokens: {page}, {pages}, {sheet}, {date}, {filename}. | |
| sheets | No | Which sheets to convert: all, or the names or positions you want — Sales,Ledger or 0,2. | all |
| margins | No | default|narrow|normal|wide (Excel's inch presets); default keeps the sheet's own margins. Only applies to .xlsx input; unknown → default. | default |
| quality | No | How sharp the pictures and charts stay in the PDF. Leave blank for the converter's own setting. | |
| password | No | Open password for the output PDF (user password). | |
| bookmarks | No | Add PDF bookmarks, one per sheet. | |
| fitToPage | No | Fit each sheet to a page. 'width' prevents column cutoff; 'one-page' squeezes each sheet onto a single page. | none |
| gridlines | No | Print the faint grid between cells. Leave blank to keep whatever the sheet already does. | |
| paperSize | No | a4 (default) | letter | legal | tabloid | a3. Only applies to .xlsx input (excelize preprocess); unknown values silently become a4. | a4 |
| splitMode | No | One PDF containing every sheet, or a ZIP holding one PDF per sheet. | combined |
| repeatRows | No | Print titles — rows that repeat on every page. e.g. '1' or '1-3'. | |
| orientation | No | Page orientation. 'auto' picks landscape for sheets with ≥8 data columns. | auto |
| showHeaders | No | Print the A B C column letters and 1 2 3 row numbers down the edges. Leave blank to keep the sheet's own setting. | |
| permPassword | No | A second, different password that locks printing, copying and editing. Only takes effect if you also set an open password above. | |
| watermarkFont | No | Lettering style for the watermark. Latin alphabet only. Only used when there is watermark text. | Helvetica |
| watermarkText | No | Optional text watermark stamped on every page of the output. | |
| watermarkColor | No | Colour of the watermark lettering, as #rgb or #rrggbb. Anything else becomes mid-grey. Only used when there is watermark text. | #808080 |
| watermarkScale | No | Size multiplier applied on top of the lettering size. Only used when there is watermark text. | |
| watermarkOpacity | No | How solid the watermark looks: 1 is fully solid, 0.3 is a faint ghost. This is a fraction, not a percent. Only used when there is watermark text. | |
| watermarkFontSize | No | Height of the watermark lettering in points. Only used when there is watermark text. | |
| watermarkPosition | No | Where the watermark sits on the page. Only used when there is watermark text. | c |
| watermarkRotation | No | Angle of the watermark in whole degrees; 45 is the classic diagonal. Only used when there is watermark text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), and the description adds genuinely useful behavioral context: the two-stage 'excelize preprocesses the xlsx then LibreOffice converts' pipeline, which explains why several options only apply to .xlsx input. It still omits output shape (a ZIP under per-sheet mode) and any failure/format caveats, but the pipeline disclosure is real value 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?
Front-loads the conversion intent before the capability enumeration, and the two sentences are dense rather than padded. The feature list is long but earns most of its tokens by surfacing options an agent needs to recognize, though it reads slightly like a marketing bullet.
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 26-parameter conversion tool with no output schema but full schema coverage, the description adequately conveys what the tool produces and its core dimensions. The main remaining gap is the absence of any sibling routing versus pdf_excel_to_pdf_batch/_inspect, which is more a usage-guideline issue than a missing capability statement.
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% across all 26 parameters, including defaults, enums and conditional notes (e.g. 'default keeps the sheet's own margins', scale turning off fit-to-page). The description's feature list (fit-to-page, watermark, PDF/A, password, split mode) merely names capabilities already documented in the schema, so it adds no parameter meaning beyond structured data. 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?
Names a specific verb and resource ('Convert Excel spreadsheets (.xlsx / .xls / .csv / .ods) to PDF') and enumerates the capabilities an agent would use to match the request. However, it never distinguishes itself from its closest siblings pdf_excel_to_pdf_batch and pdf_excel_to_pdf_inspect, so the agent cannot tell which Excel-to-PDF entry point to pick from the description alone.
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 is a pure feature list with no when-to-use or when-not-to-use guidance and no routing to alternatives (batch, inspect, or the other *_to_pdf converters). It never states prerequisites, so the agent must infer selection purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_excel_to_pdf_batchAInspect
Excel to PDF (Batch) — Apply the same Excel-to-PDF configuration to up to 20 spreadsheets. Returns a ZIP with per-file subfolders. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| pdfa | No | Save in the PDF/A archive format, which embeds everything the file needs to open correctly in decades' time. Off unless you need it; 2b is the version most archives ask for. | none |
| files | Yes | Up to 20 input spreadsheets | |
| scale | No | Print size as a percentage, where 100 is life size and less shrinks the sheet to fit more on a page. Leave it blank unless you want a specific percentage - setting any value here turns Fit to page off. | |
| footer | No | Per-page footer template. Same tokens as header. | |
| header | No | Per-page header template. Tokens: {page}, {pages}, {sheet}, {date}, {filename}. | |
| sheets | No | Which sheets to convert: all, or the names or positions you want — Sales,Ledger or 0,2. | all |
| margins | No | default|narrow|normal|wide (Excel's inch presets); default keeps the sheet's own margins. Only applies to .xlsx input; unknown → default. | default |
| quality | No | How sharp the pictures and charts stay in the PDF. Leave blank for the converter's own setting. | |
| password | No | Open password for the output PDF (user password). | |
| bookmarks | No | Add PDF bookmarks, one per sheet. | |
| fitToPage | No | Fit each sheet to a page. 'width' prevents column cutoff; 'one-page' squeezes each sheet onto a single page. | none |
| gridlines | No | Print the faint grid between cells. Leave blank to keep whatever the sheet already does. | |
| paperSize | No | a4 (default) | letter | legal | tabloid | a3. Only applies to .xlsx input (excelize preprocess); unknown values silently become a4. | a4 |
| splitMode | No | One PDF containing every sheet, or a ZIP holding one PDF per sheet. | combined |
| repeatRows | No | Print titles — rows that repeat on every page. e.g. '1' or '1-3'. | |
| orientation | No | Page orientation. 'auto' picks landscape for sheets with ≥8 data columns. | auto |
| showHeaders | No | Print the A B C column letters and 1 2 3 row numbers down the edges. Leave blank to keep the sheet's own setting. | |
| permPassword | No | A second, different password that locks printing, copying and editing. Only takes effect if you also set an open password above. | |
| watermarkFont | No | Lettering style for the watermark. Latin alphabet only. Only used when there is watermark text. | Helvetica |
| watermarkText | No | Optional text watermark stamped on every page of the output. | |
| watermarkColor | No | Colour of the watermark lettering, as #rgb or #rrggbb. Anything else becomes mid-grey. Only used when there is watermark text. | #808080 |
| watermarkScale | No | Size multiplier applied on top of the lettering size. Only used when there is watermark text. | |
| watermarkOpacity | No | How solid the watermark looks: 1 is fully solid, 0.3 is a faint ghost. This is a fraction, not a percent. Only used when there is watermark text. | |
| watermarkFontSize | No | Height of the watermark lettering in points. Only used when there is watermark text. | |
| watermarkPosition | No | Where the watermark sits on the page. Only used when there is watermark text. | c |
| watermarkRotation | No | Angle of the watermark in whole degrees; 45 is the classic diagonal. Only used when there is watermark text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the description doesn't need to cover safety. The description adds the ZIP output structure (per-file subfolders), which is useful behavioral context. Beyond that, it does not describe whether the input files are modified or other runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first states purpose and batch limit, the second states the return format. No extraneous words, front-loaded with the primary function.
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 batch conversion tool: it covers the limit, the output format, and relies on the schema for the many configuration parameters. It could mention whether the input files are preserved, but that's a minor gap given the rich 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 all 26 parameters are already documented in the schema. The description mentions only the "same Excel-to-PDF configuration" concept, which is covered by the schema's own parameter descriptions. With the schema doing the heavy lifting, a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (convert), resource (Excel spreadsheets to PDF), and scope (batch, up to 20 spreadsheets). The parenthetical "(Batch)" and the ZIP output detail distinguish it from the singular sibling pdf_excel_to_pdf and pdf_excel_to_pdf_inspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies batch usage via "up to 20 spreadsheets" and the ZIP output, giving an agent enough context to choose this over the single-file variant. However, it does not explicitly name the single-file alternative or state when to prefer one over the other.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_excel_to_pdf_inspectARead-onlyInspect
Excel to PDF (Inspect) — Non-destructive workbook scan: returns per-sheet row/column counts, merged cells, PrintArea presence, and the auto-orientation heuristic's decision per sheet. Used by the frontend to preview before converting. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (XLSX, XLS, CSV, ODS) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The 'Non-destructive' wording aligns with readOnlyHint=true, and the description adds value beyond the annotation by disclosing what the scan reveals, including the auto-orientation heuristic's decision per sheet. This gives the agent a concrete sense of the tool's output before invocation. It does not contradict 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 a single dense sentence that front-loads the core action ('Non-destructive workbook scan') before enumerating return values and usage context. The [category: pdf] tag is slightly redundant given the name prefix, but every other clause earns its place with specific 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 one-parameter inspect tool with no output schema, the description covers the input, the return contents, and the intended usage scenario. It does not explicitly point to the conversion sibling, but the returned data enumeration largely compensates for the missing output schema, leaving only minor 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?
The single parameter 'file' is already fully documented in the schema with format 'binary' and accepted extensions (XLSX, XLS, CSV, ODS), so schema coverage is 100%. The description adds no additional parameter-level detail beyond reinforcing that the input is a workbook, which matches the baseline of 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Non-destructive workbook scan' that returns per-sheet metadata. It enumerates exactly what is returned (row/column counts, merged cells, PrintArea presence, orientation decision), and the 'Inspect' naming plus sibling context (pdf_excel_to_pdf, pdf_excel_to_pdf_batch) makes the differentiation clear without needing to open 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?
'Used by the frontend to preview before converting' provides clear context for when this tool is the right choice — as a pre-conversion inspection step. However, it does not explicitly name alternatives ('use pdf_excel_to_pdf to actually convert') or state when-not-to-use, leaving some inference to the sibling naming convention.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_extract_pagesAInspect
Extract Pages — Pull a chosen range of pages out of a PDF into a new PDF. To split a document into single pages, fixed chunks, or odd and even pages, use Split PDF instead. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input PDF (max 25MB). The uploaded filename must end in .pdf. | |
| pages | Yes | Page range e.g. '2-5,8' | |
| outputName | No | Optional custom output basename. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that the result is 'a new PDF', clarifying the non-destructive nature of the write. It does not add constraints like rate limits, permission needs, or whether the original is preserved, so the addition is modest given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences that are fully front-loaded: the core action comes first, the disambiguation second. No wasted words, and the category tag is the only non-essential element.
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 extraction tool with a fully documented schema and clear annotations, the description covers purpose, alternative, and output form. No output schema exists but the return (a new PDF) is implied, leaving only minor gaps around output naming and location.
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 'file', 'pages', 'outputName' and the 25MB limit are already documented. The phrase 'chosen range of pages' loosely maps to the 'pages' parameter but adds no format or syntax detail beyond the schema. Baseline 3 holds when 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?
States a specific verb (Extract) and resource (Pages) with the outcome spelled out: pulling a chosen range of pages into a new PDF. It distinguishes itself from pdf_split by name, so an agent can route between them 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 names the alternative (Split PDF) and the exact conditions that select it (single pages, fixed chunks, odd/even pages). This is when/when-not guidance with a concrete sibling, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_file_infoBRead-onlyInspect
PDF File Info — Detailed info about a PDF: size, pages, version, encryption. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=true, so the safety profile is covered. The description adds useful context by naming the exact information categories returned, but it does not disclose output format, behavior on corrupted or encrypted PDFs, or any limitations beyond the annotation-provided read-only hint.
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-loads the tool's purpose before listing the returned data fields. The leading 'PDF File Info' is somewhat redundant with the tool name/title, but the rest of the sentence offers specific value and the category tag is useful for 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 one-parameter, read-only informational tool with no output schema, the description adequately conveys what the tool returns. It does not cover edge cases or return formatting, but the operation is simple and the annotations already establish the read-only nature.
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 only parameter, file, is fully documented in the input schema as 'Input file (PDF)', giving 100% schema coverage. The description adds no additional parameter-specific meaning or constraints beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (a PDF) and the operation (retrieving detailed info), and enumerates the specific data points returned: size, pages, version, and encryption. It does not explicitly contrast with siblings like pdf_get_metadata or analyze_pdf_inspector, but the listed fields make the scope reasonably 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 provides no guidance on when to use this tool versus sibling alternatives such as pdf_get_metadata, pdf_page_count, or analyze_file. The [category: pdf] tag offers a broad grouping but no selection criteria, exclusions, or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_flattenAInspect
Flatten PDF — Flatten PDF forms and annotations into static page content. Supports granular modes (annotations-only, forms-only, all), page ranges, signature-aware handling, link preservation, watermark stamping, image compression, PDF/A archival output, OCR for scanned inputs, and a ZIP bundle that exports form values + annotation metadata alongside the flattened file. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input PDF | |
| mode | No | Which interactive elements to flatten. 'none' runs no flatten (useful for OCR/watermark/PDFA-only pipelines). | all |
| pages | No | Optional page range (e.g. '1-3,5,7-9'). Only listed pages are flattened; others stay interactive. | |
| ocrLang | No | Which language the scanned text is in. | eng |
| ocrFirst | No | Run ocrmypdf before flattening (for scanned PDFs). Requires Starter+ tier. | |
| exportData | No | Also give me the form answers and note text as separate files. You get a ZIP containing the flattened PDF plus form_values.json and annotations.json - not a PDF. | |
| outputFormat | No | pdfa produces a PDF/A-2b archival output. Requires Starter+ tier. | |
| preserveLinks | No | Keep clickable hyperlinks after flattening (uses qpdf --flatten-annotations=print). | |
| signatureMode | No | What to do if the PDF has been digitally signed. Flattening destroys a signature, so by default we hand the original back untouched. | preserve |
| watermarkFont | No | Exactly Helvetica, Times-Roman, or Courier (case-sensitive); anything else becomes Helvetica. Read only when watermarkText is set. | Helvetica |
| watermarkText | No | Text watermark to stamp before flattening. Leave empty to skip. | |
| compressImages | No | Downsample images after flattening to shrink file size. | |
| compressPreset | No | How hard to squeeze the pictures: screen 72 DPI, ebook 150 DPI, printer and prepress 300 DPI. | ebook |
| outputFilename | No | Optional custom filename for the flattened output (without path). | |
| watermarkColor | No | Hex color, #rgb or #rrggbb. | #808080 |
| watermarkScale | No | Absolute scale factor; default 1.0. Non-numeric resets to 1.0. | |
| watermarkOpacity | No | 0 = invisible, 1 = solid; default 0.3. Non-numeric resets to 0.3. Read only when watermarkText is set. | |
| watermarkFontSize | No | Point size, integer; non-integer input silently resets to 48. Read only when watermarkText is set. | |
| watermarkPosition | No | Where the watermark sits on the page. Only used when there is watermark text. | c |
| watermarkRotation | No | Degrees, integer; default 45 = classic diagonal. Non-integer resets to 45. Read only when watermarkText is set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, openWorldHint=false, destructiveHint=false, so the description carries the real behavioral load and does it well: it warns that flattening destroys a signature (with a preserve-by-default rule), states the destructive modes, notes tier requirements for OCR/PDF-A, and clarifies that exportData returns a ZIP rather than a PDF. It does not describe the default output filename or response shape, but the safety-relevant behavior is covered.
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 purpose is front-loaded correctly, but it then becomes one long run-on capability list that largely duplicates the 100%-covered schema descriptions. Given 20 parameters some scannable summary is defensible, yet several listed features earn no distinct 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 20-parameter mutation tool with no output schema, the description supplies the essentials an agent needs: what is flattened, that signatures are protected by default, tier constraints, and that exportData changes the return type to a ZIP. Naming the sibling alternatives it overlaps with is the one notable omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter already documents its own enum labels, defaults, and quirks, so the schema does the heavy lifting. The prose adds only high-level summaries ('granular modes', 'page ranges', 'watermark stamping') that mostly restate what the schema already says, yielding the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening states a specific verb and resource: 'Flatten PDF forms and annotations into static page content,' which is unambiguous. It never names or contrasts with the obvious alternatives (pdf_flatten_batch, pdf_watermark, pdf_to_pdfa, pdf_ocr), so an agent must infer the boundary rather than being told it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Some usage is implied through defaults (signatureMode 'preserve') and the note that mode 'none' is for OCR/watermark/PDFA-only pipelines. But there is no explicit when-to-use/when-not guidance and no routing to siblings that overlap heavily (pdf_watermark, pdf_to_pdfa, pdf_ocr, pdf_flatten_batch), which is the main ambiguity risk here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_flatten_batchAInspect
Flatten PDFs (Batch) — Apply the same flatten configuration to up to 20 PDFs in one request. Returns a ZIP with each flattened file (and per-file error entries on failure). [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Which interactive elements to flatten. 'none' runs no flatten (useful for OCR/watermark/PDFA-only pipelines). | all |
| files | Yes | Up to 20 input PDFs | |
| pages | No | Optional page range (e.g. '1-3,5,7-9'). Only listed pages are flattened; others stay interactive. | |
| ocrLang | No | Which language the scanned text is in. | eng |
| ocrFirst | No | Run ocrmypdf before flattening (for scanned PDFs). Requires Starter+ tier. | |
| exportData | No | Also give me the form answers and note text as separate files. You get a ZIP containing the flattened PDF plus form_values.json and annotations.json - not a PDF. | |
| outputFormat | No | pdfa produces a PDF/A-2b archival output. Requires Starter+ tier. | |
| preserveLinks | No | Keep clickable hyperlinks after flattening (uses qpdf --flatten-annotations=print). | |
| signatureMode | No | What to do if the PDF has been digitally signed. Flattening destroys a signature, so by default we hand the original back untouched. | preserve |
| watermarkFont | No | Exactly Helvetica, Times-Roman, or Courier (case-sensitive); anything else becomes Helvetica. Read only when watermarkText is set. | Helvetica |
| watermarkText | No | Text watermark to stamp before flattening. Leave empty to skip. | |
| compressImages | No | Downsample images after flattening to shrink file size. | |
| compressPreset | No | How hard to squeeze the pictures: screen 72 DPI, ebook 150 DPI, printer and prepress 300 DPI. | ebook |
| outputFilename | No | Optional custom filename for the flattened output (without path). | |
| watermarkColor | No | Hex color, #rgb or #rrggbb. | #808080 |
| watermarkScale | No | Absolute scale factor; default 1.0. Non-numeric resets to 1.0. | |
| watermarkOpacity | No | 0 = invisible, 1 = solid; default 0.3. Non-numeric resets to 0.3. Read only when watermarkText is set. | |
| watermarkFontSize | No | Point size, integer; non-integer input silently resets to 48. Read only when watermarkText is set. | |
| watermarkPosition | No | Where the watermark sits on the page. Only used when there is watermark text. | c |
| watermarkRotation | No | Degrees, integer; default 45 = classic diagonal. Non-integer resets to 45. Read only when watermarkText is set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the description is not needed for the safety profile. It adds real value beyond that by disclosing the output format (a ZIP of flattened files) and per-file error handling, which matters because no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence front-loads the operation and batch limit, then states the return contract. The [category: pdf] tag is minor metadata and 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?
For a 20-parameter tool with no output schema, the description supplies the missing return-value context (ZIP + per-file errors) and the batch capacity. Since the schema already covers the parameter surface, this is nearly complete; only explicit sibling routing is absent.
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 20 parameters with defaults, enums, and constraints. The description only echoes the 20-file limit for files and adds no parameter detail beyond the schema, making the baseline 3 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 (flatten) and resource (PDFs) plus the batch scope (up to 20 in one request) and the return shape (ZIP). It does not explicitly name its single-file sibling pdf_flatten or explain when the batch form is preferred, so it is clear but not fully differentiated from that alternative.
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 batch framing and 'up to 20 PDFs in one request' imply the multi-file use case, but there is no explicit when-to-use-vs-pdf_flatten guidance and no stated exclusions or prerequisites. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_get_metadataARead-onlyInspect
Get PDF Metadata — Read the metadata fields of a PDF: Title, Author, Subject, Keywords, Producer, Creator. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is established. The description adds value by specifying which metadata fields are read, giving the agent a concrete view of what the operation exposes. It does not discuss edge cases like missing metadata fields, but that is a minor gap given the simple read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that states the verb, resource, and exact field list with no filler. The category tag is unobtrusive. Every element 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 one-parameter, read-only tool with annotations covering safety, the description provides sufficient context: what it operates on, what fields are returned, and that it is a non-mutating read. The only notable gap is the lack of explicit differentiation from a few sibling analysis tools, but the field list largely covers that.
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 'file' parameter is already described as 'Input file (PDF)' in the schema. The tool description adds no additional parameter detail beyond the PDF context, 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 clear verb ('Read') and a specific resource ('metadata fields of a PDF'), and enumerates the exact fields returned: Title, Author, Subject, Keywords, Producer, Creator. This clearly distinguishes it as a reader from sibling tools like pdf_set_metadata and pdf_remove_metadata.
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 name and description imply the tool should be used when an agent needs to read a PDF's metadata, but there is no explicit statement of when to choose this over related tools like analyze_metadata or pdf_file_info. No alternatives or exclusions are mentioned, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_grayscaleBInspect
Grayscale PDF — Convert a PDF to grayscale, removing all colour information. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF) | |
| mode | No | Grey keeps every shade of the original. Black and white forces each dot to pure black or pure white - smaller, and right for line art or a fax. | gray |
| pages | No | Which pages to convert, written as 3,7 or 1-5. Leave it blank to convert every page. | |
| strict | No | Refuse the job if any page could not be converted, rather than handing back a document with colour pages still in it. | |
| outputName | No | Optional name for the file you get back. Leave blank and we name it for you. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the agent knows this produces output without destroying the source. The description adds nothing beyond that, notably omitting that a new file is produced rather than the input modified, a point the strict and outputName parameters hint at but the prose never states.
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?
A single front-loaded sentence that states the operation and its effect, followed only by a compact category tag. Nothing is padded and nothing important is buried.
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 annotations covering safety, 100% schema coverage, and no output schema, the description supplies enough for correct invocation of a simple transform. The missing piece is only routing guidance relative to the crowded PDF sibling set.
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 mode enum and strict/pages/outputName descriptions are thorough, so the schema carries the full parameter burden. The description adds no syntax or format detail beyond what is already documented, making the baseline 3 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?
Specific verb (convert) plus resource (PDF) and outcome (grayscale, colour removed), so the operation is unmistakable. It does not, however, distinguish itself from adjacent PDF transforms such as pdf_to_pdfa or convert_document, leaving the agent to infer 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?
There is no when-to-use or when-not-to-use statement, no prerequisites, and no mention of alternatives among the many sibling PDF tools. The only locational cue is the '[category: pdf]' tag, which tells the agent where it sits but not when to reach for it over pdf_to_pdfa or photo_color_adjuster.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_html_to_pdfAInspect
HTML to PDF — Convert an HTML file (.html or .htm) to PDF using LibreOffice. File upload only — URLs are not fetched. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | HTML file (.html or .htm, max 25MB) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (non-read-only, non-destructive), and the description adds meaningful behavioral context: the conversion engine is LibreOffice, only file uploads are supported, and remote URLs are not fetched. This goes beyond the schema and 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 a single efficient sentence with the core purpose first, followed by the most important constraint (file upload only) and a category tag. Every element earns its place with no wasted words.
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 tool with no output schema, the description is complete: it states what is converted, the engine used, the input form, and the key exclusion. The schema covers the remaining file details, so an agent has enough information 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 coverage is 100% for the single file parameter, so the baseline is 3. The description adds value by clarifying that the parameter must be an uploaded file, not a URL, and reinforces the accepted extensions and size constraint 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 states a specific verb ('Convert') and resource ('HTML file .html or .htm to PDF'), and immediately distinguishes itself from URL-based conversion tools by declaring 'File upload only — URLs are not fetched.' This is precise and clearly separates it from siblings like convert_url_to_pdf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage boundaries: only local HTML file uploads are accepted, and URLs are explicitly excluded. It does not name the sibling alternative, but the URL exclusion effectively tells an agent when not to use this tool and implies the alternative for URL input.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_images_to_pdfBInspect
Images to PDF — Combine multiple images (JPG, PNG, TIFF) into a single PDF document. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Input files (JPG, JPEG, PNG, WEBP) | |
| margin | No | White border around each picture, in points - 72 points is one inch. A margin so large that nothing is left for the picture is ignored rather than refused. | |
| fitMode | No | How each picture sits on the page. | contain |
| pageSize | No | Fit makes every page exactly the size of its own picture, so a phone photo becomes a page yards across. Any fixed size gives one uniform, printable document. | fit |
| autoOrient | No | Turn photos the right way up using the camera's own rotation tag. On by default — switch it off only if you want the raw pixels exactly as stored. | |
| orientation | No | Leave blank to follow the page size you picked. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a non-read-only, non-destructive, closed-world operation, so safety is covered. The description adds nothing further: no page ordering, output naming, or handling of malformed images. With annotations carrying the safety profile, a 3 is the ceiling.
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 single sentence is front-loaded and mentions formats, but the trailing "[category: pdf]" tag is internal metadata noise that earns no place in agent-facing text. Size is fine; content is slightly padded.
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 6-parameter tool with full schema coverage and clear annotations, the description is minimally viable. It never explains output ordering, file naming, or error behavior on unreadable inputs, and gives no routing against convert_jpg_to_pdf.
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 (margin, fitMode, pageSize, autoOrient, orientation) already carries a rich description including defaults, ranges, and UI labels. The description adds no parameter meaning, 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?
States a specific verb (combine) and resource (multiple images into a single PDF) with supported formats named. It does not, however, distinguish itself from the close sibling convert_jpg_to_pdf, which handles the same JPG-to-PDF conversion for a single 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?
No when-to-use or when-not-to-use guidance is given, and the obvious alternative convert_jpg_to_pdf (and convert_document) is never mentioned. The agent must infer that multiple input files route here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_interleaveAInspect
Interleave PDFs — Interleave pages from two PDFs alternately (useful for double-sided scans). [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Input files (PDF (exactly 2 files)) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds the alternating-page behavior, but it does not disclose output details or side effects beyond the operation itself, which is acceptable given 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 short and front-loaded, with only minor redundancy: 'Interleave PDFs — Interleave pages' repeats the title. The added detail about alternating pages and double-sided scans 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 one-parameter tool with clear annotations, the description is sufficient to select and invoke it correctly. It explains the core operation and a motivating use case, though it does not explicitly describe return values or contrast with pdf_merge.
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%: the files parameter already states 'PDF (exactly 2 files).' The description's mention of 'two PDFs' reinforces but does not add meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise verb ('Interleave'), the specific resource ('pages from two PDFs'), and the exact behavior ('alternately'). It clearly distinguishes this tool from a plain pdf_merge, since alternating page order is an operationally different action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a clear use case: 'useful for double-sided scans.' However, it does not explicitly mention when not to use it or name an alternative such as pdf_merge for simple concatenation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_mergeAInspect
Merge PDFs — Combine multiple PDF files (at least 2) into a single document in the order provided. Supports per-file page selection, blank separator pages, bookmarks, and output metadata. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Input PDFs — at least 2 required. | |
| title | No | Optional output metadata Title. | |
| author | No | Optional output metadata Author. | |
| subject | No | Optional output metadata Subject. | |
| pageRanges | No | Leave blank to use every page. To take only part of a file, give its pages in the same order as the files themselves — 1-3 for the first, 2,5 for the second. | |
| addBookmarks | No | Add a bookmark at each document boundary. | |
| insertBlanks | No | Insert a blank page between documents. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the agent knows this is a local non-destructive write. The description adds the feature set (page selection, blank separators, bookmarks, metadata) but says nothing about the output artifact (name/location, whether inputs are preserved) or error behavior, which is still valuable context for a write tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and minimum requirement, followed by optional capabilities. No redundant or promotional filler; the category tag is minor overhead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, deliberate annotations, and no output schema, the description carries the essential context an agent needs to call the tool. The only shortfall is the absence of any statement about the produced file (format/location) or what happens on failure.
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 every parameter is already documented in the schema, including the per-file ordering semantics of pageRanges. The description only restates the feature names and adds no new syntax, formats, or constraints 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 gives a specific verb and resource ('Merge PDFs — Combine multiple PDF files') and adds scope details: minimum of 2 files and preservation of the provided order. The ordering clause implicitly separates it from the sibling pdf_interleave, which combines files by alternating pages rather than concatenating 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?
Usage is implied by the operation itself and the stated 'at least 2' prerequisite, but the description never says when to prefer this over pdf_interleave or pdf_split, nor any conditions or exclusions. It is adequate context without explicitly routing the agent among alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_ocrAInspect
OCR PDF (Make Searchable) — Make a scanned PDF searchable and selectable by adding an invisible OCR text layer over the page images — the pages look identical, but the text becomes findable, copyable, and indexable. Uses ocrmypdf (Tesseract + Ghostscript); already-searchable pages are skipped, so it is safe to run on mixed documents. This CREATES a text layer — to EXTRACT text that already exists, use pdf_to_text instead. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Scanned PDF to make searchable. | |
| lang | No | The language of the writing in the scan. The wrong language makes the searchable text gibberish. | eng |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations confirm it is not read-only but not destructive (it mutates the file by creating a layer). The description adds meaningful context beyond those hints: the pages look identical, already-searchable pages are skipped, and it is safe on mixed documents, plus the underlying ocrmypdf/Tesseract/Ghostscript stack. It stops short of describing output naming or processing-time expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and outcome are front-loaded before the implementation details and the sibling routing note. It is slightly long with multiple em-dash clauses and a redundant title prefix, but every sentence carries information an agent would use.
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 no output schema, the description still conveys what the result is (an identical-looking PDF with a searchable layer) and the safe-to-rerun behavior. Only minor gaps remain, such as output file naming and any size/time constraints, for a mutation tool with no output 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 both the binary input and the lang enum (with its warning that the wrong language yields gibberish) are already fully documented in the schema. The description adds no additional parameter-level detail, which is the expected baseline when 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?
States a specific verb and resource ('Make a scanned PDF searchable... by adding an invisible OCR text layer') and explains the observable outcome ('text becomes findable, copyable, and indexable'). It explicitly distinguishes itself from the sibling pdf_to_text, 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?
Gives explicit when-to-use (scanned PDFs needing OCR) and names the alternative with a clear routing rule: 'to EXTRACT text that already exists, use pdf_to_text instead'. It also notes the safe-rerun condition on mixed documents, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_page_countARead-onlyInspect
PDF Page Count — Get the total number of pages in a PDF. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=false, and the description only restates that the tool reads a PDF. It adds no additional behavioral context such as output format, file-size limits, or error behavior beyond the schema and 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 a single, front-loaded sentence that directly states the tool's purpose. The category tag is unobtrusive, and there is no filler or redundant wording.
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 one-parameter, read-only tool, the description is complete: it identifies the input (a PDF file), the operation (counting pages), and the outcome (total number of pages). No output schema exists, but the return value is clearly implied by the description.
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 the 'file' parameter described as 'Input file (PDF)'. The tool description adds no further parameter detail, so it meets the baseline but does not exceed 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 ('Get the total number of pages') and resource ('a PDF'), making the tool's function unambiguous. It is clearly distinct from sibling PDF tools because it names the exact output: a page count.
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 about when to use this tool versus alternatives like pdf_file_info or pdf_get_metadata, which might also provide page information. The description does not mention any exclusions or preferred use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_page_numbersCInspect
Add Page Numbers — Add page numbers to a PDF at a specified position (top/bottom, left/center/right). [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | PDF up to 25MB. Password-protected input is rejected 400 — run pdf_unlock first. | |
| color | No | Hex color #rrggbb. | #333333 |
| start | No | The number printed on the first numbered page. | |
| format | No | How each number is written on the page. | Page {page} |
| fontSize | No | Does NOT clamp — anything below 6 or above 72 silently RESETS to the default 10. | |
| position | No | Where the number sits on the page. | bc |
| skipLast | No | Skip numbering the last page. | |
| pageRange | No | Only number these pages, e.g. '2-5,8'. Empty = all pages. | |
| skipFirst | No | Skip numbering the first page. | |
| fontFamily | No | Outside the enum it silently becomes Helvetica. Latin-1 fonts — a 'format' template with CJK/Cyrillic/emoji is refused 400. | Helvetica |
| romanNumerals | No | Render numbers as roman numerals. | |
| outputFilename | No | Optional custom output filename. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the non-read-only, non-destructive, closed-world profile, and the description adds nothing on top of that. It does not say whether the input PDF is modified in place or a new file is emitted, nor does it surface the schema's notable behaviors (password-protected input rejected with 400, out-of-range fontSize silently resetting to 10, CJK/emoji templates refused with 400).
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?
A single front-loaded sentence stating the action and the configurable position; little waste. The trailing '[category: pdf]' tag is redundant with the tool name but costs almost nothing.
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 12-parameter PDF mutation tool with no output schema and no annotations explaining side effects, the description is thinner than ideal: it never states what the tool returns or where the numbered PDF goes. The rich schema compensates for most parameter-level gaps, but the output/behavioral contract is left to inference.
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 12 parameters in detail, including defaults, enums, and silent-clamping behavior. The description only restates the position axis (top/bottom, left/center/right), which the schema's enum and labels already convey, 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?
The description names a specific verb and resource ('Add page numbers to a PDF') and adds a placement qualifier, so the agent immediately knows what the tool produces. It does not, however, distinguish itself from the closely-related sibling pdf_header_footer, which can also stamp content onto every page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this over pdf_header_footer, pdf_watermark, or pdf_stamp-style alternatives, nor any prerequisites beyond what the schema happens to state. The agent must infer appropriate usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_pptx_to_pdfAInspect
PowerPoint to PDF — Convert a PowerPoint presentation (.pptx, .ppt) to PDF using LibreOffice. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PPTX, PPT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is not read-only and not destructive, and the description adds that LibreOffice is the conversion engine. However, it does not disclose output payload details, file size limits, or whether the original file remains unchanged; the absence of an output schema raises the bar for such disclosure.
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 function, followed by the input format and conversion engine. Every sentence contributes useful information 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 simple single-input conversion tool, the description is largely sufficient: it states input, output, and conversion method. It lacks an explicit description of the return payload, which the missing output schema would otherwise need, so it falls just short of 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%, and the description only repeats what the schema already states: the input file can be PPTX or PPT. No additional parameter-level meaning is provided 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 uses a specific verb ('Convert'), names the resource ('PowerPoint presentation (.pptx, .ppt)'), and states the output format (PDF). This clearly differentiates it from sibling conversion tools such as convert_word_to_pdf or pdf_excel_to_pdf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is clear: convert PowerPoint files to PDF. The description does not explicitly name alternatives or exclusions, but the tool name and description make the applicable scenario unambiguous in the context of many sibling conversion tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_protectBInspect
Password-Protect PDF — Add a password to a PDF to prevent unauthorised opening or printing. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input PDF (max 25MB) | |
| password | No | One password used for both opening the file and unlocking its permissions. Leave it blank only if you set an open password or a permissions password below instead - one of the three is needed. | |
| encryption | No | How strongly the file is locked. | aes256 |
| outputName | No | Optional custom output filename. | |
| permissions | No | What a reader is still allowed to do after they enter the password. Use any of print, copy, edit, annotate, separated by commas - or the single word all. A word we do not recognise is ignored, and if none of them are recognised the reader can do nothing at all, so leave this blank rather than guessing. | |
| userPassword | No | Optional separate open (user) password. | |
| ownerPassword | No | Optional separate permissions (owner) password. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the agent knows this mutates but is not destructive and is local. The description adds the intent of the protection but says nothing about whether a new file is produced, whether the original is overwritten, or whether an already-protected PDF fails — useful gaps against a 7-parameter mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses with the action front-loaded and no wasted sentences. The trailing '[category: pdf]' tag is metadata noise rather than description content, which keeps it just short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with zero annotations on output and no output schema, the agent would benefit from knowing whether a new protected file is returned or the input is modified in place. The very rich schema compensates for input-side gaps, but the output/overwrite question remains unanswered.
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 itself documents every parameter in detail, including the password/permissions/password triad and the enum labels. The description contributes no additional parameter meaning (no mention of password precedence, encryption choice, or permissions syntax), 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?
States a specific verb+resource ('Password-Protect PDF', 'Add a password to a PDF') and the effect ('prevent unauthorised opening or printing'). This clearly separates it from siblings like pdf_unlock or pdf_flatten, though it never names the inverse operation explicitly.
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 stated effect implies when the tool is appropriate (you want to lock a PDF), but there is no explicit when-to-use guidance, no mention of its inverse pdf_unlock, and no note on prerequisite state of the input file (e.g. don't pass an already-encrypted PDF).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_remove_metadataAInspect
Remove PDF Metadata — Strip all metadata (author, title, keywords, etc.) from a PDF for privacy. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, and the description consistently says 'Remove'/'Strip', so there is no contradiction. The description adds that all metadata is removed, but it does not disclose the output format, whether a new file is returned, or whether the original file is modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. The opening phrase partly repeats the tool name, and '[category: pdf]' is unnecessary, but the overall length is still appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool, the description is mostly sufficient for selection and invocation. However, with no output schema, it does not mention what the tool returns or how the result is delivered, which leaves a notable gap for an agent consuming 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 input schema already fully documents the 'file' parameter as an input PDF binary. The description adds no additional parameter-level information, but with complete schema coverage the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb and resource ('Remove PDF Metadata') and specifies exactly what is stripped: author, title, keywords, etc. This distinguishes it from related tools like pdf_get_metadata and pdf_set_metadata 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 phrase 'for privacy' implies the intended use case, giving some context for when to call this tool. However, it does not explicitly state when not to use it or mention alternative tools such as pdf_set_metadata for selectively modifying metadata.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_remove_watermarkBInspect
Remove PDF Watermark — Attempt to remove an existing watermark layer from a PDF. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF) | |
| passthrough | No | Some watermarks are painted into the page and cannot be lifted out. Left off, the step stops with an error when that happens. Switch it on and the file is passed through untouched so the rest of the workflow still runs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, so the agent already knows this mutates the file without destroying it. The description's honest 'Attempt to remove' hedge adds a little value by signaling the operation may fail, but it doesn't disclose what happens to the original, whether output replaces or copies the input, or auth/permission needs.
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?
A single front-loaded sentence with no filler; the '[category: pdf]' tag is redundant metadata rather than useful content, a minor blemish on an otherwise tight description.
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 two-parameter mutation tool with no output schema and annotations covering the safety profile, the description is adequate. It is thin on return behavior and prerequisites, but the schema's passthrough field carries the important failure-mode 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 description coverage is 100% and both parameters are fully documented in the schema, so the description has no parameter burden. It adds nothing beyond the schema, making the baseline 3 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 (remove) and resource (PDF watermark layer), which cleanly distinguishes it from the add-watermark siblings (pdf_watermark, media_add_watermark, photo_watermark). It does not explicitly name those alternatives, but the verb contrast makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, prerequisites, or routing against alternatives; the only operational context (failure on painted-in watermarks) lives in the schema's passthrough description, not the tool description. An agent gets no help from the description itself about when this is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_reorderAInspect
Reorder PDF Pages — Reorder the pages of a PDF by supplying the desired page sequence. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input PDF (max 25MB) | |
| order | Yes | Complete new page order — EVERY page exactly once, comma-separated, e.g. '3,1,2' for a 3-page PDF. Partial orders, duplicates, or missing pages are rejected with a 400. | |
| password | No | Optional password for encrypted PDFs. | |
| outputName | No | Optional custom output basename. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate that the tool is not read-only and not destructive, which helps set expectations. The description itself adds little beyond the reordering mechanism and does not state what is returned or whether the original file is preserved. The order-validation behavior is documented in the schema, not the description, so the description provides only modest behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and the core message is front-loaded. It loses a point for mild redundancy: the title 'Reorder PDF Pages' is effectively repeated in the description, and the '[category: pdf]' tag is boilerplate noise.
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 parameter schemas and annotations cover the input constraints and safety profile well. The main gap is the absence of an output schema and any description of the return value, so an agent does not know what the tool yields after reordering. For a transformation tool with no output schema, some mention of the result format is needed for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter already explained in the input schema. The tool description adds no additional parameter-level meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Reorder') and resource ('pages of a PDF'), and further clarifies the method ('by supplying the desired page sequence'). This distinguishes it from related siblings like pdf_reverse or pdf_extract_pages by implying an arbitrary custom order rather than a simple transformation.
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 the use case: when a PDF's pages need to be placed in a custom sequence. However, it provides no explicit guidance about when to prefer this tool over alternatives such as pdf_reverse, pdf_extract_pages, or pdf_split, and it does not mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_repairAInspect
Repair PDF — Attempt to repair a corrupted or malformed PDF using Ghostscript. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The word 'Attempt' appropriately signals that repair may not always succeed, which adds behavioral nuance beyond the annotations. However, the description does not clarify whether the tool returns a repaired PDF, overwrites the input, or produces a new file, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the purpose and method. Every component earns its place, and the category tag is unobtrusive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one clearly documented parameter and simple semantics, the description is mostly complete. The main gap is the lack of explicit output/return behavior, but the tool's purpose is straightforward enough that an agent can infer it returns the repaired PDF.
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 single 'file' parameter is already described as 'Input file (PDF)', so the description adds no additional parameter meaning. It correctly implies the file should be a PDF, but the schema already says this.
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 repairs a corrupted or malformed PDF using Ghostscript, which is a specific verb and resource. It is distinct from all sibling tools, none of which offer PDF repair.
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 the tool should be used when a PDF is corrupted or malformed, which is useful context. However, it does not explicitly say when not to use it or name alternatives, such as pdf_unlock for password-protected files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_reverseBInspect
Reverse Page Order — Reverse the page order of a PDF (last page becomes first). [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF) | |
| ranges | No | Reverse only these pages, written as 1-3,7-10. Leave it blank to reverse the whole document. | |
| outputName | No | Optional name for the file you get back. Leave blank and we name it for you. | |
| reverseTarget | No | Which pages the reversal applies to when you have named a range above. Ignored when no range is given. | in |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the agent knows this produces output without destroying the source. The description adds only the conceptual semantics of reversal; it says nothing about whether a new file is written, whether the original is preserved, or how the output is delivered — modest added value over 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?
A single efficient sentence with the operation front-loaded and a helpful clarification in parentheses. The repeated 'Reverse Page Order' title prefix plus trailing '[category: pdf]' tag are mild redundancy, but nothing is bloated.
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 4-parameter tool with full schema coverage and no output schema, the description is minimally sufficient — the agent can infer the action from the name and schema. It is missing the output/overwrite behavior and any mention of the range-scoped reversal mode that the schema exposes.
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 file, ranges, outputName and reverseTarget (including the enum labels). The description adds no parameter-level meaning beyond the operation's basic definition, 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?
States a specific verb and resource — 'Reverse the page order of a PDF' — and clarifies the semantics with '(last page becomes first)', which distinguishes it from mere reordering. It does not, however, explicitly distinguish itself from the sibling pdf_reorder, which an agent could reasonably confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, when-not-to-use, or alternative-tool guidance. Given siblings like pdf_reorder and pdf_interleave, the description should say when reversal is the right operation versus reordering, but it offers nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_rotateBInspect
Rotate PDF — Rotate pages of a PDF by 90, 180, or 270 degrees — all pages or specific page numbers. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input PDF (max 25MB) | |
| pages | No | Which pages to turn, e.g. '1-3,5'. Leave blank to turn every page. | |
| rotation | No | How far to turn each page, clockwise. | |
| outputName | No | Optional custom output filename. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the agent knows this is a local, non-destructive write operation (creates a new file). The description adds context that rotation can be applied to all or specific pages and lists allowed degrees, but does not disclose whether the output is a new file or if the original is preserved, nor rate limits or auth needs. With annotations covering the safety profile, this is a moderate addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the purpose and then lists key options (degrees, page scope). It is efficient with no unnecessary words, though it includes a '[category: pdf]' tag that is somewhat redundant given the tool name and siblings.
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 a straightforward mutation with 4 parameters, full schema coverage, and annotations covering safety. The description is adequate but missing details like output file behavior (whether original is modified) and any prerequisites. It does not need to explain return values since no output schema exists, but could be more complete for a write 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 all parameter semantics are already fully documented in the schema. The description adds no additional parameter meaning beyond what is in the schema; it merely restates rotation options and page selection. Baseline 3 is appropriate when 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 specific verb+resource (rotate PDF pages) and specifies the allowed rotation amounts (90, 180, 270) and scope (all or specific pages). It clearly describes what the tool does, though it doesn't explicitly differentiate from siblings like pdf_flatten or pdf_reverse.
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 usage by mentioning page selection and rotation increments, but offers no explicit guidance on when to use this tool versus alternatives (e.g., pdf_reverse for reversing page order, or pdf_rotate vs photo_flip_rotate). It's adequate but lacks when-not-to-use or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_rtf_to_pdfAInspect
RTF to PDF — Convert an RTF document to PDF using LibreOffice. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (RTF) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, but the description adds little behavioral context beyond mentioning LibreOffice. It does not explain what happens to the input file, whether the conversion occurs asynchronously, or what side effects to expect, so the description carries minimal weight beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the key purpose, includes the output format, and even names the underlying tool. 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?
Given the tool's simplicity—one binary parameter and a direct format conversion—the description plus schema provides sufficient information for an agent to select and invoke it. The absence of an output schema is acceptable since the result (PDF) is explicit in the name and description.
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 documents the only parameter ('file') with full coverage and a description 'Input file (RTF).' The tool description adds no new semantic detail beyond restating that the input is an RTF document, so it meets the baseline but does not improve on 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 precise verb and resource: 'Convert an RTF document to PDF using LibreOffice.' This clearly distinguishes the tool from sibling converters like pdf_txt_to_pdf or pdf_html_to_pdf, which handle different input formats.
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 the tool should be used when the input is an RTF document, but it does not explicitly mention alternative tools or conditions when not to use it. The usage context is inferable from the title and input schema, but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_set_metadataAInspect
Set PDF Metadata — Write or update metadata fields (Title, Author, Subject, Keywords) in a PDF. Fields are soft-verified after writing (mismatches are logged, not failed). At least ONE of title/author/subject/keywords must be provided or the request is rejected. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF to edit. Password-protected input is rejected 400 — run pdf_unlock first. | |
| title | No | At least one of title/author/subject/keywords is required. | |
| author | No | Written verbatim to Author. Empty = left unchanged — this tool cannot blank a field (use pdf_remove_metadata to clear). | |
| subject | No | Written verbatim to Subject. Empty = left unchanged — clearing a field is not possible here (use pdf_remove_metadata). | |
| keywords | No | Free-text Keywords string written verbatim (commas are convention, not parsed). Empty = left unchanged, never cleared. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate a write operation that is not destructive. The description adds meaningful behavior: fields are soft-verified after writing, mismatches are logged rather than failed, and the request is rejected if no metadata field is provided. This goes beyond the annotations and helps an agent predict failure modes.
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 verification behavior, then the required-field constraint. Every sentence contributes useful information, and the [category: pdf] tag is unobtrusive.
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 full definition—description plus schema—covers the core invocation needs well: required file, field semantics, inability to blank fields, and password-protected input handling. There is no output schema, so return-value details are not fully specified, but the soft-verification behavior gives enough expectation for normal use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description adds the at-least-one constraint and lists the writable fields, but it does not provide significant meaning beyond what the schema already states about empty values, clearing behavior, or password-protected input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific action and resource: writing or updating metadata fields (Title, Author, Subject, Keywords) in a PDF. It is distinguishable from siblings like pdf_get_metadata and pdf_remove_metadata, and the explicit field list removes ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool through its name and 'Write or update metadata' phrasing, but it does not explicitly name alternatives or exclusions in the main description. The schema does mention using pdf_remove_metadata for clearing fields, but the description itself relies on inference rather than direct routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_splitCInspect
Split PDF — Split a PDF by page range, into individual pages, by fixed chunk size, or into even/odd pages. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input PDF (max 25MB) | |
| mode | No | Split mode. 'range' extracts the pages listed in 'pages'; 'all' splits every page into its own file; 'chunks' splits every chunkSize pages; 'even'/'odd' keep only even/odd pages. | range |
| pages | No | Which pages to keep, e.g. '1-3,5,7-9'. | |
| chunkSize | No | How many pages go into each output file. | |
| outputName | No | Optional base name for the output file(s). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description's mode enumeration merely restates the schema enum and adds nothing about output files created, naming behavior, or whether the input is left untouched, so it contributes little 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?
A single sentence, front-loaded with the tool name and core purpose, with no wasted filler. The trailing category tag is the only slight overhead.
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 five-parameter tool with full schema coverage and no output schema, the description covers the essential action but omits how modes map to sibling tools and what outputs are produced. 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 description coverage is 100%, so the schema fully documents file, mode, pages, chunkSize, and outputName, including the mode enum and x-show-when conditions. The description adds no parameter detail beyond the schema, making 3 the appropriate 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 (Split) and resource (PDF) and enumerates the four operation modes (page range, individual pages, chunk size, even/odd). Clear and specific, though it does not differentiate itself from close siblings like pdf_extract_pages, which also extracts pages by range.
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 on when to use split versus alternatives such as pdf_extract_pages, pdf_delete_pages, pdf_merge, or pdf_interleave. No prerequisites, exclusions, or context about choosing one mode over another are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_thumbnailsBInspect
PDF Thumbnails — Generate thumbnail preview images for each page of a PDF. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF to preview. A 1-page input returns a bare JPEG instead of a ZIP — plan for both shapes. Password-protected = 400. | |
| quality | No | Thumbnail size: small=72dpi, medium=150dpi, large=300dpi. There is no 'width' parameter. | small |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose behavioral details such as output packaging, whether files are stored or returned directly, or failure modes. Key behavior like 'password-protected = 400' and '1-page input returns a bare JPEG' is present in the input schema but not in the description itself. The annotations are neutral false hints, so they do not meaningfully reduce the need for behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The meaningful description is one focused sentence with the action front-loaded. The category tag is lightweight and not distracting. There is no redundant elaboration.
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 two-parameter tool, the schema provides the necessary file input, quality options, and important output-shape warnings. The main gap is the absence of sibling-selection guidance, but that is already penalized under usage guidelines. Overall, an agent has enough information to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters, including the quality enum values, DPI mapping, default, and the note that there is no 'width' parameter. The description adds no parameter semantics, but the high schema coverage supports the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Generate thumbnail preview images for each page of a PDF.' This clearly states what the tool does and its scope, and it differentiates the tool from sibling PDF operations like pdf_to_images or pdf_page_count.
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 about when to use this tool versus related sibling tools such as pdf_to_images, pdf_extract_pages, or pdf_page_count. The description only states what the tool does and leaves tool selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_to_excelAInspect
PDF to Excel — Extract tables from PDFs into XLSX / CSV / TSV / JSON. Uses tabula-java (lattice + stream modes) with LibreOffice as fallback. Supports page ranges, table selection, sheet strategy (per-table/per-page/single), OCR for scanned PDFs (Starter+), JSON output (Starter+), and a non-destructive inspect endpoint that reports row/col counts plus ragged/sparse confidence flags. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input PDF | |
| pages | No | Optional page range e.g. '1-5,10'. Empty = all pages. | |
| engine | No | Table detection engine. auto = tabula lattice → stream → libreoffice fallback. | auto |
| format | No | xlsx/csv/tsv are file downloads; json returns structured data. | xlsx |
| ocrLang | No | The language of the writing in the scan. | eng |
| ocrFirst | No | Run ocrmypdf before extraction (beta — scanned PDFs). | |
| sheetMode | No | How the tables are laid out across the workbook's sheets. | per-table |
| tableIndexes | No | Comma-separated 0-based indexes to keep (e.g. '0,2,3'). Empty = all tables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply terse hints (readOnlyHint=false, destructiveHint=false), so the description carries real weight and delivers it: the tabula lattice→stream→libreoffice fallback chain, the beta status of ocrmypdf pre-processing, Starter+ tier gating for OCR/JSON, and the non-destructive inspect behavior. It stops short of describing output contents or failure modes, but adds substantive 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?
Front-loaded with the core action and output formats, then a dense but ordered capability list. Slightly over-padded by the inspect-endpoint sentence, which describes a sibling tool rather than this one, but overall efficient.
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 conversion tool with no output schema and full schema coverage, the description supplies the missing operational context: engine behavior, OCR/scanned-PDF handling, tier limits, and format semantics. An agent has enough 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% with rich enum metadata, so the schema already documents pages, engine, format, ocrLang, sheetMode, and tableIndexes. The description's phrases (page ranges, table selection, sheet strategy) map back onto those fields without adding syntax or edge-case detail, 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?
States a specific verb+resource ('Extract tables from PDFs') and enumerates concrete output formats (XLSX/CSV/TSV/JSON), which distinguishes it from pdf_to_text, pdf_to_word, and web_extract_table without opening the schema. Minor ambiguity comes from mentioning 'a non-destructive inspect endpoint' that actually belongs to a separate sibling (pdf_to_excel_inspect), but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It describes capabilities (engine fallback, OCR for scanned PDFs, sheet strategies) and implies when each is relevant, but never explicitly routes the agent between this tool and alternatives like pdf_to_excel_batch or pdf_to_excel_inspect. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_to_excel_batchAInspect
PDF to Excel (Batch) — Apply the same PDF-to-Excel configuration to up to 20 PDFs. Returns a ZIP with per-file subfolders. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Up to 20 input PDFs | |
| pages | No | Optional page range e.g. '1-5,10'. Empty = all pages. | |
| engine | No | Table detection engine. auto = tabula lattice → stream → libreoffice fallback. | auto |
| format | No | xlsx/csv/tsv are file downloads; json returns structured data. | xlsx |
| ocrLang | No | The language of the writing in the scan. | eng |
| ocrFirst | No | Run ocrmypdf before extraction (beta — scanned PDFs). | |
| sheetMode | No | How the tables are laid out across the workbook's sheets. | per-table |
| tableIndexes | No | Comma-separated 0-based indexes to keep (e.g. '0,2,3'). Empty = all tables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description's added value is the ZIP-with-subfolders return shape and the file cap — genuinely useful. However, for a batch operation it omits critical behavior: what happens if one PDF fails (whole batch aborts vs per-file error), and whether results are returned as a downloadable artifact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that leads with the operation, then the cap, then the output shape — no filler, nothing that fails to earn 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 no output schema, the description correctly covers the return value (ZIP with per-file subfolders), which is the main thing an agent could not infer. What is missing is failure semantics for partial batches, the one behavior that matters most for a multi-file 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% with enums for engine, format, ocrLang and sheetMode, so the schema already carries the parameter semantics. The description adds no syntax or interaction detail beyond it, making the 3 baseline 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+resource ('Apply the same PDF-to-Excel configuration'), names the batch scope, and quantifies it ('up to 20 PDFs'), so it is distinguishable from pdf_to_excel at a glance. It does not, however, explicitly name the single-file or inspect siblings as the alternative.
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 word 'Batch' and the 20-file cap imply when to reach for this over pdf_to_excel, but the description never states the condition explicitly or points at the sibling. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_to_excel_inspectARead-onlyInspect
PDF to Excel Inspector — Non-destructive scan of a PDF's tables before converting: per-table row/column counts, confidence flags, warnings. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF to scan (multipart field 'file', 25MB cap). Runs real extraction but returns JSON metadata only — nothing is converted. | |
| pages | No | Optional page range | |
| engine | No | Table detection engine; invalid values fall back to auto. | auto |
| ocrLang | No | Accepted but ignored by the inspector - it never runs OCR. Run PDF OCR first, then inspect. | eng |
| ocrFirst | No | Accepted but ignored by the inspector — run pdf_ocr first, then inspect. | |
| tableIndexes | No | Accepted but ignored by the inspector - its whole job is to report every table so you can choose indexes on PDF to Excel afterwards. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is partly covered. The description adds useful behavioral context by stating the scan is non-destructive and returns only table diagnostics rather than converting anything, which reassures the agent about side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no wasted words: operation, non-destructive nature, and returned diagnostic signals are all stated efficiently. The category tag is minor and does not detract from 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?
No output schema exists, but the description names the key return signals — per-table row/column counts, confidence flags, and warnings. Combined with full schema coverage and annotations, this is largely sufficient for correct invocation, though the handoff to pdf_ocr or pdf_to_excel could be more explicit.
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 file, pages, engine, and the intentionally ignored parameters. The description adds no parameter syntax, format, or interaction guidance beyond what the schema provides, making the baseline score 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 — non-destructive scan of a PDF's tables — and names the concrete output (row/column counts, confidence flags, warnings). It clearly distinguishes the tool from the sibling pdf_to_excel, which performs the actual conversion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'before converting' provides implied usage context, but the description does not explicitly name the alternative (pdf_to_excel) or state when not to use this inspector. The agent must infer the routing from the schema and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_to_imagesBInspect
PDF to Images — Rasterize PDF pages to PNG / JPG / WEBP / TIFF (and AVIF, Starter+). Supports page ranges, quality/DPI controls, grayscale/mono color modes, transparent output, custom background color, max-dimension cap, area crop, text watermark, custom filename patterns, contact-sheet/filmstrip tile mode (Starter+), preset profiles (web/print/email/archive), and JSON / MinIO URL response modes. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| dpi | No | Out-of-range values clamp silently to 30-600 — never an error. Non-numeric is ignored and stays 150. | |
| crop | No | Area crop in PDF points: 'x,y,w,h' | |
| file | Yes | Input PDF | |
| mode | No | sheet/filmstrip require Starter+ | pages |
| pages | No | Page range e.g. 1-3,5,7-9. Empty = all. | |
| format | No | Aliases jpeg/tif accepted; unknown values silently stay png. avif is Starter+ — Free tier gets a 402. | png |
| preset | No | A ready-made bundle of settings. Anything you set yourself wins over the preset. | |
| maxWidth | No | Shrink-only width cap in pixels, aspect preserved. Leave blank for no cap — an explicit 0 clamps UP to 100 and shrinks every page. | |
| response | No | urls mode requires Starter+ and authentication | zip |
| sheetGap | No | Spacing between the tiles, in pixels. | |
| colorMode | No | mono+jpg has no 1-bit JPEG — it silently renders grayscale and sets X-Color-Mode-Adjusted. Unknown values fall back to rgb. | rgb |
| maxHeight | No | Shrink-only height cap in pixels, aspect preserved. Omit for no cap — an explicit 0 clamps UP to 100 and shrinks every page. | |
| avifQuality | No | Higher keeps more detail and makes a bigger file. | |
| jpegQuality | No | Higher keeps more detail and makes a bigger file. 50 is the lowest this tool will go. | |
| namePattern | No | Filename template with {basename}/{page}/{page:03d}/{dpi}/{format}/{date} tokens | |
| transparent | No | Leave the paper see-through instead of white. | |
| webpQuality | No | Higher keeps more detail and makes a bigger file. | |
| sheetColumns | No | How many pages sit side by side on the contact sheet. | |
| watermarkFont | No | Outside the enum it silently becomes Helvetica. Does nothing unless watermarkText is set. | Helvetica |
| watermarkText | No | Optional text watermark stamped on each image | |
| watermarkTile | No | Not used by this tool - a rasterised page is stamped once, where Watermark position says. | |
| watermarkColor | No | Hex color, #rgb or #rrggbb. | #808080 |
| watermarkScale | No | Not used by this tool — size the stamp with Watermark font size. | |
| backgroundColor | No | What fills the see-through parts of the page in a format that cannot keep them. | #FFFFFF |
| sheetBackground | No | Colour of the canvas behind the tiles, as #rgb or #rrggbb. Anything we cannot read stays white. | #FFFFFF |
| tiffCompression | No | How the TIFF is packed down. | lzw |
| watermarkOpacity | No | 0 invisible to 1 solid; out-of-range clamps. NOT a percent — 50 renders fully opaque. Needs watermarkText. | |
| watermarkFontSize | No | Points against the bitmap's 72dpi density — at dpi=300 text is ~4x smaller on the page than in a PDF. Needs watermarkText. | |
| watermarkPosition | No | Where the stamp sits on each image. | c |
| watermarkRotation | No | Integer degrees only — a decimal like '45.5' silently resets to 45. Needs watermarkText. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=false, destructiveHint=false and openWorldHint=false, so safety is partly covered. The description adds genuinely useful behavioral context beyond that (AVIF and contact-sheet/filmstrip modes are Starter+, JSON/MinIO URL response modes exist), but it omits output/return behavior for a tool with no output 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?
Purpose is correctly front-loaded, but the remainder is a single run-on sentence packing ~15 features into a comma list that partly duplicates the schema's detail. It is informative yet dense and not especially scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 30-parameter tool with only one required field, the description surveys all major capability groups (formats, ranges, quality, tiling, presets, response modes) so an agent can grasp the surface. It does not describe the return payload, but that gap is minor given how much the schema enumeration covers.
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 names feature areas (DPI, crop, watermark, presets) that map onto parameters but adds no syntax or format detail beyond what the schema already documents thoroughly.
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 ('Rasterize PDF pages') and lists concrete output formats, which is far more than a restatement of the name. It is clear what the tool produces, though it does not explicitly distinguish itself from close siblings like pdf_thumbnails or pdf_to_images_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 text is entirely a capability inventory ('Supports page ranges, quality/DPI controls...') with no when-to-use, when-not-to-use, or alternative-tool guidance. It never tells the agent when this beats pdf_thumbnails or the batch variant, and preset-vs-manual selection 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.
pdf_to_images_batchBInspect
PDF to Images (Batch) — Apply the same rasterization configuration to up to 20 PDFs. Returns a ZIP with a subfolder per input file. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| dpi | No | Out-of-range values clamp silently to 30-600 — never an error. Non-numeric is ignored and stays 150. | |
| crop | No | Area crop in PDF points: 'x,y,w,h' | |
| mode | No | sheet/filmstrip require Starter+ | pages |
| files | Yes | Up to 20 input PDFs | |
| pages | No | Page range e.g. 1-3,5,7-9. Empty = all. | |
| format | No | Aliases jpeg/tif accepted; unknown values silently stay png. avif is Starter+ — Free tier gets a 402. | png |
| preset | No | A ready-made bundle of settings. Anything you set yourself wins over the preset. | |
| maxWidth | No | Shrink-only width cap in pixels, aspect preserved. Leave blank for no cap — an explicit 0 clamps UP to 100 and shrinks every page. | |
| sheetGap | No | Spacing between the tiles, in pixels. | |
| colorMode | No | mono+jpg has no 1-bit JPEG — it silently renders grayscale and sets X-Color-Mode-Adjusted. Unknown values fall back to rgb. | rgb |
| maxHeight | No | Shrink-only height cap in pixels, aspect preserved. Omit for no cap — an explicit 0 clamps UP to 100 and shrinks every page. | |
| avifQuality | No | Higher keeps more detail and makes a bigger file. | |
| jpegQuality | No | Higher keeps more detail and makes a bigger file. 50 is the lowest this tool will go. | |
| namePattern | No | Filename template with {basename}/{page}/{page:03d}/{dpi}/{format}/{date} tokens | |
| transparent | No | Leave the paper see-through instead of white. | |
| webpQuality | No | Higher keeps more detail and makes a bigger file. | |
| sheetColumns | No | How many pages sit side by side on the contact sheet. | |
| watermarkFont | No | Outside the enum it silently becomes Helvetica. Does nothing unless watermarkText is set. | Helvetica |
| watermarkText | No | Optional text watermark stamped on each image | |
| watermarkTile | No | Not used by this tool - a rasterised page is stamped once, where Watermark position says. | |
| watermarkColor | No | Hex color, #rgb or #rrggbb. | #808080 |
| watermarkScale | No | Not used by this tool — size the stamp with Watermark font size. | |
| backgroundColor | No | What fills the see-through parts of the page in a format that cannot keep them. | #FFFFFF |
| sheetBackground | No | Colour of the canvas behind the tiles, as #rgb or #rrggbb. Anything we cannot read stays white. | #FFFFFF |
| tiffCompression | No | How the TIFF is packed down. | lzw |
| watermarkOpacity | No | 0 invisible to 1 solid; out-of-range clamps. NOT a percent — 50 renders fully opaque. Needs watermarkText. | |
| watermarkFontSize | No | Points against the bitmap's 72dpi density — at dpi=300 text is ~4x smaller on the page than in a PDF. Needs watermarkText. | |
| watermarkPosition | No | Where the stamp sits on each image. | c |
| watermarkRotation | No | Integer degrees only — a decimal like '45.5' silently resets to 45. Needs watermarkText. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, giving the operation profile. The description adds genuinely useful behavior beyond that — the 20-file cap and the ZIP-with-subfolder-per-file return shape — which matters since there is no output schema. It still omits failure semantics for the batch (e.g. what happens if one of 20 PDFs errors).
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 tightly worded sentences, both front-loaded with the essential facts (batch scope, output artifact), plus a harmless category tag. Nothing is wasted, though the extreme brevity against a 29-parameter tool borders on under-specified.
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 29-parameter batch tool with no output schema, the description covers the return shape but not much else. Batch-level concerns such as partial failure, ordering, or per-file limits are unaddressed, leaving gaps the rich schema cannot fill.
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 29 parameters in detail, including defaults, clamping behavior and tier gates. The description adds only the file-count limit, so the baseline 3 for a fully documented schema 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 and resource ('PDF to Images (Batch)'), states the batch scope ('same rasterization configuration to up to 20 PDFs'), and distinguishes itself from the single-file 'pdf_to_images' sibling through the batch semantics. It is clear, though it never explicitly names the single-file alternative for comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no mention of the non-batch 'pdf_to_images' alternative, and no stated prerequisites. The 'same configuration across up to 20 PDFs' phrasing implies a use case but leaves the choice between batch and single-file entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_to_pdfaAInspect
PDF to PDF/A (Archival) — Convert a PDF to PDF/A-2b, the ISO archival profile required for long-term storage and by many legal, government and enterprise records systems. Embeds fonts and colour information so the document renders identically decades from now. Uses Ghostscript. If a PDF uses features that cannot be embedded (e.g. unlicensed fonts) the conversion fails honestly rather than returning a non-conformant file. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide basic safety hints, so the description adds value by explaining that the tool embeds fonts and color information and fails honestly rather than returning a non-conformant PDF/A. This is a useful behavioral guarantee beyond the structured fields and does not contradict 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 sentences and front-loaded with the purpose and target standard. The Ghostscript note and honest-failure behavior add useful context, though the title-like first phrase is slightly redundant with the description opener.
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 one-parameter conversion tool with no output schema, the description covers purpose, target standard, use case, implementation, and failure behavior. It does not detail how the output file is returned, but that is a minor gap given the simplicity of the operation and the absence of an output 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 schema description coverage is 100% for the single file parameter, so the schema already documents it adequately. The description does not add parameter-level details beyond the schema, 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: "Convert a PDF to PDF/A-2b," the ISO archival profile. It clearly distinguishes this from sibling PDF tools by naming the exact target standard, the archival context, and the Ghostscript implementation.
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 when-to-use context: "required for long-term storage and by many legal, government and enterprise records systems." It does not explicitly name alternative tools or exclusions, stopping short of full routing guidance, but the use case is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_to_textAInspect
PDF to Text — COPY THE WORDS OUT of a PDF: get the wording, sentences and paragraphs as plain text you can paste into an email, a document or a spreadsheet. Extract the text that is already inside a PDF and return it as a plain .txt file. Reads the PDF's existing text layer using pdftotext with a Ghostscript txtwrite fallback — it does NOT run OCR. A scanned or photographed document has no text layer, so this tool refuses it with a 422 naming pdf_ocr rather than returning an empty file; run pdf_ocr first to add a searchable text layer, then extract. Mixed documents still succeed: pages that yielded no text are reported in the X-Conversion-Notes response header instead of being dropped silently. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral details beyond the annotations: it uses pdftotext with a Ghostscript txtwrite fallback, refuses scanned documents instead of returning an empty file, and reports empty pages via the X-Conversion-Notes response header. This gives the agent a clear mental model of success and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and then provides implementation and error-handling details. There is minor redundancy between the first and second sentences, but each additional sentence contributes useful behavioral context, so it remains appropriately sized.
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 one-parameter conversion tool with no output schema, the description is complete: it explains what the tool returns, how it works, when it will fail, what error to expect, and what the caller should do in that failure case. Nothing needed for correct selection or 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?
The schema already documents the single 'file' parameter as an input PDF with 100% coverage. The description adds meaningful context by explaining that the PDF must contain an existing text layer and that scanned files will be rejected, which is valuable semantic information beyond the raw 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 clear verb-resource pair: extract the text already present in a PDF and return it as a plain .txt file. It explicitly says it uses the existing text layer and does NOT run OCR, which distinguishes it from OCR-based tools like pdf_ocr and photo_to_text.
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 and names an alternative: if the PDF is scanned or photographed and has no text layer, the tool returns a 422 with a reference to pdf_ocr, and the agent is told to run pdf_ocr first. It also covers mixed documents, saying pages with no text are reported rather than silently dropped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_to_wordAInspect
PDF to Word — Convert a PDF to an editable Word document (.docx) using LibreOffice. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (PDF) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and not destructive, and the description adds that conversion is performed via LibreOffice and produces a .docx. It does not describe side effects, file handling, or limitations, but for a simple conversion tool the annotation coverage is sufficient to establish the basic safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that states purpose, output, and implementation detail, with the action front-loaded. The category tag is minimal and does not add clutter.
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 one-parameter conversion tool, the description in combination with the schema is nearly complete. It specifies the input, output, and tool behavior. It does not describe the response format, but no output schema exists and the converted .docx result is strongly implied by the description.
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 has 100% coverage for the single 'file' parameter with its type and description ('Input file (PDF)'). The tool description adds no additional parameter-level details such as size limits or format constraints, 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 the operation (convert), the input resource (PDF), and the output format (editable Word document .docx). It also names the underlying implementation (LibreOffice), which distinguishes it from generic conversion tools and from sibling PDF extraction tools like pdf_to_text or pdf_to_images.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the use case: when you need an editable Word document from a PDF. It does not explicitly list alternatives or exclusions, but the purpose is unambiguous and the format detail (.docx) helps prevent confusion with pdf_to_text or pdf_to_images.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_txt_to_pdfAInspect
TXT to PDF — Convert a plain text file to a formatted PDF document. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (TXT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and destructiveHint=false, and the description does not contradict them. The description adds the core behavioral fact that it converts TXT to a formatted PDF, but it does not disclose details like output delivery, formatting assumptions, or possible limitations such as file size or encoding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with an optional category tag. It conveys the essential information in very few words and contains no filler or redundant elaboration.
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 low complexity of the tool (one parameter, no nested objects, no output schema), the description provides enough information to understand the operation and its result. It could be slightly more complete by stating what the tool returns, but 'formatted PDF document' strongly implies the output format.
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 'file' parameter is already documented as 'Input file (TXT)'. The description's phrase 'plain text file' adds minimal nuance beyond the schema but does not materially expand 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 uses a specific verb ('Convert') with a clear resource mapping: plain text file to a formatted PDF document. This clearly distinguishes it from sibling conversion tools like pdf_html_to_pdf or pdf_excel_to_pdf based on input type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over alternatives. With many sibling conversion tools, such as convert_document or the other pdf_*_to_pdf tools, the description could explicitly state that this is intended specifically for TXT input and not for other document formats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_unlockAInspect
Unlock PDF — Remove password protection from a PDF (you must supply the current password). [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input PDF (max 25MB) | |
| password | Yes | The PDF's current password. | |
| outputName | No | Optional custom output filename. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and not destructive; the description adds that password protection is removed and that the current password is required. However, it does not disclose whether a new unlocked file is returned or whether the original file is modified, which is useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. The category tag is useful for grouping, and the critical prerequisite is integrated without adding length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-purpose tool, the description plus fully documented schema covers the essential invocation requirements. The main missing piece is the output behavior, since there is no output schema, but the tool name and optional outputName parameter reasonably imply a resulting unlocked file.
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 only reinforces that 'password' is the current password, which adds little beyond the schema. It provides no additional meaning for 'file' or 'outputName'.
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, 'Unlock PDF' / 'Remove password protection from a PDF', making the tool's function immediately clear. It is also distinct from sibling tools like pdf_protect, which performs the opposite operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states the key prerequisite: the current password must be supplied. It does not explicitly name alternative tools or when-not-to-use scenarios, but the password requirement strongly implies this is for unlocking protected files, not password recovery or adding protection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_watermarkBInspect
Add PDF Watermark — STAMP or watermark a PDF: overlay text or an image across every page (or selected pages) — the tool for stamping DRAFT, CONFIDENTIAL, PAID, APPROVED, COPY or any wording onto a document, marking pages, branding them, or adding a logo overlay. Watermark type is chosen by the 'mode' field. [category: pdf]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input PDF (filename must end in .pdf) | |
| mode | No | Watermark type. 'image' requires the imageFile field — presence of an image alone does NOT switch modes. | text |
| text | No | The wording stamped across each page. | CONFIDENTIAL |
| tile | No | Repeat the watermark in a tiled pattern. | |
| color | No | Colour of the lettering. Hex, #rgb or #rrggbb. | #808080 |
| pages | No | Comma-separated page numbers e.g. '1,3,5'. Empty = all pages. | |
| scale | No | Size multiplier. With tile=true only values in (0,1] count (fraction of page) — anything else silently tiles at 0.3. | |
| opacity | No | 0-1 float; non-numeric resets to 0.3, but out-of-range values reach the PDF engine and 500. NOT a percent. | |
| fontSize | No | Height of the lettering in points. | |
| position | No | Long names like 'bottom-right' are NOT recognized and silently fall back to c. ml/mr work (folded to engine anchors l/r). | c |
| rotation | No | Whole degrees only — a decimal string like '45.5' silently resets to 45. | |
| imageFile | No | Watermark image — PNG, JPG, or SVG. REQUIRED when mode=image; ignored otherwise. | |
| fontFamily | No | Lettering style. Latin alphabet only — for other scripts stamp an image instead. | Helvetica |
| outputFilename | No | Optional custom output filename. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, non-open-world operation, so the safety profile is covered. The description adds that it overlays across every or selected pages, but says nothing about whether the source file is modified vs a new file produced, nor about the silent-fallback behaviors that the schema itself documents. Modest additional context over 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?
Front-loads the verb and resource well, but the single sentence is padded with a synonym shout ('STAMP'), a long enumerated word list ('DRAFT, CONFIDENTIAL, PAID, APPROVED, COPY or any wording'), and repetitive framing ('the tool for...'). Several clauses restate the same idea and could be trimmed.
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 14-parameter tool with no output schema, the definition correctly defers parameter detail to a fully-covered schema and safety to annotations, and its purpose/mode framing is enough to invoke it. It is only marginally incomplete in not stating that output goes to a new file/filename, which the outputFilename parameter implies.
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 every parameter including edge cases (opacity out-of-range 500s, scale tiling quirks, position fallback). The description only adds that the watermark type is chosen by 'mode', which the schema's enum description already covers. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add PDF Watermark — STAMP or watermark a PDF') and spells out the two modes (text overlay or image overlay) plus target pages. It never differentiates from adjacent siblings such as pdf_remove_watermark, photo_watermark, or media_add_watermark, so an agent gets a clear purpose but no routing signal.
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 list of use cases ('stamping DRAFT, CONFIDENTIAL... marking pages, branding them, or adding a logo overlay') implies when the tool applies, but there is no explicit when-to-use versus when-not guidance and no named alternative for removing or non-PDF watermarking. Usage is inferred, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_bg_removerAInspect
Background Remover — Cut out the subject and remove the background from an existing photo, producing a transparent PNG (or a solid fill color). Edits a user-supplied image; does not generate new imagery. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | JPG, PNG, WebP, BMP (max 20MB) | |
| model | No | Segmentation model; u2net_human_seg is tuned for people. Invalid values fall back to u2net. | u2net |
| bg_color | No | Optional solid background fill color. Default: transparent. | |
| alpha_matting | No | Re-solves hair, fur and glass edges as a soft fade instead of a hard cut. Slower and uses more memory. | |
| alpha_matting_erode_size | No | Width of the band around the subject that gets re-solved. Only used when edge softening is on. Values outside 0-64 are pulled back into range. | |
| alpha_matting_background_threshold | No | How certain a pixel must be to count as definitely background. Only used when edge softening is on. Values outside 0-255 are pulled back into range. | |
| alpha_matting_foreground_threshold | No | How certain a pixel must be to count as definitely the subject. Only used when edge softening is on. Values outside 0-255 are pulled back into range. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered, and the description correctly reinforces a non-destructive editing operation. It adds useful context beyond the annotations by specifying the output artifact (transparent PNG or solid fill), which the agent needs since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences that front-load the core action and output before the disambiguation clause. 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 7-parameter editing tool with no output schema, the description covers the essential output format and the fact that input is user-supplied. The individual parameters are fully documented in the schema, so the only minor gap is the absence of any mention of processing time or resource intensity for the slower matting modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters are already documented, including the model enum, thresholds, and erode size. The description's mention of 'solid fill color' loosely maps to bg_color but adds no syntax or semantic detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Cut out the subject and remove the background from an existing photo') and names the concrete output ('transparent PNG or a solid fill color'). It also explicitly distinguishes itself from generation tools ('does not generate new imagery'), which separates it from siblings like generate_placeholder_image and photo_collage.
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 clarifies the key usage boundary by stating it 'Edits a user-supplied image; does not generate new imagery,' which rules out generator siblings. However, it gives no guidance on when to prefer this over adjacent editing tools such as photo_crop, photo_face_blur, or photo_editor, so the when-to-use routing is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_collageAInspect
Photo Collage — Arrange 2-16 images into a smart-cropped collage with aspect-ratio-aware layouts, named magazine templates, or legacy NxM grids. Output: JPG, PNG, WebP, AVIF. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| gap | No | Gap between cells in px, 0-100. | |
| files | Yes | 2-16 images — JPG, PNG, WebP, HEIC. The multipart field name is 'files[]' (with brackets). | |
| layout | No | A plain grid, written as columns then rows. | 2x2 |
| quality | No | Output quality; 0 or omitted = engine default. | |
| bg_color | No | 'white', 'black', 'transparent', or hex (#abc/#aabbcc). Unknown values silently become white; jpg output flattens transparency to white. | white |
| template | No | Named template (layout_mode=template), e.g. ig_post_2x2, ig_story_3_vertical, ig_post_5_magazine. | |
| layout_mode | No | Omit to auto-infer: 'template' present implies template mode, 'layout' implies grid_legacy, otherwise smart. | smart |
| aspect_ratio | No | Output aspect ratio (smart mode). | 1:1 |
| output_width | No | Older name for the setting above. Set the longest side instead; this is only used if that one is left empty. | |
| output_format | No | 'jpeg' is accepted as an alias for jpg. png ignores 'quality' (fixed compression). | jpg |
| output_long_edge | No | Output long edge in px. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false with destructiveHint=false, correctly signalling a non-destructive generation operation. The description adds the 2-16 image count range and the supported output formats, which is useful, but it says nothing about error behavior, whether transparency handling or bg_color defaults apply, or what is returned. Modest added value over the annotation baseline.
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?
Front-loaded with the core verb/resource, followed by the mode enumeration and format list in two tight sentences. The trailing '[category: photo]' tag is registry metadata rather than agent-facing content but is negligible overhead; overall efficiently sized.
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 11-parameter generation tool with no output schema, the description covers inputs well but under-specifies the result: it names the possible output formats yet never says what is actually produced (a single composed image file) or whether the caller receives a URL or binary. Adequate but leaves the return contract to inference.
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 parameter meaning is already carried by the schema (including the layout_mode inference rule and the output_width-as-legacy-alias note). The description restates the 2-16 image constraint and the format list but adds no syntax or behavioral detail beyond the schema. 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?
States a specific verb (Arrange) and resource (2-16 images into a collage) and enumerates the three distinct layout approaches (smart-cropped, named magazine templates, legacy NxM grids) that map directly to the layout_mode enum. No sibling tool performs collage composition, so the agent can identify this tool unambiguously without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its purpose (collage creation) and hints that NxM grids are 'legacy', nudging toward the smart-template path, but it gives no explicit when-to-use guidance against adjacent siblings such as photo_image_overlay or photo_meme_generator, nor criteria for choosing between smart, template, and grid modes. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_color_adjusterBInspect
Color Adjuster — Adjust brightness, contrast, and saturation of an image. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | JPG, PNG, WebP, GIF, BMP, HEIC, TIFF. Max 25 MB. Output keeps the input format. | |
| contrast | No | Percent -100..100; 0 = no change. Not clamped server-side — keep within range. | |
| brightness | No | Percent -100..100; 0 = no change (unlike saturation where 100 = no change). -100 = solid black, +100 = solid white. | |
| saturation | No | 0-200 scale where 100 = unchanged, 0 = grayscale, 200 = double saturation. Do NOT send 0 for 'no change'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, establishing that this is a mutating but non-destructive operation. The description does not add behavioral details such as what output is returned, whether the original file is preserved, or what happens if no adjustment parameters are supplied, but it does not contradict 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 a single front-loaded sentence with no wasted prose. The 'Color Adjuster —' prefix repeats the annotation title, and the '[category: photo]' tag is mild noise, but overall the description is appropriately compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema handles parameter documentation well, and the operation is simple enough that the description is minimally viable. However, there is no output schema and the description does not explicitly state that the tool returns the adjusted image or how the result is delivered, leaving a modest gap for an agent invoking 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 provides rich semantics for contrast, brightness, and saturation, including ranges, defaults, and special warnings. The tool description merely names the same properties without adding new 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 and object: 'Adjust brightness, contrast, and saturation of an image.' This clearly distinguishes the tool from siblings like photo_editor, photo_crop, and photo_compress, which handle different or broader image operations. The purpose is immediately understandable.
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 no guidance on when to choose this tool over alternatives such as photo_editor or photo_face_blur. It does not mention exclusions, prerequisites, or use-case boundaries, so an agent cannot tell when this tool is the intended choice versus a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_compressBInspect
Compress Image — Reduce image file size using lossy or lossless compression. Supports JPEG quality setting and target-size mode. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | JPG, PNG, WebP, GIF, BMP, HEIC/HEIF. HEIC/HEIF input always comes back as JPG unless output_format overrides. | |
| quality | No | 1-100 (400 outside). PNG→PNG maps it to lossless compression effort — pixels unchanged; other formats re-encode lossily. | |
| strip_exif | No | Strip EXIF metadata from the output. Pass false to preserve it. | |
| output_format | No | Optional output format; omit to keep the input format. HEIC input converts to JPG unless overridden. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide limited safety context (readOnlyHint=false, destructiveHint=false). The description adds the useful behavioral detail that compression can be lossy or lossless. However, it does not disclose the irreversibility of lossy re-encoding, default EXIF stripping, or output format implications beyond what the schema already states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the tool's purpose. The '[category: photo]' suffix adds minor noise, and 'target-size mode' is vague, but overall the description is efficient and easy to parse.
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 four parameters, no output schema, and basic annotations, the description provides a reasonable starting point but is incomplete. It lacks usage differentiation from photo_compress_to_size, does not explain the mysterious 'target-size mode,' and does not mention supported input formats (though schema covers this).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all four parameters. The description adds minimal parameter-related meaning beyond mentioning 'JPEG quality setting' and 'target-size mode.' Notably, 'target-size mode' does not map to any schema parameter, which introduces ambiguity rather than clarifying 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 uses a specific verb and resource: 'Reduce image file size using lossy or lossless compression.' It clearly conveys the tool's core function. However, it does not explicitly distinguish itself from the closely related sibling photo_compress_to_size, even though it mentions 'target-size mode.'
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 about when to use this tool versus alternatives. The sibling list includes photo_compress_to_size, which appears to overlap directly with the 'target-size mode' mentioned in the description, but the description does not clarify the difference or provide selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_compress_to_sizeAInspect
Compress Image to Size — Compress an image to hit a target file size in KB. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | JPG, PNG, WebP, GIF, BMP, HEIC, HEIF | |
| strip_exif | No | Strip EXIF metadata from the output. | |
| output_format | No | What to save it as. Leave blank to keep the format it came in as - except HEIC and HEIF pictures, which always come back as JPG. Squeezing to a size needs a format that compresses, which is why BMP and GIF are not offered. | |
| target_size_kb | Yes | Target size in KB as a positive integer, e.g. 200. Field name is 'target_size_kb' — not 'target_size'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds only the target-size behavior; it does not disclose whether the original is overwritten, what the output artifact is, or any auth/rate-limit constraints. With annotations present, this adds modest context but not rich 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?
One front-loaded sentence plus a category tag; no redundancy or filler. Every word contributes to identifying the operation and its target outcome.
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 image transformation with complete parameter documentation and annotations covering safety, the description gives enough for correct invocation. However, with no output schema, it stops short of describing what the tool returns, leaving 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 description coverage is 100%, and the schema itself documents file formats, strip_exif, output_format, and target_size_kb thoroughly, including a helpful note about the exact field name. The description adds no parameter syntax or format detail beyond what is already structured.
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 'Compress' and resource 'Image', plus the measurable outcome 'hit a target file size in KB'. This distinguishes it from a generic photo_compress, but it does not name the sibling or clarify scope boundaries explicitly.
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 target-size outcome implies the scenario (use when a specific KB limit is required), but there is no explicit when-to-use, when-not-to-use, or reference to alternatives like photo_compress, photo_resize, or media_compress_video. Usage is only inferable from the purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_cropBInspect
Crop Image — Crop an image to a specified region (x, y, width, height) in pixels. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Left offset px on the DISPLAYED (EXIF-upright) image — the handler auto-orients before cropping. | |
| y | No | Top offset px on the DISPLAYED (EXIF-upright) image — the handler auto-orients before cropping. | |
| file | Yes | JPG, PNG, WebP, HEIC, TIFF, BMP, or GIF. Output keeps the input format. | |
| width | Yes | Crop width px. Clipped at the image edge if the region overruns. | |
| height | Yes | Crop height px. A region overrunning the image edge is clipped, not an error. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=false and destructiveHint=false, so no contradiction exists and the basic mutation profile is covered. The description adds no side-effect context (e.g., whether output replaces the input or is returned, or auto-orientation behavior), though the schema parameter descriptions do document clipping and EXIF-upright handling.
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 with the operation and coordinate format. The '[category: photo]' tag is redundant noise, but the main sentence is efficient and easy to scan.
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 and the schema compensates for many gaps (accepted formats, auto-orientation, clipping, numeric bounds), so invocation is feasible. However, the description omits usage context versus siblings and there is no output schema describing the returned artifact, leaving minor completeness 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 description coverage is 100%, with each parameter already documented including coordinate ranges, defaults, and edge-clipping behavior. The description merely lists the same parameter names and adds no semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('Crop an image') and the exact coordinate model ('x, y, width, height) in pixels'), so an agent can tell this is a crop tool. It does not explicitly distinguish itself from sibling tools like photo_editor or photo_resize, but the verb+region formula is specific enough for purpose clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use photo_crop versus alternatives such as photo_resize, photo_editor, or pdf_crop. The description only defines what the tool does, leaving the selection decision entirely to inference from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_editorAInspect
Photo Editor — Apply a single named filter to an image: grayscale, sepia, blur, sharpen, negate, or vignette. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | JPG, PNG, WebP, GIF, BMP, HEIC, TIFF (max 25MB) | |
| filter | No | Filter to apply. | grayscale |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that the operation is not read-only and not destructive. The description adds the constraint of applying only a single filter at a time, but it does not disclose output format, whether the original file is preserved, or other runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one tight sentence followed by a category tag. It front-loads the core action and lists filters without wasted wording.
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 filter-application tool, the description plus schema provides enough to call it correctly. The only notable gap is the lack of explicit return/output behavior, but the absence of an output schema and the simple nature of the operation keep this from being a serious deficiency.
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 both parameters and the allowed enum values. The description mostly repeats the enum list and adds the 'single filter' semantic, which is useful but not a major addition 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 uses a specific verb, 'Apply', names the resource (an image), and enumerates exactly which filters are supported. This makes the tool's purpose immediately clear and distinct from image-generating or analysis 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 implies usage for single-filter image edits and lists the supported filters, but it does not explicitly state when to choose this tool over sibling tools like photo_color_adjuster or photo_crop, nor does it mention any alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_exif_viewerARead-onlyInspect
EXIF Viewer — Extract and display all EXIF metadata from a photo including camera, GPS, and settings. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (JPG, PNG, TIFF, HEIC) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already cover the safety and scoping profile, and the description does not contradict them. It adds some useful behavioral context by listing what metadata categories are exposed, but it does not mention behavior when the photo has no EXIF data or what the output structure looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise, front-loaded sentence states the tool's purpose and key output categories, followed by a compact category tag. There is no filler, redundancy, or unnecessary detail.
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, read-only tool with full schema documentation, the description is nearly complete. However, because there is no output schema, a brief note about what happens when no EXIF metadata exists would make it fully self-sufficient.
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%: the single 'file' parameter is already described as the input file with supported formats (JPG, PNG, TIFF, HEIC). The description adds no additional parameter-level meaning, 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 uses a specific verb ('extract and display') tied to a clear resource ('all EXIF metadata from a photo') and names concrete content categories (camera, GPS, settings). This unambiguously differentiates it from generic tools like analyze_metadata or analyze_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?
The intended use is implied by the description: use when you need EXIF metadata from a photo. However, it does not explicitly state when not to use it or name alternatives such as analyze_metadata or describe_image, so the guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_face_blurBInspect
Face Blur — Automatically detect and blur faces in a photo for privacy protection. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | JPG, PNG, WebP, BMP (max 25MB) | |
| blur_mode | No | gaussian softens, pixelate mosaics, solid draws an opaque black box — solid is the only mode that survives deblurring attacks. | gaussian |
| block_size | No | Size of each mosaic square. 0 uses the amount chosen above; 1 is ignored, use 2 or more. | |
| blur_radius | No | Gaussian radius override. 0 = auto from blur_strength. | |
| manual_faces | No | Advanced: extra rectangles to blur even if no face was found there, as [{"x":10,"y":20,"w":80,"h":80}] in pixels. | |
| blur_strength | No | Preset intensity 1-4. blur_radius/block_size overrides beat it when set; irrelevant for solid mode. | |
| output_format | No | Optional output format; defaults to the input format. | |
| selected_faces | No | Advanced: which detected faces to blur, as a list of numbers starting at 0, e.g. [0,2]. Leave empty to blur every face found. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnlyHint=false, destructiveHint=false, closed-world), so the bar is lower. The description adds only that detection is automatic; it says nothing about what is produced or whether the original is preserved, which is a meaningful gap for a mutation tool. However, the schema carries rich behavioral detail (e.g. that solid mode survives deblurring attacks).
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?
A single front-loaded sentence that states the action and the benefit with no wasted words. The '[category: photo]' tag is a minor routing aid but is slightly redundant metadata.
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 8 parameters, no output schema, and no annotations describing output, the description should ideally state what the tool returns (a new blurred file vs. in-place mutation) and whether the original is retained. As written it leaves that to inference, though the schema fully covers the inputs.
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 both enums, defaults, ranges, and the blur_mode trade-offs are fully documented in the schema itself. The description adds no parameter meaning beyond the schema, making 3 the correct 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 gives a specific verb+resource ('detect and blur faces in a photo') plus a motive ('for privacy protection'), so the agent immediately knows what it does. It does not name any sibling (e.g. photo_face_detect, which detects but does not blur) to disambiguate, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for privacy protection' implies the use case, but there is no explicit when-to-use, when-not-to-use, or alternative routing against siblings like photo_face_detect or photo_editor. Usage is only inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_face_detectARead-onlyInspect
Face Detect — Detect faces in an image and return bounding boxes. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (JPG, PNG) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the useful behavioral detail that the tool returns bounding boxes, but does not disclose additional behavior such as output format, coordinate system, limits on number of faces, or behavior when no faces are found.
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 one clear, compact sentence that states the action, the input, and the output. It is front-loaded with the core purpose and has no filler or redundant detail.
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-input read-only tool with full schema coverage and no output schema, the description covers the essential information: what the tool does and what it returns. It could be slightly more complete by describing the format of the bounding boxes, but the current level is adequate for selecting and correctly 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 only parameter 'file' is already fully documented in the schema as an input file (JPG, PNG). The description adds nothing meaningful beyond the schema, 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 and resource: 'Detect faces in an image and return bounding boxes.' It clearly differentiates from sibling tools like photo_face_blur (which would blur faces) and photo_bg_remover (which removes backgrounds), making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: this tool should be used when an agent needs to detect faces and obtain bounding boxes. However, it provides no explicit guidance about when to prefer this over related tools like photo_face_blur, nor does it mention any conditions or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_flip_rotateBInspect
Flip / Rotate Image — Flip an image horizontally or vertically, rotate it by 90/180/270, or rotate by a custom angle. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input image (max 25MB) | |
| action | No | Rotate values have NO hyphen: 'rotate90', not 'rotate-90'. 'custom' rotates by the 'degrees' field. | rotate90 |
| degrees | No | Rotation degrees, -360 to 360 — only used when action=custom. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), lowering the disclosure bar. The description restates the available operations but adds little beyond that — it does not say whether the original file is overwritten, what output is produced, or any limits other than what the schema carries (25MB).
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?
A single front-loaded sentence plus a category tag; no wasted words and the core operation is stated immediately. The trailing '[category: photo]' is minor metadata rather than prose 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?
For a simple 3-parameter transform tool with no output schema and full annotation coverage, the description is adequate but thin. It omits any note on output behavior or how the result is returned, which is the main remaining gap given the schema already covers inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents file, action, and degrees in detail (including the no-hyphen note and the action=custom dependency). The description's mention of rotation angles and custom angle maps to the schema but adds no new parameter semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource (flip/rotate an image) and enumerates the concrete operations available (horizontal/vertical flip, 90/180/270 rotation, custom angle). It is clear what the tool does, though it does not explicitly distinguish itself from nearby siblings like photo_crop, photo_resize, or photo_editor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool versus alternatives such as pdf_rotate or the general photo_editor, nor any prerequisites or exclusions. The description only states capabilities, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_format_converterAInspect
Image Format Converter — Convert an image between formats: JPG, PNG, WebP, TIFF, BMP, GIF, AVIF. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input format is unrestricted — anything ImageMagick reads, incl. HEIC. Max 25 MB. | |
| format | No | 'jpeg' also accepted (saved as .jpg). EXIF rotation is baked into the pixels — most target formats can't carry the tag. | png |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that the operation is not read-only and not destructive, and the description does not contradict them. However, the description adds no further behavioral detail such as whether a new file is produced, how output is returned, or side effects; the EXIF-rotation note appears only in the schema, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence with a category tag, and the core verb and resource are front-loaded. The opening phrase 'Image Format Converter' is slightly redundant with the tool name, but the overall size is appropriate.
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 two-parameter tool with complete schema documentation, the description is sufficient to select and invoke it correctly. The lack of output specification is mitigated by the self-explanatory 'convert between formats' behavior and the absence of complex state or nested inputs.
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 both parameters, including accepted aliases and input restrictions. The format list in the description largely duplicates the enum without adding new 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 action ('convert') on a specific resource ('image') and enumerates seven supported formats, which clearly distinguishes it from generic converters like convert_file and from photo editing tools. The purpose is immediately obvious and not 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?
No guidance is given about when to use this tool versus alternatives such as convert_file or photo_editor. It relies on the agent to infer usage from the format list, and there are no exclusions or routing rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_image_diffBInspect
Image Diff — Compare two images and highlight the differences visually. Takes two separately-named uploads: 'image1' and 'image2'. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| fuzz | No | Per-pixel tolerance percent, 0-20. | |
| image1 | Yes | First image — JPG, PNG, WebP, BMP (max 25MB) | |
| image2 | Yes | Second image — JPG, PNG, WebP, BMP (max 25MB) | |
| normalize | No | Normalize sizes before comparing. | |
| output_format | No | Format of the returned diff image. AE/SSIM/PSNR/RMSE scores ride X-JE-Metric-* response headers, not the body. | png |
| lowlight_color | No | Hex color for unchanged pixels. | #222222 |
| highlight_color | No | Hex color for changed pixels. | #ff0000 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false), and the description adds the visual-diff behavior. However, it does not disclose what happens with mismatched sizes, whether uploads are consumed, or what the response contains beyond a direct reading of the parameter descriptions.
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 function, followed by a sentence clarifying the required upload names. The only minor redundancy is the 'Image Diff —' prefix mirroring the annotation title, but overall there is no wasted 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 description plus the rich 100%-covered schema give enough to invoke the tool correctly, and the output_format parameter description explains the returned image and metric headers. Still, the description itself omits practical context such as how normalize affects comparison and what happens if images differ in size.
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. The description only reiterates the names 'image1' and 'image2' without adding new semantic depth, matching the baseline for fully self-documenting schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Compare two images and highlight the differences visually.' This is sufficient to distinguish it from similarity-analysis or overlay tools in the sibling list, though it does not explicitly name an alternative.
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 about when to choose this tool over alternatives such as analyze_image_similarity or photo_image_overlay. There are no scenarios, prerequisites, or exclusions stated, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_image_overlayBInspect
Image Overlay — Composite one image on top of another at a specified position. Takes two separately-named uploads: 'background' and 'overlay'. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| scale | No | Overlay width as a percent of background width, 1-200. | |
| opacity | No | Overlay opacity 0-100. | |
| overlay | Yes | Image composited on top — JPG, PNG, WebP, BMP (max 20MB) | |
| position | No | Anchor cell the overlay snaps to; x_offset/y_offset shift from THIS anchor, not from the top-left corner. | mc |
| x_offset | No | Px shift with gravity semantics: positive pushes inward from the anchored edge (leftward from right-side anchors). | |
| y_offset | No | Px shift with gravity semantics: positive pushes inward from the anchored edge (upward from bottom anchors). | |
| background | Yes | Base image — JPG, PNG, WebP, BMP (max 30MB) | |
| output_format | No | Optional output format; defaults to the background's format. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds only that two separately-named uploads are required, which is essentially schema restatement; it says nothing about where the composited result goes, whether the original inputs are preserved, or any size/rate constraints beyond the schema's own format notes.
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 with the core action front-loaded and no filler prose. The trailing '[category: photo]' tag is minor metadata noise but the body 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 an 8-parameter non-read-only compositing tool with no output schema, the description is only minimally adequate: parameters are fully covered by the schema, but output behavior, input preservation, and sibling differentiation are absent. It is complete enough to call the tool, not complete enough to call it confidently against alternatives.
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 every parameter (scale, opacity, position, offsets, formats with their units and ranges) is already documented in the schema. The description merely names the two required inputs, adding no format, defaulting, or offset-anchor detail beyond what the schema provides. Baseline 3 applies when 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?
States a specific verb ('Composite') and resource ('one image on top of another') plus the positional aspect, which is enough for an agent to identify the operation. However, it never distinguishes itself from close siblings like photo_watermark, photo_collage, or photo_meme_generator, which could all be described as overlaying imagery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no named alternative. The description never tells the agent when to pick this over photo_watermark or photo_collage, leaving routing entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_image_splitterCInspect
Image Splitter — Split an image into a grid of equal tiles (e.g. 2x2, 3x3). [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| cols | No | Columns, 1-8. The rightmost column absorbs remainder px, so tile widths can differ slightly. | |
| file | Yes | Image to split — JPG, PNG, WebP, or BMP (max 30 MB). Output is ALWAYS a ZIP of tiles, even for tiny grids. | |
| rows | No | Rows, 1-8. The bottom row absorbs remainder px. rows x cols tiles come back in one ZIP. | |
| output_format | No | Optional tile format; defaults to the input format. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false and openWorldHint=false, and readOnlyHint=false correctly implies file creation. The description adds nothing beyond the annotations — it does not mention the ZIP-of-tiles output container, size/format limits, or the remainder-pixel edge case, all of which are behavioral facts an agent would want before invoking.
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?
A single, front-loaded sentence with the core action stated first. The trailing '[category: photo]' tag is non-informative filler, a minor blemish on otherwise tight structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should carry more of the return-shape burden; it only vaguely says 'grid of equal tiles' and actually slightly misleads versus the schema's remainder-pixel note, while omitting that the result is always a ZIP. It is minimally adequate for a simple 4-parameter tool but leaves 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 100%, so the schema already documents cols, rows, file, and output_format in detail (including remainder-pixel handling). The description contributes no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (split) and resource (image) with the output form (grid of equal tiles, e.g. 2x2, 3x3), so an agent can distinguish it from photo_crop or photo_resize. It stops short of explicitly naming or contrasting with any sibling tool, which keeps it out of 5 territory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as photo_crop (extract one region) or photo_collage (recombine tiles). An agent must infer the scenario entirely from the verb 'split'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_meme_generatorBInspect
Meme Generator — Add bold top and bottom caption text to an image in Impact-style font. At least one of top_text/bottom_text is required. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Base image — JPG, PNG, WebP, BMP (max 25MB) | |
| font | No | If Impact isn't installed the server substitutes DejaVu-Sans-Bold; X-JE-Font-* response headers report what actually rendered. | Impact |
| top_text | No | Top caption. At least ONE of top_text/bottom_text must be non-empty or the request is rejected. | |
| font_size | No | Caption size in pixels, or the word auto to size it from the picture (a tenth of its height, kept between 20 and 150). A number outside 10 to 200 is treated as auto. | auto |
| font_color | No | Caption fill — #rrggbb or #rrggbbaa hex only; invalid values silently revert to #ffffff. | #ffffff |
| bottom_text | No | Bottom caption. | |
| stroke_color | No | Caption outline hex; invalid values silently revert to #000000. Drawn at 2x stroke_width beneath the fill. | #000000 |
| stroke_width | No | Outline stroke width, 1-8. | |
| output_format | No | Defaults to the input image's format. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), lowering the bar. The description adds the meaningful behavioral rule that a request is rejected when neither caption is supplied, but says nothing about the returned artifact or processing behavior beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the tool name and action, with the key constraint second. The trailing '[category: photo]' tag is boilerplate noise but minor.
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 image mutation tool with no output schema, the description establishes purpose and the critical 'at least one caption' rule, and the schema covers all parameter semantics. It omits any statement of what the tool returns (a rendered image, formatted per output_format), which is a minor gap given the tool's obvious nature.
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 9 parameters richly (font fallback, hex validation, auto sizing, output format). The description's caption requirement merely restates what the top_text schema entry already states, so it adds no meaning beyond structured data. 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?
Names a specific verb and resource ('Add bold top and bottom caption text to an image') plus a distinguishing style detail ('Impact-style font'), so an agent can separate it from generic editors like photo_editor or text adders like photo_watermark. It does not explicitly name a sibling alternative, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only constraint offered ('At least one of top_text/bottom_text is required') is a validation rule, not guidance on when to choose this tool over photo_watermark, photo_editor, or photo_image_overlay. There is no context on use cases or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_noise_reducerCInspect
Noise Reducer — Reduce image noise and grain using ImageMagick's denoising filters. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | JPG, PNG, WebP, BMP, TIFF (max 25MB) | |
| mode | No | Denoise algorithm. | auto |
| sharpen | No | Optional post-denoise sharpening. | none |
| strength | No | STRING enum '1'-'4', not an int. Invalid values silently become '2'. Ignored when mode=smart — the analyzer overrides it. | 2 |
| output_format | No | Optional output format; defaults to the input format. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, openWorldHint=false, and destructiveHint=false, indicating a write operation that is local and not destructive. The description does not add any behavioral context beyond what annotations provide: it does not mention whether the original file is modified or a new file is created, permission requirements, performance characteristics, or how the output is delivered. The tool likely transforms the image, which is a mutation, but the description is silent on this. With annotations already present, the bar is lower, but the description adds almost no value here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with a category tag. It is front-loaded and efficient, but the category tag adds little value beyond a taxonomic classification. Overall, it is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a mutation (readOnlyHint=false), the description is minimal. It does not explain what happens to the input file, whether it is overwritten, what the output is, or any side effects. There is no output schema. While the schema is rich, the description does not compensate for the lack of behavioral details. It is somewhat adequate for basic use but leaves clear gaps for an agent to call it correctly without inspection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly, including enums with UI labels and constraints. The description does not mention any parameters at all. The baseline of 3 is appropriate because the schema handles parameter semantics completely.
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: 'Reduce image noise and grain using ImageMagick's denoising filters.' The verb is reduce, the resource is image noise/grain, and the implementation is named. However, it does not distinguish this tool from siblings like analyze_image_quality or photo_compress, which might also touch noise or quality. A brief differentiator would push this to 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. The description implies it is used to reduce noise but does not mention prerequisites, when to avoid it, or which sibling tools would handle related tasks. For a tool in a crowded photo category, this is a notable gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_resizeBInspect
Resize Image — Resize an image by pixel dimensions, percentage, fit-within-max, or exact canvas. Supports maintaining aspect ratio. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | JPG, PNG, WebP, GIF, BMP | |
| mode | No | 'max' fits within width×width and never upscales; 'canvas' resizes then pads to exact WxH with bg_color; 'percentage' scales by %. | dimensions |
| width | No | Target width in pixels. In 'Fit inside a box' mode this is the longest side the picture may reach. | |
| height | No | Target height px. | |
| bg_color | No | Colour of the padding added around the picture when it does not fill the canvas. | white |
| percentage | No | Scale to this percent of the original size. | |
| strip_meta | No | Strip EXIF metadata from the output. | |
| force_exact | No | Force exact dimensions, ignoring aspect ratio. | |
| maintain_ratio | No | Keep aspect ratio (dimensions mode). Field name is 'maintain_ratio' — not 'maintain_aspect'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, openWorldHint=false, and destructiveHint=false, so the agent knows this is a mutation that is not destructive. The description adds essentially nothing beyond the annotations about behavior—it does not state whether resizing is reversible, what the output format is, whether metadata is preserved by default (strip_meta defaults to true, which is a behavioral trait), or any permission requirements. For a mutation tool, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the action and then enumerates the modes, followed by a terse category tag. It is appropriately sized for a tool whose parameters are fully documented in the schema. The category tag is somewhat redundant but harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 9-parameter mutation tool with no output schema and no annotations covering the mutation's effects. The description omits important behavioral context such as output format, default metadata stripping behavior, whether the operation is in-place or produces a new file, and any error conditions. Given the complexity and lack of output schema, the description is incomplete for an agent to invoke the tool with full confidence.
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 every parameter is already documented in the input schema with detailed descriptions and x-show-when conditions. The description mentions aspect-ratio support and the resize methods but does not add any syntax, format, or constraint details beyond what the schema provides. Baseline 3 is correct when 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 specific verb and resource ('Resize an image') and enumerates the four resize strategies (pixel dimensions, percentage, fit-within-max, exact canvas), which maps directly to the mode enum. It is clear what the tool does, but it does not distinguish it from the many sibling photo tools beyond the operation name.
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?
Usage is implied through the enumeration of modes and the note about aspect-ratio support, giving the agent enough to understand the general context. However, there is no explicit when-to-use statement, no mention of alternatives (e.g., photo_upscaler or photo_crop), and no guidance on which mode fits which scenario beyond the schema's labels.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_shadow_adderBInspect
Add Drop Shadow — Add a drop shadow effect to an image, producing a PNG with transparency. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| blur | No | Shadow edge softness in px. 0 = hard-edged rectangle of a shadow. | |
| file | Yes | Image to shadow — JPG, PNG, or WebP only (max 25 MB). BMP is NOT accepted here, unlike most photo tools. | |
| angle | No | Shadow direction in degrees. | |
| opacity | No | Shadow darkness 0-100. Affects the shadow layer only, never the image itself. | |
| distance | No | Shadow offset in px. | |
| shadow_color | No | Hex shadow color. Field name is 'shadow_color' — not 'color'. | #000000 |
| output_format | No | Leave blank to keep the format it came in as. Only PNG keeps the area around the shadow see-through; JPG and WebP are flattened onto white. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare it is a non-read-only, non-destructive, non-open-world transform, so the mutation profile is already given. The description adds that the output is a PNG with transparency, which is a useful behavioral fact beyond the annotations. However, it does not disclose that JPG/WebP flatten onto white (that is only in the schema), nor any overwrite/return 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?
Very short and front-loaded: the effect and the output format come first, category tag last. No filler sentences. Slightly terse for a 7-parameter transform tool, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-destructive transform with a rich input schema and no output schema, the description is minimal but not misleading. It omits the important output_format nuance (JPG/WebP flatten to white) and any note that the output is a new image file. Adequate but with clear gaps given the tool's 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 all 7 parameters are fully documented in the schema (blur, angle, opacity, distance, shadow_color, output_format, file). The description adds no parameter-level detail beyond what the schema already provides, which is the expected baseline when schema coverage is high.
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+resource: 'add a drop shadow effect to an image'. Clear and distinguishable from the sibling photo tools like photo_bg_remover or photo_watermark, though it never explicitly names or contrasts with them. The suffix 'producing a PNG with transparency' adds useful output clarification.
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 or when-not-to-use guidance, no mention of alternatives in the photo_* family. The only implicit routing cue is 'producing a PNG with transparency', which is about output behavior rather than tool selection. An agent gets no help distinguishing this from photo_watermark or photo_image_overlay.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_svg_to_pngAInspect
SVG to PNG — Rasterize an SVG vector file to PNG (or JPG/WebP) at a chosen resolution, DPI, and background color. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| dpi | No | String, not a number — only '72', '96', '144', '300'; anything else silently becomes '96'. | 96 |
| file | Yes | SVG file (max 25MB) | |
| width | No | Output width in px. 0 (default) = render at the SVG's intrinsic size. | |
| height | No | Output height in px. 0 = intrinsic. | |
| bg_color | No | 'transparent', 'white', or a hex color. | transparent |
| output_format | No | jpg cannot hold transparency: without an explicit bg_color the artwork is flattened onto white, never black. | png |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=false and destructiveHint=false, so the safety baseline is set. The description adds the meaningful behavioral concept of rasterization and optional output formats, but it does not disclose side effects, output delivery, or whether the original file is preserved, which would add further transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the action and output format, then summarizes the adjustable options. The '[category: photo]' suffix is small and doesn't add clutter. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter conversion tool with a fully descriptive schema, the description captures the core purpose, output options, and key customization dimensions. It doesn't spell out return-value behavior, but no output schema exists and the converted raster file is strongly implied; explicit sibling differentiation would be the only notable 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%, and each parameter already has a detailed explanation, including the dpi string-coercion warning and jpg transparency behavior. The description only summarizes 'resolution, DPI, and background color' without adding new parameter-level meaning, so it sits at the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Rasterize') plus a clear resource ('SVG vector file') and output ('PNG (or JPG/WebP)'), and names the key options (resolution, DPI, background color). This clearly distinguishes it from generic sibling tools like photo_format_converter by emphasizing the SVG-vector-to-raster workflow.
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?
Usage is implied: use this when an SVG needs to become a raster PNG/JPG/WebP. However, the description does not explicitly state when to prefer this over alternatives such as photo_format_converter or convert_file, nor does it give exclusion criteria, so the agent must infer routing from the tool name and wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_to_textBInspect
Photo to Text (OCR) — Extract text from an image via OCR. Language selection uses comma-separated ISO-639-1 codes (en, fr, de, ...) — not Tesseract codes. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | JPG, PNG, WebP, BMP, TIFF (max 15MB) | |
| output | No | json returns structured results; text returns plain text. | json |
| binarize | No | Force the picture to pure black and white before reading it. Off by default because it destroys text in uneven light; try it on faint or washed-out scans. | |
| languages | No | Which language or languages the writing is in, as two-letter codes. One, or several separated by commas: en, or en,fr. Common ones are en, fr, de, es, pt, it, nl, ru, ar, zh, ja, ko. Field name is languages, not language, and Tesseract-style codes like eng are not recognised. | en |
| preprocess | No | Apply image preprocessing before OCR. | |
| binarize_threshold | No | The cut-off between black and white, as a percent. Lower keeps more of the picture black. Only used when black and white is forced on; anything outside 1-99 quietly reverts to 60. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations supply the safety profile (destructiveHint=false, openWorldHint=false), so the lower bar applies. The description adds the important ISO-639-1 vs Tesseract code constraint, but says nothing about cost, processing time, or how results are surfaced. Note readOnlyHint=false is unusual for an OCR read, though the description does not contradict it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core purpose front-loaded, followed by the one non-obvious gotcha (code format). The '[category: photo]' tag is minor metadata rather than 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?
There is no output schema and six parameters, one of which (output) determines return shape. The description never explains what is returned (plain text vs structured OCR blocks), so it is adequate but leaves a gap an agent would want filled before invoking.
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% (every parameter, including binarize, binarize_threshold, and languages, is documented in-schema). The description's language-code note largely restates what the 'languages' property already says, so it does not add meaning beyond the schema. 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: 'Extract text from an image via OCR.' The word 'image' implicitly separates it from the pdf_ocr sibling, so an agent can route correctly, but no alternative is named explicitly.
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?
Usage is implied by the resource boundary (images, not PDFs), and the language-code warning is a useful usage hint. However, there is no explicit when-to-use/when-not guidance, no mention of when pdf_ocr is the better pick, and no prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_upscalerAInspect
Image Upscaler — Enlarge an existing image 2x or 4x with super-resolution detail recovery, with an optional face-enhancement pass. Sharpens and upsizes a user-supplied photo; does not generate new imagery. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Hard 10 MB cap (400 above it). JPG/PNG/WebP/BMP only — no GIF/HEIC. Big images risk the 120s upscale timeout. | |
| model | No | fast (default) — ~16s at any scale, softer on very fine texture. quality — best fine detail but 50s at 2x and 245s at 4x on CPU; expect a wait. | fast |
| scale | No | Upscale factor; invalid values silently fall back to 2. With the default fast model 4x costs the same as 2x. | |
| face_enhance | No | Run the additional face-enhancement pass. | |
| output_format | No | Optional output format; defaults to the input format. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), and the schema carries the real behavioral detail (timeouts, model speeds, invalid-value fallback). The description's only extra behavioral signal is 'does not generate new imagery', so it adds modest value on top of 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 tight sentences with zero filler, front-loading the core action and immediately following with the key scope exclusion. The category tag is compact and placed last.
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 no output schema, the description could state what it returns (an upscaled image file, and in which format), which would matter for downstream chaining. Otherwise the purpose, scope, and behavior are adequately covered given the rich input schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (file, model, scale, face_enhance, output_format) is already documented in the schema with enum labels and defaults. The description repeats the 2x/4x scale and optional face-enhancement pass but adds no syntax or constraint 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 pairs a specific verb and resource ('Enlarge an existing image 2x or 4x with super-resolution detail recovery') and explicitly carves out scope with 'does not generate new imagery', which separates it from generate_* tools. An agent can distinguish it from plain photo_resize via the stated super-resolution/detail-recovery behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one implicit when-not ('does not generate new imagery'), useful for avoiding generation tools, but offers no explicit guidance on when to choose this over the closest sibling photo_resize, nor any prerequisites. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_watermarkBInspect
Add Image Watermark — Overlay a text watermark on a photo with configurable position (ImageMagick gravity names), opacity, and font size. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | JPG, PNG, WebP, GIF, BMP, HEIC, TIFF. Max 25 MB. Output keeps the input format. | |
| text | No | Defaults to 'John's Essentials' when omitted — always pass your own. A leading '@' is stripped. | John's Essentials |
| color | No | A hex colour, or one of white, black, gray, red, orange, yellow, green, blue, cyan, magenta, purple, pink, brown. Anything else falls back to white. | #ffffff |
| opacity | No | INTEGER percent 0-100 — a fraction like 0.5 parses as 0 (invisible watermark). | |
| position | No | Case-sensitive ImageMagick gravity name — 'center' (lowercase) or 'top-left' are NOT recognized and silently fall back to SouthEast. | SouthEast |
| font_size | No | Points. Out-of-range values (<6 or >500) silently reset to 36 — no error returned. | |
| stroke_color | No | The outline behind the text, which is what keeps a watermark readable over a white dress or a black suit. Leave it unset and it is picked for you - black behind a light colour, white behind a dark one. Same colour names as above. | |
| stroke_width | No | How thick the outline behind the text is. Leave it on auto and it scales with the text size. 0 turns the outline off; otherwise a whole number up to 20 - anything larger is treated as 20. | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive write. The description adds nothing behavioral beyond that — it does not say whether the original file is overwritten or a new file is produced, nor what the tool returns. Adequate against the annotation-provided safety profile, but thin.
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?
A single front-loaded sentence with the verb and resource first, followed by the configurable knobs. Efficient, though the trailing '[category: photo]' tag is mild noise rather than useful 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 an 8-parameter mutation tool, the description is only just sufficient: the schema thoroughly documents parameters and the annotations cover the safety profile, but no output schema exists and the description never states whether the source photo is modified in place or a new file is emitted. That is a meaningful omission for a write 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% and the schema itself carries rich per-parameter semantics (opacity integer parsing, gravity case-sensitivity, font_size silent reset, stroke auto behavior). The description only restates that position/opacity/font size are configurable and adds no syntax or default detail beyond the schema, 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 gives a specific verb+resource ('Add Image Watermark — Overlay a text watermark on a photo') and names the configurable dimensions (position, opacity, font size). It clearly conveys what the tool does, but never acknowledges the closely named sibling media_add_watermark (or pdf_watermark), so an agent must infer that this one is for raster photos rather than video/PDF.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not guidance is given. With media_add_watermark and pdf_watermark in the sibling list, the absence of any routing statement ('use this for JPG/PNG/H...; use media_add_watermark for video') leaves the agent to guess. The '[category: photo]' tag is the only weak disambiguator.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_extract_tableBRead-onlyInspect
Extract Table — Extract an HTML table from a public web page at a user-provided http(s) URL, as JSON rows or CSV. [category: web]
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | http(s) URL containing the table | |
| output | No | How the table comes back: JSON gives rows you can feed to the next step, CSV gives one block of comma-separated text. Either way it is data, not a downloadable file. | json |
| timeout_ms | No | How long to wait for the page before giving up, in milliseconds (30000 = 30 seconds). | |
| user_agent | No | Advanced: how we introduce ourselves to the site. Left blank we identify as JohnsEssentialsBot. | |
| table_index | No | Which table on the page, counting from 0 for the first one. If the page has fewer tables than this, the error tells you how many it found. | |
| acknowledge_robots | No | Business plan: read the table even when the site's robots.txt asks bots to stay away. On any other plan this switch does nothing and the page is still refused. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered and the description does not contradict it. However, the description text itself adds nothing behavioral beyond the structured fields — the notable traits (robots.txt bypass, plan gating, data-not-a-file output) all live in the schema, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb, resource, scope, and output formats are all packed in without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does state both return shapes (JSON rows / CSV text), and the rich per-parameter schema covers timeouts, table selection, and error messaging. It is nearly complete, missing only operational caveats like rate limits or repeat-fetch behavior that an agent might reasonably want.
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 (including the output enum and the acknowledge_robots switch) are fully documented in the schema. The description adds no extra meaning about parameter behavior, which is the correct baseline when 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?
States a specific verb and resource ('Extract an HTML table') plus the input constraint (public http(s) URL), which cleanly separates it from siblings like web_fetch and web_scrape_page. It does not name those siblings explicitly, so an agent must infer the boundary from the word 'table' vs. general page fetching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no articulation of when to choose this over web_fetch or web_scrape_page, nor prerequisites such as plan requirements for the robots override. The only guidance is implicit in 'public web page at a user-provided URL'. An agent gets no decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_fetchARead-onlyInspect
Fetch URL — Fetch the raw (decoded) HTML of a public web page at a user-provided http(s) URL. SSRF-guarded, http/https only, 10 MB body cap, robots-aware. [category: web]
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | http(s) URL to fetch | |
| timeout_ms | No | How long to wait for the page before giving up, in milliseconds (30000 = 30 seconds). | |
| user_agent | No | What to tell the site we are. Leave blank and we identify honestly as JohnsEssentialsBot/1.0. | |
| acknowledge_robots | No | Business plan only: fetch the page even when the site's rules file (robots.txt) asks crawlers to stay away. On other plans this switch has no effect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint and openWorldHint, and the description meaningfully extends them: SSRF guarding, http/https-only restriction, a 10 MB body cap, and robots-awareness disclose the operational envelope. It does not cover rate limiting, auth, or error behavior, keeping it short of a 5.
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?
A single, dense sentence front-loads the verb and resource, then lists constraints compactly. No filler and nothing redundant with 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 moderate-complexity, read-only fetch tool with no output schema, the description covers the return value (raw decoded HTML), the guardrails, and the plan-gated robots behavior. It stops short only on error handling and explicit sibling differentiation.
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 four parameters are already documented in the input schema (timeout, user_agent, acknowledge_robots). The description adds only marginal context — 'public web page' and 'http(s) only' for the url — so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch the raw (decoded) HTML of a public web page') and even scopes the return format, so an agent can distinguish it from parsing tools. However, it never names its closest siblings (web_scrape_page, web_extract_table), leaving the boundaries to be inferred.
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?
Usage is only implied — 'raw HTML' suggests this is the low-level fetch versus a parsed scrape, but there is no explicit when-to-use, when-not, or alternative routing. Given sibling tools like web_scrape_page and web_extract_table overlap heavily, the missing routing guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_scrape_pageARead-onlyInspect
Scrape Page — Extract structured data from a public web page at a user-provided http(s) URL: CSS-selector mode returns text per selector; readability mode returns the main article as clean markdown. [category: web]
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | http(s) URL to scrape | |
| mode | No | Readability gives you the page's main article as clean text. Selectors gives you only the specific bits you name below. | readability |
| selectors | No | One CSS selector per thing you want, named: {"headline": "h1", "price": ".price"}. Needed only when you pick Selectors above. | |
| timeout_ms | No | How long to wait for the page before giving up, in milliseconds (30000 = 30 seconds). | |
| user_agent | No | Advanced: how we introduce ourselves to the site. Left blank we identify as JohnsEssentialsBot. | |
| acknowledge_robots | No | Business plan: scrape the page even when the site's robots.txt asks bots to stay away. On any other plan this switch does nothing and the page is still refused. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=true). The description adds useful return-shape context per mode (text per selector vs markdown article), but stays silent on behavioral traits like how it handles robots/gating and the default mode. The robots.txt/acknowledge_robots nuance lives only in the schema, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single front-loaded sentence that leads with verb+resource and then enumerates the two modes compactly. The trailing '[category: web]' tag is slightly noisy but the content is efficient 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?
With no output schema, the description helpfully characterizes both return formats (per-selector text and markdown article), which is the key thing an agent needs. Minor gaps remain around robots handling and the meaning of the default mode, but overall it is complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 documented in the schema itself (including mode semantics, selectors shape, timeout bounds, user_agent, and acknowledge_robots). The description restates the mode behavior but adds no parameter meaning beyond the schema; 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 (scrape) and resource (public web page) and clearly distinguishes its two operating modes (CSS-selector returns text per selector; readability returns clean markdown). It does not, however, differentiate itself from close siblings like web_fetch or web_extract_table, leaving that routing to inference.
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 two modes imply usage ('readability for main article', 'selectors for specific bits'), so an agent can infer which to pick. But there is no explicit when-to-use-this-vs-alternatives guidance, no statement of when to prefer web_fetch or web_extract_table, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Added
drive_upload
79 tool updates
- Changed
analyze_color_palette2 fields changed- changed
Input schema / properties / colors / descriptionPrevious value: -"Number of palette colors to extract."New value: +"How many dominant colours to pull out of the image." - added
Input schema / properties / colors / titleAdded value: +"Colors to extract"
- Changed
analyze_csv1 field changed- added
Input schema / properties / strictAdded value: +{ + "default": false, + "description": "Files over 10,000 rows are analysed from the first 10,000 only. Switch on to get an error instead of statistics that cover part of the file.", + "title": "Refuse partial answers", + "type": "boolean" +}
- Changed
analyze_file_diff5 fields changed- added
Input schema / properties / strictAdded value: +{ + "default": false, + "description": "Only the first 2,000 lines of each side are compared. Switch on to get an error instead of a comparison that covers part of the files.", + "title": "Refuse partial answers", + "type": "boolean" +} - changed
Input schema / properties / text_a / descriptionPrevious value: -"First text — alternative to the file pair. Send text_a AND text_b together (text mode)."New value: +"The BEFORE version. Anything that appears only here is reported as removed." - added
Input schema / properties / text_a / titleAdded value: +"Original text" - changed
Input schema / properties / text_b / descriptionPrevious value: -"Second text."New value: +"The AFTER version. Anything that appears only here is reported as added." - added
Input schema / properties / text_b / titleAdded value: +"Updated text"
- Changed
analyze_grammar_check9 fields changed- added
Input schema / properties / dialect / titleAdded value: +"English spelling" - added
Input schema / properties / dialect / x-uiAdded value: +{ + "labels": { + "auto": "Detect automatically", + "en-AU": "Australian English", + "en-CA": "Canadian English", + "en-GB": "British English", + "en-US": "American English" + } +} - changed
Input schema / properties / include_llm / descriptionPrevious value: -"Run the Grok stage for context-dependent issues LanguageTool misses. Set false for rule-only output."New value: +"Adds a second pass that catches wording and context problems the rule checker cannot see. Turn off for rule-based results only, which is faster." - added
Input schema / properties / include_llm / titleAdded value: +"Deeper AI check" - changed
Input schema / properties / mode / descriptionPrevious value: -"strict = flag any casual phrasing; tone-preserving = preserve the author's voice."New value: +"Keep my voice leaves your phrasing alone; Strict also flags casual or loose wording." - added
Input schema / properties / mode / titleAdded value: +"How picky should it be" - added
Input schema / properties / mode / x-show-whenAdded value: +{ + "include_llm": [ + true + ] +} - added
Input schema / properties / style / titleAdded value: +"Style guide" - added
Input schema / properties / style / x-uiAdded value: +{ + "labels": { + "ap": "AP", + "apa": "APA", + "chicago": "Chicago", + "ieee": "IEEE", + "mla": "MLA", + "none": "No style guide" + } +}
- Changed
analyze_grammar_check_batch8 fields changed- added
Input schema / properties / items / items / properties / dialect / defaultAdded value: +"en-US" - added
Input schema / properties / items / items / properties / dialect / descriptionAdded value: +"Which spelling to expect. Anything we do not recognise is read as en-US." - added
Input schema / properties / items / items / properties / include_llm / defaultAdded value: +true - added
Input schema / properties / items / items / properties / include_llm / descriptionAdded value: +"Also run the slower rewrite pass that suggests whole-sentence improvements. On unless you say otherwise." - added
Input schema / properties / items / items / properties / mode / defaultAdded value: +"tone-preserving" - added
Input schema / properties / items / items / properties / mode / descriptionAdded value: +"Tone-preserving keeps the writer's voice and fixes mistakes; strict rewrites towards plain correctness." - added
Input schema / properties / items / items / properties / style / defaultAdded value: +"none" - added
Input schema / properties / items / items / properties / style / descriptionAdded value: +"Which style guide to judge the writing against. Leave it out and no style guide is applied."
- Changed
analyze_hash5 fields changed- changed
Input schema / properties / file / descriptionPrevious value: -"File to hash (any type)"New value: +"The file to hash. Any type, of any size we accept." - added
Input schema / properties / file / titleAdded value: +"File to hash" - changed
Input schema / properties / text / descriptionPrevious value: -"Direct text alternative to the file."New value: +"Hash typed text instead of a file. Ignored if a file is attached — the file wins." - added
Input schema / properties / text / titleAdded value: +"Text to hash" - changed
Input schema / requiredPrevious value: -[ - "file" -]New value: +[]
- Changed
analyze_link_extractor5 fields changed- changed
Input schema / properties / file / descriptionPrevious value: -"PDF or HTML file. Other types (incl. DOCX) are scanned as raw bytes and usually yield few links."New value: +"A PDF or HTML file to pull the links out of. Any other type is read as plain text." - added
Input schema / properties / file / titleAdded value: +"File to scan" - changed
Input schema / properties / text / descriptionPrevious value: -"Direct text/HTML alternative to the file."New value: +"Paste text or HTML to pull links out of. Ignored if a file is attached — the file wins." - added
Input schema / properties / text / titleAdded value: +"Text or HTML to scan" - changed
Input schema / requiredPrevious value: -[ - "file" -]New value: +[]
- Changed
analyze_readability3 fields changed- changed
Input schema / properties / text / descriptionPrevious value: -"Plain text to score — minimum ~5 words. Required unless 'file' is provided."New value: +"Paste the text to score — about five words minimum. Leave blank if you are uploading a document instead." - added
Input schema / properties / text / titleAdded value: +"Text to score" - changed
Input schema / requiredPrevious value: -[ - "text" -]New value: +[]
- Changed
analyze_ssl2 fields changed- changed
Input schema / properties / hostname / descriptionPrevious value: -"Hostname to check, e.g. example.com. Field name is 'hostname' — not 'domain'. Any port suffix is ignored; 443 is always used."New value: +"The site to check, e.g. example.com — just the address, with no https:// in front and no page path. A port number is ignored; 443 is always used." - added
Input schema / properties / hostname / titleAdded value: +"Website address"
- Changed
analyze_word_count2 fields changed- changed
Input schema / properties / text / descriptionPrevious value: -"Text to analyse. Required unless 'file' is provided."New value: +"Paste the text to count. Leave blank if you are uploading a document instead." - added
Input schema / properties / text / titleAdded value: +"Text to count"
- Changed
analyze_word_frequency4 fields changed- changed
Input schema / properties / exclude / descriptionPrevious value: -"Comma-separated words to exclude from the count."New value: +"Comma-separated, e.g. the, and, of. Capitals and spacing do not matter. Words under two letters are always ignored." - added
Input schema / properties / exclude / titleAdded value: +"Words to ignore" - changed
Input schema / properties / topN / descriptionPrevious value: -"How many top words to return."New value: +"Show this many of the most common words, most frequent first." - added
Input schema / properties / topN / titleAdded value: +"How many words to show"
- Changed
convert_archive2 fields changed- added
Input schema / properties / to / defaultAdded value: +"zip" - changed
Input schema / properties / to / descriptionPrevious value: -"Output archive format. Field name is 'to' — not 'format'."New value: +"The archive format you want back. ZIP opens on every computer without extra software."
- Changed
convert_batch4 fields changed- changed
Input schema / properties / filenames / descriptionPrevious value: -"Original filenames, one per entry in files[] and in the same order (e.g. ['report.csv','photo.heic']). Strongly recommended: per-file format detection and per-extension target rules key off these names."New value: +"Not used by this tool — the names come from the uploaded files themselves. Leave it empty." - added
Input schema / properties / filenames / x-uiAdded value: +{ + "no_recall": true +} - added
Input schema / properties / target / defaultAdded value: +"auto" - changed
Input schema / properties / target / descriptionPrevious value: -"'auto' (default), a single target format like 'pdf', or a JSON map like '{\"docx\":\"pdf\",\"heic\":\"jpg\"}'"New value: +"What to turn every file into. Leave it on 'auto' and we pick a sensible result for each one (Word becomes PDF, HEIC photos become JPG, MOV becomes MP4). Type a single format, like pdf, to force them all the same way."
- Changed
convert_data2 fields changed- added
Input schema / properties / to / defaultAdded value: +"json" - changed
Input schema / properties / to / descriptionPrevious value: -"Target format. Must differ from the source format."New value: +"The format you want back. It has to be different from what you put in."
- Changed
convert_document3 fields changed- changed
Input schema / properties / from / descriptionPrevious value: -"Source format — REQUIRED on this path (extensionless uploads can't be sniffed reliably; this drives the converter engine). 'md' = markdown (GFM); 'ipynb' = Jupyter notebook."New value: +"What the file is now. We normally read this from the file name; set it when the file has no name or an odd one. Markdown and Jupyter notebooks always take their own route, so say so here for those two." - added
Input schema / properties / to / defaultAdded value: +"pdf" - changed
Input schema / properties / to / descriptionPrevious value: -"Target format. Must differ from 'from'. Markdown INPUT converts to pdf, docx, html, epub, txt. Markdown OUTPUT ('md') is supported from docx, html, pdf (text extraction), and ipynb. Jupyter notebooks (ipynb) convert to pdf, html, docx, md."New value: +"What you want back. PDF works from every source. Word stays Word, spreadsheets stay spreadsheets, slides stay slides — a Word file cannot become slides. A PDF source can only come back as Markdown."
- Changed
convert_ebook3 fields changed- added
Input schema / properties / to / defaultAdded value: +"epub" - changed
Input schema / properties / to / descriptionPrevious value: -"Target format. EPUB is the recommended direction."New value: +"The format you want back. EPUB is what a modern Kindle accepts when you send a book to it, so it is the usual answer. Pick MOBI or AZW3 only for an older device." - changed
Input schema / properties / to / enumPrevious value: -[ - "epub", - "pdf", - "mobi", - "azw3" -]New value: +[ + "epub", + "mobi", + "azw3", + "pdf" +]
- Changed
convert_file4 fields changed- changed
Input schema / properties / file / descriptionPrevious value: -"Bytes are taken at face value as 'from' — no content sniffing; a wrong 'from' fails inside the engine, not with a clean 400."New value: +"The file to convert. We read its current format from the file itself, so you only need to say what you want back." - added
Input schema / properties / gif_fpsAdded value: +{ + "default": 10, + "description": "Frames per second. Higher is smoother and bigger. If the width and frame rate together are too heavy we keep the width and ease this down.", + "maximum": 30, + "minimum": 1, + "type": "integer", + "x-show-when": { + "to": [ + "gif" + ] + } +} - added
Input schema / properties / gif_widthAdded value: +{ + "default": 320, + "description": "How wide the GIF should be, in pixels. Height follows automatically. Very wide plus very smooth is capped - we keep the width you asked for and ease the frame rate down.", + "maximum": 1280, + "minimum": 64, + "type": "integer", + "x-show-when": { + "to": [ + "gif" + ] + } +} - changed
Input schema / properties / to / enumPrevious value: -[ - "pdf", - "jpg", - "png", - "webp", - "bmp", - "tiff", - "gif", - "avif", - "ico", - "mp3", - "wav", - "ogg", - "opus", - "flac", - "m4a", - "aac", - "wma", - "aiff", - "alac", - "mp4", - "mov", - "webm", - "mkv", - "avi", - "srt", - "vtt", - "txt", - "3gp", - "flv", - "m2ts", - "mpg", - "ts", - "vob", - "wmv" -]New value: +[ + "pdf", + "jpg", + "png", + "webp", + "bmp", + "tiff", + "gif", + "avif", + "ico", + "mp3", + "wav", + "ogg", + "opus", + "flac", + "m4a", + "aac", + "wma", + "aiff", + "alac", + "mp4", + "mov", + "webm", + "mkv", + "avi", + "3gp", + "flv", + "m2ts", + "mpg", + "ts", + "vob", + "wmv", + "srt", + "vtt", + "txt" +]
- Changed
convert_geo4 fields changed- added
Input schema / properties / strict / defaultAdded value: +false - changed
Input schema / properties / strict / descriptionPrevious value: -"When true, refuse the conversion instead of returning a result that loses information."New value: +"Stop the conversion rather than hand back a file that has lost something. Off by default: you get the result plus a note about anything that could not be carried over." - removed
Input schema / properties / strict / enumRemoved value: -[ - "true", - "false" -] - changed
Input schema / properties / strict / typePrevious value: -"string"New value: +"boolean"
- Changed
convert_parquet2 fields changed- changed
Input schema / properties / sheet / descriptionPrevious value: -"Optional: when the source is .xlsx, which worksheet to read (default: the first)."New value: +"Which worksheet to read. Leave it blank for the first one." - added
Input schema / properties / sheet / x-show-whenAdded value: +{ + "from": [ + "xlsx" + ] +}
- Changed
convert_sqlite3 fields changed- added
Input schema / properties / strictAdded value: +{ + "default": false, + "description": "Stop rather than hand back a partial export. Off by default: a very large database comes back with whatever we could reach, and a note saying what was left out.", + "title": "Refuse partial answers", + "type": "boolean" +} - added
Input schema / properties / to / defaultAdded value: +"csv" - changed
Input schema / properties / to / descriptionPrevious value: -"With 2+ tables, csv arrives as a ZIP of per-table CSVs — pass 'table' when a downstream step needs one plain CSV. xlsx = always one file."New value: +"What you want back. A database holds several tables, so the shape follows: CSV gives one file per table (zipped if there is more than one), Excel gives one workbook with a sheet per table, JSON gives the rows as records."
- Changed
convert_text1 field changed- changed
Input schema / properties / to / descriptionPrevious value: -"What you want back. Must differ from the source. Supported pairs: Markdown↔HTML, CSV→JSON/XML, JSON↔CSV, JSON↔XML, JSON↔YAML, XML→JSON, and anything→plain text."New value: +"What you want back. Must differ from the source. For a Base64 or URL encode/decode, leave this on the format you want the result read as — do NOT pick plain text, which currently returns the input untouched."
- Changed
convert_unit_convert1 field changed- changed
Input schema / properties / value / descriptionPrevious value: -"JSON number, not a string. Negatives are valid (temperatures, deltas)."New value: +"The amount to convert. Negative numbers are fine (below-zero temperatures, drops in weight)."
- Changed
convert_video12 fields changed- changed
Input schema / properties / bitrate_kbps / descriptionPrevious value: -"Giving it switches rate control to ABR (a size target) and beats 'crf'. Omit for CRF quality mode."New value: +"Aim for a file size instead of a quality level. Setting this overrides the quality slider. Leave it alone unless you have a size you must hit." - added
Input schema / properties / bitrate_kbps / x-show-whenAdded value: +{ + "to": [ + "mp4", + "mov", + "webm", + "mkv", + "avi" + ] +} - added
Input schema / properties / codec / defaultAdded value: +"auto" - changed
Input schema / properties / codec / descriptionPrevious value: -"'auto' picks the container's default. h265 and av1 need Business; a codec the container can't hold 400s."New value: +"How the picture is compressed. Leave it on Automatic unless you know you need otherwise — a compression method the chosen format cannot carry (H.265 in a WebM, say) will fail during conversion. H.265 and AV1 need Business." - changed
Input schema / properties / codec / enumPrevious value: -[ - "auto", - "h264", - "h265", - "vp9", - "av1" -]New value: +[ + "auto", + "h264", + "vp9", + "h265", + "av1" +] - added
Input schema / properties / codec / x-show-whenAdded value: +{ + "to": [ + "mp4", + "mov", + "webm", + "mkv", + "avi" + ] +} - added
Input schema / properties / crfAdded value: +{ + "default": 23, + "description": "Picture quality. Lower is better-looking and bigger; higher is smaller and rougher. 23 is the everyday setting for H.264. Each compression method reads this scale differently - left alone we pick the matching everyday value (28 for H.265, 32 for VP9, 30 for AV1). Out-of-range values are pulled back into range rather than refused, and the whole setting is ignored if you set a data rate or pick a platform preset.", + "maximum": 51, + "minimum": 0, + "type": "integer", + "x-show-when": { + "to": [ + "mp4", + "mov", + "webm", + "mkv", + "avi" + ] + } +} - changed
Input schema / properties / preset_name / descriptionPrevious value: -"Business-only. Wins over 'to', 'codec', 'resolution' and 'bitrate_kbps' — every preset forces h264 mp4. Only set when the user names the platform."New value: +"Make it ready for one place in particular. Picking one sets the format, size, compression and data rate for you and ignores your choices above. Business only." - added
Input schema / properties / resolution / defaultAdded value: +"source" - changed
Input schema / properties / resolution / descriptionPrevious value: -"Default 'source' = no scaling. 1080p and 2160p need Business. Scales by height only; aspect ratio preserved."New value: +"How big the picture should be. 'Source' keeps the original size. Height is set and the shape is kept. 1080p and 4K need Business." - added
Input schema / properties / to / defaultAdded value: +"mp4" - changed
Input schema / properties / to / descriptionPrevious value: -"mkv, avi and gif need Business. GIF output is palette-optimized and defaults to 480p unless 'resolution' says otherwise."New value: +"The format you want back. MP4 plays almost everywhere. MKV, AVI and animated GIF need Business. A GIF is made at 480p unless you set the size below."
- Changed
data_to_file4 fields changed- changed
Input schema / properties / format / descriptionPrevious value: -"What kind of file to write. csv turns a list of values into a spreadsheet; json is pretty-printed."New value: +"What kind of file to write. csv turns a list of values into a spreadsheet — a header row and one row per value — and anything it cannot tabulate becomes a single column. json is pretty-printed, and data that is not valid JSON is saved as plain text instead." - added
Input schema / properties / name / defaultAdded value: +"data" - changed
Input schema / properties / name / descriptionPrevious value: -"Optional file name without the extension (default: data)."New value: +"File name without the extension — the extension comes from the format above. Anything over 80 characters is shortened." - changed
Input schema / properties / text / descriptionPrevious value: -"The data to save — normally an earlier step's output, e.g. {{step_1.text}} or {{step_1.palette}}."New value: +"The result to save. Point this at the earlier step whose text or data you want in the file — the colour palette, the password, the extracted text."
- Changed
email_file3 fields changed- changed
Input schema / properties / note / descriptionPrevious value: -"Optional one-line note to include in the email body."New value: +"Optional one-line note to put in the email body. The mail is sent from your own connected Google account, to you — files up to 5 MB." - added
Input schema / properties / subject / defaultAdded value: +"Your file is ready" - changed
Input schema / properties / subject / descriptionPrevious value: -"Optional subject line. Defaults to 'Your file is ready'."New value: +"Subject line of the email."
- Changed
esign_place1 field changed- changed
Input schema / properties / fields / descriptionPrevious value: -"JSON array of field placements: [{page,x,y,w,h,type,value,font_size,image_b64}]"New value: +"Where each signature, initial, date or text box sits on the page. Build these on the PDF E-Signature page — it draws them on the document and gives you this value — then paste it here. Up to 100 placements; each names a page, a box in points from that page's top-left corner, and a type: signature, initial, date or text."
- Changed
files_zip1 field changed- changed
Input schema / properties / name / descriptionPrevious value: -"Optional name for the archive, without .zip (default: files)."New value: +"Name for the archive, without .zip. Leave it blank and the archive is named johns-essentials- plus today's date."
- Changed
generate_ascii_art6 fields changed- changed
Input schema / properties / file / descriptionPrevious value: -"Image to convert. REQUIRED when mode=image (max 10MB)."New value: +"The picture to convert (max 10 MB)." - added
Input schema / properties / file / x-show-whenAdded value: +{ + "mode": [ + "image" + ] +} - changed
Input schema / properties / font / enumPrevious value: -[ - "standard", - "banner", - "big", - "block", - "bubble", - "digital", - "lean", - "mini", - "script", - "shadow", - "slant", - "small" -]New value: +[ + "standard", + "big", + "block", + "banner", + "bubble", + "digital", + "ivrit", + "lean", + "mini", + "mnemonic", + "script", + "shadow", + "slant", + "small", + "smscript", + "smshadow", + "smslant", + "term" +] - changed
Input schema / properties / mode / descriptionPrevious value: -"Turn words into a banner, or turn a picture into characters."New value: +"Draw your words as big letters, or turn a picture into characters. If you attach a picture and type nothing, picture mode is used automatically." - changed
Input schema / properties / text / descriptionPrevious value: -"The words to render as a banner. Up to 100 characters."New value: +"The words to draw. Longer than 100 characters is trimmed." - changed
Input schema / properties / width / descriptionPrevious value: -"How many characters wide the picture is drawn."New value: +"How many characters wide the picture is."
- Changed
generate_barcode5 fields changed- changed
Input schema / properties / height / descriptionPrevious value: -"Output height in px. Width is derived automatically (height×3; square for qr/datamatrix) — there is no 'width' parameter."New value: +"How tall the bars are, in pixels. The width follows automatically." - changed
Input schema / properties / height / minimumPrevious value: -1New value: +50 - added
Input schema / properties / showTextAdded value: +{ + "default": true, + "description": "Print the encoded digits underneath the bars, so a cashier can key them in if a scan fails.", + "type": "boolean" +} - changed
Input schema / properties / type / descriptionPrevious value: -"Symbology. Unknown types fall back to code128."New value: +"Which barcode standard to make. Code 128 takes any text or number; EAN-13 needs 12-13 digits and EAN-8 needs 7-8; UPC-A needs 11-12; Code 39 takes capitals and digits; ITF-14 needs 13-14 digits; Data Matrix, PDF417 and QR are the square ones that hold any text. Anything we do not recognise is made as a Code 128." - added
Input schema / properties / type / x-uiAdded value: +{ + "labels": { + "code128": "Code 128", + "code39": "Code 39", + "datamatrix": "Data Matrix", + "ean13": "EAN-13", + "ean8": "EAN-8", + "itf14": "ITF-14", + "pdf417": "PDF417", + "qr": "QR Code", + "upca": "UPC-A" + } +}
- Changed
generate_certificate2 fields changed- changed
Input schema / properties / template / descriptionPrevious value: -"Accepted but does NOT change the layout — every template renders identically today; use borderStyle for the look."New value: +"Kept for older calls; it does not change the certificate. Set the heading with Cert title and the look with Border style." - added
Input schema / properties / template / x-show-whenAdded value: +{ + "borderStyle": [ + "__never" + ] +}
- Changed
generate_favicon1 field changed- added
Input schema / properties / backgroundAdded value: +{ + "default": "none", + "description": "Fill behind a logo that is not square. None leaves it see-through, which suits both light and dark browser tabs. A hex colour such as #1a1a1a is also accepted; anything we do not recognise is treated as see-through.", + "enum": [ + "none", + "white", + "black", + "gray", + "silver", + "red", + "green", + "blue", + "yellow", + "orange", + "purple", + "pink", + "brown", + "navy", + "teal", + "cyan", + "magenta" + ], + "type": "string", + "x-ui": { + "labels": { + "none": "See-through" + } + } +}
- Changed
generate_hash4 fields changed- changed
Input schema / properties / file / descriptionPrevious value: -"Optional file to hash instead of text."New value: +"A file to hash instead of typed text. If you attach one, the file wins." - changed
Input schema / properties / text / descriptionPrevious value: -"Text to hash. Required unless 'file' is provided."New value: +"The text to hash. Leave it blank when you are hashing a file instead." - added
Input schema / properties / text / titleAdded value: +"Text to hash" - changed
Input schema / requiredPrevious value: -[ - "text" -]New value: +[]
- Changed
generate_invoice2 fields changed- changed
Input schema / properties / discountPercent / descriptionPrevious value: -"Percent of subtotal subtracted. Unvalidated — over 100 yields a negative total. Row hidden when 0."New value: +"Percent added to the subtotal. At 0 the tax line is left off the invoice." - changed
Input schema / properties / taxPercent / descriptionPrevious value: -"Percent of subtotal added on top. Unvalidated; the tax row appears only when greater than 0."New value: +"Percent added to the subtotal. At 0 the tax line is left off the invoice."
- Changed
generate_password10 fields changed- changed
Input schema / properties / length / descriptionPrevious value: -"Characters per password. Values over 256 silently clamp to 256; zero or negative resets to the default 16."New value: +"Characters per password." - changed
Input schema / properties / length / minimumPrevious value: -1New value: +4 - changed
Input schema / properties / lowercase / defaultPrevious value: -falseNew value: +true - changed
Input schema / properties / lowercase / descriptionPrevious value: -"Include lowercase letters. NOT implied by the other flags — sending only uppercase/numbers/symbols=true yields a password with no lowercase."New value: +"Include small letters a-z. Turning all four off is the same as leaving all four on." - changed
Input schema / properties / numbers / defaultPrevious value: -falseNew value: +true - changed
Input schema / properties / numbers / descriptionPrevious value: -"Include digits 0-9. Class flags work jointly: all four false/omitted = every class enabled."New value: +"Include digits 0-9. Turning all four off is the same as leaving all four on." - changed
Input schema / properties / symbols / defaultPrevious value: -falseNew value: +true - changed
Input schema / properties / symbols / descriptionPrevious value: -"Include symbols from !@#$%^&*()-_=+[]{}|;:,.<>? — quotes, backslash, backtick, tilde and slash are never used."New value: +"Include symbols from !@#$%^&*()-_=+[]{}|;:,.<>? - quotes, backslash, backtick, tilde and slash are never used. Turning all four off is the same as leaving all four on." - changed
Input schema / properties / uppercase / defaultPrevious value: -falseNew value: +true - changed
Input schema / properties / uppercase / descriptionPrevious value: -"Include uppercase letters. If ALL four class flags (uppercase/lowercase/numbers/symbols) are omitted or false, all classes are used."New value: +"Include capital letters A-Z. Turning all four off is the same as leaving all four on."
- Changed
generate_placeholder_image2 fields changed- changed
Input schema / properties / format / descriptionPrevious value: -"Sets the response MIME (png/jpg/jpeg/webp). Unrecognized values get mislabeled as PNG — stick to the enum."New value: +"Image file type to save as." - changed
Input schema / properties / format / enumPrevious value: -[ - "png", - "jpg", - "jpeg", - "webp" -]New value: +[ + "png", + "jpg", + "webp" +]
- Changed
generate_qr_code2 fields changed- changed
Input schema / properties / size / descriptionPrevious value: -"Image size in pixels (max 2000)"New value: +"Width and height of the square image, in pixels." - changed
Input schema / properties / size / minimumPrevious value: -1New value: +200
- Changed
media_add_watermark4 fields changed- added
Input schema / properties / fontsizeAdded value: +{ + "default": 0, + "description": "Text size in pixels. Leave it at 0 and the size is worked out from the video's own height - about 36 on a 1080p video. Sizes below 6 are treated the same as 0.", + "maximum": 400, + "minimum": 0, + "type": "integer" +} - changed
Input schema / properties / opacity / descriptionPrevious value: -"Fraction 0.0-1.0; invalid values fall back to 0.7."New value: +"How solid the watermark looks: 1 is fully solid, 0.3 is a faint ghost." - changed
Input schema / properties / position / descriptionPrevious value: -"No hyphens — 'bottomright', not 'bottom-right'. Unknown values fall back to bottomright."New value: +"Which corner of the frame the watermark sits in." - added
Input schema / properties / position / x-uiAdded value: +{ + "labels": { + "bottomleft": "Bottom left", + "bottomright": "Bottom right", + "center": "Centre", + "topleft": "Top left", + "topright": "Top right" + } +}
- Changed
media_extract_audio1 field changed- changed
Input schema / properties / format / descriptionPrevious value: -"Values outside the enum are a 400, not a silent fallback. wav/flac come back lossless; mp3/ogg/aac are lossy re-encodes."New value: +"What to save the soundtrack as. WAV and FLAC keep every bit of the original; MP3, OGG and AAC are smaller but re-compressed."
- Changed
media_extract_frames5 fields changed- changed
Input schema / properties / fps / descriptionPrevious value: -"Frames per second to extract"New value: +"How many frames to take per second of video. 1 means one frame a second." - changed
Input schema / properties / fps / maximumPrevious value: -1000New value: +30 - changed
Input schema / properties / fps / minimumPrevious value: -0.01New value: +0.1 - changed
Input schema / properties / max / descriptionPrevious value: -"Maximum number of frames to extract."New value: +"Stop after this many frames, however long the video is." - added
Input schema / properties / max / titleAdded value: +"Most frames to take"
- Changed
octopus_list1 field changed- changed
Input schema / properties / folder / descriptionPrevious value: -"Optional folder path, e.g. /Tax/2026. Omit for all recent files."New value: +"Folder to list, written exactly as it is stored, closing slash included: /Tax/2026/. Leave blank for every recent file."
- Changed
pdf_compress6 fields changed- changed
Input schema / properties / metadataOnly / descriptionPrevious value: -"Strip metadata only (Ghostscript pdfmark) — no image downsampling."New value: +"Only strip the hidden details - author, title, producing software - and leave every page exactly as it is." - changed
Input schema / properties / quality / descriptionPrevious value: -"Compression preset: light=300dpi, balanced=150dpi, mobile=96dpi, maximum=72dpi. Unknown values (including low/medium/high) silently fall back to balanced."New value: +"How hard to squeeze. Light keeps print quality (300 DPI); balanced is the everyday choice (150 DPI); mobile (96 DPI) and maximum (72 DPI) trade sharpness for size." - added
Input schema / properties / quality / x-show-whenAdded value: +{ + "metadataOnly": [ + "false" + ] +} - changed
Input schema / properties / targetSize / descriptionPrevious value: -"Target output size. When set, compresses iteratively to fit and overrides 'quality'."New value: +"Squeeze until the file fits this size. Overrides the preset above." - added
Input schema / properties / targetSize / titleAdded value: +"Squeeze down to" - added
Input schema / properties / targetSize / x-show-whenAdded value: +{ + "metadataOnly": [ + "false" + ] +}
- Changed
pdf_crop8 fields changed- changed
Input schema / properties / bottom / descriptionPrevious value: -"Bottom crop in points."New value: +"How much to cut off the bottom edge, in points - 72 points is one inch. 0 leaves this edge alone. Cut away more than the page holds and you get a 1-point page rather than an error." - changed
Input schema / properties / bottom / maximumPrevious value: -14400New value: +288 - changed
Input schema / properties / left / descriptionPrevious value: -"Left crop in points."New value: +"How much to cut off the left edge, in points - 72 points is one inch. 0 leaves this edge alone. Cut away more than the page holds and you get a 1-point page rather than an error." - changed
Input schema / properties / left / maximumPrevious value: -14400New value: +288 - changed
Input schema / properties / right / descriptionPrevious value: -"Right crop in points."New value: +"How much to cut off the right edge, in points - 72 points is one inch. 0 leaves this edge alone. Cut away more than the page holds and you get a 1-point page rather than an error." - changed
Input schema / properties / right / maximumPrevious value: -14400New value: +288 - changed
Input schema / properties / top / descriptionPrevious value: -"Top crop in points. 0 = no crop on this edge."New value: +"How much to cut off the top edge, in points - 72 points is one inch. 0 leaves this edge alone. Cut away more than the page holds and you get a 1-point page rather than an error." - changed
Input schema / properties / top / maximumPrevious value: -14400New value: +288
- Changed
pdf_excel_to_pdf26 fields changed- changed
Input schema / properties / gridlines / descriptionPrevious value: -"Show gridlines. Empty leaves the sheet's own setting."New value: +"Print the faint grid between cells. Leave blank to keep whatever the sheet already does." - changed
Input schema / properties / gridlines / enumPrevious value: -[ - "", - "true", - "false" -]New value: +[ + "true", + "false" +] - added
Input schema / properties / gridlines / x-uiAdded value: +{ + "labels": { + "false": "Hide gridlines", + "true": "Show gridlines" + } +} - added
Input schema / properties / margins / x-uiAdded value: +{ + "labels": { + "default": "Keep the sheet's own margins", + "narrow": "Narrow", + "normal": "Normal", + "wide": "Wide" + } +} - changed
Input schema / properties / pdfa / descriptionPrevious value: -"Archival PDF/A output. 2b is the safe default."New value: +"Save in the PDF/A archive format, which embeds everything the file needs to open correctly in decades' time. Off unless you need it; 2b is the version most archives ask for." - added
Input schema / properties / pdfa / x-uiAdded value: +{ + "labels": { + "1b": "PDF/A-1b", + "2b": "PDF/A-2b (most asked for)", + "3b": "PDF/A-3b", + "none": "Ordinary PDF" + } +} - changed
Input schema / properties / permPassword / descriptionPrevious value: -"Owner password for permission restrictions. Optional."New value: +"A second, different password that locks printing, copying and editing. Only takes effect if you also set an open password above." - added
Input schema / properties / permPassword / titleAdded value: +"Owner password" - changed
Input schema / properties / quality / descriptionPrevious value: -"Output compression quality preset."New value: +"How sharp the pictures and charts stay in the PDF. Leave blank for the converter's own setting." - changed
Input schema / properties / quality / enumPrevious value: -[ - "", - "low", - "medium", - "high" -]New value: +[ + "low", + "medium", + "high" +] - added
Input schema / properties / quality / x-uiAdded value: +{ + "labels": { + "high": "Best quality (no downsizing)", + "low": "Smallest file (96 DPI pictures)", + "medium": "Balanced (150 DPI pictures)" + } +} - changed
Input schema / properties / scale / descriptionPrevious value: -"Print scaling percent. Overrides fitToPage when set."New value: +"Print size as a percentage, where 100 is life size and less shrinks the sheet to fit more on a page. Leave it blank unless you want a specific percentage - setting any value here turns Fit to page off." - added
Input schema / properties / scale / x-show-whenAdded value: +{ + "fitToPage": [ + "none" + ] +} - added
Input schema / properties / sheets / defaultAdded value: +"all" - changed
Input schema / properties / sheets / descriptionPrevious value: -"Sheet selection: 'all', comma-separated names (e.g. 'Sales,Ledger'), or comma-separated 0-based indexes (e.g. '0,2'). Non-selected sheets are hidden before conversion."New value: +"Which sheets to convert: all, or the names or positions you want — Sales,Ledger or 0,2." - changed
Input schema / properties / showHeaders / descriptionPrevious value: -"Show row/column headers (A/B/C + 1/2/3). Empty leaves the sheet's own setting."New value: +"Print the A B C column letters and 1 2 3 row numbers down the edges. Leave blank to keep the sheet's own setting." - changed
Input schema / properties / showHeaders / enumPrevious value: -[ - "", - "true", - "false" -]New value: +[ + "true", + "false" +] - added
Input schema / properties / showHeaders / x-uiAdded value: +{ + "labels": { + "false": "Hide row & column headings", + "true": "Show row & column headings" + } +} - changed
Input schema / properties / splitMode / descriptionPrevious value: -"combined = one multi-page PDF; per-sheet = ZIP with one PDF per sheet."New value: +"One PDF containing every sheet, or a ZIP holding one PDF per sheet." - added
Input schema / properties / watermarkColorAdded value: +{ + "default": "#808080", + "description": "Colour of the watermark lettering, as #rgb or #rrggbb. Anything else becomes mid-grey. Only used when there is watermark text.", + "type": "string" +} - added
Input schema / properties / watermarkFontAdded value: +{ + "default": "Helvetica", + "description": "Lettering style for the watermark. Latin alphabet only. Only used when there is watermark text.", + "enum": [ + "Helvetica", + "Times-Roman", + "Courier" + ], + "type": "string" +} - added
Input schema / properties / watermarkFontSizeAdded value: +{ + "default": 48, + "description": "Height of the watermark lettering in points. Only used when there is watermark text.", + "maximum": 1000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / watermarkOpacityAdded value: +{ + "default": 0.3, + "description": "How solid the watermark looks: 1 is fully solid, 0.3 is a faint ghost. This is a fraction, not a percent. Only used when there is watermark text.", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / watermarkPositionAdded value: +{ + "default": "c", + "description": "Where the watermark sits on the page. Only used when there is watermark text.", + "enum": [ + "c", + "tl", + "tc", + "tr", + "ml", + "mr", + "bl", + "bc", + "br" + ], + "type": "string", + "x-ui": { + "labels": { + "bc": "Bottom centre", + "bl": "Bottom left", + "br": "Bottom right", + "c": "Centre", + "ml": "Middle left", + "mr": "Middle right", + "tc": "Top centre", + "tl": "Top left", + "tr": "Top right" + } + } +} - added
Input schema / properties / watermarkRotationAdded value: +{ + "default": 45, + "description": "Angle of the watermark in whole degrees; 45 is the classic diagonal. Only used when there is watermark text.", + "maximum": 180, + "minimum": -180, + "type": "integer" +} - added
Input schema / properties / watermarkScaleAdded value: +{ + "default": 1, + "description": "Size multiplier applied on top of the lettering size. Only used when there is watermark text.", + "maximum": 20, + "minimum": 0.01, + "type": "number" +}
- Changed
pdf_excel_to_pdf_batch26 fields changed- changed
Input schema / properties / gridlines / descriptionPrevious value: -"Show gridlines. Empty leaves the sheet's own setting."New value: +"Print the faint grid between cells. Leave blank to keep whatever the sheet already does." - changed
Input schema / properties / gridlines / enumPrevious value: -[ - "", - "true", - "false" -]New value: +[ + "true", + "false" +] - added
Input schema / properties / gridlines / x-uiAdded value: +{ + "labels": { + "false": "Hide gridlines", + "true": "Show gridlines" + } +} - added
Input schema / properties / margins / x-uiAdded value: +{ + "labels": { + "default": "Keep the sheet's own margins", + "narrow": "Narrow", + "normal": "Normal", + "wide": "Wide" + } +} - changed
Input schema / properties / pdfa / descriptionPrevious value: -"Archival PDF/A output. 2b is the safe default."New value: +"Save in the PDF/A archive format, which embeds everything the file needs to open correctly in decades' time. Off unless you need it; 2b is the version most archives ask for." - added
Input schema / properties / pdfa / x-uiAdded value: +{ + "labels": { + "1b": "PDF/A-1b", + "2b": "PDF/A-2b (most asked for)", + "3b": "PDF/A-3b", + "none": "Ordinary PDF" + } +} - changed
Input schema / properties / permPassword / descriptionPrevious value: -"Owner password for permission restrictions. Optional."New value: +"A second, different password that locks printing, copying and editing. Only takes effect if you also set an open password above." - added
Input schema / properties / permPassword / titleAdded value: +"Owner password" - changed
Input schema / properties / quality / descriptionPrevious value: -"Output compression quality preset."New value: +"How sharp the pictures and charts stay in the PDF. Leave blank for the converter's own setting." - changed
Input schema / properties / quality / enumPrevious value: -[ - "", - "low", - "medium", - "high" -]New value: +[ + "low", + "medium", + "high" +] - added
Input schema / properties / quality / x-uiAdded value: +{ + "labels": { + "high": "Best quality (no downsizing)", + "low": "Smallest file (96 DPI pictures)", + "medium": "Balanced (150 DPI pictures)" + } +} - changed
Input schema / properties / scale / descriptionPrevious value: -"Print scaling percent. Overrides fitToPage when set."New value: +"Print size as a percentage, where 100 is life size and less shrinks the sheet to fit more on a page. Leave it blank unless you want a specific percentage - setting any value here turns Fit to page off." - added
Input schema / properties / scale / x-show-whenAdded value: +{ + "fitToPage": [ + "none" + ] +} - added
Input schema / properties / sheets / defaultAdded value: +"all" - changed
Input schema / properties / sheets / descriptionPrevious value: -"Sheet selection: 'all', comma-separated names (e.g. 'Sales,Ledger'), or comma-separated 0-based indexes (e.g. '0,2'). Non-selected sheets are hidden before conversion."New value: +"Which sheets to convert: all, or the names or positions you want — Sales,Ledger or 0,2." - changed
Input schema / properties / showHeaders / descriptionPrevious value: -"Show row/column headers (A/B/C + 1/2/3). Empty leaves the sheet's own setting."New value: +"Print the A B C column letters and 1 2 3 row numbers down the edges. Leave blank to keep the sheet's own setting." - changed
Input schema / properties / showHeaders / enumPrevious value: -[ - "", - "true", - "false" -]New value: +[ + "true", + "false" +] - added
Input schema / properties / showHeaders / x-uiAdded value: +{ + "labels": { + "false": "Hide row & column headings", + "true": "Show row & column headings" + } +} - changed
Input schema / properties / splitMode / descriptionPrevious value: -"combined = one multi-page PDF; per-sheet = ZIP with one PDF per sheet."New value: +"One PDF containing every sheet, or a ZIP holding one PDF per sheet." - added
Input schema / properties / watermarkColorAdded value: +{ + "default": "#808080", + "description": "Colour of the watermark lettering, as #rgb or #rrggbb. Anything else becomes mid-grey. Only used when there is watermark text.", + "type": "string" +} - added
Input schema / properties / watermarkFontAdded value: +{ + "default": "Helvetica", + "description": "Lettering style for the watermark. Latin alphabet only. Only used when there is watermark text.", + "enum": [ + "Helvetica", + "Times-Roman", + "Courier" + ], + "type": "string" +} - added
Input schema / properties / watermarkFontSizeAdded value: +{ + "default": 48, + "description": "Height of the watermark lettering in points. Only used when there is watermark text.", + "maximum": 1000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / watermarkOpacityAdded value: +{ + "default": 0.3, + "description": "How solid the watermark looks: 1 is fully solid, 0.3 is a faint ghost. This is a fraction, not a percent. Only used when there is watermark text.", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / watermarkPositionAdded value: +{ + "default": "c", + "description": "Where the watermark sits on the page. Only used when there is watermark text.", + "enum": [ + "c", + "tl", + "tc", + "tr", + "ml", + "mr", + "bl", + "bc", + "br" + ], + "type": "string", + "x-ui": { + "labels": { + "bc": "Bottom centre", + "bl": "Bottom left", + "br": "Bottom right", + "c": "Centre", + "ml": "Middle left", + "mr": "Middle right", + "tc": "Top centre", + "tl": "Top left", + "tr": "Top right" + } + } +} - added
Input schema / properties / watermarkRotationAdded value: +{ + "default": 45, + "description": "Angle of the watermark in whole degrees; 45 is the classic diagonal. Only used when there is watermark text.", + "maximum": 180, + "minimum": -180, + "type": "integer" +} - added
Input schema / properties / watermarkScaleAdded value: +{ + "default": 1, + "description": "Size multiplier applied on top of the lettering size. Only used when there is watermark text.", + "maximum": 20, + "minimum": 0.01, + "type": "number" +}
- Changed
pdf_flatten11 fields changed- changed
Input schema / properties / compressPreset / descriptionPrevious value: -"screen|ebook|printer|prepress (Ghostscript). Read only when compressImages=true; unknown → ebook. screen=72dpi, printer/prepress=300dpi."New value: +"How hard to squeeze the pictures: screen 72 DPI, ebook 150 DPI, printer and prepress 300 DPI." - added
Input schema / properties / compressPreset / x-show-whenAdded value: +{ + "compressImages": [ + "true" + ] +} - changed
Input schema / properties / exportData / descriptionPrevious value: -"Return a ZIP containing the flattened PDF plus form_values.json and annotations.json side files."New value: +"Also give me the form answers and note text as separate files. You get a ZIP containing the flattened PDF plus form_values.json and annotations.json - not a PDF." - changed
Input schema / properties / ocrLang / descriptionPrevious value: -"Allowlist: eng fra spa deu ita por nld pol chi_sim jpn kor ara rus hin; unknown → eng. Read only when ocrFirst=true (paid OCR tier)."New value: +"Which language the scanned text is in." - added
Input schema / properties / ocrLang / x-show-whenAdded value: +{ + "ocrFirst": [ + "true" + ] +} - added
Input schema / properties / ocrLang / x-uiAdded value: +{ + "labels": { + "ara": "Arabic", + "chi_sim": "Chinese (Simplified)", + "deu": "German", + "eng": "English", + "fra": "French", + "hin": "Hindi", + "ita": "Italian", + "jpn": "Japanese", + "kor": "Korean", + "nld": "Dutch", + "pol": "Polish", + "por": "Portuguese", + "rus": "Russian", + "spa": "Spanish" + } +} - changed
Input schema / properties / signatureMode / descriptionPrevious value: -"preserve = return original when signatures detected; ignore = flatten anyway (invalidates sigs); block = 409 error."New value: +"What to do if the PDF has been digitally signed. Flattening destroys a signature, so by default we hand the original back untouched." - added
Input schema / properties / signatureMode / x-uiAdded value: +{ + "labels": { + "block": "Stop and tell me", + "ignore": "Flatten anyway (breaks the signature)", + "preserve": "Leave signed files untouched" + } +} - changed
Input schema / properties / watermarkPosition / descriptionPrevious value: -"pdfcpu anchor: c tl tc tr ml mr bl bc br (ml/mr are folded to the engine's l/r); unknown → c (center). Read only when watermarkText is set."New value: +"Where the watermark sits on the page. Only used when there is watermark text." - added
Input schema / properties / watermarkPosition / x-uiAdded value: +{ + "labels": { + "bc": "Bottom centre", + "bl": "Bottom left", + "br": "Bottom right", + "c": "Centre", + "ml": "Middle left", + "mr": "Middle right", + "tc": "Top centre", + "tl": "Top left", + "tr": "Top right" + } +} - removed
Input schema / properties / watermarkTileRemoved value: -{ - "default": false, - "description": "NOT available here — true returns a clear error (the flatten tile path is broken in the pinned engine; run pdf_watermark, which tiles, before flattening).", - "type": "boolean" -}
- Changed
pdf_flatten_batch11 fields changed- changed
Input schema / properties / compressPreset / descriptionPrevious value: -"screen|ebook|printer|prepress (Ghostscript). Read only when compressImages=true; unknown → ebook. screen=72dpi, printer/prepress=300dpi."New value: +"How hard to squeeze the pictures: screen 72 DPI, ebook 150 DPI, printer and prepress 300 DPI." - added
Input schema / properties / compressPreset / x-show-whenAdded value: +{ + "compressImages": [ + "true" + ] +} - changed
Input schema / properties / exportData / descriptionPrevious value: -"Return a ZIP containing the flattened PDF plus form_values.json and annotations.json side files."New value: +"Also give me the form answers and note text as separate files. You get a ZIP containing the flattened PDF plus form_values.json and annotations.json - not a PDF." - changed
Input schema / properties / ocrLang / descriptionPrevious value: -"Allowlist: eng fra spa deu ita por nld pol chi_sim jpn kor ara rus hin; unknown → eng. Read only when ocrFirst=true (paid OCR tier)."New value: +"Which language the scanned text is in." - added
Input schema / properties / ocrLang / x-show-whenAdded value: +{ + "ocrFirst": [ + "true" + ] +} - added
Input schema / properties / ocrLang / x-uiAdded value: +{ + "labels": { + "ara": "Arabic", + "chi_sim": "Chinese (Simplified)", + "deu": "German", + "eng": "English", + "fra": "French", + "hin": "Hindi", + "ita": "Italian", + "jpn": "Japanese", + "kor": "Korean", + "nld": "Dutch", + "pol": "Polish", + "por": "Portuguese", + "rus": "Russian", + "spa": "Spanish" + } +} - changed
Input schema / properties / signatureMode / descriptionPrevious value: -"preserve = return original when signatures detected; ignore = flatten anyway (invalidates sigs); block = 409 error."New value: +"What to do if the PDF has been digitally signed. Flattening destroys a signature, so by default we hand the original back untouched." - added
Input schema / properties / signatureMode / x-uiAdded value: +{ + "labels": { + "block": "Stop and tell me", + "ignore": "Flatten anyway (breaks the signature)", + "preserve": "Leave signed files untouched" + } +} - changed
Input schema / properties / watermarkPosition / descriptionPrevious value: -"pdfcpu anchor: c tl tc tr ml mr bl bc br (ml/mr are folded to the engine's l/r); unknown → c (center). Read only when watermarkText is set."New value: +"Where the watermark sits on the page. Only used when there is watermark text." - added
Input schema / properties / watermarkPosition / x-uiAdded value: +{ + "labels": { + "bc": "Bottom centre", + "bl": "Bottom left", + "br": "Bottom right", + "c": "Centre", + "ml": "Middle left", + "mr": "Middle right", + "tc": "Top centre", + "tl": "Top left", + "tr": "Top right" + } +} - removed
Input schema / properties / watermarkTileRemoved value: -{ - "default": false, - "description": "NOT available here — true returns a clear error (the flatten tile path is broken in the pinned engine; run pdf_watermark, which tiles, before flattening).", - "type": "boolean" -}
- Changed
pdf_grayscale4 fields changed- added
Input schema / properties / modeAdded value: +{ + "default": "gray", + "description": "Grey keeps every shade of the original. Black and white forces each dot to pure black or pure white - smaller, and right for line art or a fax.", + "enum": [ + "gray", + "bw" + ], + "type": "string", + "x-ui": { + "labels": { + "bw": "Pure black and white", + "gray": "Shades of grey" + } + } +} - added
Input schema / properties / outputNameAdded value: +{ + "description": "Optional name for the file you get back. Leave blank and we name it for you.", + "type": "string" +} - added
Input schema / properties / pagesAdded value: +{ + "description": "Which pages to convert, written as 3,7 or 1-5. Leave it blank to convert every page.", + "title": "Only these pages", + "type": "string" +} - added
Input schema / properties / strictAdded value: +{ + "default": false, + "description": "Refuse the job if any page could not be converted, rather than handing back a document with colour pages still in it.", + "title": "Refuse partial answers", + "type": "boolean" +}
- Changed
pdf_header_footer8 fields changed- changed
Input schema / properties / fontFamily / descriptionPrevious value: -"Exactly Helvetica, Times-Roman, or Courier (case-sensitive); anything else silently becomes Helvetica."New value: +"Typeface for the header and footer text." - changed
Input schema / properties / fontSize / descriptionPrevious value: -"Points, integer 6-20; anything outside that range (or non-integer) silently resets to 10."New value: +"Text size in points." - changed
Input schema / properties / footerAlign / descriptionPrevious value: -"left|center|right; unknown values silently become center."New value: +"Line the footer text up left, centred, or right." - changed
Input schema / properties / headerAlign / descriptionPrevious value: -"left|center|right; unknown values silently become center."New value: +"Line the header text up left, centred, or right." - changed
Input schema / properties / margin / descriptionPrevious value: -"Distance from the page edge in points, 10-100; out-of-range or non-numeric silently resets to 30."New value: +"How far in from the edge of the page the text sits, in points (72 = 1 inch)." - changed
Input schema / properties / pageNumberPosition / descriptionPrevious value: -"header or footer; anything else → footer. Only matters when pageNumbers is not 'none'."New value: +"Put the page number in the header or the footer." - added
Input schema / properties / pageNumberPosition / x-show-whenAdded value: +{ + "pageNumbers": [ + "simple", + "pageN", + "nOfTotal", + "pageNOfTotal" + ] +} - added
Input schema / properties / pageNumbers / x-uiAdded value: +{ + "labels": { + "nOfTotal": "7 of 12", + "none": "No page numbers", + "pageN": "Page 7", + "pageNOfTotal": "Page 7 of 12", + "simple": "7" + } +}
- Changed
pdf_images_to_pdf6 fields changed- added
Input schema / properties / autoOrientAdded value: +{ + "default": true, + "description": "Turn photos the right way up using the camera's own rotation tag. On by default — switch it off only if you want the raw pixels exactly as stored.", + "type": "boolean" +} - changed
Input schema / properties / files / descriptionPrevious value: -"Input files (JPG, PNG, TIFF)"New value: +"Input files (JPG, JPEG, PNG, WEBP)" - added
Input schema / properties / fitModeAdded value: +{ + "default": "contain", + "description": "How each picture sits on the page.", + "enum": [ + "contain", + "fill" + ], + "type": "string", + "x-show-when": { + "pageSize": [ + "a4", + "a4-landscape", + "letter", + "letter-landscape", + "legal", + "legal-landscape", + "a3", + "a3-landscape", + "a5", + "a5-landscape", + "tabloid", + "tabloid-landscape" + ] + }, + "x-ui": { + "labels": { + "contain": "Show the whole picture", + "fill": "Fill the page (crops the edges)" + } + } +} - added
Input schema / properties / marginAdded value: +{ + "default": 0, + "description": "White border around each picture, in points - 72 points is one inch. A margin so large that nothing is left for the picture is ignored rather than refused.", + "maximum": 200, + "minimum": 0, + "type": "integer", + "x-show-when": { + "pageSize": [ + "a4", + "a4-landscape", + "letter", + "letter-landscape", + "legal", + "legal-landscape", + "a3", + "a3-landscape", + "a5", + "a5-landscape", + "tabloid", + "tabloid-landscape" + ] + } +} - added
Input schema / properties / orientationAdded value: +{ + "description": "Leave blank to follow the page size you picked.", + "enum": [ + "portrait", + "landscape", + "auto" + ], + "type": "string", + "x-show-when": { + "pageSize": [ + "a4", + "a4-landscape", + "letter", + "letter-landscape", + "legal", + "legal-landscape", + "a3", + "a3-landscape", + "a5", + "a5-landscape", + "tabloid", + "tabloid-landscape" + ] + }, + "x-ui": { + "labels": { + "auto": "Match each picture", + "landscape": "Landscape", + "portrait": "Portrait" + } + } +} - added
Input schema / properties / pageSizeAdded value: +{ + "default": "fit", + "description": "Fit makes every page exactly the size of its own picture, so a phone photo becomes a page yards across. Any fixed size gives one uniform, printable document.", + "enum": [ + "fit", + "a4", + "a4-landscape", + "letter", + "letter-landscape", + "legal", + "legal-landscape", + "a3", + "a3-landscape", + "a5", + "a5-landscape", + "tabloid", + "tabloid-landscape" + ], + "type": "string", + "x-ui": { + "labels": { + "a3": "A3 portrait", + "a3-landscape": "A3 landscape", + "a4": "A4 portrait", + "a4-landscape": "A4 landscape", + "a5": "A5 portrait", + "a5-landscape": "A5 landscape", + "fit": "Fit the page to the picture", + "legal": "Legal portrait", + "legal-landscape": "Legal landscape", + "letter": "Letter portrait", + "letter-landscape": "Letter landscape", + "tabloid": "Tabloid portrait", + "tabloid-landscape": "Tabloid landscape" + } + } +}
- Changed
pdf_merge2 fields changed- changed
Input schema / properties / pageRanges / descriptionPrevious value: -"Optional per-file page selection aligned with the files order, e.g. '1-3,5'. The multipart field name is 'pageRanges[]' (with brackets)."New value: +"Leave blank to use every page. To take only part of a file, give its pages in the same order as the files themselves — 1-3 for the first, 2,5 for the second." - added
Input schema / properties / pageRanges / titleAdded value: +"Pages to take from each file"
- Changed
pdf_page_numbers4 fields changed- changed
Input schema / properties / position / descriptionPrevious value: -"Short codes ONLY: bc=bottom-center, bl=bottom-left, br=bottom-right, tc=top-center, tl=top-left, tr=top-right. Long names like 'bottom-right' are NOT recognized and silently fall back to bottom-center."New value: +"Where the number sits on the page." - added
Input schema / properties / position / x-uiAdded value: +{ + "labels": { + "bc": "Bottom centre", + "bl": "Bottom left", + "br": "Bottom right", + "tc": "Top centre", + "tl": "Top left", + "tr": "Top right" + } +} - changed
Input schema / properties / start / descriptionPrevious value: -"Starting number. Field name is 'start' — not 'start_number'."New value: +"The number printed on the first numbered page." - changed
Input schema / properties / start / maximumPrevious value: -999999New value: +999
- Changed
pdf_protect9 fields changed- changed
Input schema / properties / encryption / descriptionPrevious value: -"Encryption strength."New value: +"How strongly the file is locked." - added
Input schema / properties / encryption / x-uiAdded value: +{ + "labels": { + "aes128": "AES-128 (compatible)", + "aes256": "AES-256 (strongest)" + } +} - changed
Input schema / properties / password / descriptionPrevious value: -"Sets BOTH the user and owner password. May be omitted only when userPassword or ownerPassword is provided instead."New value: +"One password used for both opening the file and unlocking its permissions. Leave it blank only if you set an open password or a permissions password below instead - one of the three is needed." - added
Input schema / properties / password / titleAdded value: +"Password" - removed
Input schema / properties / permissions / defaultRemoved value: -"print" - changed
Input schema / properties / permissions / descriptionPrevious value: -"What a reader is still allowed to do after the password is entered."New value: +"What a reader is still allowed to do after they enter the password. Use any of print, copy, edit, annotate, separated by commas - or the single word all. A word we do not recognise is ignored, and if none of them are recognised the reader can do nothing at all, so leave this blank rather than guessing." - removed
Input schema / properties / permissions / enumRemoved value: -[ - "all", - "print", - "print,copy", - "copy", - "annotate", - "edit" -] - removed
Input schema / properties / permissions / x-uiRemoved value: -{ - "labels": { - "all": "Allow everything", - "annotate": "Commenting only", - "copy": "Copying text only", - "edit": "Editing only", - "print": "Printing only", - "print,copy": "Printing and copying text" - } -} - changed
Input schema / requiredPrevious value: -[ - "file", - "password" -]New value: +[ + "file" +]
- Changed
pdf_remove_watermark1 field changed- added
Input schema / properties / passthroughAdded value: +{ + "default": false, + "description": "Some watermarks are painted into the page and cannot be lifted out. Left off, the step stops with an error when that happens. Switch it on and the file is passed through untouched so the rest of the workflow still runs.", + "title": "Carry on if there is nothing to remove", + "type": "boolean" +}
- Changed
pdf_reverse3 fields changed- added
Input schema / properties / outputNameAdded value: +{ + "description": "Optional name for the file you get back. Leave blank and we name it for you.", + "type": "string" +} - added
Input schema / properties / rangesAdded value: +{ + "description": "Reverse only these pages, written as 1-3,7-10. Leave it blank to reverse the whole document.", + "title": "Only these pages", + "type": "string" +} - added
Input schema / properties / reverseTargetAdded value: +{ + "default": "in", + "description": "Which pages the reversal applies to when you have named a range above. Ignored when no range is given.", + "enum": [ + "in", + "off" + ], + "type": "string", + "x-ui": { + "labels": { + "in": "Reverse the pages inside those ranges", + "off": "Reverse everything outside those ranges" + } + } +}
- Changed
pdf_rotate3 fields changed- changed
Input schema / properties / pages / descriptionPrevious value: -"Page ranges e.g. '1-3,5'. Empty = ALL pages — do NOT send 'all'."New value: +"Which pages to turn, e.g. '1-3,5'. Leave blank to turn every page." - changed
Input schema / properties / rotation / descriptionPrevious value: -"Degrees clockwise. The field name is 'rotation' — not 'angle'."New value: +"How far to turn each page, clockwise." - added
Input schema / properties / rotation / x-uiAdded value: +{ + "labels": { + "180": "180° (upside down)", + "270": "90° anticlockwise", + "90": "90° clockwise" + } +}
- Changed
pdf_split5 fields changed- changed
Input schema / properties / chunkSize / descriptionPrevious value: -"Pages per chunk when mode=chunks."New value: +"How many pages go into each output file." - changed
Input schema / properties / chunkSize / maximumPrevious value: -10000New value: +100 - added
Input schema / properties / chunkSize / x-show-whenAdded value: +{ + "mode": [ + "chunks" + ] +} - changed
Input schema / properties / pages / descriptionPrevious value: -"Page range e.g. '1-3,5,7-9'. REQUIRED when mode=range (the default); ignored for other modes."New value: +"Which pages to keep, e.g. '1-3,5,7-9'." - added
Input schema / properties / pages / x-show-whenAdded value: +{ + "mode": [ + "range" + ] +}
- Changed
pdf_to_excel6 fields changed- changed
Input schema / properties / ocrLang / descriptionPrevious value: -"Any Tesseract code, passed raw to ocrmypdf -l (default eng). Read only when ocrFirst=true; on OCR failure extraction continues un-OCR'd."New value: +"The language of the writing in the scan." - added
Input schema / properties / ocrLang / x-show-whenAdded value: +{ + "ocrFirst": [ + "true" + ] +} - added
Input schema / properties / ocrLang / x-uiAdded value: +{ + "labels": { + "ara": "Arabic", + "chi_sim": "Chinese (Simplified)", + "deu": "German", + "eng": "English", + "fra": "French", + "hin": "Hindi", + "ita": "Italian", + "jpn": "Japanese", + "kor": "Korean", + "nld": "Dutch", + "pol": "Polish", + "por": "Portuguese", + "rus": "Russian", + "spa": "Spanish" + } +} - changed
Input schema / properties / sheetMode / descriptionPrevious value: -"XLSX sheet strategy. CSV/TSV/JSON ignore this."New value: +"How the tables are laid out across the workbook's sheets." - added
Input schema / properties / sheetMode / x-show-whenAdded value: +{ + "format": [ + "xlsx" + ] +} - added
Input schema / properties / sheetMode / x-uiAdded value: +{ + "labels": { + "per-page": "One sheet per page", + "per-table": "One sheet per table", + "single": "Everything on one sheet" + } +}
- Changed
pdf_to_excel_batch6 fields changed- changed
Input schema / properties / ocrLang / descriptionPrevious value: -"Any Tesseract code, passed raw to ocrmypdf -l (default eng). Read only when ocrFirst=true; on OCR failure extraction continues un-OCR'd."New value: +"The language of the writing in the scan." - added
Input schema / properties / ocrLang / x-show-whenAdded value: +{ + "ocrFirst": [ + "true" + ] +} - added
Input schema / properties / ocrLang / x-uiAdded value: +{ + "labels": { + "ara": "Arabic", + "chi_sim": "Chinese (Simplified)", + "deu": "German", + "eng": "English", + "fra": "French", + "hin": "Hindi", + "ita": "Italian", + "jpn": "Japanese", + "kor": "Korean", + "nld": "Dutch", + "pol": "Polish", + "por": "Portuguese", + "rus": "Russian", + "spa": "Spanish" + } +} - changed
Input schema / properties / sheetMode / descriptionPrevious value: -"XLSX sheet strategy. CSV/TSV/JSON ignore this."New value: +"How the tables are laid out across the workbook's sheets." - added
Input schema / properties / sheetMode / x-show-whenAdded value: +{ + "format": [ + "xlsx" + ] +} - added
Input schema / properties / sheetMode / x-uiAdded value: +{ + "labels": { + "per-page": "One sheet per page", + "per-table": "One sheet per table", + "single": "Everything on one sheet" + } +}
- Changed
pdf_to_excel_inspect6 fields changed- changed
Input schema / properties / ocrFirst / descriptionPrevious value: -"Run OCR before table extraction (scanned PDFs)."New value: +"Accepted but ignored by the inspector — run pdf_ocr first, then inspect." - added
Input schema / properties / ocrFirst / x-show-whenAdded value: +{ + "engine": [ + "__never" + ] +} - changed
Input schema / properties / ocrLang / descriptionPrevious value: -"OCR language (Tesseract code)."New value: +"Accepted but ignored by the inspector - it never runs OCR. Run PDF OCR first, then inspect." - added
Input schema / properties / ocrLang / x-show-whenAdded value: +{ + "engine": [ + "__never" + ] +} - changed
Input schema / properties / tableIndexes / descriptionPrevious value: -"Comma-separated 0-based table indexes to keep. Empty = all tables."New value: +"Accepted but ignored by the inspector - its whole job is to report every table so you can choose indexes on PDF to Excel afterwards." - added
Input schema / properties / tableIndexes / x-show-whenAdded value: +{ + "engine": [ + "__never" + ] +}
- Changed
pdf_to_images30 fields changed- changed
Input schema / properties / avifQuality / descriptionPrevious value: -"AVIF quality (Starter+)"New value: +"Higher keeps more detail and makes a bigger file." - added
Input schema / properties / avifQuality / x-show-whenAdded value: +{ + "format": [ + "avif" + ] +} - changed
Input schema / properties / backgroundColor / descriptionPrevious value: -"Background for transparent PDFs rendered to non-alpha formats"New value: +"What fills the see-through parts of the page in a format that cannot keep them." - added
Input schema / properties / backgroundColor / x-show-whenAdded value: +{ + "format": [ + "jpg", + "webp" + ] +} - changed
Input schema / properties / jpegQuality / descriptionPrevious value: -"Consulted only when format=jpg. Out-of-range clamps silently to 50-95 — this is not a 0-100 scale."New value: +"Higher keeps more detail and makes a bigger file. 50 is the lowest this tool will go." - added
Input schema / properties / jpegQuality / x-show-whenAdded value: +{ + "format": [ + "jpg", + "tiff" + ] +} - changed
Input schema / properties / maxWidth / descriptionPrevious value: -"Cap width (shrink-only, preserves aspect)"New value: +"Shrink-only width cap in pixels, aspect preserved. Leave blank for no cap — an explicit 0 clamps UP to 100 and shrinks every page." - changed
Input schema / properties / preset / descriptionPrevious value: -"One-click preset bundle. Explicit fields override preset values."New value: +"A ready-made bundle of settings. Anything you set yourself wins over the preset." - changed
Input schema / properties / preset / enumPrevious value: -[ - "", - "web", - "print", - "email", - "archive" -]New value: +[ + "web", + "print", + "email", + "archive" +] - added
Input schema / properties / preset / x-uiAdded value: +{ + "labels": { + "archive": "For keeping (PNG, 300 DPI)", + "email": "For emailing (JPG, 150 DPI)", + "print": "For printing (PNG, 300 DPI)", + "web": "For a web page (WEBP, 96 DPI)" + } +} - changed
Input schema / properties / sheetBackground / descriptionPrevious value: -"Canvas color behind tiles, sheet/filmstrip modes only. #rgb or #rrggbb; invalid hex silently keeps #FFFFFF."New value: +"Colour of the canvas behind the tiles, as #rgb or #rrggbb. Anything we cannot read stays white." - added
Input schema / properties / sheetBackground / titleAdded value: +"Sheet background colour" - added
Input schema / properties / sheetBackground / x-show-whenAdded value: +{ + "mode": [ + "sheet", + "filmstrip" + ] +} - changed
Input schema / properties / sheetColumns / descriptionPrevious value: -"mode=sheet only — filmstrip is always one row. Out-of-range clamps silently to 1-10."New value: +"How many pages sit side by side on the contact sheet." - added
Input schema / properties / sheetColumns / x-show-whenAdded value: +{ + "mode": [ + "sheet" + ] +} - changed
Input schema / properties / sheetGap / descriptionPrevious value: -"Pixel spacing between tiles in sheet/filmstrip modes. Out-of-range clamps silently to 0-200."New value: +"Spacing between the tiles, in pixels." - added
Input schema / properties / sheetGap / x-show-whenAdded value: +{ + "mode": [ + "sheet", + "filmstrip" + ] +} - changed
Input schema / properties / tiffCompression / descriptionPrevious value: -"TIFF compression (format=tiff only)."New value: +"How the TIFF is packed down." - added
Input schema / properties / tiffCompression / x-show-whenAdded value: +{ + "format": [ + "tiff" + ] +} - added
Input schema / properties / tiffCompression / x-uiAdded value: +{ + "labels": { + "g4": "Group 4 (black and white)", + "jpeg": "JPEG (smaller, lossy)", + "lzw": "LZW (lossless, default)", + "none": "None (largest)", + "packbits": "PackBits (lossless)", + "zip": "ZIP (lossless)" + } +} - changed
Input schema / properties / transparent / descriptionPrevious value: -"PNG alpha channel when true"New value: +"Leave the paper see-through instead of white." - added
Input schema / properties / transparent / x-show-whenAdded value: +{ + "colorMode": [ + "rgb" + ], + "format": [ + "png", + "webp", + "avif" + ] +} - changed
Input schema / properties / watermarkPosition / descriptionPrevious value: -"Unknown codes silently become c (center). Does nothing unless watermarkText is set."New value: +"Where the stamp sits on each image." - added
Input schema / properties / watermarkPosition / x-uiAdded value: +{ + "labels": { + "bc": "Bottom centre", + "bl": "Bottom left", + "br": "Bottom right", + "c": "Centre", + "ml": "Middle left", + "mr": "Middle right", + "tc": "Top centre", + "tl": "Top left", + "tr": "Top right" + } +} - changed
Input schema / properties / watermarkScale / descriptionPrevious value: -"ACCEPTED BUT UNUSED in this tool — the raster stamp sizes by watermarkFontSize only; set that instead."New value: +"Not used by this tool — size the stamp with Watermark font size." - added
Input schema / properties / watermarkScale / x-show-whenAdded value: +{ + "mode": [ + "__never" + ] +} - changed
Input schema / properties / watermarkTile / descriptionPrevious value: -"ACCEPTED BUT UNUSED in this tool — no tiling on rasterized pages; the stamp renders once at watermarkPosition."New value: +"Not used by this tool - a rasterised page is stamped once, where Watermark position says." - added
Input schema / properties / watermarkTile / x-show-whenAdded value: +{ + "mode": [ + "__never" + ] +} - changed
Input schema / properties / webpQuality / descriptionPrevious value: -"Consulted only when format=webp. Out-of-range clamps silently to 50-95 — this is not a 0-100 scale."New value: +"Higher keeps more detail and makes a bigger file." - added
Input schema / properties / webpQuality / x-show-whenAdded value: +{ + "format": [ + "webp" + ] +}
- Changed
pdf_to_images_batch30 fields changed- changed
Input schema / properties / avifQuality / descriptionPrevious value: -"AVIF quality (Starter+)"New value: +"Higher keeps more detail and makes a bigger file." - added
Input schema / properties / avifQuality / x-show-whenAdded value: +{ + "format": [ + "avif" + ] +} - changed
Input schema / properties / backgroundColor / descriptionPrevious value: -"Background for transparent PDFs rendered to non-alpha formats"New value: +"What fills the see-through parts of the page in a format that cannot keep them." - added
Input schema / properties / backgroundColor / x-show-whenAdded value: +{ + "format": [ + "jpg", + "webp" + ] +} - changed
Input schema / properties / jpegQuality / descriptionPrevious value: -"Consulted only when format=jpg. Out-of-range clamps silently to 50-95 — this is not a 0-100 scale."New value: +"Higher keeps more detail and makes a bigger file. 50 is the lowest this tool will go." - added
Input schema / properties / jpegQuality / x-show-whenAdded value: +{ + "format": [ + "jpg", + "tiff" + ] +} - changed
Input schema / properties / maxWidth / descriptionPrevious value: -"Cap width (shrink-only, preserves aspect)"New value: +"Shrink-only width cap in pixels, aspect preserved. Leave blank for no cap — an explicit 0 clamps UP to 100 and shrinks every page." - changed
Input schema / properties / preset / descriptionPrevious value: -"One-click preset bundle. Explicit fields override preset values."New value: +"A ready-made bundle of settings. Anything you set yourself wins over the preset." - changed
Input schema / properties / preset / enumPrevious value: -[ - "", - "web", - "print", - "email", - "archive" -]New value: +[ + "web", + "print", + "email", + "archive" +] - added
Input schema / properties / preset / x-uiAdded value: +{ + "labels": { + "archive": "For keeping (PNG, 300 DPI)", + "email": "For emailing (JPG, 150 DPI)", + "print": "For printing (PNG, 300 DPI)", + "web": "For a web page (WEBP, 96 DPI)" + } +} - changed
Input schema / properties / sheetBackground / descriptionPrevious value: -"Canvas color behind tiles, sheet/filmstrip modes only. #rgb or #rrggbb; invalid hex silently keeps #FFFFFF."New value: +"Colour of the canvas behind the tiles, as #rgb or #rrggbb. Anything we cannot read stays white." - added
Input schema / properties / sheetBackground / titleAdded value: +"Sheet background colour" - added
Input schema / properties / sheetBackground / x-show-whenAdded value: +{ + "mode": [ + "sheet", + "filmstrip" + ] +} - changed
Input schema / properties / sheetColumns / descriptionPrevious value: -"mode=sheet only — filmstrip is always one row. Out-of-range clamps silently to 1-10."New value: +"How many pages sit side by side on the contact sheet." - added
Input schema / properties / sheetColumns / x-show-whenAdded value: +{ + "mode": [ + "sheet" + ] +} - changed
Input schema / properties / sheetGap / descriptionPrevious value: -"Pixel spacing between tiles in sheet/filmstrip modes. Out-of-range clamps silently to 0-200."New value: +"Spacing between the tiles, in pixels." - added
Input schema / properties / sheetGap / x-show-whenAdded value: +{ + "mode": [ + "sheet", + "filmstrip" + ] +} - changed
Input schema / properties / tiffCompression / descriptionPrevious value: -"TIFF compression (format=tiff only)."New value: +"How the TIFF is packed down." - added
Input schema / properties / tiffCompression / x-show-whenAdded value: +{ + "format": [ + "tiff" + ] +} - added
Input schema / properties / tiffCompression / x-uiAdded value: +{ + "labels": { + "g4": "Group 4 (black and white)", + "jpeg": "JPEG (smaller, lossy)", + "lzw": "LZW (lossless, default)", + "none": "None (largest)", + "packbits": "PackBits (lossless)", + "zip": "ZIP (lossless)" + } +} - changed
Input schema / properties / transparent / descriptionPrevious value: -"PNG alpha channel when true"New value: +"Leave the paper see-through instead of white." - added
Input schema / properties / transparent / x-show-whenAdded value: +{ + "colorMode": [ + "rgb" + ], + "format": [ + "png", + "webp", + "avif" + ] +} - changed
Input schema / properties / watermarkPosition / descriptionPrevious value: -"Unknown codes silently become c (center). Does nothing unless watermarkText is set."New value: +"Where the stamp sits on each image." - added
Input schema / properties / watermarkPosition / x-uiAdded value: +{ + "labels": { + "bc": "Bottom centre", + "bl": "Bottom left", + "br": "Bottom right", + "c": "Centre", + "ml": "Middle left", + "mr": "Middle right", + "tc": "Top centre", + "tl": "Top left", + "tr": "Top right" + } +} - changed
Input schema / properties / watermarkScale / descriptionPrevious value: -"ACCEPTED BUT UNUSED in this tool — the raster stamp sizes by watermarkFontSize only; set that instead."New value: +"Not used by this tool — size the stamp with Watermark font size." - added
Input schema / properties / watermarkScale / x-show-whenAdded value: +{ + "mode": [ + "__never" + ] +} - changed
Input schema / properties / watermarkTile / descriptionPrevious value: -"ACCEPTED BUT UNUSED in this tool — no tiling on rasterized pages; the stamp renders once at watermarkPosition."New value: +"Not used by this tool - a rasterised page is stamped once, where Watermark position says." - added
Input schema / properties / watermarkTile / x-show-whenAdded value: +{ + "mode": [ + "__never" + ] +} - changed
Input schema / properties / webpQuality / descriptionPrevious value: -"Consulted only when format=webp. Out-of-range clamps silently to 50-95 — this is not a 0-100 scale."New value: +"Higher keeps more detail and makes a bigger file." - added
Input schema / properties / webpQuality / x-show-whenAdded value: +{ + "format": [ + "webp" + ] +}
- Changed
pdf_watermark8 fields changed- changed
Input schema / properties / color / descriptionPrevious value: -"Hex color #rgb or #rrggbb (mode=text)."New value: +"Colour of the lettering. Hex, #rgb or #rrggbb." - added
Input schema / properties / color / x-show-whenAdded value: +{ + "mode": [ + "text" + ] +} - changed
Input schema / properties / fontFamily / descriptionPrevious value: -"Outside the enum it silently becomes Helvetica. All three are Latin-1 — non-Latin text is refused 400 (use mode=image)."New value: +"Lettering style. Latin alphabet only — for other scripts stamp an image instead." - added
Input schema / properties / fontFamily / x-show-whenAdded value: +{ + "mode": [ + "text" + ] +} - changed
Input schema / properties / fontSize / descriptionPrevious value: -"Point size on the page (mode=text only). Non-integer input silently resets to 48."New value: +"Height of the lettering in points." - added
Input schema / properties / fontSize / x-show-whenAdded value: +{ + "mode": [ + "text" + ] +} - changed
Input schema / properties / text / descriptionPrevious value: -"Watermark text (used when mode=text)."New value: +"The wording stamped across each page." - added
Input schema / properties / text / x-show-whenAdded value: +{ + "mode": [ + "text" + ] +}
- Changed
photo_bg_remover5 fields changed- added
Input schema / properties / alpha_mattingAdded value: +{ + "default": false, + "description": "Re-solves hair, fur and glass edges as a soft fade instead of a hard cut. Slower and uses more memory.", + "title": "Soften the edges", + "type": "boolean" +} - added
Input schema / properties / alpha_matting_background_thresholdAdded value: +{ + "default": 10, + "description": "How certain a pixel must be to count as definitely background. Only used when edge softening is on. Values outside 0-255 are pulled back into range.", + "maximum": 255, + "minimum": 0, + "type": "integer", + "x-show-when": { + "alpha_matting": [ + "true" + ] + } +} - added
Input schema / properties / alpha_matting_erode_sizeAdded value: +{ + "default": 10, + "description": "Width of the band around the subject that gets re-solved. Only used when edge softening is on. Values outside 0-64 are pulled back into range.", + "maximum": 64, + "minimum": 0, + "type": "integer", + "x-show-when": { + "alpha_matting": [ + "true" + ] + } +} - added
Input schema / properties / alpha_matting_foreground_thresholdAdded value: +{ + "default": 240, + "description": "How certain a pixel must be to count as definitely the subject. Only used when edge softening is on. Values outside 0-255 are pulled back into range.", + "maximum": 255, + "minimum": 0, + "type": "integer", + "x-show-when": { + "alpha_matting": [ + "true" + ] + } +} - added
Input schema / properties / model / x-uiAdded value: +{ + "labels": { + "isnet-general-use": "Fine detail (slower)", + "u2net": "Standard", + "u2net_human_seg": "People and portraits" + } +}
- Changed
photo_collage15 fields changed- added
Input schema / properties / aspect_ratio / defaultAdded value: +"1:1" - added
Input schema / properties / aspect_ratio / x-show-whenAdded value: +{ + "layout_mode": [ + "smart", + "grid_legacy" + ] +} - added
Input schema / properties / layout / defaultAdded value: +"2x2" - changed
Input schema / properties / layout / descriptionPrevious value: -"Legacy NxM grid, e.g. 2x2, 3x3 (layout_mode=grid_legacy)."New value: +"A plain grid, written as columns then rows." - added
Input schema / properties / layout / enumAdded value: +[ + "1x2", + "2x1", + "2x2", + "2x3", + "3x2", + "3x3", + "4x4" +] - added
Input schema / properties / layout / x-show-whenAdded value: +{ + "layout_mode": [ + "grid_legacy" + ] +} - added
Input schema / properties / output_long_edge / defaultAdded value: +1200 - changed
Input schema / properties / output_width / descriptionPrevious value: -"Legacy alias for output_long_edge."New value: +"Older name for the setting above. Set the longest side instead; this is only used if that one is left empty." - added
Input schema / properties / quality / defaultAdded value: +90 - changed
Input schema / properties / quality / minimumPrevious value: -0New value: +1 - added
Input schema / properties / quality / x-show-whenAdded value: +{ + "output_format": [ + "jpg", + "webp", + "avif" + ] +} - changed
Input schema / properties / template / descriptionPrevious value: -"Named template (layout_mode=template), e.g. ig_post_2x2, ig_story_3_vertical, magazine_5_hero."New value: +"Named template (layout_mode=template), e.g. ig_post_2x2, ig_story_3_vertical, ig_post_5_magazine." - added
Input schema / properties / template / enumAdded value: +[ + "ig_post_2x2", + "ig_post_hero_3", + "ig_post_5_magazine", + "ig_story_3_vertical", + "ig_story_hero_4", + "ig_carousel_4_split", + "pinterest_3_stack", + "landscape_3up_equal", + "landscape_hero_2_offset", + "landscape_film_strip", + "square_diptych", + "square_triptych_top_2_bottom_1" +] - added
Input schema / properties / template / x-show-whenAdded value: +{ + "layout_mode": [ + "template" + ] +} - added
Input schema / properties / template / x-uiAdded value: +{ + "labels": { + "ig_carousel_4_split": "Carousel — quad split", + "ig_post_2x2": "Instagram post — 2x2", + "ig_post_5_magazine": "Magazine — 5 photos", + "ig_post_hero_3": "Instagram post — hero + 3", + "ig_story_3_vertical": "Story — 3 stacked", + "ig_story_hero_4": "Story — hero + 4 strip", + "landscape_3up_equal": "Landscape — 3 equal columns", + "landscape_film_strip": "Landscape — 5 film strip", + "landscape_hero_2_offset": "Landscape — hero + 2 stacked", + "pinterest_3_stack": "Pinterest — 3 stack", + "square_diptych": "Diptych — side by side", + "square_triptych_top_2_bottom_1": "Triptych — 2 over 1" + } +}
- Changed
photo_compress_to_size4 fields changed- changed
Input schema / properties / output_format / descriptionPrevious value: -"Optional output format, e.g. jpg, png, webp. HEIC/HEIF inputs default to jpg output."New value: +"What to save it as. Leave blank to keep the format it came in as - except HEIC and HEIF pictures, which always come back as JPG. Squeezing to a size needs a format that compresses, which is why BMP and GIF are not offered." - added
Input schema / properties / output_format / enumAdded value: +[ + "jpg", + "png", + "webp" +] - added
Input schema / properties / target_size_kb / defaultAdded value: +500 - changed
Input schema / properties / target_size_kb / maximumPrevious value: -524288New value: +25600
- Changed
photo_face_blur7 fields changed- changed
Input schema / properties / block_size / descriptionPrevious value: -"Pixelate block size override. 0 = auto from blur_strength."New value: +"Size of each mosaic square. 0 uses the amount chosen above; 1 is ignored, use 2 or more." - added
Input schema / properties / block_size / x-show-whenAdded value: +{ + "blur_mode": [ + "pixelate" + ] +} - added
Input schema / properties / blur_radius / x-show-whenAdded value: +{ + "blur_mode": [ + "gaussian" + ] +} - added
Input schema / properties / blur_strength / x-show-whenAdded value: +{ + "blur_mode": [ + "gaussian", + "pixelate" + ] +} - changed
Input schema / properties / manual_faces / descriptionPrevious value: -"Optional JSON array of manual face rectangles to blur."New value: +"Advanced: extra rectangles to blur even if no face was found there, as [{\"x\":10,\"y\":20,\"w\":80,\"h\":80}] in pixels." - added
Input schema / properties / output_format / enumAdded value: +[ + "jpg", + "png", + "webp", + "bmp" +] - changed
Input schema / properties / selected_faces / descriptionPrevious value: -"Optional JSON array of detected-face indexes to blur (default: all)."New value: +"Advanced: which detected faces to blur, as a list of numbers starting at 0, e.g. [0,2]. Leave empty to blur every face found."
- Changed
photo_flip_rotate2 fields changed- added
Input schema / properties / action / x-uiAdded value: +{ + "labels": { + "custom": "Rotate by an exact angle", + "flip-h": "Flip left to right", + "flip-v": "Flip top to bottom", + "rotate180": "Rotate 180°", + "rotate270": "Rotate 90° left", + "rotate90": "Rotate 90° right" + } +} - added
Input schema / properties / degrees / x-show-whenAdded value: +{ + "action": [ + "custom" + ] +}
- Changed
photo_image_overlay1 field changed- added
Input schema / properties / output_format / enumAdded value: +[ + "jpg", + "png", + "webp", + "bmp" +]
- Changed
photo_image_splitter1 field changed- added
Input schema / properties / output_format / enumAdded value: +[ + "jpg", + "png", + "webp", + "bmp" +]
- Changed
photo_meme_generator2 fields changed- changed
Input schema / properties / font_size / descriptionPrevious value: -"'auto' or a pixel size."New value: +"Caption size in pixels, or the word auto to size it from the picture (a tenth of its height, kept between 20 and 150). A number outside 10 to 200 is treated as auto." - changed
Input schema / properties / output_format / enumPrevious value: -[ - "jpg", - "jpeg", - "png", - "webp" -]New value: +[ + "jpg", + "png", + "webp" +]
- Changed
photo_noise_reducer4 fields changed- added
Input schema / properties / mode / x-uiAdded value: +{ + "labels": { + "auto": "Balanced", + "dctdnoiz": "Best for JPEG blockiness (slow)", + "despeckle": "Gentle speckle removal", + "gaussian": "Soft blur", + "luminance": "Keep colour, smooth brightness", + "median": "Speckle removal", + "nlmeans": "Best quality (slow)", + "smart": "Let the tool decide" + } +} - added
Input schema / properties / sharpen / x-show-whenAdded value: +{ + "mode": [ + "auto", + "median", + "despeckle", + "gaussian", + "luminance", + "nlmeans", + "dctdnoiz" + ] +} - added
Input schema / properties / strength / x-show-whenAdded value: +{ + "mode": [ + "auto", + "median", + "despeckle", + "gaussian", + "luminance", + "nlmeans", + "dctdnoiz" + ] +} - added
Input schema / properties / strength / x-uiAdded value: +{ + "labels": { + "1": "Light", + "2": "Medium", + "3": "Strong", + "4": "Maximum" + } +}
- Changed
photo_resize10 fields changed- changed
Input schema / properties / bg_color / descriptionPrevious value: -"Canvas background color (mode=canvas)."New value: +"Colour of the padding added around the picture when it does not fill the canvas." - added
Input schema / properties / bg_color / x-show-whenAdded value: +{ + "mode": [ + "canvas" + ] +} - added
Input schema / properties / force_exact / x-show-whenAdded value: +{ + "mode": [ + "dimensions" + ] +} - added
Input schema / properties / height / x-show-whenAdded value: +{ + "mode": [ + "dimensions", + "height", + "canvas" + ] +} - added
Input schema / properties / maintain_ratio / x-show-whenAdded value: +{ + "mode": [ + "dimensions" + ] +} - added
Input schema / properties / mode / x-uiAdded value: +{ + "labels": { + "canvas": "Pad to an exact canvas", + "dimensions": "Exact width and height", + "height": "Fit to a height", + "max": "Fit inside a box (never enlarge)", + "percentage": "Scale by percent", + "width": "Fit to a width" + } +} - changed
Input schema / properties / percentage / descriptionPrevious value: -"Scale percentage — REQUIRED when mode=percentage."New value: +"Scale to this percent of the original size." - added
Input schema / properties / percentage / x-show-whenAdded value: +{ + "mode": [ + "percentage" + ] +} - changed
Input schema / properties / width / descriptionPrevious value: -"Target width px. In the default 'dimensions' mode at least one of width/height is REQUIRED; also required for width/max/canvas modes."New value: +"Target width in pixels. In 'Fit inside a box' mode this is the longest side the picture may reach." - added
Input schema / properties / width / x-show-whenAdded value: +{ + "mode": [ + "dimensions", + "width", + "max", + "canvas" + ] +}
- Changed
photo_shadow_adder2 fields changed- changed
Input schema / properties / output_format / descriptionPrevious value: -"Optional output format."New value: +"Leave blank to keep the format it came in as. Only PNG keeps the area around the shadow see-through; JPG and WebP are flattened onto white." - added
Input schema / properties / output_format / enumAdded value: +[ + "png", + "jpg", + "webp" +]
- Changed
photo_to_text3 fields changed- added
Input schema / properties / binarizeAdded value: +{ + "default": false, + "description": "Force the picture to pure black and white before reading it. Off by default because it destroys text in uneven light; try it on faint or washed-out scans.", + "title": "Force black and white", + "type": "boolean" +} - added
Input schema / properties / binarize_thresholdAdded value: +{ + "default": 60, + "description": "The cut-off between black and white, as a percent. Lower keeps more of the picture black. Only used when black and white is forced on; anything outside 1-99 quietly reverts to 60.", + "maximum": 99, + "minimum": 1, + "type": "integer", + "x-show-when": { + "binarize": [ + "true" + ] + } +} - changed
Input schema / properties / languages / descriptionPrevious value: -"Comma-separated ISO-639-1 codes, e.g. 'en' or 'en,fr'. Supported: en, fr, de, es, pt, it, zh, ja, ar, ru, ko, nl. Field name is 'languages' — not 'language'; Tesseract codes like 'eng' are NOT recognized."New value: +"Which language or languages the writing is in, as two-letter codes. One, or several separated by commas: en, or en,fr. Common ones are en, fr, de, es, pt, it, nl, ru, ar, zh, ja, ko. Field name is languages, not language, and Tesseract-style codes like eng are not recognised."
- Changed
photo_upscaler2 fields changed- added
Input schema / properties / model / x-uiAdded value: +{ + "labels": { + "fast": "Fast — about 15 seconds", + "quality": "Best detail — up to 4 minutes" + } +} - changed
Input schema / properties / output_format / enumPrevious value: -[ - "jpg", - "jpeg", - "png", - "webp" -]New value: +[ + "jpg", + "png", + "webp" +]
- Changed
photo_watermark4 fields changed- added
Input schema / properties / colorAdded value: +{ + "default": "#ffffff", + "description": "A hex colour, or one of white, black, gray, red, orange, yellow, green, blue, cyan, magenta, purple, pink, brown. Anything else falls back to white.", + "title": "Watermark colour", + "type": "string" +} - added
Input schema / properties / position / x-uiAdded value: +{ + "labels": { + "Center": "Middle centre", + "East": "Middle right", + "North": "Top centre", + "NorthEast": "Top right", + "NorthWest": "Top left", + "South": "Bottom centre", + "SouthEast": "Bottom right", + "SouthWest": "Bottom left", + "West": "Middle left" + } +} - added
Input schema / properties / stroke_colorAdded value: +{ + "description": "The outline behind the text, which is what keeps a watermark readable over a white dress or a black suit. Leave it unset and it is picked for you - black behind a light colour, white behind a dark one. Same colour names as above.", + "title": "Outline colour", + "type": "string" +} - added
Input schema / properties / stroke_widthAdded value: +{ + "default": "auto", + "description": "How thick the outline behind the text is. Leave it on auto and it scales with the text size. 0 turns the outline off; otherwise a whole number up to 20 - anything larger is treated as 20.", + "title": "Outline thickness", + "type": "string" +}
- Changed
web_extract_table9 fields changed- changed
Input schema / properties / acknowledge_robots / descriptionPrevious value: -"Business+ only: proceed even when robots.txt disallows the page."New value: +"Business plan: read the table even when the site's robots.txt asks bots to stay away. On any other plan this switch does nothing and the page is still refused." - changed
Input schema / properties / output / descriptionPrevious value: -"Both values return a JSON envelope: 'json' puts a rows matrix in 'rows'; 'csv' puts one CSV string in the 'csv' field — never a file."New value: +"How the table comes back: JSON gives rows you can feed to the next step, CSV gives one block of comma-separated text. Either way it is data, not a downloadable file." - changed
Input schema / properties / table_index / descriptionPrevious value: -"0-based table index"New value: +"Which table on the page, counting from 0 for the first one. If the page has fewer tables than this, the error tells you how many it found." - added
Input schema / properties / table_index / maximumAdded value: +50 - added
Input schema / properties / table_index / minimumAdded value: +0 - added
Input schema / properties / timeout_ms / defaultAdded value: +30000 - changed
Input schema / properties / timeout_ms / descriptionPrevious value: -"Optional fetch timeout override in milliseconds."New value: +"How long to wait for the page before giving up, in milliseconds (30000 = 30 seconds)." - changed
Input schema / properties / timeout_ms / minimumPrevious value: -1New value: +1000 - changed
Input schema / properties / user_agent / descriptionPrevious value: -"Optional custom User-Agent header."New value: +"Advanced: how we introduce ourselves to the site. Left blank we identify as JohnsEssentialsBot."
- Changed
web_fetch5 fields changed- changed
Input schema / properties / acknowledge_robots / descriptionPrevious value: -"Business+ only: proceed even when robots.txt disallows the page."New value: +"Business plan only: fetch the page even when the site's rules file (robots.txt) asks crawlers to stay away. On other plans this switch has no effect." - added
Input schema / properties / timeout_ms / defaultAdded value: +30000 - changed
Input schema / properties / timeout_ms / descriptionPrevious value: -"Optional fetch timeout override in milliseconds."New value: +"How long to wait for the page before giving up, in milliseconds (30000 = 30 seconds)." - changed
Input schema / properties / timeout_ms / minimumPrevious value: -1New value: +1000 - changed
Input schema / properties / user_agent / descriptionPrevious value: -"Optional custom User-Agent header."New value: +"What to tell the site we are. Leave blank and we identify honestly as JohnsEssentialsBot/1.0."
- Changed
web_scrape_page8 fields changed- changed
Input schema / properties / acknowledge_robots / descriptionPrevious value: -"Business+ only: proceed even when robots.txt disallows the page."New value: +"Business plan: scrape the page even when the site's robots.txt asks bots to stay away. On any other plan this switch does nothing and the page is still refused." - changed
Input schema / properties / mode / descriptionPrevious value: -"Chooses the response shape: selectors returns per-key text under 'data'; readability returns the article object under 'article'."New value: +"Readability gives you the page's main article as clean text. Selectors gives you only the specific bits you name below." - changed
Input schema / properties / selectors / descriptionPrevious value: -"key → CSS selector map — REQUIRED (non-empty) when mode=selectors"New value: +"One CSS selector per thing you want, named: {\"headline\": \"h1\", \"price\": \".price\"}. Needed only when you pick Selectors above." - added
Input schema / properties / selectors / x-show-whenAdded value: +{ + "mode": [ + "selectors" + ] +} - added
Input schema / properties / timeout_ms / defaultAdded value: +30000 - changed
Input schema / properties / timeout_ms / descriptionPrevious value: -"Optional fetch timeout override in milliseconds."New value: +"How long to wait for the page before giving up, in milliseconds (30000 = 30 seconds)." - changed
Input schema / properties / timeout_ms / minimumPrevious value: -1New value: +1000 - changed
Input schema / properties / user_agent / descriptionPrevious value: -"Optional custom User-Agent header."New value: +"Advanced: how we introduce ourselves to the site. Left blank we identify as JohnsEssentialsBot."
9 tool updates
- Changed
analyze_word_count1 field changed- changed
Input schema / requiredPrevious value: -[ - "text" -]New value: +[]
- Changed
convert_file4 fields changed- changed
Input schema / properties / from / descriptionPrevious value: -"Source format, e.g. 'jpg', 'mp3', 'docx'. OPTIONAL — leave it out and we read the format from the file's own bytes. Only worth setting when the bytes are ambiguous or the file has a synthetic name."New value: +"Leave blank and we read the format from the file itself. Only set it if the file has no name or an odd one." - added
Input schema / properties / from / enumAdded value: +[ + "jpg", + "png", + "webp", + "bmp", + "tiff", + "gif", + "avif", + "ico", + "heic", + "svg", + "psd", + "mp3", + "wav", + "ogg", + "opus", + "flac", + "m4a", + "aac", + "wma", + "aiff", + "alac", + "mp4", + "mov", + "webm", + "mkv", + "avi", + "flv", + "wmv", + "3gp", + "mpg", + "vob", + "ts", + "m2ts", + "srt", + "vtt", + "docx", + "doc", + "txt", + "cbz" +] - changed
Input schema / properties / to / descriptionPrevious value: -"Target format, e.g. 'png', 'pdf', 'mp3'."New value: +"The format you want back. Apple Lossless (alac) is delivered as a .m4a file." - added
Input schema / properties / to / enumAdded value: +[ + "pdf", + "jpg", + "png", + "webp", + "bmp", + "tiff", + "gif", + "avif", + "ico", + "mp3", + "wav", + "ogg", + "opus", + "flac", + "m4a", + "aac", + "wma", + "aiff", + "alac", + "mp4", + "mov", + "webm", + "mkv", + "avi", + "srt", + "vtt", + "txt", + "3gp", + "flv", + "m2ts", + "mpg", + "ts", + "vob", + "wmv" +]
- Changed
convert_text6 fields changed- added
Input schema / properties / from / defaultAdded value: +"md" - changed
Input schema / properties / from / descriptionPrevious value: -"Source format or operation: md, html, csv, json, xml, yaml — or base64_encode, base64_decode, url_encode, url_decode (the operation rides in 'from')."New value: +"What the text is now — or the encoding job to run (Base64 / URL encode and decode ride in this field)." - added
Input schema / properties / from / enumAdded value: +[ + "md", + "html", + "csv", + "json", + "xml", + "yaml", + "base64_encode", + "base64_decode", + "url_encode", + "url_decode" +] - added
Input schema / properties / to / defaultAdded value: +"html" - changed
Input schema / properties / to / descriptionPrevious value: -"Target format: html, md, json, csv, xml, yaml, txt. Must differ from 'from'. Supported pairs: md↔html, csv→json/xml, json↔csv, json↔xml, json↔yaml, xml→json, any→txt; for encode/decode operations set to='txt'."New value: +"What you want back. Must differ from the source. Supported pairs: Markdown↔HTML, CSV→JSON/XML, JSON↔CSV, JSON↔XML, JSON↔YAML, XML→JSON, and anything→plain text." - added
Input schema / properties / to / enumAdded value: +[ + "html", + "md", + "json", + "csv", + "xml", + "yaml", + "txt" +]
- Changed
convert_unit_convert7 fields changed- added
Input schema / properties / category / defaultAdded value: +"length" - changed
Input schema / properties / category / descriptionPrevious value: -"One of: length, weight, area, volume, speed, time, data, temperature. Anything else = 400."New value: +"What kind of measurement this is. Pick this first — it decides which units are available." - added
Input schema / properties / category / enumAdded value: +[ + "length", + "weight", + "area", + "volume", + "speed", + "time", + "data", + "temperature" +] - changed
Input schema / properties / from / descriptionPrevious value: -"Full snake_case name ('kilometer', 'mile_per_hour'), not symbols. Temperature units aren't validated — a typo returns garbage."New value: +"The unit you have. It must belong to the kind of measurement chosen above. Data sizes are the computing kind (1 kilobyte = 1024 bytes)." - added
Input schema / properties / from / enumAdded value: +[ + "meter", + "kilometer", + "centimeter", + "millimeter", + "mile", + "yard", + "foot", + "inch", + "nautical_mile", + "kilogram", + "gram", + "milligram", + "pound", + "ounce", + "ton", + "stone", + "square_meter", + "square_kilometer", + "square_centimeter", + "square_mile", + "square_yard", + "square_foot", + "square_inch", + "hectare", + "acre", + "liter", + "milliliter", + "cubic_meter", + "cubic_centimeter", + "gallon_us", + "gallon_uk", + "quart", + "pint", + "cup", + "fluid_ounce", + "tablespoon", + "teaspoon", + "meter_per_second", + "kilometer_per_hour", + "mile_per_hour", + "knot", + "foot_per_second", + "second", + "millisecond", + "minute", + "hour", + "day", + "week", + "month", + "year", + "byte", + "kilobyte", + "megabyte", + "gigabyte", + "terabyte", + "bit", + "kilobit", + "megabit", + "gigabit", + "celsius", + "fahrenheit", + "kelvin" +] - changed
Input schema / properties / to / descriptionPrevious value: -"Same rules as 'from', same category. Data units are binary (kilobyte = 1024 B); temperature accepts only celsius/fahrenheit/kelvin."New value: +"The unit you want. It must belong to the same kind of measurement as the one you have." - added
Input schema / properties / to / enumAdded value: +[ + "meter", + "kilometer", + "centimeter", + "millimeter", + "mile", + "yard", + "foot", + "inch", + "nautical_mile", + "kilogram", + "gram", + "milligram", + "pound", + "ounce", + "ton", + "stone", + "square_meter", + "square_kilometer", + "square_centimeter", + "square_mile", + "square_yard", + "square_foot", + "square_inch", + "hectare", + "acre", + "liter", + "milliliter", + "cubic_meter", + "cubic_centimeter", + "gallon_us", + "gallon_uk", + "quart", + "pint", + "cup", + "fluid_ounce", + "tablespoon", + "teaspoon", + "meter_per_second", + "kilometer_per_hour", + "mile_per_hour", + "knot", + "foot_per_second", + "second", + "millisecond", + "minute", + "hour", + "day", + "week", + "month", + "year", + "byte", + "kilobyte", + "megabyte", + "gigabyte", + "terabyte", + "bit", + "kilobit", + "megabit", + "gigabit", + "celsius", + "fahrenheit", + "kelvin" +]
- Changed
generate_ascii_art8 fields changed- changed
Input schema / properties / font / descriptionPrevious value: -"FIGlet font name (default 'standard')."New value: +"Lettering style." - added
Input schema / properties / font / enumAdded value: +[ + "standard", + "banner", + "big", + "block", + "bubble", + "digital", + "lean", + "mini", + "script", + "shadow", + "slant", + "small" +] - added
Input schema / properties / font / x-show-whenAdded value: +{ + "mode": [ + "text" + ] +} - changed
Input schema / properties / mode / descriptionPrevious value: -"'text' (default) renders 'text' via figlet+'font'; 'image' converts 'file' at 'width' chars. Any other value 400s."New value: +"Turn words into a banner, or turn a picture into characters." - changed
Input schema / properties / text / descriptionPrevious value: -"Text to render. REQUIRED when mode=text (the default). Truncated at 100 characters."New value: +"The words to render as a banner. Up to 100 characters." - added
Input schema / properties / text / x-show-whenAdded value: +{ + "mode": [ + "text" + ] +} - changed
Input schema / properties / width / descriptionPrevious value: -"Output width in characters, 40-200 (mode=image)."New value: +"How many characters wide the picture is drawn." - added
Input schema / properties / width / x-show-whenAdded value: +{ + "mode": [ + "image" + ] +}
- Changed
generate_business_card2 fields changed- changed
Input schema / properties / template / descriptionPrevious value: -"Card template, e.g. modern or classic."New value: +"Card layout." - added
Input schema / properties / template / enumAdded value: +[ + "modern", + "classic", + "minimal", + "creative", + "corporate", + "elegant" +]
- Changed
pdf_ocr3 fields changed- changed
Input schema / properties / lang / descriptionPrevious value: -"Tesseract language code(s): three letters, joinable with '+' (e.g. 'eng', 'deu', 'eng+fra'). The pack must be installed on the server."New value: +"The language of the writing in the scan. The wrong language makes the searchable text gibberish." - added
Input schema / properties / lang / enumAdded value: +[ + "eng", + "deu", + "fra", + "spa", + "ita", + "por", + "nld", + "rus", + "jpn", + "kor", + "chi_sim", + "chi_tra", + "ara", + "hin", + "eng+fra", + "eng+deu", + "eng+spa" +] - added
Input schema / properties / lang / x-uiAdded value: +{ + "labels": { + "ara": "Arabic", + "chi_sim": "Chinese (Simplified)", + "chi_tra": "Chinese (Traditional)", + "deu": "German", + "eng": "English", + "eng+deu": "English + German", + "eng+fra": "English + French", + "eng+spa": "English + Spanish", + "fra": "French", + "hin": "Hindi", + "ita": "Italian", + "jpn": "Japanese", + "kor": "Korean", + "nld": "Dutch", + "por": "Portuguese", + "rus": "Russian", + "spa": "Spanish" + } +}
- Changed
pdf_page_numbers3 fields changed- changed
Input schema / properties / format / descriptionPrevious value: -"Number template with {page} and {pages} tokens."New value: +"How each number is written on the page." - added
Input schema / properties / format / enumAdded value: +[ + "Page {page}", + "{page}", + "{page} of {pages}", + "- {page} -" +] - added
Input schema / properties / format / x-uiAdded value: +{ + "labels": { + "- {page} -": "- 1 -", + "Page {page}": "Page 1", + "{page}": "1", + "{page} of {pages}": "1 of 10" + } +}
- Changed
pdf_protect4 fields changed- added
Input schema / properties / permissions / defaultAdded value: +"print" - changed
Input schema / properties / permissions / descriptionPrevious value: -"Comma-separated permissions to ALLOW: print, copy, edit, modify, annotate, all. Empty = pdfcpu defaults."New value: +"What a reader is still allowed to do after the password is entered." - added
Input schema / properties / permissions / enumAdded value: +[ + "all", + "print", + "print,copy", + "copy", + "annotate", + "edit" +] - added
Input schema / properties / permissions / x-uiAdded value: +{ + "labels": { + "all": "Allow everything", + "annotate": "Commenting only", + "copy": "Copying text only", + "edit": "Editing only", + "print": "Printing only", + "print,copy": "Printing and copying text" + } +}
1 tool update
- Changed
convert_file1 field changed- changed
Input schema / properties / from / descriptionPrevious value: -"Source format, e.g. 'jpg', 'mp3', 'docx' — REQUIRED and must match the uploaded file."New value: +"Source format, e.g. 'jpg', 'mp3', 'docx'. OPTIONAL — leave it out and we read the format from the file's own bytes. Only worth setting when the bytes are ambiguous or the file has a synthetic name."
3 tool updates
- Changed
convert_file1 field changed- changed
Input schema / requiredPrevious value: -[ - "file", - "from", - "to" -]New value: +[ + "file", + "to" +]
- Added
data_to_file - Added
files_unzip
1 tool update
- Added
files_zip
1 tool update
- Changed
convert_video2 fields changed- changed
Input schema / properties / preset_name / descriptionPrevious value: -"Business-only. Wins over 'to', 'codec', 'resolution' and 'bitrate_kbps' — every preset forces h264 mp4."New value: +"Business-only. Wins over 'to', 'codec', 'resolution' and 'bitrate_kbps' — every preset forces h264 mp4. Only set when the user names the platform." - added
Input schema / properties / preset_name / x-uiAdded value: +{ + "no_recall": true +}
6 tool updates
- Removed
chatwithyourpdf - Removed
convert_chain - Removed
describe_image - Removed
photo_collage_animated - Removed
photo_collage_mosaic - Removed
share_create
144 tool updates
- First observed
analyze_audio - First observed
analyze_color_palette - First observed
analyze_csv - First observed
analyze_duplicate_detector - First observed
analyze_encoding_detector - First observed
analyze_file - First observed
analyze_file_diff - First observed
analyze_font_detector - First observed
analyze_grammar_check - First observed
analyze_grammar_check_batch - First observed
analyze_hash - First observed
analyze_image_quality - First observed
analyze_image_similarity - First observed
analyze_link_extractor - First observed
analyze_metadata - First observed
analyze_pdf_inspector - First observed
analyze_readability - First observed
analyze_ssl - First observed
analyze_video - First observed
analyze_word_count - First observed
analyze_word_frequency - First observed
chatwithyourpdf - First observed
convert_archive - First observed
convert_batch - First observed
convert_chain - First observed
convert_contact - First observed
convert_data - First observed
convert_document - First observed
convert_ebook - First observed
convert_file - First observed
convert_geo - First observed
convert_jpg_to_pdf - First observed
convert_parquet - First observed
convert_sqlite - First observed
convert_text - First observed
convert_unit_convert - First observed
convert_url_to_pdf - First observed
convert_video - First observed
convert_word_to_pdf - First observed
describe_image - First observed
email_file - First observed
esign_place - First observed
esign_prepare - First observed
generate_ascii_art - First observed
generate_barcode - First observed
generate_business_card - First observed
generate_certificate - First observed
generate_favicon - First observed
generate_hash - First observed
generate_invoice - First observed
generate_lorem_ipsum - First observed
generate_password - First observed
generate_placeholder_image - First observed
generate_qr_code - First observed
media_add_watermark - First observed
media_compress_video - First observed
media_extract_audio - First observed
media_extract_frames - First observed
media_merge_audio - First observed
media_mute_video - First observed
media_trim_audio - First observed
media_trim_video - First observed
octopus_delete - First observed
octopus_list - First observed
octopus_make_folder - First observed
octopus_mkdir - First observed
octopus_move - First observed
octopus_move_file - First observed
octopus_read - First observed
octopus_search - First observed
octopus_search_meta - First observed
octopus_write - First observed
pdf_compress - First observed
pdf_crop - First observed
pdf_delete_pages - First observed
pdf_excel_to_pdf - First observed
pdf_excel_to_pdf_batch - First observed
pdf_excel_to_pdf_inspect - First observed
pdf_extract_pages - First observed
pdf_file_info - First observed
pdf_flatten - First observed
pdf_flatten_batch - First observed
pdf_get_metadata - First observed
pdf_grayscale - First observed
pdf_header_footer - First observed
pdf_html_to_pdf - First observed
pdf_images_to_pdf - First observed
pdf_interleave - First observed
pdf_merge - First observed
pdf_ocr - First observed
pdf_page_count - First observed
pdf_page_numbers - First observed
pdf_pptx_to_pdf - First observed
pdf_protect - First observed
pdf_remove_metadata - First observed
pdf_remove_watermark - First observed
pdf_reorder - First observed
pdf_repair - First observed
pdf_reverse - First observed
pdf_rotate - First observed
pdf_rtf_to_pdf - First observed
pdf_set_metadata - First observed
pdf_split - First observed
pdf_thumbnails - First observed
pdf_to_excel - First observed
pdf_to_excel_batch - First observed
pdf_to_excel_inspect - First observed
pdf_to_images - First observed
pdf_to_images_batch - First observed
pdf_to_pdfa - First observed
pdf_to_text - First observed
pdf_to_word - First observed
pdf_txt_to_pdf - First observed
pdf_unlock - First observed
pdf_watermark - First observed
photo_bg_remover - First observed
photo_collage - First observed
photo_collage_animated - First observed
photo_collage_mosaic - First observed
photo_color_adjuster - First observed
photo_compress - First observed
photo_compress_to_size - First observed
photo_crop - First observed
photo_editor - First observed
photo_exif_viewer - First observed
photo_face_blur - First observed
photo_face_detect - First observed
photo_flip_rotate - First observed
photo_format_converter - First observed
photo_image_diff - First observed
photo_image_overlay - First observed
photo_image_splitter - First observed
photo_meme_generator - First observed
photo_noise_reducer - First observed
photo_resize - First observed
photo_shadow_adder - First observed
photo_svg_to_png - First observed
photo_to_text - First observed
photo_upscaler - First observed
photo_watermark - First observed
share_create - First observed
web_extract_table - First observed
web_fetch - First observed
web_scrape_page
Related MCP Connectors
Convert and compress PDFs and images, redact personal data, and run text and data utilities.
125+ browser tools for PDF, Image, Video, Audio, AI, Scanner. Files never leave your device.
Markdown in, any format out. PDFs merged, split, watermarked. Runs on our own doc engines.
Video, audio, and image processing for AI agents: convert, transcribe, upscale - 150+ operations.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenancePrivacy-first file tools for AI agents, enabling operations like PDF merge/split, image compression/convert, metadata stripping, and background removal without storing files.23 npmMIT
- AlicenseNot gradedqualityDmaintenanceConverts various document formats to desired output formats, currently supporting PDF to image conversion. No access keys required for basic file format conversion operations.3MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to discover 180+ free in-browser file tools and return deep-link URLs without uploading any files.33 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables document merging, splitting, and info retrieval for PDF, DOCX, XLSX, PPTX, and 30+ formats via AI agents.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.