John's Essentials
Server Details
144 deterministic file tools: PDF, image, media, convert, analyze. Connect in one click (OAuth).
- Status
- Healthy
- Uptime
- 74.5% over 54 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 147 tools
Several tools overlap or are near-duplicates, such as octopus_mkdir vs octopus_make_folder, octopus_move vs octopus_move_file, and octopus_list vs octopus_search_meta, making selection ambiguous. Hash generation appears in both analyze_hash and generate_hash, and PDF conversion is split across convert_document, convert_word_to_pdf, and convert_file, creating unclear boundaries.
Names consistently use snake_case with a category prefix (analyze_, convert_, pdf_, photo_, etc.), which is easy to follow. Minor deviations exist within categories, such as source_to_target patterns (pdf_excel_to_pdf) mixed with verb-noun forms (photo_resize), but the overall convention is stable.
147 tools is an extreme mismatch for any single server, far exceeding the typical 3-15 range and even the 25+ threshold for 'too many'. This volume suggests a kitchen-sink approach that likely overwhelms an agent's selection process.
The server covers an unusually broad domain (file analysis, conversion, PDF manipulation, image editing, generation, web scraping, storage) with very few obvious dead ends. Some gaps exist, such as writing image metadata or richer video editing, but core workflows are well-supported.
Available Tools
147 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, OGG, FLAC, M4A, WMA, OPUS or AIFF) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description doesn't need to restate that. It does add the list of analyzed fields and mentions waveform data, which gives some insight into the analysis output. However, it does not disclose any side effects, limitations, or processing nuances beyond the annotation, so the added value is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with the core action front-loaded. However, the leading 'Audio Analyzer' repeats the title, and the trailing '[category: analyze]' is unnecessary metadata. These redundancies reduce efficiency slightly but the structure remains clear and 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 only one required parameter and no output schema, the description lists the key return fields (duration, sample rate, bit rate, channels, codec, waveform data), which is essential for an agent to know what the tool produces. It falls short of specifying the structure of waveform data or error behavior, but the simplicity of the tool and existing annotations cover most needs.
Complex tools with many parameters or behaviors need more documentation. 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 covers 100% of the single parameter, listing supported audio formats. The tool description adds no extra meaning about the parameter itself; it only lists output fields, which is unrelated to parameter semantics. Baseline 3 applies due to 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 ('Analyse') and resource ('audio file'), then enumerates concrete output properties (duration, sample rate, bit rate, channels, codec, waveform data). This clearly distinguishes it from sibling tools like analyze_video or analyze_file by naming audio-specific attributes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage context is implied by the audio-specific list of properties, but the description does not explicitly state when to choose this tool over alternatives (e.g., analyze_video, analyze_metadata) or when not to use it. No exclusion criteria or alternative routing is provided.
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_diffARead-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 carry the read-only safety profile, so the description's burden is lower. It adds the line-by-line comparison behavior and the pair requirement, but does not disclose operational limits such as the 2,000-line cap (which lives only in the strict parameter description). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence states the core purpose and the two valid input modes, ending with the key usage constraint 'Provide one complete pair.' No filler; the [category: analyze] tag is minor but does not hurt.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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-mode tool with rich per-parameter descriptions and a read-only annotation, the description plus schema fully covers how to invoke the tool correctly. The only gap is that no output format is described, but the line-by-line diff behavior makes the expected result self-explanatory.
Complex tools with many parameters or behaviors need more documentation. Simple 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 thoroughly. The description adds useful grouping by naming which parameters belong to file mode vs text mode, but this repeats information already encoded in the parameter descriptions and x-require-one-of. 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?
Description states a specific action ('Show a line-by-line diff') and the exact resources involved ('two text files' or 'two pasted texts'). It also names the relevant parameter pairs, making it clear this is a text-diff tool rather than the image-diff sibling photo_image_diff.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description gives clear usage context: provide one complete pair, either file_a+file_b or text_a+text_b. It does not explicitly name alternatives or exclusions, but the two-mode instruction is enough to guide most calls and is reinforced by the schema's x-require-one-of.
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_checkARead-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 mark the tool read-only, so the description adds value by disclosing the hybrid engine, rule citations, style-guide awareness, dialect enforcement, and per-issue severity. This gives an agent useful behavioral expectations beyond the annotation flags, though it does not specify output 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?
The description is a single dense sentence that front-loads the tool's identity and then lists distinguishing capabilities. The category tag at the end is redundant but not harmful. It compresses a lot of information without excessive wordiness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, full schema documentation, and no output schema, the description provides a solid behavioral overview including citations, severity, style, and dialect. It does not describe the exact return shape, but the feature list sufficiently orients an agent to what the tool produces.
Complex tools with many parameters or behaviors need more documentation. Simple 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 text, mode, style, dialect, and include_llm thoroughly. The description's style and dialect mentions mirror schema enums rather than adding new parameter-level meaning; the only slight extra is the Grok reference hinting at the LLM pass.
Input schemas describe structure but not intent. Descriptions should explain 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 a grammar checker with a hybrid LanguageTool + Grok engine and lists concrete capabilities (style guides, dialect enforcement, per-issue severity). This is sufficient to distinguish it from sibling analyze_* tools, though it relies on the title phrase rather than an explicit verb phrase like 'check grammar in 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?
Usage context is implied by the name and category: use this tool when the user wants grammar checking with style and dialect support. However, the description does not state when to prefer it over alternatives or what it is not for, and no sibling alternative is named.
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?
The annotations already declare readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds that four specific hash algorithms are computed, implying the output contains all four, but it does not disclose any other behavioral traits such as output format, size limits, or the file-over-text precedence present in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single tightly-packed sentence that states the action and algorithm list, followed by a category tag. No filler, no repetition of schema details, and the core information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers only the file input, leaving the text-hashing capability and the one-of requirement undocumented in the prose. With no output schema, the return shape is left to inference, and the presence of sibling generate_hash creates selection ambiguity that the description fails to resolve.
Complex tools with many parameters or behaviors need more documentation. Simple 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 both 'file' and 'text' fully explained including the precedence rule. The main description adds no parameter-level meaning beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action and resource: 'Compute MD5, SHA-1, SHA-256, and SHA-512 hashes of an uploaded file.' It enumerates the exact algorithms, which is helpful. However, it omits the text-hashing mode exposed in the input schema and does not differentiate itself from the sibling generate_hash tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as generate_hash or other analyze_* tools. The only context is the '[category: analyze]' tag, which is implicit. There are no exclusions, prerequisites, or alternative recommendations.
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_json_xml_validatorAInspect
JSON/XML Validator — Check that text is valid JSON or XML and tidy its layout. It answers valid true or false, and a document that is not valid is still an answer, not a failed step, so the steps after it run either way. To stop a workflow on a bad document, add an If/Else step that checks {{step_N.valid}} equals true, where N is this step's number. Then, on each step that should run only for a valid document, set Run when to true and add the If/Else step's number to its Depends On. This step passes no file on, so a step after it that needs the document must take its file from the step before this one. [category: analyze]
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | A JSON or XML file to check — this is how a previous step hands its output over. Up to 1 MB. Send this or the text below; a file wins if both arrive. | |
| text | No | Up to 1 MB of valid UTF-8. Nesting deeper than 256 levels is refused rather than followed, because following it exhausts the server's stack. | |
| format | No | Leave it on automatic and the format is read from the text itself. | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond annotations: it returns valid true/false, a non-valid document is not a failed step, and the step passes no file onward. These are concrete operational details not covered by readOnlyHint=false or destructiveHint=false, and there is no 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?
The purpose is front-loaded and every sentence carries operational value. The If/Else recipe is somewhat long but directly relevant to correct use; it could be tightened slightly but 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 3-parameter tool with full schema coverage and no output schema, the description explains result semantics, workflow continuation, stop conditions, and the file-passing limitation. An agent has enough to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the file/text/format parameters are already fully documented. The description adds workflow context like 'passes no file on', but it does not add parameter-level semantics 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 opens with 'JSON/XML Validator — Check that text is valid JSON or XML and tidy its layout', which states a specific verb, resource, and outcome. It clearly distinguishes this validation/formatting tool from other analyze_* 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 gives strong workflow guidance: invalid input is still an answer, and it explains exactly how to use an If/Else step with {{step_N.valid}} to stop a workflow. It does not name alternative tools or explicit when-not cases, but the tool's purpose is sufficiently unique among siblings.
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?
With readOnlyHint=true, the safety profile is already known, while the description adds behavioral context: PDF/HTML are parsed for hyperlinks and other file types are scanned as raw text. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight phrases plus a category tag, with the main behavior front-loaded and no filler. Every sentence contributes to understanding inputs and 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 two-parameter, read-only extractor this is nearly complete: it explains input types, text/file precedence in the schema, and fallback scanning. It doesn't describe the exact return shape, but 'extract all hyperlinks' sufficiently implies a list of links.
Complex tools with many parameters or behaviors need more documentation. Simple 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 parameters are named and documented well, including the file-wins precedence. The description mostly restates what the schema already says, so it doesn't add significant parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Extract all hyperlinks from a PDF or HTML file, or from pasted text,' giving a specific verb, resource, and accepted source types. It also distinguishes itself from the long analyze_* sibling list by specifying files/text rather than general analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly indicates the tool is for link extraction from PDF/HTML/text and notes the fallback behavior for other file types. It doesn't explicitly name alternative tools or exclusion conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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_readabilityARead-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?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the agent knows this is a safe, deterministic read operation. The description adds the specific metrics computed and the input constraints (five words minimum, 25MB max), which is useful context beyond the annotations. It does not describe output format or edge cases, but the annotations carry the 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, front-loaded sentence that names the tool, the metrics, and the input type. The '[category: analyze]' tag is a minor addition but does not hurt. 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 simple read-only scoring tool with a complete schema and safety annotations, the description is nearly complete. It could mention the output format (e.g., scores returned), but the absence is minor given the tool's simplicity and the annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters well. The description adds the 'five words minimum' constraint and the 25MB limit, which are not in the schema, but it does not need to add much more because the schema is complete.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Calculate') and resource ('Flesch Reading Ease and Flesch-Kincaid Grade Level for a text'), which clearly distinguishes it from the many sibling analyze_* tools. The title 'Readability Scorer' reinforces the purpose without being a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when a readability score is needed, and the schema clarifies the two input modes (paste text or upload a document). It does not explicitly name alternatives or exclusions, but among the analyze_* siblings, none overlap with readability scoring, so the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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, WMV, FLV, 3GP or MPG) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the safe, read-only nature is covered. The description adds minor context by listing what is inspected, which hints at output scope, but it does not disclose limitations such as file size constraints, runtime, or what happens with unsupported codecs. Given the annotation coverage, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence followed by a category tag. It is front-loaded with the purpose and the properties list is compact. It slightly duplicates the annotation title ('Video Inspector'), but there is no fluff or excessive verbiage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 inspection tool, the description covers the essential information: what it inspects (the file) and what it reports. With no output schema, the property list is helpful. However, it does not explicitly describe the return structure or format, which would make it 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?
The schema describes the file parameter with format: 'binary' and enumerates supported formats, so schema coverage is 100%. The description does not add meaning beyond that; the parameter is self-explanatory. Baseline 3 is correct because 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 uses a specific verb ('Inspect'), a clear resource ('a video'), and enumerates exact data points (duration, resolution, frame rate, codec, audio tracks, bitrate). This makes it easy for an agent to distinguish it from broad siblings like analyze_file or analyze_metadata, and from analyze_audio, 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?
There is no explicit guidance on when to use this tool versus alternatives. The category tag and the video-specific properties imply usage for video inspection, but there are no exclusions or pointer to siblings like analyze_audio or analyze_metadata. The agent must infer the appropriate use case from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_word_countARead-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. The description adds supported file types and the list of computed metrics, which is useful. It does not disclose output format or how reading time is estimated, but for a simple read-only analyzer this is a minor 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?
A single efficient sentence that front-loads the tool's purpose and output metrics, followed by supported input types. No wasted words; the category tag is minor and does not detract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 analysis tool with fully documented parameters, the description covers inputs, outputs, and file restrictions. It would benefit from a brief note on the response shape, but the tool's behavior is otherwise sufficiently clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'text' and 'file' parameters fully described. The description reinforces the input options ('text or uploaded document') but adds no meaning beyond the parameter descriptions already 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 names a specific verb ('Count') and a clear resource: words, characters, sentences, paragraphs, and reading time. It also specifies input modes (text or uploaded .txt/.pdf/.docx), making it easy to distinguish from siblings like analyze_word_frequency 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?
The description provides clear context: this tool is for counting text metrics from pasted text or uploaded documents. It does not explicitly exclude alternatives or state when not to use it, but the intended use case is unambiguous from the description alone.
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?
The readOnlyHint annotation already signals that this is a safe read operation, and the description's 'Analyse' is consistent with that. However, the description adds no extra behavioral context, such as what happens with large files, performance characteristics, or any side effects. It does not contradict annotations, but it also does not enrich 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, focused sentence that front-loads the purpose and includes a category tag. It contains no filler or redundant phrasing, making it highly concise while still conveying the essential 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?
The tool has no output schema, and the description fails to describe what the tool returns (e.g., a list, JSON, or other format). It also omits any mention of edge cases or how the mutually exclusive file/text parameters are handled beyond what the schema implies. For an agent to call this tool confidently, it would need to know the output structure, which 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%, with each parameter (file, text, topN, exclude) already explained in the schema. The tool description itself does not mention any parameters or add semantics beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Analyse' and the resource 'word frequency distribution in a text or document file', making the purpose unambiguous. It does not explicitly differentiate from the sibling tool analyze_word_count, but the name and phrasing are specific enough that an agent can infer the core function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 alternatives such as analyze_word_count or other analyze_* tools. It neither mentions exclusions nor suggests conditions for choosing this tool. The schema's x-require-one-of constraint is structural, not usage guidance.
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?
Annotations are essentially blank (false hints), so the description carries the burden. It discloses that the result is a downloadable file, that it chains in workflows, and that inline text is accepted via an 'input' string. Notably, this 'input' string is not present in the schema, which is confusing but still adds behavioral information rather than hiding 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?
Three sentences, front-loaded with the core purpose, followed by usage and an input alternative. There is little waste; the trailing '[category: convert]' is minor metadata that could be dropped, and 'Data Converter' repeats the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, no-output-schema tool, the description covers the essential inputs, target selection, and the downloadable-result behavior. The main gap is the undocumented inline-text path: it is referenced but not reconciled with the required 'file' parameter, which could leave an agent unsure how to satisfy the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains 'to', 'from', and 'file' thoroughly, including format inference and alias definitions. The description adds no per-parameter semantics beyond the schema; in fact it introduces an undocumented 'input' parameter without detailing its structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description begins with a specific verb and resource: 'Convert a data file between formats' and enumerates the exact supported formats (JSON, NDJSON/JSONL, CSV, TSV, XML, YAML, TOML, INI). This clearly differentiates it from the many sibling convert_* tools, which target documents, archives, video, or other media.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 operational context: upload a data file, pick a target format, and receive a downloadable result that chains in workflows. It also mentions the inline-text alternative. However, it does not explicitly exclude alternatives like convert_file or data_to_file or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 are default false hints (readOnlyHint=false, destructiveHint=false), so the description carries the disclosure burden and adds real behavioral context: source-format auto-detection, alac delivered as .m4a, GIF frame-rate gracefully easing down when width+fps is too heavy, and a 'Business gate' caveat on some video edges. What is missing is the output/return contract (no output schema) and which edges are exactly gated, but the disclosures present are genuine and non-tautological.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long, but every clause contributes a distinct capability list, a routing rule, or a behavioral caveat — there is no filler. The purpose statement is front-loaded in the first sentence, media-type sections are cleanly grouped, and the trailing [category: convert] tag is lightweight 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?
High-complexity tool with 5 parameters, two large enums, and no output schema; the description covers the main decision surface exhaustively — what source formats are readable, what targets exist, and which conversions belong to other tools. Remaining gaps are the unspecified shape of a successful conversion result and the vague 'Business gate on some edges' — the exact gated edges are never listed.
Complex tools with many parameters or behaviors need more documentation. Simple 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 earns the 4 by adding directional semantics the bare enums cannot express: heic/svg/psd are input-only, alac is delivered wrapped in .m4a, legacy flv/wmv/3gp/mpg/vob/ts/m2ts convert only to mp4, and audio extraction pairs mp4/mov/mkv/webm/avi sources to mp3/wav/aac/m4a/ogg/flac/opus/aiff/alac targets. The gif_fps/gif_width degradation behavior in the description reinforces the schema's own limits note, adding a small incremental layer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Leads with a specific verb+resource ('Convert a file between formats') and then pins down scope with an exhaustive matrix: image↔image, audio↔audio, video↔video/GIF, audio extraction, subtitles, DOC/DOCX/TXT→PDF, image→PDF, and CBZ→PDF. It explicitly differentiates from siblings by stating that office/document, archive, and data conversions 'live in convert_document / convert_archive / convert_data.' The only weakness is unaddressed overlap with convert_video or photo_format_converter, but the matrix already answers those cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-not guidance and named alternatives for the most ambiguous categories: document/office conversions route to convert_document, archives to convert_archive, and data formats to convert_data, plus a 'Business gate on some edges' warning that signals limited availability on some video paths. However, it gives no when-to-use guidance for overlapping siblings like convert_video, media_extract_audio, or photo_format_converter, and the gated edges are never enumerated.
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?
Beyond annotations, the description discloses the lossy-conversion policy: anything that cannot survive is reported in the X-Conversion-Notes header rather than dropped silently, and strict=true switches to refusal. It also promises preservation of track segments, timestamps, elevations, and polygon holes, giving the agent a clear behavioral model. This 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 compact, front-loaded with purpose, then fidelity guarantees, then failure behavior and the strict option. Each clause earns its place, and the [category: convert] tag adds useful discoverability without 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 conversion tool with full parameter schema coverage, the description covers the supported formats, what is preserved, how loss is communicated, and how to make loss fatal via strict. Agents have enough context to select and invoke the tool correctly; an output schema is not needed because the output type is obviously a converted 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%, and the schema already documents file, to, from, and strict with enums, defaults, and conditional rules. The description adds valuable domain context but no new parameter-level semantics, 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 names a specific verb ('Convert') and a precise resource domain ('between GPX, KML, KMZ and GeoJSON'), immediately distinguishing it from generic siblings like convert_file or convert_document. The opening 'GPS & Map Converter' plus the explicit format list leaves no ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly establishes the intended context: GPS-track and mapping formats used by Garmin, Strava, Google Earth, and GIS tools. It also explains when data survives conversion and when strict mode is appropriate. However, it never explicitly names alternative tools or states when not to use this tool, so it stops short of full 5-level 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?
The description goes well beyond annotations by explaining type preservation: numbers stay numeric, blank cells become actual nulls, and identifier strings keep leading zeros. It also discloses a limitation up front, flat schemas only, and states that nested/repeated columns are reported rather than silently flattened rather than claiming unsupported 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 core conversion behavior is front-loaded in the first sentence, and the additional behavioral caveats are compact and purposeful. Minor redundancy exists in the leading 'Parquet Converter' phrase and the trailing '[category: convert]' tag, which add little beyond the tool name and sibling context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter file conversion tool with no output schema, the description covers the main operation, supported formats, type-preservation semantics, and schema limitations. It lacks an explicit statement about the output artifact or return shape, but the parameter and schema details cover most invocation needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter, which establishes a baseline of 3. The description adds meaningful context about type fidelity, but it does not explain specific parameter behavior, formats, or aliases 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: convert Apache Parquet to CSV, TSV, JSON, NDJSON, or Excel, and back. It also adds a differentiating constraint by implying Parquet must always be one side of the conversion, which separates this from generic table-to-table converters like convert_data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 plus schema guidance makes the intended usage clear: Parquet is always one side of the pair. The to-parameter schema explicitly routes table-to-table conversions away to convert_data, and the from-parameter guidance explains when declaring the source format is recommended.
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?
Although annotations only provide readOnlyHint=false and destructiveHint=false, the description adds significant behavioral context: it details how output adapts per format (CSV zipped when multiple tables, JSON keyed by table, Excel one workbook per sheet) and discloses the strict parameter's partial-export behavior, including what happens on very large databases. This goes beyond the sparse annotations and helps set 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 description is dense but every sentence earns its place: purpose first, then output adaptation rules, then the optional table parameter, and a category tag. It is front-loaded with the core intent and avoids redundant filler. Despite being slightly long, it packs useful information without confusion.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining what the caller gets. It explains the output shapes for all three formats and the optional table-scoping and strict partial-export behavior. It does not specify the exact return container type (e.g., whether JSON is a single file or string), but given the parameter richness and schema coverage, the definition is sufficiently complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description largely mirrors what the schema already says about 'to' (multi-table output shape), 'table' (optional single-table export), and 'strict' (refuse partial answers). It does not add new parameter meaning beyond an organizational overview, so 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 precise verb and resource: 'Export a SQLite database (.db/.sqlite) to CSV, JSON or Excel.' This clearly states what the tool does and the resource it operates on. The specificity to SQLite inherently distinguishes it from generic siblings like convert_file and convert_data, so an agent can select it correctly without reading schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool: when a SQLite database needs conversion to CSV, JSON, or Excel. It also explains the multi-table behavior and the optional 'table' parameter for exporting a single table, which guides usage. It does not explicitly name alternatives or exclusions, but the input resource is specific enough to make usage obvious.
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?
The description adds behavioral notes beyond the annotations: it warns that the 'to' field must not be set to 'plain text' for Base64/URL operations (which would return input unchanged), and it explicitly states there is no 'conversion_type' field. These details help agents avoid common mistakes. The annotations are minimal (readOnlyHint=false, destructiveHint=false) and the description supplements them well.
Agents need to know what a tool does to the 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, information-dense sentence followed by a parenthetical note. It front-loads the core purpose and immediately states the required parameters, then adds a caveat. Every sentence contributes meaning without redundancy, making it 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?
The tool has no output schema, so the description must convey return expectations, and it does so implicitly (converted text) but does not specify the response format or error handling. However, for a straightforward converter, the key behavioral quirks are covered. The description is adequate for an agent to call the tool correctly, though it could mention output format or failure 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 coverage is 100%, so parameters are documented, but the description adds value by clarifying the 'from' and 'to' fields' special behavior for Base64/URL encoding, and by correcting a potential misconception about a 'conversion_type' field. This goes beyond the schema's own descriptions, which are already detailed, so the description earns a slight bonus over the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it converts text/data formats and lists the specific conversions (Markdown↔HTML, CSV↔JSON, JSON↔XML/YAML, Base64/URL encode-decode). The verb 'convert' plus the resource 'text/data' and the format list make the purpose unambiguous. It also clarifies the exact parameter names, distinguishing it from potential sibling converters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide guidance on when to use this tool versus alternative converters like convert_data or convert_file. It does not mention exclusions or conditions that would route an agent to a sibling. The only implicit hint is the format list, but no explicit 'use when' or 'don't use when' guidance is given.
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 only set readOnlyHint=false and destructiveHint=false, so the description carries the burden of behavioral disclosure. It adds several key behaviors: out-of-range CRF values are clamped rather than rejected, CRF is ignored when bitrate or preset is set, format is sniffed from bytes with filename extension as fallback, and Business tier restrictions. It does not describe the output behavior (e.g., return format), but given the annotations are minimal, it provides substantial 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 dense but well-structured: it leads with the core purpose, then formats, controls, presets, legacy support, and pricing. Every sentence adds value without redundancy. It is longer than a simple one-liner but justifies the length given the tool's complexity. Slightly front-loaded with the primary use case.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 formats, codecs, resolution, bitrate, presets, file size/duration limits, and legacy conversion. It explains failure modes (codec/format incompatibility) and free vs. Business constraints. Without an output schema, it doesn't detail the return value, but for a conversion tool the output is implied. Overall, it gives enough context for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% description coverage with detailed explanations for each parameter (e.g., CRF scale, codec compatibility, resolution behavior, preset effects). The description adds some contextual value (e.g., legacy formats, free tier limitations) but does not meaningfully enhance parameter meaning beyond what the schema already provides. 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 clearly states the verb (convert), the resource (video), and the specific purpose: making a video play or import where it currently won't. It enumerates target formats (mp4, mov, webm, mkv, avi, gif) and distinguishes from siblings like media_compress_video by focusing on format/codec conversion rather than compression. It also mentions legacy format conversion, which adds scope 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?
The description identifies the core use case: videos that fail to play/import/upload due to format incompatibility. It mentions presets for specific platforms (TikTok, Reels, Shorts, Twitter, WhatsApp) and free tier limits, which guide when the tool is appropriate. However, it does not explicitly name alternative tools (e.g., media_compress_video) or state when not to use it, so it lacks explicit exclusions.
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 — Color 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?
The description discloses that the tool writes a file, which goes beyond the basic annotations (readOnlyHint=false, destructiveHint=false). It also mentions the file is downloadable and can be emailed/zipped/converted. The CSV and JSON behavior details are already in the parameter schema, so the description adds some but not extensive behavioral context. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear headline and logical flow. The list of example upstream tools adds length but is directly useful for routing agents. It is not overly verbose, and every sentence contributes to understanding the tool's role.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 (3 params, 1 required, no output schema), the description covers the essential use case, when to use it, and the output nature (a downloadable file). It does not explain what happens if the file already exists (likely overwrites) but that is not critical. The schema fills in parameter details, so overall the description is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple 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 tool description largely repeats what the schema already explains about the parameters (CSV tabulation, JSON pretty-printing, name length limit). It does not add significant new meaning beyond the schema, so it stays at the baseline 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 states a precise action ('Write the result of an earlier step to a real, downloadable file') with supported formats (.txt, .csv, .json, .md). It clearly differentiates from sibling tools by focusing on saving in-memory results to files, not converting, analyzing, or generating. Specific examples of upstream tools (Color Palette Extractor, Password Generator, etc.) further clarify its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use after any step that produces text or data rather than a file' and lists many such tools, providing strong when-to-use guidance. It does not explicitly name alternative tools for when not to use it (e.g., when you already have a file to convert), but the purpose is distinct enough that this is not a major gap.
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?
Beyond the annotations (readOnlyHint=false, openWorldHint=true), the description discloses the write-only nature: 'Only ever writes: it cannot read, list or search anything already in their Drive.' It also surfaces the account-connection prerequisite. It does not describe failure behavior when the account is missing, but the key behavioral boundaries are exposed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core action and followed by trigger, prerequisite, and constraint. Every sentence adds distinct information; there's no filler or redundant restating of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple three-parameter schema and the description's coverage of purpose, trigger, prerequisite, and write-only limitation, an agent has everything needed to decide when to call and what the tool does. No output schema exists, but the return value for a save operation is self-evident.
Complex tools with many parameters or behaviors need more documentation. 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 covers all three parameters with descriptions at 100% coverage, so the description need not repeat them. The main description only implies the folder behavior ('We create this folder...' appears in schema, not the description). Baseline 3 is appropriate since schema carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain 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 the verb-resource pair 'Save to Google Drive' and specifies the exact scope: a finished file into the signed-in user's own Drive. The closing sentence ('Only ever writes: it cannot read, list or search anything already in their Drive') sharply distinguishes it from any file-read/search sibling. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states explicit trigger conditions: '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 gives an exclusion ('cannot read, list or search anything already in their Drive') and a prerequisite (Google account connected on Integrations page). It doesn't name alternative tools like email_file, but the scope is clear enough to route an agent.
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 or files to email, typically the previous step's output. Several files are zipped into one attachment, so it is always one email. | |
| 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?
Annotations only declare readOnlyHint=false and openWorldHint=true. The description adds real substance beyond that: the mail routes through the user's connected Google account, lands in both Sent and inbox, the recipient is always fixed, and no arbitrary content can be sent. The 5 MB size limit appears in the schema's note field.
Agents need to know what a tool does to the 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 action and recipient, then constraints, then the usage gate. Every sentence carries a distinct piece of information 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?
No output schema exists, but the description fully covers what happens after invocation (delivered to the user's own mailbox), the recipient constraint, the content constraint, and when to use it. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so file, note, and subject are all already documented in the schema. The description reinforces the fixed-recipient behavior but adds no syntax, format, or edge-case detail beyond what the schema fields provide. 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 and resource (email a finished file) plus the exact recipient scope (the user themselves, via their connected Google account). An agent can distinguish this from any convert/generate/upload sibling 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?
Gives an explicit trigger ("Use ONLY when the user explicitly asks to have a result emailed to them") and explicit exclusions (cannot email anyone else, cannot send custom or user-authored content). The when-not conditions are as clear as the when.
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' (the default) draws the words in 'text'; mode 'image' converts 'file'. With no text and a file attached, the file is converted in either mode. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | The picture to convert, up to 10 MB. Used when Mode is Image, and also when Text is left empty; with words in Text and Mode on Text, the picture is ignored. | |
| 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 only indicate readOnlyHint=false and destructiveHint=false, so the description carries the burden of explaining behavior. It adds mode-dependent logic and the automatic file fallback, going beyond the schema. It does not detail side effects or output format, but for a generator whose output is stated as ASCII art this is sufficient.
Agents need to know what a tool does to the 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 dense sentences plus a category tag, with the core purpose front-loaded. Every clause adds information about modes or fallback behavior; 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?
The description covers the tool's central decision logic (text vs image mode, automatic file fallback), and the schema handles parameter constraints such as width bounds, font enum, file size, and truncation. Since there is no output schema, the output type is clear from 'ASCII art.' Minor gaps like font-only-in-text-mode are covered by schema x-show-when 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 coverage is 100% with descriptive text for all five parameters, setting a baseline of 3. The description adds value by explaining the interplay between text, file, and mode—especially that an attached file is converted even when text mode is selected. This is meaningful beyond the individual field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Convert text or an image to ASCII art,' naming a specific verb and resource. It clearly distinguishes this tool from the many generate_* siblings by its domain (ASCII art) and by enumerating the two modes, 'text' and 'image'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when each mode applies ('Mode text (the default) draws the words in text; mode image converts file') and the fallback behavior ('With no text and a file attached, the file is converted in either mode'). This gives clear context of use, though it does not contrast this tool with an alternative sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_barcodeAInspect
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, destructiveHint=false, which already signal a non-destructive creation operation. The description adds the output format (PNG image) but does not disclose behavior like fallback to Code128 for unrecognized input (though that is in the schema) or how the generated file is returned (e.g., file path vs. data URI). With annotations covering the safety profile, the description adds modest value beyond 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 sentence followed by a category tag. It is concise and front-loads the core purpose and output format. No wasted words; every element earns its place. The category tag is 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?
The tool is relatively simple with 4 well-documented parameters and no output schema. The description covers the output format (PNG). It does not explicitly state what the return value is (e.g., a file path), but for a generate tool of this type, that is often implicit and not a critical gap. The combination of description and schema is sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (type, height, content, showText) is documented in the schema. The type parameter's description is particularly detailed, covering constraints for each barcode standard. The tool description adds no new parameter-level information, so it relies on the schema. Baseline 3 is appropriate given the 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 states a specific verb ('Generate') and resource ('a barcode') with explicit output format ('as a PNG image'). It lists example barcode types (Code128, EAN-13, DataMatrix, PDF417) which distinguishes it from the sibling generate_qr_code tool, which is specific to QR codes. The purpose is unambiguous and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 alternatives like generate_qr_code. It does not mention that this is the general-purpose barcode generator and that generate_qr_code is for QR-only needs. An agent must infer the difference from the name and description, which is insufficient.
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?
With annotations already marking the operation as non-read-only but non-destructive, the description adds limited behavioral context: it discloses that the output is printable and can be PDF or PNG. It does not explain side effects, file handling, or post-generation behavior, but this is partially 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 a single front-loaded sentence that communicates the core purpose immediately. The 'Business Card Generator' prefix slightly repeats the tool name, but it does not bloat the description or obscure the actionable 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?
All 10 parameters are thoroughly documented in the schema, which carries most of the burden. However, there is no output schema and the description does not mention what the tool returns or where the generated card goes, which is a noticeable gap for a generator 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%, and the schema already documents default values, enum options, formatting behavior, and constraints such as Latin-1 encoding and omitted lines. The description only summarizes the input categories and adds little semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Generate'), a clear resource ('printable business card'), and the output formats (PDF or PNG). It also lists the main input fields, making it easy to distinguish from the many other generate_* 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 use case is implied strongly by 'Business Card Generator' and 'Generate a printable business card', but there is no explicit guidance about when to use this tool versus alternatives such as generate_certificate or generate_placeholder_image. No exclusions or alternative routing are provided.
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 carry little signal since all hints are false/defaults, so the description bears the disclosure burden. It accurately conveys a non-destructive creation behavior that produces a printable PDF or PNG, which is consistent with annotations. It does not discuss return behavior or edge cases, though the schema's property descriptions document silent fallbacks (e.g., unknown format values returning PDF).
Agents need to know what a tool does to the 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 is a single short sentence that front-loads the purpose and output formats. Minor deductions for redundancy: 'Certificate Generator' repeats the annotated title, and '[category: generate]' is meta-noise that adds no value for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Invocation is well supported because the 100%-covered schema documents every parameter and its quirks, and the description pins down the purpose. However, with no output schema and uninformative annotations, the description gives no expectation of what a successful call returns (file path, download, base64), which is a notable gap for a tool with 10 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple 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 itself adds no parameter detail. All 10 parameters are richly documented in the schema itself, including naming cautions ('certTitle' not 'title'), fallback behaviors, and conditional rendering, so nothing important is left undocumented.
Input schemas describe structure but not intent. Descriptions should explain 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 a printable certificate of achievement or completion as PDF or PNG'), naming both the artifact and its output formats. This cleanly distinguishes it from the many sibling generate_* tools such as generate_barcode, generate_qr_code, and generate_business_card, which target entirely different artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'certificate' resource strongly implies the use case — creating achievement/completion certificates — and the sibling generate_* tools are differentiated by artifact type. However, there is no explicit when-to-use statement, no mention of alternatives, and no exclusions; usage must be inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_color_paletteAInspect
Color Palette Generator — Build a set of colours that work together, starting from one colour you choose. The mirror image of the Color Palette Extractor, which pulls a palette out of a picture you already have. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Out-of-range values are pulled back to the nearest allowed value rather than refused. | |
| scheme | No | How the other colours are chosen relative to the starting colour. | complementary |
| base_color | No | A hex colour, three or six digits, with or without the leading '#'. Anything else is refused. | #E05535 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false). The description adds minimal behavioral context beyond stating it generates a palette; it doesn't mention return format, determinism, or side effects, but given annotation coverage, this is 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?
Two sentences: the first states the core function, the second provides a sibling contrast. No filler, and the purpose is front-loaded. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with three fully-described parameters and no output schema, the description covers the essential usage. It could mention the output format (e.g., returns a list of hex colours) but that is not critical given the schema and sibling context. Overall complete enough 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% – each parameter has a clear description and defaults. The description only repeats the base_color concept ('starting from one colour you choose') without adding new meaning, so it matches the baseline for fully-documented schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Build') and resource ('a set of colours that work together'), and explicitly contrasts itself with the 'Color Palette Extractor' sibling. This makes the tool's function unambiguous and distinct from related palette tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly frames when to use this tool vs. the extractor ('starting from one colour you choose' vs. 'pulls a palette out of a picture'), which gives context. However, it does not discuss alternatives among other generate_* tools (e.g., generate_gradient) or exclusions, leaving some selection ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_faviconBInspect
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 are minimal (readOnlyHint=false, destructiveHint=false), so the description carries most of the transparency burden. It discloses the output format (ico + png) but not how the generated files are delivered, whether generation creates side effects, or what happens if the source image is invalid. Significant behavioral gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded and the overall entry is short. The second sentence explaining what a favicon is and the blank-page consequence is contextual padding rather than invocation guidance, but it does not bloat the description enough to hurt usability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 4-parameter tool, the description plus fully documented schema cover inputs and the output format reasonably well. However, there is no output schema and no mention of how the generated favicon set is returned or stored, leaving the result of the call somewhat 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 coverage is 100%, and every parameter already has a meaningful description, default, and constraints. The description adds only high-level phrasing like 'optional rounded corners' and 'from a source image', which mirrors existing schema fields. It does not meaningfully extend parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain 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'), a precise resource ('favicon set (ico + png sizes)'), and the source ('from a source image'). The operation is clearly distinct from the many sibling generate_* tools. No ambiguity about what this tool 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 guidance or alternative comparisons are given. The favicon explanation implies a use case, but it never tells an agent when to choose this over related image/generation tools. Nothing about exclusions or prerequisites is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_gradientAInspect
Gradient Generator — Blend two or more colours into a PNG image. Unlike the web page, which writes a line of CSS, this produces a real picture a later step can composite or stamp on. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | Out-of-range values are pulled back rather than refused. Width times height is also capped at 8 megapixels; over that, both sides shrink together and the shape is kept. | |
| colors | Yes | Two to sixteen colours, in order. Hex (#E05535, #E55, or with alpha #E05535FF) or a colour name. Fewer than two or more than sixteen is refused, not trimmed. | |
| format | No | PNG only. Any other value is refused. | png |
| height | No | Out-of-range values are pulled back rather than refused. See the note on width about the 8 megapixel cap. | |
| direction | No | Which way the blend runs: a CSS side or corner ('to right', 'to bottom left'), an explicit angle ('135deg', '-45'), 'radial' for a circular blend, or 'conic' for one that sweeps around. A direction we do not recognise is refused rather than quietly becoming top-to-bottom. | to right |
| positions | No | Where each colour sits along the blend, as a percentage from 0 to 100: one entry per colour, in the same order. Two colours at the same stop make a hard edge (0, 50, 50, 100). Leave it out and the colours are spaced evenly. A list without exactly one entry per colour is refused. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-readOnly and non-destructive, so the description adds context about producing a real picture for later compositing. It does not disclose further behavioral traits such as output format details, file handling, or side effects, but given annotations cover the safety profile, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The main purpose is front-loaded, and the differentiation from the web page is concise. The category tag adds organization without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 moderate complexity (6 parameters, no output schema), the description is minimal. It mentions the output is a PNG image and hints at compositing use, but does not explain how the result is returned (e.g., file path or binary) or any additional context about using the tool effectively. The schema covers parameters, but the description lacks output/return information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are fully documented in the schema. The description adds no parameter-specific information, so the baseline of 3 applies. The description does not need to repeat schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool blends two or more colours into a PNG image, and distinguishes it from a web-page variant that produces CSS. This is specific and differentiates it from sibling generate_* tools like generate_color_palette or generate_placeholder_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 contrasts with the web page alternative, indicating when to choose this tool (when a real raster image is needed for compositing). It does not mention other generate_* tools, but the differentiation from the CSS-writing variant provides clear context for a key use case.
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 are minimal (readOnlyHint=false, destructiveHint=false), so the description carries the burden. It discloses a key behavioral trait: the tool always returns all four hashes and ignores any algorithm-selection request. It also notes that file input wins over text, which is a behavioral quirk beyond the schema. It doesn't mention output format or size limits, but the core non-obvious behavior 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?
Three sentences with zero waste. The core function is front-loaded, the always-returns-all-four behavior is stated early, and the exclusions (no algorithm selection, no bcrypt) are packed into the final sentence. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with 100% schema coverage and no output schema, the description is nearly complete. It covers the main behavior, the input precedence, and the exclusions. The only minor gap is the lack of detail on the return format (e.g., whether it returns a JSON object with four hash fields), but the tool's simplicity and the schema's completeness make this a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('file' and 'text') with descriptions. The description adds the 'file wins' precedence rule, which is useful, but it doesn't add much beyond the schema. Baseline 3 is appropriate because the schema does the heavy lifting and the description adds only marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Compute'), the exact resource (MD5, SHA-1, SHA-256, SHA-512 hashes), and the input types (text or uploaded file). It also explicitly distinguishes itself from a hypothetical algorithm-selection tool by noting there is no algorithm selection and bcrypt is not supported. This clearly separates it from siblings like analyze_hash and generate_password.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: when you need MD5/SHA-1/SHA-256/SHA-512 hashes of text or a file. It explicitly states what it does NOT do (no algorithm selection, no bcrypt), which helps an agent avoid misusing it. However, it does not explicitly name alternative tools for bcrypt or other hash types, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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?
The description adds a meaningful behavioral claim—'cryptographically secure random'—and indicates output configurability. It does not contradict the annotations, but it omits edge-case behavior such as the all-character-sets-off fallback and excluded symbols, which are only explained in 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 core behavior is conveyed in a single front-loaded sentence with no wasted explanation. The 'Password Generator —' prefix and '[category: generate]' tag are mildly redundant with the title and category, but they do not meaningfully hurt clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a stateless generation tool with fully documented parameters, the description plus schema covers the essential behavior and constraints. A small gap is the absence of an explicit return-shape statement, though the output of a password generator is reasonably predictable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all seven parameters. The description's reference to 'length and character sets' adds no semantic value beyond what the schema already provides, earning the schema-rich baseline 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 names a specific action ('Generate') and a specific resource ('a cryptographically secure random password'), while also noting configurable length and character sets. This is unambiguous and clearly distinguishes it from the many sibling generate_* 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 no guidance on when to use this tool versus alternatives, nor any exclusion criteria. With siblings like generate_hash, generate_uuid, and generate_barcode nearby, the description leaves the choice entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_placeholder_imageAInspect
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 (readOnlyHint=false, destructiveHint=false) already signal this is a generating tool. The description adds that it produces placeholder images at arbitrary dimensions with custom colors and text, but it does not disclose output behavior such as how the image is returned or saved, or the clamping behavior for dimensions over 4096.
Agents need to know what a tool does to the 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 one-sentence description is concise and front-loaded with the tool's identity and action. The leading 'Placeholder Image' title is slightly redundant with the tool name, but the rest of the sentence 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?
For a six-parameter tool with no output schema, the description gives a solid high-level overview but omits the return/save behavior and expected output form. The rich parameter schema compensates for most invocation details, yet the missing output semantics leave a 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%, so the schema fully documents every parameter including defaults, clamping, and hex color expectations. The description only mentions 'background colour' and 'label text' generically, adding no parameter 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 states a specific verb ('Generate') and resource ('placeholder image') with concrete customization dimensions, background color, and label text. This distinguishes it from sibling generation tools such as generate_barcode or generate_favicon, even without naming 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 term 'placeholder image' implies the intended use case, but the description provides no explicit when-to-use guidance, exclusions, or comparison to sibling tools like generate_favicon or photo_resize. Usage context must be inferred from the tool's name and category.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_qr_codeAInspect
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 already declare non-read-only and non-destructive behavior; the description adds that output is a PNG image and inputs span URL/text/vCard. However, it does not disclose where the generated PNG is delivered (file path, base64, binary), whether a file is written to the workspace, or how invalid content is handled.
Agents need to know what a tool does to the 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 sentence is tight and information-dense, but the leading 'QR Code Generator' repeats the title attribute and the trailing '[category: generate]' tag adds no decision-relevant value for an agent. Two of the three segments are redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description bears the burden of explaining the result; 'as a PNG image' partially covers this but omits the return mechanism (file reference vs. inline data). For a simple 3-parameter generator whose schema documents all parameters, this is adequate but leaves a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline 3 applies. The description's phrase 'URL, text, or vCard data' merely echoes the schema's own content description ('The URL, text, or vCard data to encode') and adds no parameter-level detail beyond 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 states a specific verb (Generate), resource (QR code), accepted input types (URL, text, vCard data), and output format (PNG image). This clearly distinguishes it from siblings like generate_barcode and generate_placeholder_image without needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The input types (URL, text, vCard) imply when the tool applies, but there is no explicit when-to-use guidance, no mention of alternatives, and no exclusionary conditions (e.g., 'for barcodes use generate_barcode'). Usage context is present but 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_signatureAInspect
Signature Generator — Write a name out in a handwriting style and return it as a PNG with a see-through background, so a later step can stamp it onto a PDF. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | One line, up to 64 characters. Line breaks and tabs become spaces, and a leading '@' is stripped — ImageMagick reads a leading '@' as 'go and read this file', so it is never passed through. | |
| color | No | A hex colour (#1a1a2e or #fff, with or without the '#', optionally with an alpha pair) or a colour name such as black or navy. A colour we cannot read is refused, and so is ink that would not show, such as transparent. | #1a1a2e |
| style | No | Which handwriting face to use: Script is Dancing Script, Elegant is Great Vibes, Handwritten is Pacifico and Bold is Lobster, the faces the web page draws. When that face is not installed on our server, another handwriting face is drawn in its place, never a plain block font, and the X-JE-Font-Substituted response header says so. Only when no handwriting face is installed does the request fail. | script |
| padding | No | Empty space left around the signature, so it does not sit flush against the edge when it is stamped onto something. | |
| fontSize | No | Out-of-range values are pulled back to the nearest allowed value rather than refused. | |
| background | No | 'transparent' is what makes the result stampable onto a PDF or a photo. Give a colour instead, as hex or a name such as white, if you want it on a solid card. A colour we cannot read is refused rather than turned transparent. | transparent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only basic annotations, the definition adds valuable behavioral detail: the PNG has a transparent background, invalid colors are refused, out-of-range font sizes are clamped, and an unavailable handwriting font triggers substitution via a response header. It does not mention output encoding/delivery, but no annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main description is two sentences that front-load the core behavior and downstream purpose, with a category tag at the end. The longer parameter descriptions are organized by field and each sentence carries semantic 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?
For a generator with six parameters and no output schema, the definition gives the output format (PNG, transparent background) and covers failure behavior via parameter descriptions. It does not state how the PNG is delivered (path, data URL, bytes), which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each of the six parameters is documented in the input schema with defaults, constraints, and edge cases. The top-level description adds no additional parameter relationships or examples, matching 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 states a specific verb and resource: write a name in a handwriting style and return it as a transparent-background PNG for later stamping onto a PDF. It clearly distinguishes generate_signature from the many sibling generators and from the esign_* tools that place signatures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the intended usage context ('so a later step can stamp it onto a PDF'), which tells an agent this tool produces an intermediate asset rather than a finished document. It does not explicitly name the sibling esign_place/pdf_watermark as the downstream alternative, so there is a small exclusion gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_uuidAInspect
UUID Generator — Generate unique identifiers — UUID v4 or v7, ULID, Nano ID, or plain random hex. Exists so a workflow gets real identifiers instead of asking a language model to invent them. [category: generate]
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Out-of-range values are pulled back to the nearest allowed value rather than refused, and the reply says so when it happened. | |
| format | No | A name we do not recognise is refused and the five accepted names are listed. It is not quietly turned into a v4 — a caller that asked for a ULID and got a UUID has data of the wrong shape that looks perfectly healthy until something downstream breaks. | v4 |
| length | No | How many characters long each Nano ID is. Only used when the kind above is Nano ID. | |
| hyphens | No | Turn this off for the 32-character form with no dashes. Only applies to the two UUID kinds. | |
| uppercase | No | Return the letters in capitals. Nano ID and ULID have their own fixed alphabets and ignore this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal no destructive behavior, and the description adds little behavioral detail beyond listing formats and the rationale. The schema descriptions elsewhere cover edge-case clamping and refusal behavior. Nothing here contradicts annotations, but the description itself doesn't disclose return shape, randomness guarantees, or side effects beyond what the schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core action and formats, and each sentence earns its place, including the rationale for why the tool exists. The category tag is small and useful rather than redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the fully documented schema and simple generation purpose, the description is largely complete. The main gap is the lack of an output schema or any statement about the return shape, especially whether count=1 returns a single value or an array. For a generator tool, that missing detail is a minor but real omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented with defaults, ranges, conditional visibility, and enum labels. The tool description itself adds no parameter-level detail, which is acceptable given the complete schema, hence 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–object pair ('Generate unique identifiers') and immediately enumerates the exact formats: UUID v4/v7, ULID, Nano ID, or random hex. This clearly distinguishes the tool from sibling generators like generate_hash or generate_password and leaves no ambiguity about 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?
The description gives explicit application context: use it when a workflow needs real identifiers rather than having a language model invent them. It does not enumerate sibling alternatives or say when not to use it, but the stated purpose is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_add_watermarkAInspect
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 | Yes | The words burned into every frame, drawn exactly as typed (% signs and backslashes included) on one line of up to 200 characters. Required; there is no default. | |
| 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 only declare non-read-only and non-destructive. The file parameter description adds key behavioral context: forces full H.264 re-encode into MP4, audio copied, and is among the platform's slowest ops on long videos. This goes beyond annotations, although the main description does not mention it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main description is a single efficient sentence front-loaded with the action and key controls. The [category: media] tag is minor metadata but not verbose. 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?
All 5 parameters are well-explained, including defaults and range constraints. With no output schema, return-value documentation isn't required. However, the description doesn't state whether the input is overwritten or a new file is returned, a moderate gap for a transform 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?
100% schema description coverage, and each property has explanatory content beyond the schema type: text escaping and 200-char limit, opacity visual meaning, font size fallback when set to 0, and position enum labels. Substantially helps an agent choose correct 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 ('Overlay'), resource ('video'), and method ('text watermark using FFmpeg') plus controls ('position and opacity'). The title 'Video Watermark' and [category: media] tag make it distinct from photo/pdf watermark 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?
No guidance on when to use this tool versus alternatives such as photo_watermark or pdf_watermark. The sibling list and title imply video-specific use, but the description itself does not state conditions, exclusions, or preferred scenarios.
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_audioAInspect
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), or an M4A: an MP4 that carries only sound. 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 indicate the tool is not read-only and not destructive, so the safety profile is partly covered. The description adds that audio is extracted into specified formats, but it does not disclose details like always re-encoding to the target format, how the output is returned, or whether the source is left untouched. The re-encoding behavior appears only in the file parameter schema, not in the description itself.
Agents need to know what a tool does to the 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, scannable sentence with a useful category tag. It loses a point for redundantly repeating the title 'Extract Audio' inside the description, which is minor but not zero-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?
The tool is simple, with only two well-documented parameters and no output schema, and the description names the core operation and formats. However, it does not describe the return value, any output artifact, or how this relates to sibling media tools, leaving some context for the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple 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 thoroughly, including the M4A edge case and lossless versus lossy format differences. The description's mention of output formats adds little beyond what the enum 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 uses a specific verb and resource: 'Extract the audio track from a video file' and lists the exact output formats (MP3, WAV, OGG, FLAC, AAC). It clearly distinguishes this tool from siblings like media_extract_frames, media_trim_audio, and media_merge_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?
The use case is implied: pull audio out of a video file into a specified format. However, the description does not explicitly state when to prefer this over related tools such as convert_video, media_trim_audio, or media_merge_audio, nor does it give any when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_extract_framesAInspect
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 give little safety context (readOnlyHint false, destructiveHint false). The description adds important behavioral detail: output is always JPEGs in a ZIP and there is no PNG option despite the tool blurb. Side effects or file handling details are not covered, but the key output contract 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 one compact, front-loaded sentence that conveys the action, resource, frame rate behavior, and output format. It also includes a useful correction about JPEG-only output. 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 simple extraction tool with no output schema, the description supplies the missing return-format contract (ZIP of JPEGs) and clarifies the output type. Parameter constraints are covered by the schema. It does not mention supported video formats or potential processing time, but that 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%, and all three parameters have meaningful schema descriptions. The tool description does not add parameter-level semantics beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Extract frames from a video at a specified frame rate as JPEG images (returned as a ZIP).' This clearly differentiates it from siblings like media_extract_audio and media_trim_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 implies when to use it—when you need JPEG frames from a video—but it does not explicitly name alternatives or give when-not-to-use guidance. Context is clear, but exclusion guidance is missing.
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, FLAC, M4A, WMA, OPUS or AIFF) — at least 2 required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is non-read-only and non-destructive, and the description adds that it uses FFmpeg and produces an MP3. However, it does not state what the tool returns or where the merged file is placed, which is a notable gap given the absence of 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?
The core statement is one efficient sentence with the action and key constraint front-loaded. The leading 'Merge Audio' is somewhat redundant with the title, and the '[category: media]' tag adds little, but overall it is concise 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 tool with full schema documentation and annotations, the description covers purpose, input requirements, and output format. The main gap is output handling, but this is minor for such a focused merge 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, 'files', is fully documented in the schema with supported formats and a minItems constraint. The description repeats 'at least 2' but adds no new parameter meaning, so schema coverage carries the weight; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb and resource: 'Concatenate multiple audio files (at least 2) into one MP3.' It clearly distinguishes from siblings like media_extract_audio and media_trim_audio by focusing on merging multiple inputs into a single output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: use this tool when concatenating two or more audio files into one MP3. It does not explicitly name alternative tools or exclusion conditions, but the phrase 'Concatenate multiple audio files' provides enough context to avoid confusion with sibling media tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_mute_videoBInspect
Mute Video — Remove the audio track from a video file. [category: media]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (MP4, MOV, AVI, MKV, WebM or MPG) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the core action but does not disclose what the tool returns, whether the original file is modified, or any important behavioral details. Annotations only supply false hints, so the description carries the full burden and provides only minimal operational information.
Agents need to know what a tool does to the 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 action front-loaded. The `[category: media]` tag is compact and adds organizational context without distracting from the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 well-documented parameter and no nested objects, the description and schema together are sufficient to understand the input and intended operation. It lacks explicit output-behavior detail, but the simplicity of the tool means an agent has enough information 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 schema has 100% coverage for the single parameter, describing `file` as an input file with supported formats. The description adds no extra meaning beyond 'video file,' so it does not improve on what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Remove the audio track from a video file,' which clarifies what 'mute' means. It is clear and distinguishes the action from simple play/analyze operations, though it does not explicitly contrast with related media tools like media_extract_audio or media_trim_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?
There is no explicit guidance about when to use this tool versus alternatives such as media_extract_audio, media_trim_video, or convert_video. The operation is inferable from the name and description, but no sibling exclusions or context are provided, so an agent must rely on inference.
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 file name with no extension is read by the file's type, and treated as .mp3 when the type names no sound format. | |
| 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 declare readOnlyHint=false and destructiveHint=false, covering the mutation and non-destructive nature. The description adds useful behavioral details: it mentions 'stream copy' meaning the output keeps the container/codec, and explains the fallback for files without a recognized extension (treated as .mp3). This goes beyond annotations, though it does not describe the exact return value or whether a new file is created, but those are not critical.
Agents need to know what a tool does to the 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 includes the key technical detail (FFmpeg). It avoids unnecessary words and the category tag is unobtrusive. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters, full schema descriptions, and no output schema, the description covers the core action and even adds a behavioral note about stream copying. The only noticeable gap is the lack of explicit usage guidance regarding when to choose this tool over its media siblings, which is a minor omission. Overall, the agent has enough context to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (file, start, end) have detailed descriptions in the schema itself. The tool description does not add any parameter-specific details beyond what the schema provides, so it adds no extra value in this dimension. The baseline of 3 is appropriate since the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Trim'), a resource ('an audio file'), and the exact operation (trim to specified start and end times) while naming the underlying tool (FFmpeg). This clearly distinguishes it from siblings like media_trim_video or media_extract_audio, which have different targets. The action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for trimming audio files, which is enough to infer its primary use, but it does not explicitly mention when not to use it or point to alternatives. For example, it does not say 'for video trimming, use media_trim_video' or warn against using this for extraction. Given the large number of sibling tools, explicit differentiation would be valuable.
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?
Annotations only provide readOnlyHint=false and destructiveHint=false. The description adds the key behavioral fact 'without re-encoding', which indicates a lossless operation. While the schema description for the file parameter elaborates on stream copy and keyframe alignment, the description itself contributes a meaningful trait 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, front-loaded sentence that efficiently conveys the action, resource, and key behavioral trait. It includes a category tag and no filler, making it 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?
For a simple trim tool with a thorough schema, the description covers the core function and the lossless aspect. It does not mention output or return behavior, but the absence of an output schema is not a significant gap given the schema's completeness. Overall, it is sufficiently informative for an agent 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% with detailed explanations for all three parameters (end, file, start), including defaults and constraints. The description adds no additional parameter-specific meaning beyond summarizing 'start and end time', so it rests 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 clearly states the verb 'Trim' and the resource 'video clip' with specific start/end times. The phrase 'without re-encoding' distinguishes it from compression or conversion tools, making its purpose unambiguous among many sibling media 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 implies a use case (lossless trimming) but does not explicitly contrast with alternatives like media_trim_audio or media_compress_video. It lacks explicit when-to-use or when-not-to-use guidance, though the 'without re-encoding' hint gives some direction.
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?
Annotations already declare readOnlyHint=false and openWorldHint=true, indicating a write operation with possible external effects. The description adds the useful detail that missing parent folders are created, which is a behavioral trait. However, it does not disclose potential side effects, permission requirements, or failure modes 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?
The description is a single, efficient sentence with a clear title and the core behavior front-loaded. It includes the recursive parent folder detail without padding. The category tag adds metadata without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description covers the main behavior and the key nuance of recursive folder creation. It does not explain return values or error handling, but those are not critical for such a straightforward operation. The main gap is the lack of contrast with octopus_mkdir, which is a contextual completeness issue, but overall it is fairly 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 covers 100% of the parameter and already provides an example ('/Clients/Acme'). The description adds meaning by explaining that parent folders are created implicitly, which goes beyond the schema's literal path interpretation. This enriches the agent's understanding of the path parameter.
Input schemas describe structure but not intent. Descriptions should explain 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 ('create'), resource ('folder'), and scope ('in the user's file storage'). Mentions the recursive creation of missing parent folders. However, it does not explicitly differentiate from the sibling tool octopus_mkdir, which likely serves a similar purpose, so it misses the chance to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus octopus_mkdir or other sibling tools. The recursive parent creation is implied but not framed as a differentiator or condition. The description provides no 'use when' or 'instead of' cues.
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?
Annotations already convey readOnlyHint=false, so the mutation is expected. The description adds meaningful behavioral context: it moves the file, creates the destination folder if missing, and supports optional renaming. It does not specify overwrite behavior or whether the original file is removed, but the term 'move' plus the annotation profile makes the core behavior 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 and front-loaded with the action, immediately followed by scope, side effects, and trigger phrases. There is minor redundancy with the title ('Move File to Folder' repeated at the start), but every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate three-parameter tool with full schema coverage and useful annotations, the description provides enough to select and invoke it correctly: what is moved, where, optional rename, folder creation, and trigger language. It does not describe the success response or overwrite behavior, and there is no output schema, but these are secondary to 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 file_id, to_path, and new_name in detail. The description's mentions of 'optionally renaming it' and 'creates the folder if it doesn't exist' paraphrase schema content rather than adding new semantic detail. This meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: '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.' This makes the operation unambiguous. It is clearly distinguished from file-creation siblings by focusing on moving an existing file into a folder, rather than writing, uploading, or merely making a folder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 trigger conditions: 'Use when the user says save / put / move / file this into a folder.' This is clear context for when to select the tool. It does not explicitly list exclusions or alternative tools (e.g., octopus_write, octopus_make_folder), so it stops short of full when-not 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 declare readOnlyHint=false and destructiveHint=false, so the description need not restate that it's a write operation. However, the description adds the 'preserving readability' guarantee and the DPI presets, but it does not disclose whether the original file is overwritten, where the output goes, or that compression is lossy. This is partial behavioral context, but not a full picture.
Agents need to know what a tool does to the 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, information-dense sentence that front-loads the core action and then lists presets and modes. It's compact and skimmable, though slightly long due to the enumeration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 4 parameters and no output schema, the description covers the main modes but leaves out practical details like output file naming, whether the operation is in-place, and any size limits beyond the target-size parameter. It's adequate for a simple tool but not fully self-contained for an agent that needs to predict the 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 covers all parameters with descriptions, so the baseline is 3. The description adds a concise summary of quality presets and the target-size mode, which is helpful, but it largely repeats the schema's details and doesn't introduce new parameter-specific semantics beyond the 'metadata-only stripping' phrase, which is also in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (compress) and resource (PDF), and explicitly mentions the outcome (reduce file size) while preserving readability. It also lists the quality presets and modes, distinguishing it from sibling tools like pdf_remove_metadata (which only strips metadata) by framing metadata stripping as a mode within 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?
It provides clear context on when to use (to reduce PDF size) and explains the preset options, but it does not explicitly guide the agent on when to prefer this tool over the sibling pdf_remove_metadata for metadata-only stripping, nor does it mention any exclusions. The overlap with pdf_remove_metadata is noted but not resolved, leaving some ambiguity.
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 indicate readOnlyHint=false (mutation) and destructiveHint=false. The description adds valuable behavioral context beyond annotations: omitted edges default to 36pt, 'send 0 to leave an edge uncropped', and over-cropping yields a 1-point page rather than an error. This complements the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the action and key constraints (defaults, units, edge behavior) efficiently. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple crop tool with full schema coverage and no output schema, the description covers essential edge cases and defaults. The only minor omission is whether the output overwrites the original or creates a new file, but the optional outputFilename parameter implies a new file. Overall, an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed per-parameter descriptions including default, min, max, and behavior of 0. The description adds the 'PostScript points' unit context and reiterates the default rule, but mostly restates schema information. Baseline 3 is appropriate given 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 states a specific verb ('Crop'), resource ('PDF'), scope ('all pages'), and method ('setting new margins'). It clearly differentiates from sibling tools like photo_crop (images) and other pdf_* tools that perform different 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 explains what the tool does and its key defaults, but it does not explicitly state when to use this tool vs alternatives or when not to use it. No exclusions or alternative tool references are provided. The intended use is implied by the name and sibling context, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_delete_pagesBInspect
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'. At least one page must be left. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description accurately communicates that the tool mutates a PDF by removing pagesnewline. However, it adds little behavioral context beyond the annotations, such as whether the original file is altered, what the output looks like, or whether the deletion is irreversible.
Agents need to know what a tool does to the 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 front-loads the key action. The redundant "Delete Pages" prefix and category tag add minor noise, but overall the definition is 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 a simple two-parameter tool, the parameter schema fills most gaps, including page syntax and the unlock prerequisite. Still, there is no output schema and the description does not clarify expected return value or side effects for a mutating operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter descriptions already explain the file format, page syntax, and constraint that at least one page must remain. The description itself contributes no additional parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action and resource: "Remove specific pages from a PDF." It is specific enough to be understood, though it does not explicitly differentiate from similar siblings like pdf_extract_pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—when pages need to be removed from a PDF—but does not state alternatives or exclusions. The schema adds a useful prerequisite for password-protected files, but this is not in the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_excel_to_pdfBInspect
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 only provide basic flags (readOnlyHint=false, destructiveHint=false). The description adds meaningful behavioral context by disclosing the hybrid pipeline: excelize preprocesses the xlsx for page layout and sheet visibility, then LibreOffice performs the conversion. This helps explain why some options apply only to .xlsx input and gives the agent insight into internal behavior not available in annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the core purpose before the pipeline detail. The feature enumeration is dense but relevant, and there is no filler. It could be slightly better structured with scannable features, but it earns its place and stays appropriately sized for a 26-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity tool with 26 parameters and no output schema, the description gives a solid overview of capabilities and pipeline behavior. However, it omits practical invocation context: output shape (beyond what splitMode schema implies), behavior for unsupported input edge cases, or explicit routing to sibling batch/inspect tools. The schema compensates heavily, but the description alone is 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%, and each parameter has a rich description or enum labels, so the schema already carries the semantic burden. The tool description lists feature categories like fit-to-page, orientation, and watermark, but these repeat what the schema documents and do not meaningfully add param-level meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Convert Excel spreadsheets to PDF,' and lists supported extensions and major features. This is a specific, non-tautological purpose. However, it does not explicitly distinguish itself from close siblings like pdf_excel_to_pdf_batch or pdf_excel_to_pdf_inspect, so the boundary relies on the tool name rather than the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says what the tool does but provides no guidance about when to choose it over alternatives, such as the batch variant for multiple files or the inspect variant for examining spreadsheets. There are no stated exclusions, prerequisites, or 'use this instead when...' signals. The only implied usage is the general 'Excel to PDF' conversion context.
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 already indicate the tool is not read-only, not destructive, and not open-world. The description adds the useful return-structure detail ('Returns a ZIP with per-file subfolders'), but does not disclose side effects, error behavior, or how original files are affected. This adds some value beyond annotations but leaves behavioral gaps.
Agents need to know what a tool does to the 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 with no filler. It front-loads the core action, states the input limit, and closes with the key output format — 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 batch tool with 26 parameters, the description relies appropriately on the schema for parameter details and adds the essential batch-scope and output-format information. It is slightly light on behavioral context, such as how the ZIP output is organized beyond subfolders, but this is minor 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 the parameters are already fully documented in the schema. The description adds only the high-level notion that the same configuration applies to all files, which is helpful but not required for interpreting individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Apply'), resource ('Excel-to-PDF configuration'), and scope ('up to 20 spreadsheets'). It also names the output ('ZIP with per-file subfolders'), making it clearly distinguishable from the single-file sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear batch context and an explicit file-count limit ('up to 20'), which tells an agent this is the multi-file variant. It does not explicitly mention the single-file alternative or state when not to use this tool, but the batch framing is sufficiently clear.
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 destructiveHint=false, and the description reinforces this by saying the operation creates a new PDF rather than modifying the input. However, it does not add much behavioral detail beyond the annotations, such as handling of invalid page ranges or whether the original file is preserved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words: it states the action, the output, and the alternative in a front-loaded structure. The trailing [category: pdf] tag is unobtrusive 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?
For a straightforward PDF utility, the description plus fully-covered schema provides everything an agent needs: what the tool does, what it returns (a new PDF), and how it differs from Split PDF. No critical 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%, with the pages parameter already documented via the example '2-5,8' and the file schema stating the 25MB limit and .pdf requirement. The description adds no parameter-level meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Pull a chosen range of pages out of a PDF into a new PDF.' It clearly states what the tool does and explicitly contrasts it with Split PDF, making the tool's identity and scope easy to distinguish.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 an explicit when-not-to-use condition and names the alternative: 'To split a document into single pages, fixed chunks, or odd and even pages, use Split PDF instead.' This is direct routing guidance for the agent.
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 are minimal (readOnlyHint/destructiveHint false), so the description carries the transparency burden and does so well: it discloses signature-aware handling ('Flattening destroys a signature' — reinforced in the schema), the ZIP bundle that returns JSON sidecar files instead of a PDF for exportData, and the Starter+ tier requirement for OCR. No contradiction with the annotations; destructiveHint:false is consistent since flattening emits a new file and returns signed originals untouched.
Agents need to know what a tool does to the 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 clause, which is good, but the rest is a single dense run-on sentence cramming ~10 features into a comma-separated list. It is informative but difficult to scan quickly; it could be broken into a purpose statement plus a short capabilities list. The trailing [category: pdf] tag is useful for discovery.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 covers the major behaviors: flatten modes, page ranges, signature policy, link preservation, watermarking, compression, PDF/A archival, OCR, and the ZIP sidecar export. It does not explicitly state that the default output is a flattened PDF, though this is implied by 'alongside the flattened file.' Given the tool's complexity and absent output schema, coverage is strong.
Complex tools with many parameters or behaviors need more documentation. Simple 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 enumerates capabilities that align with parameters (mode, pages, signatureMode, watermarkText, compressImages, outputFormat, ocrFirst) but adds no new semantic detail beyond what the schema already richly documents — e.g., signatureMode's default-preserve behavior and the enum labels are already in the schema. Description adds marginal value here.
Input schemas describe structure but not intent. Descriptions should explain 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 clause 'Flatten PDF forms and annotations into static page content' is a specific verb+resource+outcome statement. The subsequent feature list (modes, page ranges, signature handling, watermark, compression, PDF/A, OCR, ZIP) maps directly onto the 20-parameter schema and differentiates it from siblings like pdf_watermark, pdf_compress, pdf_ocr, and pdf_to_pdfa.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 context is implied through the capability enumeration, but there is no explicit guidance on when to prefer this tool over its siblings. Notably, pdf_flatten_batch exists as a sibling yet the description never names it or states when the single-file version is appropriate, nor does it point to pdf_watermark for watermark-only jobs. No when/when-not routing is provided.
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 provide readOnlyHint=false and destructiveHint=false, so the operation is understood as a non-read-only transformation. The description adds useful behavioral context about the ZIP output and per-file error entries. It does not mention that flattening can destroy signatures, but the schema's signatureMode parameter covers that explicitly.
Agents need to know what a tool does to the 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. It communicates the core action, batch limit, and return format 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?
Given the very rich input schema and annotations, the description is complete enough for an agent to select and invoke the tool. It covers purpose, batch limit, output format, and error handling. It could explicitly route single-file cases to pdf_flatten, but that is a minor omission rather than a functional 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 schema fully documents all 20 parameters. The description adds no parameter-level detail beyond 'same flatten configuration', which is appropriate but not additive. Baseline 3 applies because the schema carries the semantic burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Flatten PDFs'), the batch scope ('up to 20 PDFs in one request'), and the output format ('Returns a ZIP'). It clearly distinguishes itself from the sibling pdf_flatten by emphasizing the batch nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies batch usage ('up to 20 PDFs in one request') and that the same configuration is applied across files. It does not explicitly name pdf_flatten as the single-file alternative, but the sibling name and the word 'Batch' make the intended use case clear.
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_grayscaleAInspect
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 mark the tool as non-read-only and non-destructive. The description adds one behavioral fact—removing all colour information—but does not disclose output format, whether the original file is preserved, or any side effects. It is acceptable but minimal.
Agents need to know what a tool does to the 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 fluff. The '[category: pdf]' tag adds minor organizational value but is not essential; still, length 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?
Given the rich schema with detailed parameter descriptions and annotations that cover safety, the description plus schema is largely sufficient for a simple conversion tool. It doesn't describe the return value, but for a tool that clearly returns a converted PDF, 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?
Input schema covers all 5 parameters with 100% description coverage, so the baseline is 3. The description adds no parameter-specific semantics beyond what the schema already provides, and that is acceptable.
Input schemas describe structure but not intent. Descriptions should explain 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') and resource ('PDF to grayscale, removing all colour information'), clearly distinguishing it from sibling pdf_* tools. It states exactly what the tool does in one concise sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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, and no mention of related tools such as pdf_compress or pdf_to_images. The only implied use case is 'when you need grayscale conversion,' which is not adequate for an agent choosing among many pdf tools.
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_pdfCInspect
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 provide only readOnlyHint=false and destructiveHint=false, and the description adds no additional behavioral context such as output handling, file side effects, limits, or permissions. The outcome 'single PDF document' is the core purpose but adds little behavioral transparency beyond what the annotations and title 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 core sentence is short, front-loaded with the verb, and contains no filler beyond the redundant 'Images to PDF' prefix and the category tag. It earns a high score for efficiency, but loses a point because the opening phrase duplicates the tool title and the bracketed category adds little 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?
The tool is moderately complex with six parameters, but the schema fully documents each one and the description states the output type. What is missing is explicit usage guidance and behavioral side-effect disclosure, which keeps the description adequate rather than 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 schema carries the parameter-semantics burden and the baseline is 3. The description itself adds no parameter semantics, and its format list ('JPG, PNG, TIFF') is inconsistent with the schema's file list ('JPG, JPEG, PNG, WEBP') which could mislead an agent about accepted 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 states a concrete action and output: 'Combine multiple images ... into a single PDF document.' It is clear that this is a PDF-creation tool for multiple images. It does not explicitly differentiate itself from overlapping siblings like convert_jpg_to_pdf, and the format list in the description partially conflicts with 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?
There is no guidance about when to choose this tool versus convert_jpg_to_pdf, convert_batch, or pdf_merge. The description implies a combination use case but gives no exclusions, conditions, or alternative routing; it leaves the choice 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_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 include readOnlyHint=false and destructiveHint=false, indicating a non-destructive write operation. The description adds context by listing supported features (page selection, blanks, bookmarks, metadata), which implies it creates a new output file without altering inputs. It does not contradict annotations and provides useful behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with the core purpose front-loaded ('Merge PDFs') and a concise list of supported features. Every word earns its place, and it is 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?
Given the tool's moderate complexity (7 parameters, 1 required) and the absence of an output schema, the description covers the main capabilities and constraints (at least 2 files, ordering). It does not mention return format or file handling, but for a PDF merge operation this is minor and likely implied by the category. Overall, it is sufficient for an agent 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 parameters already have detailed descriptions. The tool description summarizes the feature set (page selection, blanks, bookmarks, metadata) which aligns with the parameters, but it does not add meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Merge PDFs' and explains it combines multiple PDF files into a single document in the order provided. It clearly distinguishes from sibling tools like pdf_split and pdf_reorder by focusing on concatenation, 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 states the core action but does not explicitly mention when to prefer this tool over alternatives like pdf_interleave or pdf_reorder. The purpose is clear enough to infer usage, but no exclusions or alternative references are given.
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_numbersBInspect
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?
The annotations already cover the safety profile with readOnlyHint=false and destructiveHint=false, so the description is not required to repeat those basics. It adds a bit of behavioral context about positioning, but it does not say whether a new PDF is produced, what gets returned, or what happens on invalid 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?
The description is compact and front-loaded: one sentence states the operation and its main option, followed by a short category tag. There is minor redundancy because 'Add Page Numbers' appears in both the title and the sentence, but no meaningful 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?
With 12 parameters and no output schema, the description alone is thin, especially around return values, output file behavior, and error conditions. However, the complete parameter schema and annotations partially compensate, making the tool callable but not fully self-explanatory.
Complex tools with many parameters or behaviors need more documentation. Simple 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 12 parameters, including color, start, format, position, and romanNumerals. The prose only re-states the position dimension already visible in the schema enum, adding no new parameter semantics beyond the structured data.
Input schemas describe structure but not intent. Descriptions should explain 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 is specific: 'Add page numbers to a PDF at a specified position (top/bottom, left/center/right)' names the verb, resource, and key customization. It does not explicitly distinguish itself from sibling tools like pdf_header_footer or pdf_watermark, 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?
There is no guidance on when to use this tool versus alternatives such as pdf_header_footer or pdf_watermark. It also does not mention that password-protected input should be sent to pdf_unlock first, leaving selection and prerequisites to the agent's inference.
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_protectAInspect
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 indicate this is not read-only (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds the outcome (prevents opening/printing) but does not disclose whether a new file is returned, whether the original is modified, or how encryption settings affect the result. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence delivers the action and purpose immediately, with a category tag at the end. There is no redundant wording, and every element contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 seven parameters and no output schema, the description leaves some gaps: it does not describe what the tool returns (e.g., a password-protected PDF file) or whether the original file is preserved. The individual parameter descriptions in the schema compensate for most usage questions, so the definition is 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?
The input schema covers 100% of parameters with descriptions, including detailed guidance for password, permissions, and encryption options. The tool description itself adds no parameter-specific meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action, 'Add a password to a PDF', and the intended effect, preventing unauthorized opening or printing. It clearly distinguishes from most sibling tools like pdf_merge or pdf_compress, though it does not explicitly name the inverse tool pdf_unlock. This is clear enough to understand the tool's role among many PDF 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 implies the use case—when a PDF needs password protection—but provides no explicit guidance about when not to use it or which alternative to choose (e.g., pdf_unlock for removing protection, pdf_watermark for visible markings). No prerequisites or exclusions are mentioned, leaving the agent to infer from the tool name and siblings.
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_reorderBInspect
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?
The annotations already declare readOnlyHint=false and destructiveHint=false, but the description adds no operational context beyond that: no statement about whether a new PDF is returned, whether the original is preserved, or what the response looks like. For a file-transformation tool with no output schema, this is a meaningful 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 compact and front-loaded, with the operation and mechanism in the first clause. The main redundancy is repeating the title 'Reorder PDF Pages' at the start, but the category tag and the rest are minimal and useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 covers parameter meaning well, and the task is a simple file transformation, but with no output schema, the description should clarify output/return behavior. It also provides no sibling differentiation, so the description is sufficient for basic invocation but not fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple 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, order, password, and outputName thoroughly, including the 'EVERY page exactly once' rule and 400 rejection behavior. The description only says 'desired page sequence,' adding no meaning beyond the schema, which matches the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain 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 the action verb 'Reorder' tied to a specific resource ('the pages of a PDF') and the mechanism ('supplying the desired page sequence'). This clearly differentiates it from siblings like pdf_reverse (simple reversal) and pdf_extract_pages (subset selection).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 or mention of alternatives. It does not distinguish itself from pdf_reverse, pdf_delete_pages, or pdf_extract_pages, leaving the agent to infer selection solely from the phrase 'desired page sequence.'
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 already declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a mutating but non-destructive operation. The description adds useful operational detail (degrees and page selection) but does not state whether the original file is overwritten or a new file is returned, nor does it describe the output. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It immediately conveys the action, the valid degrees, and the page-scope options. The trailing category tag is unobtrusive and useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 should indicate what the tool returns (e.g., a rotated PDF file). The core operation and page options are present, but return-value behavior and routing among the many PDF siblings are not covered. For a straightforward single-file transform this is adequate, though not 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 all parameters are already documented. The description paraphrases the `rotation` and `pages` parameters but adds no information beyond the schema, such as how page ranges are parsed or the default rotation 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 identifies a specific action ('Rotate pages of a PDF'), the resource (PDF), and the operational scope (by 90, 180, or 270 degrees; all pages or specific page numbers). This makes the tool's purpose unambiguous. However, it does not explicitly contrast with sibling tools like pdf_reverse or pdf_reorder, so sibling differentiation remains implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 pdf_rotate over related operations such as pdf_reverse (page order), pdf_reorder, or photo_flip_rotate (image rotation). The only usage signal is the name and the first clause; no exclusions or named alternatives are provided.
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?
The description discloses the non-obvious soft-verification behavior: mismatches are logged, not failed. It also reveals that empty fields are left unchanged and cannot be blanked, which adds behavioral context not available from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main description is compact and front-loaded with the core action, followed by the most important behavioral caveat and input constraint. The schema descriptions are also concise and earn their place by clarifying non-obvious semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 definition fully covers the input contract, required-field rule, password handling, clearing limitation, and verification behavior. It does not describe the success return payload, but this is a simple mutation tool and the provided information is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the descriptions go well beyond naming parameters. They explain verbatim writing, empty-means-unchanged semantics, keyword comma conventions, the at-least-one requirement, and password-protected rejection 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 states a specific verb ('Set') and resource ('PDF Metadata') and enumerates the exact fields affected (Title, Author, Subject, Keywords). It is immediately distinguishable from sibling tools like pdf_get_metadata and pdf_remove_metadata by the write/update 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?
The description gives explicit constraints: at least one field must be provided or the request is rejected. Parameter-level guidance further clarifies when NOT to use this tool (to clear a field, use pdf_remove_metadata) and how to handle password-protected PDFs (run pdf_unlock first).
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 indicate readOnlyHint=false and destructiveHint=false, so the agent knows it mutates or creates output. The description adds no behavioral detail beyond the schema-enumerated modes; it does not state that multiple output files are produced, that the original is unchanged, or any side effects. With annotations present, the description should add context like output naming or file creation, but it does not.
Agents need to know what a tool does to the 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 core action and lists the modes efficiently. It is concise, to the point, and contains no filler. The category tag adds minor metadata without 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 tool with five parameters and no output schema, the description is thin. It omits the expected result (multiple PDF files), how output is named, and any constraints (e.g., page range syntax). The schema covers parameters but not the overall workflow or return value. An agent would still need to infer what happens after calling this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional parameter meaning; the modes it lists are already fully explained in the schema's enum description. It does not clarify the 'pages' format (though the schema has an example) or the 'chunkSize' semantics beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Split' and the resource 'PDF', and enumerates the four distinct splitting modes (range, all, chunks, even/odd). This makes the tool's function unambiguous. However, it does not explicitly differentiate from closely related siblings like pdf_extract_pages or pdf_delete_pages, which also manipulate pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It merely states the operation and modes. An agent cannot infer prerequisites, like whether the input file must be uploaded first, or when to prefer pdf_merge or pdf_extract_pages instead. No exclusions or context are given.
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 already indicate not read-only and not destructive; the description adds meaningful behavioral context beyond that: it discloses the underlying engine stack ('tabula-java with LibreOffice fallback'), plan-tier restrictions (Starter+), and the presence of a non-destructive inspect path with confidence flags. These details help an agent predict side effects and dependencies beyond what annotations cover.
Agents need to know what a tool does to the 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 information-dense sentences with the primary purpose front-loaded. The trailing '[category: pdf]' and the 'non-destructive inspect endpoint' clause are somewhat tangential and could be removed without losing core value, but the structure is otherwise clean 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 description covers most parameters and engine details, but with no output schema it does not specify the return value format (e.g., file ID vs. inline data for XLSX/CSV/TSV). It also fails to mention the batch sibling or single-file vs. multi-file distinction, which is important for tool selection. The reference to the inspect endpoint slightly muddies the boundary between this tool and pdf_to_excel_inspect.
Complex tools with many parameters or behaviors need more documentation. Simple 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%, giving a baseline of 3. The description goes beyond the schema by mapping high-level features ('page ranges, table selection, sheet strategy') to the relevant parameters and even enumerating the sheet strategy options inline ('per-table/per-page/single'). This reinforces the agent's understanding of what values those parameters accept.
Input schemas describe structure but not intent. Descriptions should explain 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 clear verb and resource: 'Extract tables from PDFs into XLSX / CSV / TSV / JSON.' This unambiguously distinguishes the core function from siblings like pdf_to_text or pdf_to_images steals no ambiguity. The mention of engine modes and formats further nails down what the tool 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?
The description implies usage for single-PDF table extraction but does not explicitly say when to choose this over siblings like pdf_to_excel_batch or pdf_to_excel_inspect. It mentions a 'non-destructive inspect endpoint' without clarifying that this is a separate sibling tool, which could mislead an agent. No explicit exclusions or alternative conditions are provided.
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 are neutral (readOnlyHint false, destructiveHint false), so the description carries the burden of explaining side effects. It adds the useful fact that output is a ZIP with per-file subfolders, but it does not disclose failure behavior, file handling, size limits, or whether inputs are deleted, leaving meaningful behavioral gaps.
Agents need to know what a tool does to the 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 communicates the batch operation, the configuration reuse, the file cap, and the output format without filler. The '[category: pdf]' tag is compact metadata, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters and no output schema, the description provides the essential output shape and batch limit but omits error handling, per-file failure behavior, and explicit routing guidance relative to sibling tools. It is adequate for a simple conversion tool but not fully complete for an agent that must handle edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple 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 has a description and, where relevant, enums with defaults. The tool description adds no parameter-level meaning, so the baseline score of 3 is appropriate because the schema fully carries the load.
Input schemas describe structure but not intent. Descriptions should explain 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'), resource ('PDF-to-Excel configuration'), and an explicit batch scope ('up to 20 PDFs'), while the mention of 'ZIP with per-file subfolders' separates it from the single-file pdf_to_excel and inspection-oriented siblings. This makes the tool's purpose immediately distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 conveys batch usage context by stating it applies the same configuration to up to 20 PDFs, which implies the singular sibling is for fewer files. However, it does not explicitly say when to choose this over pdf_to_excel, what happens if more than 20 files are supplied, or any exclusions.
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?
The annotations declare readOnlyHint=true and the description reinforces it with 'non-destructive' and 'nothing is converted.' It goes beyond the flag by revealing that real extraction runs but only JSON metadata is returned, and that several schema parameters are accepted but ignored — behavior an agent cannot infer from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one efficient sentence that front-loads the purpose and outputs, with no repetition of the title or category tag. Detailed parameter behavior is correctly delegated to the schema rather than duplicated 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 read-only inspector with a rich schema and readOnlyHint annotation, the description covers input, purpose, output contents, and side-effect guarantee. Although there is no output schema, the explicit list of returned metadata (counts, flags, warnings) is enough for an agent to decide whether and how to call 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 main description does not need to document individual parameters and the baseline of 3 applies. The main description adds no parameter-specific detail, though the schema's own field descriptions cover file size, page ranges, engine fallback, and ignored options well.
Input schemas describe structure but not intent. Descriptions should explain 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 leads with a specific operation: a non-destructive scan of a PDF's tables before conversion, with concrete outputs (row/column counts, confidence flags, warnings). It clearly distinguishes the inspect step from the actual conversion by stating that nothing is converted, which separates it from pdf_to_excel and pdf_to_excel_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?
It positions the tool explicitly as a pre-conversion step ('before converting') and the schema reinforces the workflow: inspect first, use the reported table indexes to choose selection in PDF to Excel afterwards, and run pdf_ocr first if OCR is needed. The accepted-but-ignored OCR and tableIndexes parameters make exclusions explicit rather than implicit.
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 | Size of the stamped text in PIXELS of the rasterised page: it is annotated onto the bitmap at ImageMagick's 72 dpi default, so at dpi=300 the same number covers ~4x less of the page than it would inside 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?
The description mentions tier restrictions (Starter+ for AVIF and filmstrip) but does not disclose side effects, authentication requirements for urls mode, or any other behavioral traits beyond what annotations (readOnlyHint=false, destructiveHint=false) already indicate. Since annotations are minimal, the description carries more burden, but it only hints at tier limitations and stays silent on error handling or response details.
Agents need to know what a tool does to the 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 long sentence that front-loads the core purpose but then becomes a sprawling list of features. It is informative but not concise; the run-on structure makes it harder to parse quickly. It would benefit from shorter sentences or bullet points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 30 parameters and no output schema, the description covers the major functional areas: formats, page ranges, color modes, transparency, cropping, watermarking, contact sheets, presets, and response modes. It is missing details like return format specifics, but given the complexity and schema richness, it is 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?
Schema coverage is 100%, and the description does not add meaning to any parameter beyond what the schema already provides. It lists capabilities (e.g., DPI controls, crop) but does not elaborate on parameter syntax or relationships. Baseline 3 is appropriate because 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 explicitly states the verb (rasterize), the resource (PDF pages), and the output formats (PNG/JPG/WEBP/TIFF/AVIF). It enumerates many specific features, making the tool's purpose unambiguous and distinguishing it from sibling tools like pdf_to_text or pdf_compress. While it doesn't directly name the batch sibling, the feature set clearly targets single-file conversion with advanced options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 alternatives such as pdf_to_images_batch. It lists features but never mentions exclusions, prerequisites, or a decision tree. An agent cannot tell from the description whether to prefer this over the batch variant or other PDF conversion tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_to_images_batchAInspect
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 | Size of the stamped text in PIXELS of the rasterised page: it is annotated onto the bitmap at ImageMagick's 72 dpi default, so at dpi=300 the same number covers ~4x less of the page than it would inside 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 only set readOnlyHint and destructiveHint to false, providing no behavioral insight. The description discloses the return format (ZIP with subfolders) and input limit (20 PDFs), which adds some context. However, it does not mention that the original files are not modified, or discuss error handling, partial failures, or tier restrictions. The description carries more of the burden due to sparse annotations but only partially fulfills it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence with no filler. It front-loads the core purpose and output structure, and the category tag adds context without redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 29 parameters and no output schema, the description covers the essential high-level contract: what it does, the input limit, and the output shape. It could add a note about non-destructive behavior or the relationship to pdf_to_images, but the schema already carries detailed operational guidance. The description is sufficient for an agent to understand when and how to invoke it, though slightly lean for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the tool description does not need to explain parameters. The description adds no parameter-level details, which is acceptable given the schema already documents all 29 parameters thoroughly. The baseline score of 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (convert PDFs to images), the resource (PDFs), the batch scope (up to 20), and the output format (ZIP with subfolders). It distinguishes itself from sibling tools like pdf_to_images by emphasizing batch processing and the unified configuration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: applying the same rasterization settings to multiple PDFs. It does not explicitly mention alternatives (e.g., pdf_to_images for a single PDF) or when not to use it. However, the batch context is clear enough for an agent to infer applicability, so it earns a 3 rather than a 2.
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 the operation is not read-only and not destructive. The description adds the critical behavioral constraint that the current password must be supplied, which is useful context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and states the key prerequisite without 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 simple tool with two required parameters and a fully documented schema, the description is sufficient. It could mention what happens on an incorrect password or whether an output file is always produced, but those are minor omissions.
Complex tools with many parameters or behaviors need more documentation. Simple 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 carries full parameter documentation. The description adds minimal extra semantic value, only reinforcing that the password is the current one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb plus resource: 'Unlock PDF — Remove password protection from a PDF.' This clearly identifies the operation and distinguishes it from sibling tools like pdf_protect, pdf_repair, 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 description gives a clear prerequisite: 'you must supply the current password.' It does not explicitly name alternatives, but the condition for using this tool is evident: only for PDFs whose password is known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_watermarkAInspect
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 | Which pages to stamp, 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 indicate readOnlyHint=false (a write operation). The description adds some behavioral quirks like silent fallbacks for invalid position, rotation, and scale values, which is useful. But it doesn't state whether the original file is modified or a new file is created, or what the output contains, leaving some behavior undisclosed.
Agents need to know what a tool does to the 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 main purpose and use cases, but it's somewhat verbose with redundant examples (DRAFT, CONFIDENTIAL, PAID, etc.). It could be tightened without losing clarity, but the structure is logical and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 14 parameters and no output schema, the description should explain what the tool returns or how the watermarked file is delivered. It doesn't mention the output at all. While the schema covers parameters well, the description lacks information about the result of the operation, which is a notable gap for a complex 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 schema already documents all 14 parameters. The description adds minimal extra meaning (e.g., that mode selects watermark type, and imageFile is required for image mode) but these are already present in the schema. It doesn't enrich parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it adds a PDF watermark/stamp, overlaying text or an image on pages. It lists specific use cases (DRAFT, CONFIDENTIAL, etc.) and distinguishes itself from siblings like pdf_remove_watermark, media_add_watermark, and photo_watermark by the resource (PDF) and 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 gives explicit usage context (stamping documents, branding, logo overlay) and even provides a conditional guideline: for non-Latin scripts, use an image instead of text. However, it doesn't explicitly mention alternatives by name or state when NOT to use this tool beyond the script note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_add_borderAInspect
Add Border — Add a solid-colour border around an image, keeping the format it arrived in. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | JPG, PNG or WebP. Max 25 MB. The output keeps the input format. The type is read from the file's own bytes, not from its name. | |
| size | No | How thick the border is, in pixels, on all four sides. Out-of-range values are pulled back to the nearest allowed value rather than refused. 0 adds no border, but it is NOT a pass-through: the picture is still decoded and written out again (a JPEG is re-encoded at quality 92), and an EXIF-rotated phone photo comes back physically rotated with its orientation tag cleared. | |
| color | No | A hex colour (#rgb, #rgba, #rrggbb or #rrggbbaa) or one of these 35 names — a hand-picked set, not the whole CSS list, so lightblue and darkgreen are refused: black, silver, gray, grey, white, maroon, red, purple, fuchsia, green, lime, olive, yellow, navy, blue, teal, aqua, cyan, magenta, orange, pink, brown, beige, ivory, gold, tan, khaki, crimson, indigo, violet, salmon, turquoise, lavender, plus none and transparent, which still widen the picture by the border size on every side but fill those new pixels with see-through rather than a visible frame. Anything else is refused rather than quietly falling back. A see-through colour needs a PNG or WebP input — on a JPEG it is refused, because JPEG cannot hold transparency and the border would come out black. | #000000 |
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, closed-world transform, so the safety profile is covered. The description adds one behavioral fact — output format matches input format — but that same fact is already stated in the schema's `file` description, and it omits the more consequential behaviors (JPEG re-encode at quality 92, EXIF auto-rotation, transparency refusal on JPEG) that live only in the schema. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence plus a category tag — no padding, and the core action leads. Minor redundancy: "Add Border" repeats the tool title and name before restating the same action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 an exceptionally detailed input schema and annotations that cover the mutation/safety profile, the description is essentially complete for invocation: input types, size limits, colour syntax and output format are all documented elsewhere. Only the post-processing side effects (re-encoding quality, rotation normalization) are absent from the description, though they are recoverable from the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the three parameters carries a rich, edge-case-aware description (out-of-range clamping, size=0 still re-encoding, 35-name colour allow-list, transparency requiring PNG/WebP). The description text itself contributes no parameter meaning, so the 3 baseline 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 ("Add a solid-colour border around an image") plus a distinguishing constraint ("keeping the format it arrived in"). The noun 'border' separates it from nearby siblings such as photo_rounded_corners, photo_shadow_adder and photo_watermark without needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use or when-not-to-use guidance and names no alternative, even though the sibling list contains several closely related frame/edge tools (photo_rounded_corners, photo_shadow_adder, photo_watermark). Selection is left entirely to inference from the tool name.
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 provide little (readOnlyHint=false, destructiveHint=false), so the description carries most of the burden. It discloses the output type (transparent PNG or solid fill) and that it edits an existing image, which is useful. However, it does not mention whether the original file is modified, how long processing takes, or any limitations (e.g., large files). It also does not clarify the response format (e.g., a URL to the result). No contradiction with annotations, but the behavioral detail is 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?
The description is two sentences, front-loaded with the primary action and output. It includes a useful category tag without fluff. Every sentence earns its place, and the structure is clean and immediately 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 moderately complex tool with 7 parameters, the schema handles parameter documentation thoroughly. The description covers the overall purpose, output format, and a key distinction (not generating imagery). However, with no output schema, it would be helpful to explicitly state what the tool returns (e.g., a URL or file path) and whether the original file is preserved. These gaps are minor but prevent a 5. Overall, it is fairly complete for an image-editing 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?
The schema covers 100% of parameters with detailed descriptions, including enums, defaults, and edge-case handling (e.g., 'Invalid values fall back to u2net'). The tool description adds no additional parameter information beyond the schema, which is acceptable given the high coverage. The description's mention of output types is not parameter-specific, so it does not enhance parameter understanding. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: removing backgrounds from existing photos and producing transparent PNGs or solid fills. It explicitly distinguishes itself from generation tools ('does not generate new imagery'), which separates it from siblings like generate_placeholder_image. The verb 'remove' and resource 'background' are specific, and the category tag further anchors its domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states it edits user-supplied images and clarifies it is not for generating new imagery, giving clear context for when to use it. It does not explicitly name alternative tools, but given the sibling list includes many photo editors and generators, the note about not generating imagery effectively excludes those. It could be stronger by mentioning when to choose it over photo_editor or photo_crop, but the core guidance is present.
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. Needed when Layout mode is template: there is no default, and a template-mode run with none chosen, or with fewer photos than the template has places for, is refused with the reason. | |
| 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 are minimal (readOnlyHint false, destructiveHint false, openWorldHint false), and the description adds some behavioral context: smart-cropping, aspect-ratio awareness, and output formats. It does not disclose side effects, how output is returned, or what happens to source files, though destructiveHint false already covers non-destruction.
Agents need to know what a tool does to the 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 leads with the action, then packs the key constraints (2-16 images, layout types, output formats) and a category tag. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity tool with 11 parameters, the schema is rich enough to cover invocation details, and the description supplies the missing selection-level context: input count, layout families, and output formats. It does not describe the return representation, and there is no output schema, so it is not a perfect 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 11 parameters. The description only adds high-level layout context ('smart-cropped,' 'magazine templates,' 'legacy NxM grids') rather than parameter-specific semantics, which keeps it at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Arrange 2-16 images into a smart-cropped collage.' It also distinguishes the operation from sibling photo tools by naming layout modes (smart, magazine templates, legacy grids) and output formats, so an agent can tell this is the multi-image collage tool rather than photo_crop or photo_image_overlay.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 stating the input count and layout modes, but it never explicitly says when to prefer this tool over siblings or when not to use it. There are no alternative tool names or exclusion conditions, so guidance 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.
photo_color_adjusterAInspect
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, except that a HEIC or HEIF photo comes back as a JPG. | |
| 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 indicate readOnlyHint=false and destructiveHint=false, meaning it modifies the image but is not destructive. The description adds no additional behavioral context, such as whether the original file is overwritten or a new file is returned, or any auth or rate-limit constraints. Since the tool is a mutation operation and the description does not disclose the output behavior, it falls short of the transparency expected even with annotations present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that front-loads the core purpose. It contains no filler or redundant information, and the category tag is minimal and useful. 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?
While the schema covers parameters, there is no output schema, and the description does not state what the tool returns (e.g., a modified image file in the same format). Given the number of sibling photo tools, the agent needs to know the return behavior to use it correctly. The description is also silent on any side effects or limitations beyond what the schema mentions. This is a significant gap for a mutation 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?
The input schema provides detailed descriptions for all four parameters (file, contrast, brightness, saturation) with units, ranges, and defaults. With 100% schema coverage, the description does not need to add parameter information, and it does not. The baseline of 3 is appropriate since the schema carries the full semantic load.
Input schemas describe structure but not intent. Descriptions should explain 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 (adjust) and the resource (an image) along with the specific properties (brightness, contrast, saturation). This is precise and distinguishes it from other photo tools like photo_crop or photo_editor, which handle different operations. It is not a tautology and gives the agent a specific verb+resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about what the tool does (adjusting color properties), which implies when to use it. However, it does not explicitly mention alternatives or conditions where this tool should be avoided, such as 'use photo_editor for more advanced edits' or 'use photo_resize for dimension changes'. The context is clear but lacks explicit exclusions or sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_compressAInspect
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 readOnlyHint=false and destructiveHint=false, but the description adds meaningful behavioral context: it explains that HEIC/HEIF input always returns JPG unless output_format overrides, that PNG→PNG maps quality to lossless compression effort with pixels unchanged, and that other formats re-encode lossily. It also discloses the strip_exif default behavior. This goes beyond the annotations and helps the agent understand side effects and format conversion 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 concise sentence followed by a category tag. It front-loads the core purpose and includes key differentiators (lossy/lossless, JPEG quality, target-size mode). It could be slightly more structured, but it is efficient and free of fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, 100% schema coverage, and no output schema, the description covers the essential behavioral nuances: format conversion, quality semantics, and metadata stripping. It doesn't explain return values, but the absence of an output schema and the presence of rich parameter descriptions make this acceptable. The description is complete enough for an agent 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 all four parameters. The description adds a high-level summary of quality modes and target-size mode, but it doesn't add significant detail beyond the schema. The schema already explains quality mapping, output_format behavior, and strip_exif. 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 ('Compress Image — Reduce image file size') and distinguishes it from siblings like photo_compress_to_size by mentioning both lossy/lossless compression and target-size mode. It doesn't explicitly name sibling alternatives, but the category tag and the mention of target-size mode help differentiate it from photo_resize and photo_compress_to_size.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 context (compressing images to reduce file size) and mentions supported formats and modes, but it does not explicitly state when to use this tool versus alternatives like photo_compress_to_size or photo_resize. The sibling list includes photo_compress_to_size, which is a close alternative, but the description doesn't provide explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_compress_to_sizeBInspect
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 only provide readOnlyHint=false and destructiveHint=false, which don't disclose meaningful behavior, and the description adds no behavioral context beyond the basic purpose. It doesn't mention that target size may be approximate, that HEIC/HEIF always convert to JPG, or any side effects. The output_format schema notes are useful, but they are not part of the description itself.
Agents need to know what a tool does to the 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 verb and objective. It contains no filler, and the [category: photo] tag is minimal, making it highly 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 tool has moderate complexity and no output schema, yet the description doesn't state what is returned (e.g., a compressed file or the achieved size) or mention output behavior like HEIC-to-JPG conversion. Those details exist only in the parameter descriptions, so the tool-level definition is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple 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, including units, defaults, and format constraints. The description adds no parameter-level meaning, which matches the baseline score 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 states a specific verb ('Compress') and a precise goal ('hit a target file size in KB'), which makes the tool's function clear. However, it doesn't explicitly differentiate this from the sibling photo_compress, so it stops short of full sibling-level 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?
The phrase 'to hit a target file size in KB' implies the main use case, so an agent can infer when to choose this tool. But there is no explicit guidance about when to prefer it over alternatives like photo_compress or pdf_compress, and no exclusions are stated.
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, except that a HEIC or HEIF photo comes back as a JPG. | |
| 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 declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the bar is lowered and the safety profile is already disclosed. The description adds only that the region is in pixels, offering no behavioral detail of its own; richer traits like EXIF auto-orientation and edge clipping 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 compact sentence plus a category tag, with the action and the region tuple front-loaded. Nothing is wasted, though the trailing '[category: photo]' tag adds little 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?
No output schema exists, so return-value explanation is not strictly required, and the schema is unusually rich. However, the description omits usage context and any behavioral framing beyond pixels, so it is only minimally complete for an agent deciding whether and how to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter in depth (EXIF-upright handling, clipping behavior, format preservation). The description merely restates the four coordinate/box parameters, adding no semantics beyond what the schema provides, 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?
States a specific verb (Crop) plus resource (image) and the exact region parameters (x, y, width, height) in pixels, so the operation is unambiguous. It does not differentiate itself from closely related siblings such as photo_resize, photo_image_splitter, or pdf_crop, keeping it at a 4 rather than 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 gives no when-to-use guidance, no prerequisites, and no alternatives. An agent cannot infer from the text whether to reach for photo_crop versus photo_resize or photo_image_splitter; usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_editorCInspect
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). Output keeps the input format, except that a HEIC or HEIF photo comes back as a JPG. | |
| filter | No | Filter to apply. | grayscale |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false), so the description bears the burden of behavioral disclosure. It states the filter operation but never says whether the original is left intact, whether a new processed file is produced, or any side effects of processing. The one useful behavioral fact — HEIC/HEIF output comes back as JPG — is buried in the schema, not the description. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the purpose front-loaded and no rambling. However, the 'Photo Editor —' prefix redundantly echoes the title, and the '[category: photo]' tag is empty filler that duplicates what the tool name and sibling set already convey. The filter list is useful but duplicates the schema enum.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 2-parameter tool with 100% schema coverage, the description plus schema covers the essentials (input formats, filter options, size cap, output-format exception). The weakness is thin behavioral context — what happens to the source file and what output is returned — but for a straightforward single-filter tool this is an adequate, not excellent, level of 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%: the file param documents accepted formats, the 25MB size limit, and the output-format rule, while the filter param has a descriptive enum. The description only re-lists the enum values, adding marginal meaning beyond what the schema already provides. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Apply a single named filter to an image') and enumerates the six filter options, which clearly separates it from the analyze_* and convert_* families. However, it does not explicitly distinguish itself from the many close photo_* siblings like photo_color_adjuster or photo_noise_reducer — the filter list helps, but the routing is implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 exists on when to use this tool versus its close siblings. With roughly 30 photo_* tools in the sibling list — several of which (photo_color_adjuster, photo_noise_reducer, photo_face_blur) overlap with what 'filter' could mean — an agent gets no explicit when-or-when-not signal. The 'single named filter' constraint is the only implicit selector.
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 of the picture as it is shown (turned upright by its EXIF tag). Decimals are rounded. | |
| 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 it blank to blur every face found; an empty list [] blurs none of them, only the areas in manual_faces. Not offered in the workflow builder: each file there has its own faces. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-destructive, non-read-only, closed-world operation, so the safety profile is covered structurally. The description adds that every detected face is blurred identically, which is useful behavioral context. It says nothing about permission needs, batching, or whether the source file is modified in place versus returning 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?
One sentence, front-loaded with the verb and the privacy rationale, no filler. The bracketed category tag is a minor non-informative addition but costs 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 an 8-parameter image mutation tool with no output schema, the description is adequate but thin. It omits what the tool returns, whether the original is preserved, and how it relates to the adjacent detection tool, leaving the schema to carry nearly the entire burden.
Complex tools with many parameters or behaviors need more documentation. Simple 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 unusually rich, including mode tradeoffs ('solid is the only mode that survives deblurring attacks'), override precedence, and the selected_faces empty-list semantics. The description adds nothing parameter-specific, so the baseline 3 applies when the schema already does this much work.
Input schemas describe structure but not intent. Descriptions should explain 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 (blur) and resource (faces in a photo) with the privacy-protection intent made explicit. Distinguishes itself from the closest sibling, photo_face_detect, which presumably detects rather than blurs, though it never names that sibling outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 vs when-not guidance. In a family that contains photo_face_detect and photo_bg_remover, an agent has to infer that this is the privacy-redaction pass rather than the detection pass. No prerequisites or alternatives are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_face_detectBRead-onlyInspect
Face Detect — Detect faces in an image and return bounding boxes. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Input file (JPG, PNG, WebP, BMP) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds that the tool returns bounding boxes, which is useful behavior context, but it does not disclose output format, coordinate details, or limitations such as threshold 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?
One concise sentence delivers the core purpose and output. The leading "Face Detect —" is slightly redundant with the tool name, but the rest is front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool, the description is mostly sufficient. However, with no output schema, it leaves the exact bounding box representation unspecified, which an agent might need to know to parse the result 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% for the single file parameter, which documents accepted formats (JPG, PNG, WebP, BMP). The description does not add anything 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?
The description states a specific verb and resource: "Detect faces in an image and return bounding boxes." It clearly distinguishes this from sibling tools like photo_face_blur by naming the output type (bounding boxes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 about when to use this tool versus alternatives such as photo_face_blur or photo_editor. The description implies usage for face detection but provides no exclusions or routing hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_flip_rotateAInspect
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 provide the safety profile (readOnlyHint=false, destructiveHint=false), and the description adds the set of allowed transformations. However, it does not disclose what happens to the input file, whether a new output file is created, or any side effects, so behavioral context remains modest.
Agents need to know what a tool does to the 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 main purpose and lists the supported operations. The only minor inefficiency is that 'Flip / Rotate Image' repeats the title and the category tag adds limited value, but overall it is scannable and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 straightforward photo transformation tool, the description plus fully documented schema covers most invocation needs. The main gap is the absence of any statement about return values or output behavior, and there is no output schema to compensate, but this is not a fatal omission for such a simple 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 the action enum, default values, degrees range (-360 to 360), and the conditional use of degrees with action=custom. The description's mention of custom angle and standard rotations adds little beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource ('Flip / Rotate Image') and enumerates the exact operations: horizontal/vertical flips, 90/180/270 rotations, and custom angle rotation. It is specific enough to distinguish from photo_resize or photo_crop, though it does not explicitly disambiguate from the broader photo_editor sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit 'when to use this versus another tool' guidance. An agent can infer from the name and operation list that this is for flipping/rotating images, but the description never states exclusions or alternatives, leaving usage context implied rather than explicit.
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_diffAInspect
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 provide safety hints (readOnlyHint=false, destructiveHint=false). The description adds that it requires two distinctly named uploads and produces a visual highlight of differences, which is useful context. It does not detail side effects, but the bar is lower given annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no wasteful words; the purpose is front-loaded and the category tag is unobtrusive. It is appropriately 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?
The schema fully documents all 7 parameters and defaults, and annotations cover the safety profile. The description clearly explains the tool's operation but does not explicitly state the return format; however, the output_format parameter description indicates that a diff image is returned, making it sufficient 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%, so the baseline is 3. The description's mention of separately-named uploads restates what the schema already shows via required fields. No additional parameter semantics are added 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 a specific verb ('Compare') and resource ('two images'), and indicates the visual output. It does not explicitly distinguish from sibling tools like analyze_image_similarity, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for visually comparing two images, but it does not mention when to prefer this over sibling tools or state any exclusions. The 'Takes two separately-named uploads' line is more of a parameter note than a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_image_overlayAInspect
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 size as a percent of the overlay's own size, not of the background: 100 keeps it as it is, 50 halves it, 200 doubles it. | |
| 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 (readOnlyHint=false, destructiveHint=false, openWorldHint=false) already signal this is a non-destructive local transformation, so the description's job is lighter. It adds little beyond that: it doesn't discuss output behavior, size/format constraints, or limits, relying mostly on 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?
Two tight sentences that front-load the core action and then clarify the two-upload structure. The trailing '[category: photo]' tag is minor metadata clutter rather than useful 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 an 8-parameter image transform with full schema coverage and no output schema, the description conveys the essential concept and input model adequately. It doesn't explain return/output framing, but with no output schema and rich parameter docs, that 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 every parameter including position, scale, offsets, opacity, and formats is already well documented. The description only echoes the two upload names ('background' and 'overlay'), 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 (Composite) and resource (one image on top of another) with the notion of a specified position, which clearly conveys what the tool does. It does not explicitly differentiate itself from near-neighbors like photo_watermark or media_add_watermark, 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 description implies usage through the compositing framing and the note that it takes two separately-named uploads, but it never states when to prefer this over photo_watermark, photo_collage, or the other image tools. No explicit when/when-not or alternatives are given.
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 readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds no further behavioral context such as output being a ZIP, permission needs, or what happens to the input — and that ZIP detail lives only in the schema. Nothing is contradicted, but the description contributes essentially no behavioral value.
Agents need to know what a tool does to the 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 an example, with no padding. The trailing '[category: photo]' tag is minor overhead but doesn't obscure the core message.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 required 'file' parameter, four well-documented properties and no output schema, the description is minimally sufficient to call the tool. It does not mention the ZIP return container or any failure modes, leaving the agent to rely entirely on schema text for those details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with cols, rows, file and output_format each fully documented in the schema (grid bounds, remainder-pixel behavior, ZIP output). The '2x2, 3x3' example is the only added hint, 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?
States a specific verb and resource ('Split an image') and pins down the operation as a 'grid of equal tiles', which naturally separates it from photo_crop or pdf_split. It stops short of naming or contrasting any sibling tool, so it lands 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 description offers only the parenthetical example 'e.g. 2x2, 3x3', which is parameter illustration, not usage guidance. There is no statement of when to choose this over photo_crop, photo_resize, or the many other photo_* siblings, and no preconditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_meme_generatorAInspect
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 | A font the server does not have is replaced: Impact by Anton (a free face in Impact's style, shipped with the server), Arial-Bold by Liberation-Sans-Bold (drawn to Arial Bold's exact widths). 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 declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is clear and the description does not contradict it. Beyond that it adds little: it restates the caption requirement (already in the schema) and gives no word on output artifact, rendering limits, or what the response contains.
Agents need to know what a tool does to the 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 capability front-loaded and the critical constraint second, plus a short category tag. Nothing is padded and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter image-generation tool with full schema coverage and clear annotations, the description covers what the tool produces and its one required-input rule. It does not mention the returned artifact or format, but with no output schema that gap is minor for an otherwise self-explanatory image 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's only parameter-relevant additions ('Impact-style font', the top/bottom requirement) are already fully spelled out in the font and top_text schema descriptions, so it adds essentially no meaning beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain 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: adding bold top/bottom caption text to an image in Impact-style font. That cleanly separates it from a plain watermark tool, but it never explicitly names an alternative sibling (photo_watermark, photo_editor) that also stamps text, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage-directional statement is the hard constraint that at least one of top_text/bottom_text is required, which is a validation rule rather than routing guidance. There is no explicit 'use this when...' versus siblings like photo_watermark or photo_editor; usage is only implied by the meme-caption framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_noise_reducerBInspect
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?
The annotations already convey that the tool is not read-only and not destructive, so the bar is lowered. The description adds a small amount of implementation context ('using ImageMagick's denoising filters') but does not disclose output behavior, whether the input file is modified, or what the response contains. This is acceptable but not rich.
Agents need to know what a tool does to the 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 no unnecessary sentences. The opening 'Noise Reducer —' is somewhat redundant with the tool name/title, and '[category: photo]' is a mild tag, but overall the description stays concise and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does not explain what the tool returns (e.g., a file path, URL, or image data). It also omits any usage context or behavior beyond the core operation. The rich input schema compensates for parameter understanding, but the definition is incomplete for an agent trying to predict the tool's full behavior.
Complex tools with many parameters or behaviors need more documentation. Simple 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 itself adds no parameter-specific meaning; the schema already provides useful details like enum choices, defaults, x-ui labels, and the note that invalid strength values silently become '2'.
Input schemas describe structure but not intent. Descriptions should explain 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 specific action ('Reduce image noise and grain') and identifies the underlying tooling (ImageMagick's denoising filters). It is not a tautology and is distinguishable from the sibling photo tools by its function, though it does not explicitly call out any sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 alternatives such as photo_editor or photo_color_adjuster. There is no mention of ideal use cases, prerequisites, or exclusions, so the agent must infer usage entirely from the tool name and brief purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_resizeAInspect
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, TIFF, AVIF, HEIC or HEIF. Output keeps the input format, except that a HEIC or HEIF photo comes back as a JPG. | |
| 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 already carry readOnlyHint=false and destructiveHint=false, so the description is not burdened with a safety disclaimer. It does add behavioral context by noting aspect-ratio preservation and mode-based resizing behavior. It stops short of describing output format or side effects, but the schema's file parameter already documents format behavior such as HEIC/HEIF becoming JPG.
Agents need to know what a tool does to the 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 at roughly 31 words and front-loads the core operation before mentioning aspect-ratio support. There is minor redundancy in repeating 'Resize Image' immediately after the title, but there is no filler or unnecessary detail. Overall, it is appropriately sized for a tool whose schema carries the detailed parameter information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with a complex mode enum, the description gives an agent the high-level mode taxonomy while the schema provides full per-parameter constraints and conditional visibility rules. The main missing piece is explicit guidance on when to choose this tool over sibling photo tools, which is already penalized in usage_guidelines. No output schema exists, but the input and mode behavior are covered well enough 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 all 9 parameters are already documented in the input schema; the baseline is therefore 3. The description only restates modes at a high level and does not add parameter-specific guidance beyond what the enum labels and x-ui hints provide. It adds no syntax or format details that would elevate the score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Resize an image by pixel dimensions, percentage, fit-within-max, or exact canvas,' clearly identifying a specific verb, resource, and the main modes. It also mentions aspect-ratio support, so an agent can immediately recognize the dimension-changing operation. It does not explicitly compare against sibling photo tools like photo_crop or photo_compress, but the resize operation is 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 when to use the tool by enumerating target-based modes such as 'fit-within-max' and 'exact canvas,' which gives an agent a decision framework. However, it does not state when to prefer photo_resize over related tools like photo_crop, photo_compress, or photo_editor, nor does it provide exclusions. This is implied usage rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_rounded_cornersAInspect
Rounded Corners — Round the corners of an image. The output is always a PNG, because the rounded-off corners are see-through and only PNG can hold that. [category: photo]
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | JPG, PNG, WebP, GIF, BMP, TIFF or AVIF. Max 25 MB. HEIC is refused — run it through the Format Converter first. Whatever arrives, a PNG comes back. | |
| radius | No | How far the curve reaches in from each corner. Measured in whichever unit the next setting says: PIXELS, up to 5000 — or PERCENT of the shorter side, where anything above 50 is treated as 50, because half the shorter side is a full semicircle and there is nothing beyond it. Out-of-range values are pulled back rather than refused. Fractions are rounded. | |
| corners | No | 'all', or a comma-separated list of tl, tr, br, bl (top-left, top-right, bottom-right, bottom-left). An edge word — top, bottom, left or right — selects that edge's two corners. | all |
| background | No | What fills the corners that were rounded off: 'transparent' (the default; 'none' means the same) leaves them see-through. Anything else fills them with a colour: a hex value (#rgb, #rgba, #rrggbb or #rrggbbaa, such as #1a1a1a) or any of the named colours Add Border accepts (red, navy, gold and others; not case-sensitive). Any other name is refused with a 400 that lists every accepted name. | transparent |
| radius_unit | No | Whether the radius above is a number of pixels or a percentage of the picture's shorter side. Percent is the one to pick when the step runs on pictures of different sizes. | px |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds a genuinely useful behavioral trait absent from the schema's top-level text: the output is always PNG and why (transparent corners). It omits any note on auth or processing limits, but adds real value 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?
Two tight sentences, front-loaded with the purpose and then the important output-format constraint. Nothing wasteful; the category tag is the only extra.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 image-transformation tool with no output schema, the description covers what the tool does and the output format constraint that matters (PNG). Input formats and parameter detail live in the schema. Adequate, with only the missing routing/precondition context as a 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 schema already documents radius, corners, background, and radius_unit in detail. The 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?
States a specific verb+resource ("Round the corners of an image") and the operation is clearly distinct from siblings like photo_crop or photo_add_border. It stops short of explicitly naming a sibling to differentiate against, so it lands at clear-but-not-routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 guidance and no alternatives named. An agent cannot tell from this text why it would pick rounded corners over photo_add_border or photo_crop, nor what preconditions apply.
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 | Which way the shadow falls, in degrees clockwise from the right: 0 moves it right, 90 down, 180 left, 270 up. The default 45 puts it down and to the right, as if lit from the top left. | |
| 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 already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that output is a PNG with transparency, which is mildly inaccurate since output_format defaults to the input format and only PNG preserves transparency — a subtle inconsistency the schema corrects.
Agents need to know what a tool does to the 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 effect and output stated up front; slightly redundant by restating the title verbatim, plus a category tag, but no significant 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?
For a single-effect image mutation tool, the description plus a fully documented 7-parameter schema and safety annotations gives an agent enough to call it correctly. It lacks only usage routing and a note that non-PNG outputs flatten onto white.
Complex tools with many parameters or behaviors need more documentation. Simple 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 every parameter (blur, angle, opacity, distance, shadow_color, output_format) is thoroughly documented in the schema. The description adds no parameter detail, 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?
States a specific verb (add) and resource (drop shadow effect on an image) and names the output artifact. It is clearly distinguishable from photo siblings like photo_add_border or photo_rounded_corners, though it never explicitly differentiates itself from 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?
No guidance on when to use this versus alternatives such as photo_editor, photo_add_border, or photo_rounded_corners, and no prerequisites (e.g. input constraints) stated in the description. Only implied usage 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_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 only provide readOnlyHint=false, openWorldHint=false, and destructiveHint=false, so the description carries most of the behavioral burden. It explains the core transformation (rasterization) and mentions output format choices, but does not disclose side effects, output return details, or behavior when width/height are zero. The schema covers edge cases like invalid DPI values, so the description adds some but not rich 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 focused sentence that front-loads the action and output format, then lists the adjustable options. The [category: photo] tag is a useful, compact classification. There is no wasted 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 tool with six parameters and no output schema, the description is reasonably complete: it names input type, output formats, and key controls. The schema covers parameter details. It does not mention return behavior or potential side effects, but the core decision-making information for an agent 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%, so the parameters are already fully documented. The description restates the concept of resolution, DPI, and background color without adding new meaning beyond what the schema provides. This meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Rasterize an SVG vector file to PNG') and names the target formats (PNG, JPG, WebP) plus key options (resolution, DPI, background color). It clearly identifies the tool's resource and distinguishes it from general converters like photo_format_converter by specifying SVG as the input.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 primary use case: converting an SVG vector file into a raster image. It does not explicitly name alternatives or exclusion conditions, but the title and phrasing make the intended context clear enough for an agent to select it over sibling tools.
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 takes two-letter codes (en, fr, de, ...) separated by commas; Tesseract codes such as eng or chi_sim also work. [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. One code, or several separated by commas (en,fr); a plus sign works too, as Tesseract writes it (eng+fra). Two-letter codes are the usual form: en, fr, de, es, pt, it, nl, ru, ar, zh, ja, ko. Tesseract's own codes (eng, fra, deu, chi_sim, chi_tra, ...) are also accepted; each of the two reading engines is handed its own spelling of the language. A language whose reading pack is not installed on our server is refused with a message that says so, rather than reported as an engine fault. Letters and underscores only, not case-sensitive; a value with no code in it, such as a lone comma, is refused with a 400. Field name is languages, not language. | 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?
The description discloses the core OCR behavior and mentions accepted language-code forms, which is useful. However, the annotations are all false and provide no safety profile, and the description does not state side effects, error behavior, or response format. Since this is a non-destructive extraction tool, the missing disclosures are not critical but remain gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the primary action, and the language note is useful before opening the schema. It loses a point for duplicating the title and ending with the low-value '[category: photo]' tag.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Together with the schema, the definition covers file formats, size limits, output modes, language syntax, preprocessing, and binarize behavior. A return schema and an explicit pointer to pdf_ocr would make it fully complete, but nothing needed to invoke the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 6 parameters. The tool description's language sentence adds minor readability at the tool level but does not add meaning beyond the detailed languages parameter 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?
Description begins with 'Extract text from an image via OCR', a specific verb and resource that clearly states what the tool does. It is partially differentiated from sibling tools by the 'image' resource, but it does not explicitly distinguish itself from pdf_ocr or other extraction 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 given on when to use photo_to_text versus alternatives such as pdf_ocr, pdf_to_text, or other photo tools. The only clue is the tool name and the word 'image', which is not enough to route an agent confidently among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photo_upscalerBInspect
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 provide no meaningful safety signals since readOnlyHint and destructiveHint are both false, so the description carries the behavioral burden. The description adds useful context: it sharpens and upsizes an existing photo and does not generate new imagery. However, it does not disclose return behavior, whether a new file is produced, or side effects beyond the operation itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler and front-loads the core operation immediately. The second sentence usefully clarifies it transforms an existing image rather than generating a new one. It earns its length and is 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 schema covers parameters thoroughly, including timeouts and format constraints, but there is no output schema and the description does not state what the tool returns or how the result is delivered. The tool sits among many related photo tools, and the description does not position it relative to them. For a moderately simple transformation tool, this is 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%, and every parameter already has useful per-parameter explanations, including defaults, timing expectations, and default behaviors like invalid scale silently falling back to 2. The description itself rephrases scale and face_enhance but adds little beyond the schema. The phrase 'super-resolution detail recovery' does add some model-selection context, but it is not enough to raise the score above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly says the tool enlarges an existing image 2x or 4x with super-resolution detail recovery and an optional face-enhancement pass. It is more specific than the tool name and adds useful nuance ('does not generate new imagery'). However, it does not explicitly differentiate from the nearby sibling photo_resize, which may also handle enlargement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 use for upscaling existing photos but gives no explicit 'when to use this vs alternatives' guidance. It never mentions photo_resize, photo_editor, or related image tools, nor does it state a condition such as 'use this only when super-resolution detail is needed'. The 'does not generate new imagery' exclusion is helpful but is more about disqualification than active routing.
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, except that a HEIC or HEIF photo comes back as a JPG. | |
| text | Yes | The words stamped onto the photo. Required; there is no default. A leading '@' is removed. | |
| color | No | A hex colour, or one of white, black, gray, grey, 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 | How big the lettering is, measured in PIXELS of the photo rather than points on a page: the words are drawn straight onto the bitmap, so the same number gives the same size here, on the Signature Generator and on PDF to Images. 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, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the note that positions follow ImageMagick gravity names, which is mildly useful behavioral context, but says nothing about whether the source photo is modified or a new file is returned, and no rate/size limits 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 front-loaded sentence with the action, the resource, and the tunable dimensions; nothing is wasted and the bracketed category tag is trivial 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 an 8-parameter mutation tool with no output schema, the description should say what comes back (a new image file? a URL?) and confirm the original is untouched. It covers the input side adequately but leaves the entire 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%, and the schema entries are unusually rich (fallback behavior for color, opacity integer parsing, case-sensitive gravity names, silent reset of out-of-range font sizes). The description only names three of the eight parameters at a high level, adding little 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 ("Overlay a text watermark on a photo") and names the configurable axes, so the agent knows exactly what the tool produces. It does not, however, explicitly distinguish itself from the similarly-named siblings media_add_watermark and pdf_watermark, leaving the agent to infer that "photo" means raster 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 gives no when-to-use guidance, no prerequisites, and no mention of the alternative watermark tools (media_add_watermark, pdf_watermark) that appear in the sibling list. The agent must infer applicability purely from the word "photo".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_extract_tableARead-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, covering the safety profile. The description and parameter docs add genuine behavioral context beyond that: the public-page restriction, the bot identifying itself as 'JohnsEssentialsBot' when user_agent is blank, robots.txt acknowledgment gated to the Business plan, timeout behavior, and the table_index error message when fewer tables exist. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a tight single sentence with the core action front-loaded. Minor deductions: the opening 'Extract Table —' duplicates the tool title, and the '[category: web]' tag is low-value metadata that adds noise rather than guidance. Otherwise 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?
The combination of the concise description and the unusually thorough parameter documentation covers the essentials for correct invocation: URL format, output shape, timeout limits, robot policy, and table selection errors. There is no output schema, but the output parameter adequately conveys the return format. The main gap is that the core description alone is thin; completeness relies heavily on the parameter docs.
Complex tools with many parameters or behaviors need more documentation. Simple 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 carries a rich description — output distinguishes JSON (feedable to next step) from CSV (one text block), timeout_ms gives a worked example, table_index explains error behavior, and acknowledge_robots clarifies plan gating. The main description adds little beyond the schema since the schema already does the heavy lifting, 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 ('Extract') plus a clear resource ('an HTML table from a public web page at a user-provided http(s) URL') and names the output forms ('JSON rows or CSV'). This cleanly distinguishes it from sibling tools like web_fetch and web_scrape_page, which handle general page retrieval rather than structured table extraction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'public web page' implicitly scopes usage to publicly accessible pages, and the parameter docs reveal plan-gated behavior for robots.txt. However, the description does not explicitly name alternatives (e.g., web_fetch or web_scrape_page) or state when this tool is preferred over them. Usage context is implied rather than explicit.
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 already provide readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds important behavioral context beyond annotations: SSRF-guarding, protocol restrictions, body size cap, robots-awareness, and plan-dependent robots acknowledgement behavior. It doesn't detail failure modes or redirect handling, but the disclosed traits exceed what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the core action and scope, then pack constraints into a compact, scannable list. Every clause earns its place with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param read-only fetch tool with 100% schema coverage, the description is nearly complete. It covers constraints (SSRF, protocol, size, robots), parameters are fully described in schema, and the read-only safety profile comes from annotations. Missing details like redirect handling or response encoding are minor given the tool's simplicity and openWorldHint.
Complex tools with many parameters or behaviors need more documentation. Simple 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 (url, timeout_ms, user_agent, acknowledge_robots) having a meaningful description. The tool description itself doesn't add param-level detail beyond the schema, but the schema already carries the full burden. 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 (Fetch), resource (raw decoded HTML of a public web page), and explicit scope constraints (public, http(s) only, 10 MB cap, robots-aware). It distinguishes itself from web_scrape_page and web_extract_table by focusing on raw HTML retrieval versus structured extraction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use case: fetching raw HTML for further analysis, as opposed to web_scrape_page (which likely extracts structured content). It doesn't explicitly name alternatives or state when not to use it, but the constraint 'public web page' plus sibling names provide clear context. It lacks explicit routing guidance like 'use web_scrape_page for structured extraction'.
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 declare readOnlyHint=true and openWorldHint=true, so the description doesn't need to restate safety. It adds meaningful behavioral context: robots.txt handling (acknowledge_robots parameter), user-agent identification, and the distinction between modes. It also discloses that the tool only works on public pages and that robots.txt refusal is enforced on non-business plans, which is valuable 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 front-loads the core purpose and mode distinction, then adds a category tag. It's efficient and doesn't waste words. It could be slightly more structured (e.g., separating the mode explanation), but it's appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 6 parameters, 100% schema coverage, and no output schema, the description covers the key decision points: mode selection, robots.txt behavior, and user-agent. It doesn't describe return format or error cases, but the schema covers parameters and the description covers the main behavioral choices. The lack of output schema means the description could mention what the result looks like, but the mode descriptions partially cover 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%, so the schema already documents all parameters. The description adds value by explaining the mode semantics ('readability gives you the page's main article as clean text') and the selectors parameter's purpose ('One CSS selector per thing you want'). It doesn't add much beyond the schema, but the mode explanation helps disambiguate the two modes.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Scrape'), a resource ('public web page at a user-provided http(s) URL'), and explicitly distinguishes two modes (CSS-selector mode vs readability mode). It clearly differentiates from siblings like web_fetch and web_extract_table by focusing on structured extraction from a 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?
The description explains the two modes and when each is appropriate ('CSS-selector mode returns text per selector; readability mode returns the main article as clean markdown'). It doesn't explicitly name alternatives like web_fetch or web_extract_table, but the mode guidance gives clear context for when to use this tool. It lacks explicit 'when not to use' 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.
10 tool updates
- Changed
email_file4 fields changed- changed
Input schema / properties / file / descriptionPrevious value: -"The file to email — a file_id, typically the previous step's output."New value: +"The file or files to email, typically the previous step's output. Several files are zipped into one attachment, so it is always one email." - removed
Input schema / properties / file / formatRemoved value: -"binary" - added
Input schema / properties / file / itemsAdded value: +{ + "format": "binary", + "type": "string" +} - changed
Input schema / properties / file / typePrevious value: -"string"New value: +"array"
- Changed
photo_add_border3 fields changed- added
Input schema / properties / color / x-uiAdded value: +{ + "draw": { + "names": { + "aqua": [ + 0, + 255, + 255 + ], + "beige": [ + 245, + 245, + 220 + ], + "black": [ + 0, + 0, + 0 + ], + "blue": [ + 0, + 0, + 255 + ], + "brown": [ + 165, + 42, + 42 + ], + "crimson": [ + 220, + 20, + 60 + ], + "cyan": [ + 0, + 255, + 255 + ], + "fuchsia": [ + 255, + 0, + 255 + ], + "gold": [ + 255, + 215, + 0 + ], + "gray": [ + 128, + 128, + 128 + ], + "green": [ + 0, + 128, + 0 + ], + "grey": [ + 128, + 128, + 128 + ], + "indigo": [ + 75, + 0, + 130 + ], + "ivory": [ + 255, + 255, + 240 + ], + "khaki": [ + 240, + 230, + 140 + ], + "lavender": [ + 230, + 230, + 250 + ], + "lime": [ + 0, + 255, + 0 + ], + "magenta": [ + 255, + 0, + 255 + ], + "maroon": [ + 128, + 0, + 0 + ], + "navy": [ + 0, + 0, + 128 + ], + "olive": [ + 128, + 128, + 0 + ], + "orange": [ + 255, + 165, + 0 + ], + "pink": [ + 255, + 192, + 203 + ], + "purple": [ + 128, + 0, + 128 + ], + "red": [ + 255, + 0, + 0 + ], + "salmon": [ + 250, + 128, + 114 + ], + "silver": [ + 192, + 192, + 192 + ], + "tan": [ + 210, + 180, + 140 + ], + "teal": [ + 0, + 128, + 128 + ], + "turquoise": [ + 64, + 224, + 208 + ], + "violet": [ + 238, + 130, + 238 + ], + "white": [ + 255, + 255, + 255 + ], + "yellow": [ + 255, + 255, + 0 + ] + }, + "of": "border", + "role": "color" + } +} - added
Input schema / properties / size / x-ui / drawAdded value: +{ + "of": "border", + "role": "thickness" +} - added
Input schema / x-drawAdded value: +{ + "border": { + "noun": "border", + "shape": "border", + "title": "The border" + } +}
- Changed
photo_crop5 fields changed- added
Input schema / properties / height / x-ui / drawAdded value: +{ + "of": "crop", + "role": "height" +} - added
Input schema / properties / width / x-ui / drawAdded value: +{ + "of": "crop", + "role": "width" +} - added
Input schema / properties / x / x-ui / drawAdded value: +{ + "of": "crop", + "role": "left" +} - added
Input schema / properties / y / x-ui / drawAdded value: +{ + "of": "crop", + "role": "top" +} - added
Input schema / x-drawAdded value: +{ + "crop": { + "noun": "crop box", + "shape": "box", + "title": "Part to keep" + } +}
- Changed
photo_face_blur10 fields changed- added
Input schema / properties / block_size / x-ui / drawAdded value: +{ + "from": 2, + "of": "areas", + "role": "block_size" +} - added
Input schema / properties / blur_mode / x-uiAdded value: +{ + "draw": { + "fallback": "gaussian", + "looks": { + "gaussian": "blur", + "pixelate": "pixelate", + "solid": "fill" + }, + "of": "areas", + "role": "look" + } +} - added
Input schema / properties / blur_radius / x-ui / drawAdded value: +{ + "from": 1, + "of": "areas", + "role": "blur_radius" +} - added
Input schema / properties / blur_strength / x-uiAdded value: +{ + "draw": { + "block": [ + 4, + 6, + 10, + 15 + ], + "blur": [ + 8, + 16, + 28, + 42 + ], + "of": "areas", + "role": "strength" + } +} - changed
Input schema / properties / manual_faces / descriptionPrevious value: -"Advanced: extra rectangles to blur even if no face was found there, as [{\"x\":10,\"y\":20,\"w\":80,\"h\":80}] in pixels."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 of the picture as it is shown (turned upright by its EXIF tag). Decimals are rounded." - added
Input schema / properties / manual_faces / x-ui / drawAdded value: +{ + "of": "areas", + "role": "list" +} - changed
Input schema / properties / selected_faces / descriptionPrevious 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."New value: +"Advanced: which detected faces to blur, as a list of numbers starting at 0, e.g. [0,2]. Leave it blank to blur every face found; an empty list [] blurs none of them, only the areas in manual_faces. Not offered in the workflow builder: each file there has its own faces." - added
Input schema / properties / selected_faces / x-show-whenAdded value: +{ + "blur_mode": [ + "__never" + ] +} - added
Input schema / properties / selected_faces / x-uiAdded value: +{ + "builder_omits": true +} - added
Input schema / x-drawAdded value: +{ + "areas": { + "note": "Every face it finds is hidden the same way. Mark anything else to hide, like a name badge or a license plate.", + "note_no_picture": "Every face it finds is hidden the same way. Other areas can be marked only when this step works on an attached picture.", + "noun": "area to hide", + "shape": "boxes", + "title": "Areas to hide" + } +}
- Changed
photo_image_overlay6 fields changed- added
Input schema / properties / opacity / x-ui / drawAdded value: +{ + "max": 100, + "of": "overlay", + "role": "opacity" +} - added
Input schema / properties / position / x-ui / drawAdded value: +{ + "cells": { + "bc": "bc", + "bl": "bl", + "br": "br", + "mc": "mc", + "ml": "ml", + "mr": "mr", + "tc": "tc", + "tl": "tl", + "tr": "tr" + }, + "of": "overlay", + "role": "anchor" +} - added
Input schema / properties / scale / x-ui / drawAdded value: +{ + "measure": "percent-own", + "of": "overlay", + "role": "size" +} - added
Input schema / properties / x_offset / x-ui / drawAdded value: +{ + "from": "inward", + "of": "overlay", + "role": "offset_x" +} - added
Input schema / properties / y_offset / x-ui / drawAdded value: +{ + "from": "inward", + "of": "overlay", + "role": "offset_y" +} - added
Input schema / x-drawAdded value: +{ + "overlay": { + "image": "overlay", + "noun": "overlay", + "on": "background", + "shape": "stamp", + "title": "Where the overlay goes" + } +}
- Changed
photo_image_splitter3 fields changed- added
Input schema / properties / cols / x-ui / drawAdded value: +{ + "of": "grid", + "role": "cols" +} - added
Input schema / properties / rows / x-uiAdded value: +{ + "draw": { + "of": "grid", + "role": "rows" + } +} - added
Input schema / x-drawAdded value: +{ + "grid": { + "noun": "grid", + "shape": "grid", + "title": "Where it is cut" + } +}
- Changed
photo_meme_generator9 fields changed- added
Input schema / properties / bottom_text / x-ui / drawAdded value: +{ + "of": "captions", + "role": "caption_bottom" +} - changed
Input schema / properties / font / descriptionPrevious value: -"If Impact isn't installed the server substitutes DejaVu-Sans-Bold; X-JE-Font-* response headers report what actually rendered."New value: +"A font the server does not have is replaced: Impact by Anton (a free face in Impact's style, shipped with the server), Arial-Bold by Liberation-Sans-Bold (drawn to Arial Bold's exact widths). X-JE-Font-* response headers report what actually rendered." - added
Input schema / properties / font / x-uiAdded value: +{ + "draw": { + "faces": { + "Arial-Bold": "liberation-sans-bold", + "DejaVu-Sans-Bold": "dejavu-sans-bold", + "Impact": "anton" + }, + "fallback": "Impact", + "of": "captions", + "role": "font" + } +} - added
Input schema / properties / font_color / x-uiAdded value: +{ + "draw": { + "of": "captions", + "role": "color" + } +} - added
Input schema / properties / font_size / x-uiAdded value: +{ + "draw": { + "accept": { + "max": 200, + "min": 10 + }, + "auto": { + "max": 150, + "min": 20, + "per": 10 + }, + "measure": "caption-px", + "of": "captions", + "role": "size" + } +} - added
Input schema / properties / stroke_color / x-uiAdded value: +{ + "draw": { + "of": "captions", + "role": "outline_color" + } +} - added
Input schema / properties / stroke_width / x-uiAdded value: +{ + "draw": { + "of": "captions", + "role": "outline_width" + } +} - added
Input schema / properties / top_text / x-ui / drawAdded value: +{ + "of": "captions", + "role": "caption_top" +} - added
Input schema / x-drawAdded value: +{ + "captions": { + "noun": "caption", + "shape": "captions", + "title": "Captions on the picture" + } +}
- Changed
photo_rounded_corners5 fields changed- added
Input schema / properties / background / x-uiAdded value: +{ + "draw": { + "names": { + "aqua": [ + 0, + 255, + 255 + ], + "beige": [ + 245, + 245, + 220 + ], + "black": [ + 0, + 0, + 0 + ], + "blue": [ + 0, + 0, + 255 + ], + "brown": [ + 165, + 42, + 42 + ], + "crimson": [ + 220, + 20, + 60 + ], + "cyan": [ + 0, + 255, + 255 + ], + "fuchsia": [ + 255, + 0, + 255 + ], + "gold": [ + 255, + 215, + 0 + ], + "gray": [ + 128, + 128, + 128 + ], + "green": [ + 0, + 128, + 0 + ], + "grey": [ + 128, + 128, + 128 + ], + "indigo": [ + 75, + 0, + 130 + ], + "ivory": [ + 255, + 255, + 240 + ], + "khaki": [ + 240, + 230, + 140 + ], + "lavender": [ + 230, + 230, + 250 + ], + "lime": [ + 0, + 255, + 0 + ], + "magenta": [ + 255, + 0, + 255 + ], + "maroon": [ + 128, + 0, + 0 + ], + "navy": [ + 0, + 0, + 128 + ], + "olive": [ + 128, + 128, + 0 + ], + "orange": [ + 255, + 165, + 0 + ], + "pink": [ + 255, + 192, + 203 + ], + "purple": [ + 128, + 0, + 128 + ], + "red": [ + 255, + 0, + 0 + ], + "salmon": [ + 250, + 128, + 114 + ], + "silver": [ + 192, + 192, + 192 + ], + "tan": [ + 210, + 180, + 140 + ], + "teal": [ + 0, + 128, + 128 + ], + "turquoise": [ + 64, + 224, + 208 + ], + "violet": [ + 238, + 130, + 238 + ], + "white": [ + 255, + 255, + 255 + ], + "yellow": [ + 255, + 255, + 0 + ] + }, + "of": "corners", + "role": "fill" + } +} - added
Input schema / properties / corners / x-uiAdded value: +{ + "draw": { + "of": "corners", + "role": "which" + } +} - added
Input schema / properties / radius / x-ui / drawAdded value: +{ + "of": "corners", + "role": "radius" +} - added
Input schema / properties / radius_unit / x-ui / drawAdded value: +{ + "of": "corners", + "role": "radius_unit" +} - added
Input schema / x-drawAdded value: +{ + "corners": { + "noun": "corners", + "shape": "corners", + "title": "The corners" + } +}
- Changed
photo_shadow_adder9 fields changed- changed
Input schema / properties / angle / defaultPrevious value: -315New value: +45 - changed
Input schema / properties / angle / descriptionPrevious value: -"Shadow direction in degrees."New value: +"Which way the shadow falls, in degrees clockwise from the right: 0 moves it right, 90 down, 180 left, 270 up. The default 45 puts it down and to the right, as if lit from the top left." - added
Input schema / properties / angle / x-ui / drawAdded value: +{ + "of": "shadow", + "role": "angle" +} - added
Input schema / properties / blur / x-ui / drawAdded value: +{ + "of": "shadow", + "role": "blur" +} - added
Input schema / properties / distance / x-ui / drawAdded value: +{ + "of": "shadow", + "role": "distance" +} - added
Input schema / properties / opacity / x-ui / drawAdded value: +{ + "max": 100, + "of": "shadow", + "role": "opacity" +} - added
Input schema / properties / output_format / x-ui / drawAdded value: +{ + "of": "shadow", + "role": "format", + "see_through": [ + "png" + ] +} - added
Input schema / properties / shadow_color / x-uiAdded value: +{ + "draw": { + "names": { + "aqua": [ + 0, + 255, + 255 + ], + "beige": [ + 245, + 245, + 220 + ], + "black": [ + 0, + 0, + 0 + ], + "blue": [ + 0, + 0, + 255 + ], + "brown": [ + 165, + 42, + 42 + ], + "crimson": [ + 220, + 20, + 60 + ], + "cyan": [ + 0, + 255, + 255 + ], + "fuchsia": [ + 255, + 0, + 255 + ], + "gold": [ + 255, + 215, + 0 + ], + "gray": [ + 128, + 128, + 128 + ], + "green": [ + 0, + 128, + 0 + ], + "grey": [ + 128, + 128, + 128 + ], + "indigo": [ + 75, + 0, + 130 + ], + "ivory": [ + 255, + 255, + 240 + ], + "khaki": [ + 240, + 230, + 140 + ], + "lavender": [ + 230, + 230, + 250 + ], + "lime": [ + 0, + 255, + 0 + ], + "magenta": [ + 255, + 0, + 255 + ], + "maroon": [ + 128, + 0, + 0 + ], + "navy": [ + 0, + 0, + 128 + ], + "olive": [ + 128, + 128, + 0 + ], + "orange": [ + 255, + 165, + 0 + ], + "pink": [ + 255, + 192, + 203 + ], + "purple": [ + 128, + 0, + 128 + ], + "red": [ + 255, + 0, + 0 + ], + "salmon": [ + 250, + 128, + 114 + ], + "silver": [ + 192, + 192, + 192 + ], + "tan": [ + 210, + 180, + 140 + ], + "teal": [ + 0, + 128, + 128 + ], + "turquoise": [ + 64, + 224, + 208 + ], + "violet": [ + 238, + 130, + 238 + ], + "white": [ + 255, + 255, + 255 + ], + "yellow": [ + 255, + 255, + 0 + ] + }, + "of": "shadow", + "role": "color" + } +} - added
Input schema / x-drawAdded value: +{ + "shadow": { + "noun": "shadow", + "shape": "shadow", + "title": "The shadow" + } +}
- Changed
photo_watermark8 fields changed- added
Input schema / properties / color / x-uiAdded value: +{ + "draw": { + "names": { + "black": [ + 0, + 0, + 0 + ], + "blue": [ + 37, + 99, + 235 + ], + "brown": [ + 120, + 63, + 4 + ], + "cyan": [ + 6, + 182, + 212 + ], + "gray": [ + 128, + 128, + 128 + ], + "green": [ + 22, + 163, + 74 + ], + "grey": [ + 128, + 128, + 128 + ], + "magenta": [ + 192, + 38, + 211 + ], + "orange": [ + 234, + 88, + 12 + ], + "pink": [ + 236, + 72, + 153 + ], + "purple": [ + 147, + 51, + 234 + ], + "red": [ + 220, + 38, + 38 + ], + "white": [ + 255, + 255, + 255 + ], + "yellow": [ + 250, + 204, + 21 + ] + }, + "of": "mark", + "role": "color" + } +} - added
Input schema / properties / font_size / x-ui / drawAdded value: +{ + "leading_number": true, + "measure": "font-px", + "of": "mark", + "out_of_range": "default", + "role": "size" +} - added
Input schema / properties / opacity / x-ui / drawAdded value: +{ + "leading_number": true, + "max": 100, + "of": "mark", + "role": "opacity" +} - added
Input schema / properties / position / x-ui / drawAdded value: +{ + "cells": { + "Center": "mc", + "East": "mr", + "North": "tc", + "NorthEast": "tr", + "NorthWest": "tl", + "South": "bc", + "SouthEast": "br", + "SouthWest": "bl", + "West": "ml" + }, + "of": "mark", + "role": "anchor" +} - added
Input schema / properties / stroke_color / x-ui / drawAdded value: +{ + "light_luma": 140, + "names": { + "black": [ + 0, + 0, + 0 + ], + "blue": [ + 37, + 99, + 235 + ], + "brown": [ + 120, + 63, + 4 + ], + "cyan": [ + 6, + 182, + 212 + ], + "gray": [ + 128, + 128, + 128 + ], + "green": [ + 22, + 163, + 74 + ], + "grey": [ + 128, + 128, + 128 + ], + "magenta": [ + 192, + 38, + 211 + ], + "orange": [ + 234, + 88, + 12 + ], + "pink": [ + 236, + 72, + 153 + ], + "purple": [ + 147, + 51, + 234 + ], + "red": [ + 220, + 38, + 38 + ], + "white": [ + 255, + 255, + 255 + ], + "yellow": [ + 250, + 204, + 21 + ] + }, + "of": "mark", + "role": "outline_color" +} - added
Input schema / properties / stroke_width / x-uiAdded value: +{ + "draw": { + "auto": { + "max": 8, + "min": 1, + "per": 18 + }, + "leading_number": true, + "max": 20, + "of": "mark", + "role": "outline_width" + } +} - added
Input schema / properties / text / x-uiAdded value: +{ + "draw": { + "face": "noto-sans-condensed", + "of": "mark", + "role": "text" + } +} - added
Input schema / x-drawAdded value: +{ + "mark": { + "noun": "watermark", + "shape": "stamp", + "title": "Watermark on the photo" + } +}
16 tool updates
- Changed
pdf_delete_pages3 fields changed- changed
Input schema / properties / pages / descriptionPrevious value: -"Pages to delete e.g. '1,3,5-7'"New value: +"Pages to delete e.g. '1,3,5-7'. At least one page must be left." - added
Input schema / properties / pages / titleAdded value: +"Pages to delete" - added
Input schema / properties / pages / x-uiAdded value: +{ + "no_recall": true, + "page_select": { + "leave_one": true + } +}
- Changed
pdf_extract_pages2 fields changed- added
Input schema / properties / pages / titleAdded value: +"Pages to extract" - added
Input schema / properties / pages / x-uiAdded value: +{ + "no_recall": true, + "page_select": {} +}
- Changed
pdf_flatten3 fields changed- added
Input schema / properties / pages / titleAdded value: +"Pages to flatten" - added
Input schema / properties / pages / x-ui / no_recallAdded value: +true - added
Input schema / properties / pages / x-ui / page_selectAdded value: +{}
- Changed
pdf_flatten_batch3 fields changed- added
Input schema / properties / pages / titleAdded value: +"Pages to flatten" - added
Input schema / properties / pages / x-ui / no_recallAdded value: +true - added
Input schema / properties / pages / x-ui / page_selectAdded value: +{}
- Changed
pdf_grayscale2 fields changed- changed
Input schema / properties / pages / titlePrevious value: -"Only these pages"New value: +"Pages to convert" - added
Input schema / properties / pages / x-uiAdded value: +{ + "no_recall": true, + "page_select": {} +}
- Changed
pdf_header_footer2 fields changed- added
Input schema / properties / pages / titleAdded value: +"Pages to add the header and footer to" - added
Input schema / properties / pages / x-uiAdded value: +{ + "no_recall": true, + "page_select": {} +}
- Changed
pdf_merge1 field changed- added
Input schema / properties / pageRanges / x-uiAdded value: +{ + "no_recall": true, + "page_select": { + "per_file": true + } +}
- Changed
pdf_page_numbers2 fields changed- added
Input schema / properties / pageRange / titleAdded value: +"Pages to number" - added
Input schema / properties / pageRange / x-uiAdded value: +{ + "no_recall": true, + "page_select": {} +}
- Changed
pdf_rotate2 fields changed- added
Input schema / properties / pages / titleAdded value: +"Pages to rotate" - added
Input schema / properties / pages / x-uiAdded value: +{ + "no_recall": true, + "page_select": {} +}
- Changed
pdf_split2 fields changed- added
Input schema / properties / pages / titleAdded value: +"Pages to keep" - added
Input schema / properties / pages / x-uiAdded value: +{ + "no_recall": true, + "page_select": { + "no_all": true + } +}
- Changed
pdf_to_excel2 fields changed- added
Input schema / properties / pages / titleAdded value: +"Pages to read" - added
Input schema / properties / pages / x-uiAdded value: +{ + "no_recall": true, + "page_select": {} +}
- Changed
pdf_to_excel_batch2 fields changed- added
Input schema / properties / pages / titleAdded value: +"Pages to read" - added
Input schema / properties / pages / x-uiAdded value: +{ + "no_recall": true, + "page_select": {} +}
- Changed
pdf_to_excel_inspect3 fields changed- added
Input schema / properties / pages / titleAdded value: +"Pages to read" - added
Input schema / properties / pages / x-ui / no_recallAdded value: +true - added
Input schema / properties / pages / x-ui / page_selectAdded value: +{}
- Changed
pdf_to_images2 fields changed- added
Input schema / properties / pages / titleAdded value: +"Pages to convert" - added
Input schema / properties / pages / x-uiAdded value: +{ + "no_recall": true, + "page_select": {} +}
- Changed
pdf_to_images_batch2 fields changed- added
Input schema / properties / pages / titleAdded value: +"Pages to convert" - added
Input schema / properties / pages / x-uiAdded value: +{ + "no_recall": true, + "page_select": {} +}
- Changed
pdf_watermark3 fields changed- changed
Input schema / properties / pages / descriptionPrevious value: -"Comma-separated page numbers e.g. '1,3,5'. Empty = all pages."New value: +"Which pages to stamp, e.g. '1-3,5'. Empty = all pages." - added
Input schema / properties / pages / titleAdded value: +"Pages to stamp" - added
Input schema / properties / pages / x-uiAdded value: +{ + "no_recall": true, + "page_select": {} +}
8 tool updates
- Changed
analyze_file_diff2 fields changed- changed
Input schema / properties / text_a / x-ui / unset_labelPrevious value: -"Uses the original file instead"New value: +"Leave both texts empty to compare two files" - changed
Input schema / properties / text_b / x-ui / unset_labelPrevious value: -"Uses the updated file instead"New value: +"Leave both texts empty to compare two files"
- Changed
pdf_excel_to_pdf3 fields changed- changed
Input schema / properties / footer / x-ui / unset_labelPrevious value: -"No footer"New value: +"Sheet's own footer" - changed
Input schema / properties / header / x-ui / unset_labelPrevious value: -"No header"New value: +"Sheet's own header" - changed
Input schema / properties / repeatRows / x-ui / unset_labelPrevious value: -"No rows repeated"New value: +"Sheet's own print titles"
- Changed
pdf_excel_to_pdf_batch3 fields changed- changed
Input schema / properties / footer / x-ui / unset_labelPrevious value: -"No footer"New value: +"Sheet's own footer" - changed
Input schema / properties / header / x-ui / unset_labelPrevious value: -"No header"New value: +"Sheet's own header" - changed
Input schema / properties / repeatRows / x-ui / unset_labelPrevious value: -"No rows repeated"New value: +"Sheet's own print titles"
- Changed
pdf_merge3 fields changed- changed
Input schema / properties / author / x-ui / unset_labelPrevious value: -"Left out"New value: +"Kept from the first file" - changed
Input schema / properties / subject / x-ui / unset_labelPrevious value: -"Left out"New value: +"Kept from the first file" - changed
Input schema / properties / title / x-ui / unset_labelPrevious value: -"Left out"New value: +"Kept from the first file"
- Changed
pdf_protect2 fields changed- changed
Input schema / properties / ownerPassword / x-ui / unset_labelPrevious value: -"Same as the open password"New value: +"Same as the open password (random if you limit permissions)" - changed
Input schema / properties / userPassword / x-ui / unset_labelPrevious value: -"No password to open it"New value: +"Same as Password above"
- Changed
pdf_to_images1 field changed- removed
Input schema / properties / namePattern / x-uiRemoved value: -{ - "unset_label": "page_0001, page_0002, …" -}
- Changed
pdf_to_images_batch1 field changed- removed
Input schema / properties / namePattern / x-uiRemoved value: -{ - "unset_label": "page_0001, page_0002, …" -}
- Changed
photo_meme_generator2 fields changed- changed
Input schema / properties / bottom_text / x-ui / unset_labelPrevious value: -"No caption at the bottom"New value: +"None, as long as the top caption is set" - changed
Input schema / properties / top_text / x-ui / unset_labelPrevious value: -"No caption at the top"New value: +"None, as long as the bottom caption is set"
5 tool updates
- Changed
media_trim_audio1 field changed- added
Input schema / properties / start / x-uiAdded value: +{ + "pair_joint": "to", + "pair_label": "Part to keep", + "pair_with": "end" +}
- Changed
media_trim_video1 field changed- added
Input schema / properties / start / x-uiAdded value: +{ + "pair_joint": "to", + "pair_label": "Part to keep", + "pair_with": "end" +}
- Changed
photo_crop1 field changed- added
Input schema / properties / x / x-ui / pair_jointAdded value: +","
- Changed
photo_image_overlay3 fields changed- added
Input schema / properties / x_offset / x-ui / pair_jointAdded value: +"," - added
Input schema / properties / x_offset / x-ui / pair_labelAdded value: +"Nudge from the anchor" - added
Input schema / properties / x_offset / x-ui / pair_withAdded value: +"y_offset"
- Changed
photo_image_splitter1 field changed- added
Input schema / properties / cols / x-uiAdded value: +{ + "pair_label": "Grid", + "pair_with": "rows" +}
6 tool updates
- Changed
generate_placeholder_image2 fields changed- added
Input schema / properties / width / x-ui / pair_labelAdded value: +"Size" - added
Input schema / properties / width / x-ui / pair_withAdded value: +"height"
- Changed
pdf_to_images2 fields changed- added
Input schema / properties / maxWidth / x-ui / pair_labelAdded value: +"Fit inside" - added
Input schema / properties / maxWidth / x-ui / pair_withAdded value: +"maxHeight"
- Changed
pdf_to_images_batch2 fields changed- added
Input schema / properties / maxWidth / x-ui / pair_labelAdded value: +"Fit inside" - added
Input schema / properties / maxWidth / x-ui / pair_withAdded value: +"maxHeight"
- Changed
photo_crop4 fields changed- added
Input schema / properties / width / x-ui / pair_labelAdded value: +"Size" - added
Input schema / properties / width / x-ui / pair_withAdded value: +"height" - added
Input schema / properties / x / x-ui / pair_labelAdded value: +"Top-left corner" - added
Input schema / properties / x / x-ui / pair_withAdded value: +"y"
- Changed
photo_resize2 fields changed- added
Input schema / properties / width / x-ui / pair_labelAdded value: +"Size" - added
Input schema / properties / width / x-ui / pair_withAdded value: +"height"
- Changed
photo_svg_to_png2 fields changed- added
Input schema / properties / width / x-ui / pair_labelAdded value: +"Size" - added
Input schema / properties / width / x-ui / pair_withAdded value: +"height"
11 tool updates
- Changed
analyze_file_diff2 fields changed- added
Input schema / properties / text_a / x-ui / multilineAdded value: +true - added
Input schema / properties / text_b / x-ui / multilineAdded value: +true
- Changed
analyze_grammar_check1 field changed- added
Input schema / properties / text / x-uiAdded value: +{ + "multiline": true +}
- Changed
analyze_hash1 field changed- added
Input schema / properties / text / x-ui / multilineAdded value: +true
- Changed
analyze_json_xml_validator1 field changed- added
Input schema / properties / text / x-ui / multilineAdded value: +true
- Changed
analyze_link_extractor1 field changed- added
Input schema / properties / text / x-ui / multilineAdded value: +true
- Changed
analyze_readability1 field changed- added
Input schema / properties / text / x-uiAdded value: +{ + "multiline": true +}
- Changed
analyze_word_count1 field changed- added
Input schema / properties / text / x-uiAdded value: +{ + "multiline": true +}
- Changed
analyze_word_frequency1 field changed- added
Input schema / properties / text / x-ui / multilineAdded value: +true
- Changed
convert_text1 field changed- added
Input schema / properties / text / x-uiAdded value: +{ + "multiline": true +}
- Changed
data_to_file1 field changed- added
Input schema / properties / text / x-uiAdded value: +{ + "multiline": true +}
- Changed
generate_hash1 field changed- added
Input schema / properties / text / x-uiAdded value: +{ + "multiline": true +}
33 tool updates
- Changed
analyze_file_diff2 fields changed- added
Input schema / properties / text_a / x-uiAdded value: +{ + "unset_label": "Uses the original file instead" +} - added
Input schema / properties / text_b / x-uiAdded value: +{ + "unset_label": "Uses the updated file instead" +}
- Changed
analyze_hash1 field changed- added
Input schema / properties / text / x-uiAdded value: +{ + "unset_label": "Uses the attached file instead" +}
- Changed
analyze_json_xml_validator1 field changed- added
Input schema / properties / text / x-uiAdded value: +{ + "unset_label": "Uses the attached file instead" +}
- Changed
analyze_link_extractor1 field changed- added
Input schema / properties / text / x-uiAdded value: +{ + "unset_label": "Uses the attached file instead" +}
- Changed
analyze_word_frequency2 fields changed- added
Input schema / properties / exclude / x-uiAdded value: +{ + "unset_label": "No extra words left out" +} - added
Input schema / properties / text / x-uiAdded value: +{ + "unset_label": "Uses the attached file instead" +}
- Changed
convert_sqlite1 field changed- added
Input schema / properties / table / x-uiAdded value: +{ + "unset_label": "All tables" +}
- Changed
convert_video1 field changed- added
Input schema / properties / bitrate_kbps / x-ui / unset_labelAdded value: +"Chosen automatically"
- Changed
email_file1 field changed- added
Input schema / properties / note / x-uiAdded value: +{ + "unset_label": "No note" +}
- Changed
generate_ascii_art1 field changed- added
Input schema / properties / text / x-uiAdded value: +{ + "unset_label": "The picture is converted instead" +}
- Changed
generate_business_card1 field changed- added
Input schema / properties / jobTitle / x-uiAdded value: +{ + "unset_label": "Left off the card" +}
- Changed
generate_certificate3 fields changed- added
Input schema / properties / description / x-uiAdded value: +{ + "unset_label": "Left off the certificate" +} - added
Input schema / properties / issuerName / x-uiAdded value: +{ + "unset_label": "Left off the certificate" +} - added
Input schema / properties / issuerTitle / x-uiAdded value: +{ + "unset_label": "Left off the certificate" +}
- Changed
generate_gradient1 field changed- added
Input schema / properties / positions / x-ui / unset_labelAdded value: +"Spaced evenly"
- Changed
octopus_move_file1 field changed- added
Input schema / properties / new_name / x-uiAdded value: +{ + "unset_label": "Keeps its name" +}
- Changed
pdf_compress1 field changed- added
Input schema / properties / targetSize / x-ui / unset_labelAdded value: +"No size target: Quality decides"
- Changed
pdf_crop1 field changed- added
Input schema / properties / outputFilename / x-uiAdded value: +{ + "unset_label": "Named after your file" +}
- Changed
pdf_excel_to_pdf6 fields changed- added
Input schema / properties / footer / x-uiAdded value: +{ + "unset_label": "No footer" +} - added
Input schema / properties / header / x-uiAdded value: +{ + "unset_label": "No header" +} - added
Input schema / properties / password / x-uiAdded value: +{ + "unset_label": "No password" +} - added
Input schema / properties / permPassword / x-uiAdded value: +{ + "unset_label": "Same as the open password" +} - added
Input schema / properties / repeatRows / x-uiAdded value: +{ + "unset_label": "No rows repeated" +} - added
Input schema / properties / watermarkText / x-uiAdded value: +{ + "unset_label": "No watermark" +}
- Changed
pdf_excel_to_pdf_batch6 fields changed- added
Input schema / properties / footer / x-uiAdded value: +{ + "unset_label": "No footer" +} - added
Input schema / properties / header / x-uiAdded value: +{ + "unset_label": "No header" +} - added
Input schema / properties / password / x-uiAdded value: +{ + "unset_label": "No password" +} - added
Input schema / properties / permPassword / x-uiAdded value: +{ + "unset_label": "Same as the open password" +} - added
Input schema / properties / repeatRows / x-uiAdded value: +{ + "unset_label": "No rows repeated" +} - added
Input schema / properties / watermarkText / x-uiAdded value: +{ + "unset_label": "No watermark" +}
- Changed
pdf_extract_pages1 field changed- added
Input schema / properties / outputName / x-uiAdded value: +{ + "unset_label": "Named after your file" +}
- Changed
pdf_flatten2 fields changed- added
Input schema / properties / outputFilename / x-uiAdded value: +{ + "unset_label": "Named after your file" +} - added
Input schema / properties / pages / x-uiAdded value: +{ + "unset_label": "All pages" +}
- Changed
pdf_flatten_batch2 fields changed- added
Input schema / properties / outputFilename / x-uiAdded value: +{ + "unset_label": "Named after your file" +} - added
Input schema / properties / pages / x-uiAdded value: +{ + "unset_label": "All pages" +}
- Changed
pdf_header_footer3 fields changed- added
Input schema / properties / footer / x-uiAdded value: +{ + "unset_label": "No footer text" +} - added
Input schema / properties / header / x-uiAdded value: +{ + "unset_label": "No header text" +} - added
Input schema / properties / outputFilename / x-uiAdded value: +{ + "unset_label": "Keeps your file's name" +}
- Changed
pdf_merge3 fields changed- added
Input schema / properties / author / x-uiAdded value: +{ + "unset_label": "Left out" +} - added
Input schema / properties / subject / x-uiAdded value: +{ + "unset_label": "Left out" +} - added
Input schema / properties / title / x-uiAdded value: +{ + "unset_label": "Left out" +}
- Changed
pdf_protect3 fields changed- added
Input schema / properties / outputName / x-uiAdded value: +{ + "unset_label": "Named after your file" +} - added
Input schema / properties / ownerPassword / x-uiAdded value: +{ + "unset_label": "Same as the open password" +} - added
Input schema / properties / userPassword / x-uiAdded value: +{ + "unset_label": "No password to open it" +}
- Changed
pdf_reorder2 fields changed- added
Input schema / properties / outputName / x-uiAdded value: +{ + "unset_label": "Named after your file" +} - added
Input schema / properties / password / x-uiAdded value: +{ + "unset_label": "Only needed for a locked PDF" +}
- Changed
pdf_set_metadata1 field changed- added
Input schema / properties / title / x-uiAdded value: +{ + "unset_label": "Keeps the current title" +}
- Changed
pdf_to_excel_inspect2 fields changed- added
Input schema / properties / pages / x-uiAdded value: +{ + "unset_label": "All pages" +} - added
Input schema / properties / tableIndexes / x-uiAdded value: +{ + "unset_label": "All tables" +}
- Changed
pdf_to_images3 fields changed- added
Input schema / properties / crop / x-uiAdded value: +{ + "unset_label": "No cropping" +} - added
Input schema / properties / namePattern / x-uiAdded value: +{ + "unset_label": "page_0001, page_0002, …" +} - added
Input schema / properties / watermarkText / x-uiAdded value: +{ + "unset_label": "No watermark" +}
- Changed
pdf_to_images_batch3 fields changed- added
Input schema / properties / crop / x-uiAdded value: +{ + "unset_label": "No cropping" +} - added
Input schema / properties / namePattern / x-uiAdded value: +{ + "unset_label": "page_0001, page_0002, …" +} - added
Input schema / properties / watermarkText / x-uiAdded value: +{ + "unset_label": "No watermark" +}
- Changed
pdf_unlock1 field changed- added
Input schema / properties / outputName / x-uiAdded value: +{ + "unset_label": "Named after your file" +}
- Changed
photo_bg_remover1 field changed- added
Input schema / properties / bg_color / x-uiAdded value: +{ + "unset_label": "Transparent" +}
- Changed
photo_face_blur1 field changed- added
Input schema / properties / manual_faces / x-uiAdded value: +{ + "unset_label": "Only the faces it finds" +}
- Changed
photo_meme_generator2 fields changed- added
Input schema / properties / bottom_text / x-uiAdded value: +{ + "unset_label": "No caption at the bottom" +} - added
Input schema / properties / top_text / x-uiAdded value: +{ + "unset_label": "No caption at the top" +}
- Changed
photo_watermark1 field changed- added
Input schema / properties / stroke_color / x-uiAdded value: +{ + "unset_label": "Picked to stand out from the text" +}
6 tool updates
- Changed
analyze_audio1 field changed- changed
Input schema / properties / file / descriptionPrevious value: -"Input file (MP3, WAV, AAC, FLAC, OGG)"New value: +"Input file (MP3, WAV, AAC, OGG, FLAC, M4A, WMA, OPUS or AIFF)"
- Changed
analyze_video1 field changed- changed
Input schema / properties / file / descriptionPrevious value: -"Input file (MP4, MOV, AVI, MKV, WebM)"New value: +"Input file (MP4, MOV, AVI, MKV, WebM, WMV, FLV, 3GP or MPG)"
- Changed
media_extract_audio1 field changed- changed
Input schema / properties / file / descriptionPrevious value: -"Video to pull the soundtrack from (any FFmpeg-readable container). Audio is always re-encoded to `format`, never stream-copied."New value: +"Video to pull the soundtrack from (any FFmpeg-readable container), or an M4A: an MP4 that carries only sound. Audio is always re-encoded to `format`, never stream-copied."
- Changed
media_merge_audio1 field changed- changed
Input schema / properties / files / descriptionPrevious value: -"Input audio files (MP3, WAV, AAC, OGG) — at least 2 required."New value: +"Input audio files (MP3, WAV, AAC, OGG, FLAC, M4A, WMA, OPUS or AIFF) — at least 2 required."
- Changed
media_mute_video1 field changed- changed
Input schema / properties / file / descriptionPrevious value: -"Input file (MP4, MOV, AVI, MKV)"New value: +"Input file (MP4, MOV, AVI, MKV, WebM or MPG)"
- Changed
media_trim_audio1 field changed- changed
Input schema / properties / file / descriptionPrevious value: -"Audio to trim. Output keeps this file's container/codec (stream copy); a filename with no extension is treated as .mp3."New value: +"Audio to trim. Output keeps this file's container/codec (stream copy); a file name with no extension is read by the file's type, and treated as .mp3 when the type names no sound format."
17 tool updates
- Changed
analyze_file_diff3 fields changed- added
Input schema / properties / file_a / titleAdded value: +"Original file" - added
Input schema / properties / file_b / titleAdded value: +"Updated file" - added
Input schema / x-require-one-ofAdded value: +[ + [ + "file_a", + "file_b" + ], + [ + "text_a", + "text_b" + ] +]
- Changed
analyze_hash1 field changed- added
Input schema / x-require-one-ofAdded value: +[ + [ + "file" + ], + [ + "text" + ] +]
- Changed
analyze_json_xml_validator2 fields changed- added
Input schema / x-passes-no-fileAdded value: +true - added
Input schema / x-require-one-ofAdded value: +[ + [ + "file" + ], + [ + "text" + ] +]
- Changed
analyze_link_extractor1 field changed- added
Input schema / x-require-one-ofAdded value: +[ + [ + "file" + ], + [ + "text" + ] +]
- Changed
analyze_readability1 field changed- added
Input schema / x-require-one-ofAdded value: +[ + [ + "file" + ], + [ + "text" + ] +]
- Changed
analyze_word_count1 field changed- added
Input schema / x-require-one-ofAdded value: +[ + [ + "file" + ], + [ + "text" + ] +]
- Changed
analyze_word_frequency1 field changed- added
Input schema / x-require-one-ofAdded value: +[ + [ + "file" + ], + [ + "text" + ] +]
- Changed
drive_upload1 field changed- added
Input schema / x-passes-no-fileAdded value: +true
- Changed
email_file1 field changed- added
Input schema / x-passes-no-fileAdded value: +true
- Changed
generate_hash1 field changed- added
Input schema / x-require-one-ofAdded value: +[ + [ + "file" + ], + [ + "text" + ] +]
- Changed
octopus_make_folder1 field changed- added
Input schema / x-passes-no-fileAdded value: +true
- Changed
photo_color_adjuster1 field changed- changed
Input schema / properties / file / descriptionPrevious value: -"JPG, PNG, WebP, GIF, BMP, HEIC, TIFF. Max 25 MB. Output keeps the input format."New value: +"JPG, PNG, WebP, GIF, BMP, HEIC, TIFF. Max 25 MB. Output keeps the input format, except that a HEIC or HEIF photo comes back as a JPG."
- Changed
photo_crop1 field changed- changed
Input schema / properties / file / descriptionPrevious value: -"JPG, PNG, WebP, HEIC, TIFF, BMP, or GIF. Output keeps the input format."New value: +"JPG, PNG, WebP, HEIC, TIFF, BMP, or GIF. Output keeps the input format, except that a HEIC or HEIF photo comes back as a JPG."
- Changed
photo_editor1 field changed- changed
Input schema / properties / file / descriptionPrevious value: -"JPG, PNG, WebP, GIF, BMP, HEIC, TIFF (max 25MB)"New value: +"JPG, PNG, WebP, GIF, BMP, HEIC, TIFF (max 25MB). Output keeps the input format, except that a HEIC or HEIF photo comes back as a JPG."
- Changed
photo_face_detect1 field changed- changed
Input schema / properties / file / descriptionPrevious value: -"Input file (JPG, PNG)"New value: +"Input file (JPG, PNG, WebP, BMP)"
- Changed
photo_resize1 field changed- changed
Input schema / properties / file / descriptionPrevious value: -"JPG, PNG, WebP, GIF, BMP"New value: +"JPG, PNG, WebP, GIF, BMP, TIFF, AVIF, HEIC or HEIF. Output keeps the input format, except that a HEIC or HEIF photo comes back as a JPG."
- Changed
photo_watermark1 field changed- changed
Input schema / properties / file / descriptionPrevious value: -"JPG, PNG, WebP, GIF, BMP, HEIC, TIFF. Max 25 MB. Output keeps the input format."New value: +"JPG, PNG, WebP, GIF, BMP, HEIC, TIFF. Max 25 MB. Output keeps the input format, except that a HEIC or HEIF photo comes back as a JPG."
13 tool updates
- Changed
generate_ascii_art2 fields changed- changed
Input schema / properties / file / descriptionPrevious value: -"The picture to convert (max 10 MB)."New value: +"The picture to convert, up to 10 MB. Used when Mode is Image, and also when Text is left empty; with words in Text and Mode on Text, the picture is ignored." - removed
Input schema / properties / file / x-show-whenRemoved value: -{ - "mode": [ - "image" - ] -}
- Changed
generate_gradient1 field changed- changed
Input schema / properties / positions / descriptionPrevious value: -"Optional, and API-only for now: the builder cannot draw it safely yet. Where each colour sits along the blend, as a percentage, one entry per colour. Leave it out and the colours are spaced evenly. The API accepts it normally; it is hidden in the builder because the control an array gets there is a chip list, and a chip list DISCARDS DUPLICATES — a hard-edged gradient needs two colours at the same stop (0,50,50,100) and the chips would silently collapse that to three stops and change the picture. Same defect class as pdf_merge.pageRanges. Show it once there is a control that keeps one entry per colour."New value: +"Where each colour sits along the blend, as a percentage from 0 to 100: one entry per colour, in the same order. Two colours at the same stop make a hard edge (0, 50, 50, 100). Leave it out and the colours are spaced evenly. A list without exactly one entry per colour is refused."
- Changed
generate_signature3 fields changed- changed
Input schema / properties / background / descriptionPrevious value: -"'transparent' is what makes the result stampable onto a PDF or a photo. Give a hex colour instead if you want it on a solid card."New value: +"'transparent' is what makes the result stampable onto a PDF or a photo. Give a colour instead, as hex or a name such as white, if you want it on a solid card. A colour we cannot read is refused rather than turned transparent." - changed
Input schema / properties / color / descriptionPrevious value: -"A hex colour, with or without the leading '#'. Anything we cannot read reverts to the default ink."New value: +"A hex colour (#1a1a2e or #fff, with or without the '#', optionally with an alpha pair) or a colour name such as black or navy. A colour we cannot read is refused, and so is ink that would not show, such as transparent." - changed
Input schema / properties / style / descriptionPrevious value: -"Which handwriting face to use. If the chosen face is not installed on the server the request fails and says so, rather than handing back a 'signature' in a plain block font."New value: +"Which handwriting face to use: Script is Dancing Script, Elegant is Great Vibes, Handwritten is Pacifico and Bold is Lobster, the faces the web page draws. When that face is not installed on our server, another handwriting face is drawn in its place, never a plain block font, and the X-JE-Font-Substituted response header says so. Only when no handwriting face is installed does the request fail."
- Changed
media_add_watermark1 field changed- changed
Input schema / properties / text / descriptionPrevious value: -"The words burned into every frame. Required, and there is no default: a step nobody opened used to burn our own company name into the customer's video."New value: +"The words burned into every frame, drawn exactly as typed (% signs and backslashes included) on one line of up to 200 characters. Required; there is no default."
- Changed
pdf_watermark1 field changed- added
Input schema / properties / imageFile / x-show-whenAdded value: +{ + "mode": [ + "image" + ] +}
- Changed
photo_collage2 fields changed- changed
Input schema / properties / template / descriptionPrevious value: -"Named template (layout_mode=template), e.g. ig_post_2x2, ig_story_3_vertical, ig_post_5_magazine."New value: +"Named template (layout_mode=template), e.g. ig_post_2x2, ig_story_3_vertical, ig_post_5_magazine. Needed when Layout mode is template: there is no default, and a template-mode run with none chosen, or with fewer photos than the template has places for, is refused with the reason." - changed
Input schema / properties / template / x-ui / unset_labelPrevious value: -"No template"New value: +"Choose a template"
- Changed
photo_compress1 field changed- changed
Input schema / properties / output_format / x-ui / unset_labelPrevious value: -"Keeps input format"New value: +"Keeps input format (HEIC becomes JPG)"
- Changed
photo_compress_to_size1 field changed- changed
Input schema / properties / output_format / x-ui / unset_labelPrevious value: -"Keeps input format"New value: +"Keeps input format (HEIC becomes JPG)"
- Changed
photo_image_overlay1 field changed- changed
Input schema / properties / scale / descriptionPrevious value: -"Overlay width as a percent of background width, 1-200."New value: +"Overlay size as a percent of the overlay's own size, not of the background: 100 keeps it as it is, 50 halves it, 200 doubles it."
- Changed
photo_image_splitter3 fields changed- added
Input schema / properties / cols / titleAdded value: +"Columns" - removed
Input schema / properties / cols / x-uiRemoved value: -{ - "unit": "columns" -} - removed
Input schema / properties / rows / x-uiRemoved value: -{ - "unit": "rows" -}
- Changed
photo_rounded_corners2 fields changed- changed
Input schema / properties / background / descriptionPrevious value: -"What fills the corners that were rounded off: 'transparent' (the default; 'none' is accepted as a synonym for it) leaves them see-through, or 'white', 'black', or a hex value such as #1a1a1a. That is the whole list — any other colour name, red or navy included, is refused with a 400, even though Add Border accepts them."New value: +"What fills the corners that were rounded off: 'transparent' (the default; 'none' means the same) leaves them see-through. Anything else fills them with a colour: a hex value (#rgb, #rgba, #rrggbb or #rrggbbaa, such as #1a1a1a) or any of the named colours Add Border accepts (red, navy, gold and others; not case-sensitive). Any other name is refused with a 400 that lists every accepted name." - added
Input schema / properties / radius / x-uiAdded value: +{ + "unit_from": { + "by_value": { + "percent": { + "maximum": 50, + "unit": "%" + }, + "px": { + "maximum": 5000, + "unit": "px" + } + }, + "param": "radius_unit" + } +}
- Changed
photo_to_text1 field changed- changed
Input schema / properties / languages / descriptionPrevious 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."New value: +"Which language or languages the writing is in. One code, or several separated by commas (en,fr); a plus sign works too, as Tesseract writes it (eng+fra). Two-letter codes are the usual form: en, fr, de, es, pt, it, nl, ru, ar, zh, ja, ko. Tesseract's own codes (eng, fra, deu, chi_sim, chi_tra, ...) are also accepted; each of the two reading engines is handed its own spelling of the language. A language whose reading pack is not installed on our server is refused with a message that says so, rather than reported as an engine fault. Letters and underscores only, not case-sensitive; a value with no code in it, such as a lone comma, is refused with a 400. Field name is languages, not language."
- Changed
photo_watermark1 field changed- changed
Input schema / properties / text / descriptionPrevious value: -"The words stamped onto the photo. Required, and there is no default: a step nobody opened used to stamp our own company name onto the customer's picture. A leading '@' is stripped."New value: +"The words stamped onto the photo. Required; there is no default. A leading '@' is removed."
24 tool updates
- Changed
analyze_json_xml_validator2 fields changed- added
Input schema / properties / fileAdded value: +{ + "description": "A JSON or XML file to check — this is how a previous step hands its output over. Up to 1 MB. Send this or the text below; a file wins if both arrive.", + "format": "binary", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "text" -]New value: +[]
- Changed
convert_data1 field changed- added
Input schema / properties / from / x-uiAdded value: +{ + "unset_label": "Read from file" +}
- Changed
convert_file1 field changed- added
Input schema / properties / from / x-uiAdded value: +{ + "unset_label": "Read from file" +}
- Changed
convert_geo1 field changed- added
Input schema / properties / from / x-uiAdded value: +{ + "unset_label": "Read from file" +}
- Changed
convert_parquet1 field changed- added
Input schema / properties / from / x-uiAdded value: +{ + "unset_label": "Read from file" +}
- Changed
convert_video1 field changed- added
Input schema / properties / preset_name / x-ui / unset_labelAdded value: +"No preset"
- Changed
pdf_excel_to_pdf3 fields changed- added
Input schema / properties / gridlines / x-ui / unset_labelAdded value: +"Sheet's own setting" - added
Input schema / properties / quality / x-ui / unset_labelAdded value: +"Converter's setting" - added
Input schema / properties / showHeaders / x-ui / unset_labelAdded value: +"Sheet's own setting"
- Changed
pdf_excel_to_pdf_batch3 fields changed- added
Input schema / properties / gridlines / x-ui / unset_labelAdded value: +"Sheet's own setting" - added
Input schema / properties / quality / x-ui / unset_labelAdded value: +"Converter's setting" - added
Input schema / properties / showHeaders / x-ui / unset_labelAdded value: +"Sheet's own setting"
- Changed
pdf_images_to_pdf1 field changed- added
Input schema / properties / orientation / x-ui / unset_labelAdded value: +"Follows page size"
- Changed
pdf_to_images2 fields changed- added
Input schema / properties / preset / x-ui / unset_labelAdded value: +"No preset" - changed
Input schema / properties / watermarkFontSize / descriptionPrevious value: -"Points against the bitmap's 72dpi density — at dpi=300 text is ~4x smaller on the page than in a PDF. Needs watermarkText."New value: +"Size of the stamped text in PIXELS of the rasterised page: it is annotated onto the bitmap at ImageMagick's 72 dpi default, so at dpi=300 the same number covers ~4x less of the page than it would inside a PDF. Needs watermarkText."
- Changed
pdf_to_images_batch2 fields changed- added
Input schema / properties / preset / x-ui / unset_labelAdded value: +"No preset" - changed
Input schema / properties / watermarkFontSize / descriptionPrevious value: -"Points against the bitmap's 72dpi density — at dpi=300 text is ~4x smaller on the page than in a PDF. Needs watermarkText."New value: +"Size of the stamped text in PIXELS of the rasterised page: it is annotated onto the bitmap at ImageMagick's 72 dpi default, so at dpi=300 the same number covers ~4x less of the page than it would inside a PDF. Needs watermarkText."
- Changed
photo_add_border2 fields changed- changed
Input schema / properties / color / descriptionPrevious value: -"A hex colour (#rgb, #rgba, #rrggbb or #rrggbbaa) or one of the 35 standard CSS colour names. Anything else is refused rather than quietly falling back. A see-through colour needs a PNG or WebP input — on a JPEG it is refused, because JPEG cannot hold transparency and the border would come out black."New value: +"A hex colour (#rgb, #rgba, #rrggbb or #rrggbbaa) or one of these 35 names — a hand-picked set, not the whole CSS list, so lightblue and darkgreen are refused: black, silver, gray, grey, white, maroon, red, purple, fuchsia, green, lime, olive, yellow, navy, blue, teal, aqua, cyan, magenta, orange, pink, brown, beige, ivory, gold, tan, khaki, crimson, indigo, violet, salmon, turquoise, lavender, plus none and transparent, which still widen the picture by the border size on every side but fill those new pixels with see-through rather than a visible frame. Anything else is refused rather than quietly falling back. A see-through colour needs a PNG or WebP input — on a JPEG it is refused, because JPEG cannot hold transparency and the border would come out black." - changed
Input schema / properties / size / descriptionPrevious value: -"How thick the border is, in pixels, on all four sides. Out-of-range values are pulled back to the nearest allowed value rather than refused; 0 returns the picture untouched."New value: +"How thick the border is, in pixels, on all four sides. Out-of-range values are pulled back to the nearest allowed value rather than refused. 0 adds no border, but it is NOT a pass-through: the picture is still decoded and written out again (a JPEG is re-encoded at quality 92), and an EXIF-rotated phone photo comes back physically rotated with its orientation tag cleared."
- Changed
photo_collage1 field changed- added
Input schema / properties / template / x-ui / unset_labelAdded value: +"No template"
- Changed
photo_compress1 field changed- added
Input schema / properties / output_format / x-uiAdded value: +{ + "unset_label": "Keeps input format" +}
- Changed
photo_compress_to_size1 field changed- added
Input schema / properties / output_format / x-uiAdded value: +{ + "unset_label": "Keeps input format" +}
- Changed
photo_face_blur1 field changed- added
Input schema / properties / output_format / x-uiAdded value: +{ + "unset_label": "Keeps input format" +}
- Changed
photo_image_overlay1 field changed- added
Input schema / properties / output_format / x-uiAdded value: +{ + "unset_label": "Keeps background's format" +}
- Changed
photo_image_splitter1 field changed- added
Input schema / properties / output_format / x-uiAdded value: +{ + "unset_label": "Keeps input format" +}
- Changed
photo_meme_generator1 field changed- added
Input schema / properties / output_format / x-uiAdded value: +{ + "unset_label": "Keeps input format" +}
- Changed
photo_noise_reducer1 field changed- added
Input schema / properties / output_format / x-uiAdded value: +{ + "unset_label": "Keeps input format" +}
- Changed
photo_rounded_corners3 fields changed- changed
Input schema / properties / background / descriptionPrevious value: -"What fills the corners that were rounded off: 'transparent' (the default) leaves them see-through, or give a colour name or a hex value to fill them instead."New value: +"What fills the corners that were rounded off: 'transparent' (the default; 'none' is accepted as a synonym for it) leaves them see-through, or 'white', 'black', or a hex value such as #1a1a1a. That is the whole list — any other colour name, red or navy included, is refused with a 400, even though Add Border accepts them." - changed
Input schema / properties / radius / descriptionPrevious value: -"How far the curve reaches in from each corner. Out-of-range values are pulled back rather than refused, and the value is capped again per picture at half the shorter side, because a curve larger than that has no meaning. Fractions are rounded."New value: +"How far the curve reaches in from each corner. Measured in whichever unit the next setting says: PIXELS, up to 5000 — or PERCENT of the shorter side, where anything above 50 is treated as 50, because half the shorter side is a full semicircle and there is nothing beyond it. Out-of-range values are pulled back rather than refused. Fractions are rounded." - removed
Input schema / properties / radius / x-uiRemoved value: -{ - "unit": "px" -}
- Changed
photo_shadow_adder1 field changed- added
Input schema / properties / output_format / x-uiAdded value: +{ + "unset_label": "Keeps input format" +}
- Changed
photo_upscaler1 field changed- added
Input schema / properties / output_format / x-uiAdded value: +{ + "unset_label": "Keeps input format" +}
- Changed
photo_watermark3 fields changed- changed
Input schema / properties / color / descriptionPrevious value: -"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."New value: +"A hex colour, or one of white, black, gray, grey, red, orange, yellow, green, blue, cyan, magenta, purple, pink, brown. Anything else falls back to white." - changed
Input schema / properties / font_size / descriptionPrevious value: -"Points. Out-of-range values (<6 or >500) silently reset to 36 — no error returned."New value: +"How big the lettering is, measured in PIXELS of the photo rather than points on a page: the words are drawn straight onto the bitmap, so the same number gives the same size here, on the Signature Generator and on PDF to Images. Out-of-range values (<6 or >500) silently reset to 36 — no error returned." - changed
Input schema / properties / font_size / x-ui / unitPrevious value: -"pt"New value: +"px"
48 tool updates
- Removed
analyze_grammar_check_batch - Added
analyze_json_xml_validator - Changed
convert_file2 fields changed- added
Input schema / properties / gif_fps / x-uiAdded value: +{ + "unit": "fps" +} - added
Input schema / properties / gif_width / x-uiAdded value: +{ + "unit": "px" +}
- Changed
convert_video1 field changed- added
Input schema / properties / bitrate_kbps / x-uiAdded value: +{ + "unit": "kbps" +}
- Changed
generate_ascii_art1 field changed- added
Input schema / properties / width / x-uiAdded value: +{ + "unit": "chars" +}
- Changed
generate_barcode1 field changed- added
Input schema / properties / height / x-uiAdded value: +{ + "unit": "px" +}
- Added
generate_color_palette - Changed
generate_favicon1 field changed- added
Input schema / properties / borderRadius / x-uiAdded value: +{ + "unit": "%" +}
- Added
generate_gradient - Removed
generate_invoice - Changed
generate_password1 field changed- added
Input schema / properties / length / x-uiAdded value: +{ + "unit": "chars" +}
- Changed
generate_placeholder_image2 fields changed- added
Input schema / properties / height / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / width / x-uiAdded value: +{ + "unit": "px" +}
- Changed
generate_qr_code1 field changed- added
Input schema / properties / size / x-uiAdded value: +{ + "unit": "px" +}
- Added
generate_signature - Added
generate_uuid - Changed
media_add_watermark4 fields changed- added
Input schema / properties / fontsize / x-uiAdded value: +{ + "unit": "px" +} - removed
Input schema / properties / text / defaultRemoved value: -"John's Essentials" - changed
Input schema / properties / text / descriptionPrevious value: -"Watermark text."New value: +"The words burned into every frame. Required, and there is no default: a step nobody opened used to burn our own company name into the customer's video." - changed
Input schema / requiredPrevious value: -[ - "file" -]New value: +[ + "file", + "text" +]
- Changed
media_extract_frames1 field changed- added
Input schema / properties / fps / x-uiAdded value: +{ + "unit": "fps" +}
- Changed
pdf_crop4 fields changed- added
Input schema / properties / bottom / x-uiAdded value: +{ + "unit": "pt" +} - added
Input schema / properties / left / x-uiAdded value: +{ + "unit": "pt" +} - added
Input schema / properties / right / x-uiAdded value: +{ + "unit": "pt" +} - added
Input schema / properties / top / x-uiAdded value: +{ + "unit": "pt" +}
- Changed
pdf_excel_to_pdf4 fields changed- added
Input schema / properties / scale / x-uiAdded value: +{ + "unit": "%" +} - added
Input schema / properties / watermarkFontSize / x-uiAdded value: +{ + "unit": "pt" +} - added
Input schema / properties / watermarkRotation / x-uiAdded value: +{ + "unit": "deg" +} - added
Input schema / properties / watermarkScale / x-uiAdded value: +{ + "unit": "x" +}
- Changed
pdf_excel_to_pdf_batch4 fields changed- added
Input schema / properties / scale / x-uiAdded value: +{ + "unit": "%" +} - added
Input schema / properties / watermarkFontSize / x-uiAdded value: +{ + "unit": "pt" +} - added
Input schema / properties / watermarkRotation / x-uiAdded value: +{ + "unit": "deg" +} - added
Input schema / properties / watermarkScale / x-uiAdded value: +{ + "unit": "x" +}
- Changed
pdf_flatten3 fields changed- added
Input schema / properties / watermarkFontSize / x-uiAdded value: +{ + "unit": "pt" +} - added
Input schema / properties / watermarkRotation / x-uiAdded value: +{ + "unit": "deg" +} - added
Input schema / properties / watermarkScale / x-uiAdded value: +{ + "unit": "x" +}
- Changed
pdf_flatten_batch3 fields changed- added
Input schema / properties / watermarkFontSize / x-uiAdded value: +{ + "unit": "pt" +} - added
Input schema / properties / watermarkRotation / x-uiAdded value: +{ + "unit": "deg" +} - added
Input schema / properties / watermarkScale / x-uiAdded value: +{ + "unit": "x" +}
- Changed
pdf_header_footer2 fields changed- added
Input schema / properties / fontSize / x-uiAdded value: +{ + "unit": "pt" +} - added
Input schema / properties / margin / x-uiAdded value: +{ + "unit": "pt" +}
- Changed
pdf_images_to_pdf1 field changed- added
Input schema / properties / margin / x-uiAdded value: +{ + "unit": "pt" +}
- Changed
pdf_page_numbers1 field changed- added
Input schema / properties / fontSize / x-uiAdded value: +{ + "unit": "pt" +}
- Changed
pdf_split1 field changed- added
Input schema / properties / chunkSize / x-uiAdded value: +{ + "unit": "pages" +}
- Changed
pdf_to_images6 fields changed- added
Input schema / properties / dpi / x-uiAdded value: +{ + "unit": "dpi" +} - added
Input schema / properties / maxHeight / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / maxWidth / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / sheetGap / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / watermarkFontSize / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / watermarkRotation / x-uiAdded value: +{ + "unit": "deg" +}
- Changed
pdf_to_images_batch6 fields changed- added
Input schema / properties / dpi / x-uiAdded value: +{ + "unit": "dpi" +} - added
Input schema / properties / maxHeight / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / maxWidth / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / sheetGap / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / watermarkFontSize / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / watermarkRotation / x-uiAdded value: +{ + "unit": "deg" +}
- Changed
pdf_watermark2 fields changed- added
Input schema / properties / fontSize / x-uiAdded value: +{ + "unit": "pt" +} - added
Input schema / properties / rotation / x-uiAdded value: +{ + "unit": "deg" +}
- Added
photo_add_border - Changed
photo_collage3 fields changed- added
Input schema / properties / gap / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / output_long_edge / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / output_width / x-uiAdded value: +{ + "unit": "px" +}
- Changed
photo_color_adjuster3 fields changed- added
Input schema / properties / brightness / x-uiAdded value: +{ + "unit": "%" +} - added
Input schema / properties / contrast / x-uiAdded value: +{ + "unit": "%" +} - added
Input schema / properties / saturation / x-uiAdded value: +{ + "unit": "%" +}
- Changed
photo_compress_to_size1 field changed- added
Input schema / properties / target_size_kb / x-uiAdded value: +{ + "unit": "KB" +}
- Changed
photo_crop4 fields changed- added
Input schema / properties / height / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / width / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / x / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / y / x-uiAdded value: +{ + "unit": "px" +}
- Changed
photo_face_blur2 fields changed- added
Input schema / properties / block_size / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / blur_radius / x-uiAdded value: +{ + "unit": "px" +}
- Changed
photo_flip_rotate1 field changed- added
Input schema / properties / degrees / x-uiAdded value: +{ + "unit": "deg" +}
- Changed
photo_image_diff1 field changed- added
Input schema / properties / fuzz / x-uiAdded value: +{ + "unit": "%" +}
- Changed
photo_image_overlay4 fields changed- added
Input schema / properties / opacity / x-uiAdded value: +{ + "unit": "%" +} - added
Input schema / properties / scale / x-uiAdded value: +{ + "unit": "%" +} - added
Input schema / properties / x_offset / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / y_offset / x-uiAdded value: +{ + "unit": "px" +}
- Changed
photo_image_splitter2 fields changed- added
Input schema / properties / cols / x-uiAdded value: +{ + "unit": "columns" +} - added
Input schema / properties / rows / x-uiAdded value: +{ + "unit": "rows" +}
- Changed
photo_resize3 fields changed- added
Input schema / properties / height / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / percentage / x-uiAdded value: +{ + "unit": "%" +} - added
Input schema / properties / width / x-uiAdded value: +{ + "unit": "px" +}
- Added
photo_rounded_corners - Changed
photo_shadow_adder4 fields changed- added
Input schema / properties / angle / x-uiAdded value: +{ + "unit": "deg" +} - added
Input schema / properties / blur / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / distance / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / opacity / x-uiAdded value: +{ + "unit": "%" +}
- Changed
photo_svg_to_png2 fields changed- added
Input schema / properties / height / x-uiAdded value: +{ + "unit": "px" +} - added
Input schema / properties / width / x-uiAdded value: +{ + "unit": "px" +}
- Changed
photo_to_text1 field changed- added
Input schema / properties / binarize_threshold / x-uiAdded value: +{ + "unit": "%" +}
- Changed
photo_watermark5 fields changed- added
Input schema / properties / font_size / x-uiAdded value: +{ + "unit": "pt" +} - added
Input schema / properties / opacity / x-uiAdded value: +{ + "unit": "%" +} - removed
Input schema / properties / text / defaultRemoved value: -"John's Essentials" - changed
Input schema / properties / text / descriptionPrevious value: -"Defaults to 'John's Essentials' when omitted — always pass your own. A leading '@' is stripped."New value: +"The words stamped onto the photo. Required, and there is no default: a step nobody opened used to stamp our own company name onto the customer's picture. A leading '@' is stripped." - changed
Input schema / requiredPrevious value: -[ - "file" -]New value: +[ + "file", + "text" +]
- Changed
web_extract_table1 field changed- added
Input schema / properties / timeout_ms / x-uiAdded value: +{ + "unit": "ms" +}
- Changed
web_fetch1 field changed- added
Input schema / properties / timeout_ms / x-uiAdded value: +{ + "unit": "ms" +}
- Changed
web_scrape_page1 field changed- added
Input schema / properties / timeout_ms / x-uiAdded value: +{ + "unit": "ms" +}
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 +}
Related MCP Connectors
Convert and compress PDFs and images, redact personal data, and run text and data utilities.
Convert files too big or exotic for a sandbox: 140+ formats, batch, OCR, AI extraction, TTS/STT
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.
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables AI agents to convert documents, images, and data files across 50+ format pairs and to run PDF/image operations such as merge, split, compress, rotate, protect, unlock, extract text, and resize or compress images. Files are passed URL-in and returned URL-out (or saved locally in stdio mode), with tools for checking credits and generating Stripe checkout or billing-portal links.18169 PyPIMIT
- 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.41 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.35 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.