Skip to main content
Glama

Server Details

144 deterministic file tools: PDF, image, media, convert, analyze. Connect in one click (OAuth).

Ownership verified
Status
Healthy
Uptime
74.5% over 54 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

B3.2/5.0

Scored across 147 tools

Disambiguation2/5

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.

Naming Consistency4/5

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.

Tool Count1/5

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.

Completeness4/5

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 tools
analyze_audioA
Read-only
Inspect

Audio Analyzer — Analyse an audio file: duration, sample rate, bit rate, channels, codec, waveform data. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (MP3, WAV, AAC, OGG, FLAC, M4A, WMA, OPUS or AIFF)

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_paletteC
Read-only
Inspect

Color Palette Extractor — Extract the dominant colour palette from an image. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesImage (JPG, PNG, WebP)
colorsNoHow many dominant colours to pull out of the image.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_csvB
Read-only
Inspect

CSV Analyzer — Analyse a CSV file: row/column count, data types, null counts, min/max/mean per column. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (CSV)
strictNoFiles 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

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_detectorA
Read-only
Inspect

Duplicate Detector — Identify duplicate or near-duplicate files in a batch upload using perceptual hashing. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYes2-20 files to compare (any type). Files beyond the first 20 are silently ignored.

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_detectorA
Read-only
Inspect

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (TXT, HTML, CSV, XML)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_fileA
Read-only
Inspect

File Analyzer — Analyse a file and return type, encoding, size, MIME type, magic bytes, and structure summary. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (any)

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_diffA
Read-only
Inspect

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
file_aNoFirst file — TXT, CSV, JSON, XML. Send file_a AND file_b together (file mode).
file_bNoSecond file.
strictNoOnly 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_aNoThe BEFORE version. Anything that appears only here is reported as removed.
text_bNoThe AFTER version. Anything that appears only here is reported as added.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_detectorA
Read-only
Inspect

Font Detector — Detect fonts used in a PDF or DOCX document. Images are not supported. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF, DOCX)

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_checkA
Read-only
Inspect

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoKeep my voice leaves your phrasing alone; Strict also flags casual or loose wording.tone-preserving
textYesThe text to check (max 50,000 characters).
styleNoStyle-guide conventions to enforce (e.g. Oxford comma for APA/MLA/IEEE/Chicago, dropped for AP).none
dialectNoEnglish dialect for spelling and grammar rules.en-US
include_llmNoAdds 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

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_hashB
Read-only
Inspect

Hash Generator (File) — Compute MD5, SHA-1, SHA-256, and SHA-512 hashes of an uploaded file. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoThe file to hash. Any type, of any size we accept.
textNoHash typed text instead of a file. Ignored if a file is attached — the file wins.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_qualityA
Read-only
Inspect

Image Quality Analyzer — Measure sharpness, noise level, compression artefacts, and BRISQUE quality score of an image. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (JPG, PNG, WebP)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_similarityB
Read-only
Inspect

Image Similarity — Compute a perceptual similarity score between two images (pHash distance). Takes two separately-named uploads: 'file_a' and 'file_b'. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
file_aYesFirst image — JPG, PNG
file_bYesSecond image — JPG, PNG

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoA 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.
textNoUp 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.
formatNoLeave it on automatic and the format is read from the text itself.auto

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_metadataA
Read-only
Inspect

Metadata Viewer — Extract and display all metadata from a file (EXIF, PDF info, document properties, audio tags). [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (any)

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_inspectorA
Read-only
Inspect

PDF Inspector — Deep inspection of a PDF: page count, fonts used, annotations, form fields, embedded files. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF)

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_readabilityA
Read-only
Inspect

Readability Scorer — Calculate Flesch Reading Ease and Flesch-Kincaid Grade Level for a text. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoAlternative: upload a .txt, .pdf, or .docx document (max 25MB).
textNoPaste the text to score — about five words minimum. Leave blank if you are uploading a document instead.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_sslA
Read-only
Inspect

SSL Checker — Check an SSL certificate for a hostname: expiry, issuer, validity, cipher suite. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
hostnameYesThe 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

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_videoA
Read-only
Inspect

Video Inspector — Inspect a video: duration, resolution, frame rate, codec, audio tracks, bitrate. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (MP4, MOV, AVI, MKV, WebM, WMV, FLV, 3GP or MPG)

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_countA
Read-only
Inspect

Word Counter — Count words, characters, sentences, paragraphs, and reading time in a text or uploaded document (.txt/.pdf/.docx). [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoAlternative: upload a .txt, .pdf, or .docx document (max 25MB).
textNoPaste the text to count. Leave blank if you are uploading a document instead.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_frequencyB
Read-only
Inspect

Word Frequency Analyzer — Analyse word frequency distribution in a text or document file. [category: analyze]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoText or document file
textNoDirect text input. Provide either file or text.
topNNoShow this many of the most common words, most frequent first.
excludeNoComma-separated, e.g. the, and, of. Capitals and spacing do not matter. Words under two letters are always ignored.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesThe archive format you want back. ZIP opens on every computer without extra software.zip
fileYesArchive to convert — ZIP, RAR, 7Z, GZ, TAR, TAR.BZ2, TAR.XZ, CAB, ISO (max 200MB)

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYes200 MB combined cap. Rows that can't convert are skipped, not fatal — check _manifest.txt in the ZIP for per-row status.
targetNoWhat 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
filenamesNoNot used by this tool — the names come from the uploaded files themselves. Leave it empty.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesTarget format. Only these pairs are valid: vcf→csv, vcf→xlsx, csv→vcf, ics→json, ics→csv, msg→eml, eml→pdf.
fileYesParsed as the declared 'from' — bytes are never sniffed. Size caps vary by pair: 10 MB vcf/csv/ics, 25 MB eml, 50 MB msg.
fromYesSource format.

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesThe format you want back. It has to be different from what you put in.json
fileYesThe data file to convert (max 5MB).
fromNoSource format. Optional — inferred from the file extension when omitted. 'ndjson' (aka jsonl) is newline-delimited JSON; 'tsv' is tab-separated values.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesWhat 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.pdf
fileYesMax 25 MB. Routed by filename extension first; the 'from' field is the fallback for synthetic/extensionless names.
fromYesWhat 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

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesThe 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
fileYesThe ebook itself. Bytes are sniffed and must match 'from' (mismatch = 400). DRM-protected books always fail.
fromYesSource ebook format — REQUIRED.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesThe format you want back. Apple Lossless (alac) is delivered as a .m4a file.
fileYesThe file to convert. We read its current format from the file itself, so you only need to say what you want back.
fromNoLeave blank and we read the format from the file itself. Only set it if the file has no name or an odd one.
gif_fpsNoFrames 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_widthNoHow 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

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesMust differ from the detected source — gpx→gpx is a 400; format-version upgrades happen implicitly on read.
fileYesA .gpx, .kml, .kmz or .geojson file.
fromNoOptional. Detected from content; declare it only when the upload has no meaningful filename.
strictNoStop 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

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesInput files (JPG, PNG)

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes'jsonl' is accepted as an alias for ndjson. One side of the pair must be parquet — table→table pairs belong to convert_data.
fileYesA .parquet file, or a .csv/.tsv/.json/.ndjson/.xlsx table to turn into Parquet.
fromNoOptional but recommended when uploading csv/tsv/json/ndjson: those are indistinguishable by content, so declare which one it is.
sheetNoWhich worksheet to read. Leave it blank for the first one.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description states a specific verb and resource: 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.

Usage Guidelines5/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesWhat 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
fileYesSQLite database file.
tableNoOptional: export only this table (must match a table in the database).
strictNoStop 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

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesWhat 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
fromYesWhat the text is now — or the encoding job to run (Base64 / URL encode and decode ride in this field).md
textYesThe text/data to convert. Field name is 'text' — not 'content'.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesThe unit you want. It must belong to the same kind of measurement as the one you have.
fromYesThe unit you have. It must belong to the kind of measurement chosen above. Data sizes are the computing kind (1 kilobyte = 1024 bytes).
valueYesThe amount to convert. Negative numbers are fine (below-zero temperatures, drops in weight).
categoryYesWhat kind of measurement this is. Pick this first — it decides which units are available.length

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe http(s) URL of the web page to render to PDF.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesThe 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
crfNoPicture 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.
fileYesMax 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.
codecNoHow 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
resolutionNoHow 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_nameNoMake 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_kbpsNoAim 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

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (DOCX, DOC)

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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

The description states a specific verb and resource: '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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFile name without the extension — the extension comes from the format above. Anything over 80 characters is shortened.data
textYesThe 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.
formatNoWhat 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

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesThe file to save — usually the previous step's output.
filenameNoOptional. The name the file gets in Drive, extension included. Leave blank to keep the name it already has.
folder_nameNoOptional. 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

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesThe file or files to email, typically the previous step's output. Several files are zipped into one attachment, so it is always one email.
noteNoOptional 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.
subjectNoSubject line of the email.Your file is ready

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPDF to sign
fieldsYesWhere 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

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description states a specific verb and resource: '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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesThe archive to open — normally the previous step's output, e.g. {{step_1.file_id}}.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName for the archive, without .zip. Leave it blank and the archive is named johns-essentials- plus today's date.
filesYesThe 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

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoThe 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.
fontNoLettering style.standard
modeNoDraw 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
textNoThe words to draw. Longer than 100 characters is trimmed.
widthNoHow many characters wide the picture is.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoWhich 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
heightNoHow tall the bars are, in pixels. The width follows automatically.
contentYesThe data to encode
showTextNoPrint the encoded digits underneath the bars, so a cashier can key them in if a scan fails.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoPrinted verbatim in the contact block — no validation, no mailto link; empty = line omitted.
phoneNoPrinted verbatim in the contact block; empty = line omitted. No formatting applied.
formatNo'pdf' (default) or 'png' (300 DPI Ghostscript raster, 1050x600). Any other value silently returns the PDF.pdf
companyNoPrinted under the name; omitted entirely when empty. Latin-1 only — CJK/emoji glyphs render as '.'.
websiteNoPrinted exactly as sent — strip 'https://' yourself if unwanted; empty = line omitted.
fullNameYesFull name printed on the card. Field name is 'fullName' — not 'name'.
jobTitleNoJob title. Field name is 'jobTitle' — not 'title'.
templateNoCard layout.modern
primaryColorNoHex color WITHOUT the leading '#'.1a1a2e
secondaryColorNoHex color WITHOUT the leading '#'.E05535

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoFree text centred at the bottom, printed verbatim ('12 June 2026' works); empty = omitted.
formatNo'pdf' (default) or 'png' (300 DPI Ghostscript raster). Any other value silently returns the PDF.pdf
templateNoKept for older calls; it does not change the certificate. Set the heading with Cert title and the look with Border style.achievement
certTitleNoCertificate heading. Field name is 'certTitle' — not 'title'.Certificate of Achievement
issuerNameNoPrinted above the signature line. Empty hides the WHOLE issuer block, issuerTitle included.
borderStyleNoUnknown values fall back to gold. This is the main visual lever — it colours border, corners, and title.gold
descriptionNoOptional body text under the title.
issuerTitleNoItalic line under the signature — rendered only when issuerName is also set.
orientationNo'landscape' (default) or 'portrait' (A4). Any value other than 'portrait' renders landscape.landscape
recipientNameYesRecipient's name (REQUIRED). Field name is 'recipientName' — not 'recipient'.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoOut-of-range values are pulled back to the nearest allowed value rather than refused.
schemeNoHow the other colours are chosen relative to the starting colour.complementary
base_colorNoA hex colour, three or six digits, with or without the leading '#'. Anything else is refused.#E05535

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesSource image (PNG, SVG, JPG — max 20MB)
backgroundNoFill 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
includeIcoNoAlso generate favicon.ico.
borderRadiusNoRounded-corner radius as a percent (0-50).

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNoOut-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.
colorsYesTwo 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.
formatNoPNG only. Any other value is refused.png
heightNoOut-of-range values are pulled back rather than refused. See the note on width about the 8 megapixel cap.
directionNoWhich 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
positionsNoWhere 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

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoA file to hash instead of typed text. If you attach one, the file wins.
textNoThe text to hash. Leave it blank when you are hashing a file instead.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoUnit to generate. Field names are 'type' + 'count' — 'paragraphs'/'words_per_paragraph' do not exist.paragraphs
countNoHow many words/sentences/paragraphs to generate.
startLoremNoStart with the classic 'Lorem ipsum dolor sit amet' opening.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of passwords to generate.
lengthNoCharacters per password.
numbersNoInclude digits 0-9. Turning all four off is the same as leaving all four on.
symbolsNoInclude symbols from !@#$%^&*()-_=+[]{}|;:,.<>? - quotes, backslash, backtick, tilde and slash are never used. Turning all four off is the same as leaving all four on.
lowercaseNoInclude small letters a-z. Turning all four off is the same as leaving all four on.
uppercaseNoInclude capital letters A-Z. Turning all four off is the same as leaving all four on.
excludeSimilarNoExclude look-alike characters (iIlL1oO0).

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoLabel text. Defaults to '<width> × <height>'.
widthNoPixels wide. >4096 clamps to 4096; 0/omitted = 640. The default label text shows the FINAL clamped size.
formatNoImage file type to save as.png
heightNoPixels tall. >4096 clamps to 4096; 0/omitted = 480.
bgColorNoBackground hex color, with or without '#'. Field name is 'bgColor' — not 'bg_color'.3B82F6
fgColorNoLabel text hex color. Field name is 'fgColor' — not 'text_color'.FFFFFF

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNoWidth and height of the square image, in pixels.
levelNoError-correction levelM
contentYesThe URL, text, or vCard data to encode

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness3/5

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

With no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesOne 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.
colorNoA 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
styleNoWhich 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
paddingNoEmpty space left around the signature, so it does not sit flush against the edge when it is stamped onto something.
fontSizeNoOut-of-range values are pulled back to the nearest allowed value rather than refused.
backgroundNo'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

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description states a specific verb and resource: 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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoOut-of-range values are pulled back to the nearest allowed value rather than refused, and the reply says so when it happened.
formatNoA 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
lengthNoHow many characters long each Nano ID is. Only used when the kind above is Nano ID.
hyphensNoTurn this off for the 32-character form with no dashes. Only applies to the two UUID kinds.
uppercaseNoReturn the letters in capitals. Nano ID and ULID have their own fixed alphabets and ignore this.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesVideo to watermark. Forces a full H.264 re-encode into MP4 (audio copied) — among the platform's slowest ops on long videos.
textYesThe 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.
opacityNoHow solid the watermark looks: 1 is fully solid, 0.3 is a faint ghost.
fontsizeNoText 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.
positionNoWhich corner of the frame the watermark sits in.bottomright

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesVideo in any FFmpeg-readable container; always comes back as H.264/AAC MP4 (yuv420p, faststart) whatever went in.
qualityNoQuality preset mapping to H.264 CRF 18/23/28. Field name is 'quality' — there is no 'crf' parameter.medium

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesVideo 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.
formatNoWhat 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

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fpsNoHow many frames to take per second of video. 1 means one frame a second.
maxNoStop after this many frames, however long the video is.
fileYesVideo to sample. Frames are always JPEGs (frame_0001.jpg…) in a ZIP — no PNG option despite the tool blurb.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description states a specific verb and resource: '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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesInput audio files (MP3, WAV, AAC, OGG, FLAC, M4A, WMA, OPUS or AIFF) — at least 2 required.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (MP4, MOV, AVI, MKV, WebM or MPG)

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoEnd time e.g. '00:01:30'. Omit to trim to the end of the file; when set it must be after start.
fileYesAudio 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.
startNoStart time e.g. '00:00:10'. Defaults to the beginning.0

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoEnd time. Omit to trim to the end of the file; when set it must be after start.
fileYesVideo to trim. Stream copy — output keeps this container/codec, and the cut starts at the keyframe at or before `start`.
startNoStart time e.g. '00:00:10'. Defaults to the beginning.0

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_deleteA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
hardNoHard-delete (only allowed on files already in trash).
file_idYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_listA
Read-only
Inspect

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo1-100; values outside this range silently fall back to 20.
folderNoFolder to list, written exactly as it is stored, closing slash included: /Tax/2026/. Leave blank for every recent file.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFolder path to create, e.g. /Clients/Acme.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_mkdirA
Idempotent
Inspect

Create a folder. Any missing parent folders along the path are auto-created. Idempotent — creating an existing folder is a no-op.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFolder path to create, e.g. /Tax/2026/.

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_moveA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes
to_pathYesDestination folder path.
new_nameNoOptional new filename.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYesThe file to move: an uploaded file id or a previous step's {{step_N.file_id}}.
to_pathYesDestination folder path, e.g. /Tax/2026. Created if missing.
new_nameNoOptional new file name, with extension.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description states a specific verb and resource: '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.

Usage Guidelines4/5

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_readA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_textNoIf true and MIME is text-like, return content as UTF-8 string instead of base64.
file_idYesFileID (UUID) from octopus.list / octopus.search.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_search_metaA
Read-only
Inspect

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesText matched against file names and tags.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description opens with a specific verb-resource 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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFilename including extension.
pathNoFolder to write into. Defaults to /agent/{session}/.
tagsNoOptional tags.
mime_typeNoOptional. Sniffed from extension if omitted.
content_textNoUTF-8 content (use for text/markdown/json). Provide exactly ONE of content_text or content_base64. Max 25 MiB.
content_base64NoBase64 content (use for binary). Decoded size max 25 MiB.

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPDF to compress
qualityNoHow 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
targetSizeNoSqueeze until the file fits this size. Overrides the preset above.
metadataOnlyNoOnly strip the hidden details - author, title, producing software - and leave every page exactly as it is.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoHow 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.
fileYesInput PDF (max 25MB)
leftNoHow 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.
rightNoHow 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.
bottomNoHow 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.
outputFilenameNoOptional custom output filename.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesThe PDF to edit. Password-protected input is rejected 400 — run pdf_unlock first.
pagesYesPages to delete e.g. '1,3,5-7'. At least one page must be left.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput spreadsheet (.xlsx, .xls, .csv, .ods)
pdfaNoSave 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
scaleNoPrint 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.
footerNoPer-page footer template. Same tokens as header.
headerNoPer-page header template. Tokens: {page}, {pages}, {sheet}, {date}, {filename}.
sheetsNoWhich sheets to convert: all, or the names or positions you want — Sales,Ledger or 0,2.all
marginsNodefault|narrow|normal|wide (Excel's inch presets); default keeps the sheet's own margins. Only applies to .xlsx input; unknown → default.default
qualityNoHow sharp the pictures and charts stay in the PDF. Leave blank for the converter's own setting.
passwordNoOpen password for the output PDF (user password).
bookmarksNoAdd PDF bookmarks, one per sheet.
fitToPageNoFit each sheet to a page. 'width' prevents column cutoff; 'one-page' squeezes each sheet onto a single page.none
gridlinesNoPrint the faint grid between cells. Leave blank to keep whatever the sheet already does.
paperSizeNoa4 (default) | letter | legal | tabloid | a3. Only applies to .xlsx input (excelize preprocess); unknown values silently become a4.a4
splitModeNoOne PDF containing every sheet, or a ZIP holding one PDF per sheet.combined
repeatRowsNoPrint titles — rows that repeat on every page. e.g. '1' or '1-3'.
orientationNoPage orientation. 'auto' picks landscape for sheets with ≥8 data columns.auto
showHeadersNoPrint the A B C column letters and 1 2 3 row numbers down the edges. Leave blank to keep the sheet's own setting.
permPasswordNoA second, different password that locks printing, copying and editing. Only takes effect if you also set an open password above.
watermarkFontNoLettering style for the watermark. Latin alphabet only. Only used when there is watermark text.Helvetica
watermarkTextNoOptional text watermark stamped on every page of the output.
watermarkColorNoColour of the watermark lettering, as #rgb or #rrggbb. Anything else becomes mid-grey. Only used when there is watermark text.#808080
watermarkScaleNoSize multiplier applied on top of the lettering size. Only used when there is watermark text.
watermarkOpacityNoHow 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.
watermarkFontSizeNoHeight of the watermark lettering in points. Only used when there is watermark text.
watermarkPositionNoWhere the watermark sits on the page. Only used when there is watermark text.c
watermarkRotationNoAngle of the watermark in whole degrees; 45 is the classic diagonal. Only used when there is watermark text.

TDQS

B3.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
pdfaNoSave 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
filesYesUp to 20 input spreadsheets
scaleNoPrint 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.
footerNoPer-page footer template. Same tokens as header.
headerNoPer-page header template. Tokens: {page}, {pages}, {sheet}, {date}, {filename}.
sheetsNoWhich sheets to convert: all, or the names or positions you want — Sales,Ledger or 0,2.all
marginsNodefault|narrow|normal|wide (Excel's inch presets); default keeps the sheet's own margins. Only applies to .xlsx input; unknown → default.default
qualityNoHow sharp the pictures and charts stay in the PDF. Leave blank for the converter's own setting.
passwordNoOpen password for the output PDF (user password).
bookmarksNoAdd PDF bookmarks, one per sheet.
fitToPageNoFit each sheet to a page. 'width' prevents column cutoff; 'one-page' squeezes each sheet onto a single page.none
gridlinesNoPrint the faint grid between cells. Leave blank to keep whatever the sheet already does.
paperSizeNoa4 (default) | letter | legal | tabloid | a3. Only applies to .xlsx input (excelize preprocess); unknown values silently become a4.a4
splitModeNoOne PDF containing every sheet, or a ZIP holding one PDF per sheet.combined
repeatRowsNoPrint titles — rows that repeat on every page. e.g. '1' or '1-3'.
orientationNoPage orientation. 'auto' picks landscape for sheets with ≥8 data columns.auto
showHeadersNoPrint the A B C column letters and 1 2 3 row numbers down the edges. Leave blank to keep the sheet's own setting.
permPasswordNoA second, different password that locks printing, copying and editing. Only takes effect if you also set an open password above.
watermarkFontNoLettering style for the watermark. Latin alphabet only. Only used when there is watermark text.Helvetica
watermarkTextNoOptional text watermark stamped on every page of the output.
watermarkColorNoColour of the watermark lettering, as #rgb or #rrggbb. Anything else becomes mid-grey. Only used when there is watermark text.#808080
watermarkScaleNoSize multiplier applied on top of the lettering size. Only used when there is watermark text.
watermarkOpacityNoHow 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.
watermarkFontSizeNoHeight of the watermark lettering in points. Only used when there is watermark text.
watermarkPositionNoWhere the watermark sits on the page. Only used when there is watermark text.c
watermarkRotationNoAngle of the watermark in whole degrees; 45 is the classic diagonal. Only used when there is watermark text.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_inspectA
Read-only
Inspect

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (XLSX, XLS, CSV, ODS)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput PDF (max 25MB). The uploaded filename must end in .pdf.
pagesYesPage range e.g. '2-5,8'
outputNameNoOptional custom output basename.

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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

The description opens with a specific verb 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.

Usage Guidelines5/5

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_infoB
Read-only
Inspect

PDF File Info — Detailed info about a PDF: size, pages, version, encryption. [category: pdf]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF)

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput PDF
modeNoWhich interactive elements to flatten. 'none' runs no flatten (useful for OCR/watermark/PDFA-only pipelines).all
pagesNoOptional page range (e.g. '1-3,5,7-9'). Only listed pages are flattened; others stay interactive.
ocrLangNoWhich language the scanned text is in.eng
ocrFirstNoRun ocrmypdf before flattening (for scanned PDFs). Requires Starter+ tier.
exportDataNoAlso 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.
outputFormatNopdfa produces a PDF/A-2b archival output. Requires Starter+ tier.pdf
preserveLinksNoKeep clickable hyperlinks after flattening (uses qpdf --flatten-annotations=print).
signatureModeNoWhat to do if the PDF has been digitally signed. Flattening destroys a signature, so by default we hand the original back untouched.preserve
watermarkFontNoExactly Helvetica, Times-Roman, or Courier (case-sensitive); anything else becomes Helvetica. Read only when watermarkText is set.Helvetica
watermarkTextNoText watermark to stamp before flattening. Leave empty to skip.
compressImagesNoDownsample images after flattening to shrink file size.
compressPresetNoHow hard to squeeze the pictures: screen 72 DPI, ebook 150 DPI, printer and prepress 300 DPI.ebook
outputFilenameNoOptional custom filename for the flattened output (without path).
watermarkColorNoHex color, #rgb or #rrggbb.#808080
watermarkScaleNoAbsolute scale factor; default 1.0. Non-numeric resets to 1.0.
watermarkOpacityNo0 = invisible, 1 = solid; default 0.3. Non-numeric resets to 0.3. Read only when watermarkText is set.
watermarkFontSizeNoPoint size, integer; non-integer input silently resets to 48. Read only when watermarkText is set.
watermarkPositionNoWhere the watermark sits on the page. Only used when there is watermark text.c
watermarkRotationNoDegrees, integer; default 45 = classic diagonal. Non-integer resets to 45. Read only when watermarkText is set.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoWhich interactive elements to flatten. 'none' runs no flatten (useful for OCR/watermark/PDFA-only pipelines).all
filesYesUp to 20 input PDFs
pagesNoOptional page range (e.g. '1-3,5,7-9'). Only listed pages are flattened; others stay interactive.
ocrLangNoWhich language the scanned text is in.eng
ocrFirstNoRun ocrmypdf before flattening (for scanned PDFs). Requires Starter+ tier.
exportDataNoAlso 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.
outputFormatNopdfa produces a PDF/A-2b archival output. Requires Starter+ tier.pdf
preserveLinksNoKeep clickable hyperlinks after flattening (uses qpdf --flatten-annotations=print).
signatureModeNoWhat to do if the PDF has been digitally signed. Flattening destroys a signature, so by default we hand the original back untouched.preserve
watermarkFontNoExactly Helvetica, Times-Roman, or Courier (case-sensitive); anything else becomes Helvetica. Read only when watermarkText is set.Helvetica
watermarkTextNoText watermark to stamp before flattening. Leave empty to skip.
compressImagesNoDownsample images after flattening to shrink file size.
compressPresetNoHow hard to squeeze the pictures: screen 72 DPI, ebook 150 DPI, printer and prepress 300 DPI.ebook
outputFilenameNoOptional custom filename for the flattened output (without path).
watermarkColorNoHex color, #rgb or #rrggbb.#808080
watermarkScaleNoAbsolute scale factor; default 1.0. Non-numeric resets to 1.0.
watermarkOpacityNo0 = invisible, 1 = solid; default 0.3. Non-numeric resets to 0.3. Read only when watermarkText is set.
watermarkFontSizeNoPoint size, integer; non-integer input silently resets to 48. Read only when watermarkText is set.
watermarkPositionNoWhere the watermark sits on the page. Only used when there is watermark text.c
watermarkRotationNoDegrees, integer; default 45 = classic diagonal. Non-integer resets to 45. Read only when watermarkText is set.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description states a specific verb and resource ('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.

Usage Guidelines4/5

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_metadataA
Read-only
Inspect

Get PDF Metadata — Read the metadata fields of a PDF: Title, Author, Subject, Keywords, Producer, Creator. [category: pdf]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF)

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF)
modeNoGrey 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
pagesNoWhich pages to convert, written as 3,7 or 1-5. Leave it blank to convert every page.
strictNoRefuse the job if any page could not be converted, rather than handing back a document with colour pages still in it.
outputNameNoOptional name for the file you get back. Leave blank and we name it for you.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesHTML file (.html or .htm, max 25MB)

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesInput files (JPG, JPEG, PNG, WEBP)
marginNoWhite 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.
fitModeNoHow each picture sits on the page.contain
pageSizeNoFit 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
autoOrientNoTurn 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.
orientationNoLeave blank to follow the page size you picked.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesInput files (PDF (exactly 2 files))

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesInput PDFs — at least 2 required.
titleNoOptional output metadata Title.
authorNoOptional output metadata Author.
subjectNoOptional output metadata Subject.
pageRangesNoLeave 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.
addBookmarksNoAdd a bookmark at each document boundary.
insertBlanksNoInsert a blank page between documents.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesScanned PDF to make searchable.
langNoThe language of the writing in the scan. The wrong language makes the searchable text gibberish.eng

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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

With no output schema, the description 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_countA
Read-only
Inspect

PDF Page Count — Get the total number of pages in a PDF. [category: pdf]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF)

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPDF up to 25MB. Password-protected input is rejected 400 — run pdf_unlock first.
colorNoHex color #rrggbb.#333333
startNoThe number printed on the first numbered page.
formatNoHow each number is written on the page.Page {page}
fontSizeNoDoes NOT clamp — anything below 6 or above 72 silently RESETS to the default 10.
positionNoWhere the number sits on the page.bc
skipLastNoSkip numbering the last page.
pageRangeNoOnly number these pages, e.g. '2-5,8'. Empty = all pages.
skipFirstNoSkip numbering the first page.
fontFamilyNoOutside the enum it silently becomes Helvetica. Latin-1 fonts — a 'format' template with CJK/Cyrillic/emoji is refused 400.Helvetica
romanNumeralsNoRender numbers as roman numerals.
outputFilenameNoOptional custom output filename.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PPTX, PPT)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput PDF (max 25MB)
passwordNoOne 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.
encryptionNoHow strongly the file is locked.aes256
outputNameNoOptional custom output filename.
permissionsNoWhat 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.
userPasswordNoOptional separate open (user) password.
ownerPasswordNoOptional separate permissions (owner) password.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF)

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF)
passthroughNoSome 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

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput PDF (max 25MB)
orderYesComplete 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.
passwordNoOptional password for encrypted PDFs.
outputNameNoOptional custom output basename.

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF)

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF)
rangesNoReverse only these pages, written as 1-3,7-10. Leave it blank to reverse the whole document.
outputNameNoOptional name for the file you get back. Leave blank and we name it for you.
reverseTargetNoWhich pages the reversal applies to when you have named a range above. Ignored when no range is given.in

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput PDF (max 25MB)
pagesNoWhich pages to turn, e.g. '1-3,5'. Leave blank to turn every page.
rotationNoHow far to turn each page, clockwise.
outputNameNoOptional custom output filename.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (RTF)

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesThe PDF to edit. Password-protected input is rejected 400 — run pdf_unlock first.
titleNoAt least one of title/author/subject/keywords is required.
authorNoWritten verbatim to Author. Empty = left unchanged — this tool cannot blank a field (use pdf_remove_metadata to clear).
subjectNoWritten verbatim to Subject. Empty = left unchanged — clearing a field is not possible here (use pdf_remove_metadata).
keywordsNoFree-text Keywords string written verbatim (commas are convention, not parsed). Empty = left unchanged, never cleared.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput PDF (max 25MB)
modeNoSplit 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
pagesNoWhich pages to keep, e.g. '1-3,5,7-9'.
chunkSizeNoHow many pages go into each output file.
outputNameNoOptional base name for the output file(s).

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesThe PDF to preview. A 1-page input returns a bare JPEG instead of a ZIP — plan for both shapes. Password-protected = 400.
qualityNoThumbnail size: small=72dpi, medium=150dpi, large=300dpi. There is no 'width' parameter.small

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput PDF
pagesNoOptional page range e.g. '1-5,10'. Empty = all pages.
engineNoTable detection engine. auto = tabula lattice → stream → libreoffice fallback.auto
formatNoxlsx/csv/tsv are file downloads; json returns structured data.xlsx
ocrLangNoThe language of the writing in the scan.eng
ocrFirstNoRun ocrmypdf before extraction (beta — scanned PDFs).
sheetModeNoHow the tables are laid out across the workbook's sheets.per-table
tableIndexesNoComma-separated 0-based indexes to keep (e.g. '0,2,3'). Empty = all tables.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesUp to 20 input PDFs
pagesNoOptional page range e.g. '1-5,10'. Empty = all pages.
engineNoTable detection engine. auto = tabula lattice → stream → libreoffice fallback.auto
formatNoxlsx/csv/tsv are file downloads; json returns structured data.xlsx
ocrLangNoThe language of the writing in the scan.eng
ocrFirstNoRun ocrmypdf before extraction (beta — scanned PDFs).
sheetModeNoHow the tables are laid out across the workbook's sheets.per-table
tableIndexesNoComma-separated 0-based indexes to keep (e.g. '0,2,3'). Empty = all tables.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_inspectA
Read-only
Inspect

PDF to Excel Inspector — Non-destructive scan of a PDF's tables before converting: per-table row/column counts, confidence flags, warnings. [category: pdf]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesThe PDF to scan (multipart field 'file', 25MB cap). Runs real extraction but returns JSON metadata only — nothing is converted.
pagesNoOptional page range
engineNoTable detection engine; invalid values fall back to auto.auto
ocrLangNoAccepted but ignored by the inspector - it never runs OCR. Run PDF OCR first, then inspect.eng
ocrFirstNoAccepted but ignored by the inspector — run pdf_ocr first, then inspect.
tableIndexesNoAccepted but ignored by the inspector - its whole job is to report every table so you can choose indexes on PDF to Excel afterwards.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
dpiNoOut-of-range values clamp silently to 30-600 — never an error. Non-numeric is ignored and stays 150.
cropNoArea crop in PDF points: 'x,y,w,h'
fileYesInput PDF
modeNosheet/filmstrip require Starter+pages
pagesNoPage range e.g. 1-3,5,7-9. Empty = all.
formatNoAliases jpeg/tif accepted; unknown values silently stay png. avif is Starter+ — Free tier gets a 402.png
presetNoA ready-made bundle of settings. Anything you set yourself wins over the preset.
maxWidthNoShrink-only width cap in pixels, aspect preserved. Leave blank for no cap — an explicit 0 clamps UP to 100 and shrinks every page.
responseNourls mode requires Starter+ and authenticationzip
sheetGapNoSpacing between the tiles, in pixels.
colorModeNomono+jpg has no 1-bit JPEG — it silently renders grayscale and sets X-Color-Mode-Adjusted. Unknown values fall back to rgb.rgb
maxHeightNoShrink-only height cap in pixels, aspect preserved. Omit for no cap — an explicit 0 clamps UP to 100 and shrinks every page.
avifQualityNoHigher keeps more detail and makes a bigger file.
jpegQualityNoHigher keeps more detail and makes a bigger file. 50 is the lowest this tool will go.
namePatternNoFilename template with {basename}/{page}/{page:03d}/{dpi}/{format}/{date} tokens
transparentNoLeave the paper see-through instead of white.
webpQualityNoHigher keeps more detail and makes a bigger file.
sheetColumnsNoHow many pages sit side by side on the contact sheet.
watermarkFontNoOutside the enum it silently becomes Helvetica. Does nothing unless watermarkText is set.Helvetica
watermarkTextNoOptional text watermark stamped on each image
watermarkTileNoNot used by this tool - a rasterised page is stamped once, where Watermark position says.
watermarkColorNoHex color, #rgb or #rrggbb.#808080
watermarkScaleNoNot used by this tool — size the stamp with Watermark font size.
backgroundColorNoWhat fills the see-through parts of the page in a format that cannot keep them.#FFFFFF
sheetBackgroundNoColour of the canvas behind the tiles, as #rgb or #rrggbb. Anything we cannot read stays white.#FFFFFF
tiffCompressionNoHow the TIFF is packed down.lzw
watermarkOpacityNo0 invisible to 1 solid; out-of-range clamps. NOT a percent — 50 renders fully opaque. Needs watermarkText.
watermarkFontSizeNoSize 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.
watermarkPositionNoWhere the stamp sits on each image.c
watermarkRotationNoInteger degrees only — a decimal like '45.5' silently resets to 45. Needs watermarkText.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
dpiNoOut-of-range values clamp silently to 30-600 — never an error. Non-numeric is ignored and stays 150.
cropNoArea crop in PDF points: 'x,y,w,h'
modeNosheet/filmstrip require Starter+pages
filesYesUp to 20 input PDFs
pagesNoPage range e.g. 1-3,5,7-9. Empty = all.
formatNoAliases jpeg/tif accepted; unknown values silently stay png. avif is Starter+ — Free tier gets a 402.png
presetNoA ready-made bundle of settings. Anything you set yourself wins over the preset.
maxWidthNoShrink-only width cap in pixels, aspect preserved. Leave blank for no cap — an explicit 0 clamps UP to 100 and shrinks every page.
sheetGapNoSpacing between the tiles, in pixels.
colorModeNomono+jpg has no 1-bit JPEG — it silently renders grayscale and sets X-Color-Mode-Adjusted. Unknown values fall back to rgb.rgb
maxHeightNoShrink-only height cap in pixels, aspect preserved. Omit for no cap — an explicit 0 clamps UP to 100 and shrinks every page.
avifQualityNoHigher keeps more detail and makes a bigger file.
jpegQualityNoHigher keeps more detail and makes a bigger file. 50 is the lowest this tool will go.
namePatternNoFilename template with {basename}/{page}/{page:03d}/{dpi}/{format}/{date} tokens
transparentNoLeave the paper see-through instead of white.
webpQualityNoHigher keeps more detail and makes a bigger file.
sheetColumnsNoHow many pages sit side by side on the contact sheet.
watermarkFontNoOutside the enum it silently becomes Helvetica. Does nothing unless watermarkText is set.Helvetica
watermarkTextNoOptional text watermark stamped on each image
watermarkTileNoNot used by this tool - a rasterised page is stamped once, where Watermark position says.
watermarkColorNoHex color, #rgb or #rrggbb.#808080
watermarkScaleNoNot used by this tool — size the stamp with Watermark font size.
backgroundColorNoWhat fills the see-through parts of the page in a format that cannot keep them.#FFFFFF
sheetBackgroundNoColour of the canvas behind the tiles, as #rgb or #rrggbb. Anything we cannot read stays white.#FFFFFF
tiffCompressionNoHow the TIFF is packed down.lzw
watermarkOpacityNo0 invisible to 1 solid; out-of-range clamps. NOT a percent — 50 renders fully opaque. Needs watermarkText.
watermarkFontSizeNoSize 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.
watermarkPositionNoWhere the stamp sits on each image.c
watermarkRotationNoInteger degrees only — a decimal like '45.5' silently resets to 45. Needs watermarkText.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description opens with a specific verb 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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF)

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (PDF)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (TXT)

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput PDF (max 25MB)
passwordYesThe PDF's current password.
outputNameNoOptional custom output filename.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput PDF (filename must end in .pdf)
modeNoWatermark type. 'image' requires the imageFile field — presence of an image alone does NOT switch modes.text
textNoThe wording stamped across each page.CONFIDENTIAL
tileNoRepeat the watermark in a tiled pattern.
colorNoColour of the lettering. Hex, #rgb or #rrggbb.#808080
pagesNoWhich pages to stamp, e.g. '1-3,5'. Empty = all pages.
scaleNoSize multiplier. With tile=true only values in (0,1] count (fraction of page) — anything else silently tiles at 0.3.
opacityNo0-1 float; non-numeric resets to 0.3, but out-of-range values reach the PDF engine and 500. NOT a percent.
fontSizeNoHeight of the lettering in points.
positionNoLong names like 'bottom-right' are NOT recognized and silently fall back to c. ml/mr work (folded to engine anchors l/r).c
rotationNoWhole degrees only — a decimal string like '45.5' silently resets to 45.
imageFileNoWatermark image — PNG, JPG, or SVG. REQUIRED when mode=image; ignored otherwise.
fontFamilyNoLettering style. Latin alphabet only — for other scripts stamp an image instead.Helvetica
outputFilenameNoOptional custom output filename.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesJPG, 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.
sizeNoHow 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.
colorNoA 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

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesJPG, PNG, WebP, BMP (max 20MB)
modelNoSegmentation model; u2net_human_seg is tuned for people. Invalid values fall back to u2net.u2net
bg_colorNoOptional solid background fill color. Default: transparent.
alpha_mattingNoRe-solves hair, fur and glass edges as a soft fade instead of a hard cut. Slower and uses more memory.
alpha_matting_erode_sizeNoWidth 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_thresholdNoHow 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_thresholdNoHow 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

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
gapNoGap between cells in px, 0-100.
filesYes2-16 images — JPG, PNG, WebP, HEIC. The multipart field name is 'files[]' (with brackets).
layoutNoA plain grid, written as columns then rows.2x2
qualityNoOutput quality; 0 or omitted = engine default.
bg_colorNo'white', 'black', 'transparent', or hex (#abc/#aabbcc). Unknown values silently become white; jpg output flattens transparency to white.white
templateNoNamed 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_modeNoOmit to auto-infer: 'template' present implies template mode, 'layout' implies grid_legacy, otherwise smart.smart
aspect_ratioNoOutput aspect ratio (smart mode).1:1
output_widthNoOlder name for the setting above. Set the longest side instead; this is only used if that one is left empty.
output_formatNo'jpeg' is accepted as an alias for jpg. png ignores 'quality' (fixed compression).jpg
output_long_edgeNoOutput long edge in px.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description opens with a specific verb 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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesJPG, 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.
contrastNoPercent -100..100; 0 = no change. Not clamped server-side — keep within range.
brightnessNoPercent -100..100; 0 = no change (unlike saturation where 100 = no change). -100 = solid black, +100 = solid white.
saturationNo0-200 scale where 100 = unchanged, 0 = grayscale, 200 = double saturation. Do NOT send 0 for 'no change'.

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesJPG, PNG, WebP, GIF, BMP, HEIC/HEIF. HEIC/HEIF input always comes back as JPG unless output_format overrides.
qualityNo1-100 (400 outside). PNG→PNG maps it to lossless compression effort — pixels unchanged; other formats re-encode lossily.
strip_exifNoStrip EXIF metadata from the output. Pass false to preserve it.
output_formatNoOptional output format; omit to keep the input format. HEIC input converts to JPG unless overridden.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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

The description states a specific verb and resource ('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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesJPG, PNG, WebP, GIF, BMP, HEIC, HEIF
strip_exifNoStrip EXIF metadata from the output.
output_formatNoWhat 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_kbYesTarget size in KB as a positive integer, e.g. 200. Field name is 'target_size_kb' — not 'target_size'.

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoLeft offset px on the DISPLAYED (EXIF-upright) image — the handler auto-orients before cropping.
yNoTop offset px on the DISPLAYED (EXIF-upright) image — the handler auto-orients before cropping.
fileYesJPG, PNG, WebP, HEIC, TIFF, BMP, or GIF. Output keeps the input format, except that a HEIC or HEIF photo comes back as a JPG.
widthYesCrop width px. Clipped at the image edge if the region overruns.
heightYesCrop height px. A region overrunning the image edge is clipped, not an error.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesJPG, 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.
filterNoFilter to apply.grayscale

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_viewerA
Read-only
Inspect

EXIF Viewer — Extract and display all EXIF metadata from a photo including camera, GPS, and settings. [category: photo]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (JPG, PNG, TIFF, HEIC)

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesJPG, PNG, WebP, BMP (max 25MB)
blur_modeNogaussian softens, pixelate mosaics, solid draws an opaque black box — solid is the only mode that survives deblurring attacks.gaussian
block_sizeNoSize of each mosaic square. 0 uses the amount chosen above; 1 is ignored, use 2 or more.
blur_radiusNoGaussian radius override. 0 = auto from blur_strength.
manual_facesNoAdvanced: 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_strengthNoPreset intensity 1-4. blur_radius/block_size overrides beat it when set; irrelevant for solid mode.
output_formatNoOptional output format; defaults to the input format.
selected_facesNoAdvanced: 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

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_detectB
Read-only
Inspect

Face Detect — Detect faces in an image and return bounding boxes. [category: photo]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput file (JPG, PNG, WebP, BMP)

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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

The description states a specific verb and resource: "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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput image (max 25MB)
actionNoRotate values have NO hyphen: 'rotate90', not 'rotate-90'. 'custom' rotates by the 'degrees' field.rotate90
degreesNoRotation degrees, -360 to 360 — only used when action=custom.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesInput format is unrestricted — anything ImageMagick reads, incl. HEIC. Max 25 MB.
formatNo'jpeg' also accepted (saved as .jpg). EXIF rotation is baked into the pixels — most target formats can't carry the tag.png

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fuzzNoPer-pixel tolerance percent, 0-20.
image1YesFirst image — JPG, PNG, WebP, BMP (max 25MB)
image2YesSecond image — JPG, PNG, WebP, BMP (max 25MB)
normalizeNoNormalize sizes before comparing.
output_formatNoFormat of the returned diff image. AE/SSIM/PSNR/RMSE scores ride X-JE-Metric-* response headers, not the body.png
lowlight_colorNoHex color for unchanged pixels.#222222
highlight_colorNoHex color for changed pixels.#ff0000

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNoOverlay 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.
opacityNoOverlay opacity 0-100.
overlayYesImage composited on top — JPG, PNG, WebP, BMP (max 20MB)
positionNoAnchor cell the overlay snaps to; x_offset/y_offset shift from THIS anchor, not from the top-left corner.mc
x_offsetNoPx shift with gravity semantics: positive pushes inward from the anchored edge (leftward from right-side anchors).
y_offsetNoPx shift with gravity semantics: positive pushes inward from the anchored edge (upward from bottom anchors).
backgroundYesBase image — JPG, PNG, WebP, BMP (max 30MB)
output_formatNoOptional output format; defaults to the background's format.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
colsNoColumns, 1-8. The rightmost column absorbs remainder px, so tile widths can differ slightly.
fileYesImage to split — JPG, PNG, WebP, or BMP (max 30 MB). Output is ALWAYS a ZIP of tiles, even for tiny grids.
rowsNoRows, 1-8. The bottom row absorbs remainder px. rows x cols tiles come back in one ZIP.
output_formatNoOptional tile format; defaults to the input format.

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesBase image — JPG, PNG, WebP, BMP (max 25MB)
fontNoA 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_textNoTop caption. At least ONE of top_text/bottom_text must be non-empty or the request is rejected.
font_sizeNoCaption 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_colorNoCaption fill — #rrggbb or #rrggbbaa hex only; invalid values silently revert to #ffffff.#ffffff
bottom_textNoBottom caption.
stroke_colorNoCaption outline hex; invalid values silently revert to #000000. Drawn at 2x stroke_width beneath the fill.#000000
stroke_widthNoOutline stroke width, 1-8.
output_formatNoDefaults to the input image's format.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesJPG, PNG, WebP, BMP, TIFF (max 25MB)
modeNoDenoise algorithm.auto
sharpenNoOptional post-denoise sharpening.none
strengthNoSTRING enum '1'-'4', not an int. Invalid values silently become '2'. Ignored when mode=smart — the analyzer overrides it.2
output_formatNoOptional output format; defaults to the input format.

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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

With no output schema, the description 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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesJPG, 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.
modeNo'max' fits within width×width and never upscales; 'canvas' resizes then pads to exact WxH with bg_color; 'percentage' scales by %.dimensions
widthNoTarget width in pixels. In 'Fit inside a box' mode this is the longest side the picture may reach.
heightNoTarget height px.
bg_colorNoColour of the padding added around the picture when it does not fill the canvas.white
percentageNoScale to this percent of the original size.
strip_metaNoStrip EXIF metadata from the output.
force_exactNoForce exact dimensions, ignoring aspect ratio.
maintain_ratioNoKeep aspect ratio (dimensions mode). Field name is 'maintain_ratio' — not 'maintain_aspect'.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesJPG, 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.
radiusNoHow 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.
cornersNo'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
backgroundNoWhat 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_unitNoWhether 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

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
blurNoShadow edge softness in px. 0 = hard-edged rectangle of a shadow.
fileYesImage to shadow — JPG, PNG, or WebP only (max 25 MB). BMP is NOT accepted here, unlike most photo tools.
angleNoWhich 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.
opacityNoShadow darkness 0-100. Affects the shadow layer only, never the image itself.
distanceNoShadow offset in px.
shadow_colorNoHex shadow color. Field name is 'shadow_color' — not 'color'.#000000
output_formatNoLeave 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

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
dpiNoString, not a number — only '72', '96', '144', '300'; anything else silently becomes '96'.96
fileYesSVG file (max 25MB)
widthNoOutput width in px. 0 (default) = render at the SVG's intrinsic size.
heightNoOutput height in px. 0 = intrinsic.
bg_colorNo'transparent', 'white', or a hex color.transparent
output_formatNojpg cannot hold transparency: without an explicit bg_color the artwork is flattened onto white, never black.png

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesJPG, PNG, WebP, BMP, TIFF (max 15MB)
outputNojson returns structured results; text returns plain text.json
binarizeNoForce 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.
languagesNoWhich 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
preprocessNoApply image preprocessing before OCR.
binarize_thresholdNoThe 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

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesHard 10 MB cap (400 above it). JPG/PNG/WebP/BMP only — no GIF/HEIC. Big images risk the 120s upscale timeout.
modelNofast (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
scaleNoUpscale factor; invalid values silently fall back to 2. With the default fast model 4x costs the same as 2x.
face_enhanceNoRun the additional face-enhancement pass.
output_formatNoOptional output format; defaults to the input format.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesJPG, 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.
textYesThe words stamped onto the photo. Required; there is no default. A leading '@' is removed.
colorNoA 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
opacityNoINTEGER percent 0-100 — a fraction like 0.5 parses as 0 (invisible watermark).
positionNoCase-sensitive ImageMagick gravity name — 'center' (lowercase) or 'top-left' are NOT recognized and silently fall back to SouthEast.SouthEast
font_sizeNoHow 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_colorNoThe 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_widthNoHow 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

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_tableA
Read-only
Inspect

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYeshttp(s) URL containing the table
outputNoHow 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_msNoHow long to wait for the page before giving up, in milliseconds (30000 = 30 seconds).
user_agentNoAdvanced: how we introduce ourselves to the site. Left blank we identify as JohnsEssentialsBot.
table_indexNoWhich 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_robotsNoBusiness 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

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_fetchA
Read-only
Inspect

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYeshttp(s) URL to fetch
timeout_msNoHow long to wait for the page before giving up, in milliseconds (30000 = 30 seconds).
user_agentNoWhat to tell the site we are. Leave blank and we identify honestly as JohnsEssentialsBot/1.0.
acknowledge_robotsNoBusiness 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

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_pageA
Read-only
Inspect

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]

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYeshttp(s) URL to scrape
modeNoReadability gives you the page's main article as clean text. Selectors gives you only the specific bits you name below.readability
selectorsNoOne CSS selector per thing you want, named: {"headline": "h1", "price": ".price"}. Needed only when you pick Selectors above.
timeout_msNoHow long to wait for the page before giving up, in milliseconds (30000 = 30 seconds).
user_agentNoAdvanced: how we introduce ourselves to the site. Left blank we identify as JohnsEssentialsBot.
acknowledge_robotsNoBusiness 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

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 10 tool updates
    • Changedemail_file4 fields changed
      • changedInput schema / properties / file / description
        Previous 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."
      • removedInput schema / properties / file / format
        Removed value: -"binary"
      • addedInput schema / properties / file / items
        Added value: +{
        +  "format": "binary",
        +  "type": "string"
        +}
      • changedInput schema / properties / file / type
        Previous value: -"string"New value: +"array"
    • Changedphoto_add_border3 fields changed
      • addedInput schema / properties / color / x-ui
        Added 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"
        +  }
        +}
      • addedInput schema / properties / size / x-ui / draw
        Added value: +{
        +  "of": "border",
        +  "role": "thickness"
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "border": {
        +    "noun": "border",
        +    "shape": "border",
        +    "title": "The border"
        +  }
        +}
    • Changedphoto_crop5 fields changed
      • addedInput schema / properties / height / x-ui / draw
        Added value: +{
        +  "of": "crop",
        +  "role": "height"
        +}
      • addedInput schema / properties / width / x-ui / draw
        Added value: +{
        +  "of": "crop",
        +  "role": "width"
        +}
      • addedInput schema / properties / x / x-ui / draw
        Added value: +{
        +  "of": "crop",
        +  "role": "left"
        +}
      • addedInput schema / properties / y / x-ui / draw
        Added value: +{
        +  "of": "crop",
        +  "role": "top"
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "crop": {
        +    "noun": "crop box",
        +    "shape": "box",
        +    "title": "Part to keep"
        +  }
        +}
    • Changedphoto_face_blur10 fields changed
      • addedInput schema / properties / block_size / x-ui / draw
        Added value: +{
        +  "from": 2,
        +  "of": "areas",
        +  "role": "block_size"
        +}
      • addedInput schema / properties / blur_mode / x-ui
        Added value: +{
        +  "draw": {
        +    "fallback": "gaussian",
        +    "looks": {
        +      "gaussian": "blur",
        +      "pixelate": "pixelate",
        +      "solid": "fill"
        +    },
        +    "of": "areas",
        +    "role": "look"
        +  }
        +}
      • addedInput schema / properties / blur_radius / x-ui / draw
        Added value: +{
        +  "from": 1,
        +  "of": "areas",
        +  "role": "blur_radius"
        +}
      • addedInput schema / properties / blur_strength / x-ui
        Added value: +{
        +  "draw": {
        +    "block": [
        +      4,
        +      6,
        +      10,
        +      15
        +    ],
        +    "blur": [
        +      8,
        +      16,
        +      28,
        +      42
        +    ],
        +    "of": "areas",
        +    "role": "strength"
        +  }
        +}
      • changedInput schema / properties / manual_faces / description
        Previous 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."
      • addedInput schema / properties / manual_faces / x-ui / draw
        Added value: +{
        +  "of": "areas",
        +  "role": "list"
        +}
      • changedInput schema / properties / selected_faces / description
        Previous 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."
      • addedInput schema / properties / selected_faces / x-show-when
        Added value: +{
        +  "blur_mode": [
        +    "__never"
        +  ]
        +}
      • addedInput schema / properties / selected_faces / x-ui
        Added value: +{
        +  "builder_omits": true
        +}
      • addedInput schema / x-draw
        Added 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"
        +  }
        +}
    • Changedphoto_image_overlay6 fields changed
      • addedInput schema / properties / opacity / x-ui / draw
        Added value: +{
        +  "max": 100,
        +  "of": "overlay",
        +  "role": "opacity"
        +}
      • addedInput schema / properties / position / x-ui / draw
        Added value: +{
        +  "cells": {
        +    "bc": "bc",
        +    "bl": "bl",
        +    "br": "br",
        +    "mc": "mc",
        +    "ml": "ml",
        +    "mr": "mr",
        +    "tc": "tc",
        +    "tl": "tl",
        +    "tr": "tr"
        +  },
        +  "of": "overlay",
        +  "role": "anchor"
        +}
      • addedInput schema / properties / scale / x-ui / draw
        Added value: +{
        +  "measure": "percent-own",
        +  "of": "overlay",
        +  "role": "size"
        +}
      • addedInput schema / properties / x_offset / x-ui / draw
        Added value: +{
        +  "from": "inward",
        +  "of": "overlay",
        +  "role": "offset_x"
        +}
      • addedInput schema / properties / y_offset / x-ui / draw
        Added value: +{
        +  "from": "inward",
        +  "of": "overlay",
        +  "role": "offset_y"
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "overlay": {
        +    "image": "overlay",
        +    "noun": "overlay",
        +    "on": "background",
        +    "shape": "stamp",
        +    "title": "Where the overlay goes"
        +  }
        +}
    • Changedphoto_image_splitter3 fields changed
      • addedInput schema / properties / cols / x-ui / draw
        Added value: +{
        +  "of": "grid",
        +  "role": "cols"
        +}
      • addedInput schema / properties / rows / x-ui
        Added value: +{
        +  "draw": {
        +    "of": "grid",
        +    "role": "rows"
        +  }
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "grid": {
        +    "noun": "grid",
        +    "shape": "grid",
        +    "title": "Where it is cut"
        +  }
        +}
    • Changedphoto_meme_generator9 fields changed
      • addedInput schema / properties / bottom_text / x-ui / draw
        Added value: +{
        +  "of": "captions",
        +  "role": "caption_bottom"
        +}
      • changedInput schema / properties / font / description
        Previous 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."
      • addedInput schema / properties / font / x-ui
        Added value: +{
        +  "draw": {
        +    "faces": {
        +      "Arial-Bold": "liberation-sans-bold",
        +      "DejaVu-Sans-Bold": "dejavu-sans-bold",
        +      "Impact": "anton"
        +    },
        +    "fallback": "Impact",
        +    "of": "captions",
        +    "role": "font"
        +  }
        +}
      • addedInput schema / properties / font_color / x-ui
        Added value: +{
        +  "draw": {
        +    "of": "captions",
        +    "role": "color"
        +  }
        +}
      • addedInput schema / properties / font_size / x-ui
        Added value: +{
        +  "draw": {
        +    "accept": {
        +      "max": 200,
        +      "min": 10
        +    },
        +    "auto": {
        +      "max": 150,
        +      "min": 20,
        +      "per": 10
        +    },
        +    "measure": "caption-px",
        +    "of": "captions",
        +    "role": "size"
        +  }
        +}
      • addedInput schema / properties / stroke_color / x-ui
        Added value: +{
        +  "draw": {
        +    "of": "captions",
        +    "role": "outline_color"
        +  }
        +}
      • addedInput schema / properties / stroke_width / x-ui
        Added value: +{
        +  "draw": {
        +    "of": "captions",
        +    "role": "outline_width"
        +  }
        +}
      • addedInput schema / properties / top_text / x-ui / draw
        Added value: +{
        +  "of": "captions",
        +  "role": "caption_top"
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "captions": {
        +    "noun": "caption",
        +    "shape": "captions",
        +    "title": "Captions on the picture"
        +  }
        +}
    • Changedphoto_rounded_corners5 fields changed
      • addedInput schema / properties / background / x-ui
        Added 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"
        +  }
        +}
      • addedInput schema / properties / corners / x-ui
        Added value: +{
        +  "draw": {
        +    "of": "corners",
        +    "role": "which"
        +  }
        +}
      • addedInput schema / properties / radius / x-ui / draw
        Added value: +{
        +  "of": "corners",
        +  "role": "radius"
        +}
      • addedInput schema / properties / radius_unit / x-ui / draw
        Added value: +{
        +  "of": "corners",
        +  "role": "radius_unit"
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "corners": {
        +    "noun": "corners",
        +    "shape": "corners",
        +    "title": "The corners"
        +  }
        +}
    • Changedphoto_shadow_adder9 fields changed
      • changedInput schema / properties / angle / default
        Previous value: -315New value: +45
      • changedInput schema / properties / angle / description
        Previous 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."
      • addedInput schema / properties / angle / x-ui / draw
        Added value: +{
        +  "of": "shadow",
        +  "role": "angle"
        +}
      • addedInput schema / properties / blur / x-ui / draw
        Added value: +{
        +  "of": "shadow",
        +  "role": "blur"
        +}
      • addedInput schema / properties / distance / x-ui / draw
        Added value: +{
        +  "of": "shadow",
        +  "role": "distance"
        +}
      • addedInput schema / properties / opacity / x-ui / draw
        Added value: +{
        +  "max": 100,
        +  "of": "shadow",
        +  "role": "opacity"
        +}
      • addedInput schema / properties / output_format / x-ui / draw
        Added value: +{
        +  "of": "shadow",
        +  "role": "format",
        +  "see_through": [
        +    "png"
        +  ]
        +}
      • addedInput schema / properties / shadow_color / x-ui
        Added 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"
        +  }
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "shadow": {
        +    "noun": "shadow",
        +    "shape": "shadow",
        +    "title": "The shadow"
        +  }
        +}
    • Changedphoto_watermark8 fields changed
      • addedInput schema / properties / color / x-ui
        Added 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"
        +  }
        +}
      • addedInput schema / properties / font_size / x-ui / draw
        Added value: +{
        +  "leading_number": true,
        +  "measure": "font-px",
        +  "of": "mark",
        +  "out_of_range": "default",
        +  "role": "size"
        +}
      • addedInput schema / properties / opacity / x-ui / draw
        Added value: +{
        +  "leading_number": true,
        +  "max": 100,
        +  "of": "mark",
        +  "role": "opacity"
        +}
      • addedInput schema / properties / position / x-ui / draw
        Added value: +{
        +  "cells": {
        +    "Center": "mc",
        +    "East": "mr",
        +    "North": "tc",
        +    "NorthEast": "tr",
        +    "NorthWest": "tl",
        +    "South": "bc",
        +    "SouthEast": "br",
        +    "SouthWest": "bl",
        +    "West": "ml"
        +  },
        +  "of": "mark",
        +  "role": "anchor"
        +}
      • addedInput schema / properties / stroke_color / x-ui / draw
        Added 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"
        +}
      • addedInput schema / properties / stroke_width / x-ui
        Added value: +{
        +  "draw": {
        +    "auto": {
        +      "max": 8,
        +      "min": 1,
        +      "per": 18
        +    },
        +    "leading_number": true,
        +    "max": 20,
        +    "of": "mark",
        +    "role": "outline_width"
        +  }
        +}
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "draw": {
        +    "face": "noto-sans-condensed",
        +    "of": "mark",
        +    "role": "text"
        +  }
        +}
      • addedInput schema / x-draw
        Added value: +{
        +  "mark": {
        +    "noun": "watermark",
        +    "shape": "stamp",
        +    "title": "Watermark on the photo"
        +  }
        +}
  2. 16 tool updates
    • Changedpdf_delete_pages3 fields changed
      • changedInput schema / properties / pages / description
        Previous 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."
      • addedInput schema / properties / pages / title
        Added value: +"Pages to delete"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {
        +    "leave_one": true
        +  }
        +}
    • Changedpdf_extract_pages2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to extract"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_flatten3 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to flatten"
      • addedInput schema / properties / pages / x-ui / no_recall
        Added value: +true
      • addedInput schema / properties / pages / x-ui / page_select
        Added value: +{}
    • Changedpdf_flatten_batch3 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to flatten"
      • addedInput schema / properties / pages / x-ui / no_recall
        Added value: +true
      • addedInput schema / properties / pages / x-ui / page_select
        Added value: +{}
    • Changedpdf_grayscale2 fields changed
      • changedInput schema / properties / pages / title
        Previous value: -"Only these pages"New value: +"Pages to convert"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_header_footer2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to add the header and footer to"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_merge1 field changed
      • addedInput schema / properties / pageRanges / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {
        +    "per_file": true
        +  }
        +}
    • Changedpdf_page_numbers2 fields changed
      • addedInput schema / properties / pageRange / title
        Added value: +"Pages to number"
      • addedInput schema / properties / pageRange / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_rotate2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to rotate"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_split2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to keep"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {
        +    "no_all": true
        +  }
        +}
    • Changedpdf_to_excel2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to read"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_to_excel_batch2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to read"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_to_excel_inspect3 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to read"
      • addedInput schema / properties / pages / x-ui / no_recall
        Added value: +true
      • addedInput schema / properties / pages / x-ui / page_select
        Added value: +{}
    • Changedpdf_to_images2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to convert"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_to_images_batch2 fields changed
      • addedInput schema / properties / pages / title
        Added value: +"Pages to convert"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
    • Changedpdf_watermark3 fields changed
      • changedInput schema / properties / pages / description
        Previous 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."
      • addedInput schema / properties / pages / title
        Added value: +"Pages to stamp"
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "no_recall": true,
        +  "page_select": {}
        +}
  3. 8 tool updates
    • Changedanalyze_file_diff2 fields changed
      • changedInput schema / properties / text_a / x-ui / unset_label
        Previous value: -"Uses the original file instead"New value: +"Leave both texts empty to compare two files"
      • changedInput schema / properties / text_b / x-ui / unset_label
        Previous value: -"Uses the updated file instead"New value: +"Leave both texts empty to compare two files"
    • Changedpdf_excel_to_pdf3 fields changed
      • changedInput schema / properties / footer / x-ui / unset_label
        Previous value: -"No footer"New value: +"Sheet's own footer"
      • changedInput schema / properties / header / x-ui / unset_label
        Previous value: -"No header"New value: +"Sheet's own header"
      • changedInput schema / properties / repeatRows / x-ui / unset_label
        Previous value: -"No rows repeated"New value: +"Sheet's own print titles"
    • Changedpdf_excel_to_pdf_batch3 fields changed
      • changedInput schema / properties / footer / x-ui / unset_label
        Previous value: -"No footer"New value: +"Sheet's own footer"
      • changedInput schema / properties / header / x-ui / unset_label
        Previous value: -"No header"New value: +"Sheet's own header"
      • changedInput schema / properties / repeatRows / x-ui / unset_label
        Previous value: -"No rows repeated"New value: +"Sheet's own print titles"
    • Changedpdf_merge3 fields changed
      • changedInput schema / properties / author / x-ui / unset_label
        Previous value: -"Left out"New value: +"Kept from the first file"
      • changedInput schema / properties / subject / x-ui / unset_label
        Previous value: -"Left out"New value: +"Kept from the first file"
      • changedInput schema / properties / title / x-ui / unset_label
        Previous value: -"Left out"New value: +"Kept from the first file"
    • Changedpdf_protect2 fields changed
      • changedInput schema / properties / ownerPassword / x-ui / unset_label
        Previous value: -"Same as the open password"New value: +"Same as the open password (random if you limit permissions)"
      • changedInput schema / properties / userPassword / x-ui / unset_label
        Previous value: -"No password to open it"New value: +"Same as Password above"
    • Changedpdf_to_images1 field changed
      • removedInput schema / properties / namePattern / x-ui
        Removed value: -{
        -  "unset_label": "page_0001, page_0002, …"
        -}
    • Changedpdf_to_images_batch1 field changed
      • removedInput schema / properties / namePattern / x-ui
        Removed value: -{
        -  "unset_label": "page_0001, page_0002, …"
        -}
    • Changedphoto_meme_generator2 fields changed
      • changedInput schema / properties / bottom_text / x-ui / unset_label
        Previous value: -"No caption at the bottom"New value: +"None, as long as the top caption is set"
      • changedInput schema / properties / top_text / x-ui / unset_label
        Previous value: -"No caption at the top"New value: +"None, as long as the bottom caption is set"
  4. 5 tool updates
    • Changedmedia_trim_audio1 field changed
      • addedInput schema / properties / start / x-ui
        Added value: +{
        +  "pair_joint": "to",
        +  "pair_label": "Part to keep",
        +  "pair_with": "end"
        +}
    • Changedmedia_trim_video1 field changed
      • addedInput schema / properties / start / x-ui
        Added value: +{
        +  "pair_joint": "to",
        +  "pair_label": "Part to keep",
        +  "pair_with": "end"
        +}
    • Changedphoto_crop1 field changed
      • addedInput schema / properties / x / x-ui / pair_joint
        Added value: +","
    • Changedphoto_image_overlay3 fields changed
      • addedInput schema / properties / x_offset / x-ui / pair_joint
        Added value: +","
      • addedInput schema / properties / x_offset / x-ui / pair_label
        Added value: +"Nudge from the anchor"
      • addedInput schema / properties / x_offset / x-ui / pair_with
        Added value: +"y_offset"
    • Changedphoto_image_splitter1 field changed
      • addedInput schema / properties / cols / x-ui
        Added value: +{
        +  "pair_label": "Grid",
        +  "pair_with": "rows"
        +}
  5. 6 tool updates
    • Changedgenerate_placeholder_image2 fields changed
      • addedInput schema / properties / width / x-ui / pair_label
        Added value: +"Size"
      • addedInput schema / properties / width / x-ui / pair_with
        Added value: +"height"
    • Changedpdf_to_images2 fields changed
      • addedInput schema / properties / maxWidth / x-ui / pair_label
        Added value: +"Fit inside"
      • addedInput schema / properties / maxWidth / x-ui / pair_with
        Added value: +"maxHeight"
    • Changedpdf_to_images_batch2 fields changed
      • addedInput schema / properties / maxWidth / x-ui / pair_label
        Added value: +"Fit inside"
      • addedInput schema / properties / maxWidth / x-ui / pair_with
        Added value: +"maxHeight"
    • Changedphoto_crop4 fields changed
      • addedInput schema / properties / width / x-ui / pair_label
        Added value: +"Size"
      • addedInput schema / properties / width / x-ui / pair_with
        Added value: +"height"
      • addedInput schema / properties / x / x-ui / pair_label
        Added value: +"Top-left corner"
      • addedInput schema / properties / x / x-ui / pair_with
        Added value: +"y"
    • Changedphoto_resize2 fields changed
      • addedInput schema / properties / width / x-ui / pair_label
        Added value: +"Size"
      • addedInput schema / properties / width / x-ui / pair_with
        Added value: +"height"
    • Changedphoto_svg_to_png2 fields changed
      • addedInput schema / properties / width / x-ui / pair_label
        Added value: +"Size"
      • addedInput schema / properties / width / x-ui / pair_with
        Added value: +"height"
  6. 11 tool updates
    • Changedanalyze_file_diff2 fields changed
      • addedInput schema / properties / text_a / x-ui / multiline
        Added value: +true
      • addedInput schema / properties / text_b / x-ui / multiline
        Added value: +true
    • Changedanalyze_grammar_check1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "multiline": true
        +}
    • Changedanalyze_hash1 field changed
      • addedInput schema / properties / text / x-ui / multiline
        Added value: +true
    • Changedanalyze_json_xml_validator1 field changed
      • addedInput schema / properties / text / x-ui / multiline
        Added value: +true
    • Changedanalyze_link_extractor1 field changed
      • addedInput schema / properties / text / x-ui / multiline
        Added value: +true
    • Changedanalyze_readability1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "multiline": true
        +}
    • Changedanalyze_word_count1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "multiline": true
        +}
    • Changedanalyze_word_frequency1 field changed
      • addedInput schema / properties / text / x-ui / multiline
        Added value: +true
    • Changedconvert_text1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "multiline": true
        +}
    • Changeddata_to_file1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "multiline": true
        +}
    • Changedgenerate_hash1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "multiline": true
        +}
  7. 33 tool updates
    • Changedanalyze_file_diff2 fields changed
      • addedInput schema / properties / text_a / x-ui
        Added value: +{
        +  "unset_label": "Uses the original file instead"
        +}
      • addedInput schema / properties / text_b / x-ui
        Added value: +{
        +  "unset_label": "Uses the updated file instead"
        +}
    • Changedanalyze_hash1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "unset_label": "Uses the attached file instead"
        +}
    • Changedanalyze_json_xml_validator1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "unset_label": "Uses the attached file instead"
        +}
    • Changedanalyze_link_extractor1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "unset_label": "Uses the attached file instead"
        +}
    • Changedanalyze_word_frequency2 fields changed
      • addedInput schema / properties / exclude / x-ui
        Added value: +{
        +  "unset_label": "No extra words left out"
        +}
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "unset_label": "Uses the attached file instead"
        +}
    • Changedconvert_sqlite1 field changed
      • addedInput schema / properties / table / x-ui
        Added value: +{
        +  "unset_label": "All tables"
        +}
    • Changedconvert_video1 field changed
      • addedInput schema / properties / bitrate_kbps / x-ui / unset_label
        Added value: +"Chosen automatically"
    • Changedemail_file1 field changed
      • addedInput schema / properties / note / x-ui
        Added value: +{
        +  "unset_label": "No note"
        +}
    • Changedgenerate_ascii_art1 field changed
      • addedInput schema / properties / text / x-ui
        Added value: +{
        +  "unset_label": "The picture is converted instead"
        +}
    • Changedgenerate_business_card1 field changed
      • addedInput schema / properties / jobTitle / x-ui
        Added value: +{
        +  "unset_label": "Left off the card"
        +}
    • Changedgenerate_certificate3 fields changed
      • addedInput schema / properties / description / x-ui
        Added value: +{
        +  "unset_label": "Left off the certificate"
        +}
      • addedInput schema / properties / issuerName / x-ui
        Added value: +{
        +  "unset_label": "Left off the certificate"
        +}
      • addedInput schema / properties / issuerTitle / x-ui
        Added value: +{
        +  "unset_label": "Left off the certificate"
        +}
    • Changedgenerate_gradient1 field changed
      • addedInput schema / properties / positions / x-ui / unset_label
        Added value: +"Spaced evenly"
    • Changedoctopus_move_file1 field changed
      • addedInput schema / properties / new_name / x-ui
        Added value: +{
        +  "unset_label": "Keeps its name"
        +}
    • Changedpdf_compress1 field changed
      • addedInput schema / properties / targetSize / x-ui / unset_label
        Added value: +"No size target: Quality decides"
    • Changedpdf_crop1 field changed
      • addedInput schema / properties / outputFilename / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
    • Changedpdf_excel_to_pdf6 fields changed
      • addedInput schema / properties / footer / x-ui
        Added value: +{
        +  "unset_label": "No footer"
        +}
      • addedInput schema / properties / header / x-ui
        Added value: +{
        +  "unset_label": "No header"
        +}
      • addedInput schema / properties / password / x-ui
        Added value: +{
        +  "unset_label": "No password"
        +}
      • addedInput schema / properties / permPassword / x-ui
        Added value: +{
        +  "unset_label": "Same as the open password"
        +}
      • addedInput schema / properties / repeatRows / x-ui
        Added value: +{
        +  "unset_label": "No rows repeated"
        +}
      • addedInput schema / properties / watermarkText / x-ui
        Added value: +{
        +  "unset_label": "No watermark"
        +}
    • Changedpdf_excel_to_pdf_batch6 fields changed
      • addedInput schema / properties / footer / x-ui
        Added value: +{
        +  "unset_label": "No footer"
        +}
      • addedInput schema / properties / header / x-ui
        Added value: +{
        +  "unset_label": "No header"
        +}
      • addedInput schema / properties / password / x-ui
        Added value: +{
        +  "unset_label": "No password"
        +}
      • addedInput schema / properties / permPassword / x-ui
        Added value: +{
        +  "unset_label": "Same as the open password"
        +}
      • addedInput schema / properties / repeatRows / x-ui
        Added value: +{
        +  "unset_label": "No rows repeated"
        +}
      • addedInput schema / properties / watermarkText / x-ui
        Added value: +{
        +  "unset_label": "No watermark"
        +}
    • Changedpdf_extract_pages1 field changed
      • addedInput schema / properties / outputName / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
    • Changedpdf_flatten2 fields changed
      • addedInput schema / properties / outputFilename / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "unset_label": "All pages"
        +}
    • Changedpdf_flatten_batch2 fields changed
      • addedInput schema / properties / outputFilename / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "unset_label": "All pages"
        +}
    • Changedpdf_header_footer3 fields changed
      • addedInput schema / properties / footer / x-ui
        Added value: +{
        +  "unset_label": "No footer text"
        +}
      • addedInput schema / properties / header / x-ui
        Added value: +{
        +  "unset_label": "No header text"
        +}
      • addedInput schema / properties / outputFilename / x-ui
        Added value: +{
        +  "unset_label": "Keeps your file's name"
        +}
    • Changedpdf_merge3 fields changed
      • addedInput schema / properties / author / x-ui
        Added value: +{
        +  "unset_label": "Left out"
        +}
      • addedInput schema / properties / subject / x-ui
        Added value: +{
        +  "unset_label": "Left out"
        +}
      • addedInput schema / properties / title / x-ui
        Added value: +{
        +  "unset_label": "Left out"
        +}
    • Changedpdf_protect3 fields changed
      • addedInput schema / properties / outputName / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
      • addedInput schema / properties / ownerPassword / x-ui
        Added value: +{
        +  "unset_label": "Same as the open password"
        +}
      • addedInput schema / properties / userPassword / x-ui
        Added value: +{
        +  "unset_label": "No password to open it"
        +}
    • Changedpdf_reorder2 fields changed
      • addedInput schema / properties / outputName / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
      • addedInput schema / properties / password / x-ui
        Added value: +{
        +  "unset_label": "Only needed for a locked PDF"
        +}
    • Changedpdf_set_metadata1 field changed
      • addedInput schema / properties / title / x-ui
        Added value: +{
        +  "unset_label": "Keeps the current title"
        +}
    • Changedpdf_to_excel_inspect2 fields changed
      • addedInput schema / properties / pages / x-ui
        Added value: +{
        +  "unset_label": "All pages"
        +}
      • addedInput schema / properties / tableIndexes / x-ui
        Added value: +{
        +  "unset_label": "All tables"
        +}
    • Changedpdf_to_images3 fields changed
      • addedInput schema / properties / crop / x-ui
        Added value: +{
        +  "unset_label": "No cropping"
        +}
      • addedInput schema / properties / namePattern / x-ui
        Added value: +{
        +  "unset_label": "page_0001, page_0002, …"
        +}
      • addedInput schema / properties / watermarkText / x-ui
        Added value: +{
        +  "unset_label": "No watermark"
        +}
    • Changedpdf_to_images_batch3 fields changed
      • addedInput schema / properties / crop / x-ui
        Added value: +{
        +  "unset_label": "No cropping"
        +}
      • addedInput schema / properties / namePattern / x-ui
        Added value: +{
        +  "unset_label": "page_0001, page_0002, …"
        +}
      • addedInput schema / properties / watermarkText / x-ui
        Added value: +{
        +  "unset_label": "No watermark"
        +}
    • Changedpdf_unlock1 field changed
      • addedInput schema / properties / outputName / x-ui
        Added value: +{
        +  "unset_label": "Named after your file"
        +}
    • Changedphoto_bg_remover1 field changed
      • addedInput schema / properties / bg_color / x-ui
        Added value: +{
        +  "unset_label": "Transparent"
        +}
    • Changedphoto_face_blur1 field changed
      • addedInput schema / properties / manual_faces / x-ui
        Added value: +{
        +  "unset_label": "Only the faces it finds"
        +}
    • Changedphoto_meme_generator2 fields changed
      • addedInput schema / properties / bottom_text / x-ui
        Added value: +{
        +  "unset_label": "No caption at the bottom"
        +}
      • addedInput schema / properties / top_text / x-ui
        Added value: +{
        +  "unset_label": "No caption at the top"
        +}
    • Changedphoto_watermark1 field changed
      • addedInput schema / properties / stroke_color / x-ui
        Added value: +{
        +  "unset_label": "Picked to stand out from the text"
        +}
  8. 6 tool updates
    • Changedanalyze_audio1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"Input file (MP3, WAV, AAC, FLAC, OGG)"New value: +"Input file (MP3, WAV, AAC, OGG, FLAC, M4A, WMA, OPUS or AIFF)"
    • Changedanalyze_video1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"Input file (MP4, MOV, AVI, MKV, WebM)"New value: +"Input file (MP4, MOV, AVI, MKV, WebM, WMV, FLV, 3GP or MPG)"
    • Changedmedia_extract_audio1 field changed
      • changedInput schema / properties / file / description
        Previous 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."
    • Changedmedia_merge_audio1 field changed
      • changedInput schema / properties / files / description
        Previous 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."
    • Changedmedia_mute_video1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"Input file (MP4, MOV, AVI, MKV)"New value: +"Input file (MP4, MOV, AVI, MKV, WebM or MPG)"
    • Changedmedia_trim_audio1 field changed
      • changedInput schema / properties / file / description
        Previous 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."
  9. 17 tool updates
    • Changedanalyze_file_diff3 fields changed
      • addedInput schema / properties / file_a / title
        Added value: +"Original file"
      • addedInput schema / properties / file_b / title
        Added value: +"Updated file"
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file_a",
        +    "file_b"
        +  ],
        +  [
        +    "text_a",
        +    "text_b"
        +  ]
        +]
    • Changedanalyze_hash1 field changed
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changedanalyze_json_xml_validator2 fields changed
      • addedInput schema / x-passes-no-file
        Added value: +true
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changedanalyze_link_extractor1 field changed
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changedanalyze_readability1 field changed
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changedanalyze_word_count1 field changed
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changedanalyze_word_frequency1 field changed
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changeddrive_upload1 field changed
      • addedInput schema / x-passes-no-file
        Added value: +true
    • Changedemail_file1 field changed
      • addedInput schema / x-passes-no-file
        Added value: +true
    • Changedgenerate_hash1 field changed
      • addedInput schema / x-require-one-of
        Added value: +[
        +  [
        +    "file"
        +  ],
        +  [
        +    "text"
        +  ]
        +]
    • Changedoctopus_make_folder1 field changed
      • addedInput schema / x-passes-no-file
        Added value: +true
    • Changedphoto_color_adjuster1 field changed
      • changedInput schema / properties / file / description
        Previous 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."
    • Changedphoto_crop1 field changed
      • changedInput schema / properties / file / description
        Previous 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."
    • Changedphoto_editor1 field changed
      • changedInput schema / properties / file / description
        Previous 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."
    • Changedphoto_face_detect1 field changed
      • changedInput schema / properties / file / description
        Previous value: -"Input file (JPG, PNG)"New value: +"Input file (JPG, PNG, WebP, BMP)"
    • Changedphoto_resize1 field changed
      • changedInput schema / properties / file / description
        Previous 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."
    • Changedphoto_watermark1 field changed
      • changedInput schema / properties / file / description
        Previous 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."
  10. 13 tool updates
    • Changedgenerate_ascii_art2 fields changed
      • changedInput schema / properties / file / description
        Previous 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."
      • removedInput schema / properties / file / x-show-when
        Removed value: -{
        -  "mode": [
        -    "image"
        -  ]
        -}
    • Changedgenerate_gradient1 field changed
      • changedInput schema / properties / positions / description
        Previous 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."
    • Changedgenerate_signature3 fields changed
      • changedInput schema / properties / background / description
        Previous 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."
      • changedInput schema / properties / color / description
        Previous 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."
      • changedInput schema / properties / style / description
        Previous 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."
    • Changedmedia_add_watermark1 field changed
      • changedInput schema / properties / text / description
        Previous 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."
    • Changedpdf_watermark1 field changed
      • addedInput schema / properties / imageFile / x-show-when
        Added value: +{
        +  "mode": [
        +    "image"
        +  ]
        +}
    • Changedphoto_collage2 fields changed
      • changedInput schema / properties / template / description
        Previous 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."
      • changedInput schema / properties / template / x-ui / unset_label
        Previous value: -"No template"New value: +"Choose a template"
    • Changedphoto_compress1 field changed
      • changedInput schema / properties / output_format / x-ui / unset_label
        Previous value: -"Keeps input format"New value: +"Keeps input format (HEIC becomes JPG)"
    • Changedphoto_compress_to_size1 field changed
      • changedInput schema / properties / output_format / x-ui / unset_label
        Previous value: -"Keeps input format"New value: +"Keeps input format (HEIC becomes JPG)"
    • Changedphoto_image_overlay1 field changed
      • changedInput schema / properties / scale / description
        Previous 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."
    • Changedphoto_image_splitter3 fields changed
      • addedInput schema / properties / cols / title
        Added value: +"Columns"
      • removedInput schema / properties / cols / x-ui
        Removed value: -{
        -  "unit": "columns"
        -}
      • removedInput schema / properties / rows / x-ui
        Removed value: -{
        -  "unit": "rows"
        -}
    • Changedphoto_rounded_corners2 fields changed
      • changedInput schema / properties / background / description
        Previous 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."
      • addedInput schema / properties / radius / x-ui
        Added value: +{
        +  "unit_from": {
        +    "by_value": {
        +      "percent": {
        +        "maximum": 50,
        +        "unit": "%"
        +      },
        +      "px": {
        +        "maximum": 5000,
        +        "unit": "px"
        +      }
        +    },
        +    "param": "radius_unit"
        +  }
        +}
    • Changedphoto_to_text1 field changed
      • changedInput schema / properties / languages / description
        Previous 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."
    • Changedphoto_watermark1 field changed
      • changedInput schema / properties / text / description
        Previous 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."
  11. 24 tool updates
    • Changedanalyze_json_xml_validator2 fields changed
      • addedInput schema / properties / file
        Added 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"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "text"
        -]New value: +[]
    • Changedconvert_data1 field changed
      • addedInput schema / properties / from / x-ui
        Added value: +{
        +  "unset_label": "Read from file"
        +}
    • Changedconvert_file1 field changed
      • addedInput schema / properties / from / x-ui
        Added value: +{
        +  "unset_label": "Read from file"
        +}
    • Changedconvert_geo1 field changed
      • addedInput schema / properties / from / x-ui
        Added value: +{
        +  "unset_label": "Read from file"
        +}
    • Changedconvert_parquet1 field changed
      • addedInput schema / properties / from / x-ui
        Added value: +{
        +  "unset_label": "Read from file"
        +}
    • Changedconvert_video1 field changed
      • addedInput schema / properties / preset_name / x-ui / unset_label
        Added value: +"No preset"
    • Changedpdf_excel_to_pdf3 fields changed
      • addedInput schema / properties / gridlines / x-ui / unset_label
        Added value: +"Sheet's own setting"
      • addedInput schema / properties / quality / x-ui / unset_label
        Added value: +"Converter's setting"
      • addedInput schema / properties / showHeaders / x-ui / unset_label
        Added value: +"Sheet's own setting"
    • Changedpdf_excel_to_pdf_batch3 fields changed
      • addedInput schema / properties / gridlines / x-ui / unset_label
        Added value: +"Sheet's own setting"
      • addedInput schema / properties / quality / x-ui / unset_label
        Added value: +"Converter's setting"
      • addedInput schema / properties / showHeaders / x-ui / unset_label
        Added value: +"Sheet's own setting"
    • Changedpdf_images_to_pdf1 field changed
      • addedInput schema / properties / orientation / x-ui / unset_label
        Added value: +"Follows page size"
    • Changedpdf_to_images2 fields changed
      • addedInput schema / properties / preset / x-ui / unset_label
        Added value: +"No preset"
      • changedInput schema / properties / watermarkFontSize / description
        Previous 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."
    • Changedpdf_to_images_batch2 fields changed
      • addedInput schema / properties / preset / x-ui / unset_label
        Added value: +"No preset"
      • changedInput schema / properties / watermarkFontSize / description
        Previous 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."
    • Changedphoto_add_border2 fields changed
      • changedInput schema / properties / color / description
        Previous 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."
      • changedInput schema / properties / size / description
        Previous 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."
    • Changedphoto_collage1 field changed
      • addedInput schema / properties / template / x-ui / unset_label
        Added value: +"No template"
    • Changedphoto_compress1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_compress_to_size1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_face_blur1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_image_overlay1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps background's format"
        +}
    • Changedphoto_image_splitter1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_meme_generator1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_noise_reducer1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_rounded_corners3 fields changed
      • changedInput schema / properties / background / description
        Previous 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."
      • changedInput schema / properties / radius / description
        Previous 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."
      • removedInput schema / properties / radius / x-ui
        Removed value: -{
        -  "unit": "px"
        -}
    • Changedphoto_shadow_adder1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_upscaler1 field changed
      • addedInput schema / properties / output_format / x-ui
        Added value: +{
        +  "unset_label": "Keeps input format"
        +}
    • Changedphoto_watermark3 fields changed
      • changedInput schema / properties / color / description
        Previous 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."
      • changedInput schema / properties / font_size / description
        Previous 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."
      • changedInput schema / properties / font_size / x-ui / unit
        Previous value: -"pt"New value: +"px"
  12. 48 tool updates
    • Removedanalyze_grammar_check_batch
    • Addedanalyze_json_xml_validator
    • Changedconvert_file2 fields changed
      • addedInput schema / properties / gif_fps / x-ui
        Added value: +{
        +  "unit": "fps"
        +}
      • addedInput schema / properties / gif_width / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedconvert_video1 field changed
      • addedInput schema / properties / bitrate_kbps / x-ui
        Added value: +{
        +  "unit": "kbps"
        +}
    • Changedgenerate_ascii_art1 field changed
      • addedInput schema / properties / width / x-ui
        Added value: +{
        +  "unit": "chars"
        +}
    • Changedgenerate_barcode1 field changed
      • addedInput schema / properties / height / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Addedgenerate_color_palette
    • Changedgenerate_favicon1 field changed
      • addedInput schema / properties / borderRadius / x-ui
        Added value: +{
        +  "unit": "%"
        +}
    • Addedgenerate_gradient
    • Removedgenerate_invoice
    • Changedgenerate_password1 field changed
      • addedInput schema / properties / length / x-ui
        Added value: +{
        +  "unit": "chars"
        +}
    • Changedgenerate_placeholder_image2 fields changed
      • addedInput schema / properties / height / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / width / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedgenerate_qr_code1 field changed
      • addedInput schema / properties / size / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Addedgenerate_signature
    • Addedgenerate_uuid
    • Changedmedia_add_watermark4 fields changed
      • addedInput schema / properties / fontsize / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • removedInput schema / properties / text / default
        Removed value: -"John's Essentials"
      • changedInput schema / properties / text / description
        Previous 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."
      • changedInput schema / required
        Previous value: -[
        -  "file"
        -]New value: +[
        +  "file",
        +  "text"
        +]
    • Changedmedia_extract_frames1 field changed
      • addedInput schema / properties / fps / x-ui
        Added value: +{
        +  "unit": "fps"
        +}
    • Changedpdf_crop4 fields changed
      • addedInput schema / properties / bottom / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / left / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / right / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / top / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
    • Changedpdf_excel_to_pdf4 fields changed
      • addedInput schema / properties / scale / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / watermarkFontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / watermarkRotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
      • addedInput schema / properties / watermarkScale / x-ui
        Added value: +{
        +  "unit": "x"
        +}
    • Changedpdf_excel_to_pdf_batch4 fields changed
      • addedInput schema / properties / scale / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / watermarkFontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / watermarkRotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
      • addedInput schema / properties / watermarkScale / x-ui
        Added value: +{
        +  "unit": "x"
        +}
    • Changedpdf_flatten3 fields changed
      • addedInput schema / properties / watermarkFontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / watermarkRotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
      • addedInput schema / properties / watermarkScale / x-ui
        Added value: +{
        +  "unit": "x"
        +}
    • Changedpdf_flatten_batch3 fields changed
      • addedInput schema / properties / watermarkFontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / watermarkRotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
      • addedInput schema / properties / watermarkScale / x-ui
        Added value: +{
        +  "unit": "x"
        +}
    • Changedpdf_header_footer2 fields changed
      • addedInput schema / properties / fontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / margin / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
    • Changedpdf_images_to_pdf1 field changed
      • addedInput schema / properties / margin / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
    • Changedpdf_page_numbers1 field changed
      • addedInput schema / properties / fontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
    • Changedpdf_split1 field changed
      • addedInput schema / properties / chunkSize / x-ui
        Added value: +{
        +  "unit": "pages"
        +}
    • Changedpdf_to_images6 fields changed
      • addedInput schema / properties / dpi / x-ui
        Added value: +{
        +  "unit": "dpi"
        +}
      • addedInput schema / properties / maxHeight / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / maxWidth / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / sheetGap / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / watermarkFontSize / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / watermarkRotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
    • Changedpdf_to_images_batch6 fields changed
      • addedInput schema / properties / dpi / x-ui
        Added value: +{
        +  "unit": "dpi"
        +}
      • addedInput schema / properties / maxHeight / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / maxWidth / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / sheetGap / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / watermarkFontSize / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / watermarkRotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
    • Changedpdf_watermark2 fields changed
      • addedInput schema / properties / fontSize / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / rotation / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
    • Addedphoto_add_border
    • Changedphoto_collage3 fields changed
      • addedInput schema / properties / gap / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / output_long_edge / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / output_width / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedphoto_color_adjuster3 fields changed
      • addedInput schema / properties / brightness / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / contrast / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / saturation / x-ui
        Added value: +{
        +  "unit": "%"
        +}
    • Changedphoto_compress_to_size1 field changed
      • addedInput schema / properties / target_size_kb / x-ui
        Added value: +{
        +  "unit": "KB"
        +}
    • Changedphoto_crop4 fields changed
      • addedInput schema / properties / height / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / width / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / x / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / y / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedphoto_face_blur2 fields changed
      • addedInput schema / properties / block_size / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / blur_radius / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedphoto_flip_rotate1 field changed
      • addedInput schema / properties / degrees / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
    • Changedphoto_image_diff1 field changed
      • addedInput schema / properties / fuzz / x-ui
        Added value: +{
        +  "unit": "%"
        +}
    • Changedphoto_image_overlay4 fields changed
      • addedInput schema / properties / opacity / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / scale / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / x_offset / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / y_offset / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedphoto_image_splitter2 fields changed
      • addedInput schema / properties / cols / x-ui
        Added value: +{
        +  "unit": "columns"
        +}
      • addedInput schema / properties / rows / x-ui
        Added value: +{
        +  "unit": "rows"
        +}
    • Changedphoto_resize3 fields changed
      • addedInput schema / properties / height / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / percentage / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • addedInput schema / properties / width / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Addedphoto_rounded_corners
    • Changedphoto_shadow_adder4 fields changed
      • addedInput schema / properties / angle / x-ui
        Added value: +{
        +  "unit": "deg"
        +}
      • addedInput schema / properties / blur / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / distance / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / opacity / x-ui
        Added value: +{
        +  "unit": "%"
        +}
    • Changedphoto_svg_to_png2 fields changed
      • addedInput schema / properties / height / x-ui
        Added value: +{
        +  "unit": "px"
        +}
      • addedInput schema / properties / width / x-ui
        Added value: +{
        +  "unit": "px"
        +}
    • Changedphoto_to_text1 field changed
      • addedInput schema / properties / binarize_threshold / x-ui
        Added value: +{
        +  "unit": "%"
        +}
    • Changedphoto_watermark5 fields changed
      • addedInput schema / properties / font_size / x-ui
        Added value: +{
        +  "unit": "pt"
        +}
      • addedInput schema / properties / opacity / x-ui
        Added value: +{
        +  "unit": "%"
        +}
      • removedInput schema / properties / text / default
        Removed value: -"John's Essentials"
      • changedInput schema / properties / text / description
        Previous 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."
      • changedInput schema / required
        Previous value: -[
        -  "file"
        -]New value: +[
        +  "file",
        +  "text"
        +]
    • Changedweb_extract_table1 field changed
      • addedInput schema / properties / timeout_ms / x-ui
        Added value: +{
        +  "unit": "ms"
        +}
    • Changedweb_fetch1 field changed
      • addedInput schema / properties / timeout_ms / x-ui
        Added value: +{
        +  "unit": "ms"
        +}
    • Changedweb_scrape_page1 field changed
      • addedInput schema / properties / timeout_ms / x-ui
        Added value: +{
        +  "unit": "ms"
        +}
  13. 1 tool update
    • Addeddrive_upload
  14. 79 tool updates
    • Changedanalyze_color_palette2 fields changed
      • changedInput schema / properties / colors / description
        Previous value: -"Number of palette colors to extract."New value: +"How many dominant colours to pull out of the image."
      • addedInput schema / properties / colors / title
        Added value: +"Colors to extract"
    • Changedanalyze_csv1 field changed
      • addedInput schema / properties / strict
        Added 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"
        +}
    • Changedanalyze_file_diff5 fields changed
      • addedInput schema / properties / strict
        Added 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"
        +}
      • changedInput schema / properties / text_a / description
        Previous 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."
      • addedInput schema / properties / text_a / title
        Added value: +"Original text"
      • changedInput schema / properties / text_b / description
        Previous value: -"Second text."New value: +"The AFTER version. Anything that appears only here is reported as added."
      • addedInput schema / properties / text_b / title
        Added value: +"Updated text"
    • Changedanalyze_grammar_check9 fields changed
      • addedInput schema / properties / dialect / title
        Added value: +"English spelling"
      • addedInput schema / properties / dialect / x-ui
        Added value: +{
        +  "labels": {
        +    "auto": "Detect automatically",
        +    "en-AU": "Australian English",
        +    "en-CA": "Canadian English",
        +    "en-GB": "British English",
        +    "en-US": "American English"
        +  }
        +}
      • changedInput schema / properties / include_llm / description
        Previous 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."
      • addedInput schema / properties / include_llm / title
        Added value: +"Deeper AI check"
      • changedInput schema / properties / mode / description
        Previous 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."
      • addedInput schema / properties / mode / title
        Added value: +"How picky should it be"
      • addedInput schema / properties / mode / x-show-when
        Added value: +{
        +  "include_llm": [
        +    true
        +  ]
        +}
      • addedInput schema / properties / style / title
        Added value: +"Style guide"
      • addedInput schema / properties / style / x-ui
        Added value: +{
        +  "labels": {
        +    "ap": "AP",
        +    "apa": "APA",
        +    "chicago": "Chicago",
        +    "ieee": "IEEE",
        +    "mla": "MLA",
        +    "none": "No style guide"
        +  }
        +}
    • Changedanalyze_grammar_check_batch8 fields changed
      • addedInput schema / properties / items / items / properties / dialect / default
        Added value: +"en-US"
      • addedInput schema / properties / items / items / properties / dialect / description
        Added value: +"Which spelling to expect. Anything we do not recognise is read as en-US."
      • addedInput schema / properties / items / items / properties / include_llm / default
        Added value: +true
      • addedInput schema / properties / items / items / properties / include_llm / description
        Added value: +"Also run the slower rewrite pass that suggests whole-sentence improvements. On unless you say otherwise."
      • addedInput schema / properties / items / items / properties / mode / default
        Added value: +"tone-preserving"
      • addedInput schema / properties / items / items / properties / mode / description
        Added value: +"Tone-preserving keeps the writer's voice and fixes mistakes; strict rewrites towards plain correctness."
      • addedInput schema / properties / items / items / properties / style / default
        Added value: +"none"
      • addedInput schema / properties / items / items / properties / style / description
        Added value: +"Which style guide to judge the writing against. Leave it out and no style guide is applied."
    • Changedanalyze_hash5 fields changed
      • changedInput schema / properties / file / description
        Previous value: -"File to hash (any type)"New value: +"The file to hash. Any type, of any size we accept."
      • addedInput schema / properties / file / title
        Added value: +"File to hash"
      • changedInput schema / properties / text / description
        Previous 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."
      • addedInput schema / properties / text / title
        Added value: +"Text to hash"
      • changedInput schema / required
        Previous value: -[
        -  "file"
        -]New value: +[]
    • Changedanalyze_link_extractor5 fields changed
      • changedInput schema / properties / file / description
        Previous 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."
      • addedInput schema / properties / file / title
        Added value: +"File to scan"
      • changedInput schema / properties / text / description
        Previous 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."
      • addedInput schema / properties / text / title
        Added value: +"Text or HTML to scan"
      • changedInput schema / required
        Previous value: -[
        -  "file"
        -]New value: +[]
    • Changedanalyze_readability3 fields changed
      • changedInput schema / properties / text / description
        Previous 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."
      • addedInput schema / properties / text / title
        Added value: +"Text to score"
      • changedInput schema / required
        Previous value: -[
        -  "text"
        -]New value: +[]
    • Changedanalyze_ssl2 fields changed
      • changedInput schema / properties / hostname / description
        Previous 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."
      • addedInput schema / properties / hostname / title
        Added value: +"Website address"
    • Changedanalyze_word_count2 fields changed
      • changedInput schema / properties / text / description
        Previous 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."
      • addedInput schema / properties / text / title
        Added value: +"Text to count"
    • Changedanalyze_word_frequency4 fields changed
      • changedInput schema / properties / exclude / description
        Previous 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."
      • addedInput schema / properties / exclude / title
        Added value: +"Words to ignore"
      • changedInput schema / properties / topN / description
        Previous value: -"How many top words to return."New value: +"Show this many of the most common words, most frequent first."
      • addedInput schema / properties / topN / title
        Added value: +"How many words to show"
    • Changedconvert_archive2 fields changed
      • addedInput schema / properties / to / default
        Added value: +"zip"
      • changedInput schema / properties / to / description
        Previous 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."
    • Changedconvert_batch4 fields changed
      • changedInput schema / properties / filenames / description
        Previous 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."
      • addedInput schema / properties / filenames / x-ui
        Added value: +{
        +  "no_recall": true
        +}
      • addedInput schema / properties / target / default
        Added value: +"auto"
      • changedInput schema / properties / target / description
        Previous 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."
    • Changedconvert_data2 fields changed
      • addedInput schema / properties / to / default
        Added value: +"json"
      • changedInput schema / properties / to / description
        Previous 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."
    • Changedconvert_document3 fields changed
      • changedInput schema / properties / from / description
        Previous 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."
      • addedInput schema / properties / to / default
        Added value: +"pdf"
      • changedInput schema / properties / to / description
        Previous 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."
    • Changedconvert_ebook3 fields changed
      • addedInput schema / properties / to / default
        Added value: +"epub"
      • changedInput schema / properties / to / description
        Previous 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."
      • changedInput schema / properties / to / enum
        Previous value: -[
        -  "epub",
        -  "pdf",
        -  "mobi",
        -  "azw3"
        -]New value: +[
        +  "epub",
        +  "mobi",
        +  "azw3",
        +  "pdf"
        +]
    • Changedconvert_file4 fields changed
      • changedInput schema / properties / file / description
        Previous 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."
      • addedInput schema / properties / gif_fps
        Added 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"
        +    ]
        +  }
        +}
      • addedInput schema / properties / gif_width
        Added 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"
        +    ]
        +  }
        +}
      • changedInput schema / properties / to / enum
        Previous 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"
        +]
    • Changedconvert_geo4 fields changed
      • addedInput schema / properties / strict / default
        Added value: +false
      • changedInput schema / properties / strict / description
        Previous 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."
      • removedInput schema / properties / strict / enum
        Removed value: -[
        -  "true",
        -  "false"
        -]
      • changedInput schema / properties / strict / type
        Previous value: -"string"New value: +"boolean"
    • Changedconvert_parquet2 fields changed
      • changedInput schema / properties / sheet / description
        Previous 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."
      • addedInput schema / properties / sheet / x-show-when
        Added value: +{
        +  "from": [
        +    "xlsx"
        +  ]
        +}
    • Changedconvert_sqlite3 fields changed
      • addedInput schema / properties / strict
        Added 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"
        +}
      • addedInput schema / properties / to / default
        Added value: +"csv"
      • changedInput schema / properties / to / description
        Previous 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."
    • Changedconvert_text1 field changed
      • changedInput schema / properties / to / description
        Previous 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."
    • Changedconvert_unit_convert1 field changed
      • changedInput schema / properties / value / description
        Previous 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)."
    • Changedconvert_video12 fields changed
      • changedInput schema / properties / bitrate_kbps / description
        Previous 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."
      • addedInput schema / properties / bitrate_kbps / x-show-when
        Added value: +{
        +  "to": [
        +    "mp4",
        +    "mov",
        +    "webm",
        +    "mkv",
        +    "avi"
        +  ]
        +}
      • addedInput schema / properties / codec / default
        Added value: +"auto"
      • changedInput schema / properties / codec / description
        Previous 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."
      • changedInput schema / properties / codec / enum
        Previous value: -[
        -  "auto",
        -  "h264",
        -  "h265",
        -  "vp9",
        -  "av1"
        -]New value: +[
        +  "auto",
        +  "h264",
        +  "vp9",
        +  "h265",
        +  "av1"
        +]
      • addedInput schema / properties / codec / x-show-when
        Added value: +{
        +  "to": [
        +    "mp4",
        +    "mov",
        +    "webm",
        +    "mkv",
        +    "avi"
        +  ]
        +}
      • addedInput schema / properties / crf
        Added 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"
        +    ]
        +  }
        +}
      • changedInput schema / properties / preset_name / description
        Previous 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."
      • addedInput schema / properties / resolution / default
        Added value: +"source"
      • changedInput schema / properties / resolution / description
        Previous 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."
      • addedInput schema / properties / to / default
        Added value: +"mp4"
      • changedInput schema / properties / to / description
        Previous 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."
    • Changeddata_to_file4 fields changed
      • changedInput schema / properties / format / description
        Previous 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."
      • addedInput schema / properties / name / default
        Added value: +"data"
      • changedInput schema / properties / name / description
        Previous 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."
      • changedInput schema / properties / text / description
        Previous 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."
    • Changedemail_file3 fields changed
      • changedInput schema / properties / note / description
        Previous 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."
      • addedInput schema / properties / subject / default
        Added value: +"Your file is ready"
      • changedInput schema / properties / subject / description
        Previous value: -"Optional subject line. Defaults to 'Your file is ready'."New value: +"Subject line of the email."
    • Changedesign_place1 field changed
      • changedInput schema / properties / fields / description
        Previous 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."
    • Changedfiles_zip1 field changed
      • changedInput schema / properties / name / description
        Previous 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."
    • Changedgenerate_ascii_art6 fields changed
      • changedInput schema / properties / file / description
        Previous value: -"Image to convert. REQUIRED when mode=image (max 10MB)."New value: +"The picture to convert (max 10 MB)."
      • addedInput schema / properties / file / x-show-when
        Added value: +{
        +  "mode": [
        +    "image"
        +  ]
        +}
      • changedInput schema / properties / font / enum
        Previous 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"
        +]
      • changedInput schema / properties / mode / description
        Previous 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."
      • changedInput schema / properties / text / description
        Previous value: -"The words to render as a banner. Up to 100 characters."New value: +"The words to draw. Longer than 100 characters is trimmed."
      • changedInput schema / properties / width / description
        Previous value: -"How many characters wide the picture is drawn."New value: +"How many characters wide the picture is."
    • Changedgenerate_barcode5 fields changed
      • changedInput schema / properties / height / description
        Previous 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."
      • changedInput schema / properties / height / minimum
        Previous value: -1New value: +50
      • addedInput schema / properties / showText
        Added value: +{
        +  "default": true,
        +  "description": "Print the encoded digits underneath the bars, so a cashier can key them in if a scan fails.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / type / description
        Previous 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."
      • addedInput schema / properties / type / x-ui
        Added 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"
        +  }
        +}
    • Changedgenerate_certificate2 fields changed
      • changedInput schema / properties / template / description
        Previous 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."
      • addedInput schema / properties / template / x-show-when
        Added value: +{
        +  "borderStyle": [
        +    "__never"
        +  ]
        +}
    • Changedgenerate_favicon1 field changed
      • addedInput schema / properties / background
        Added 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"
        +    }
        +  }
        +}
    • Changedgenerate_hash4 fields changed
      • changedInput schema / properties / file / description
        Previous 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."
      • changedInput schema / properties / text / description
        Previous 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."
      • addedInput schema / properties / text / title
        Added value: +"Text to hash"
      • changedInput schema / required
        Previous value: -[
        -  "text"
        -]New value: +[]
    • Changedgenerate_invoice2 fields changed
      • changedInput schema / properties / discountPercent / description
        Previous 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."
      • changedInput schema / properties / taxPercent / description
        Previous 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."
    • Changedgenerate_password10 fields changed
      • changedInput schema / properties / length / description
        Previous value: -"Characters per password. Values over 256 silently clamp to 256; zero or negative resets to the default 16."New value: +"Characters per password."
      • changedInput schema / properties / length / minimum
        Previous value: -1New value: +4
      • changedInput schema / properties / lowercase / default
        Previous value: -falseNew value: +true
      • changedInput schema / properties / lowercase / description
        Previous 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."
      • changedInput schema / properties / numbers / default
        Previous value: -falseNew value: +true
      • changedInput schema / properties / numbers / description
        Previous 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."
      • changedInput schema / properties / symbols / default
        Previous value: -falseNew value: +true
      • changedInput schema / properties / symbols / description
        Previous 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."
      • changedInput schema / properties / uppercase / default
        Previous value: -falseNew value: +true
      • changedInput schema / properties / uppercase / description
        Previous 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."
    • Changedgenerate_placeholder_image2 fields changed
      • changedInput schema / properties / format / description
        Previous 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."
      • changedInput schema / properties / format / enum
        Previous value: -[
        -  "png",
        -  "jpg",
        -  "jpeg",
        -  "webp"
        -]New value: +[
        +  "png",
        +  "jpg",
        +  "webp"
        +]
    • Changedgenerate_qr_code2 fields changed
      • changedInput schema / properties / size / description
        Previous value: -"Image size in pixels (max 2000)"New value: +"Width and height of the square image, in pixels."
      • changedInput schema / properties / size / minimum
        Previous value: -1New value: +200
    • Changedmedia_add_watermark4 fields changed
      • addedInput schema / properties / fontsize
        Added 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"
        +}
      • changedInput schema / properties / opacity / description
        Previous 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."
      • changedInput schema / properties / position / description
        Previous value: -"No hyphens — 'bottomright', not 'bottom-right'. Unknown values fall back to bottomright."New value: +"Which corner of the frame the watermark sits in."
      • addedInput schema / properties / position / x-ui
        Added value: +{
        +  "labels": {
        +    "bottomleft": "Bottom left",
        +    "bottomright": "Bottom right",
        +    "center": "Centre",
        +    "topleft": "Top left",
        +    "topright": "Top right"
        +  }
        +}
    • Changedmedia_extract_audio1 field changed
      • changedInput schema / properties / format / description
        Previous 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."
    • Changedmedia_extract_frames5 fields changed
      • changedInput schema / properties / fps / description
        Previous value: -"Frames per second to extract"New value: +"How many frames to take per second of video. 1 means one frame a second."
      • changedInput schema / properties / fps / maximum
        Previous value: -1000New value: +30
      • changedInput schema / properties / fps / minimum
        Previous value: -0.01New value: +0.1
      • changedInput schema / properties / max / description
        Previous value: -"Maximum number of frames to extract."New value: +"Stop after this many frames, however long the video is."
      • addedInput schema / properties / max / title
        Added value: +"Most frames to take"
    • Changedoctopus_list1 field changed
      • changedInput schema / properties / folder / description
        Previous 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."
    • Changedpdf_compress6 fields changed
      • changedInput schema / properties / metadataOnly / description
        Previous 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."
      • changedInput schema / properties / quality / description
        Previous 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."
      • addedInput schema / properties / quality / x-show-when
        Added value: +{
        +  "metadataOnly": [
        +    "false"
        +  ]
        +}
      • changedInput schema / properties / targetSize / description
        Previous 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."
      • addedInput schema / properties / targetSize / title
        Added value: +"Squeeze down to"
      • addedInput schema / properties / targetSize / x-show-when
        Added value: +{
        +  "metadataOnly": [
        +    "false"
        +  ]
        +}
    • Changedpdf_crop8 fields changed
      • changedInput schema / properties / bottom / description
        Previous 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."
      • changedInput schema / properties / bottom / maximum
        Previous value: -14400New value: +288
      • changedInput schema / properties / left / description
        Previous 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."
      • changedInput schema / properties / left / maximum
        Previous value: -14400New value: +288
      • changedInput schema / properties / right / description
        Previous 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."
      • changedInput schema / properties / right / maximum
        Previous value: -14400New value: +288
      • changedInput schema / properties / top / description
        Previous 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."
      • changedInput schema / properties / top / maximum
        Previous value: -14400New value: +288
    • Changedpdf_excel_to_pdf26 fields changed
      • changedInput schema / properties / gridlines / description
        Previous 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."
      • changedInput schema / properties / gridlines / enum
        Previous value: -[
        -  "",
        -  "true",
        -  "false"
        -]New value: +[
        +  "true",
        +  "false"
        +]
      • addedInput schema / properties / gridlines / x-ui
        Added value: +{
        +  "labels": {
        +    "false": "Hide gridlines",
        +    "true": "Show gridlines"
        +  }
        +}
      • addedInput schema / properties / margins / x-ui
        Added value: +{
        +  "labels": {
        +    "default": "Keep the sheet's own margins",
        +    "narrow": "Narrow",
        +    "normal": "Normal",
        +    "wide": "Wide"
        +  }
        +}
      • changedInput schema / properties / pdfa / description
        Previous 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."
      • addedInput schema / properties / pdfa / x-ui
        Added value: +{
        +  "labels": {
        +    "1b": "PDF/A-1b",
        +    "2b": "PDF/A-2b (most asked for)",
        +    "3b": "PDF/A-3b",
        +    "none": "Ordinary PDF"
        +  }
        +}
      • changedInput schema / properties / permPassword / description
        Previous 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."
      • addedInput schema / properties / permPassword / title
        Added value: +"Owner password"
      • changedInput schema / properties / quality / description
        Previous 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."
      • changedInput schema / properties / quality / enum
        Previous value: -[
        -  "",
        -  "low",
        -  "medium",
        -  "high"
        -]New value: +[
        +  "low",
        +  "medium",
        +  "high"
        +]
      • addedInput schema / properties / quality / x-ui
        Added value: +{
        +  "labels": {
        +    "high": "Best quality (no downsizing)",
        +    "low": "Smallest file (96 DPI pictures)",
        +    "medium": "Balanced (150 DPI pictures)"
        +  }
        +}
      • changedInput schema / properties / scale / description
        Previous 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."
      • addedInput schema / properties / scale / x-show-when
        Added value: +{
        +  "fitToPage": [
        +    "none"
        +  ]
        +}
      • addedInput schema / properties / sheets / default
        Added value: +"all"
      • changedInput schema / properties / sheets / description
        Previous 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."
      • changedInput schema / properties / showHeaders / description
        Previous 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."
      • changedInput schema / properties / showHeaders / enum
        Previous value: -[
        -  "",
        -  "true",
        -  "false"
        -]New value: +[
        +  "true",
        +  "false"
        +]
      • addedInput schema / properties / showHeaders / x-ui
        Added value: +{
        +  "labels": {
        +    "false": "Hide row & column headings",
        +    "true": "Show row & column headings"
        +  }
        +}
      • changedInput schema / properties / splitMode / description
        Previous 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."
      • addedInput schema / properties / watermarkColor
        Added 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"
        +}
      • addedInput schema / properties / watermarkFont
        Added 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"
        +}
      • addedInput schema / properties / watermarkFontSize
        Added value: +{
        +  "default": 48,
        +  "description": "Height of the watermark lettering in points. Only used when there is watermark text.",
        +  "maximum": 1000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / watermarkOpacity
        Added 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"
        +}
      • addedInput schema / properties / watermarkPosition
        Added 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"
        +    }
        +  }
        +}
      • addedInput schema / properties / watermarkRotation
        Added 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"
        +}
      • addedInput schema / properties / watermarkScale
        Added 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"
        +}
    • Changedpdf_excel_to_pdf_batch26 fields changed
      • changedInput schema / properties / gridlines / description
        Previous 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."
      • changedInput schema / properties / gridlines / enum
        Previous value: -[
        -  "",
        -  "true",
        -  "false"
        -]New value: +[
        +  "true",
        +  "false"
        +]
      • addedInput schema / properties / gridlines / x-ui
        Added value: +{
        +  "labels": {
        +    "false": "Hide gridlines",
        +    "true": "Show gridlines"
        +  }
        +}
      • addedInput schema / properties / margins / x-ui
        Added value: +{
        +  "labels": {
        +    "default": "Keep the sheet's own margins",
        +    "narrow": "Narrow",
        +    "normal": "Normal",
        +    "wide": "Wide"
        +  }
        +}
      • changedInput schema / properties / pdfa / description
        Previous 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."
      • addedInput schema / properties / pdfa / x-ui
        Added value: +{
        +  "labels": {
        +    "1b": "PDF/A-1b",
        +    "2b": "PDF/A-2b (most asked for)",
        +    "3b": "PDF/A-3b",
        +    "none": "Ordinary PDF"
        +  }
        +}
      • changedInput schema / properties / permPassword / description
        Previous 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."
      • addedInput schema / properties / permPassword / title
        Added value: +"Owner password"
      • changedInput schema / properties / quality / description
        Previous 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."
      • changedInput schema / properties / quality / enum
        Previous value: -[
        -  "",
        -  "low",
        -  "medium",
        -  "high"
        -]New value: +[
        +  "low",
        +  "medium",
        +  "high"
        +]
      • addedInput schema / properties / quality / x-ui
        Added value: +{
        +  "labels": {
        +    "high": "Best quality (no downsizing)",
        +    "low": "Smallest file (96 DPI pictures)",
        +    "medium": "Balanced (150 DPI pictures)"
        +  }
        +}
      • changedInput schema / properties / scale / description
        Previous 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."
      • addedInput schema / properties / scale / x-show-when
        Added value: +{
        +  "fitToPage": [
        +    "none"
        +  ]
        +}
      • addedInput schema / properties / sheets / default
        Added value: +"all"
      • changedInput schema / properties / sheets / description
        Previous 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."
      • changedInput schema / properties / showHeaders / description
        Previous 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."
      • changedInput schema / properties / showHeaders / enum
        Previous value: -[
        -  "",
        -  "true",
        -  "false"
        -]New value: +[
        +  "true",
        +  "false"
        +]
      • addedInput schema / properties / showHeaders / x-ui
        Added value: +{
        +  "labels": {
        +    "false": "Hide row & column headings",
        +    "true": "Show row & column headings"
        +  }
        +}
      • changedInput schema / properties / splitMode / description
        Previous 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."
      • addedInput schema / properties / watermarkColor
        Added 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"
        +}
      • addedInput schema / properties / watermarkFont
        Added 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"
        +}
      • addedInput schema / properties / watermarkFontSize
        Added value: +{
        +  "default": 48,
        +  "description": "Height of the watermark lettering in points. Only used when there is watermark text.",
        +  "maximum": 1000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / watermarkOpacity
        Added 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"
        +}
      • addedInput schema / properties / watermarkPosition
        Added 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"
        +    }
        +  }
        +}
      • addedInput schema / properties / watermarkRotation
        Added 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"
        +}
      • addedInput schema / properties / watermarkScale
        Added 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"
        +}
    • Changedpdf_flatten11 fields changed
      • changedInput schema / properties / compressPreset / description
        Previous 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."
      • addedInput schema / properties / compressPreset / x-show-when
        Added value: +{
        +  "compressImages": [
        +    "true"
        +  ]
        +}
      • changedInput schema / properties / exportData / description
        Previous 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."
      • changedInput schema / properties / ocrLang / description
        Previous 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."
      • addedInput schema / properties / ocrLang / x-show-when
        Added value: +{
        +  "ocrFirst": [
        +    "true"
        +  ]
        +}
      • addedInput schema / properties / ocrLang / x-ui
        Added 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"
        +  }
        +}
      • changedInput schema / properties / signatureMode / description
        Previous 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."
      • addedInput schema / properties / signatureMode / x-ui
        Added value: +{
        +  "labels": {
        +    "block": "Stop and tell me",
        +    "ignore": "Flatten anyway (breaks the signature)",
        +    "preserve": "Leave signed files untouched"
        +  }
        +}
      • changedInput schema / properties / watermarkPosition / description
        Previous 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."
      • addedInput schema / properties / watermarkPosition / x-ui
        Added 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"
        +  }
        +}
      • removedInput schema / properties / watermarkTile
        Removed 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"
        -}
    • Changedpdf_flatten_batch11 fields changed
      • changedInput schema / properties / compressPreset / description
        Previous 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."
      • addedInput schema / properties / compressPreset / x-show-when
        Added value: +{
        +  "compressImages": [
        +    "true"
        +  ]
        +}
      • changedInput schema / properties / exportData / description
        Previous 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."
      • changedInput schema / properties / ocrLang / description
        Previous 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."
      • addedInput schema / properties / ocrLang / x-show-when
        Added value: +{
        +  "ocrFirst": [
        +    "true"
        +  ]
        +}
      • addedInput schema / properties / ocrLang / x-ui
        Added 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"
        +  }
        +}
      • changedInput schema / properties / signatureMode / description
        Previous 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."
      • addedInput schema / properties / signatureMode / x-ui
        Added value: +{
        +  "labels": {
        +    "block": "Stop and tell me",
        +    "ignore": "Flatten anyway (breaks the signature)",
        +    "preserve": "Leave signed files untouched"
        +  }
        +}
      • changedInput schema / properties / watermarkPosition / description
        Previous 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."
      • addedInput schema / properties / watermarkPosition / x-ui
        Added 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"
        +  }
        +}
      • removedInput schema / properties / watermarkTile
        Removed 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"
        -}
    • Changedpdf_grayscale4 fields changed
      • addedInput schema / properties / mode
        Added 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"
        +    }
        +  }
        +}
      • addedInput schema / properties / outputName
        Added value: +{
        +  "description": "Optional name for the file you get back. Leave blank and we name it for you.",
        +  "type": "string"
        +}
      • addedInput schema / properties / pages
        Added 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"
        +}
      • addedInput schema / properties / strict
        Added 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"
        +}
    • Changedpdf_header_footer8 fields changed
      • changedInput schema / properties / fontFamily / description
        Previous value: -"Exactly Helvetica, Times-Roman, or Courier (case-sensitive); anything else silently becomes Helvetica."New value: +"Typeface for the header and footer text."
      • changedInput schema / properties / fontSize / description
        Previous value: -"Points, integer 6-20; anything outside that range (or non-integer) silently resets to 10."New value: +"Text size in points."
      • changedInput schema / properties / footerAlign / description
        Previous value: -"left|center|right; unknown values silently become center."New value: +"Line the footer text up left, centred, or right."
      • changedInput schema / properties / headerAlign / description
        Previous value: -"left|center|right; unknown values silently become center."New value: +"Line the header text up left, centred, or right."
      • changedInput schema / properties / margin / description
        Previous 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)."
      • changedInput schema / properties / pageNumberPosition / description
        Previous 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."
      • addedInput schema / properties / pageNumberPosition / x-show-when
        Added value: +{
        +  "pageNumbers": [
        +    "simple",
        +    "pageN",
        +    "nOfTotal",
        +    "pageNOfTotal"
        +  ]
        +}
      • addedInput schema / properties / pageNumbers / x-ui
        Added value: +{
        +  "labels": {
        +    "nOfTotal": "7 of 12",
        +    "none": "No page numbers",
        +    "pageN": "Page 7",
        +    "pageNOfTotal": "Page 7 of 12",
        +    "simple": "7"
        +  }
        +}
    • Changedpdf_images_to_pdf6 fields changed
      • addedInput schema / properties / autoOrient
        Added 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"
        +}
      • changedInput schema / properties / files / description
        Previous value: -"Input files (JPG, PNG, TIFF)"New value: +"Input files (JPG, JPEG, PNG, WEBP)"
      • addedInput schema / properties / fitMode
        Added 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)"
        +    }
        +  }
        +}
      • addedInput schema / properties / margin
        Added 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"
        +    ]
        +  }
        +}
      • addedInput schema / properties / orientation
        Added 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"
        +    }
        +  }
        +}
      • addedInput schema / properties / pageSize
        Added 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"
        +    }
        +  }
        +}
    • Changedpdf_merge2 fields changed
      • changedInput schema / properties / pageRanges / description
        Previous 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."
      • addedInput schema / properties / pageRanges / title
        Added value: +"Pages to take from each file"
    • Changedpdf_page_numbers4 fields changed
      • changedInput schema / properties / position / description
        Previous 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."
      • addedInput schema / properties / position / x-ui
        Added value: +{
        +  "labels": {
        +    "bc": "Bottom centre",
        +    "bl": "Bottom left",
        +    "br": "Bottom right",
        +    "tc": "Top centre",
        +    "tl": "Top left",
        +    "tr": "Top right"
        +  }
        +}
      • changedInput schema / properties / start / description
        Previous value: -"Starting number. Field name is 'start' — not 'start_number'."New value: +"The number printed on the first numbered page."
      • changedInput schema / properties / start / maximum
        Previous value: -999999New value: +999
    • Changedpdf_protect9 fields changed
      • changedInput schema / properties / encryption / description
        Previous value: -"Encryption strength."New value: +"How strongly the file is locked."
      • addedInput schema / properties / encryption / x-ui
        Added value: +{
        +  "labels": {
        +    "aes128": "AES-128 (compatible)",
        +    "aes256": "AES-256 (strongest)"
        +  }
        +}
      • changedInput schema / properties / password / description
        Previous 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."
      • addedInput schema / properties / password / title
        Added value: +"Password"
      • removedInput schema / properties / permissions / default
        Removed value: -"print"
      • changedInput schema / properties / permissions / description
        Previous 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."
      • removedInput schema / properties / permissions / enum
        Removed value: -[
        -  "all",
        -  "print",
        -  "print,copy",
        -  "copy",
        -  "annotate",
        -  "edit"
        -]
      • removedInput schema / properties / permissions / x-ui
        Removed value: -{
        -  "labels": {
        -    "all": "Allow everything",
        -    "annotate": "Commenting only",
        -    "copy": "Copying text only",
        -    "edit": "Editing only",
        -    "print": "Printing only",
        -    "print,copy": "Printing and copying text"
        -  }
        -}
      • changedInput schema / required
        Previous value: -[
        -  "file",
        -  "password"
        -]New value: +[
        +  "file"
        +]
    • Changedpdf_remove_watermark1 field changed
      • addedInput schema / properties / passthrough
        Added 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"
        +}
    • Changedpdf_reverse3 fields changed
      • addedInput schema / properties / outputName
        Added value: +{
        +  "description": "Optional name for the file you get back. Leave blank and we name it for you.",
        +  "type": "string"
        +}
      • addedInput schema / properties / ranges
        Added 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"
        +}
      • addedInput schema / properties / reverseTarget
        Added 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"
        +    }
        +  }
        +}
    • Changedpdf_rotate3 fields changed
      • changedInput schema / properties / pages / description
        Previous 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."
      • changedInput schema / properties / rotation / description
        Previous value: -"Degrees clockwise. The field name is 'rotation' — not 'angle'."New value: +"How far to turn each page, clockwise."
      • addedInput schema / properties / rotation / x-ui
        Added value: +{
        +  "labels": {
        +    "180": "180° (upside down)",
        +    "270": "90° anticlockwise",
        +    "90": "90° clockwise"
        +  }
        +}
    • Changedpdf_split5 fields changed
      • changedInput schema / properties / chunkSize / description
        Previous value: -"Pages per chunk when mode=chunks."New value: +"How many pages go into each output file."
      • changedInput schema / properties / chunkSize / maximum
        Previous value: -10000New value: +100
      • addedInput schema / properties / chunkSize / x-show-when
        Added value: +{
        +  "mode": [
        +    "chunks"
        +  ]
        +}
      • changedInput schema / properties / pages / description
        Previous 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'."
      • addedInput schema / properties / pages / x-show-when
        Added value: +{
        +  "mode": [
        +    "range"
        +  ]
        +}
    • Changedpdf_to_excel6 fields changed
      • changedInput schema / properties / ocrLang / description
        Previous 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."
      • addedInput schema / properties / ocrLang / x-show-when
        Added value: +{
        +  "ocrFirst": [
        +    "true"
        +  ]
        +}
      • addedInput schema / properties / ocrLang / x-ui
        Added 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"
        +  }
        +}
      • changedInput schema / properties / sheetMode / description
        Previous value: -"XLSX sheet strategy. CSV/TSV/JSON ignore this."New value: +"How the tables are laid out across the workbook's sheets."
      • addedInput schema / properties / sheetMode / x-show-when
        Added value: +{
        +  "format": [
        +    "xlsx"
        +  ]
        +}
      • addedInput schema / properties / sheetMode / x-ui
        Added value: +{
        +  "labels": {
        +    "per-page": "One sheet per page",
        +    "per-table": "One sheet per table",
        +    "single": "Everything on one sheet"
        +  }
        +}
    • Changedpdf_to_excel_batch6 fields changed
      • changedInput schema / properties / ocrLang / description
        Previous 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."
      • addedInput schema / properties / ocrLang / x-show-when
        Added value: +{
        +  "ocrFirst": [
        +    "true"
        +  ]
        +}
      • addedInput schema / properties / ocrLang / x-ui
        Added 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"
        +  }
        +}
      • changedInput schema / properties / sheetMode / description
        Previous value: -"XLSX sheet strategy. CSV/TSV/JSON ignore this."New value: +"How the tables are laid out across the workbook's sheets."
      • addedInput schema / properties / sheetMode / x-show-when
        Added value: +{
        +  "format": [
        +    "xlsx"
        +  ]
        +}
      • addedInput schema / properties / sheetMode / x-ui
        Added value: +{
        +  "labels": {
        +    "per-page": "One sheet per page",
        +    "per-table": "One sheet per table",
        +    "single": "Everything on one sheet"
        +  }
        +}
    • Changedpdf_to_excel_inspect6 fields changed
      • changedInput schema / properties / ocrFirst / description
        Previous value: -"Run OCR before table extraction (scanned PDFs)."New value: +"Accepted but ignored by the inspector — run pdf_ocr first, then inspect."
      • addedInput schema / properties / ocrFirst / x-show-when
        Added value: +{
        +  "engine": [
        +    "__never"
        +  ]
        +}
      • changedInput schema / properties / ocrLang / description
        Previous value: -"OCR language (Tesseract code)."New value: +"Accepted but ignored by the inspector - it never runs OCR. Run PDF OCR first, then inspect."
      • addedInput schema / properties / ocrLang / x-show-when
        Added value: +{
        +  "engine": [
        +    "__never"
        +  ]
        +}
      • changedInput schema / properties / tableIndexes / description
        Previous 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."
      • addedInput schema / properties / tableIndexes / x-show-when
        Added value: +{
        +  "engine": [
        +    "__never"
        +  ]
        +}
    • Changedpdf_to_images30 fields changed
      • changedInput schema / properties / avifQuality / description
        Previous value: -"AVIF quality (Starter+)"New value: +"Higher keeps more detail and makes a bigger file."
      • addedInput schema / properties / avifQuality / x-show-when
        Added value: +{
        +  "format": [
        +    "avif"
        +  ]
        +}
      • changedInput schema / properties / backgroundColor / description
        Previous 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."
      • addedInput schema / properties / backgroundColor / x-show-when
        Added value: +{
        +  "format": [
        +    "jpg",
        +    "webp"
        +  ]
        +}
      • changedInput schema / properties / jpegQuality / description
        Previous 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."
      • addedInput schema / properties / jpegQuality / x-show-when
        Added value: +{
        +  "format": [
        +    "jpg",
        +    "tiff"
        +  ]
        +}
      • changedInput schema / properties / maxWidth / description
        Previous 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."
      • changedInput schema / properties / preset / description
        Previous 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."
      • changedInput schema / properties / preset / enum
        Previous value: -[
        -  "",
        -  "web",
        -  "print",
        -  "email",
        -  "archive"
        -]New value: +[
        +  "web",
        +  "print",
        +  "email",
        +  "archive"
        +]
      • addedInput schema / properties / preset / x-ui
        Added 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)"
        +  }
        +}
      • changedInput schema / properties / sheetBackground / description
        Previous 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."
      • addedInput schema / properties / sheetBackground / title
        Added value: +"Sheet background colour"
      • addedInput schema / properties / sheetBackground / x-show-when
        Added value: +{
        +  "mode": [
        +    "sheet",
        +    "filmstrip"
        +  ]
        +}
      • changedInput schema / properties / sheetColumns / description
        Previous 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."
      • addedInput schema / properties / sheetColumns / x-show-when
        Added value: +{
        +  "mode": [
        +    "sheet"
        +  ]
        +}
      • changedInput schema / properties / sheetGap / description
        Previous 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."
      • addedInput schema / properties / sheetGap / x-show-when
        Added value: +{
        +  "mode": [
        +    "sheet",
        +    "filmstrip"
        +  ]
        +}
      • changedInput schema / properties / tiffCompression / description
        Previous value: -"TIFF compression (format=tiff only)."New value: +"How the TIFF is packed down."
      • addedInput schema / properties / tiffCompression / x-show-when
        Added value: +{
        +  "format": [
        +    "tiff"
        +  ]
        +}
      • addedInput schema / properties / tiffCompression / x-ui
        Added 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)"
        +  }
        +}
      • changedInput schema / properties / transparent / description
        Previous value: -"PNG alpha channel when true"New value: +"Leave the paper see-through instead of white."
      • addedInput schema / properties / transparent / x-show-when
        Added value: +{
        +  "colorMode": [
        +    "rgb"
        +  ],
        +  "format": [
        +    "png",
        +    "webp",
        +    "avif"
        +  ]
        +}
      • changedInput schema / properties / watermarkPosition / description
        Previous value: -"Unknown codes silently become c (center). Does nothing unless watermarkText is set."New value: +"Where the stamp sits on each image."
      • addedInput schema / properties / watermarkPosition / x-ui
        Added 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"
        +  }
        +}
      • changedInput schema / properties / watermarkScale / description
        Previous 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."
      • addedInput schema / properties / watermarkScale / x-show-when
        Added value: +{
        +  "mode": [
        +    "__never"
        +  ]
        +}
      • changedInput schema / properties / watermarkTile / description
        Previous 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."
      • addedInput schema / properties / watermarkTile / x-show-when
        Added value: +{
        +  "mode": [
        +    "__never"
        +  ]
        +}
      • changedInput schema / properties / webpQuality / description
        Previous 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."
      • addedInput schema / properties / webpQuality / x-show-when
        Added value: +{
        +  "format": [
        +    "webp"
        +  ]
        +}
    • Changedpdf_to_images_batch30 fields changed
      • changedInput schema / properties / avifQuality / description
        Previous value: -"AVIF quality (Starter+)"New value: +"Higher keeps more detail and makes a bigger file."
      • addedInput schema / properties / avifQuality / x-show-when
        Added value: +{
        +  "format": [
        +    "avif"
        +  ]
        +}
      • changedInput schema / properties / backgroundColor / description
        Previous 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."
      • addedInput schema / properties / backgroundColor / x-show-when
        Added value: +{
        +  "format": [
        +    "jpg",
        +    "webp"
        +  ]
        +}
      • changedInput schema / properties / jpegQuality / description
        Previous 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."
      • addedInput schema / properties / jpegQuality / x-show-when
        Added value: +{
        +  "format": [
        +    "jpg",
        +    "tiff"
        +  ]
        +}
      • changedInput schema / properties / maxWidth / description
        Previous 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."
      • changedInput schema / properties / preset / description
        Previous 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."
      • changedInput schema / properties / preset / enum
        Previous value: -[
        -  "",
        -  "web",
        -  "print",
        -  "email",
        -  "archive"
        -]New value: +[
        +  "web",
        +  "print",
        +  "email",
        +  "archive"
        +]
      • addedInput schema / properties / preset / x-ui
        Added 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)"
        +  }
        +}
      • changedInput schema / properties / sheetBackground / description
        Previous 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."
      • addedInput schema / properties / sheetBackground / title
        Added value: +"Sheet background colour"
      • addedInput schema / properties / sheetBackground / x-show-when
        Added value: +{
        +  "mode": [
        +    "sheet",
        +    "filmstrip"
        +  ]
        +}
      • changedInput schema / properties / sheetColumns / description
        Previous 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."
      • addedInput schema / properties / sheetColumns / x-show-when
        Added value: +{
        +  "mode": [
        +    "sheet"
        +  ]
        +}
      • changedInput schema / properties / sheetGap / description
        Previous 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."
      • addedInput schema / properties / sheetGap / x-show-when
        Added value: +{
        +  "mode": [
        +    "sheet",
        +    "filmstrip"
        +  ]
        +}
      • changedInput schema / properties / tiffCompression / description
        Previous value: -"TIFF compression (format=tiff only)."New value: +"How the TIFF is packed down."
      • addedInput schema / properties / tiffCompression / x-show-when
        Added value: +{
        +  "format": [
        +    "tiff"
        +  ]
        +}
      • addedInput schema / properties / tiffCompression / x-ui
        Added 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)"
        +  }
        +}
      • changedInput schema / properties / transparent / description
        Previous value: -"PNG alpha channel when true"New value: +"Leave the paper see-through instead of white."
      • addedInput schema / properties / transparent / x-show-when
        Added value: +{
        +  "colorMode": [
        +    "rgb"
        +  ],
        +  "format": [
        +    "png",
        +    "webp",
        +    "avif"
        +  ]
        +}
      • changedInput schema / properties / watermarkPosition / description
        Previous value: -"Unknown codes silently become c (center). Does nothing unless watermarkText is set."New value: +"Where the stamp sits on each image."
      • addedInput schema / properties / watermarkPosition / x-ui
        Added 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"
        +  }
        +}
      • changedInput schema / properties / watermarkScale / description
        Previous 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."
      • addedInput schema / properties / watermarkScale / x-show-when
        Added value: +{
        +  "mode": [
        +    "__never"
        +  ]
        +}
      • changedInput schema / properties / watermarkTile / description
        Previous 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."
      • addedInput schema / properties / watermarkTile / x-show-when
        Added value: +{
        +  "mode": [
        +    "__never"
        +  ]
        +}
      • changedInput schema / properties / webpQuality / description
        Previous 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."
      • addedInput schema / properties / webpQuality / x-show-when
        Added value: +{
        +  "format": [
        +    "webp"
        +  ]
        +}
    • Changedpdf_watermark8 fields changed
      • changedInput schema / properties / color / description
        Previous value: -"Hex color #rgb or #rrggbb (mode=text)."New value: +"Colour of the lettering. Hex, #rgb or #rrggbb."
      • addedInput schema / properties / color / x-show-when
        Added value: +{
        +  "mode": [
        +    "text"
        +  ]
        +}
      • changedInput schema / properties / fontFamily / description
        Previous 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."
      • addedInput schema / properties / fontFamily / x-show-when
        Added value: +{
        +  "mode": [
        +    "text"
        +  ]
        +}
      • changedInput schema / properties / fontSize / description
        Previous value: -"Point size on the page (mode=text only). Non-integer input silently resets to 48."New value: +"Height of the lettering in points."
      • addedInput schema / properties / fontSize / x-show-when
        Added value: +{
        +  "mode": [
        +    "text"
        +  ]
        +}
      • changedInput schema / properties / text / description
        Previous value: -"Watermark text (used when mode=text)."New value: +"The wording stamped across each page."
      • addedInput schema / properties / text / x-show-when
        Added value: +{
        +  "mode": [
        +    "text"
        +  ]
        +}
    • Changedphoto_bg_remover5 fields changed
      • addedInput schema / properties / alpha_matting
        Added 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"
        +}
      • addedInput schema / properties / alpha_matting_background_threshold
        Added 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"
        +    ]
        +  }
        +}
      • addedInput schema / properties / alpha_matting_erode_size
        Added 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"
        +    ]
        +  }
        +}
      • addedInput schema / properties / alpha_matting_foreground_threshold
        Added 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"
        +    ]
        +  }
        +}
      • addedInput schema / properties / model / x-ui
        Added value: +{
        +  "labels": {
        +    "isnet-general-use": "Fine detail (slower)",
        +    "u2net": "Standard",
        +    "u2net_human_seg": "People and portraits"
        +  }
        +}
    • Changedphoto_collage15 fields changed
      • addedInput schema / properties / aspect_ratio / default
        Added value: +"1:1"
      • addedInput schema / properties / aspect_ratio / x-show-when
        Added value: +{
        +  "layout_mode": [
        +    "smart",
        +    "grid_legacy"
        +  ]
        +}
      • addedInput schema / properties / layout / default
        Added value: +"2x2"
      • changedInput schema / properties / layout / description
        Previous value: -"Legacy NxM grid, e.g. 2x2, 3x3 (layout_mode=grid_legacy)."New value: +"A plain grid, written as columns then rows."
      • addedInput schema / properties / layout / enum
        Added value: +[
        +  "1x2",
        +  "2x1",
        +  "2x2",
        +  "2x3",
        +  "3x2",
        +  "3x3",
        +  "4x4"
        +]
      • addedInput schema / properties / layout / x-show-when
        Added value: +{
        +  "layout_mode": [
        +    "grid_legacy"
        +  ]
        +}
      • addedInput schema / properties / output_long_edge / default
        Added value: +1200
      • changedInput schema / properties / output_width / description
        Previous 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."
      • addedInput schema / properties / quality / default
        Added value: +90
      • changedInput schema / properties / quality / minimum
        Previous value: -0New value: +1
      • addedInput schema / properties / quality / x-show-when
        Added value: +{
        +  "output_format": [
        +    "jpg",
        +    "webp",
        +    "avif"
        +  ]
        +}
      • changedInput schema / properties / template / description
        Previous 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."
      • addedInput schema / properties / template / enum
        Added 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"
        +]
      • addedInput schema / properties / template / x-show-when
        Added value: +{
        +  "layout_mode": [
        +    "template"
        +  ]
        +}
      • addedInput schema / properties / template / x-ui
        Added 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"
        +  }
        +}
    • Changedphoto_compress_to_size4 fields changed
      • changedInput schema / properties / output_format / description
        Previous 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."
      • addedInput schema / properties / output_format / enum
        Added value: +[
        +  "jpg",
        +  "png",
        +  "webp"
        +]
      • addedInput schema / properties / target_size_kb / default
        Added value: +500
      • changedInput schema / properties / target_size_kb / maximum
        Previous value: -524288New value: +25600
    • Changedphoto_face_blur7 fields changed
      • changedInput schema / properties / block_size / description
        Previous 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."
      • addedInput schema / properties / block_size / x-show-when
        Added value: +{
        +  "blur_mode": [
        +    "pixelate"
        +  ]
        +}
      • addedInput schema / properties / blur_radius / x-show-when
        Added value: +{
        +  "blur_mode": [
        +    "gaussian"
        +  ]
        +}
      • addedInput schema / properties / blur_strength / x-show-when
        Added value: +{
        +  "blur_mode": [
        +    "gaussian",
        +    "pixelate"
        +  ]
        +}
      • changedInput schema / properties / manual_faces / description
        Previous 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."
      • addedInput schema / properties / output_format / enum
        Added value: +[
        +  "jpg",
        +  "png",
        +  "webp",
        +  "bmp"
        +]
      • changedInput schema / properties / selected_faces / description
        Previous 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."
    • Changedphoto_flip_rotate2 fields changed
      • addedInput schema / properties / action / x-ui
        Added 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"
        +  }
        +}
      • addedInput schema / properties / degrees / x-show-when
        Added value: +{
        +  "action": [
        +    "custom"
        +  ]
        +}
    • Changedphoto_image_overlay1 field changed
      • addedInput schema / properties / output_format / enum
        Added value: +[
        +  "jpg",
        +  "png",
        +  "webp",
        +  "bmp"
        +]
    • Changedphoto_image_splitter1 field changed
      • addedInput schema / properties / output_format / enum
        Added value: +[
        +  "jpg",
        +  "png",
        +  "webp",
        +  "bmp"
        +]
    • Changedphoto_meme_generator2 fields changed
      • changedInput schema / properties / font_size / description
        Previous 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."
      • changedInput schema / properties / output_format / enum
        Previous value: -[
        -  "jpg",
        -  "jpeg",
        -  "png",
        -  "webp"
        -]New value: +[
        +  "jpg",
        +  "png",
        +  "webp"
        +]
    • Changedphoto_noise_reducer4 fields changed
      • addedInput schema / properties / mode / x-ui
        Added 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"
        +  }
        +}
      • addedInput schema / properties / sharpen / x-show-when
        Added value: +{
        +  "mode": [
        +    "auto",
        +    "median",
        +    "despeckle",
        +    "gaussian",
        +    "luminance",
        +    "nlmeans",
        +    "dctdnoiz"
        +  ]
        +}
      • addedInput schema / properties / strength / x-show-when
        Added value: +{
        +  "mode": [
        +    "auto",
        +    "median",
        +    "despeckle",
        +    "gaussian",
        +    "luminance",
        +    "nlmeans",
        +    "dctdnoiz"
        +  ]
        +}
      • addedInput schema / properties / strength / x-ui
        Added value: +{
        +  "labels": {
        +    "1": "Light",
        +    "2": "Medium",
        +    "3": "Strong",
        +    "4": "Maximum"
        +  }
        +}
    • Changedphoto_resize10 fields changed
      • changedInput schema / properties / bg_color / description
        Previous value: -"Canvas background color (mode=canvas)."New value: +"Colour of the padding added around the picture when it does not fill the canvas."
      • addedInput schema / properties / bg_color / x-show-when
        Added value: +{
        +  "mode": [
        +    "canvas"
        +  ]
        +}
      • addedInput schema / properties / force_exact / x-show-when
        Added value: +{
        +  "mode": [
        +    "dimensions"
        +  ]
        +}
      • addedInput schema / properties / height / x-show-when
        Added value: +{
        +  "mode": [
        +    "dimensions",
        +    "height",
        +    "canvas"
        +  ]
        +}
      • addedInput schema / properties / maintain_ratio / x-show-when
        Added value: +{
        +  "mode": [
        +    "dimensions"
        +  ]
        +}
      • addedInput schema / properties / mode / x-ui
        Added 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"
        +  }
        +}
      • changedInput schema / properties / percentage / description
        Previous value: -"Scale percentage — REQUIRED when mode=percentage."New value: +"Scale to this percent of the original size."
      • addedInput schema / properties / percentage / x-show-when
        Added value: +{
        +  "mode": [
        +    "percentage"
        +  ]
        +}
      • changedInput schema / properties / width / description
        Previous 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."
      • addedInput schema / properties / width / x-show-when
        Added value: +{
        +  "mode": [
        +    "dimensions",
        +    "width",
        +    "max",
        +    "canvas"
        +  ]
        +}
    • Changedphoto_shadow_adder2 fields changed
      • changedInput schema / properties / output_format / description
        Previous 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."
      • addedInput schema / properties / output_format / enum
        Added value: +[
        +  "png",
        +  "jpg",
        +  "webp"
        +]
    • Changedphoto_to_text3 fields changed
      • addedInput schema / properties / binarize
        Added 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"
        +}
      • addedInput schema / properties / binarize_threshold
        Added 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"
        +    ]
        +  }
        +}
      • changedInput schema / properties / languages / description
        Previous 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."
    • Changedphoto_upscaler2 fields changed
      • addedInput schema / properties / model / x-ui
        Added value: +{
        +  "labels": {
        +    "fast": "Fast — about 15 seconds",
        +    "quality": "Best detail — up to 4 minutes"
        +  }
        +}
      • changedInput schema / properties / output_format / enum
        Previous value: -[
        -  "jpg",
        -  "jpeg",
        -  "png",
        -  "webp"
        -]New value: +[
        +  "jpg",
        +  "png",
        +  "webp"
        +]
    • Changedphoto_watermark4 fields changed
      • addedInput schema / properties / color
        Added 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"
        +}
      • addedInput schema / properties / position / x-ui
        Added 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"
        +  }
        +}
      • addedInput schema / properties / stroke_color
        Added 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"
        +}
      • addedInput schema / properties / stroke_width
        Added 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"
        +}
    • Changedweb_extract_table9 fields changed
      • changedInput schema / properties / acknowledge_robots / description
        Previous 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."
      • changedInput schema / properties / output / description
        Previous 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."
      • changedInput schema / properties / table_index / description
        Previous 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."
      • addedInput schema / properties / table_index / maximum
        Added value: +50
      • addedInput schema / properties / table_index / minimum
        Added value: +0
      • addedInput schema / properties / timeout_ms / default
        Added value: +30000
      • changedInput schema / properties / timeout_ms / description
        Previous value: -"Optional fetch timeout override in milliseconds."New value: +"How long to wait for the page before giving up, in milliseconds (30000 = 30 seconds)."
      • changedInput schema / properties / timeout_ms / minimum
        Previous value: -1New value: +1000
      • changedInput schema / properties / user_agent / description
        Previous value: -"Optional custom User-Agent header."New value: +"Advanced: how we introduce ourselves to the site. Left blank we identify as JohnsEssentialsBot."
    • Changedweb_fetch5 fields changed
      • changedInput schema / properties / acknowledge_robots / description
        Previous 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."
      • addedInput schema / properties / timeout_ms / default
        Added value: +30000
      • changedInput schema / properties / timeout_ms / description
        Previous value: -"Optional fetch timeout override in milliseconds."New value: +"How long to wait for the page before giving up, in milliseconds (30000 = 30 seconds)."
      • changedInput schema / properties / timeout_ms / minimum
        Previous value: -1New value: +1000
      • changedInput schema / properties / user_agent / description
        Previous 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."
    • Changedweb_scrape_page8 fields changed
      • changedInput schema / properties / acknowledge_robots / description
        Previous 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."
      • changedInput schema / properties / mode / description
        Previous 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."
      • changedInput schema / properties / selectors / description
        Previous 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."
      • addedInput schema / properties / selectors / x-show-when
        Added value: +{
        +  "mode": [
        +    "selectors"
        +  ]
        +}
      • addedInput schema / properties / timeout_ms / default
        Added value: +30000
      • changedInput schema / properties / timeout_ms / description
        Previous value: -"Optional fetch timeout override in milliseconds."New value: +"How long to wait for the page before giving up, in milliseconds (30000 = 30 seconds)."
      • changedInput schema / properties / timeout_ms / minimum
        Previous value: -1New value: +1000
      • changedInput schema / properties / user_agent / description
        Previous value: -"Optional custom User-Agent header."New value: +"Advanced: how we introduce ourselves to the site. Left blank we identify as JohnsEssentialsBot."
  15. 9 tool updates
    • Changedanalyze_word_count1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "text"
        -]New value: +[]
    • Changedconvert_file4 fields changed
      • changedInput schema / properties / from / description
        Previous 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."
      • addedInput schema / properties / from / enum
        Added 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"
        +]
      • changedInput schema / properties / to / description
        Previous value: -"Target format, e.g. 'png', 'pdf', 'mp3'."New value: +"The format you want back. Apple Lossless (alac) is delivered as a .m4a file."
      • addedInput schema / properties / to / enum
        Added 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"
        +]
    • Changedconvert_text6 fields changed
      • addedInput schema / properties / from / default
        Added value: +"md"
      • changedInput schema / properties / from / description
        Previous 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)."
      • addedInput schema / properties / from / enum
        Added value: +[
        +  "md",
        +  "html",
        +  "csv",
        +  "json",
        +  "xml",
        +  "yaml",
        +  "base64_encode",
        +  "base64_decode",
        +  "url_encode",
        +  "url_decode"
        +]
      • addedInput schema / properties / to / default
        Added value: +"html"
      • changedInput schema / properties / to / description
        Previous 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."
      • addedInput schema / properties / to / enum
        Added value: +[
        +  "html",
        +  "md",
        +  "json",
        +  "csv",
        +  "xml",
        +  "yaml",
        +  "txt"
        +]
    • Changedconvert_unit_convert7 fields changed
      • addedInput schema / properties / category / default
        Added value: +"length"
      • changedInput schema / properties / category / description
        Previous 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."
      • addedInput schema / properties / category / enum
        Added value: +[
        +  "length",
        +  "weight",
        +  "area",
        +  "volume",
        +  "speed",
        +  "time",
        +  "data",
        +  "temperature"
        +]
      • changedInput schema / properties / from / description
        Previous 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)."
      • addedInput schema / properties / from / enum
        Added 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"
        +]
      • changedInput schema / properties / to / description
        Previous 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."
      • addedInput schema / properties / to / enum
        Added 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"
        +]
    • Changedgenerate_ascii_art8 fields changed
      • changedInput schema / properties / font / description
        Previous value: -"FIGlet font name (default 'standard')."New value: +"Lettering style."
      • addedInput schema / properties / font / enum
        Added value: +[
        +  "standard",
        +  "banner",
        +  "big",
        +  "block",
        +  "bubble",
        +  "digital",
        +  "lean",
        +  "mini",
        +  "script",
        +  "shadow",
        +  "slant",
        +  "small"
        +]
      • addedInput schema / properties / font / x-show-when
        Added value: +{
        +  "mode": [
        +    "text"
        +  ]
        +}
      • changedInput schema / properties / mode / description
        Previous 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."
      • changedInput schema / properties / text / description
        Previous 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."
      • addedInput schema / properties / text / x-show-when
        Added value: +{
        +  "mode": [
        +    "text"
        +  ]
        +}
      • changedInput schema / properties / width / description
        Previous value: -"Output width in characters, 40-200 (mode=image)."New value: +"How many characters wide the picture is drawn."
      • addedInput schema / properties / width / x-show-when
        Added value: +{
        +  "mode": [
        +    "image"
        +  ]
        +}
    • Changedgenerate_business_card2 fields changed
      • changedInput schema / properties / template / description
        Previous value: -"Card template, e.g. modern or classic."New value: +"Card layout."
      • addedInput schema / properties / template / enum
        Added value: +[
        +  "modern",
        +  "classic",
        +  "minimal",
        +  "creative",
        +  "corporate",
        +  "elegant"
        +]
    • Changedpdf_ocr3 fields changed
      • changedInput schema / properties / lang / description
        Previous 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."
      • addedInput schema / properties / lang / enum
        Added value: +[
        +  "eng",
        +  "deu",
        +  "fra",
        +  "spa",
        +  "ita",
        +  "por",
        +  "nld",
        +  "rus",
        +  "jpn",
        +  "kor",
        +  "chi_sim",
        +  "chi_tra",
        +  "ara",
        +  "hin",
        +  "eng+fra",
        +  "eng+deu",
        +  "eng+spa"
        +]
      • addedInput schema / properties / lang / x-ui
        Added 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"
        +  }
        +}
    • Changedpdf_page_numbers3 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Number template with {page} and {pages} tokens."New value: +"How each number is written on the page."
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "Page {page}",
        +  "{page}",
        +  "{page} of {pages}",
        +  "- {page} -"
        +]
      • addedInput schema / properties / format / x-ui
        Added value: +{
        +  "labels": {
        +    "- {page} -": "- 1 -",
        +    "Page {page}": "Page 1",
        +    "{page}": "1",
        +    "{page} of {pages}": "1 of 10"
        +  }
        +}
    • Changedpdf_protect4 fields changed
      • addedInput schema / properties / permissions / default
        Added value: +"print"
      • changedInput schema / properties / permissions / description
        Previous 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."
      • addedInput schema / properties / permissions / enum
        Added value: +[
        +  "all",
        +  "print",
        +  "print,copy",
        +  "copy",
        +  "annotate",
        +  "edit"
        +]
      • addedInput schema / properties / permissions / x-ui
        Added value: +{
        +  "labels": {
        +    "all": "Allow everything",
        +    "annotate": "Commenting only",
        +    "copy": "Copying text only",
        +    "edit": "Editing only",
        +    "print": "Printing only",
        +    "print,copy": "Printing and copying text"
        +  }
        +}
  16. 1 tool update
    • Changedconvert_file1 field changed
      • changedInput schema / properties / from / description
        Previous 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."
  17. 3 tool updates
    • Changedconvert_file1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "file",
        -  "from",
        -  "to"
        -]New value: +[
        +  "file",
        +  "to"
        +]
    • Addeddata_to_file
    • Addedfiles_unzip
  18. 1 tool update
    • Addedfiles_zip
  19. 1 tool update
    • Changedconvert_video2 fields changed
      • changedInput schema / properties / preset_name / description
        Previous 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."
      • addedInput schema / properties / preset_name / x-ui
        Added value: +{
        +  "no_recall": true
        +}

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables 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.
    18
    169 PyPI
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Privacy-first file tools for AI agents, enabling operations like PDF merge/split, image compression/convert, metadata stripping, and background removal without storing files.
    41 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources