OnlineCyberTools MCP (280+ filterable tools)
This server exposes 280+ tools from the OnlineCyberTools catalogue as native MCP tools for AI agents.
Meta-Tools
search— keyword search across the cataloguedescribe_tool— fetch detailed guidance for any toolreport_bug— submit structured bug reports
Encoding / Decoding Base64, Base32, Base58, Base85, Base91, ASCII85, BinHex, Bubble Babble, UUEncode, XXEncode, Quoted-Printable, URL percent-encoding, HTML entities, Unicode escaping, Punycode/IDN, Morse code, Braille, Atbash, Baconian, Caesar, Vigenère, ROT13/47/custom, Rail Fence, JWT decode, string literal escaping (SQL, shell, regex, etc.)
Binary / Number Conversion Numeric base converter (base 2–36), binary ↔ text/decimal, hex ↔ ASCII/decimal, octal ↔ text, BCD, Gray code, Hamming code, IEEE 754, parity bit, Roman numerals, color codes (HEX/RGB/HSL/HSV), Unix timestamp converter
Cryptography & Hashing MD5, SHA-1/2/3, BLAKE2/3, Keccak, RIPEMD, Whirlpool, HMAC, checksums (CRC, Adler, Fletcher, FNV); password hashing/verification (Argon2, bcrypt, scrypt, PBKDF2); NTLM/LM, MySQL/PostgreSQL hash generators; hash type identifier, hash cracker (dictionary attack), password strength checker, random password/passphrase/PIN generators
Data Tools PII anonymizer/redactor, data faker (44 Faker.js-style presets), random/custom data generator, sample data generator (users, orders, products, logs), mock REST API generator, JSON formatter/minifier/validator, JSON tree visualizer, JSON Path evaluator, JSON Schema validator (Ajv), table formatter/parser (Markdown, HTML, CSV, TSV), UUID generator (v1/v4) and validator
Linux Tools
Bash script generator, chmod command generator, cron job builder, disk usage/RAID calculator, .env file parser/auditor, iptables/nftables rule generator, command builder (find, grep, sed, awk, rsync, tar, curl, ssh, scp, ffmpeg, imagemagick), log parser (Apache, nginx, syslog, JSON Lines, systemd), package manager command translator (apt, dnf, pacman, brew, etc.), process signal reference, SSH config generator, systemd unit file generator, user/group manager, web server config generator (Apache, Nginx, Caddy)
File & Math Tools File size calculator (unit conversion, transfer time, storage fit), MIME type lookup, bitwise calculator (AND, OR, XOR, NOT, shifts)
All tools proxy to the live OnlineCyberTools API. The available tool set can be filtered via the OCTOOLS_TOOLS environment variable.
Provides tools for interacting with Symfony-based API endpoints from the Online Cyber Tools catalogue, enabling operations such as network diagnostics, encoding, hashing, search, and bug reporting.
onlinecybertools-mcp-server
MCP (Model Context Protocol) server that lets AI agents — Claude Code, Codex, Cursor, Continue, etc. — use the Online Cyber Tools catalogue as a set of native MCP tools.
What it exposes
One MCP tool per documented MCP-compatible
/api/tools/{category}/{tool}operation.POSTtools use their JSON request-body schema; compatibleGETtools use OpenAPI query/path parameters. Schemas are taken straight from the site's OpenAPI 3.1 spec at/api/openapi.json, so agents get per-tool argument validation. When the spec declares them, a tool also carries MCPannotations(titleplusreadOnlyHint/destructiveHint/idempotentHint, sourced fromx-mcp-annotations) and anoutputSchema(the inline200response object schema).A
searchmeta-tool that performs the same keyword search humans use, backed byGET /api/tools/search?q=....A
describe_toolmeta-tool that fetches the long page guidance, source links, page URL, API endpoint, and SEO description fromGET /api/mcp/tool-docs/{tool_id}. It accepts either a menu ID such aspingor an MCP tool name such asnetwork_ping.A
report_bugmeta-tool that files a structured bug report againstPOST /api/agent/bug-report(hard rate-limited).
Calls are proxied to the live HTTP API — no algorithm is re-implemented here.
That guarantees agents see whatever the deployed site does.
Generated tool descriptions are the operation's OpenAPI summary + description,
nothing else — no menu-ID prefix or describe_tool pointer (both read as
noise to a calling agent). The describe_tool meta-tool is still available
for agents that want the full page guidance on demand.
Related MCP server: DNS MCP Server
Tools
This server exposes 279 tools across 15 categories: Encoding/Decoding, Binary/Text Conversion, Cryptography & Hashing, Web Dev Utilities, Text Utilities, OSINT Tools, Networking Tools, Security Tools, SEO Tools, Linux Tools, Date & Time, Math & Calculators, Data Tools, File Tools, Reverse Engineering.
Full list (this repo):
TOOLS.md— every tool, grouped by category.Live catalogue: https://onlinecybertools.com/#browse-the-full-inventory
Machine-readable spec: https://onlinecybertools.com/api/openapi.json
Pick a subset / build a config: https://onlinecybertools.com/integrations/mcp-plugin-builder
This section and TOOLS.md are auto-generated from the live menu on
every release, so the count and list never drift.
Quick start
The package is published on npm as
onlinecybertools-mcp-server,
so any MCP client can launch it with npx -y onlinecybertools-mcp-server
— no clone, no global install. The config snippets below work as-is and
expose the full tool catalogue by default.
Prefer a guided setup? Generate a ready-made Claude Code plugin or Codex config block from the website's interactive builder:
https://onlinecybertools.com/integrations/mcp-plugin-builder
The builder lets you pick a subset of tools and emits the matching
OCTOOLS_TOOLS filter for you (see Configuration).
Configuration
Configure via environment variables. All are optional.
Variable | Default | Purpose |
|
| Site to proxy requests to. |
| (unset → all tools) | Comma-separated menu IDs ( |
|
| Max bytes accumulated from a streamed ( |
|
| Max wall-clock time spent buffering a streamed endpoint. |
When OCTOOLS_TOOLS is set, the server appends ?tools=... to the spec
fetch so the site returns a pre-filtered spec; the client also enforces the
filter as defense-in-depth.
Running
Inspector (manual smoke test)
npx @modelcontextprotocol/inspector npx -y onlinecybertools-mcp-serverOpen the inspector URL, click List Tools — you should see search,
describe_tool, report_bug, plus one entry per compatible Symfony API
operation. With no OCTOOLS_TOOLS set, the full catalogue is listed.
To hack on the server locally instead, clone and run from source:
git clone https://github.com/Jambozx/onlinecybertools-mcp-server.git
cd onlinecybertools-mcp-server
npm install
npx @modelcontextprotocol/inspector node index.mjsClaude Code
Add to ~/.claude.json (or your project's .mcp.json):
{
"mcpServers": {
"octools": {
"command": "npx",
"args": ["-y", "onlinecybertools-mcp-server"]
}
}
}This exposes every tool. To restrict the surface, add an env block with
OCTOOLS_TOOLS:
{
"mcpServers": {
"octools": {
"command": "npx",
"args": ["-y", "onlinecybertools-mcp-server"],
"env": {
"OCTOOLS_TOOLS": "base64_encode,sha256,hash"
}
}
}
}Codex
Add to ~/.codex/config.toml:
[mcp_servers.octools]
command = "npx"
args = ["-y", "onlinecybertools-mcp-server"]To restrict the surface, add an env line with OCTOOLS_TOOLS:
[mcp_servers.octools]
command = "npx"
args = ["-y", "onlinecybertools-mcp-server"]
env = { OCTOOLS_TOOLS = "base64_encode,sha256,hash" }Cursor / Continue / generic MCP client
Most clients accept the same command/args/env shape. Point them at
this package via npx -y onlinecybertools-mcp-server.
Streaming endpoints
Endpoints tagged x-mcp-compatible: stream-buffered in the spec (currently
traceroute and proxy-test streams) are read to completion and returned as a
single JSON envelope of accumulated SSE events. GET stream endpoints send tool
arguments as query parameters; POST streams send JSON bodies. Hard caps:
256 KiB of buffered output (
OCTOOLS_STREAM_BYTE_CAP)30 s of wall-clock time (
OCTOOLS_STREAM_TIME_CAP_MS)
Whichever cap fires first, the response envelope contains
{ "truncated": true } so the agent knows the output is partial.
Endpoints tagged x-mcp-compatible: none (multipart file uploads, etc.) are
skipped at registration — they will not appear in tools/list.
Limitations
Spec is fetched once at startup. If the site adds new endpoints, restart the server.
stdio transport only; no HTTP server (avoids needing auth in front of a privileged endpoint).
Published to npm as
onlinecybertools-mcp-server(npx -y onlinecybertools-mcp-server). Installing straight from GitHub (npx -y github:Jambozx/onlinecybertools-mcp-server) still works for the bleeding edge.
License
MIT.
Available Tools
262 toolsconversion_base_converterARead-onlyIdempotent
Numeric Base / Radix Converter (Base 2-36). Convert a number from one positional numeral base to another between base 2 and base 36 (binary, octal, decimal, hexadecimal, or any arbitrary radix), with full step-by-step working. This does NUMERIC base/radix math on a single number token; for converting character-string encodings (ASCII text to/from binary, hex, decimal, or octal) use conversion_number_base instead. Input digits 0-9 and A-Z are case-insensitive and must be valid for from_base (for example base 2 allows only 0-1). Runs locally on the value you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the converted output, the decimal value, per-digit conversion steps, base metadata, and common-base representations.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | The number to convert, expressed in from_base. Uses digits 0-9 then A-Z (case-insensitive), must be non-blank, and every character must be valid for from_base. | |
| from_base | No | Radix the input is written in (2-36). Defaults to 10 (decimal). | |
| to_base | No | Radix to convert the value into (2-36). Defaults to 10 (decimal). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded; false carries an error field instead of result. |
| error | No | Failure message when success is false (blank input, base out of the 2-36 range, or invalid digit for from_base). |
| result | No | Conversion payload (present when success is true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds concrete behavioral details: runs locally, no external service, rate-limited (60 req/min for anonymous). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences packed with essential information, no fluff. Front-loaded with core functionality, then usage distinction, then constraints and return details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description summarizes return values appropriately (converted output, decimal, steps, metadata, common bases). Covers all necessary aspects for a 3-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good parameter descriptions. Description adds extra context about case-insensitivity and digit validity (e.g., base 2 allows only 0-1), surpassing the schema's baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it converts numbers between bases 2-36 with step-by-step working, and explicitly distinguishes itself from the sibling tool conversion_number_base for character-string encodings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool vs conversion_number_base: for numeric base math on a single number token, not for character-string encoding conversions. Provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_bcdARead-onlyIdempotent
BCD Converter (Binary-Coded Decimal). Convert a decimal number to 8421 Binary-Coded Decimal (BCD), or decode BCD nibbles back to a decimal number. In BCD each decimal digit 0-9 is encoded independently as its own 4-bit group, so 25 becomes 0010 0101 rather than the pure-binary 11001. Only the standard 8421 weighting is supported (no excess-3 or 2421 variants). Use conversion_binary_decimal for whole-number pure base-2/decimal conversion, conversion_gray_code for reflected binary, or conversion_parity_bit for error-detection bits. Runs locally on the value you provide: read-only, non-destructive, offline, and rate-limited (60 requests/min anonymous). Returns the converted string, the echoed input/mode/formats, and a per-digit breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | Value to convert. For decimal-to-bcd, decimal digits 0-9 only, maximum 16 digits. For bcd-to-decimal, BCD interpreted per inputFormat (maximum 16 nibbles); each nibble must decode to 0-9. | |
| mode | Yes | Conversion direction. decimal-to-bcd encodes a decimal number as BCD; bcd-to-decimal decodes BCD nibbles back to a decimal number. | |
| outputFormat | No | BCD rendering for decimal-to-bcd output. nibbles is space-separated 4-bit groups, continuous is one unbroken bit string, hex is a 0x prefixed hexadecimal string. Ignored for bcd-to-decimal. | nibbles |
| inputFormat | No | How input is parsed for bcd-to-decimal. nibbles is space-separated 4-bit groups, continuous is a bit string whose length is a multiple of 4, hex is a 0x prefixed hexadecimal string. Ignored for decimal-to-bcd. | nibbles |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| input | No | The input value, echoed back. |
| mode | No | The conversion mode used: decimal-to-bcd or bcd-to-decimal. |
| outputFormat | No | The output format applied: nibbles, continuous, or hex. |
| inputFormat | No | The input format applied: nibbles, continuous, or hex. |
| result | No | The converted string (BCD groups or decimal number, per mode). |
| breakdown | No | Per-digit mapping between each decimal digit and its 4-bit BCD group. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses 'Runs locally on the value you provide: read-only, non-destructive, offline, and rate-limited (60 requests/min anonymous).' Describes return structure. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single paragraph but well-organized; each sentence provides essential information. Slightly verbose but not excessive; could be more structured with sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers conversion direction, BCD explanation, supported variants, limits, rate limits, return outputs, and sibling differentiation. Output schema exists. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage describing all 4 parameters. Description adds context about BCD encoding and constraints beyond schema, e.g., 'maximum 16 digits' and explanation of outputFormat options.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'BCD Converter (Binary-Coded Decimal). Convert a decimal number to 8421 Binary-Coded Decimal (BCD), or decode BCD nibbles back to a decimal number.' with an example. It also distinguishes from sibling tools like conversion_binary_decimal and conversion_gray_code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use conversion_binary_decimal for whole-number pure base-2/decimal conversion, conversion_gray_code for reflected binary, or conversion_parity_bit for error-detection bits.' Also notes maximum length constraints and input format requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_binary_decimalARead-onlyIdempotent
Binary And Decimal Number Converter. Convert a single number between binary (base 2) and decimal (base 10) in either direction, with unsigned or signed (two's-complement) interpretation across an 8/16/32/64-bit width and optional fractional (radix-point) support. Use this when you need bit-level detail for one number — a positional bit breakdown and two's-complement handling at a fixed width. Use conversion_base_converter instead to convert one integer between arbitrary radixes 2-36, conversion_number_base to map a string of byte values across ASCII/binary/hex/decimal/octal, and conversion_decimal_hex for decimal-hex conversions. Runs locally via the shared logic runner: read-only, non-destructive, offline, no auth, default rate limit. Returns the converted string plus the echoed settings and, for binary-to-decimal, a per-bit breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Conversion direction. | |
| input | Yes | The number to convert. For binary-to-decimal, digits 0/1 with an optional fractional part (e.g. "1010" or "101.1"). For decimal-to-binary, a decimal value with optional sign/decimal point (e.g. "-42" or "5.25"). Leading/trailing whitespace is trimmed. | |
| numberType | No | Interpretation of the value. 'signed' enables two's-complement at the given bitWidth; 'unsigned' treats it as non-negative. | unsigned |
| bitWidth | No | Fixed width for signed (two's-complement) interpretation. Required to be one of the enum values when numberType is 'signed'; ignored for unsigned. | |
| allowFractional | No | When true, permits a fractional (radix-point) part; when false, a fractional input is rejected with an error. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when conversion succeeded; false on validation error. |
| result | No | The conversion result (present when success is true). |
| error | No | Error message (present when success is false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true, destructiveHint=false, idempotentHint=true), the description adds important behavior: runs locally, offline, no auth, default rate limit. Also describes return value structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise, front-loading purpose and usage, then behavior. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool's complexity (5 parameters, multiple modes, fractional support, signed/unsigned, bit width), the description covers essential usage, behavioral traits, and return value. Paired with output schema and annotations, it's complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good parameter descriptions. The description adds minimal per-parameter meaning beyond the schema, but includes global context. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts a single number between binary and decimal, with specific details about direction, bit width, and fractional support. It distinguishes from siblings by naming alternative tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool (bit-level detail for one number) and when to use alternatives (conversion_base_converter, conversion_number_base, conversion_decimal_hex). Provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_brailleARead-onlyIdempotent
Braille Converter (Grade 1 & 2). Convert text to and from Unicode Braille patterns (U+2800-U+28FF), in either uncontracted Grade 1 (letter-by-letter) or contracted Grade 2 (word/letter-group contractions). Use it to preview how labels, signage, or short copy render in braille cells, or to read back braille into Latin text; it is a preview/education aid, not a certified textbook/Nemeth/music transcription engine. Runs locally on the supplied text: read-only, non-destructive, contacts no external service, and is rate-limited. Returns the braille (or decoded text) string, the ASCII-braille form, per-conversion analysis stats, and reference braille_info for the chosen grade.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Input to convert: plain text when operation=encode, or a Unicode braille string when operation=decode. Trimmed; must be non-empty. Unsupported characters become the question-mark braille cell. | |
| operation | Yes | encode = text to braille; decode = braille to text. | |
| grade | No | 1 = uncontracted (each letter individually); 2 = contracted (uses word/letter-group contractions, ~20-30% shorter). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| result | No | The converted output: braille for encode, Latin text for decode. |
| analysis | No | Per-conversion stats (operation, input_length, output_length, compression_ratio, character_stats, braille_stats); null on error. |
| braille_info | No | Reference facts for the selected grade (name, description, cell_structure, inventor, supported_chars, etc.). |
| grade | No | The braille grade used. |
| ascii_braille | No | ASCII-braille (computer braille) form of the braille output. |
| error | No | Error message, present only when success is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds value by stating it runs locally, is read-only, non-destructive, contacts no external service, is rate-limited, and details return values (braille string, ASCII-braille, stats, reference). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph with no redundant information. It front-loads the core purpose and then adds necessary details about usage, behavior, and output. Every sentence is meaningful and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (two grades, encode/decode, output structure) and the existence of an output schema, the description fully explains what the tool does, its limitations (not certified), behavior (local, rate-limited), and return value structure. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (text, operation, grade) with descriptions and examples. The description does not add additional parameter-level detail but provides context for the overall function. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a Braille Converter for Grade 1 & 2, converting between text and Unicode Braille patterns. It differentiates from sibling converters by specifying grades and use cases (preview/education aid), making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use: 'preview how labels, signage, or short copy render in braille cells' and 'read back braille into Latin text.' It also clarifies it is not for certified transcriptions (textbook/Nemeth/music), providing clear context. It does not mention alternatives among siblings but is sufficiently precise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_color_codeARead-onlyIdempotent
Color Code Converter. Convert a single color string between HEX, RGB, HSL, and HSV, returning all four representations at once plus normalized channel values. Accepts hex (#RGB or #RRGGBB), rgb()/comma-triple, hsl(), hsv(), and 140+ CSS color names; the inputFormat argument names the expected source notation but a CSS color name is always tried as a fallback. Use webdev_hex_color instead when you want richer single-color analysis (CMYK, harmony palettes, WCAG contrast), or webdev_color_palette when you only want harmony schemes. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/min anonymous). Returns the color formatted as HEX, short HEX, RGB, HSL, and HSV strings, a preview hex, and r/g/b, h/s/l, h/sv/v, and brightness values.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | The color to convert. Format must match inputFormat: hex is #RGB/#RRGGBB, rgb is rgb(255,0,0) or a bare 255,0,0 triple, hsl is hsl(210,80%,60%) or 210,80,60, hsv is hsv(210,80%,60%) or 210,80,60. A CSS color name (red, teal, etc.) is accepted in any mode. Whitespace and case are ignored. Invalid input returns HTTP 400. | |
| inputFormat | No | The expected source notation of input. Determines which parser runs first; a CSS color name is tried as a fallback regardless. | hex |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| result | No | The color expressed in every supported format. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: runs locally, no external service, rate limit of 60 req/min, and invalid input returns HTTP 400. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured, front-loaded with purpose. Slightly verbose but clear and provides all necessary information in a single paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description covers input format, output, behavior, alternatives, and constraints fully. No gaps for an agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but description adds parsing behavior (fallback to CSS color names), examples, and default behavior for inputFormat, enhancing understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it converts a single color string between HEX, RGB, HSL, and HSV, returning all four representations. Distinguishes from siblings webdev_hex_color and webdev_color_palette with specific use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use alternatives: webdev_hex_color for richer analysis, webdev_color_palette for harmony schemes. Also mentions it's read-only, non-destructive, and rate-limited, guiding proper usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_decimal_hexARead-onlyIdempotent
Decimal And Hexadecimal Number Converter. Convert one whole number between decimal (base 10) and hexadecimal (base 16) in either direction, with unsigned or signed (two's-complement) interpretation at an 8/16/32/64-bit width and optional hex formatting (0x prefix, upper/lowercase, zero-padding). Use this when you need decimal-hex specifically with a step-by-step breakdown and fixed-width signed handling. Use conversion_binary_decimal for base-2 conversion, conversion_base_converter to convert an integer between arbitrary radixes 2-36, conversion_number_base to map a string of byte values across ASCII/binary/hex/decimal/octal, conversion_hex_ascii to turn hex into ASCII text, and conversion_bcd for binary-coded decimal. Runs locally via the shared logic runner: read-only, non-destructive, offline, no auth, default rate limit (60 requests/minute for anonymous callers). Returns the converted value plus the echoed settings and a per-step conversion breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Conversion direction. | |
| input | Yes | The number to convert. For decimal-to-hex, a whole decimal value with optional sign (e.g. "255" or "-42"). For hex-to-decimal, hex digits 0-9/A-F with an optional 0x prefix (e.g. "FF" or "0x1a"). Leading/trailing whitespace is trimmed; must not be blank. | |
| numberType | No | Interpretation of the value. 'signed' enables two's-complement at the given bitWidth; 'unsigned' treats it as non-negative. | unsigned |
| bitWidth | No | Fixed width for signed (two's-complement) interpretation. Must be one of the enum values when numberType is 'signed'; ignored for unsigned. | |
| hexOptions | No | Optional output formatting for decimal-to-hex (ignored for hex-to-decimal). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when conversion succeeded; false on validation error. |
| result | No | The conversion result (present when success is true). |
| error | No | Error message (present when success is false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds that the tool runs locally, is read-only, non-destructive, offline, no auth, and has a default rate limit. It also explains the return value includes a per-step breakdown. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that is information-dense and front-loads the main purpose. It could be slightly more structured, but it is concise and covers essential points without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, nested objects, and an output schema, the description adequately covers the tool's behavior and return format. It mentions the step-by-step conversion breakdown, which adds value beyond the schema. However, the description could be more structured for complex parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds context about step-by-step breakdown and fixed-width handling but does not significantly enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool converts a whole number between decimal and hexadecimal in either direction, with details on signed/unsigned, bit widths, and hex formatting. It clearly distinguishes from siblings by listing alternative tools for other conversions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('Use this when you need decimal-hex specifically with a step-by-step breakdown and fixed-width signed handling') and lists specific alternatives for other conversion needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_emojiARead-onlyIdempotent
Emoji Unicode And Shortcode Lookup. Look up emoji by glyph, name, keyword, category, or Unicode code point and return Unicode metadata (code point, hex U+ form, decimal, UTF-8 bytes) plus HTML entities. Use this when you have one search term and want full Unicode/HTML detail for matching emoji; use conversion/emoji/random instead to sample random emoji without a query, and encoding/unicode or encoding/html-entities for escaping arbitrary text rather than looking up emoji. Pure client-style compute over a built-in ~170-emoji database (no network, no external API); read-only and non-destructive. Rate limited to 60 requests per minute for anonymous callers.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Non-empty search term. Its meaning depends on search_type: an emoji glyph, an emoji name fragment, a keyword, an exact category id, or a Unicode code point (e.g. 1F600, U+1F600, 0x1F600). | |
| search_type | Yes | How to interpret query. 'emoji' matches an exact glyph; 'name' and 'keyword' do case-insensitive substring matches; 'category' is an exact category id; 'unicode' parses query as a hex code point. | name |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the lookup completed. |
| query | No | Echo of the submitted query. |
| search_type | No | Echo of the search_type used. |
| count | No | Number of entries in results. |
| error | No | Error message when success is false; absent on success. |
| results | No | Matching emoji entries (empty when none match). |
| emoji_info | No | Reference metadata about the emoji database (Unicode/Emoji version, categories, ranges, search tips); present on success. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description adds value by stating it's a 'pure client-style compute over a built-in ~170-emoji database (no network, no external API); read-only and non-destructive' and mentions rate limits of 60 requests per minute for anonymous callers. This provides useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with multiple sentences, each adding value. It front-loads the main purpose and then provides usage guidelines, behavioral notes, and parameter details. Slightly verbose but no wasted words; could be a bit more concise but still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and the presence of an output schema, the description covers all necessary aspects: purpose, usage, behavior (including database size and rate limits), and parameter semantics. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for both parameters (query and search_type). The description adds a brief summary of search types but does not significantly enhance the meaning beyond the schema. Baseline 3 is appropriate since the schema already does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to look up emoji by glyph, name, keyword, category, or Unicode code point and return Unicode metadata plus HTML entities. It uses specific verbs like 'look up' and 'return', and distinguishes itself from sibling tools like conversion/emoji/random, encoding/unicode, and encoding/html-entities. This makes the purpose very clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: 'when you have one search term and want full Unicode/HTML detail for matching emoji'. It also provides clear alternatives: 'use conversion/emoji/random instead to sample random emoji without a query, and encoding/unicode or encoding/html-entities for escaping arbitrary text rather than looking up emoji'. This is excellent guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_gray_codeARead-onlyIdempotent
Gray Code Converter (Reflected Binary). Convert a binary number to Gray code (reflected binary code) or a Gray code back to plain binary, using XOR between adjacent bits. Gray code is an ordering where only one bit changes between consecutive values, which minimizes errors in rotary encoders, analog-to-digital conversion, and Karnaugh maps. Use conversion_binary_decimal for plain base-2/decimal conversion or conversion_bcd for binary-coded decimal. Runs locally on the bit string you provide: read-only, non-destructive, offline, and rate-limited (60 requests/min anonymous). Returns the converted bit string, its decimal value, the Gray decimal value, an explanation, step-by-step XOR working, and bit properties.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Conversion direction. binary-to-gray treats input as plain binary and emits Gray code; gray-to-binary treats input as Gray code and emits plain binary. | |
| input | Yes | The bit string to convert, digits 0 and 1 only. Left-padded with zeros to bitWidth; must not exceed bitWidth digits. | |
| bitWidth | No | Fixed width in bits the input is zero-padded to (1-32). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| result | No | The Gray code conversion result. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), the description adds key behavioral traits: runs locally, is offline, rate-limited (60 req/min anonymous), and returns detailed output including step-by-step XOR working. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured and front-loaded: first sentence states core purpose, then use cases, then sibling differentiation, then behavioral details. Every sentence adds value; no wasted words despite medium length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completely covers the tool's purpose, usage guidelines, parameter meaning, behavioral traits, and output details (converted string, decimal values, explanation, XOR steps, bit properties). No gaps given the complexity and presence of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for each parameter. The description goes beyond by explaining the XOR algorithm, fixed-width padding with bitWidth, and providing example input. Adds significant meaning without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool converts between binary and Gray code, with clear verb ('convert') and resource ('binary number to Gray code or Gray code back to plain binary'). It distinguishes from siblings by naming conversion_binary_decimal and conversion_bcd for other conversions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use (Gray code conversion) and when-not-to-use ('Use conversion_binary_decimal for plain base-2/decimal conversion or conversion_bcd for binary-coded decimal'). Also notes read-only, non-destructive, offline, and rate-limited nature, guiding appropriate invocations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_hamming_codeARead-onlyIdempotent
Hamming Code Encoder and Decoder. Encode binary data into a Hamming error-correcting codeword or decode a codeword to detect and correct a single-bit error. In encode mode it inserts parity bits at power-of-two positions; in decode mode it computes the syndrome to locate and flip one flipped bit (Hamming distance 3: corrects 1-bit errors, detects up to 2-bit errors). Use it for error-correction coding demos and parity analysis; use conversion_parity_bit for a single even/odd parity bit, or conversion_gray_code for reflected-binary encoding. Runs locally on the bit string you provide: read-only, non-destructive, offline, and rate-limited (60 requests/min anonymous). Returns the codeword or recovered data bits plus the syndrome, error position, corrected codeword, and step-by-step working.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | "encode" turns data bits into a codeword; "decode" checks a codeword and corrects a single-bit error. | |
| input | Yes | Binary string (0/1 only). For encode its length must equal the type's data bits (4/11/26); for decode it must equal the total bits (7/15/31). | |
| hammingType | No | Code size: hamming-7-4 (4 data/3 parity), hamming-15-11 (11 data/4 parity), hamming-31-26 (26 data/5 parity). | hamming-7-4 |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation succeeded. |
| result | No | Encode and decode share input, mode, hammingType, output, steps, explanation, properties; the remaining fields depend on mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the encoding/decoding process (inserts parity bits, computes syndrome, flips bit) and return values (codeword, syndrome, error position, etc.). Aligns with annotations (readOnlyHint=true, destructiveHint=false) and adds rate limit info. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is informative but slightly verbose; could be tightened. However, it is well-structured with purpose, mechanism, and usage notes in a logical order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all essential aspects: purpose, parameters, behavior, return values (output schema exists), constraints, and sibling differentiation. No gaps for a tool of moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds meaningful context: explains mode options, input length constraints per mode and hammingType, and examples of valid inputs. This goes beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it encodes binary data into Hamming codewords and decodes codewords to detect/correct errors. It distinguishes from sibling tools like conversion_parity_bit and conversion_gray_code by specifying alternative uses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool ('for error-correction coding demos and parity analysis') and when to use alternatives ('use conversion_parity_bit for a single parity bit, or conversion_gray_code for reflected-binary encoding'). Also notes local, read-only, offline, and rate-limited constraints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_ieee754_floatARead-onlyIdempotent
IEEE 754 Floating-Point Converter. Decompose a decimal number into its IEEE 754 binary floating-point bits (sign, exponent, mantissa) at single (32-bit) or double (64-bit) precision, or reverse a binary/hex bit string back to its decimal value. Set mode to decimal-to-ieee754 or ieee754-to-decimal, precision to single or double, and (when decoding) inputFormat to binary or hex. Use this when you need the exact stored bit layout, the biased/actual exponent, or special-case detection (Zero, Subnormal, Infinity, NaN); use conversion_base_converter for plain integer radix conversion or conversion_binary_decimal for signed/unsigned integers. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the converted output plus a full bit breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | A decimal number (when mode is decimal-to-ieee754) or a bit string (when mode is ieee754-to-decimal). Must not be blank; whitespace is trimmed. | |
| mode | Yes | Direction of conversion: decimal number into IEEE 754 bits, or IEEE 754 bits back into a decimal number. | |
| precision | No | IEEE 754 width: single is 32-bit (8-bit exponent, 23-bit mantissa); double is 64-bit (11-bit exponent, 52-bit mantissa). | single |
| inputFormat | No | Format of input when decoding (mode ieee754-to-decimal): a binary bit string (32 or 64 bits) or a hex string (8 or 16 chars). Ignored when encoding. | binary |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| result | No | The conversion output and bit-level analysis. |
| error | No | Error message when success is false (HTTP 400). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds that it runs locally, is non-destructive, contacts no external service, and has a rate limit (60 requests/minute). This extra context is valuable and consistent with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: purpose first, then mode/precision details, then usage guidance, and finally behavioral notes. It is informative but slightly verbose; could be tightened without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, output exists), the description covers all necessary aspects: modes, precision, input format, special-case detection, and return value (full bit breakdown). It also distinguishes from siblings, providing a complete contextual picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for all 4 parameters. The description largely restates the enums and parameters (mode, precision, inputFormat) but adds little new semantics beyond tying them to usage context. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts between decimal and IEEE 754 binary floating-point, specifying modes (decimal-to-ieee754, ieee754-to-decimal) and precision. It also contrasts with sibling tools like conversion_base_converter and conversion_binary_decimal, making the purpose distinct and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool (need exact bit layout, exponent, special cases) and when to use alternatives (conversion_base_converter for integer radix, conversion_binary_decimal for signed/unsigned integers). Also notes it runs locally and is read-only, providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_morseARead-onlyIdempotent
Morse Code Encoder And Decoder. Encode plain text to International Morse Code or decode Morse back to text. Encoding upper-cases input and maps A-Z, 0-9 and common punctuation to dot/dash patterns, joining letters with a single space and words with a slash; unsupported characters become the Morse for a question mark. Decoding splits on the slash for words and spaces for letters and emits a question mark for any unrecognised symbol. Use this for dot-dash signalling; use conversion_braille for tactile braille cells and encoding_decoding_baconian for the A/B Baconian cipher. Runs locally on the supplied text: read-only, non-destructive, offline, no auth, default rate limit. Returns the converted string plus an analysis block (symbol/character counts, ratios) and reference morse_info.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Input to convert: plain text when operation is encode, or a Morse string (dots, dashes, spaces between letters, a slash between words) when operation is decode. Trimmed; must be non-empty. Unsupported text characters encode to the Morse for a question mark; unrecognised Morse tokens decode to a question mark. | |
| operation | Yes | encode converts text to Morse code; decode converts Morse code to text. Required; any other value returns a 400 error. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| result | No | The converted output: Morse code for encode, Latin text for decode. |
| analysis | No | Per-conversion stats (operation, input_length, output_length, compression_ratio, character_stats, morse_stats: dots, dashes, total_symbols, word_separators, char_separators, dot_dash_ratio); null on error. |
| morse_info | No | Reference facts (name, description, dot_duration, dash_duration, char_separator, word_separator, supported_chars, inventor, standard, common_uses). |
| error | No | Error message, present only when success is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint), the description adds detailed behavioral traits: encoding upper-cases input, mapping to dot/dash patterns, joining with spaces and slashes, handling unsupported characters, decoding splits on slashes and spaces, and emitting question marks for unrecognized symbols. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loading the purpose, then behavioral details, usage guidance, safety notes, and return value format. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description still explains the return format ('converted string plus an analysis block and reference morse_info'). Covers encoding and decoding behaviors, constraints, and alternatives comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by specifying that text must be non-empty and trimmed, and explains behavior for unsupported characters during encoding and decoding, which is not fully covered in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a Morse Code Encoder and Decoder, with specific verb+resource. It distinguishes itself from sibling tools like conversion_braille and encoding_decoding_baconian by mentioning their use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: 'Use this for dot-dash signalling; use conversion_braille for tactile braille cells and encoding_decoding_baconian for the A/B Baconian cipher.' It also states that it runs locally and is non-destructive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_number_baseARead-onlyIdempotent
ASCII / Binary / Hex / Decimal / Octal Converter. Convert a string of values between five textual encodings — ASCII text, binary, hexadecimal, decimal, and octal — treating the input as a sequence of byte/codepoint values rather than a single number. Use this when you need to move character data across base representations (e.g. binary "01001000" to ASCII "H"); use conversion_base_converter instead to convert one integer between arbitrary radixes 2-36, conversion_binary_decimal for signed/unsigned binary-decimal with a bit width, and conversion_decimal_hex for decimal-hex with two's-complement options. Runs locally on the supplied text: read-only, non-destructive, offline, no auth, default rate limit. Returns the converted string plus an analysis block (lengths, value range, encoding efficiency).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The value(s) to convert, parsed per from_format (space/comma-separated for numeric formats). | |
| from_format | Yes | Encoding of the input text. Decimal/octal values must be 0-1114111 per item. | |
| to_format | Yes | Encoding to produce in the result string. | |
| hex_delimiter | No | Separator between hex bytes when to_format is hex; use "\x" for \xNN style (no separator). Ignored otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| result | No | The input re-encoded in to_format (empty string on error). |
| error | No | Error message; present only when success is false. |
| analysis | No | Conversion stats (null on error): input_length, output_length, values_count, value_range{min,max}, formats{from,to}, printable_chars (ASCII input only, else null), encoding_efficiency{compression_ratio,space_saving}. |
| format_info | No | Reference info for to_format (name, description, base, chars, example). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description reinforces these with 'read-only, non-destructive, offline, no auth' and adds that it returns a converted string plus an analysis block. This adds context beyond the annotations without contradiction. Slight deduction because some behavioral traits (e.g., exactly what the analysis block contains) are not detailed, but the description is sufficient given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, followed by usage guidance and behavioral context. Every sentence earns its place with no redundancy or wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters (100% schema coverage), no nested objects, and an existing output schema, the description covers the tool's purpose, usage scope, behavioral traits, and return structure (converted string + analysis block). It is fully complete for an agent to understand how and when to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add significant meaning beyond the schema; it mentions that decimal/octal values must be 0-1114111, which is already in the schema's from_format description. No additional parameter details are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts between five textual encodings (ASCII, binary, hex, decimal, octal) as sequences of byte/codepoint values. It distinguishes from siblings like conversion_base_converter (single integer arbitrary radix), conversion_binary_decimal (signed/unsigned with bit width), and conversion_decimal_hex (two's complement). The verb 'convert' and the specific resource (five encodings) are explicitly defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('when you need to move character data across base representations') and when not to, naming three specific alternatives. It also notes that the tool runs locally, is read-only, offline, requires no auth, and has default rate limits, helping the agent understand invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_octal_textARead-onlyIdempotent
Octal And Text Converter. Convert text to space- or newline-separated octal (base-8) byte values, or decode such octal values back to text, with ASCII or UTF-8 byte handling. Use this for octal specifically (e.g. reading C/assembly octal escapes or Unix-style byte dumps); for general radix math between bases 2-36 use conversion_number_base or conversion_base_converter, for hexadecimal text use encoding_decoding_hex_ascii, for binary text use encoding_decoding_binary_text, and for parsing numeric strings use conversion_string_number. Runs locally via a Node bridge on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Invalid octal digits (outside 0-7), values above 255, or malformed UTF-8 byte sequences return an error. Returns the converted string plus a per-byte breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | Data to convert: plaintext when mode is text-to-octal, or whitespace-separated octal byte values (each 0-7 digits, max 377 octal / 255 decimal) when mode is octal-to-text. Must not be blank. | |
| mode | Yes | Conversion direction. text-to-octal encodes text into octal byte values; octal-to-text decodes octal byte values back into text. | |
| encoding | No | Byte encoding. ascii maps each character to a single byte (codepoints > 127 become 63 / "?"); utf8 encodes/decodes multi-byte UTF-8, rejecting invalid sequences on decode. | utf8 |
| format | No | Separator for the octal output values when encoding (input octal is split on any whitespace regardless). space joins with single spaces; newline puts one value per line. | space |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| result | No | The conversion result object. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds that the tool runs locally via Node bridge, is read-only, non-destructive, contacts no external service, and is rate-limited (60 req/min). Also describes error conditions and return value (converted string + per-byte breakdown). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured and each sentence adds unique value: purpose, use case, alternatives, local/rate-limit behavior, error handling, output summary. No unnecessary words. Front-loaded with primary function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters (2 required, many enums), presence of output schema, and complexity of conversions, the description covers all necessary aspects: purpose, usage guidelines, constraints, error handling, and behavioral properties. Output schema presence reduces need to detail return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with descriptions for all 4 parameters. Description adds meaning: explains space/newline separator, ASCII vs UTF-8 handling, and clarifies that invalid inputs cause errors. Goes beyond schema by describing usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool converts between text and space/newline-separated octal byte values. It explicitly distinguishes from sibling tools by naming alternatives (conversion_number_base, encoding_decoding_hex_ascii, etc.) and specifying scenarios for use (C/assembly octal escapes, Unix dumps).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool (octal-specific tasks) and when to use alternatives (general radix math, hexadecimal, binary, string parsing). Lists several sibling tools with clear differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_parity_bitARead-onlyIdempotent
Parity Bit Calculator. Compute or verify a single parity bit for a binary string to support error DETECTION (not correction). In add mode it counts the 1 bits, derives the parity bit for the chosen scheme (even, odd, mark, or space), and appends it to form the codeword; in check mode it splits off the trailing bit, recomputes the expected parity from the leading data bits, and reports whether an error was detected. Parity catches only odd numbers of flipped bits and cannot locate or fix them — use conversion_hamming_code for single-bit correction or conversion_gray_code for transition-error-resistant encoding. Runs locally on the bit string you provide: read-only, non-destructive, offline, and rate-limited (60 requests/min anonymous). Returns the parity bit, the full codeword (add mode), the error-detected flag (check mode), step-by-step working, an explanation, and parity-scheme properties.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | Binary string, digits 0 and 1 only. In check mode it must be at least 2 bits long (data bits plus a trailing parity bit). | |
| mode | No | add appends a computed parity bit to the data; check treats the last bit as the received parity and verifies it against the data bits. | add |
| parityType | No | Parity scheme. even/odd make the total 1 count even/odd; mark forces the parity bit to 1; space forces it to 0. | even |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the operation succeeded. |
| result | No | The parity calculation or verification result. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already denote read-only and idempotent. The description adds rate-limit (60 req/min), offline execution, and details how parity computation works, enhancing transparency without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, starting with purpose, then modes, limitations, alternatives, and output. Every sentence adds value; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, modes, limitations, alternatives, operational context (read-only, offline, rate-limited), and output details. With output schema present, the description is complete and self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description provides additional context: constraints (e.g., input length for check mode), purpose of modes and parity types, and examples. This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes or verifies a parity bit, and distinguishes itself from related tools like conversion_hamming_code and conversion_gray_code by noting it is for detection only, not correction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use (for error detection) and when not (for correction), and suggests alternatives. It also explains the two modes (add/check) and the available parity schemes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_roman_numeralsARead-onlyIdempotent
Roman Numerals Converter. Convert an integer to a Roman numeral or parse a Roman numeral back to an integer, over the standard 1-3999 range (largest value MMMCMXCIX). Set direction to to_roman or to_arabic, or leave it auto to detect from the input (letters I V X L C D M parse as Roman; digits parse as a number). Validates subtractive notation and rejects out-of-range or malformed input with an error. Use conversion_number_base or conversion_base_converter instead for binary/octal/hex radix conversion. Runs locally: read-only, non-destructive, offline, and rate-limited. Returns the converted value plus conversion steps, a character breakdown, historical facts, and alternative representations (binary, octal, hex, words, ordinal).
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | Value to convert: an integer 1-3999 (e.g. 2024) or a Roman numeral (e.g. MCMXCIV). Trimmed; Roman input is case-insensitive. | |
| direction | No | Conversion direction. auto detects from input (letters I V X L C D M to_arabic, digits to_roman); to_roman forces integer-to-Roman; to_arabic forces Roman-to-integer. | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| error | No | Error message when success is false (e.g. out-of-range or invalid Roman numeral). |
| result | No | The conversion result (present when success is true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent. The description adds valuable context: runs locally, offline, rate-limited, validates subtractive notation, rejects out-of-range/malformed input. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear leading sentence and subsequent details. It is slightly lengthy but every sentence adds value, with no redundancy. Could be trimmed slightly for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (2 params, output schema exists), the description covers all key aspects: range, validation, direction, return details (steps, breakdown, facts, alt representations). It is fully complete for accurate use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and parameter descriptions are clear. The description enriches them by explaining direction auto-detection, case-insensitive Roman input, trimming, and examples, adding meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts integers to Roman numerals and vice versa within 1-3999. It specifies the exact verb 'Convert' and resource 'Roman numeral', and distinguishes from siblings by referencing conversion_number_base/conversion_base_converter for other radixes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use (standard Roman conversion) and when not (binary/octal/hex, point to alternative tools). Also explains auto-detection behavior, providing clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conversion_string_numberARead-onlyIdempotent
String / Number Format Converter. Convert text between six representations of the same underlying numeric values: string (each character as its Unicode code point), integer, float, scientific notation, English number words (zero-twenty, tens, hundred, thousand, million), and Roman numerals. Parsing string reads each character code point; the other types read space/comma/newline-separated tokens. Use this to map characters to/from code points or to reformat a list of numbers; use conversion_roman_numerals for a dedicated Roman converter, and conversion_number_base for ASCII/binary/hex/octal byte encodings. Runs locally on the supplied text: read-only, non-destructive, offline, no auth, default rate limit. Returns the converted string, an analysis block, and reference info for the target format.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Value(s) to convert. For from_type=string the whole text is read character-by-character; for numeric types it is split on spaces, commas, and newlines into separate values. Must be non-empty. | |
| from_type | Yes | How to interpret the input. string=Unicode code points per character; integer/float/scientific=numeric tokens; words=English number words; roman=Roman numerals. | |
| to_type | Yes | Output format. string emits one character per code point; float fixes 3 decimals; scientific uses 3-digit exponential; roman supports 1-3999; words covers 0-99 then falls back to digits. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| result | No | The values rendered in to_type (empty string on error). |
| error | No | Error message; present only when success is false (e.g. empty input, invalid token, unknown number word). |
| analysis | No | Conversion stats (null on error): input_length, output_length, values_count, value_statistics{min,max,average,sum}, conversion_type{from,to}, data_type_analysis{integers,floats,negative,zero,positive}, encoding_info{source_format,target_format,reversible,precision_loss}. |
| format_info | No | Reference info for to_type (name, description, example, data_type); present only on success. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, idempotent. The description adds concrete behavioral details: runs locally, offline, no auth, default rate limit. It also outlines parsing behavior and return contents, complementing annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4-5 sentences) and well-structured: name, enumeration, parsing details, usage guidance, operational context, return info. Some minor redundancy but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 params, 6 representations, parsing rules) and existing output schema, the description covers major aspects: supported types, parsing behavior, conversion constraints, and sibling distinctions. Could clarify multi-value output but schema likely covers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds significant meaning: parsing rules per from_type (character-by-character vs token splitting), output format specifics (3 decimals for float, exponential for scientific, range limits for roman and words). This goes beyond enum labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as a 'String / Number Format Converter' that converts between six representations. It enumerates the types and differentiates from siblings by naming conversion_roman_numerals and conversion_number_base as alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using this tool for mapping characters to/from code points or reformatting number lists, and directs users to specialized tools for Roman numerals and number base conversion. This provides clear when-to and when-not-to guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_timestampARead-only
Unix Timestamp Converter. Convert a Unix epoch timestamp to a human-readable date, or parse a date string back to a Unix timestamp, with full UTC and local-time breakdowns. Auto-detects the input format: 10-digit Unix seconds, 13-digit Unix milliseconds, ISO 8601, or any parseable date string. Unlike time_iso_8601_formatter (which only parses and formats ISO 8601 / RFC 3339 strings) or time_date_difference (which measures spans between two dates), this tool centres on a single instant and emits every common representation of it at once. Requires a non-empty input; it does not fall back to the current time. Runs locally on the value you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the detected format plus Unix seconds, milliseconds, ISO 8601, UTC, local strings, and a calendar analysis (weekday, day/week of year, quarter, leap-year flag, days in month, timezone offset, and a now-relative phrase that varies between cal
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | The timestamp or date to convert. Accepts 10-digit Unix seconds, 13-digit Unix milliseconds, an ISO 8601 datetime, or any parseable date string. Must not be blank (also accepted under the keys timestamp or text). | |
| now | No | Optional reference instant in Unix milliseconds used only to compute the relative phrase (for example 2 days ago). Omit to use the server current time, which makes the relative field vary between calls. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| detectedFormat | No | The input format that was auto-detected (for example Unix Timestamp seconds, ISO 8601, or Date String). |
| results | No | The converted instant in multiple representations. |
| error | No | Present only on a 400 error response; the failure reason. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds behavioral details: runs locally, read-only, non-destructive, rate-limited (60 req/min for anonymous), and auto-detects formats. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and well-organized, but appears truncated at the end ('...varies between cal'). This indicates the provided text is incomplete, reducing conciseness and structure. Otherwise, it would be a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite truncation, the description covers input format auto-detection, output fields, constraints, behavioral traits, and alternative tools. Given the existence of an output schema, this is comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds useful context: the 'input' parameter also accepts alias keys ('timestamp' or 'text'), must not be blank, and the 'now' parameter is optional for relative phrases. This exceeds baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Unix Timestamp Converter' and explains it converts between Unix epoch timestamps and human-readable dates. It auto-detects input formats and distinguishes itself from sibling tools like time_iso_8601_formatter and time_date_difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool vs alternatives by naming specific sibling tools and explaining differences. Also notes constraints: requires non-empty input and does not fall back to current time.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_argon2ARead-only
Generate Argon2 Password Hash. Hash a plaintext password with the Argon2 memory-hard KDF, returning a self-describing PHC-encoded hash plus the parsed parameters and salt. A fresh random salt is generated on every call, so the same input yields a different hash each time (non-idempotent). Use this to create a new hash; use crypto_argon2_verify to check a password against an existing one. Argon2 is the recommended modern KDF — prefer it over crypto_bcrypt (no memory hardness), crypto_scrypt, and the legacy crypto_pbkdf2. Runs server-side on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (5 requests/min, 30/hour, 100/day for anonymous callers; CAPTCHA may trigger above 20/hour). Returns the encoded hash, the variant, the m/t/p cost options, and the salt/length parsed back out.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | The plaintext password to hash. Required and must be non-empty. | |
| variant | No | Argon2 variant. argon2id (hybrid, recommended) resists both side-channel and GPU attacks; argon2i is data-independent only. | argon2id |
| memory | No | Memory cost in KiB (the m parameter). Higher is stronger but slower. | |
| time | No | Time cost / number of iterations (the t parameter). | |
| threads | No | Degree of parallelism / threads (the p parameter). |
Output Schema
| Name | Required | Description |
|---|---|---|
| password | No | The plaintext password that was hashed (echoed from the request). |
| hash | No | The encoded Argon2 hash in PHC format: $argon2id$v=19$m=65536,t=4,p=3$<saltBase64>$<hashBase64>. |
| variant | No | The variant used to hash, argon2id or argon2i. |
| variantName | No | Human-readable variant label, e.g. Argon2id. |
| options | No | The cost parameters applied to the hash. |
| info | No | Components parsed back out of the encoded hash. |
| length | No | Character length of the encoded hash string. |
| generatedAt | No | ISO 8601 timestamp of when the hash was generated. |
| verified | No | Always true — a self-check that the generated hash verifies against the input password. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds important behavioral context beyond annotations: fresh random salt per call (non-idempotent), server-side execution, read-only nature, no external service contact, rate limits (5/min, 30/hr, 100/day). Annotations already declare readOnlyHint=true and idempotentHint=false, but description enriches with specifics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with title, purpose, usage guidance, comparisons, and behavioral notes. It packs substantial information but remains readable; minor trimming could improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, output schema, annotations), the description fully covers purpose, usage, behavior, rate limits, and alternatives. No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions, examples, enums, and defaults for all 5 parameters. Description adds minimal extra meaning beyond schema (e.g., 'required and non-empty' for password). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Generate Argon2 Password Hash' and explains the exact function: hash a plaintext password with Argon2 KDF, returning PHC-encoded hash plus parsed parameters. It distinguishes from sibling crypto_argon2_verify and other crypto tools like crypto_bcrypt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool (create new hash) vs. crypto_argon2_verify (check password). Recommends Argon2 over bcrypt, scrypt, pbkdf2, providing clear alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_argon2_verifyARead-onlyIdempotent
Argon2 Hash Verifier. Check whether a plaintext password matches an existing Argon2 hash using PHP's password_verify, which reads the variant, version, and m/t/p parameters from the encoded hash itself. Use this to verify a candidate password; use crypto_argon2 instead to generate a new hash. Runs server-side on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (5 requests/min, 30/hour, 100/day for anonymous callers; CAPTCHA may trigger above 20/hour). Returns whether the password matched plus the parameters parsed from the hash.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | The plaintext password to test against the hash. | |
| hash | Yes | The encoded Argon2 hash to verify against, in PHP's PHC format produced by crypto_argon2: $argon2id$v=19$m=65536,t=4,p=3$<saltBase64>$<hashBase64>. The variant, version, and m/t/p cost parameters are read from this string; argon2i and argon2id are both accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| password | No | The plaintext password that was tested (echoed from the request). |
| hash | No | The encoded Argon2 hash that was checked (echoed from the request). |
| verified | No | True when the password matches the supplied hash. |
| info | No | Components parsed from the hash. Contains only {error} when the hash has fewer than six $-delimited segments. |
| verifiedAt | No | ISO 8601 timestamp of when verification ran. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds critical context: runs server-side, rate limits (5/min, 30/hr, 100/day), CAPTCHA trigger, and return type (match status + parsed parameters). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, usage vs alternative, and behavioral details (rate limits, output). Front-loaded with key info; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 required params, output schema exists), the description covers purpose, usage, behavior, rate limits, and output. Annotations and schema are rich, so no gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers both parameters fully (100% coverage with descriptions and examples). Description adds that hash includes cost parameters, but this is already in the schema's description of 'hash'. No additional meaningful semantics beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose ('verify a plaintext password against an Argon2 hash') and distinguishes it from the sibling 'crypto_argon2' (generate new hash). The verb 'verify' and resource 'Argon2 hash' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use ('to verify a candidate password') and when not ('use crypto_argon2 instead to generate a new hash'). Also notes behavior: read-only, non-destructive, no external service, and rate limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_bcryptARead-only
Bcrypt Password Hasher. Hash a plaintext password with bcrypt at a chosen cost factor, generating a fresh random salt on every call. Use this to create a new stored password hash; use crypto_bcrypt_verify instead to check a password against an existing hash, and crypto_argon2 / crypto_scrypt / crypto_pbkdf2 for the other adaptive/memory-hard password KDFs. Runs locally with PHP password_hash on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (5 requests/minute for anonymous callers). Because a new salt is drawn each call, the same password yields a different hash each time. Returns the bcrypt hash string plus the cost, salt, parsed format breakdown, and a strength analysis of the chosen cost factor.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | The plaintext password to hash. Must be non-empty. | |
| cost | No | Bcrypt cost factor (log2 of the key-expansion rounds); higher is slower and more brute-force resistant. 12 is recommended for production. Values outside 4-15 are rejected with a 400. |
Output Schema
| Name | Required | Description |
|---|---|---|
| password | No | The plaintext password that was hashed (echoed back from the request). |
| hash | No | The bcrypt hash in modular crypt format $2y$<cost>$<22charSalt><31charDigest>. |
| cost | No | The cost factor used to generate the hash. |
| algorithm | No | Always "bcrypt". |
| salt | No | The 22-character base64 salt parsed from the generated hash. |
| duration | No | Time taken to generate the hash, in seconds (rounded to 3 decimals). |
| info | No | Fields parsed from the generated bcrypt hash. |
| format | No | Structural breakdown of the hash string. |
| security | No | Strength analysis of the chosen cost factor. |
| error | No | Present only on a 4xx/5xx error response (e.g. missing password or cost out of range); absent on success. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description specifies local execution, read-only and non-destructive nature, no external service contact, rate limiting, and non-idempotent behavior due to fresh salt per call. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence provides distinct value: purpose, usage, behavior, return details. Front-loaded and no redundant or vague phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary aspects: purpose, when to use, behavior, parameters with recommendations, and output summary (hash string, cost, salt, etc.). With output schema present, return values are adequately described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions and examples, but the description adds context like recommended cost (12), valid range, and the effect of salt. This adds marginal value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool hashes a plaintext password with bcrypt for creating new stored password hashes, and differentiates it from sibling tools like crypto_bcrypt_verify and other KDFs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use (create new hash) and when to use alternatives (crypto_bcrypt_verify for verification, other KDFs for different algorithms). Also mentions rate limiting for anonymous callers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_bcrypt_verifyARead-onlyIdempotent
Bcrypt Password Verifier. Check whether a plaintext password matches an existing bcrypt hash, using the cost and salt that bcrypt encodes inside the $2a$/$2b$/$2x$/$2y$ hash string. Use this to verify a candidate password against a stored hash; use crypto_bcrypt instead to generate a new hash. Runs locally with PHP password_verify on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (5 requests/minute for anonymous callers). Returns whether the password matched, the cost/salt/version parsed from the hash, and a strength analysis of that cost factor.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | The plaintext password to test against the hash. | |
| hash | Yes | The bcrypt hash to verify against, in modular crypt format $2<version>$<cost>$<22charSalt><31charDigest> as produced by crypto_bcrypt. The cost and salt are read from this string to recompute the digest and compare it against the supplied password; no separate cost or salt parameter is needed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| password | No | The plaintext password that was tested (echoed back from the request). |
| hash | No | The bcrypt hash that was verified against (echoed back from the request). |
| valid | No | True when the password matches the supplied bcrypt hash. |
| duration | No | Time taken to run the verification, in seconds (rounded to 3 decimals). |
| info | No | Fields parsed from the bcrypt hash; contains only error when the hash format is invalid. |
| format | No | Structural breakdown of the hash string. |
| security | No | Strength analysis of the parsed cost factor; null when no cost could be read from the hash. |
| error | No | Present only on a 4xx/5xx error response (e.g. missing password or hash); absent on success. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations by specifying that it runs locally with PHP password_verify, is read-only, non-destructive, contacts no external service, and has rate limits. This aligns with annotations (readOnlyHint, destructiveHint, idempotentHint) and adds valuable behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two main parts: upfront purpose and usage guidance, then behavioral details. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with output schema, the description covers purpose, usage, behavior, parameter semantics, and return details (matching, parsed fields, strength analysis). It is fully adequate for the agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions and examples for both parameters. The description adds useful context that the cost and salt are read from the hash string, eliminating the need for separate parameters, which enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Bcrypt Password Verifier' and explains that it checks whether a plaintext password matches an existing bcrypt hash. It distinguishes itself from sibling tool crypto_bcrypt by noting that the sibling should be used for generating new hashes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('verify a candidate password against a stored hash') and provides an alternative ('use crypto_bcrypt instead to generate a new hash'). Also mentions rate limits and local execution for context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_blake2ARead-onlyIdempotent
BLAKE2 Hash Generator. Compute a BLAKE2b or BLAKE2s digest of a text string, with an optional keyed (HMAC-style) mode and a choice of eight output lengths (BLAKE2b-512/384/256/160, BLAKE2s-256/224/160/128). Use crypto_blake3 for the faster XOF-capable successor, crypto_hash for MD5/SHA-1/SHA-256/SHA-512, crypto_sha3 for SHA-3/Keccak, crypto_whirlpool for Whirlpool, or crypto_ripemd for RIPEMD; reach for BLAKE2 when you want an RFC 7693 digest faster than SHA-2 at SHA-3-level security, or a keyed MAC (used by Zcash, Nano, argon2). Runs locally on the input you provide: read-only, non-destructive, deterministic (keyed mode is deterministic too), contacts no external service, and is rate-limited (5 requests/minute for anonymous callers). Returns the digest as lowercase hex plus uppercase hex, with the resolved variant, algorithm, encoding, byte length, bit count, and keyed flag.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Data to hash, interpreted per the encoding field. The empty string is valid. | |
| encoding | No | How to decode text into bytes before hashing: UTF-8 text (default), hex, or base64. Invalid hex/base64 is rejected. | text |
| variant | No | BLAKE2 variant and digest size. blake2b* is 64-bit-optimized (up to 512-bit); blake2s* is 8-to-32-bit-optimized (up to 256-bit). Defaults to blake2b512. | blake2b512 |
| key | No | Optional UTF-8 key. When non-empty, a keyed (MAC) digest is produced and the keyed flag becomes true; when omitted or empty, a plain unkeyed digest is returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hash | No | Digest as lowercase hex. |
| algorithm | No | Resolved variant id, e.g. blake2b512. |
| variant | No | Human-readable variant name, e.g. BLAKE2b-512. |
| length | No | Digest length in bytes. |
| bits | No | Digest length in bits (length x 8). |
| encoding | No | Resolved input encoding applied to text (text, hex, or base64). |
| keyed | No | True when a non-empty key was supplied (keyed/MAC digest). |
| uppercase | No | The same digest in uppercase hex. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds useful context: runs locally, deterministic, rate-limited (5 req/min for anonymous), contact no external service, and details output fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured, front-loading purpose and usage, then behavioral details, then output. Every sentence adds information, though slightly verbose for a concise tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, and the description details the return fields (digest formats, variant, algorithm, encoding, byte length, bit count, keyed flag). No gaps for this hash tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds significant value: explains variant optimization (64-bit vs 8-32-bit), encoding interpretation, keyed mode behavior, and return metadata (lowercase/uppercase hex, flags).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes BLAKE2b or BLAKE2s digests of a text string, with explicit variant options and keyed mode. It distinguishes from siblings like crypto_blake3, crypto_hash, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use (e.g., 'when you want an RFC 7693 digest faster than SHA-2 at SHA-3-level security') and directs to alternatives for other needs (crypto_blake3 for XOF, crypto_hash for MD5/SHA, etc.).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_blake3ARead-onlyIdempotent
BLAKE3 Hash Generator. Compute a BLAKE3 hash of a text string with configurable output length (1-1024 bytes, default 32), in plain-hash, keyed-MAC, or context key-derivation mode. Use crypto_hash instead for MD5/SHA-1/ SHA-256/SHA-512, crypto_sha3 for SHA-3, or crypto_keccak for the pre-standard Keccak used in Ethereum; reach for BLAKE3 when you want the fastest modern hash, an extendable (XOF) digest, a 32-byte keyed MAC, or KDF output from a context string. Runs locally on the input you provide: read-only, non-destructive, deterministic (no random salt), contacts no external service, and is rate-limited (5 requests/min anonymous). Returns the digest as lowercase hex, uppercase hex, and base64, plus the resolved mode, encoding, length, and bit count.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Message to hash. Interpreted per the encoding field. The empty string is valid (BLAKE3 of empty input is af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 at 32 bytes). | |
| encoding | No | How to decode text into bytes before hashing: UTF-8 text, hex, or base64. | text |
| mode | No | hash = plain BLAKE3 digest; keyed = 32-byte-keyed MAC (requires key); derive-key = KDF from a context string (requires context). | hash |
| length | No | Output digest length in bytes (BLAKE3 is an XOF). Defaults to 32 (256-bit). | |
| key | No | Keying material for mode=keyed. After decoding with keyEncoding it must be exactly 32 bytes. Required and used only when mode=keyed; ignored otherwise. | |
| keyEncoding | No | How to decode key into bytes (must yield 32 bytes). Only applies when mode=keyed. | text |
| context | No | Application-specific context string for mode=derive-key (decoded as UTF-8). Required and used only when mode=derive-key; ignored otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hash | No | Digest as lowercase hex. |
| hashBase64 | No | Same digest encoded as standard base64. |
| uppercase | No | Same digest as uppercase hex. |
| algorithm | No | Algorithm id, always blake3. |
| mode | No | Resolved hashing mode. |
| encoding | No | Resolved input encoding applied to text. |
| keyed | No | True when mode=keyed (a 32-byte key was applied). |
| length | No | Output length in bytes (1-1024). |
| bits | No | Output length in bits (length x 8). |
| context | No | Context string echoed back; present only when mode=derive-key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, etc.), the description adds key behaviors: 'Runs locally on the input you provide: read-only, non-destructive, deterministic (no random salt), contacts no external service, and is rate-limited (5 requests/min anonymous).'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and efficiently conveys purpose, usage guidelines, behavioral traits, and output format without redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, 3 modes), the description covers purpose, usage, behavior, parameters, and output format. Return values are explicitly described as 'digest as lowercase hex, uppercase hex, and base64, plus resolved mode, encoding, length, and bit count.'
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description adds value with context like 'The empty string is valid' and 'BLAKE3 is an XOF' for the length parameter, but most parameter details are already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'BLAKE3 Hash Generator' and explains it computes a hash with configurable modes. It explicitly distinguishes from sibling tools like crypto_hash, crypto_sha3, and crypto_keccak, specifying when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit alternatives: 'Use crypto_hash for MD5/SHA-1/SHA-256/SHA-512, crypto_sha3 for SHA-3, or crypto_keccak for pre-standard Keccak' and states when to reach for BLAKE3 (fastest modern hash, XOF, keyed MAC, KDF).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_checksumARead-onlyIdempotent
Checksum Calculator (CRC, Adler, Fletcher, FNV). Compute one or more non-cryptographic checksums and hashes over a UTF-8 text string for data-integrity and error-detection checks. Supports CRC32, CRC32B, CRC-16, Adler-32, Fletcher-16/32, FNV-1/FNV-1a (32 and 64-bit), Jenkins one-at-a-time, plus MD5/SHA-1/ SHA-256/SHA-384/SHA-512. Use it when you need fast verification or legacy checksums; use crypto_hash for cryptographic file/text digests, or crypto_hash_identifier to detect an unknown hash's algorithm. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited. Returns a map of algorithm-id to checksum string, the byte length of the input, the algorithms that produced output, and the output format used.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The UTF-8 text to checksum. Required and must be non-empty; hashed as raw bytes. | |
| algorithms | Yes | One or more checksum algorithm ids to compute. Unknown ids are silently skipped; at least one valid id is required. | |
| outputFormat | No | Numeric-base/case for the output. Numeric checksums honour all five values; fixed hex-digest algorithms (md5, sha1, sha256, sha384, sha512, crc32b) only vary case between "hex" (lower) and "upper". | hex |
Output Schema
| Name | Required | Description |
|---|---|---|
| checksums | No | Map of requested algorithm id to its checksum string, formatted per outputFormat. |
| inputLength | No | Byte length of the input text. |
| algorithms | No | Algorithm ids that produced a result (unknown ids dropped). |
| outputFormat | No | The normalized output format applied (one of hex, upper, decimal, binary, octal). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint, etc.) are reinforced and expanded by the description: 'Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited.' The return value structure is also disclosed. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences structured with title/purpose, algorithm list, usage guidance, behavioral notes, and return value summary. Front-loaded and concise; every sentence adds distinct value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with many algorithms and output format nuances, the description covers purpose, usage, behavior, and return format. Output schema exists and the description summarizes it. A minor gap: no explicit clarification of output format behavior for non-numeric algorithms, but the schema covers it. Overall sufficient for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for each parameter (text, algorithms, outputFormat). The description adds high-level context (e.g., 'non-cryptographic' though including cryptographic hashes) but does not substantially augment schema-level parameter semantics beyond reinforcing the purpose. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it computes non-cryptographic checksums and hashes over UTF-8 text, listing supported algorithms (CRC, Adler, Fletcher, FNV, SHA, etc.). It distinguishes from siblings by referencing crypto_hash for cryptographic digests and crypto_hash_identifier for detection, establishing a specific verb+resource with explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use it when you need fast verification or legacy checksums; use crypto_hash for cryptographic file/text digests, or crypto_hash_identifier to detect an unknown hash's algorithm.' It also notes the tool is read-only, non-destructive, and rate-limited, giving clear context for when to invoke versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_hashARead-onlyIdempotent
Cryptographic Hash Generator (MD5, SHA, CRC32, Adler32). Compute one or more hash digests of a UTF-8 text string in a single call. Supports MD5, SHA-1, SHA-256, SHA-512 cryptographic hashes plus CRC32 and Adler32 checksums, returned as a lowercase or uppercase hex string per algorithm. Use crypto_hash for general text digests; use crypto_checksum for the wider non-cryptographic checksum set (Fletcher, FNV, CRC variants), crypto_hmac for keyed message authentication, or crypto_hash_identifier to detect an unknown hash's algorithm. Runs locally on the input you provide: deterministic, read-only, non-destructive, contacts no external service, and is rate-limited. Returns a map of algorithm id to hex digest, the algorithms that produced output, the output format, and the input byte length.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The UTF-8 text to hash. Hashed as raw bytes; an empty string is permitted and yields each algorithm's empty-input digest. | |
| algorithms | Yes | One or more algorithm ids to compute. Also accepts an object map of id to boolean. Unknown ids are silently skipped; if none are valid it falls back to md5 and sha256. | |
| outputFormat | No | Hex digit case for every digest: "hex" for lowercase, "HEX" for uppercase. Any other value is treated as "hex". | hex |
Output Schema
| Name | Required | Description |
|---|---|---|
| hashes | No | Map of algorithm id (md5, sha1, sha256, sha512, crc32, adler32) to its hex digest; algorithms not requested have an empty-string value. |
| algorithms | No | Algorithm ids that produced a digest (unknown ids dropped). |
| outputFormat | No | The normalized hex case applied (hex or HEX). |
| inputLength | No | Byte length of the input text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), the description adds local execution, determinism, no external service contact, rate-limiting, and return structure, fully disclosing behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences covering purpose, usage, behavior, and return value with no unnecessary words, well structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately explains inputs, outputs, and behavioral context, leaving no gaps for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters with descriptions, defaults, and enums. The description adds minimal meaning beyond the schema, e.g., noting hex case, but this is already in the outputFormat parameter description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes hash digests of a UTF-8 string, lists supported algorithms, and distinguishes from siblings like crypto_checksum, crypto_hmac, and crypto_hash_identifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool vs alternatives: 'Use crypto_hash for general text digests; use crypto_checksum for...', providing clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_hash_crackerARead-onlyIdempotent
Hash cracker (dictionary attack). Recover the plaintext behind a password hash by testing it against a wordlist — a supplied dictionary and/or a built-in common-password list. Use it to audit weak hashes; run crypto_hash_identifier first if the algorithm is unknown, and crypto_password_strength to score a password you already have. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited. Returns whether a match was found, the recovered password, the detected hash type, the number of attempts, and the elapsed seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes | The hash string to crack, e.g. an MD5/SHA/bcrypt digest. | |
| type | No | Hash algorithm. Leave as "auto" to detect it from the hash length/format, or set it explicitly to skip detection. | auto |
| dictionary | No | Optional custom candidate passwords to try first, in order. Combined with the built-in list when useCommonPasswords is true. | |
| useCommonPasswords | No | Also test a built-in list of the most common passwords. Disable to test only the supplied dictionary. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hash | No | The input hash, echoed back. |
| type | No | Hash algorithm used or detected ("unknown" if undetectable). |
| found | No | Whether a candidate password matched the hash. |
| password | No | The recovered plaintext password, or null when not found. |
| attempts | No | Number of candidate passwords tested. |
| duration | No | Elapsed wall-clock time in seconds (rounded to 3 decimals). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description adds valuable context: 'Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited.' This goes beyond annotations, though the core behavioral traits are already covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, concise and front-loaded. It starts with the core purpose, then usage guidance, then behavioral traits, then return values. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (dictionary attack, multiple options), the description covers purpose, usage, behavioral traits, and explicitly lists the return fields (match found, recovered password, detected hash type, attempts, elapsed seconds). This is complete for an agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for each parameter (hash, type, dictionary, useCommonPasswords). The description does not add additional semantics beyond summarizing the process (dictionary + built-in list). Baseline 3 is appropriate as the schema already documents parameters well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Hash cracker (dictionary attack). Recover the plaintext behind a password hash by testing it against a wordlist'. It distinguishes itself from sibling tools like crypto_hash_identifier and crypto_password_strength by specifying when to use them instead, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: 'Use it to audit weak hashes; run crypto_hash_identifier first if the algorithm is unknown, and crypto_password_strength to score a password you already have.' This tells the agent when to use this tool and when to use alternatives, fulfilling the dimension perfectly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_hash_identifierARead-onlyIdempotent
Hash Type Identifier. Identify which hash algorithm most likely produced a digest by analysing its length, character set, and structural pattern (MD5, SHA-1, SHA-256/384/512, SHA-3, NTLM, LM, bcrypt, Argon2, scrypt, PBKDF2, Unix crypt, MySQL, PostgreSQL, LDAP, CRC, and more). Use this when you have a hash and do not know its type. It does not crack, reverse, or look up the hash anywhere: it only classifies the string. After identifying the type, use crypto_hash_cracker to attempt plaintext recovery via a wordlist, or crypto_hash to generate a fresh hash of known input. Runs locally on the value you provide: read-only, non-destructive, contacts no external service, idempotent, and rate-limited (60 requests per minute for anonymous callers). Returns the ranked candidate algorithms with confidence scores, the most likely match, the cleaned hash, its length, and a character set analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes | The hash string to identify. Must not be blank. Common prefixes (0x), salts, and separators are stripped before length analysis; special formats such as bcrypt or Unix crypt are recognised by their full marker. |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | No | The original hash string as submitted, trimmed. |
| cleaned_hash | No | The hash after stripping prefixes, separators, and salt, used for length and charset analysis. |
| length | No | Character length of the cleaned hash. |
| character_set | No | Detected character composition of the hash. |
| possible_algorithms | No | Candidate algorithms matching the length and charset, sorted by descending confidence. |
| most_likely | No | The highest-confidence candidate, or null when no algorithm matches. |
| additional_info | No | Optional notes such as detected salt, mixed case, or unusual length. |
| confidence | No | Overall confidence summary for the identification. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds behavioral context beyond annotations: runs locally, read-only, non-destructive, idempotent, rate-limited (60 req/min), contacts no external service. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured and front-loaded with the main purpose. It is slightly verbose but every sentence adds value. Could be slightly more concise, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema existence, the description is complete. It covers rate limits, idempotency, local operation, and return content (ranked candidates, confidence scores, etc.). No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter 'hash' with 100% schema description coverage. The schema already explains stripping prefixes and recognizing special formats. Description does not add significant new semantics beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool identifies hash algorithms by analyzing length, character set, and structural pattern, listing many specific algorithms. It explicitly distinguishes from sibling tools like crypto_hash_cracker and crypto_hash.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: 'Use this when you have a hash and do not know its type.' It also specifies what the tool does not do (crack, reverse, lookup) and directs to crypto_hash_cracker for plaintext recovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_hmacARead-onlyIdempotent
HMAC Generator (Keyed Hash). Compute an HMAC over a message using a secret key, authenticating both the content and its origin. Supports MD5, SHA-1, SHA-2 (sha224/256/384/512), SHA-3 (sha3-224/256/384/512), and RIPEMD-160; the key is read as text, hex, or base64 and the digest is returned as hex, base64, base64url, or 0x-prefixed binary. Use this when a shared secret must be involved (signing webhooks, API requests, JWT HS* signatures); use crypto_hash instead for an unkeyed digest with no secret. Runs locally on the input you provide and is rate-limited; the message and key are processed in-memory, never persisted, and never written to logs. Returns the HMAC plus hex/base64/base64url renderings and its bit length.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The message to authenticate. Interpreted as UTF-8 text. | |
| key | Yes | The secret key. Decoded per keyFormat (text/hex/base64); never stored or logged. | |
| algorithm | No | HMAC hash algorithm. Defaults to sha256. | sha256 |
| keyFormat | No | How to decode the key string into bytes: UTF-8 text, hex, or base64. | text |
| outputFormat | No | Encoding of the returned hmac field. binary yields a 0x-prefixed hex string. | hex |
Output Schema
| Name | Required | Description |
|---|---|---|
| algorithm | No | The algorithm id used (e.g. sha256). |
| algorithmName | No | Human-readable algorithm name (e.g. SHA256). |
| text | No | The input message, echoed back. |
| key | No | The input key, echoed back. |
| hmac | No | The HMAC encoded per outputFormat. |
| outputFormat | No | The output encoding that was applied. |
| length | No | HMAC length in bits. |
| formats | No | The HMAC pre-rendered in every text encoding. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent. Description adds rich behavioral context: local execution, rate-limited, in-memory processing, no persistence or logging, and key handling details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph with dense information, front-loaded with main action. Could be improved with bullet points for readability, but not excessive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, behavioral notes, supported algorithms, key/output formats, and security. Output schema exists, so return details are not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. The description adds overall context but does not significantly enhance individual parameter meaning beyond examples and return format explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'HMAC Generator (Keyed Hash)' and explains it computes an HMAC for authentication. It explicitly distinguishes from crypto_hash for unkeyed digests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'Use this when a shared secret must be involved' and 'use crypto_hash instead for an unkeyed digest with no secret', naming the alternative sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_keccak_generatorARead-onlyIdempotent
Keccak Hash Generator. Compute an original Keccak digest (Keccak-224/256/384/512) of a text, hex, or base64 input and return it as lowercase hex. This is the pre-NIST Keccak that uses 0x01 padding, so its output differs from final SHA-3 (0x06 padding) at every bit length; Keccak-256 is the function Ethereum uses for addresses and transaction hashing. Use crypto_sha3_generator instead when you need the NIST-standardized SHA-3, and reach for this tool when you specifically need Ethereum/blockchain-compatible Keccak. Runs locally on the input you provide: read-only, non-destructive, deterministic (no random salt), contacts no external service, and is rate-limited (30 requests/min anonymous). Returns the digest as hex plus the variant, output size, security level, and explanatory notes on the Keccak-vs-SHA3 difference.
| Name | Required | Description | Default |
|---|---|---|---|
| input | No | Message to hash, interpreted per inputFormat. The empty string is valid and hashes the zero-length input. | |
| variant | No | Keccak bit length to compute. Defaults to keccak-256 (the Ethereum variant). | keccak-256 |
| inputFormat | No | How to decode input into bytes before hashing: UTF-8 text, hexadecimal, or base64. | text |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | No | The submitted message, echoed back. |
| inputFormat | No | Resolved input encoding (text, hex, or base64). |
| variant | No | Resolved Keccak variant in upper case, for example KECCAK-256. |
| digest | No | The Keccak digest as lowercase hex. |
| hash | No | Alias of digest (same lowercase hex string). |
| hashLength | No | Length of the hex digest string in characters. |
| outputSize | No | Human-readable output size, for example 256 bits (32 bytes). |
| securityLevel | No | Approximate security level, for example 128-bit security. |
| description | No | Short description of the chosen variant. |
| differences | No | One-line note on the padding difference from the matching SHA-3 variant. |
| applications | No | Typical use cases for the chosen variant. |
| notice | No | Notice that this computes original Keccak using pre-standard SHA-3 padding. |
| technicalDifferences | No | Map of Keccak-vs-SHA3 technical differences (padding, standardization, domain separation, capacity). |
| implementations | No | Map of real-world Keccak usage notes (Ethereum, Bitcoin, Monero, academic). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, idempotent, non-destructive), description adds local execution, deterministic behavior, no external service contact, rate limiting, and return of variant and notes. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is information-dense but well-structured with clear sentences. Slightly verbose for some readers, but each sentence adds meaningful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given rich annotations and expected output schema, description covers all key aspects: input formats, variants, use-case distinction, and behavioral properties. No missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. Description adds minimal extra value beyond mentioning default variant, but serves as reinforcement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly defines the tool as computing Keccak digests for text/hex/base64 inputs, with specific mention of Ethereum/blockchain use. Distinguishes from crypto_sha3_generator by highlighting the 0x01 vs 0x06 padding difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to use this tool (Ethereum/blockchain-compatible Keccak) versus crypto_sha3_generator (NIST-standard SHA-3), providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_mysql_password_generatorARead-only
MySQL Password Hash Generator. Generate the server-side password hash MySQL stores in mysql.user.authentication_string for a given plaintext, across MySQL versions. Use it to build CREATE USER / SET PASSWORD statements or seed test fixtures; use crypto_postgresql_password_generator for PostgreSQL (md5/SCRAM) hashes instead, and crypto_password_generator to invent a new random plaintext rather than hash one. Runs locally on the input you provide: read-only, non-destructive, contacts no database or external service, and is rate-limited (30 requests/min anonymous). SHA1-based formats (mysql41/5/55/56/57) are deterministic; the mysql80/mysql8 caching_sha2_password format uses a fresh random salt, so its hash differs on every call. Returns the hash plus its version label, algorithm, format, and (for 8.0) salt and iterations.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | Plaintext password to hash. Required and non-empty. | |
| version | No | Target MySQL format. mysql41/5/55/56/57 produce the SHA1(SHA1()) PASSWORD() hash; mysql80/mysql8 produce a salted caching_sha2_password hash; old_mysql/mysql323 produce the deprecated, insecure pre-4.1 hash. | mysql57 |
Output Schema
| Name | Required | Description |
|---|---|---|
| original | No | The plaintext password, echoed back. |
| hash | No | The MySQL-format password hash (e.g. *HEX, or $A$005$... for 8.0). |
| version | No | Human-readable label of the MySQL format used. |
| algorithm | No | Hash algorithm, e.g. SHA1(SHA1(password)) or PBKDF2-SHA256. |
| format | No | Description of the output encoding/format. |
| iterations | No | PBKDF2 iteration count (caching_sha2_password / mysql80 only). |
| salt | No | Base64 random salt used (caching_sha2_password / mysql80 only). |
| warning | No | Present only for deprecated old_mysql/mysql323 formats. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and destructiveHint=false. The description adds that it runs locally, contacts no database or external service, is rate-limited (30 req/min), and explains deterministic vs non-deterministic behavior (SHA1-based formats are deterministic, mysql80 uses random salt). This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single well-structured paragraph, front-loading the main purpose and use cases. It covers key points without excessive verbosity. Could be slightly more concise but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (2 parameters, enum, simple behavior), the description covers purpose, parameters, usage, behavior, rate limits, and output (returns hash, version, algorithm, format, salt, iterations). No output schema provided but description adequately hints at return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters (password and version) with descriptions and examples. The description adds context about version-specific formats (e.g., mysql80 uses caching_sha2_password with random salt) and behavior differences, providing useful nuance beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates MySQL password hashes for a given plaintext across versions. It specifies the exact use case (building CREATE USER/SET PASSWORD statements or test fixtures) and distinguishes from sibling tools like crypto_postgresql_password_generator and crypto_password_generator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use (for MySQL password hash generation) and when not to use (for PostgreSQL, use crypto_postgresql_password_generator; for random plaintext, use crypto_password_generator). Also notes it runs locally, is read-only, non-destructive, and rate-limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_ntlmARead-onlyIdempotent
NTLM and LM Hash Generator. Compute the Windows NTLM (NT) hash and optionally the legacy LM (LAN Manager) hash of a password, for Active Directory labs, pass-the-hash testing, and credential-cracking setup. NTLM is MD4 of the UTF-16LE password; LM upper-cases and 14-byte-pads the password, then DES-encrypts the constant "KGS!@#$%" per 7-byte half. This generates hashes from a known password; to recognise an unknown hash string's type instead use crypto_hash_id, and to recover the password behind a hash use crypto_hash_cracker. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/minute for anonymous callers). Returns the requested hashes plus password length, unicode flag, a complexity score, and security warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | Plaintext password to hash. UTF-16LE-encoded for NTLM; upper-cased and truncated to 14 characters for LM. | |
| outputFormat | No | Hex case of the returned hash strings; hex/lower/lowercase emit lowercase, upper/uppercase emit uppercase. | hex |
| includeHash | No | Include the NTLM (NT) hash in the result. | |
| includeLm | No | Include the legacy LM hash; fails if the runtime has DES disabled, and truncates the password to 14 characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hashes | No | Computed hashes, keyed by algorithm; only requested algorithms are present. |
| password_info | No | Analysis of the submitted password. |
| output_format | No | The output format that was applied. |
| algorithms_used | No | Algorithm keys present in hashes (e.g. ntlm, lm). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, destructive, idempotent), description adds specific behavioral details: runs locally, no external service, rate-limited, and potential failure for LM hash.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is thorough and well-structured, but somewhat lengthy. All sentences add value, but could be slightly more terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple hash types, algorithms, output fields), the description covers purpose, usage, behavior, parameters, and return values comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description adds deep meaning beyond schema: explains hashing algorithms (MD4, DES), default behavior, and output fields (length, complexity, warnings), complementing the 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates NTLM and LM hashes for Windows security testing, and explicitly distinguishes from siblings like crypto_hash_id and crypto_hash_cracker.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description provides explicit guidance on when to use this tool vs. alternatives, including when not to use it (for hash type identification or password recovery).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_password_generatorARead-only
Random Password Generator. Generate one or more cryptographically random passwords from configurable character classes (lowercase, uppercase, digits, symbols) with options for a custom charset, excluding look-alike or ambiguous characters, no repeated characters, and a pronounceable mode. Use this for dense mixed-character passwords; use crypto_password_generator_passphrase for memorable word-based passphrases or crypto_password_generator_pin for numeric-only codes. Randomness comes from crypto.getRandomValues. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/min, 200/hour, 1000/day for anonymous callers). Returns each password with its length and estimated entropy in bits, the normalized options actually applied, and the character set used.
| Name | Required | Description | Default |
|---|---|---|---|
| length | No | Number of characters per password. Clamped to 4-128. | |
| includeUppercase | No | Include uppercase letters A-Z in the character set. | |
| includeLowercase | No | Include lowercase letters a-z in the character set. | |
| includeNumbers | No | Include digits 0-9 in the character set. | |
| includeSymbols | No | Include symbols from !@#$%&*+-=? in the character set. | |
| excludeSimilar | No | Remove look-alike characters (0, O, 1, l, I) from the character set to improve readability. | |
| excludeAmbiguous | No | Remove ambiguous punctuation ({}[]()/\'"`~,;.<>) from the character set. | |
| customCharset | No | When set, overrides all include* options and draws every character from this exact string instead. | |
| noRepeating | No | When true, no character repeats within a password; length must not exceed the character set size or the request fails. | |
| pronounceable | No | When true, generate alternating consonant/vowel syllables for an easier-to-say password; includeNumbers/includeSymbols/ includeUppercase still inject those, and customCharset/ excludeSimilar/excludeAmbiguous/noRepeating do not apply. | |
| quantity | No | How many passwords to generate. Clamped to 1-100. |
Output Schema
| Name | Required | Description |
|---|---|---|
| passwords | No | The generated passwords, one entry per requested quantity. |
| options | No | The normalized options actually used after clamping defaults. |
| charset | No | The character set the passwords were drawn from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false. The description adds valuable context: uses crypto.getRandomValues, runs locally (read-only, non-destructive), contacts no external service, is rate-limited (30/min, 200/hr, 1000/day), and returns each password with length and estimated entropy. This fully informs behavior beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with a clear structure: purpose, features, usage guidelines, safety, return info. Every sentence provides value; no fluff. It front-loads the core purpose and guides agent decision-making efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, many interdependent options) and the existence of an output schema, the description is comprehensive. It covers all essential aspects: what the tool does, when to use it, behavior, safety, rate limits, and return format. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented. The description adds semantic value by explaining interactions: customCharset overrides include* options, noRepeating constraint, pronounceable mode limitations. This helps agents understand parameter dependencies without repeating schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a random password generator that generates cryptographically random passwords from configurable character classes, and distinguishes itself from sibling tools (passphrase for word-based, pin for numeric-only). The verb 'Generate' and resource 'cryptographically random passwords' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('dense mixed-character passwords') and when to use alternatives ('crypto_password_generator_passphrase' for memorable word-based, 'crypto_password_generator_pin' for numeric-only). Also notes randomness source and local execution, providing clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_password_generator_passphraseARead-only
Diceware Passphrase Generator. Generate one or more memorable diceware-style passphrases by joining randomly-chosen dictionary words with a separator. Use this for human-typable word passphrases; use crypto_password_generator for dense mixed-character passwords or crypto_password_generator_pin for numeric-only codes. Words are picked with crypto.getRandomValues. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/min, 200/hour, 1000/day for anonymous callers). Returns each passphrase with its component words, character length, and word count, plus the normalized options actually applied.
| Name | Required | Description | Default |
|---|---|---|---|
| wordCount | No | Number of words per passphrase. Clamped to 3-10. | |
| separator | No | String placed between words. Any string is allowed; pass an empty string to concatenate words with no separator. | - |
| capitalize | No | When true, the first letter of each word is uppercased. | |
| includeNumbers | No | When true, a random number (10-9999) is appended to the end of the passphrase. | |
| includeSymbols | No | When true, one random symbol from !@#$%&* is appended to the end of the passphrase. | |
| wordList | No | Source word list. "common" is 64 five-to-six-letter words; "simple" is 40 short three-to-four-letter words. An unknown value falls back to "common". | common |
| quantity | No | How many passphrases to generate. Clamped to 1-50. |
Output Schema
| Name | Required | Description |
|---|---|---|
| passphrases | No | The generated passphrases, one entry per requested quantity. |
| options | No | The normalized options actually used after clamping defaults. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show readOnlyHint=true and destructiveHint=false. The description adds key transparency details: local execution, crypto.getRandomValues, rate limits (30/min, 200/hr, 1000/day), and non-destructive nature. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is 5 sentences, well-organized, front-loading the purpose and usage, with no redundant or unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, optional output schema), the description covers purpose, usage, behavioral details, and links to alternatives. The mention of return structure complements the output schema, making it complete for effective agent selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good parameter descriptions; the tool description does not add additional semantic meaning beyond what the schema already provides, though it does reference the output structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose as generating diceware-style passphrases, specifies the verb 'generate', and distinguishes from sibling tools (crypto_password_generator, crypto_password_generator_pin) by noting their different use cases (dense passwords, numeric codes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('for human-typable word passphrases') and when to use alternatives ('use crypto_password_generator for dense mixed-character passwords or crypto_password_generator_pin for numeric-only codes'), providing clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_password_generator_pinARead-only
Random PIN Generator. Generate one or more cryptographically random numeric PINs (digits 0-9 only). Use this for numeric-only codes such as device or card PINs; use crypto_password_generator for mixed-character passwords or crypto_password_generator_passphrase for word-based passphrases. Randomness comes from crypto.getRandomValues. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/min, 200/hour, 1000/day for anonymous callers). Returns the generated PINs with each PIN's length and the normalized options actually applied.
| Name | Required | Description | Default |
|---|---|---|---|
| length | No | Number of digits per PIN. Clamped to 4-20. When noRepeating is true, an effective length above 10 is rejected (only 10 unique digits exist). | |
| noRepeating | No | When true, no digit repeats within a PIN; this caps the usable length at 10. | |
| noSequential | No | When true, consecutive digits never differ by exactly 1 (e.g. avoids 12, 65), reducing easily-guessed runs. | |
| quantity | No | How many PINs to generate. Clamped to 1-100. |
Output Schema
| Name | Required | Description |
|---|---|---|
| pins | No | The generated PINs, one entry per requested quantity. |
| options | No | The normalized options actually used after clamping defaults. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses cryptographic randomness source (crypto.getRandomValues), local/non-destructive execution, and rate limits. No contradiction with annotations (readOnlyHint: true).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Mostly concise and front-loaded, though some redundancy (e.g., 'read-only, non-destructive' could be tighter). Still informative without being overly long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive given 4 parameters and output schema present. Covers purpose, use cases, behavior, and important parameter constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds clamping ranges (4-20) and noRepeating length cap, providing context beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates numeric-only PINs and explicitly distinguishes from sibling tools crypto_password_generator and crypto_password_generator_passphrase.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when to use (numeric-only codes like device or card PINs) and when not to (mixed-character passwords or passphrases), plus mentions rate limits and local execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_password_strengthARead-onlyIdempotent
Password Strength Checker. Score the strength of one password — returns a 0-100 score, a strength label, Shannon entropy in bits, an estimated offline crack time, and actionable feedback plus the character-class breakdown. Use it for a single password; use crypto_password_strength_bulk to score many at once. Optionally pass a username and context words so reuse of those terms is penalised. Analysis is local, deterministic compute on the input you provide: read-only, non-destructive, never stored, and the password is never logged. Rate-limited (30 requests/min anonymous).
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | The password to analyse. Required; an empty string scores 0. | |
| username | No | Optional account username; if the password contains it (case-insensitive) the score is reduced. | |
| commonWords | No | Optional context words (site name, real name); each word longer than 3 chars found in the password lowers the score. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | No | Strength score, 0 (weak) to 100 (strong). |
| strength | No | Label: Very Weak, Weak, Fair, Good, or Strong. |
| strengthClass | No | CSS colour class for the label. |
| length | No | Password length in bytes. |
| entropy | No | Shannon entropy in bits, rounded to 2 dp. |
| crackTime | No | Estimated offline crack time. |
| feedback | No | Warnings and improvement suggestions. |
| positives | No | Strengths detected in the password. |
| details | No | Character-class breakdown. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe operations. Description adds valuable context: 'local, deterministic compute', 'read-only, non-destructive, never stored, password never logged'. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, well front-loaded with purpose and scope. Every sentence adds necessary information: purpose, returned value, alternative tool, optional params, behavioral guarantees, rate limit. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 params and an output schema, description covers all key aspects: input handling, behavioral guarantees, rate limiting, and distinction from sibling. Output schema provides return details, so completeness is high.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds explanation of how each parameter affects scoring (e.g., 'if the password contains it (case-insensitive) the score is reduced'), going beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Password Strength Checker' with specific verb 'Score the strength of one password' and resource 'returns a 0-100 score, strength label, etc.' Differentiates from sibling crypto_password_strength_bulk for bulk use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool (single password) and when to use sibling (bulk). Mentions optional parameters and their effect. Also discloses rate limit (30 req/min anonymous), guiding appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_password_strength_bulkARead-onlyIdempotent
Bulk Password Strength Checker. Score many passwords in one call — returns one analysis per input password, each with a 0-100 score, a strength label, Shannon entropy in bits, an estimated offline crack time, actionable feedback, and the character-class breakdown. Use it to audit a list at once; use crypto_password_strength for a single password (it also accepts a username and context words). Analysis is local, deterministic compute on the inputs you provide: read-only, non-destructive, never stored, and the passwords are never logged. Rate-limited (30 requests/min anonymous).
| Name | Required | Description | Default |
|---|---|---|---|
| passwords | Yes | The passwords to analyse, in order. Results are returned in the same order. An empty string scores 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | No | Per-password analyses, aligned to the input order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the annotations: it states that analysis is local, deterministic, read-only, non-destructive, never stored, and passwords are never logged. It also mentions rate limiting (30 requests/min anonymous). Since annotations already cover readOnlyHint, destructiveHint, and idempotentHint, the description enriches with operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise with no wasted words. It front-loads the key purpose in the first sentence, then efficiently covers usage, behavioral details, and rate limits. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter (one array of strings) and the presence of an output schema (implied by the detailed output description), the description fully covers what the tool does, its behavior, and when to use it. No gaps for its complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'passwords' has 100% schema coverage including description and examples. The description adds that results are returned in the same order and that an empty string scores 0. This provides useful but not critical extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a bulk password strength checker that scores many passwords in one call, and explicitly distinguishes it from the sibling tool crypto_password_strength for single password analysis. The verb 'Score many passwords' and resource 'Bulk Password Strength Checker' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus the alternative: 'Use it to audit a list at once; use crypto_password_strength for a single password (it also accepts a username and context words).' This gives clear context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_pbkdf2ARead-only
PBKDF2 Hash Generator. Derive a PBKDF2 password hash from a plaintext password using a chosen HMAC digest, iteration count, and key length, returning the derived key plus a self-describing encoded hash. Use this to create a new hash; use crypto_pbkdf2_verify to check a password against one. PBKDF2 is the legacy/FIPS-friendly KDF — prefer crypto_argon2 (memory-hard) or crypto_bcrypt for new password storage, and crypto_scrypt for memory-hard derivation. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, rate-limited (5 requests/min anonymous). When no salt is supplied a random 16-byte salt is generated, so output is non-deterministic. Returns the derived key (hex and base64), a passlib-style $pbkdf2-... string, the salt, the resolved parameters, and a strength analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | The plaintext password (passphrase) to derive a key from. Required and non-empty. | |
| algorithm | No | HMAC digest backing the derivation. sha256/sha512 recommended; md5 and sha1 are cryptographically weak. | sha256 |
| iterations | No | Number of PBKDF2 rounds. Higher is slower and stronger. | |
| length | No | Derived key length in bytes. | |
| salt | No | Optional salt string (8–128 characters). If omitted or empty, a random 16-byte (32 hex char) salt is generated and returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| password | No | The plaintext password (echoed from the request). |
| hash | No | Derived key encoded as lowercase hex. |
| base64Hash | No | Derived key encoded as base64. |
| formattedHash | No | Passlib-style encoded hash: $pbkdf2-<algorithm>$<iterations>$<salt>$<base64DerivedKey>. |
| algorithm | No | Resolved digest token: sha1, sha256, sha384, sha512, or md5. |
| algorithmName | No | Human-readable algorithm name, e.g. SHA-256. |
| iterations | No | Iteration count used. |
| length | No | Derived key length in bytes. |
| salt | No | Salt used (supplied value or the generated 32-hex-char salt). |
| saltLength | No | Character length of the salt. |
| security | No | Strength analysis of the chosen parameters. |
| generatedAt | No | ISO 8601 timestamp of generation. |
| verified | No | Self-check that the generated formattedHash verifies against the password (always true on success). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by detailing non-deterministic output when no salt is supplied, local execution, and return of derived key, encoded hash, salt, and strength analysis. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is 4-5 sentences, well-structured, and front-loaded with the tool's main purpose. Every sentence adds essential information without redundancy or fluff, making it efficient for an AI agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, 1 required, an output schema, and annotations, the description covers purpose, usage guidelines, behavioral traits (non-determinism, local execution, rate limit), and key return fields. It is complete for an agent to decide and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining that if no salt is supplied, a random 16-byte salt is generated, making output non-deterministic. It also mentions the salt length range (8–128 characters) aligning with schema min/max. This enriches parameter understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'PBKDF2 Hash Generator' and explains it derives a hash from a plaintext password, specifying the tool's verb and resource. It distinguishes from siblings by naming crypto_pbkdf2_verify and alternative KDFs (argon2, bcrypt, scrypt).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this to create a new hash; use crypto_pbkdf2_verify to check a password against one.' Provides guidance on when to prefer other KDFs and mentions rate limiting (5 requests/min anonymous), giving clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_pbkdf2_verifyARead-onlyIdempotent
PBKDF2 Hash Verifier. Check whether a plaintext password matches an existing PBKDF2 hash, recomputing the derivation from the digest algorithm, iteration count, key length, and salt encoded in the hash string. Use this to verify a candidate password; use crypto_pbkdf2 instead to generate a new hash. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (5 requests/min for anonymous callers). Returns whether the password matched, the parameters parsed from the hash, and a strength analysis of those parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | The plaintext password to test against the hash. | |
| hash | Yes | The encoded PBKDF2 hash to verify against. Two formats are accepted: the passlib-style string produced by crypto_pbkdf2, $pbkdf2-<algorithm>$<iterations>$<saltHex>$<base64DerivedKey>, or a colon-delimited <algorithm>:<iterations>:<salt>:<derivedKeyHexOrBase64>. The digest algorithm, iteration count, salt, and key length are read from this string to recompute the derivation; no separate algorithm, iterations, length, or salt fields are supplied. |
Output Schema
| Name | Required | Description |
|---|---|---|
| password | No | The plaintext password that was tested (echoed from the request). |
| hash | No | The encoded hash that was verified against (echoed from the request). |
| verified | No | True when the recomputed derivation matches the digest in the supplied hash. |
| info | No | Parameters parsed from the hash. Absent when the hash format is invalid. |
| security | No | Strength analysis of the parsed parameters. Absent on error. |
| verifiedAt | No | ISO 8601 timestamp of when verification ran. Absent on error. |
| error | No | Error message when verification fails (e.g. "Invalid hash format"). Absent on success. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: runs locally, read-only, non-destructive, contacts no external service, rate-limited (5 req/min for anonymous callers). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences covering purpose, usage, behavior, and return values. Front-loaded with key information, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a PBKDF2 verification tool: explains what it does, how it works, what it returns (match status, parsed parameters, strength analysis), and has output schema for return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters have detailed descriptions and examples in the schema. The description explains the hash format and that no separate fields are needed, adding meaning beyond the schema which has 100% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a 'PBKDF2 Hash Verifier' and explains that it checks if a plaintext password matches an existing PBKDF2 hash, distinguishing it from the sibling tool crypto_pbkdf2 which generates new hashes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use this to verify a candidate password; use crypto_pbkdf2 instead to generate a new hash,' providing clear when-to-use and when-not-to-use with an alternative tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_postgresql_password_generatorARead-only
PostgreSQL Password Hash Generator. Hash a plaintext password into the credential format a PostgreSQL server stores for a role, across PostgreSQL versions. Use it to build CREATE ROLE / ALTER ROLE statements, populate pg_hba.conf or test fixtures; use crypto_mysql_password_generator for MySQL hashes instead, and crypto_password_generator to invent a new random plaintext rather than hash one. Runs locally on the input you provide: read-only, non-destructive, contacts no database or external service, and is rate-limited (30 requests/min anonymous). The md5 format is deterministic; scram_sha256 and crypt use a fresh random salt, so their hash differs on every call. Returns the hash plus its version label, algorithm, format, and (where applicable) salt, iterations, and a plaintext-insecurity warning.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | Plaintext password to hash. Required and non-empty. | |
| username | No | Role name mixed into the md5 hash (md5 is MD5 of password plus username). Defaults to postgres. | postgres |
| version | No | Target format. md5 produces the legacy md5-prefixed hash (PostgreSQL under 10); scram_sha256 produces a salted SCRAM-SHA-256 verifier (PostgreSQL 10 and later); plain returns the unencrypted password (HIGHLY INSECURE); crypt produces a Unix MD5 modular-crypt hash. | md5 |
Output Schema
| Name | Required | Description |
|---|---|---|
| original | No | The plaintext password, echoed back. |
| username | No | The role name used (relevant for the md5 format). |
| hash | No | The PostgreSQL-format password hash or verifier. |
| version | No | Human-readable label of the format used. |
| algorithm | No | Hash algorithm used, for example MD5 of password plus username, or SCRAM-SHA-256. |
| format | No | Description of the output encoding format. |
| iterations | No | PBKDF2 iteration count (scram_sha256 only). |
| salt | No | Salt used (scram_sha256 base64 salt, or crypt modular-crypt salt). |
| warning | No | Present only for the plain format, warning the password is unencrypted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already show readOnlyHint=true and destructiveHint=false. The description adds critical context: runs locally, contacts no database, rate-limited (30 req/min), deterministic vs non-deterministic behavior for different algorithms, and returns hash with metadata (version, algorithm, salt, etc.).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph with front-loaded purpose, then usage, alternatives, behavioral notes, algorithm details, and return structure. Every sentence earns its place; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the description, annotations, and output schema, this is highly complete. It covers purpose, when to use/avoid, behavioral traits, algorithm details, and return value structure. No obvious gaps for a deterministic input-output tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive parameter fields. The description adds little beyond schema for password and username, but clarifies version algorithm behavior (deterministic for md5, random salt for others). This adds marginal value over schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it hashes passwords into PostgreSQL credential formats, lists use cases (CREATE ROLE statements, pg_hba.conf, test fixtures), and distinguishes from siblings crypto_mysql_password_generator and crypto_password_generator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use context and alternatives: 'use crypto_mysql_password_generator for MySQL hashes instead, and crypto_password_generator to invent a new random plaintext rather than hash one.' Also notes it runs locally.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_ripemdARead-onlyIdempotent
RIPEMD Hash Generator. Compute RIPEMD message digests of a UTF-8 text string, returning one digest per requested variant (RIPEMD-128/160/256/320). Use crypto_hash instead for MD5/SHA-1/ SHA-256/SHA-512, or crypto_sha3 for SHA-3/Keccak; RIPEMD-160 is the variant used in Bitcoin/altcoin address derivation. Runs locally on the input you provide: read-only, non-destructive, deterministic, contacts no external service, and is rate-limited (30 requests/min anonymous). Returns a hashes map keyed by variant, each with the digest in the chosen output format plus hex/base64/base64url renderings and the bit length.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to hash, encoded as UTF-8 before digesting. The empty string is valid (RIPEMD-160 of the empty string is 9c1185a5c5e9fc54612808977ee8f548b2258d31). | |
| algorithms | No | RIPEMD variants to compute, one digest each. At least one required; unknown values are rejected. | |
| outputFormat | No | Encoding of each hashes value: lowercase hex, uppercase HEX, standard base64, or URL-safe base64url. hex/base64/base64url are always also returned under formats regardless of this choice. | hex |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | No | The input text, echoed back. |
| outputFormat | No | The output format applied to each value. |
| hashes | No | Map keyed by variant id (e.g. ripemd160) to that variant digest. |
| timestamp | No | Unix epoch seconds when the response was generated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description adds concrete operational details: local execution, no external service contact, rate limiting (30 req/min), and return structure. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place. The description is compact but covers purpose, alternatives, behavioral constraints, and return structure. Front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given full schema coverage, rich annotations, and presence of output schema, the description provides all necessary context: purpose, when to use, behavior, parameter semantics, and output details. Nothing missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds significant value by explaining UTF-8 encoding, the empty string example, algorithm variant enum details, and the return format behavior (all formats always included). This goes beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes RIPEMD message digests for a UTF-8 string and returns per-variant results. It explicitly differentiates from siblings by directing users to crypto_hash for MD5/SHA and crypto_sha3 for SHA-3/Keccak.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use this tool versus alternatives, including specific references to other tools for different hash families. It also notes the Bitcoin use case for RIPEMD-160, helping the agent decide relevance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_scryptARead-only
Scrypt Password Hash Generator. Generate a memory-hard scrypt password hash and key derivation from a password and tunable cost parameters (N, r, p, key length). scrypt deliberately consumes large amounts of RAM to resist GPU/ASIC cracking; use it when you want memory-hardness. Prefer crypto_argon2 or crypto_bcrypt for general password storage; use crypto_pbkdf2 when only iteration count matters; use crypto_scrypt_verify to check a password against an existing scrypt hash. A random 16-byte salt is generated when salt is omitted, so output is non-deterministic between calls. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited. Returns the derived key (hex and base64), an encoded hash string, the salt, the parameters used, and a strength analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | The plaintext password to derive the scrypt hash from. Required and must be non-empty. | |
| N | No | CPU/memory cost factor; must be a power of 2 between 2 and 1048576. Higher values increase both time and memory cost (32768 or above recommended). | |
| r | No | Block-size factor (1 to 256); scales memory usage. 8 is the standard value. | |
| p | No | Parallelization factor (1 to 256); number of independent mixing operations. | |
| length | No | Derived key length in bytes (16 to 128). | |
| salt | No | Optional salt as a hexadecimal string (even number of hex digits). When omitted or empty, a random 16-byte salt is generated, making output non-deterministic. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hash | No | Derived key encoded as a hexadecimal string. |
| base64Hash | No | Derived key encoded as base64. |
| formattedHash | No | Encoded hash string in the format $scrypt$N=<N>,r=<r>,p=<p>$<saltHex>$<base64DerivedKey>, accepted by crypto_scrypt_verify. |
| algorithm | No | Algorithm identifier; always scrypt. |
| parameters | No | The cost parameters used for the derivation. |
| salt | No | Salt used for the derivation, in hexadecimal (random when none supplied). |
| saltLength | No | Length of the hex salt string. |
| security | No | Strength analysis of the chosen parameters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it runs locally, is read-only and non-destructive, contacts no external service, is rate-limited, and generates random salt for non-deterministic output. Aligns with annotations (readOnlyHint, destructiveHint).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured paragraphs: first states purpose and usage, then details behavior and output. Every sentence adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, and description lists return fields (derived key, hash string, salt, parameters, strength analysis). With 100% param coverage and clear behavior, it's fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds context on N being a power of 2, r as standard, p for independent mixing, length as derived key bytes, and salt optional with random generation, plus explains memory-hardness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates a scrypt password hash and key derivation, explicitly contrasting with siblings like crypto_argon2, crypto_bcrypt, crypto_pbkdf2, and crypto_scrypt_verify.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly specifies when to use scrypt ('when you want memory-hardness') and provides alternatives for different use cases (argon2/bcrypt for general storage, pbkdf2 for iteration counts, scrypt_verify for checking).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_scrypt_verifyARead-onlyIdempotent
Scrypt Hash Verifier. Check whether a plaintext password matches an existing scrypt hash, recomputing the derivation from the N, r, p, and salt encoded in the hash string. Use this to verify a candidate password; use crypto_scrypt instead to generate a new hash. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited. Returns whether the password matched, the parameters parsed from the hash, and a strength analysis of those parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | The plaintext password to test against the hash. | |
| hash | Yes | The encoded scrypt hash to verify against, in the format produced by crypto_scrypt: $scrypt$N=<N>,r=<r>,p=<p>$<saltHex>$<base64DerivedKey>. The N, r, p, and salt are read from this string to recompute the derivation and compare it against the supplied password. |
Output Schema
| Name | Required | Description |
|---|---|---|
| verified | No | True when the password matches the supplied hash. |
| info | No | Parameters parsed from the hash; null when the hash format is invalid. |
| security | No | Strength analysis of the parsed parameters; null on error. |
| error | No | Error message when verification fails (e.g. invalid hash format); null on success. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable context beyond annotations: 'Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited.' This aligns with the annotations (readOnlyHint, destructiveHint, idempotentHint) and provides additional details about execution locality and rate limiting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it starts with the purpose, then usage guidance, then behavioral traits, and finally the return value summary. Every sentence adds value with no superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (2 parameters) and the existence of an output schema, the description is complete. It mentions the return information (match result, parsed parameters, strength analysis), covering all necessary aspects for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions and examples for both parameters. The description further explains the hash format and how N, r, p, salt are extracted from it, adding meaningful context beyond the schema's individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Check whether a plaintext password matches an existing scrypt hash.' It specifies the verb (verify) and resource (password against hash). It also distinguishes from sibling 'crypto_scrypt' by noting the alternative use case for generating new hashes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use this to verify a candidate password; use crypto_scrypt instead to generate a new hash.' This clearly tells the agent when to use this tool versus the sibling tool for hash generation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_sha3_generatorARead-onlyIdempotent
SHA3 Hash Generator (SHA3-224/256/384/512). Compute a SHA3 (Keccak, NIST FIPS 202) cryptographic digest of text, hex, or Base64 input. Choose algorithm to pick the variant (SHA3-256 default); set inputFormat to decode the input before hashing. Use this for the standardized SHA3 sponge family; use crypto_keccak_generator for the pre-standard Ethereum Keccak-256 variant, or crypto_hash for MD5, SHA-1, and SHA-2 legacy digests. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/minute for anonymous callers). Returns the lowercase hex digest plus its length, output size, security level, and typical use cases.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | Data to hash, interpreted per inputFormat (plaintext, hex, or Base64). Empty string hashes to the variant fixed-empty digest. | |
| algorithm | No | SHA3 variant determining digest width (224, 256, 384, or 512 bits). Case-insensitive. | sha3-256 |
| inputFormat | No | How to decode input before hashing. hex requires even-length valid hex; base64 requires a valid Base64 string. | text |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | No | The submitted input, echoed back. |
| inputFormat | No | The decoding applied (text, hex, or base64). |
| algorithm | No | The variant used, uppercased (such as SHA3-256). |
| hash | No | Lowercase hexadecimal digest. |
| hashLength | No | Number of hex characters in hash (twice the byte length). |
| outputSize | No | Digest size in bits and bytes (such as 256 bits / 32 bytes). |
| description | No | Human-readable summary of the variant. |
| securityLevel | No | Collision-resistance level (such as 128-bit security). |
| useCases | No | Typical applications for the variant. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, idempotent. The description adds important behavioral context: runs locally, contacts no external service, rate-limited (30 req/min for anonymous). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a usage clause, all front-loaded. Every sentence adds value without redundancy. It efficiently conveys purpose, usage, and behavioral details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 params, enums, output schema present), the description covers all essential aspects: purpose, supported algorithms, input formats, usage guidance, safety, rate limits, and return information (hex digest, length, security level, use cases). It is complete for effective decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage. The description adds value by explaining the algorithm parameter (choose variant, SHA3-256 default) and inputFormat (decode before hashing). It also notes empty string hashes to the fixed empty digest, which is beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes SHA3 hashes (SHA3-224/256/384/512) from text, hex, or Base64 input. It distinguishes itself from crypto_keccak_generator and crypto_hash, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (standardized SHA3) and when to use alternatives (crypto_keccak_generator for Ethereum Keccak-256, crypto_hash for legacy hashes). This provides excellent guidance for correct tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_uuidARead-only
UUID Generator (v1 and v4). Generate one or more RFC 4122 UUIDs in version 4 (random) or version 1 (timestamp + node), with optional formatting (strip hyphens, uppercase, wrap in braces). Use it to mint fresh identifiers for databases, API keys, or test fixtures; use data_uuid_validator instead to validate or decode an existing UUID. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute anonymous). Output is non-idempotent — each call returns new random values. Returns the canonical and formatted UUID arrays plus the requested version and count.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | UUID version. 4 = fully random; 1 = time-based (embeds a timestamp and a random node). Only 1 and 4 are supported. | |
| quantity | No | How many UUIDs to generate, from 1 to 100. | |
| formatting | No | Optional output formatting applied to every generated UUID. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether generation succeeded. |
| result | No | The generation payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description adds useful context: runs locally, contacts no external service, rate-limited (60/min), and is non-idempotent. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the core purpose. It covers key details without excessive verbosity. Slight redundancy in mentioning formatting twice, but generally well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (implied by description mentioning return arrays), the description covers runtime behavior, rate limits, idempotency, and local execution. It is complete for a straightforward generation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter well-described in the schema. The description adds high-level context (e.g., version 1 is time-based, version 4 random) but does not significantly enhance understanding beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it's a UUID generator for v1 and v4 with optional formatting. It specifies the verb 'Generate' and the resource 'RFC 4122 UUIDs'. This distinguishes it from the sibling tool 'data_uuid_validator' which validates/decodes UUIDs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('mint fresh identifiers for databases, API keys, or test fixtures') and when not to ('use data_uuid_validator instead to validate or decode an existing UUID'). It also mentions the tool runs locally, is read-only, non-destructive, and rate-limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_whirlpoolARead-onlyIdempotent
Whirlpool Hash Generator. Compute the 512-bit Whirlpool hash of a text string, returning the 128-character hex digest plus uppercase, byte length, and 128/256/384/512-bit truncations. Use crypto_hash instead for MD5/SHA-1/SHA-256/SHA-512, crypto_sha3 for SHA-3/Keccak, or crypto_ripemd for RIPEMD variants; Whirlpool is an ISO/IEC 10118-3 AES-based digest used for file integrity and digital signatures. Runs locally on the input you provide: read-only, non-destructive, deterministic, contacts no external service, and is rate-limited (5 requests/min anonymous).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Data to hash. Interpreted according to encoding: as a UTF-8 string when text, or decoded from a hex/base64 string first. The empty string is valid. | |
| encoding | No | How to interpret text before hashing: text (UTF-8, default), hex (decode hex first; rejected if not valid hex), or base64 (decode base64 first; rejected if invalid). | text |
Output Schema
| Name | Required | Description |
|---|---|---|
| hash | No | Lowercase 128-character hex Whirlpool (512-bit) digest. |
| algorithm | No | Always "whirlpool". |
| length | No | Digest length in bytes (64). |
| encoding | No | The input encoding that was applied (text, hex, or base64). |
| uppercase | No | The same digest in uppercase hex. |
| truncated | No | Leading-bit truncations of the hex digest for use as shorter checksums. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: local execution, read-only, non-destructive, deterministic, no external service, and rate-limited (5 req/min). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured paragraph with no wasted words: starts with title, outputs, alternatives, properties, and safety features.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description adequately covers return values (hex digest, uppercase, byte length, truncations) and explains safety and rate limiting. Complete for a hashing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description mentions 'text string' and 'byte length' but adds little beyond schema's descriptions of 'text' and 'encoding' parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it is a Whirlpool hash generator, specifies the output (128-character hex digest, uppercase, byte length, truncations), and distinguishes from siblings like crypto_hash and crypto_sha3.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: use crypto_hash for MD5/SHA-1/SHA-256/SHA-512, crypto_sha3 for SHA-3/Keccak, crypto_ripemd for RIPEMD, and notes Whirlpool is for file integrity and digital signatures.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_data_anonymizerARead-onlyIdempotent
PII Data Anonymizer and Redactor. Detect and mask personally identifiable information (emails, phone numbers, US SSNs, IBANs with mod-97 check, Luhn-validated credit cards, IPv4/IPv6 addresses, ISO-8601 dates) in free text. Use this to scrub or redact real PII from logs, tickets, or datasets; use data_data_faker instead when you need to generate brand-new synthetic test data rather than mask existing values. Detection is regex-based with validity checks, and longer or stricter patterns (credit card, IBAN) resolve ahead of shorter ones (phone, SSN) so values are never partially matched. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, deterministic for a given input, and rate-limited (60 requests/minute for anonymous callers). Returns the masked text plus a per-occurrence replacement list and per-type match counts.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to scan for PII. Maximum 1000000 characters; longer input is rejected. | |
| mask | No | Masking mode. token replaces each match with a bracketed type label; partial redacts the middle and keeps a few leading and trailing characters; counter substitutes per-type sequential ids such as email-1. | token |
| enable | No | Per-type detection toggles; each key defaults to true (detected) when omitted. Set a key to false to skip that PII type. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether anonymization succeeded. |
| result | No | The anonymization output. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, destructiveHint, idempotentHint), the description discloses critical behavioral traits: regex-based detection with validity checks, a specific resolution order for longer/stricter patterns to avoid partial matches, local execution without external services, rate limits (60 req/min for anonymous), and return format (masked text, replacement list, match counts). This fully informs the agent about how the tool behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense yet concise, front-loading purpose and detected types, then transitioning to usage guidance and technical details. Every sentence contributes meaningful information without redundancy. It is well-structured for an AI agent to quickly parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, output schema present), the description covers all essential aspects: purpose, usage context, detection details, operational constraints, and return format. The annotations further complete the behavioral profile, making the tool fully comprehensible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, so the description's parameter details are supplementary. It clearly explains each mask mode (token, partial, counter) with examples, and describes the enable object's default behavior (all types on). This adds value beyond the schema's descriptions, though the schema already provides formal definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a PII Data Anonymizer and Redactor, lists specific PII types detected, and explicitly distinguishes itself from the sibling tool 'data_data_faker' which generates new synthetic data rather than masking existing values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('scrub or redact real PII from logs, tickets, or datasets') and when to use the alternative ('data_data_faker' for generating synthetic test data). It also notes that the tool runs locally, is read-only, non-destructive, deterministic, and rate-limited, giving the agent clear operational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_data_fakerARead-only
Data Faker (Faker.js-style field presets). Generate fake values for one Faker.js-style field preset (44 namespaced fields across person, internet, address, phone, company, commerce, date, lorem, finance, and system) such as person.fullName, internet.email, address.zip, phone.imei, finance.creditCardNumber. Output is non-deterministic by default (CSPRNG); pass an optional string seed for reproducible runs via a non-cryptographic xoshiro128** generator. Use this when you need many values of a SINGLE field type; use data_random_data_generator or data_sample_data_generator instead to build multi-column records or curated datasets (users, orders) as JSON/CSV/TSV, or data_mock_api_generator to stand up mock endpoints. Runs locally: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests per minute anonymous, 120 authenticated). Returns the resolved preset, the count, and an array of generated string values.
| Name | Required | Description | Default |
|---|---|---|---|
| preset | Yes | Field preset to generate, namespaced as group.field (e.g. person.fullName, internet.email, finance.iban). Must be one of the 44 enum values. | |
| count | No | How many values to generate. Integer 1 to 1000; defaults to 1. | |
| seed | No | Optional string seed (max 1024 chars) for reproducible output via a non-cryptographic xoshiro128** generator. Omit or null for cryptographically random values. Never use seeded output for tokens, salts, keys, IVs, or nonces. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when generation succeeded; false on a validation error. |
| preset | No | The resolved preset that was generated. |
| count | No | Number of values returned (matches the requested count on success). |
| values | No | The generated fake values, one string per requested count. |
| error | No | Present only on failure; the validation error message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true, destructiveHint=false), the description adds: runs locally, non-destructive, contacts no external service, rate-limited, non-deterministic by default with optional seed for reproducibility. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is detailed but front-loaded with key purpose. Could be slightly more concise but the level of detail is justified given the tool's complexity and sibling differentiation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, behavioral aspects, parameter semantics, and output structure (returns preset, count, array). With output schema present, no further explanation needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; description reinforces parameter meanings: preset namespaced, count range, seed optional with security warning. Adds context not in schema (e.g., seed max length, not for security use).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates fake values for one Faker.js-style field preset, listing namespaces and examples. It distinguishes from sibling tools like data_random_data_generator and data_sample_data_generator, making the purpose specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (need many values of a single field type) and when to use alternatives (data_random_data_generator for multi-column records, data_mock_api_generator for mock endpoints). Also mentions rate limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_json_path_evaluatorARead-onlyIdempotent
JSON Path Evaluator (RFC 9535 / Goessner JSONPath Query). Evaluate one JSONPath expression against a JSON document and return every matched value with its path. Supports child/recursive-descent ($..), wildcards (* / [*]), numeric and negative indices, array slices ([start:end:step]), key unions, and filter expressions with comparison/boolean operators and length(); both dot and bracket notation, RFC 9535 and classic Goessner syntax. Use this to extract or query values from a JSON document you already have; use data_json_schema_validator instead to check a document against a schema, format_json to pretty-print or minify, or webdev_xml_to_json to convert XML first. Hand-rolled parser, no eval. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited. Returns the matches array (each with path, normalisedPath, value), a matchCount, the echoed expression, and the parsed document.
| Name | Required | Description | Default |
|---|---|---|---|
| document | Yes | JSON document to query. Pass either a JSON value (object, array, string, number, boolean, null) or a string of raw JSON, which is parsed before evaluation. | |
| expression | Yes | JSONPath query expression. Must be non-empty and start with the root token $ (for example $..book[?(@.price<10)].title). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether evaluation succeeded. |
| operation | No | Always evaluate. |
| result | No | The evaluation payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds significant context beyond annotations: hand-rolled parser (no eval), local execution, read-only/non-destructive, no external service, rate-limited. Annotations already indicated readOnlyHint=true and destructiveHint=false, but the description enriches with implementation details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with clear sections: purpose, returns, syntax support, usage guidance, implementation. It's informative but somewhat verbose; could be slightly more concise without losing clarity. Still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of JSONPath evaluation and the existence of an output schema, the description covers all necessary aspects: input, expression rules, output structure (matches array, path, value, count), and contextual comparisons. It is complete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add much beyond what's in the schema for the parameters. It mentions non-empty and root token $ for expression, but that's already in the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it evaluates a JSONPath expression against a JSON document and returns matched values with paths. It specifies supported syntax (child/recursive-descent, wildcards, slices, filters) and distinguishes itself from siblings like data_json_schema_validator, format_json, and webdev_xml_to_json.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('extract or query values from a JSON document you already have') and when not to, naming specific sibling tools for alternative tasks. This provides clear guidance for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_json_schema_validatorARead-onlyIdempotent
JSON Schema Validator (Draft 2020-12, Ajv). Validate a JSON instance against a JSON Schema (Draft 2020-12 by default; 2019-09, 7, 6, 4 are recognised from the schema $schema URI) using Ajv with ajv-formats, and report every constraint failure. Use this to check data you already have against a schema you already have; use data_json_schema_generator instead to infer a schema from a sample document. Compiles and validates locally on the input you provide: read-only, non-destructive, contacts no external service and does not fetch remote $ref schemas over the network, and is rate-limited (60 requests/minute for anonymous callers). Returns a valid flag and an errors array (each with keyword, instancePath, schemaPath, and message) plus an error count and the detected schema version.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | Yes | JSON Schema to validate against, as an object/boolean or a raw-JSON string. Draft is auto-detected from its $schema URI (defaults to Draft 2020-12). | |
| instance | Yes | JSON document to validate. Accepts a parsed value (object, array, number, boolean, null) or a raw-JSON string, which is parsed when it looks like JSON. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when validation ran (independent of whether the instance was valid). |
| operation | No | Always validate. |
| result | No | The validation result payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, idempotent. Description adds important context: local compilation, no remote $ref fetching, rate limit (60 req/min). No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is fairly concise but slightly verbose; each sentence adds value but could be more tightly written. Front-loads purpose well.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers supported drafts, behavior with remote $ref, rate limits, and output structure (valid flag, errors array with fields). Output schema exists but description adds context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds auto-detection of draft from $schema and notes that instance can be parsed or raw string, going beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it validates a JSON instance against a JSON Schema using Ajv, and distinguishes from data_json_schema_generator which infers schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool ('to check data you already have against a schema you already have') and when to use the sibling tool instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_mock_api_generatorARead-only
Mock API Generator (Build Mock REST API From JSON Schema). Generate a small in-memory mock REST API document from a JSON schema template: given an array of endpoints (each a path, HTTP method, record count, and a list of typed fields), it fabricates fake records per endpoint and returns them grouped by path. Field types include uuid, integer, float, boolean, full_name, first_name, last_name, email, phone, iso_date, iso_datetime, sentence, paragraph, and enum. Use this when you need multi-endpoint API fixtures keyed by route; use data_faker for a single flat list of richly namespaced person/finance fields, data_random_data_generator for one flat record set across many primitive types with CSV/TSV/NDJSON output, or data_sample_data_generator for curated ready-made domain datasets (users, orders, logs). Output is random and non-idempotent — an optional seed makes record bodies reproducible, but the generatedAt timestamp still varies each call. Runs locally, read-only, contacts no external service, and is rate-li
| Name | Required | Description | Default |
|---|---|---|---|
| template | Yes | Schema describing the endpoints to fabricate. | |
| seed | No | Optional seed; when set, record bodies are reproducible (generatedAt still varies). Omit for crypto-random output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when generation succeeded. |
| info | No | Summary of the generated document. |
| endpoints | No | One entry per requested endpoint. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds detail beyond annotations: randomness, seed reproducibility (with caveat about generatedAt), local execution, read-only nature, and rate limiting. Consistent with annotations (readOnlyHint=true, idempotentHint=false) and enriches agent understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, well-organized into purpose, usage comparison, and behavioral notes. However, it is somewhat verbose and includes redundant information (e.g., field types already in schema). Minor truncation at end does not impair clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, input structure, field types, behavioral traits, and alternatives. Output format is mentioned as 'grouped by path' and output schema provides complete structure. Truncation of final sentence ('rate-li') slightly reduces completeness but core information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage, so the description adds little new parameter information. It summarizes field types and endpoint structure, but these are already detailed in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates mock REST APIs from JSON schema with multiple endpoints. It explicitly distinguishes itself from sibling tools (data_faker, data_random_data_generator, data_sample_data_generator) by naming them and describing their different use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'Use this when you need multi-endpoint API fixtures keyed by route' and lists three specific alternatives with concise descriptions of when to use each.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_random_data_generatorARead-only
Generate Custom Random Fake Records. Generate fake records from a user-defined field schema, returning random values for 22 field types (first_name, last_name, full_name, email, phone, company, street_address, city, state, zip, country, country_code, iso_date, iso_datetime, uuid, integer, float, boolean, word, sentence, paragraph, enum) as JSON, NDJSON, CSV (RFC 4180), or TSV. Output is non-deterministic (CSPRNG via crypto.getRandomValues) unless a seed string is supplied, in which case generation is fully reproducible via deterministic xoshiro128** (never use seeded output for tokens, salts, keys, IVs, or nonces). Use this when you control the exact record schema (field names and per-field types/options). Use data_data_faker instead for realistic Faker.js-style preset fields chosen by name without per-field options; use data_sample_data_generator for ready-made curated demo datasets (users, orders, products, logs); use math_random_number_generator when you only need standalone random numbers, not records. Re
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Field schema: 1 to 50 field specifications. Each row of output contains one value per field. Field names must be unique. | |
| count | Yes | Number of records to generate. Required, 1 to 1000. | |
| seed | No | Optional seed (max 1024 chars). Omit or null for non-deterministic CSPRNG output; supply to get deterministic reproducible output. Do not use seeded output for security tokens. | |
| format | No | Output serialization for the output field. Default json (pretty-printed). csv is RFC 4180. | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True on success; false with an error string on bad input. |
| count | No | Number of records generated (echoes the request count). |
| fields | No | Normalised field specifications used, each with name, type, and resolved options. |
| format | No | Output format used (json, ndjson, csv, or tsv). |
| output | No | Records serialized as a single string in the chosen format. |
| records | No | Parsed records; each item is an object keyed by field name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses non-deterministic CSPRNG vs deterministic seeded output with xoshiro128**, and warns against using seeded output for security purposes. Annotations already indicate readOnlyHint=true, and description adds valuable behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that front-load purpose and then cover randomness and guidelines. Brief but effective, though appears truncated at the end ('Re').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, randomness, security, and output formats. With full schema descriptions and an output schema, the description is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context about output formats, seed behavior, and field types beyond what schema provides, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates custom random fake records with user-defined schema. It lists 22 field types and distinguishes from sibling tools like data_data_faker, data_sample_data_generator, and math_random_number_generator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool: 'Use this when you control the exact record schema' and provides alternatives for other cases, naming specific sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_sample_data_generatorARead-only
Sample Data Generator. Generate ready-made demo datasets for nine fixed business shapes (users, orders, products, log_lines, transactions, inventory, tickets, employees, analytics_events), each with a curated column set, emitted as JSON, NDJSON, CSV (RFC 4180), or TSV. Pick this when you want a recognisable, opinionated table for one of those shapes; use data_faker to compose arbitrary field-by-field records, data_random_data_generator for schema-driven random rows, or data_mock_api_generator to stand up mock endpoints. Runs locally: read-only, non-destructive, contacts no external service, and rate-limited (60 requests/minute for anonymous callers). Output is NON-deterministic by default (cryptographic randomness); pass a string seed for reproducible rows. Returns the formatted output string plus the parsed records array.
| Name | Required | Description | Default |
|---|---|---|---|
| shape | Yes | Dataset preset to generate; each shape has a fixed column set. | |
| count | No | Number of records to generate (1 to 500). | |
| seed | No | Optional seed string for reproducible output (max 1024 chars); omit or null for cryptographic randomness. | |
| format | No | Output serialisation: json (pretty array), ndjson (one object per line), csv (RFC 4180), or tsv. | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether generation succeeded. |
| shape | No | The shape preset that was generated. |
| count | No | Number of records returned. |
| format | No | The output format applied (json, ndjson, csv, or tsv). |
| output | No | The serialised dataset in the requested format. |
| records | No | The generated records as objects, before serialisation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint true), description adds details: runs locally, non-destructive, rate-limited, non-deterministic by default but supports seed for reproducibility. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single, well-structured paragraph that front-loads purpose and provides necessary details without redundancy. Slightly lengthy but efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all aspects: shapes, count, seed, format, return value, determinism, rate limits, and local execution. Output schema exists; description complements it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; description adds meaning by explaining shape examples, count range, seed purpose, format types, and return value structure, going beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'generate ready-made demo datasets' for nine fixed shapes, and distinguishes from siblings like data_faker and data_random_data_generator by naming them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use this tool ('recognisable, opinionated table') and when to use alternatives ('use data_faker...'), providing clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_table_generatorARead-onlyIdempotent
Format And Parse Tabular Data Tables. Deterministically converts supplied tabular data (header row plus 2-D rows) into a Markdown (GFM), HTML, CSV (RFC 4180), or TSV table, and parses CSV/TSV/Markdown text back into structured headers and rows. Does NOT generate random or sample data: it only formats or parses the exact cells you pass. Use operation render to serialize headers/rows into one of the four output formats with optional per-column alignment; use operation parse to read a pasted table string into headers/rows. Use this instead of data_sample_data_generator or data_data_faker (which invent random records), and prefer it over webdev_csv_to_json / webdev_json_to_csv when you need Markdown/HTML output or alignment-aware Markdown rather than JSON. Stateless, read-only, offline pure-compute; no auth required; default anonymous rate limit 60 requests/minute. Returns the formatted table string plus normalized headers, rows, rowCount, and columnCount.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | render serializes headers/rows into a table string; parse reads a table string into headers/rows. Defaults to render. | render |
| format | No | Target/source format. For render one of markdown, html, csv, tsv. For parse only csv, tsv, or markdown are accepted (html is render-only). Required for both operations. | |
| headers | No | render only. Optional array of column header strings; max 200. When present and content rows exist, its length must equal the widest row or the request is rejected. | |
| rows | No | render only. Array of rows, each an array of scalar cells (string, number, boolean, null); max 10000 rows and 200 columns per row. Required for render. | |
| alignment | No | render only, optional. Per-column alignment for markdown and html output; each entry is left, center, or right. Padded with left to column count. Ignored for csv/tsv. | |
| source | No | parse only. The raw CSV, TSV, or Markdown table text to parse. The first row is treated as headers. Null or empty returns empty headers/rows. Required for parse. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation completed without a validation error. |
| operation | No | Echo of the requested operation (render or parse). |
| result | No | render returns format, headers, rows, output, rowCount, columnCount. parse returns headers, rows, rowCount, columnCount (no output/format). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: stateless, read-only, offline pure-compute, no auth required, default rate limit 60/min, and deterministic behavior. Annotations declare readOnlyHint=true and idempotentHint=true, which the description corroborates. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is slightly verbose but well-structured: it starts with the main purpose, then lists capabilities, then exclusions, then usage guidance, then behavioral traits. Every sentence adds value, but it could be more concise by separating the guidance into bullet points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (context indicates true), the description covers all necessary aspects: operations, formats, behavioral notes, auth, rate limits, and disambiguation from siblings. No gaps for a table formatting/parsing tool with 6 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the two operations ('render' and 'parse') and noting the purpose of parameters like alignment (per-column) and the distinction between operation requirements. While not fully compensating for missing schema descriptions (none needed), it provides helpful operational context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it formats and parses tabular data, specifies supported formats (Markdown, HTML, CSV, TSV), and explicitly distinguishes from sibling tools like data_sample_data_generator and webdev_csv_to_json. The verb+resource combination is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use this instead of data_sample_data_generator or data_data_faker (which invent random records), and prefer it over webdev_csv_to_json / webdev_json_to_csv when you need Markdown/HTML output or alignment-aware Markdown rather than JSON.' It also states what the tool does not do ('Does NOT generate random or sample data').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_uuid_validatorARead-onlyIdempotent
UUID / GUID Validator and Parser. Strictly validate a UUID/GUID string and report its structure: validity, RFC 4122 / RFC 9562 version (1-8), variant (NCS, RFC 4122, Microsoft, Reserved), Nil and Max special cases, normalized/uppercase/URN forms, and the embedded timestamp, node, and clock sequence for time-based v1, v6, and v7. Accepts canonical hyphenated, 32-hex no-dash, braced, and urn:uuid: forms. Use this to inspect or verify an existing identifier; use crypto_uuid instead when you need to GENERATE a new UUID. Set operation to validate or identify (single string), compare (test two strings for equality), or batchValidate (up to 1000 strings at once). Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns a result object whose shape depends on the chosen operation.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | Which check to run. validate and identify parse one string (field input); compare tests two strings (fields a and b) for equality; batchValidate parses a list (field inputs). | |
| input | No | The UUID/GUID string to parse. Required for validate and identify. Accepts hyphenated, 32-hex, braced, or urn:uuid: forms; whitespace is trimmed. | |
| a | No | First UUID string. Required for the compare operation. | |
| b | No | Second UUID string. Required for the compare operation. | |
| inputs | No | List of UUID strings to validate in one call. Required for batchValidate; 1 to 1000 items. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request was processed (true on any 200; per-UUID validity is in result). |
| operation | No | The operation that was run, echoed back. |
| result | No | Operation-dependent payload. For validate/identify: a single validation object. For compare: equality flags. For batchValidate: counts plus a results array. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant context beyond annotations: read-only, non-destructive, local, no external service, rate limit (60 req/min). Consistent with readOnlyHint and idempotentHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured, front-loaded with purpose, then details, alternative, and operations. Every sentence adds value; efficient for the amount of information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive coverage of purpose, usage, behavior, parameters, operations, safety, and rate limits. No gaps given output schema handles return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds operational context (which field for which operation) and acceptable formats. Provides clarity beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it validates and parses UUID/GUID strings, reporting structure and various forms. It distinguishes from crypto_uuid for generation, making purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (inspect/verify existing identifier) and when not (generate new one, use crypto_uuid). Also describes operations with their specific inputs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_toolA
Fetch the full Online Cyber Tools page guidance for a tool. Accepts a menu ID such as ping or an MCP tool name such as network_ping.
| Name | Required | Description | Default |
|---|---|---|---|
| tool_id | Yes | Menu ID or MCP tool name to describe. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It discloses that the operation is fetching guidance (read-only), but it does not mention potential failure modes, authentication requirements, or rate limits. The description is minimally adequate for a straightforward fetch operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, each serving a clear purpose: stating the action and providing input examples. It is front-loaded and contains no redundant words, achieving maximum efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one parameter, no output schema), the description is mostly complete. It explains the purpose and input format. It could optionally describe the output (e.g., 'returns the guidance text'), but the phrase 'full ... page guidance' implies a textual response, making it sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the parameter as 'Menu ID or MCP tool name to describe.' The description adds concrete examples ('ping', 'network_ping'), which clarify the expected format beyond the schema description. This adds value given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Fetch' and clearly identifies the resource as 'the full Online Cyber Tools page guidance for a tool.' This distinguishes it from sibling tools, which are actual tool implementations (e.g., conversions, crypto) rather than meta-documentation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples of acceptable inputs ('menu ID such as `ping` or an MCP tool name such as `network_ping`'), which aids usage, but it does not explicitly state when to use this tool versus alternatives like the 'search' sibling tool. More explicit guidance on selecting this tool would improve the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_ascii85ARead-onlyIdempotent
ASCII85 / Base85 Encoder and Decoder. Encode text to ASCII85 (Base85) or decode ASCII85 back to text, using the Adobe PostScript character set with optional z (4 zero bytes) and y (4 space bytes) compression. ASCII85 packs 4 bytes into 5 characters (~25% smaller than Base64's 4-into-6); use encoding_decoding_base64 for the ubiquitous web/MIME format, or encoding_decoding_base91 for the most compact ASCII-safe output. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the converted string plus size and efficiency statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Input to convert: UTF-8 plaintext when encoding, or an ASCII85 string when decoding. Must not be blank. | |
| operation | Yes | Direction: "encode" turns text into ASCII85; "decode" turns an ASCII85 string back into text. | |
| options | No | Optional encode-time settings (ignored when decoding, since delimiters and whitespace are auto-detected). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| input | No | The submitted text, echoed back. |
| operation | No | The operation performed ("encode" or "decode"). |
| options | No | The effective encode options after defaults were applied. |
| result | No | The ASCII85 string (encode) or decoded text (decode). |
| stats | No | Size and efficiency metrics for the conversion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint; description adds that it runs locally, is non-destructive, contacts no external service, and has a rate limit of 60 requests/minute for anonymous callers, fully disclosing behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured: first sentence states purpose, then details compression, sibling differentiation, behavioral notes, and what is returned. Every sentence adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters with nested objects, an output schema, and moderate complexity, the description is thorough. It covers all aspects: direction, compression, local execution, rate limits, and return value (size and efficiency stats). Output schema handles return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for each parameter. Description adds value by explaining z and y compression and clarifying that options are only for encoding, but schema already covers individual fields well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it is an ASCII85/Base85 encoder and decoder, specifies the Adobe PostScript character set with optional z and y compression, and distinguishes from sibling tools (base64 and base91).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool versus alternatives (base64 for web/MIME, base91 for compact output), and notes that it runs locally with rate limits, helping the agent choose appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_atbashARead-onlyIdempotent
Atbash Cipher (Encode and Decode). Apply the Atbash substitution cipher, mapping each Latin letter to its mirror (A<->Z, B<->Y, ... ); digits and symbols pass through unchanged. Atbash is symmetric, so encoding and decoding are the identical transform — the operation flag only labels the output. Use it for classical/CTF puzzles and ROT-style text scrambling; it is a fixed historical cipher with no key and provides no real security, so it is not encryption. Choose encoding_decoding_rot13 or encoding_decoding_caesar instead when you need a different shift. Runs locally, read-only, non-destructive, and rate-limited. Returns the transformed text plus an info note that the cipher is symmetric.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to transform; must not be blank. Letters are mirrored, other characters are unaffected. | |
| operation | Yes | Required label for the requested direction. Atbash is symmetric, so encode and decode produce identical output; this only sets the echoed operation field. | |
| preserve_case | No | When true, keep each letter's original case; when false, uppercase letters become lowercase and lowercase become uppercase. | |
| preserve_non_alpha | No | When true, pass digits, spaces, and punctuation through unchanged; when false, drop all non-letter characters from the output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the transform succeeded. |
| input | No | The original text, echoed back. |
| operation | No | The requested direction (encode or decode); output is identical either way. |
| preserve_case | No | The effective preserve_case setting used. |
| preserve_non_alpha | No | The effective preserve_non_alpha setting used. |
| result | No | The Atbash-transformed text. |
| info | No | Note that Atbash is symmetric — encoding and decoding are identical. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint; the description adds that it runs locally, is read-only, non-destructive, and rate-limited, along with explaining the symmetric nature of Atbash.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is 5 sentences, front-loaded with the main purpose, and every sentence adds value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple cipher and presence of output schema, the description covers behavior, parameters, usage, safety, and return implications thoroughly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline is 3. The description adds value by explaining the symmetry and that the operation flag only labels output, supplementing the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool applies the Atbash substitution cipher, mapping A<->Z etc. It is a specific verb+resource and distinguishes from siblings by naming rot13 and caesar as alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use for classical/CTF puzzles and ROT-style scrambling, and provides alternatives when a different shift is needed. Also clarifies it provides no real security.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_baconianARead-onlyIdempotent
Baconian Cipher (Encode and Decode). Encode or decode text with the Baconian cipher, a binary steganographic substitution that maps each letter to a five-symbol group of A/B (or 0/1). It is a fixed historical cipher with no key and provides no real security, so it is not encryption — use it for classical/CTF puzzles or to hide a binary message inside other text. Version A is the 24-letter classical table (I/J and U/V share codes, so decoding is lossy); version B is the full 26-letter table with no collisions. For keyed or shift-based classical ciphers choose encoding_decoding_vigenere, encoding_decoding_caesar, or encoding_decoding_atbash instead. Runs locally, read-only, non-destructive, and rate-limited (60 requests/min, 500/hour, 2000/day for anonymous callers). Returns the transformed text plus an analysis object (lengths, cipher-group count, expansion ratio, security level).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to process; must not be blank. When encoding, letters are mapped to five-symbol groups and non-letters pass through; when decoding, five-symbol groups are converted back to letters. | |
| operation | Yes | Direction of the transform: encode turns plaintext into Baconian groups, decode turns Baconian groups back into plaintext. | encode |
| version | Yes | Cipher table variant. A is the 24-letter classical table where I/J and U/V share codes (lossy on decode); B is the full 26-letter table with a unique code per letter. | A |
| alphabet | Yes | Symbol pair for the five-symbol groups: AB uses letters A and B, 01 uses digits 0 and 1. | AB |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the transform succeeded. |
| result | No | The transformed text: space-separated five-symbol groups when encoding, decoded plaintext when decoding. |
| operation | No | The requested direction (encode or decode), echoed back. |
| version | No | The cipher table variant used (A or B), echoed back. |
| alphabet | No | The symbol pair used (AB or 01), echoed back. |
| analysis | No | Metrics about the transform. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), the description adds important behavioral context: runs locally, non-destructive, rate limits (60/min, 500/hour, 2000/day), and the lossy nature of version A decoding. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but well-structured: starts with core purpose, then details, alternatives, and behavioral traits. Every sentence adds value, though slightly lengthy. Could be split for readability but still concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but indicated), the description mentions return value: 'transformed text plus an analysis object (lengths, cipher-group count, expansion ratio, security level)'. This, combined with parameter and behavior details, makes the description complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions, but the description adds significant value: explains the mapping (A/B or 0/1), historical context, difference between versions A and B, and behavior on non-letters. This goes beyond the schema's documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Baconian Cipher (Encode and Decode). Encode or decode text with the Baconian cipher.' It specifies the resource (text) and action (encode/decode), and differentiates from sibling tools by naming alternatives like encoding_decoding_vigenere, caesar, atbash.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: 'use it for classical/CTF puzzles or to hide a binary message inside other text.' It also clarifies when not to use: 'it is not encryption' and suggests alternatives for keyed or shift-based classical ciphers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_base64ARead-onlyIdempotent
Base64 Encoder and Decoder. Convert UTF-8 text to standard Base64 (RFC 4648, +/ alphabet, = padding) or decode Base64 back to text. Whitespace in decode input is ignored and the payload is validated before decoding. This handles text only — to Base64-encode an uploaded file or a data URI use file_base64_file_encoder, for images use webdev_base64_image_encoder, and for Base32/Base58/Base85 use encoding_basex or encoding_ascii85. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/min, 500/hour, 2000/day for anonymous callers). Returns the transformed string alongside the echoed input and operation.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The payload to process. For encode, the plain UTF-8 text to convert to Base64; for decode, the Base64 string to convert back to text (surrounding whitespace and newlines are stripped). Must not be blank. | |
| operation | Yes | Direction of conversion: 'encode' turns text into Base64; 'decode' turns valid Base64 back into text. Invalid Base64 on decode returns an error. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the conversion succeeded. |
| input | No | The original text submitted, echoed back. |
| operation | No | The direction requested; either encode or decode. |
| result | No | The converted output — Base64 for encode, decoded UTF-8 text for decode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds details beyond annotations: ignores whitespace on decode, validates payload, runs locally, is read-only, rate-limited, and describes return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence is informative, front-loaded with purpose, no redundancy, well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers input, output, behavior, alternatives, constraints; output schema present; no gaps for a text encoding tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description mostly repeats schema info; adds no significant new meaning beyond what is already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a Base64 encoder/decoder for UTF-8 text, and distinguishes from sibling tools for files, images, and other bases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (text only) and when to use alternatives (file, image, other bases), providing clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_base91ARead-onlyIdempotent
Base91 Encoder and Decoder. Encode bytes to basE91 or decode basE91 back to data, the densest of the ASCII-safe binary-to-text encodings: about 23% smaller than Base64 (roughly 1.23x the input size versus Base64 1.33x). Set operation to encode or decode and choose how input bytes are read with format. Prefer encoding_decoding_base91 when output size matters most; use encoding_decoding_base64 for the ubiquitous web/MIME format, encoding_decoding_ascii85 for Adobe PostScript Base85, or encoding_decoding_basex for Base32/Base58/Base85. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, idempotent, and rate-limited (60 requests/minute for anonymous callers). Returns the converted string plus size/efficiency statistics and a per-character analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Input to convert: when encoding, data interpreted per format (UTF-8 text, hex, or binary digits); when decoding, a basE91 string. Must not be blank. | |
| operation | Yes | Direction: encode turns input into basE91; decode turns a basE91 string back into text. | |
| format | No | How to read text when encoding: text (UTF-8), hex (even-length hex, whitespace allowed), or binary (0/1 digits in multiples of 8 bits). Ignored when decoding. | text |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| input | No | The submitted text, echoed back. |
| operation | No | The operation performed (encode or decode). |
| format | No | The input format used for encoding (text, hex, or binary). |
| result | No | The basE91 string (encode) or decoded text (decode). |
| stats | No | Size and efficiency metrics for the conversion. |
| char_analysis | No | Distinct output characters (encode only; empty on decode), sorted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, destructive, idempotent), description adds local execution, rate limit (60 req/min), return details (converted string plus statistics and per-character analysis), and confirms no external service contact. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: first sentence defines purpose, then efficiency stat, then usage guidelines, then behavioral traits. Every sentence is informative and necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all aspects: purpose, when to use, parameter roles, behavioral traits, and output summary. With output schema present, description is complete for an encoding/decoding tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage but description adds value by explaining operation directions and format interpretations (text/hex/binary), plus efficiency comparison. Baseline 3, description justifies 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Base91 Encoder and Decoder' with specific verb+resource, and differentiates from siblings by recommending when to use base91 vs base64/ascii85/basex.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Prefer encoding_decoding_base91 when output size matters most' and names alternatives for other scenarios, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_basexARead-onlyIdempotent
Base32 / Base58 / Base85 Encoder and Decoder. Encode UTF-8 text to Base32 (RFC 4648 padded), Base58 (Bitcoin alphabet, no 0/O/I/l), or Base85 (Z85-style 85-character set), or decode any of those three back to text. Pick the format with the base parameter (32, 58, or 85). Use encoding_decoding_base64 for the ubiquitous web/MIME format, encoding_decoding_ascii85 for Adobe PostScript Base85, or encoding_decoding_base91 for the most compact ASCII-safe output. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the converted string plus length, ratio, and efficiency statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Input to convert: UTF-8 plaintext when encoding, or an encoded string in the chosen base when decoding. Must not be blank. | |
| operation | Yes | Direction of conversion. "encode" turns text into the chosen base; "decode" turns an encoded string back into text. | |
| base | Yes | Target alphabet. "32" = RFC 4648 Base32 with = padding; "58" = Base58 (Bitcoin alphabet); "85" = Base85 (Z85-style set). | 32 |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| input | No | The submitted text, echoed back. |
| operation | No | The operation performed ("encode" or "decode"). |
| base | No | The base used ("32", "58", or "85"). |
| result | No | The encoded string (encode) or decoded text (decode). |
| analysis | No | Length and efficiency metrics for the conversion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint), the description adds critical behavioral details: 'runs locally', 'read-only, non-destructive', 'rate-limited (60 requests/minute)', and discloses return values (converted string plus statistics). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sentences, each earning its place. It is slightly verbose (e.g., 'runs locally on the text you provide') but still efficient. Minor redundancy could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters (all documented in schema), full schema coverage, output schema present (though not shown, description mentions statistics), and sibling context, the description is complete. No missing aspects for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds meaning beyond schema by providing examples for text, clarifying operation direction, and detailing base format specifics (RFC 4648 padding, Bitcoin alphabet, Z85 character set). Slightly redundant with schema but still adds value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a Base32/58/85 encoder/decoder, specifies exact encoding standards (RFC 4648, Bitcoin alphabet, Z85), and distinguishes it from sibling tools by naming them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use guidance: 'Pick the format with the base parameter' and mentions alternative tools for Base64, Ascii85, and Base91. It also notes local execution and rate limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_binary_textARead-onlyIdempotent
Binary and Text Converter. Convert text into space-separated 8-bit binary byte strings (text_to_binary) or decode a binary bit string back into text (binary_to_text), with selectable UTF-8, ASCII, or Latin-1 character encoding and spaced, continuous, or custom-separator output formatting. Each character becomes one or more zero-padded 8-bit groups. Use encoding_decoding_hex_ascii for base-16 byte strings instead of base-2, conversion_number_base to convert one ASCII string across binary/hex/decimal/octal at once, and conversion_binary_decimal to read a binary string as a single numeric value rather than per-character text. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the converted string plus binary parts and entropy/compression analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | Direction: text_to_binary encodes plaintext into binary; binary_to_text decodes a binary bit string back into text. | text_to_binary |
| input | Yes | Data to convert: UTF-8 plaintext when encoding, or a binary bit string when decoding. Must not be blank. | |
| format | No | Output/input grouping. spaced: bytes separated by a single space. continuous: no separators (decode requires length divisible by 8). custom_separator: bytes joined/split on the separator value. | spaced |
| separator | No | Delimiter used only when format is custom_separator; ignored otherwise. | |
| encoding | No | Character encoding. utf8: full Unicode (multi-byte chars become multiple bytes). ascii: rejects code points above 127. latin1: rejects code points above 255. | utf8 |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| result | No | The conversion payload from the binary-text logic. |
| error | No | Present only on failure: the error message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true; the description adds details like 'runs locally', 'non-destructive', 'contacts no external service', rate limiting, and that output includes entropy/compression analysis, which goes beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph but logically ordered: purpose, details, alternatives, behavioral notes. Efficient without redundancy, but could use structural elements like bullet points for faster scanning. No wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters with enums, an output schema (not shown but exists), and siblings, the description covers operation modes, encoding options, formatting details, output contents, behavioral traits, and rate limits. It is comprehensive and leaves no major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 5 parameters with descriptions. The description adds context by explaining how format and separator interact (e.g., separator only used with custom_separator), and clarifies the overall encoding logic (multi-byte chars become multiple bytes for utf8). However, most parameter details are already in schema, so value is moderate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts text to binary and binary to text, specifying operations like text_to_binary and binary_to_text, and distinguishes from sibling tools by mentioning alternatives for hex (encoding_decoding_hex_ascii), base conversion (conversion_number_base), and numeric binary interpretation (conversion_binary_decimal).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when-to-use guidance by contrasting with related tools, noting that hex, multi-base, and numeric binary conversions are handled elsewhere. Also clarifies it runs locally, is read-only, and has rate limits, helping agents decide appropriateness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_binhexARead-onlyIdempotent
BinHex Encoder and Decoder. Encode text to BinHex 4.0 (HQX) or decode a BinHex stream back to text. BinHex is the classic Macintosh binary-to-ASCII format that wraps a file's data fork plus Finder metadata (filename, 4-char type and creator codes) and CRC checksums into a 7-bit ":...:" envelope for email and cross-platform transfer. Use encoding_decoding_uuencode or encoding_decoding_xxencode for Unix/Usenet files, encoding_decoding_base64 for the ubiquitous web/MIME format, or encoding_decoding_ascii85 for the most compact ASCII-safe output. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the converted string; decoding also returns the recovered filename, type, creator, and byte size.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Input to convert: UTF-8 plaintext when encoding, or a BinHex 4.0 stream (the ":...:" block) when decoding. Must not be blank. | |
| operation | Yes | Direction: encode wraps text into a BinHex 4.0 envelope; decode recovers the original text and Finder metadata from a BinHex stream. | |
| filename | No | Encode-only: filename stored in the BinHex header (truncated to 63 bytes). Ignored when decoding (filename is read from the stream). | data.bin |
| type | No | Encode-only: 4-character Macintosh Finder file type code (padded/truncated to 4 chars). Ignored when decoding. | TEXT |
| creator | No | Encode-only: 4-character Macintosh Finder creator code (padded/truncated to 4 chars). Ignored when decoding. | UNIX |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| input | No | The submitted text, echoed back. |
| operation | No | The operation performed (encode or decode). |
| filename | No | Encode: the filename you supplied. Decode: filename recovered from the BinHex header. |
| type | No | Encode: the type code you supplied. Decode: type code recovered from the header. |
| creator | No | Encode: the creator code you supplied. Decode: creator code recovered from the header. |
| size | No | Decode only: byte length of the recovered data fork. |
| result | No | Encode: the BinHex 4.0 envelope string. Decode: the recovered file contents as text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds valuable context: runs locally on provided text, contacts no external service, rate-limited (60 requests/minute), and returns converted string plus metadata on decode. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but efficiently packs all key info without redundancy. It could be slightly more structured (e.g., bullet points for alternatives), but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, 2 required, output metadata), the description covers purpose, usage, behavior, parameters, and returns comprehensively. It also references output schema implicitly (decoding returns filename, type, creator, size). Well-contextualized among many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 5 parameters. The description adds extra meaning: explains default values, truncation rules for filename/type/creator, and that some parameters are ignored on decode. This goes beyond schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool encodes text to BinHex 4.0 or decodes BinHex to text, with specific verb+resource+format. It distinguishes from siblings by listing alternative encodings (uuencode, xxencode, base64, ascii85) and their use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use BinHex (classic Macintosh binary-to-ASCII) and when not to (for Unix/Usenet use uuencode/xxencode, for web/MIME use base64, etc.). It also notes the tool is read-only and non-destructive, providing clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_bubble_babbleARead-onlyIdempotent
Bubble Babble Encoder/Decoder. Bubble Babble encodes arbitrary binary data as a pronounceable string of alternating consonants and vowels (e.g. "xexax", the format SSH uses for key fingerprints), with a built-in checksum. Set operation to encode to turn input into babble, or decode to recover the original bytes. Use encoding_decoding_base64 instead when you need compact, standard ASCII-safe transport rather than a human-pronounceable, memorisable form. Runs locally on the input you provide: read-only, non-destructive, offline, and rate-limited. Returns the converted result plus a length/byte analysis of the input.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Data to process. When encoding, interpreted per format; when decoding, the Bubble Babble string (e.g. xexax). | |
| operation | Yes | encode turns input bytes into Bubble Babble; decode recovers the original bytes. | |
| format | No | How text is read on encode and rendered on decode. text is raw UTF-8, hex is hexadecimal, binary is space-separated 8-bit groups. | text |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the operation succeeded. |
| input | No | The input text, echoed back. |
| operation | No | The operation performed (encode or decode). |
| format | No | The format applied (text, hex, or binary). |
| result | No | The Bubble Babble string (encode) or recovered data in the chosen format (decode). |
| info | No | One-line explanation of Bubble Babble encoding. |
| analysis | No | Metrics about the input. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds details about built-in checksum, offline operation, and length/byte analysis, complementing annotations (readOnlyHint, idempotentHint) without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise single paragraph with front-loaded purpose and useful detail; slightly redundant in repeating 'Bubble Babble' but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completely covers purpose, usage, alternatives, behavioral traits, and return value (converted result plus analysis); output schema further reduces need for return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description explains the effect of 'operation' (encode/decode) and 'format' (text/hex/binary) beyond the schema, including how inputs are interpreted, adding value despite high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool is an encoder/decoder for Bubble Babble, gives example usage ('xexax'), and explicitly contrasts with sibling tool encoding_decoding_base64, differentiating when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit alternative (base64) and mentions local, read-only, non-destructive, offline, and rate-limited behavior, but lacks more detailed when-not-to-use guidance beyond the base64 comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_caesarARead-onlyIdempotent
Caesar Cipher (Encode / Decode). Encode or decode text with the classical Caesar shift cipher: each A-Z letter is rotated a fixed number of positions (1-25) through the alphabet, decode applying the inverse rotation. This is a monoalphabetic substitution cipher with no real cryptographic strength — identical letters always map identically and frequency patterns survive, so use it for puzzles, CTFs, and learning, not to protect secrets. Use encoding_decoding_rot13 for the fixed ROT13/ROT47 variant (shift 13), or encoding_decoding_vigenere when you need a keyword-driven polyalphabetic shift instead of one fixed value. Out-of-range or non-integer shifts are rejected; preserve_case and preserve_non_alpha control whether original casing and non-letter characters are kept. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited. Returns the transformed text, a human-readable info string, and a letter-frequency analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to transform. Only A-Z/a-z letters are shifted; other characters are passed through or dropped per preserve_non_alpha. | |
| operation | Yes | Whether to encode (shift forward) or decode (shift backward by the same amount). | |
| shift | Yes | Number of alphabet positions to rotate each letter. Must be an integer 1-25; shift 13 equals ROT13 (encode and decode are identical). | |
| preserve_case | No | Keep each letter's original upper/lower case. When false, encoded output is upper-cased and decoded output lower-cased. | |
| preserve_non_alpha | No | Keep numbers, spaces, and punctuation in the output. When false, all non-letter characters are removed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the transform succeeded. |
| input | No | The input text, echoed back. |
| operation | No | The operation performed (encode or decode). |
| shift | No | The shift value applied (1-25). |
| preserve_case | No | Whether original letter case was preserved. |
| preserve_non_alpha | No | Whether non-letter characters were preserved. |
| result | No | The transformed (encoded or decoded) text. |
| info | No | Human-readable summary of the shift, e.g. noting when shift 13 equals ROT13. |
| analysis | No | Letter-frequency analysis of the input text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations to explain that the tool runs locally, is read-only, non-destructive, contacts no external service, and is rate-limited. It also details behavior for out-of-range shifts (rejected) and how preserve_case and preserve_non_alpha affect output. This fully discloses operational characteristics and is consistent with the annotations (readOnlyHint, destructiveHint, idempotentHint).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative and well-structured, with each sentence serving a purpose (purpose, alternatives, behavior details, return info). It is slightly lengthy but not verbose; a minor trim could improve conciseness without losing content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all relevant aspects: tool purpose, usage scenarios, behavioral traits, parameter effects, error handling, output structure (transformed text, info string, frequency analysis), and alternative tools. It is fully complete for an AI agent to select and use the tool correctly, especially with an output schema present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the input schema has 100% coverage, the description adds meaningful context: it explains that shifts 1-25 are valid and shift 13 equals ROT13, that non-integer shifts are rejected, and how the boolean parameters control case and non-alphabetic character handling. This clarifies parameter behavior beyond schema constraints and helps the agent set correct values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool encodes or decodes text using the Caesar shift cipher, specifying it works on A-Z letters with shifts 1-25. It distinguishes itself from sibling tools like rot13 and vigenere by naming them and describing their different use cases, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage context: suitable for puzzles, CTFs, and learning, but not for protecting secrets. It also names alternatives (encoding_decoding_rot13 for fixed ROT13, encoding_decoding_vigenere for keyword-driven shifts) and explains when each is appropriate, giving clear guidance on when to use this tool versus others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_hex_asciiARead-onlyIdempotent
Hex to ASCII Converter (Bidirectional). Convert hexadecimal strings to ASCII/text and text back to hex, with selectable byte delimiter (spaced, continuous, or custom separator), upper/lowercase hex, and character encoding (ascii, latin1, utf8). Use conversion_number_base for multi-radix ASCII/binary/hex/octal/decimal byte conversion, encoding_decoding_binary_text for the binary representation of text, or encoding_decoding_base64 for MIME-safe binary transport. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the converted string plus hex pairs, byte values, and a statistics block (length, byte count, entropy, printable ratio, character range).
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Direction of conversion. "hex_to_ascii" decodes hex into text; "ascii_to_hex" encodes text into hex. | hex_to_ascii |
| input | Yes | Data to convert: a hex string when operation is "hex_to_ascii", or plaintext when "ascii_to_hex". Must not be empty. | |
| format | No | Hex byte layout. "spaced" separates pairs with a single space; "continuous" emits unbroken hex; "custom_separator" uses the separator field. | spaced |
| separator | No | Delimiter between hex pairs. Only used when format is "custom_separator" (for example "0x" or backslash-x). | |
| case | No | Letter case of emitted hex digits. Applies only to "ascii_to_hex". | lowercase |
| encoding | No | Character encoding used to map bytes to characters. "ascii" rejects bytes above 127; "latin1" allows 0-255; "utf8" decodes multi-byte sequences. | ascii |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| operation | No | The operation performed ("hex_to_ascii" or "ascii_to_hex"). |
| input | No | The submitted input, echoed back. |
| output | No | The converted result: ASCII/text when decoding, a hex string when encoding. |
| format | No | The hex layout that was applied. |
| encoding | No | The character encoding that was applied. |
| hex_pairs | No | The individual two-character hex bytes produced or parsed. |
| byte_values | No | Decimal byte values (present only for "hex_to_ascii"). |
| analysis | No | Statistics about the converted data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds context: 'Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited.' No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded and concise, with four sentences covering function, features, alternatives, and safety. Each sentence adds value, though slightly more structure could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (6 params, output schema exists), the description adequately covers input, options, safety, and usage guidance. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for 6 parameters. Description summarizes parameter choices (delimiter formats, case, encoding) but does not add significant meaning beyond schema descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Hex to ASCII Converter (Bidirectional)' and details the conversion between hex and text with options. It distinguishes itself from siblings like conversion_number_base, encoding_decoding_binary_text, and encoding_decoding_base64.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explicitly names alternative tools for different use cases: conversion_number_base for multi-radix, encoding_decoding_binary_text for binary representation, encoding_decoding_base64 for MIME-safe transport. It also notes local execution and rate limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_html_entitiesARead-onlyIdempotent
Encode or Decode HTML Entities. Convert special characters to HTML entities and back so text is safe to embed in HTML/XML markup and to prevent XSS. Encoding replaces characters with named (&lt;), decimal (&#60;), or hex (&#x3C;) entities; decoding resolves all three forms back to characters. Use this for HTML/XML markup safety; use encoding_decoding_url for URL percent-encoding, encoding_decoding_unicode for \u/\x source-code escapes, and encoding_decoding_string_escape for SQL/CSV/code string-literal quoting. Runs locally on the supplied text: read-only, non-destructive, offline, and rate-limited (60 requests/min anonymous). Returns the converted string plus a length and entity-count analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to encode or decode. Required, non-empty. | |
| operation | Yes | encode converts characters to HTML entities; decode resolves named/decimal/hex entities back to characters. | |
| mode | No | Encode only. safe escapes < > & " only; all also escapes every non-ASCII character; extended escapes the common Latin-1, punctuation, and currency ranges. Ignored when decoding. | safe |
| format | No | Encode only. Output entity form: named (&lt; with numeric fallback), decimal (&#60;), or hex (&#x3C;). Ignored when decoding. | named |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the operation succeeded. |
| input | No | The original text, echoed back. |
| operation | No | The operation performed (encode or decode). |
| mode | No | The encode mode used (safe, all, or extended). |
| format | No | The encode output format used (named, decimal, or hex). |
| result | No | The encoded or decoded output string. |
| analysis | No | Length and entity-count metrics for the conversion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, destructiveHint, and idempotentHint. The description adds value by noting local execution, offline operation, rate limit (60/min), and return content analysis, exceeding what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph with clear structure: purpose, technical detail, usage guidance, operational notes. Efficient but could be slightly more concise; still well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given full schema coverage and output schema existence, the description is comprehensive. Covers all parameters, usage context, behavioral notes, and return value analysis.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description still adds meaning by explaining operation, mode, format, and their defaults. Clarifies that mode/format are ignored when decoding, which is not in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Encode or Decode HTML Entities' and explains the conversion. It distinguishes from sibling tools by naming specific alternatives (URL, Unicode, string escape). The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (HTML/XML markup safety) and when not, listing three sibling tools with distinct purposes. This provides clear guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_jwtARead-onlyIdempotent
JWT Decoder and Claim Inspector. Decode and inspect a JSON Web Token offline: split it into header, payload, and signature, Base64URL-decode the header and payload JSON, and annotate every payload claim (with human-readable timestamps and an EXPIRED flag for past exp). This tool only decodes and does not fetch JWKS or verify the signature cryptographically; use security_jwt_generator_validator when you need to verify an HMAC or asymmetric signature, check exp/nbf against a secret or key, or assemble and sign a new token. Runs locally on the token you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the decoded header and payload, the three raw token parts, a structure-status object, and a per-claim analysis map.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | The JSON Web Token to decode, as a compact dot-separated string of three Base64URL parts (header then payload then signature). Must not be blank. Whitespace is trimmed before parsing. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the token had a valid three-part structure and both header and payload decoded; otherwise the endpoint returns HTTP 400. |
| input | No | The submitted token string, echoed back. |
| decodedJWT | No | The decoded token sections. header and payload are null when decoding failed. |
| tokenParts | No | The token split on dots, before decoding. Normally three elements (header, payload, signature). |
| tokenStatus | No | Structural assessment of the token. |
| claimsAnalysis | No | Per-claim breakdown keyed by claim name; each entry describes one payload claim. Empty when decoding failed. |
| error | No | A high-level parse error message when decoding failed, or null on success. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, and idempotentHint as true. The description adds valuable context: it runs locally, is read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute). This complements the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph that front-loads the main purpose. Every sentence adds value: purpose, limitations, operational traits, and output. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of JWT decoding with claim analysis, the description is comprehensive. It covers what it does, what it doesn't do (no verification), when to use, and operational details (local, rate-limited). Output schema exists, so return values are documented; the description adds the claim analysis aspect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. However, the description adds meaning beyond the schema by explaining the decoding process, splitting into parts, and the output structure (header, payload, raw parts, claim analysis). This adds value, but the schema already describes the token parameter well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool decodes and inspects a JSON Web Token offline, splitting it into header, payload, and signature. It specifies the verb 'decode and inspect' and the resource 'JSON Web Token', and distinguishes itself from the sibling 'security_jwt_generator_validator' by clarifying it does not verify signatures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool versus the alternative 'security_jwt_generator_validator', which is for verification and assembly. It clearly indicates that this tool only decodes and does not fetch JWKS or verify signatures, guiding the agent to the correct tool for specific tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_punycodeARead-onlyIdempotent
Punycode / IDN Encoder and Decoder. Encode an internationalized domain name to its ASCII xn-- form (Punycode, RFC 3492 / IDNA) and decode xn-- labels back to Unicode. Pure in-process compute, no DNS or network lookup. Use this for domain-name (host) encoding where each dot-separated label is converted independently and only non-ASCII labels gain the xn-- prefix; use encoding_decoding_url for percent-encoding URL paths/query strings and encoding_decoding_unicode for backslash-u / backslash-x / HTML escapes of arbitrary text. Read-only and idempotent; rate limited to 60 requests/min anonymous (120 authenticated). Returns the converted string plus a per-label breakdown and a non-ASCII character listing.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Input to convert. For encode: a Unicode domain (e.g. münchen.de) or a single label; a value containing a dot with no spaces is treated as a domain and each label encoded separately. For decode: an xn-- ASCII string or full ASCII domain containing xn-- labels. | |
| operation | Yes | Direction of conversion. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when conversion succeeded. |
| input | No | The original text submitted. |
| operation | No | The operation performed (encode or decode). |
| result | No | Converted output — xn-- ASCII for encode, Unicode for decode. |
| domain_analysis | No | Per-label breakdown when input is domain-like, else empty. |
| character_info | No | Up to 20 unique non-ASCII characters in the input (encode only), else empty. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds 'Pure in-process compute, no DNS or network lookup' and rate limits (60/120 per min), providing context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise yet comprehensive, no redundant sentences. Purpose stated first, then usage guidance, then behavioral traits, then return format. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, description mentions 'Returns the converted string plus a per-label breakdown and a non-ASCII character listing,' ensuring full understanding. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description clarifies behavior for encode vs decode with examples and domain detection logic (dots vs single label), adding significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool encodes internationalized domain names to ASCII xn-- form and decodes back, with specific reference to RFC 3492/IDNA. It also names sibling tools for URL encoding and Unicode escapes, distinguishing it clearly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: use for domain-name encoding where each label is converted independently; directs to encoding_decoding_url for URL paths and encoding_decoding_unicode for arbitrary text escapes. This covers when to use and when not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_quoted_printableARead-onlyIdempotent
Quoted-Printable Encoder and Decoder. Encode UTF-8 text to RFC 2045 Quoted-Printable (MIME Content-Transfer-Encoding) or decode Quoted-Printable back to text. Encoding maps bytes outside the printable-ASCII safe set to =XX hex escapes, leaves letters/digits/most punctuation readable, and hex-escapes trailing tab/space at line ends; decoding reverses =XX escapes and strips soft-break line continuations. Use this for email bodies and MIME parts that are mostly ASCII and should stay human-readable; use encoding_basex base64 for dense binary, encoding_url for percent-encoding URL components, or encoding_uuencode / encoding_xxencode for classic binary-to-text. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/min, 500/hour, 2000/day for anonymous callers). Returns the converted string, the echoed input and operation, and size statistics. Decode requires =XX hex pairs to be valid hex.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The payload to process. For encode, the plain UTF-8 text to convert to Quoted-Printable; for decode, the Quoted-Printable string to convert back to text. Must not be blank. | |
| operation | Yes | Direction of conversion: 'encode' turns text into Quoted-Printable; 'decode' turns Quoted-Printable back into UTF-8 text. Any other value returns an error. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the conversion succeeded. |
| input | No | The original text submitted, echoed back. |
| operation | No | The direction requested; either encode or decode. |
| result | No | The converted output — Quoted-Printable for encode, decoded UTF-8 text for decode. |
| stats | No | Size metrics comparing original and converted payloads. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, non-destructive, and idempotent. The description adds that it runs locally on input, contacts no external service, and is rate-limited. It also details encoding behavior (hex escapes for non-printable, trailing spaces). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is comprehensive but slightly verbose. It front-loads the core purpose and usage, but some details (rate limits, output contents) could be more succinct. Still, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown), the description is complete: it mentions return values (converted string, input, operation, size statistics) and error conditions (decode requires valid hex). Context of sibling tools is well-handled with explicit differentiators.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers both parameters with descriptions, achieving 100% coverage. The description adds contextual meaning: for encode, input is plain UTF-8 text; for decode, input is Quoted-Printable string. Also notes decode requires valid hex pairs. This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool is a Quoted-Printable encoder/decoder per RFC 2045, specifies the operation (encode/decode), and explicitly distinguishes it from sibling encoding tools like base64, URL encoding, uuencode, and xxencode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('email bodies and MIME parts that are mostly ASCII') and when to use alternatives ('use encoding_basex base64 for dense binary, encoding_url for percent-encoding URL components, etc.'). Provides clear guidance for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_railfenceARead-onlyIdempotent
Rail Fence Cipher (Encode / Decode). Encode or decode text with the classical Rail Fence cipher: characters are written in a zigzag down and up across a fixed number of rails, then read off row by row to encode (decode reverses the zigzag to recover the original order). This is a transposition cipher — it reorders characters rather than substituting them — and has no real cryptographic strength, so use it for puzzles, CTFs, and learning, not to protect secrets. Choose encoding_decoding_caesar or encoding_decoding_vigenere instead when you need a substitution cipher (fixed shift or keyword-driven), and pick this tool when the requirement is specifically a zigzag/rail transposition. rails must be an integer 2-50; remove_spaces strips spaces before processing. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited. Returns the transformed text plus a character analysis and a visual zigzag pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to transform. All characters are repositioned; nothing is dropped except spaces when remove_spaces is true. | |
| operation | Yes | Whether to encode (write the zigzag, read off by rail) or decode (rebuild the zigzag to recover the original order). | |
| rails | Yes | Number of rails (rows) in the zigzag. Must be an integer 2-50. More rails increases scrambling but offers no real security. | |
| remove_spaces | No | Strip all spaces from the text before encoding/decoding. When false, spaces are kept and repositioned like any other character. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the transform succeeded. |
| input | No | The input text, echoed back. |
| operation | No | The operation performed (encode or decode). |
| rails | No | The number of rails applied (2-50). |
| remove_spaces | No | Whether spaces were stripped before processing. |
| result | No | The transformed (encoded or decoded) text. |
| analysis | No | Character-distribution analysis of the plaintext. |
| pattern | No | Visual zigzag layout for display (first 50 characters). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: it runs locally, is read-only, non-destructive, contacts no external service, and is rate-limited. It also describes the return value (transformed text, character analysis, visual zigzag pattern). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured, and front-loaded with the purpose. Every sentence adds value, and the information is presented in a logical order without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity, 100% schema coverage, and presence of annotations and output schema, the description is complete. It covers purpose, usage, behavior, parameters, return values, and alternatives adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds some context (e.g., 'rails must be an integer 2-50'), but this is already in the schema. Minimal additional value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a Rail Fence cipher for encoding/decoding, explains the zigzag mechanism, and distinguishes it from other ciphers. It specifies the verb 'Encode or decode' and the resource 'Rail Fence cipher', making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: use this tool for zigzag transposition, and choose Caesar or Vigenere for substitution ciphers. It also states the tool is for puzzles, CTFs, and learning, not for protecting secrets, providing clear when-not-to-use advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_rotARead-onlyIdempotent
ROT Cipher (Configurable Rotation, Encode and Decode). Shift text by any ROT rotation of 1-94 and encode or decode it. Rotation 13 applies ROT13 (letters A-Z/a-z only) and 47 applies ROT47 (printable ASCII 33-126); both are symmetric so encode and decode match. Any other rotation shifts printable ASCII 32-126, where decode reverses encode. Use this configurable variant when you need an arbitrary shift; use the fixed encoding_decoding_rot13 for only ROT13/ROT47, or encoding_decoding_caesar for a 1-25 letter-only Caesar shift. A classical cipher with no key and no real security — for puzzles, CTFs, and obfuscation, not encryption. Runs locally, read-only, non-destructive, offline, and rate-limited. Returns the transformed text plus a rotation info note and a character-class breakdown of the input.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to transform; must not be blank. Characters outside the rotated set pass through unchanged. | |
| operation | Yes | Direction of the shift. Ignored for rotation 13 and 47 (those are symmetric); for all other rotations, decode applies the inverse shift of encode. | |
| rotation | Yes | Shift amount. 13 selects ROT13 (letters only), 47 selects ROT47 (printable ASCII 33-126); any other value rotates printable ASCII 32-126 by that many positions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the transform succeeded. |
| input | No | The original text, echoed back. |
| operation | No | The requested direction (encode or decode), echoed back. |
| rotation | No | The rotation amount applied (1-94). |
| result | No | The ROT-transformed text. |
| info | No | Details about the rotation applied. |
| analysis | No | Character-class breakdown of the input text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes behavioral traits beyond annotations: 'Runs locally, read-only, non-destructive, offline, and rate-limited. Returns the transformed text plus a rotation info note and a character-class breakdown of the input.' No contradiction with annotations (readOnlyHint=true, destructiveHint=false).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with core definition, every sentence adds value, no redundancy. Length is appropriate given the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, rich schema (100% coverage), and output schema, the description covers purpose, usage, behavior, parameter specifics, and return details. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond the schema: explains special behavior for rotation 13 and 47 (symmetric, operation ignored), that other rotations shift ASCII 32-126, and that decode reverses encode. Schema already has descriptions but description provides crucial context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'ROT Cipher (Configurable Rotation, Encode and Decode)' with specific verb 'shift text' and resource 'ROT rotation'. Distinguishes from siblings by explicitly naming encoding_decoding_rot13 and encoding_decoding_caesar, stating when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use this configurable variant when you need an arbitrary shift; use the fixed encoding_decoding_rot13 for only ROT13/ROT47, or encoding_decoding_caesar for a 1-25 letter-only Caesar shift.' Also provides contextual purpose: 'for puzzles, CTFs, and obfuscation, not encryption.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_rot13ARead-onlyIdempotent
ROT13 and ROT47 Cipher (Encode / Decode). Apply a ROT (rotate) substitution cipher to the supplied text and return the transformed string. The rotation amount picks the variant: rotation 13 is classic ROT13 (rotates only A-Z and a-z letters, leaving digits and symbols untouched), rotation 47 is ROT47 (rotates the 94 printable ASCII characters 33-126, sparing the space), and any other 1-94 value shifts the full printable range ASCII 32-126 forward for encode or backward for decode. ROT13 and ROT47 are their own inverse, so encode and decode give the same result. This is a reversible obfuscation with no cryptographic strength; use it for puzzles, CTFs, and hiding spoilers, not to protect secrets. Use encoding_decoding_caesar for a letters-only shift constrained to 1-25, or encoding_decoding_atbash for a fixed alphabet reversal. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the transformed t
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to transform. Printable ASCII is rotated per the rotation rule; characters outside the active range pass through unchanged. | |
| operation | Yes | Direction for custom rotations: encode shifts forward, decode shifts backward by the same amount. Ignored for rotation 13 and 47, which are self-inverse. | |
| rotation | Yes | Number of positions to rotate. 13 selects ROT13 (A-Z and a-z only), 47 selects ROT47 (ASCII 33-126), any other 1-94 rotates the full printable range ASCII 32-126. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the transform succeeded. |
| input | No | The input text, echoed back. |
| operation | No | The operation performed (encode or decode). |
| rotation | No | The rotation value applied (1-94). |
| result | No | The transformed (rotated) text. |
| info | No | Details of the rotation that was applied. |
| analysis | No | Character-class breakdown of the input text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds: runs locally, read-only, non-destructive, no external service, rate-limited (60 req/min). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but dense with information. Front-loaded with purpose. Could trim some repetitiveness (e.g., 'Runs locally' appears twice). Still highly informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all aspects: behavior, usage, limitations, sibling differentiation, output format (implied by output schema). No gaps given output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with descriptions. Description adds value by explaining rotation behavior (13 vs 47 vs custom) and operation's irrelevance for self-inverse variants.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it applies ROT13/ROT47 ciphers, explains the rotation variants (13, 47, custom), and differentiates from sibling tools like Caesar and Atbash. Verb+resource+scope is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (puzzles, CTFs, hiding spoilers) and when not (not for secrets). Names alternatives (caesar, atbash). Also notes local execution and rate limiting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_string_escapeARead-onlyIdempotent
Escape or Unescape String Literals. Escape or unescape a string for a specific syntax so it is safe to paste into code or data: SQL, CSV, shell/Bash, regular-expression, PHP, LDAP filter, XML attribute, or C/C++ string. Use this for language/format string-literal quoting; use encoding_decoding_url for percent-encoding and encoding_decoding_html_entities for HTML entity conversion. Runs locally on the supplied text: read-only, non-destructive, offline, and rate-limited. Returns the transformed string plus format metadata, an escaping analysis, and the list of supported formats.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The string to escape or unescape. Required, non-empty. | |
| format | Yes | Target syntax. sql doubles single quotes; csv RFC-4180 quoting; shell backslash-escapes metachars; regex escapes metachars; php escapes backslash and quote; ldap RFC-4515 hex escapes; xml_attr entity-escapes; c_string C/C++ literal escapes. | |
| operation | No | Whether to escape (default) or reverse-unescape the text for the chosen format. | escape |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the operation succeeded. |
| input | No | The original text, echoed back. |
| operation | No | The operation performed (escape or unescape). |
| format | No | The format used. |
| result | No | The escaped or unescaped output string. |
| format_info | No | Metadata for the chosen format. |
| analysis | No | Heuristic analysis of the input text. |
| available_formats | No | Map of format id to display label for all supported formats. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: local execution, offline, rate-limited, and output details (transformed string, format metadata, escaping analysis, supported formats). Annotations already declare readOnlyHint=true, destructiveHint=false, etc., and description does not contradict them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences) and front-loaded with purpose, then usage guidelines, behavioral notes, and return info. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all necessary context: purpose, usage, behavioral traits, and output. With 3 parameters, output schema, and clear sibling differentiation, it is complete for effective tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter having description, examples, and enum values. The description echoes the format list but does not add significant semantic value beyond the schema, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool escapes or unescapes string literals for specific syntaxes (SQL, CSV, shell, regex, etc.) and explicitly distinguishes it from encoding_decoding_url and encoding_decoding_html_entities, which are similar sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool vs. alternatives: 'Use this for language/format string-literal quoting; use encoding_decoding_url for percent-encoding and encoding_decoding_html_entities for HTML entity conversion.' Also mentions it runs locally, read-only, non-destructive, offline, and rate-limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_unicodeARead-onlyIdempotent
Unicode Escaper and Unescaper. Escape text into Unicode escape sequences, or unescape them back to characters, in JSON/JavaScript, Python, Java, CSS, HTML, XML, or URL format. Set operation to escape or unescape and format to the target syntax. Encodes non-ASCII and control characters as backslash-uXXXX (json/java), backslash-uXXXX or backslash-UXXXXXXXX (python), backslash-XXXXXX (css), hex numeric HTML entities, decimal numeric XML entities, or percent-XX UTF-8 bytes (url), handling surrogate pairs and astral code points. Unescape auto-detects and decodes every one of these sequence styles at once, so format only affects escape. Use encoding_decoding_html_entities for named HTML entities, encoding_decoding_punycode for IDN domain names, conversion_emoji to look emoji up by name/codepoint, and encoding_decoding_string_escape for SQL/CSV/JavaScript string quoting. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonym
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Input to convert: plaintext when escaping, or a string containing Unicode escape sequences when unescaping. Must not be blank. | |
| operation | Yes | Direction: escape converts characters to escape sequences; unescape decodes escape sequences back to characters. | |
| format | No | Target escape syntax used when escaping (unescape auto-detects all styles): json/java use backslash-uXXXX, python adds backslash-UXXXXXXXX for astral, css uses backslash-XXXXXX space-terminated, html uses hex numeric entities, xml uses decimal numeric entities, url uses percent-XX UTF-8 bytes. Defaults to json. | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| input | No | The submitted text, echoed back. |
| operation | No | The operation performed (escape or unescape). |
| format | No | The effective format after defaulting (json when omitted). |
| result | No | The escaped string (escape) or decoded text (unescape). |
| format_info | No | Metadata describing the chosen format. |
| analysis | No | Character and code-point statistics for the input text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds: 'Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute...' It also mentions handling surrogate pairs and astral code points. While it doesn't explain error handling, it adds sufficient operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a medium paragraph with front-loaded purpose, then operation/format details, then unescape auto-detection, then sibling alternatives, and finally local execution/rate limit. It is mostly concise, though could be slightly more structured (e.g., bullet points). Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, 100% schema coverage, annotations, and an output schema, the description covers all needed aspects: what it does, how to set operation and format, unescape auto-detection, sibling alternatives, and local/rate-limited behavior. No critical gaps remain for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter described. The description adds extra meaning for the 'format' parameter by detailing each syntax (e.g., 'json/java use backslash-uXXXX, python adds backslash-UXXXXXXXX for astral'). This goes beyond the schema's brief enum labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it's a Unicode Escaper and Unescaper, specifying escape targets (JSON, Python, Java, CSS, HTML, XML, URL) and distinguishing itself from sibling tools like encoding_decoding_html_entities and conversion_emoji. The verb 'Escape/Unescape' and resource 'text into Unicode escape sequences' are specific and unique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (escape/unescape Unicode) and when not to use it, naming alternatives: 'Use encoding_decoding_html_entities for named HTML entities, encoding_decoding_punycode for IDN domain names...' This provides clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_urlARead-onlyIdempotent
URL Percent-Encode and Decode. Percent-encode text into a URL-safe form or decode percent-encoded text back to its original characters, using encodeURIComponent / decodeURIComponent semantics (space becomes %20, reserved characters like &, =, ?, /, # are escaped). Use it for query-parameter values, path segments, and form data; use encoding_decoding_html_entities instead to escape characters for HTML markup, or encoding_punycode to convert international domain names to ASCII. Pure local string transformation — read-only, non-destructive, contacts no external service, and rate-limited (60 requests/minute anonymous). Returns the converted string, the echoed input, and the operation performed.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to convert. For encode, the raw string to percent-encode; for decode, a percent-encoded string. Must be non-empty. | |
| operation | No | Direction of conversion. "encode" percent-encodes the text; "decode" reverses it. Decoding malformed percent sequences returns a 400 error. | encode |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the conversion succeeded. |
| input | No | The original text submitted, echoed back. |
| operation | No | The operation performed (encode or decode). |
| result | No | The percent-encoded or decoded output string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds beyond annotations: 'pure local string transformation, read-only, non-destructive, contacts no external service, rate-limited (60 requests/minute)'. This complements readOnlyHint and idempotentHint. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: purpose, encoding details, usage/behavioral info. No redundancy, well-structured, and front-loaded with main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given simple schema (2 params, 1 required), output schema present, description covers all essential aspects: operation, use cases, alternatives, rate limiting, error states, and return fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with descriptions and examples. Description adds operational details (encoding scheme, error handling) and clarifies the operation parameter's direction, providing value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool percent-encodes/decodes text using encodeURIComponent semantics, lists use cases (query parameters, path segments, form data), and distinguishes from siblings like encoding_decoding_html_entities and encoding_punycode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (for URL encoding/decoding) and when to use alternatives (HTML entities for HTML markup, punycode for international domains). Also mentions rate limit and error handling for malformed sequences.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_uuencodeARead-onlyIdempotent
UUEncode And UUDecode Binary Data. Classic Unix uuencode/uudecode: convert arbitrary text or binary into a 7-bit ASCII envelope (begin perm name ... end) and back. Set operation=encode to wrap data, operation=decode to recover it. Use this for legacy email/Usenet attachments and Unix file transfer. Prefer encoding_decoding_xxencode for 8-bit-safe Usenet variants, encoding_decoding_binhex for Macintosh resource-fork files, or encoding_decoding_base64 for modern MIME. Pure compute: read-only, non-destructive, stateless, runs offline, no auth; default rate limit 60 requests/minute. Returns the encoded/decoded result plus file_info header metadata and size stats.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Data to process: plain text to encode, or a full uuencoded block (begin...end) to decode. | |
| operation | Yes | encode wraps text into uuencode; decode extracts the original data from a uuencoded block. | |
| filename | No | Name written into the begin header (encode only); ignored on decode. | data.txt |
| permissions | No | 3-digit octal Unix mode in the begin header (encode only); ignored on decode. | 644 |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the operation succeeded. |
| input | No | Echo of the submitted text. |
| operation | No | The operation performed. |
| filename | No | Filename used (encode) or parsed from the header (decode). |
| permissions | No | Octal mode used (encode) or parsed from the header (decode). |
| result | No | Uuencoded block (encode) or recovered data (decode). |
| file_info | No | Header metadata parsed on decode; null on encode. |
| stats | No | Size metrics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and the description adds behavioral details such as 'stateless, runs offline, no auth, default rate limit 60 requests/minute'. It also discloses the return value structure: 'Returns the encoded/decoded result plus file_info header metadata and size stats.' This goes beyond annotations and provides comprehensive transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of three front-loaded sentences: first states the core function, second specifies operations, third gives usage guidance and alternatives. No wasted words; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, 2 required, 1 enum) and the presence of an output schema (stated), the description fully covers input, operation, and return values. It mentions output includes 'file_info header metadata and size stats', which complements the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds semantic value: it explains that 'text' can be plain text or a full uuencoded block, and that 'filename' and 'permissions' are used only for encoding. This clarifies the role of each parameter beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'UUEncode And UUDecode Binary Data' with a classic Unix format, and distinguishes operations via 'operation=encode' and 'operation=decode'. It also explicitly calls out sibling tools (xxencode, binhex, base64) with specific use cases, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use this for legacy email/Usenet attachments and Unix file transfer' and directs agents to prefer xxencode, binhex, or base64 for specific alternatives. It also notes that the tool is 'pure compute: read-only, non-destructive, stateless, runs offline, no auth; default rate limit 60 requests/minute', guiding agents on when and how to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_vigenereARead-onlyIdempotent
Vigenère Cipher (Encode / Decode). Encrypt or decrypt text with the classical Vigenère polyalphabetic cipher, using a letter keyword that shifts each character by a repeating, position-dependent amount. Set operation to encode or decode and supply key. This is a historical cipher with no real cryptographic strength — use it for puzzles, CTFs, and learning, not to protect secrets; use encoding_decoding_caesar for a single fixed shift or encoding_decoding_rot13 for the fixed ROT13/ROT47 variants. The key is normalized to letters only and upper-cased; non-letter key characters are stripped. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited. Returns the transformed text plus the normalized key, a human-readable info string, and a letter-frequency / key-strength analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The plaintext (encode) or ciphertext (decode) to transform. Must not be blank. | |
| operation | Yes | Whether to encrypt (encode) or decrypt (decode) the text. | |
| key | Yes | The keyword that drives the shifts. Non-letters are stripped and it is upper-cased; must contain at least one letter. A 1-letter key degrades to a Caesar cipher. | |
| preserve_case | No | Keep each letter's original upper/lower case when true; otherwise invert it. | |
| preserve_non_alpha | No | Pass spaces, digits and punctuation through unchanged when true; drop them when false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 200 response. |
| input | No | The original text, echoed back. |
| operation | No | The operation performed: encode or decode. |
| key | No | The normalized key actually used (letters only, upper-cased). |
| preserve_case | No | The preserve_case flag that was applied. |
| preserve_non_alpha | No | The preserve_non_alpha flag that was applied. |
| result | No | The encrypted or decrypted output text. |
| info | No | Human-readable summary of the key and its relative strength. |
| analysis | No | Letter-frequency and key-strength breakdown of the text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint), the description adds operational details: 'Runs locally', 'read-only, non-destructive, contacts no external service, rate-limited', and explains key normalization. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and well-structured. It is slightly verbose but every sentence adds value. Could be trimmed slightly without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple parameters, non-trivial algorithm) and that an output schema exists, the description covers all necessary aspects: what it does, how parameters work, behavioral traits, return contents, and limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. The description adds meaning: explains key normalization (non-letters stripped, upper-cased) and that a 1-letter key degrades to Caesar. It also describes the return values (transformed text, normalized key, info string, frequency analysis).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Vigenère Cipher (Encode / Decode)' and explains it encrypts/decrypts text using a polyalphabetic cipher. It distinguishes from sibling tools by mentioning Caesar and ROT13 explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases: 'for puzzles, CTFs, and learning, not to protect secrets'. Also names alternatives: 'use encoding_decoding_caesar for a single fixed shift or encoding_decoding_rot13 for the fixed ROT13/ROT47 variants'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
encoding_decoding_xxencodeARead-onlyIdempotent
XXEncode / XXDecode Binary-to-Text Converter. Encode text or binary data to XXEncode, or decode XXEncode back to text. XXEncode is a classic Unix binary-to-text format like uuencode, but uses a fully alphanumeric alphabet (plus, minus, digits, A-Z, a-z) that survives EBCDIC and 7-bit mail gateways where uuencode's punctuation gets mangled. Output is optionally wrapped in a begin/end envelope. Use encoding_decoding_uuencode for the more common Unix tooling default, encoding_decoding_binhex for Macintosh files with resource forks, or encoding_decoding_base64 for the ubiquitous web/MIME format. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the converted string plus decoded-file metadata (filename, permissions, size) when decoding.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Input to convert: plaintext/hex/base64 (per input_format) when encoding, or an XXEncoded block when decoding. Must not be blank. | |
| operation | Yes | Direction: encode turns input into XXEncode; decode turns an XXEncode block back into text. | |
| filename | No | Filename written into the begin header on encode (ignored on decode). Used only when options.includeHeaders is true. | document.txt |
| permissions | No | Three octal digits for the Unix file mode in the begin header on encode. Ignored on decode. | 644 |
| input_format | No | How to interpret text when encoding: text (UTF-8), hex string, or base64. Ignored on decode. | text |
| options | No | Optional encode/decode settings. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the conversion succeeded. |
| input | No | The submitted text, echoed back. |
| operation | No | The operation performed (encode or decode). |
| filename | No | The filename argument echoed back. |
| permissions | No | The permissions argument echoed back. |
| input_format | No | The input_format argument echoed back. |
| options | No | The effective options after defaults were applied. |
| result | No | The XXEncode block (encode) or decoded text (decode). |
| decoded_info | No | Metadata parsed from the XXEncode header on decode (empty on encode). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations by specifying local execution, non-destructiveness, no external service contact, rate limits, and return metadata. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured and concise: starts with name and purpose, then context, usage guidance, behavioral notes. No redundant or missing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, nested options, and output schema, the description covers purpose, usage, behavior, and limitations completely. Output schema existing reduces need for return value explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds meaning by explaining the alphabet, envelope, and effects of options like includeHeaders and strictMode, as well as the rationale for the format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it is an XXEncode/XXDecode binary-to-text converter, describes encoding and decoding, and distinguishes from siblings like uuencode, binhex, and base64.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use this tool versus alternatives, including specific sibling names and contexts (EBCDIC, mail gateways, Macintosh files, web/MIME).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_file_size_calculatorARead-onlyIdempotent
File Size Calculator (Units, Compare, Transfer Time, Storage Fit). Convert a data size between SI/decimal units (KB, MB, GB, TB, PB, EB = powers of 1000) and IEC/binary units (KiB, MiB, GiB, TiB, PiB, EiB = powers of 1024), plus bit units, via four operations selected by "operation": convert (one size to every unit), compare (rank 2-32 sizes by bytes), transferTime (download/upload seconds at a given speed), and storageFit (how many items fit in a capacity). Use this for byte-unit math and bandwidth estimates; use conversion_base_converter for numeric radix conversion instead. Runs locally on the values you provide: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/minute for anonymous callers). Returns precise byte/bit counts plus human-readable decimal and binary strings; the result object's shape depends on the operation.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Which calculation to run. Each operation reads a different subset of the other fields. | |
| value | No | convert only: the numeric size to convert. Pair with "unit". | |
| unit | No | convert only: unit of "value". Decimal (KB=1000), binary (KiB=1024), or bit units. | |
| items | No | compare only: 2-32 sizes to rank by byte count. | |
| size | No | transferTime only: the amount of data to transfer. | |
| speed | No | transferTime only: the transfer rate; must be greater than zero. | |
| targetCapacity | No | storageFit only: total capacity to fill. | |
| itemSize | No | storageFit only: size of one item; must be greater than zero. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 200; errors return 400/500 with an "error" string. |
| operation | No | Echo of the requested operation. |
| result | No | Operation-specific payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by noting rate limiting (30 req/min for anonymous), local execution, and that the result shape depends on operation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is approximately 100 words, well-structured with key information front-loaded. Every sentence contributes value, though it could be slightly more concise without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, nested objects, 4 operations, output schema), the description is remarkably complete. It covers purpose, behavior, usage guidelines, and limitations, leaving no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning by explaining how operation determines which fields to use and briefly describing each operation's purpose, enhancing understanding beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the tool's purpose: converting data sizes between SI, IEC, and bit units via four operations (convert, compare, transferTime, storageFit). It distinguishes from sibling conversion_base_converter, avoiding ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (byte-unit math and bandwidth estimates) and when to use an alternative (conversion_base_converter for numeric radix conversion). Also provides context for each operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_mime_type_lookupARead-onlyIdempotent
MIME Type Lookup (Extension to Media Type and Reverse). Look up IANA media types from a file extension, reverse-lookup every extension registered for a MIME type, or dump the full curated table, selected by operation. Use lookupByExtension when you have a filename/extension and need the Content-Type; use lookupByMimeType when you have a media type and need its file extensions; use listAll to fetch the whole 120-plus-entry table. To identify a file from its magic-byte signature (not its name) use file_file_type_detector instead. Reads a frozen in-memory table only: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/minute for anonymous callers). Unknown input returns an empty-result shape rather than an error.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | Which lookup to run. lookupByExtension requires extension; lookupByMimeType requires mimeType; listAll takes neither. | |
| extension | No | File extension for lookupByExtension. A leading dot and case are ignored (pdf, .PDF and PDF are equivalent). Required only for lookupByExtension. | |
| mimeType | No | Media type for lookupByMimeType, matched case-insensitively (for example application/pdf). Required only for lookupByMimeType. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the lookup succeeded. |
| operation | No | The operation that was run, echoed back. |
| result | No | Operation-specific payload. lookupByExtension returns extension/mimeTypes/primary/description; lookupByMimeType returns mimeType/extensions/description/category/rfc; listAll returns entries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds valuable context: 'Reads a frozen in-memory table only: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/minute for anonymous callers).' It also explains error handling ('unknown input returns an empty-result shape'). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured, starting with the core purpose and then providing usage guidance, behavioral details, and alternatives. Each sentence adds value without redundancy. It is slightly long but still concise for the amount of information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but true), the description does not need to detail return values. It covers purpose, operations, specific usage guidance, behavioral traits (read-only, rate-limited, no external calls), error handling, and an alternative tool. This is complete and sufficient for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters. The description adds useful semantics by explaining how parameters relate to operations (e.g., 'lookupByExtension requires extension; lookupByMimeType requires mimeType; listAll takes neither') and clarifies normalization (e.g., extension ignores leading dot and case, mimeType case-insensitive). This exceeds the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: looking up IANA media types from file extensions or reverse-lookup, with three distinct operations. It explicitly distinguishes from the sibling tool 'file_file_type_detector' which uses magic-byte signatures, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance for each operation: 'Use lookupByExtension when you have a filename/extension and need the Content-Type; use lookupByMimeType when you have a media type and need its file extensions; use listAll to fetch the whole 120-plus-entry table.' It also offers an alternative by directing to 'file_file_type_detector' for magic-byte signature identification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_jsonARead-onlyIdempotent
JSON Formatter, Minifier and Validator. Pretty-print, minify, validate, or analyze a JSON document, with optional indent width and alphabetical key sorting. Use format_json for plain text-in/text-out cleanup and syntax checking; use format_json_visualizer to browse JSON as an interactive tree, webdev_code_formatter for HTML/CSS/JS, or webdev_json_to_csv to convert JSON into CSV rows. Runs locally on the text you provide: read-only, non-destructive, parses nothing external, and is rate-limited (60 requests/minute for anonymous callers). Returns the processed output string, a validity flag, any parse error, structure analysis, and size and line statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| json | No | The JSON document to process. Alias input is also accepted. Blank input returns isValid false with empty output. | |
| input | No | Alias for json; used only when json is absent. | |
| operation | No | Action to perform. format pretty-prints, minify strips whitespace, validate only checks syntax (empty output), analyze returns structure statistics. | format |
| indent | No | Indentation for format: a space count as a string (for example 2 or 4), or the word tab. Ignored by minify, validate, and analyze. | 2 |
| sortKeys | No | When true, sort object keys alphabetically (recursively) before formatting. Applies to format only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| isValid | No | Whether the input parsed as valid JSON. |
| error | No | Parse error message when isValid is false, otherwise null. |
| output | No | Processed result: pretty JSON, minified JSON, an analysis report, or empty for validate and blank input. |
| validation | No | Validity plus size metrics for the submitted text. |
| analysis | No | Structure statistics computed from the parsed JSON. |
| jsonPaths | No | Per-node path and type entries describing the document structure. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, non-destructive), the description adds important behavioral traits: 'runs locally on the text you provide', 'rate-limited (60 requests/minute for anonymous callers)', and details about return values including validity flag and parse error. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two paragraphs: first is a concise summary, second adds detail. Every sentence adds value. Could be slightly shorter but well-organized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters with enums and an existing output schema, the description fully covers what the tool does, including return fields (output string, validity, error, analysis, statistics). No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining edge cases (e.g., blank input returns isValid false) and parameter interactions (e.g., indent ignored for non-format operations). However, the schema already provides strong descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it works with JSON documents for formatting, minifying, validating, and analyzing. It distinguishes itself from sibling tools like format_json_visualizer (interactive tree), webdev_code_formatter (HTML/CSS/JS), and webdev_json_to_csv (conversion).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance: use this tool for 'plain text-in/text-out cleanup and syntax checking', and specifies alternatives when other operations are needed, such as browsing as a tree or converting to CSV.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_json_visualizerARead-onlyIdempotent
JSON Tree Visualizer and Structure Analyzer. Parse a JSON document into a validated tree and structural summary: confirms the JSON is well-formed, returns the parsed value, counts every node, and tallies key, depth and type statistics for exploring deeply nested data. Use format_json to pretty-print or minify JSON, data_json_path_evaluator to query nodes with JSONPath, data_json_schema_validator to check an instance against a schema, and webdev_json_to_typescript to emit TypeScript interfaces; use this tool when you only need to inspect shape, depth and node/type counts. Runs locally on the JSON you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Invalid JSON returns isValid:false with the parser error message instead of an HTTP error.
| Name | Required | Description | Default |
|---|---|---|---|
| json | Yes | JSON document to parse and analyze, as a raw string. Blank input returns isValid:false with empty statistics; malformed input returns isValid:false with the parser error. The alias "input" is also accepted. | |
| input | No | Alias for json (used when json is omitted). |
Output Schema
| Name | Required | Description |
|---|---|---|
| isValid | No | True when the input parsed as well-formed JSON. |
| parsed | No | The parsed JSON value (object, array, or scalar); null when invalid or blank. |
| error | No | Parser error message when invalid; empty string otherwise. |
| nodeCount | No | Total number of nodes (every value, including container nodes) in the parsed tree. |
| statistics | No | Structural tallies; null when input is invalid or blank. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), the description adds valuable behavior: runs locally, no external service, rate-limited (60/min for anonymous), and behavior on invalid JSON (returns isValid:false with error message).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative but somewhat lengthy. It is well-structured with clear sections: purpose, details, usage alternatives, local execution, and error handling. Could be slightly more concise but efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all necessary aspects: what the tool does, its limitations, error behavior, rate limits, and differentiation from related tools. With an output schema present, the description is complete for this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions. The description adds edge-case behavior: 'Blank input returns isValid:false with empty statistics; malformed input returns isValid:false with the parser error. The alias "input" is also accepted.' This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: parse JSON, validate, and provide structural summary (node counts, depth, type stats). It explicitly distinguishes from siblings like format_json, data_json_path_evaluator, etc., by specifying when to use this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'use this tool when you only need to inspect shape, depth and node/type counts' and lists alternatives for other tasks. It also clarifies that it runs locally and is read-only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_bash_script_generatorARead-onlyIdempotent
Bash Shell Script Generator. Build a runnable shell script (bash, sh, or zsh) from structured options - it ASSEMBLES and returns script TEXT, it never executes, saves, or runs anything. Pick a shebang and optional strict mode (set -euo pipefail, IFS), declare command-line args (short/long flags with types) that become a getopts-style case parser, and toggle reusable blocks: check-root, check-deps, log-setup, tmpdir (mktemp), trap-cleanup, usage-function, retry-loop, parallel, lock-file (flock), check-internet, and free-form custom blocks; customBody appends your own logic. Operation presets returns 11 ready-made templates (server backup, log rotation, deploy-via-ssh, db backup, rsync, health check, cert renewal, docker restart, git pre-commit, system cleanup). Use linux_systemd_unit_generator for service/timer unit files, linux_cron for crontab schedule lines, and linux_ssh_config_generator for ssh client config - this tool emits the executable script itself. Runs locally: read-only, non-destructive, no netwo
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | generate builds a script from the options below; presets ignores them and returns the 11 built-in templates. | generate |
| shebang | No | Interpreter line. Anything else falls back to bash. Choosing /bin/sh downgrades strict mode to set -eu and warns on bash-only blocks. | #!/bin/bash |
| strictMode | No | Emit strict-mode safety flags (set -euo pipefail and IFS). Disabling adds warnings about silent failures. | |
| name | No | Optional script name placed in the header comment. | |
| description | No | Optional multi-line description placed in the header comment. | |
| args | No | Command-line options to parse. Each becomes an UPPER_SNAKE variable plus a case branch; required string/file/int args are validated after parsing. | |
| blocks | No | Reusable hardening/utility sections to include, emitted in a fixed safe order regardless of array order. | |
| customBody | No | Free-form shell appended as the main script body. Scanned for bash-only syntax when shebang is /bin/sh. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request succeeded. |
| operation | No | The operation performed (generate or presets). |
| result | No | For generate: the script payload. For presets: a presets array of templates. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations state readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description reinforces: 'it never executes, saves, or runs anything' and 'Runs locally: read-only, non-destructive.' It adds context that the tool only returns script text, exceeding annotation requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph but well-structured and front-loaded with the main purpose. Every sentence adds value, though a bit lengthy. It could be slightly more concise but remains highly informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 parameters, 2 enums, output schema exists), the description is complete. It covers purpose, behavior, parameter overview (shebang, strict mode, args, blocks, customBody, operation with presets), and sibling differentiation. No gaps are evident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the description adds meaningful context beyond the schema: it explains that args become 'a getopts-style case parser' and blocks are 'emitted in a fixed safe order regardless of array order.' This adds value beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Bash Shell Script Generator' and that it 'ASSEMBLES and returns script TEXT, it never executes, saves, or runs anything.' It also explicitly distinguishes from sibling tools like linux_systemd_unit_generator, linux_cron, and linux_ssh_config_generator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use: 'Use linux_systemd_unit_generator for service/timer unit files, linux_cron for crontab schedule lines, and linux_ssh_config_generator for ssh client config - this tool emits the executable script itself.' It also lists the operation presets which are ready-made templates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_chmodARead-onlyIdempotent
Chmod Permission and Command Generator. Convert Linux file permissions between octal (e.g. 755, 4755) and symbolic (e.g. u+x, g-w, a=r) notation and assemble the matching chmod command string. For each permission it derives the owner/group/others read-write-execute breakdown, decodes special bits (setuid 4 / setgid 2 / sticky 1) on 4-digit octal, parses who/operation/perms for symbolic input, surfaces security notes (world-writable, 777, 600), and returns the literal chmod [-R] <perms> <path> command. It only BUILDS the command text — it never runs chmod, changes any mode, or touches the filesystem. Use it to look up or teach permission values and produce a copy-paste command; use linux_command_builder for find/grep/rsync/tar commands, linux_user_group_manager for useradd/usermod, and octal/base converters for raw number-base math. Runs locally via a Node bridge: read-only, non-destructive, idempotent, offline, contacts no external service, and is rate-limited (anonymous 30/min, 200/hr, 1000/day).
| Name | Required | Description | Default |
|---|---|---|---|
| permissions | No | One or more permission specs, each processed independently. Each is octal (3 or 4 digits, 0-7 per digit; a 4th leading digit is special bits) or symbolic ([ugoa][+-=][rwxXstugo]). Invalid entries return a per-result error. | |
| path | No | Target path interpolated verbatim into the command; not validated or accessed. | /path/to/file |
| recursive | No | When true, adds the -R flag (chmod -R) to recurse into directories. | |
| symbolic | No | Hint that input is symbolic notation. Format is auto-detected regardless; this only influences UI/output framing. | |
| explanation | No | When true, includes the per-class breakdown and security_notes in each result. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 200 response. |
| results | No | One entry per input permission, in order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: 'It only BUILDS the command text — it never runs chmod, changes any mode, or touches the filesystem.' It also mentions idempotence, offline operation, and rate limits. Annotations already provide readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with the most important information first. It is slightly verbose but each sentence adds value. The division into usage, behavior, and alternatives is clear. No wasted words, but could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, diverse input formats) and the presence of an output schema, the description is complete. It covers purpose, usage, behavior, parameters, and safety. The agent can correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful detail beyond the input schema. For example, the permissions parameter explanation covers octal vs symbolic notation and special bits. The path parameter is described as 'interpolated verbatim'. The recursive, symbolic, and explanation parameters have clear semantics. Schema coverage is 100%, and the description enriches all parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Chmod Permission and Command Generator. Convert Linux file permissions between octal and symbolic notation and assemble the matching chmod command string.' It distinguishes itself from siblings like linux_command_builder and linux_user_group_manager by explicitly naming alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool: 'Use it to look up or teach permission values and produce a copy-paste command.' It also states when not to use it and suggests alternatives: 'use linux_command_builder for find/grep/rsync/tar commands, linux_user_group_manager for useradd/usermod, and octal/base converters for raw number-base math.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_cronARead-onlyIdempotent
Cron Job Schedule and Crontab Line Generator. Build a 5-field crontab schedule from individual minute/hour/day-of-month/month/day-of-week inputs and assemble the ready-to-paste crontab line " ", plus a plain-English explanation of each field and a curated list of common schedule examples. It only BUILDS the schedule text — it never installs a cron job, edits crontab, or touches the system. Use this to compose or teach a schedule from parts; use time_cron_parser instead when you already HAVE a cron expression and want to decode it to English or preview real next-run times (this tool's nextRuns is a placeholder note, not computed times). Runs locally via a Node bridge: read-only, non-destructive, idempotent, offline, contacts no external service, and is rate-limited (anonymous 30/min, 200/hr, 1000/day).
| Name | Required | Description | Default |
|---|---|---|---|
| minute | No | Minute field (0-59). Accepts *, lists (0,30), ranges (0-29), steps (*/5). | * |
| hour | No | Hour field (0-23). Accepts *, lists, ranges, steps (*/6). | * |
| dayOfMonth | No | Day-of-month field (1-31). Accepts *, lists, ranges, steps. | * |
| month | No | Month field (1-12). Accepts *, lists, ranges; numbers are named in the explanation. | * |
| dayOfWeek | No | Day-of-week field (0-6, 0=Sunday). Accepts *, lists, ranges; numbers are named in the explanation. | * |
| command | No | Command appended verbatim after the expression to form the crontab line; not validated or executed. | /path/to/script.sh |
| generateExamples | No | When true, includes the curated examples array of common cron schedules. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 200 response. |
| cronLine | No | Full crontab line: the 5-field expression followed by the command. |
| expression | No | The assembled 5-field cron expression, e.g. "*/5 * * * *". |
| command | No | The command echoed back as used in cronLine. |
| explanation | No | Plain-English breakdown of each field plus a combined summary sentence. |
| nextRuns | No | Placeholder only — contains a note and the expression; actual next-run times are NOT computed (use time_cron_parser for real firing times). |
| examples | No | Present when generateExamples is not false. Common cron schedules. |
| error | No | Present instead of the result fields when generation fails (HTTP 400). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds full behavioral detail: local, read-only, non-destructive, idempotent, offline, rate limits. Annotations already cover readOnly, destructive, idempotent; description enriches and does not contradict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Thorough but not overly long; front-loaded with purpose and output. Each sentence is informative. Minor redundancy with annotations but acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete given 7 params and output schema. Covers purpose, usage, behavior, parameter details, and clarifies placeholder nextRuns. No gaps for a generation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 100% so baseline 3. Description adds context about generateExamples and notes that nextRuns is placeholder, plus that command is not validated. Adds some value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it's a schedule generator, builds crontab line, distinguishes from time_cron_parser. Specific verb 'build' and resource 'schedule' + 'line'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use (compose/teach) and when-not (use time_cron_parser for decoding). States it never installs or edits crontab.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_disk_usage_calculatorARead-onlyIdempotent
Linux Disk Usage And RAID Calculator. Six pure-arithmetic disk operations selected by the operation field. parseDu parses pasted du output into entries with byte sizes, depth, and a total; parseDf parses df output into filesystems with size/used/available bytes and use percent; raidCalculator computes usable bytes, redundancy overhead, and fault tolerance for a RAID/RAIDZ level; partitionPlanner allocates a disk into partitions by percent, bytes, or remaining share and reports leftover bytes; findCommand assembles a find -size command string with a plain-English explanation; humanize formats a byte count in IEC (1024) or SI (1000) units. Operates only on the numbers and text you supply, never reading a real filesystem (use file_file_size_calculator for byte-unit conversion plus transfer-time estimates, or math_unit_converter for general unit conversion). Read-only, non-destructive, offline, and rate-limited (30 requests/minute for anonymous callers). Returns a per-operation result object plus warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Selects the computation. Determines which other fields are read. | |
| text | No | Raw du or df command output to parse. Required for parseDu and parseDf; ignored otherwise. Auto-detects human (du -h) vs raw-byte columns. | |
| input | No | Structured input object for raidCalculator, partitionPlanner, and findCommand. May be supplied as this nested object or as top-level fields alongside operation. | |
| bytes | No | humanize: byte count to format. Required for the humanize operation. | |
| system | No | humanize: unit system. iec uses 1024 (KiB/MiB/GiB); si uses 1000 (KB/MB/GB). | iec |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation completed. |
| operation | No | Echoes the requested operation. |
| result | No | Operation-specific output. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds 'offline' and 'rate-limited (30 requests/minute for anonymous callers)', plus 'Operates only on the numbers and text you supply', which provides additional behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but well-organized: starts with overall purpose, lists operations, then constraints and alternatives. It could be slightly more concise, but every sentence adds value and the structure is logical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of six operations with nested parameters and an existing output schema, the description covers all necessary context: what each operation does, parameter requirements, constraints, and integration with other tools. It feels complete for an AI agent's needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds context like 'Auto-detects human (du -h) vs raw-byte columns' for the 'text' parameter and 'May be supplied as this nested object or as top-level fields alongside operation' for 'input', which adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it's a 'Linux Disk Usage And RAID Calculator' and enumerates six specific operations with brief explanations. It distinguishes from sibling tools like 'file_file_size_calculator' and 'math_unit_converter' by naming them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear when-to-use guidance for each operation and includes an explicit alternative: 'use file_file_size_calculator for byte-unit conversion plus transfer-time estimates, or math_unit_converter for general unit conversion'. It also clarifies constraints like 'never reading a real filesystem'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_env_variable_managerARead-onlyIdempotent
Linux Env Variable Manager. Parse, audit, and format-convert a .env file (the dotenv "KEY=value" plain-text envelope) entirely as a stateless text transform. It never reads, writes, or mutates any file, environment, or host — it only transforms the text you pass in. The "operation" field selects the mode: "parse" turns .env body text into a structured variable list (with quote style, inline comment, and line number) plus lenient-parse warnings; "format" converts a variable list into one of 9 deployment formats; "audit" scans values for leaked credentials, weak passwords, duplicate or invalid keys, and boolean-as-string typos; "presets" returns ready-made example variable sets. Use this for .env conversion and secret auditing; use linux_bash_script_generator for full shell scripts and linux_systemd_unit_generator for unit files. Runs locally: read-only, non-destructive, offline, contacts no external service, and is rate-limited (anonymous 30/min, 200/hr, 1000/day).
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Mode. "parse" and "audit" read the "text" field; "format" reads the "input" object; "presets" ignores all other fields and returns the static preset list. | parse |
| text | No | parse/audit only. Raw .env file body ("KEY=value" lines, "#" comments, optional "export " prefix, single/double quotes, multi-line double-quoted values). | |
| input | No | format only. The variable list plus target format to render. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 2xx response. |
| operation | No | The operation that was executed, echoed back. |
| result | No | Operation-specific payload. "parse" returns variables (each key/value/quote/comment/lineNumber) and warnings[]; "format" returns output (the rendered snippet string) and warnings[]; "audit" returns findings[] (each key/severity/issue/suggestion); "presets" returns presets[] (each id/name/description/variables). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly states behavioral traits beyond annotations: 'It never reads, writes, or mutates any file, environment, or host — it only transforms the text you pass in' and 'Runs locally: read-only, non-destructive, offline, contacts no external service, and is rate-limited (anonymous 30/min, 200/hr, 1000/day).' This adds context about rate limits and offline nature, supplementing the readOnlyHint, destructiveHint, idempotentHint, and openWorldHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loading the core purpose and then detailing operation modes and usage guidelines. However, it is slightly verbose, repeating some details that are already in the schema descriptions. Every sentence is informative, but a few could be trimmed without loss of clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all necessary aspects: purpose, operation modes, parameter usage, safety guarantees (stateless, read-only, offline), rate limits, and sibling tool differentiation. Given the presence of an output schema (context: has output schema: true), the description does not need to detail return values but still explains what each operation produces.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema description coverage is 100%, the description adds significant meaning by explaining how each operation mode uses the parameters. For example, it explains that 'parse' and 'audit' read the 'text' field, 'format' reads the 'input' object, and 'presets' ignores all other fields. It also describes the output of each mode, enriching the schema's enum descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Parse, audit, and format-convert a .env file' as a stateless text transform. It distinguishes from siblings by explicitly mentioning 'Use this for .env conversion and secret auditing; use linux_bash_script_generator for full shell scripts and linux_systemd_unit_generator for unit files.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives: 'Use this for .env conversion and secret auditing; use linux_bash_script_generator for full shell scripts and linux_systemd_unit_generator for unit files.' It also outlines the four operation modes (parse, format, audit, presets) with their specific use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_iptables_rule_generatorARead-onlyIdempotent
Iptables And Nftables Firewall Rule Generator. Generate iptables-restore (rules.v4) and nftables (nft.conf) firewall scripts from a structured firewall description: default INPUT/FORWARD/OUTPUT chain policies, an ordered rule list (protocol, source/destination IP plus CIDR, ports, interface, action), NAT and port forwarding (DNAT/SNAT/MASQUERADE), and the common conveniences (allow loopback, allow established/related, rate-limited log-drops). Use this to author Linux netfilter rulesets; use linux_ssh_config_generator instead for ssh_config and sshd_config. It only emits rule TEXT and never runs iptables, touches no network, and reads no database: read-only, non-destructive, and rate-limited (30 requests/minute for anonymous callers). Validates IPs, CIDR suffixes, and port specs, and emits lockout warnings (such as a DROP policy without an SSH allow rule). Set operation to presets to list the 9 ready-made templates. Returns both scripts plus per-rule explanations, warnings, and target file paths.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | generate builds firewall scripts from the input fields below; presets ignores all other fields and returns the 9 built-in templates. | generate |
| defaults | No | Default chain policies applied when generating (defaults: input ACCEPT, forward DROP, output ACCEPT). | |
| rules | No | Ordered firewall rules. Each rule maps to one iptables -A line (and an nftables equivalent). Invalid rows are silently skipped. | |
| allowEstablished | No | Prepend an INPUT rule accepting ESTABLISHED and RELATED connections via conntrack. | |
| allowLoopback | No | Prepend an INPUT rule accepting all traffic on the loopback interface. | |
| logDrops | No | Append a rate-limited LOG rule on INPUT before the default policy applies. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request succeeded. |
| operation | No | The operation performed (generate or presets). |
| result | No | For generate: the produced scripts. For presets: a presets array of named templates. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds value beyond annotations: explains it is read-only, non-destructive, rate-limited, validates IPs/ports, emits lockout warnings. Annotations already indicate readOnlyHint true and destructiveHint false, but description enriches with specific details about rate limiting and validation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is thorough but somewhat dense. It front-loads the purpose and key characteristics, then covers usage, limitations, and return values. Could be slightly more concise, but no redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (6 parameters, nested objects, output schema), the description is complete. It covers return format (scripts plus explanations, warnings, file paths), validation, lockout warnings, and presets. Output schema exists but description supplements it well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear property descriptions. The description adds context like silent skip of invalid rows, presets operation behavior, and lockout warnings, which enhance understanding beyond the schema. Baseline 3 due to high coverage, plus extra context justifies 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool generates iptables-restore and nftables firewall scripts from a structured description, with specific verb 'Generate' and resource 'firewall scripts'. Distinguishes from sibling linux_ssh_config_generator by explicitly mentioning what it does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('author Linux netfilter rulesets') and when not ('use linux_ssh_config_generator instead for ssh_config and sshd_config'). Provides context that it only emits text and never runs iptables, with rate limits and validation behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_linux_command_builderARead-onlyIdempotent
Linux Command Builder. Build correct command-line strings for 11 Linux tools (find, grep, sed, awk, rsync, tar, curl, ssh, scp, ffmpeg, imagemagick) from structured fields, with every argument shell-quoted and risky flags (find -delete, rsync --delete, curl to remote URLs) flagged as warnings. It only assembles command text and never executes anything, so use it to author or template a command you will run yourself; reach for linux_user_group_manager instead when you specifically need useradd/usermod/groupadd account commands, or linux_systemd_unit_generator for unit files. Runs locally: read-only, non-destructive, contacts no external service, rate-limited to 30 requests/minute for anonymous callers. Returns the built command plus per-flag explanations, the files it reads or writes, and safety warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | build assembles a command from tool plus fields; tools lists every supported command and its sub-form fields; presets lists curated ready-made field sets. Defaults to build. | build |
| tool | No | Which Linux command to build (required only when operation is build). Unknown values return HTTP 400. | |
| fields | No | Per-tool option map whose accepted keys depend on the chosen tool (for example find uses path, namePattern, size, mtime, fileType, executor; rsync uses src, dst, archive, delete; tar uses operation, compression, output). Call operation tools to discover the exact field names for each command. Omitted or blank fields are skipped; unknown keys are ignored. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true when the request succeeded. |
| operation | No | The operation that was performed (build, tools, or presets). |
| result | No | Operation payload. For build it holds command, explanation, warnings, and files; for tools/presets it wraps the respective catalogue array. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint, destructiveHint, idempotentHint. Description adds rate limits, local execution, and confirms read-only/non-destructive, matching annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise description of ~4 sentences, well-organized: purpose, tool list, safety features, usage guidance, parameter hint. No wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description covers all needed aspects: purpose, tool set, safety, usage alternatives, and return values (command, explanations, files, warnings). Sufficient for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description adds value by listing supported tools and advising to call operation tools for field names, slightly improving understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Build' and resource 'command-line strings for 11 Linux tools', differentiates from siblings like linux_user_group_manager and linux_systemd_unit_generator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (author/template commands) and when not (for user/group or systemd tasks), naming alternative tools. Also notes it never executes commands.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_log_parserARead-onlyIdempotent
Linux Log Parser and Analyzer. Parse Apache (Common and Combined), nginx access, syslog (RFC 3164 and RFC 5424), JSON Lines, and systemd journal export logs into structured rows, then filter, aggregate, or re-export them. Format auto-detection picks the best parser, or supply a custom regular expression. Use linux_disk_usage_calculator instead for du or df output, or json_path_evaluator for querying a single JSON document. The operation field selects the stage: parse text into entries, filter those entries with a mini-language, aggregate them into counts or sums, convert them to JSON CSV or TSV, or list built-in analysis presets. Runs locally on the text you provide: read-only, non-destructive, reads no files, contacts no external service, and is rate-limited (30 requests/minute for anonymous callers). Input is capped at 5 MB. Returns the parsed entries with their field names and any warnings, or the filtered, aggregated, converted, or preset payload for the chosen operation.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | Pipeline stage to run. parse turns raw log text into entries (default). filter narrows entries with an expression. aggregate groups entries into a metric. convert serialises entries to a chosen format. presets lists built-in analysis recipes and ignores all other fields. | parse |
| text | No | Raw log text to parse, one record per line (parse operation). Capped at 5 MB; larger input is truncated with a warning. Required for the parse operation. | |
| format | No | Log format for the parse operation. auto scores every built-in parser and picks the best match. custom applies customPattern. Used only when operation is parse. | auto |
| customPattern | No | JavaScript regular expression applied per line when format is custom. Named capture groups become field names; otherwise groups are named group1, group2 and so on. Used only when operation is parse with format custom. | |
| entries | No | Array of already-parsed entry objects (the parse result entries). Required for the filter, aggregate, and convert operations; non-object items are ignored. | |
| expression | No | Filter mini-language for the filter operation. Each clause is a field plus a comparison operator plus a value; combine clauses with the word AND surrounded by spaces. Supported operators are equals, not-equals, regex-match, regex-not-match, greater-than, less-than, greater-or-equal, and less-or-equal. Regex operators are case-insensitive. An empty expression returns all entries. | |
| by | No | Entry field name to group on for the aggregate operation (for example ip, status, or uri). An empty value yields no groups. | |
| metric | No | Aggregation metric for the aggregate operation. count tallies entries per group; sum, avg, min, and max are computed over the numeric field values. | count |
| field | No | Numeric entry field aggregated by sum, avg, min, or max in the aggregate operation (for example size). Ignored when metric is count. | |
| aggregate | No | Optional nested object form of the aggregate settings; when present it supersedes the top-level by, metric, and field fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation completed without error. |
| operation | No | Echo of the operation that was run. |
| result | No | Operation payload. For parse: entries, fieldNames, format, warnings. For filter: result (array of matching entries). For aggregate: groups, metric, by, field. For convert: result (the serialised string). For presets: presets (array of recipe objects). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations, including rate limits (30 req/min), input size cap (5 MB), local execution, and that format auto-detection is used. It confirms read-only and non-destructive nature, aligning with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections, but is somewhat lengthy. It could be slightly more concise without losing essential information. However, every sentence contributes to understanding, and key points are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, multiple operations, output schema exists), the description covers purpose, usage, alternatives, operations, safety, and limitations. It is complete enough for an agent to correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description adds moderate value by explaining operation stages contextually and detailing parameter usage such as the filter mini-language and aggregate settings. It clarifies required parameters for different operations, enhancing understanding beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: parsing various log formats (Apache, nginx, syslog, JSON Lines, systemd journal) into structured rows, then filtering, aggregating, or converting them. It explicitly distinguishes itself from sibling tools linux_disk_usage_calculator and json_path_evaluator by specifying alternative use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (for log parsing and analysis) and when not to (for du/df output or single JSON documents, directing to alternatives). It also clarifies that it runs locally on provided text and is safe (read-only, non-destructive).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_package_manager_commandsARead-onlyIdempotent
Package Manager Commands. Look up and cross-translate a package-manager command across 9 Linux/Unix ecosystems (apt, dnf, pacman, apk, zypper, pkg, brew, snap, flatpak, nix). It BUILDS command strings from a static table — it never runs a package manager, installs, removes, or touches the host. The "operation" field selects the mode: "translate" renders one action (install, remove, update, search) for each target manager from the optional package list and from/to managers; "crossReferenceTable" returns the full action-by-manager command matrix; "packageNameMap" returns canonical-to-per-distro package-name aliases (e.g. apache2 vs httpd); "presets" returns ready-made example requests. Use this for distro-specific package commands; use linux_command_builder for general find/grep/rsync/tar one-liners and linux_bash_script_generator for full scripts. Returns the equivalent command (plus alternatives, per-cell notes, and cross-distro warnings) per manager. Runs locally: read-only, non-destructive, offline, contact
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Query mode. "translate" needs action (and usually packages); "crossReferenceTable", "packageNameMap" and "presets" ignore the other fields and return their full static dataset. | translate |
| action | No | translate only. The package operation to render for each target manager. Required when operation is "translate". | |
| packages | No | translate only. Package name(s) substituted into the {pkgs} placeholder. A single whitespace-separated string is also accepted. Optional; install/remove/search-style actions warn and emit a <package> placeholder if omitted. | |
| from | No | translate only, optional. The source package manager you are translating from; recorded in the output notes for context only. | |
| to | No | translate only, optional. Target package managers to render commands for, each one of apt/dnf/pacman/apk/zypper/pkg/brew/snap/flatpak/nix. Empty or omitted renders all 9. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request succeeded. |
| operation | No | The operation that was executed, echoed back. |
| result | No | Operation-specific payload. "translate" returns action, packages (array), from (string or null), to (array of manager ids), commands (object keyed by manager with command, optional alternatives array, optional notes), plus warnings (array) and notes (array). "crossReferenceTable" returns actions (array), managers (array) and cells (action to manager to command + optional notes). "packageNameMap" returns an array of canonical/description/names where names maps each manager to its package name (empty if none). "presets" returns an array of id/label/description/action/packages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint), the description adds valuable context: it 'never runs a package manager', 'builds command strings from a static table', and is 'read-only, non-destructive, offline'. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized for the tool's complexity, front-loading the core purpose and distinguishing from siblings. Each sentence earns its place, providing clear and necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (9 ecosystems, 4 operation modes) and the presence of a rich input schema and output schema, the description covers all essential aspects: what it does, how it works, when to use, and safety guarantees. It is complete for the intended use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the operation modes and how parameters interact (e.g., 'translate' needs action and usually packages; others ignore fields). This contextualizes the parameters beyond the schema, earning a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to look up and cross-translate package-manager commands across 9 ecosystems. It uses specific verbs and resources, and distinguishes itself from sibling tools by naming them and specifying when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives: 'Use this for distro-specific package commands; use linux_command_builder for general find/grep/rsync/tar one-liners and linux_bash_script_generator for full scripts.' It also explains that the tool never runs commands and is safe.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_process_signal_referenceARead-onlyIdempotent
Process Signal Reference. Look up the POSIX / Linux process-signal table (31 standard signals) — for each signal returns its number, symbolic name (SIGTERM, SIGKILL, SIGHUP…), default kernel action, description, common senders, trap/handler behaviour, and ready-to-run kill/trap command examples. The "operation" field selects the query mode: "lookup" filters the table by free text, signal number, category and platform; "byName"/"byNumber" return one signal; and "categories" lists the category buckets. Use it as a static cheatsheet — it does not send, trap, or deliver any signal and touches no process. Runs locally on a built-in dataset: read-only, non-destructive, offline, contacts no external service, and is rate-limited.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | Query mode. "lookup" filters the full table (uses query/category/platform); "byName" returns one signal (uses name); "byNumber" returns one signal (uses number/platform); "categories" lists category buckets (ignores other fields). | lookup |
| query | No | lookup only. Free-text filter matched against signal name, short name, number, description, default action and senders. A digit-only value matches the signal number exactly; a full SIG name matches that signal only. Empty returns all. | |
| platform | No | lookup/byNumber. Selects per-platform signal numbers, which differ across architectures (e.g. SIGUSR1 is 10 on Linux, 30 on macOS/FreeBSD). | linux |
| category | No | lookup only. Restricts results to one behaviour bucket. all returns every signal. | all |
| name | No | byName only. Signal name with or without the SIG prefix, case-insensitive (e.g. SIGTERM, term). | |
| number | No | byNumber only. Signal number to resolve on the chosen platform (e.g. 9 for SIGKILL on Linux). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the lookup succeeded. |
| operation | No | The operation that was executed, echoed back. |
| result | No | Operation-specific payload. lookup returns signals (array of signal entries) and total (integer); byName/byNumber return a single signal entry; categories returns a categories array of id/label/description. A signal entry has name, number, default (default kernel action), description, sender (array), traps, examples (kill and trap shell snippets), and optional notes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds beyond annotations: read-only, non-destructive, offline, rate-limited. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded, each sentence adds value. Slightly verbose but appropriate for complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, modes, safety, offline nature, rate limits, and output schema mention. Fully adequate for complex 6-param tool with existing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline 3. Description adds detailed explanation of operation modes and cross-references parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific purpose: look up POSIX/Linux process signal table, returns comprehensive signal info. Clearly distinguishes from conversion and other linux tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says use as static cheatsheet, does not send/deliver signals. Implies context but doesn't compare to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_ssh_config_generatorARead-onlyIdempotent
SSH Config Generator. Generate an OpenSSH client config (~/.ssh/config) and/or server config (/etc/ssh/sshd_config) as text from structured host and daemon definitions. It only BUILDS the config text — it never writes ~/.ssh/config or sshd_config, edits a file, connects to any host, or touches the SSH agent. "operation" selects the mode: "generate" (default) renders config from "input"; "presets" returns ready-made example requests (Mozilla-hardened server, bastion, jump-host client, LAN, CIS Level 2, dev). For generate, "input.mode" picks which sides to emit. Client Host blocks support HostName, User, Port, IdentityFile, ProxyJump (bastion/jump host), ForwardAgent, LocalForward, and ControlMaster multiplexing; server settings cover Port, PermitRootLogin, password/pubkey auth, Allow/Deny users and groups, forwarding, idle timeouts, MaxAuthTries, and Ciphers/KexAlgorithms/ MACs — emitting security warnings for weak choices. Use this for OpenSSH connection and daemon config; use linux_web_server_config_generato
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | Mode selector. "generate" builds config from "input"; "presets" ignores "input" and returns example requests. | generate |
| input | No | Required when operation=generate. May also be supplied bare (its fields at the top level alongside operation). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 200 response. |
| operation | No | The operation echoed back (generate or presets). |
| result | No | For generate, the generated config and analysis. For presets, a "presets" array of example requests. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=true, destructiveHint=false) are reinforced and expanded: the description clarifies it only builds config text, never writes files, edits, or connects. It also mentions security warnings for weak settings, which adds beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat lengthy but well-structured: it starts with purpose, then behavioral constraints, then parameter explanations, and ends with usage guidance. Every sentence adds value, though a slight reduction in verbosity would improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex nested schema and presence of an output schema, the description fully covers the tool's purpose, behavior, parameter details, and presets feature. It also mentions security warnings and sibling tools, making it complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds significant meaning: explains 'operation' modes (generate vs presets), describes what presets returns, and summarizes the key client and server settings. It adds context about security warnings not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates OpenSSH client and/or server config text from structured definitions. It distinguishes itself by explicitly stating it never writes files, connects to hosts, or touches the SSH agent, which differentiates it from the sibling linux_web_server_config_generator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear when-to-use guidance: 'Use this for OpenSSH connection and daemon config' and implies an alternative ('use linux_web_server_config_generator'). It also explicitly states what it does not do, helping agents avoid misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_systemd_unit_generatorARead-onlyIdempotent
Systemd Unit Generator. Generate a complete systemd unit file from structured section fields and return the INI-style text ([Unit], the type body, [Install]) plus the install path and companion files. Set "operation" to "generate" (default) to build a unit, or "presets" to fetch ready-made example inputs. "unitType" selects the body section: service (ExecStart, Type, User, Restart, Environment, sandboxing), timer (OnCalendar/OnBootSec triggers, Persistent), socket (Listen* + Accept), mount (What/Where/Type/Options), path (Path* watches), or target. Per-section directives go in the matching object (unit, service, timer, socket, mount, path, install); every emitted directive is validated and missing ExecStart/triggers or weak hardening produce a warnings list (the unit is still returned). It only BUILDS the file text and copy-paste install commands — it never writes to disk, runs systemctl, enables, or starts any unit, and needs no privileges. Use this to author a .service/.timer/.socket file; use linux_ssh_con
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | "generate" builds a unit from the fields below; "presets" ignores them and returns example inputs. | generate |
| unitType | No | Required for generate. Selects which body section is emitted and the file extension. Case-insensitive. | |
| filename | No | Output unit filename. Defaults to the slugified description plus the unitType extension (e.g. my-unit.service). | |
| description | No | Human-readable unit summary; emitted as Description= in [Unit]. | |
| unit | No | [Unit] directives keyed by directive name. Supports After, Before, Requires, Wants, Requisite, BindsTo, PartOf, Conflicts, OnFailure, Documentation, DefaultDependencies. | |
| service | No | [Service] directives (unitType=service). Common keys: Type, ExecStart (absolute path), Restart, RestartSec, User, Group, WorkingDirectory, Environment, plus sandboxing (PrivateTmp, ProtectSystem, ProtectHome, NoNewPrivileges) and limits. | |
| timer | No | [Timer] directives (unitType=timer). Keys: OnCalendar, OnBootSec, OnStartupSec, OnUnitActiveSec, OnUnitInactiveSec, OnActiveSec, AccuracySec, RandomizedDelaySec, Persistent, WakeSystem, RemainAfterElapse, Unit. | |
| socket | No | [Socket] directives (unitType=socket). Keys: ListenStream, ListenDatagram and other Listen* directives, Accept, SocketUser, SocketGroup, SocketMode, ReusePort, NoDelay, FileDescriptorName, MaxConnections. | |
| mount | No | [Mount] directives (unitType=mount). Keys: What (source, required), Where (absolute mount point, required), Type, Options, SloppyOptions, LazyUnmount, ForceUnmount, DirectoryMode, TimeoutSec. | |
| path | No | [Path] directives (unitType=path). Keys: PathExists, PathExistsGlob, PathChanged, PathModified, DirectoryNotEmpty, MakeDirectory, Unit (unit to activate on trigger). | |
| install | No | [Install] directives. Keys: WantedBy (e.g. multi-user.target), RequiredBy, Alias, Also, DefaultInstance. Omitting it warns the unit cannot be enabled. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 200 response. |
| operation | No | Echoes the requested operation (generate or presets). |
| result | No | For generate, the fields below. For presets, an object with a "presets" array of example requests. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds key behavioral details beyond annotations: validation, warnings, no disk writes, no privileges. Aligns perfectly with readOnlyHint and idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose but contains redundant enumeration of unit types across multiple sentences. Could be more concise; the cut-off also suggests it's overly long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all essential aspects: operations, unit types, warning behavior, and non-destructive nature. Output schema exists, so return format isn't needed. Completeness is high despite minor redundancy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% with descriptions. The tool description adds context about validation and warnings, and maps sections to objects, providing extra value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates systemd unit files from structured fields. It distinguishes from siblings like linux_ssh_config_generator, though the sibling list is broad. The cut-off at the end slightly reduces clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes two operations (generate/presets) and emphasizes it never writes to disk or runs systemctl, guiding safe usage. However, it doesn't fully articulate when to use alternatives beyond the truncated mention of linux_ssh_con.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_user_group_managerARead-onlyIdempotent
Linux User and Group Manager Command Builder. Build Linux (and FreeBSD) user/group administration command lines from a structured form, parse pasted /etc/passwd and /etc/group text, and audit that parsed state for problems such as UID 0 imposters, duplicate UIDs/GIDs, orphan primary groups, and system accounts with login shells. The generate action emits useradd / usermod / userdel / groupadd / groupmod / groupdel / chage / passwd / chpasswd (or pw on FreeBSD) command text with per-command explanations and safety warnings; use linux_command_builder instead when you need general find/grep/rsync/tar/ssh commands rather than account management. BUILDS command text only - it never executes any command and never touches the local system. Runs locally on the input you provide (read-only, non-destructive, contacts no external service) and is rate-limited (30 requests/minute for anonymous callers). Returns generated commands plus warnings and an explanation, or parsed user/group rows, or audit findings, or curated pr
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | Which operation to run. generate builds command lines from input; parsePasswd/parseGroup parse pasted file text; audit cross-checks both files; presets returns the curated input presets. | generate |
| input | No | Used only when action is generate. The account specification to build commands from. | |
| text | No | Pasted /etc/passwd (action parsePasswd) or /etc/group (action parseGroup) content, one record per colon-separated line. | |
| passwd | No | /etc/passwd content for the audit action. | |
| group | No | /etc/group content for the audit action. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request succeeded. |
| action | No | The action that was executed. |
| result | No | Action-specific payload. generate returns commands/warnings/explanation; parsePasswd returns users; parseGroup returns groups; audit returns findings; presets returns presets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint, destructiveHint, idempotentHint, openWorldHint. Description adds that it never executes commands, is read-only, non-destructive, and rate-limited. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured and front-loaded, but slightly verbose and has a cut-off trailing phrase. Could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers overall functionality, safety, and return types (though cut off). Given complexity and presence of output schema, description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description provides high-level context but doesn't add meaning beyond schema for individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool builds Linux/FreeBSD user/group admin command lines, parses /etc/passwd and /etc/group, and audits for problems. It distinguishes from sibling linux_command_builder by specifying it is for account management only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use linux_command_builder instead for general commands. Also mentions rate limits. Lacks explicit when-not-to-use beyond sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_web_server_config_generatorARead-onlyIdempotent
Apache / Nginx / Caddy Web Server Config Generator. Build ready-to-deploy web server configuration text for Apache 2.4, nginx, and Caddy 2 from one structured input. A single request returns all three parallel outputs (Apache VirtualHost, nginx server block, Caddyfile) covering TLS with optional HTTP-to-HTTPS redirect and HSTS, reverse proxy with WebSocket upgrade, PHP-FPM FastCGI dispatch, static-file serving with cache expiry, gzip, security headers, custom error pages, and access/error logging. It only BUILDS config text from your parameters; it never writes files to disk, edits a live server, reloads, or restarts anything. Use this for full virtual-host or server-block files; use linux_htaccess_generator for an Apache per-directory .htaccess instead, or linux_ssh_config_generator for SSH client/daemon config. Set operation to generate (the default, requires serverName) or to presets to list curated starter configurations. Runs locally on the values you provide, read-only and non-destructive, contacts no e
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | Mode: generate builds the config text (requires serverName); presets returns the curated starter list and ignores all other fields. | generate |
| serverName | No | Primary hostname for the virtual host or server block (for example example.com). Required when operation is generate; max 253 chars; underscore is accepted as the nginx default-server placeholder. | |
| serverAliases | No | Extra hostnames (ServerAlias / additional server_name entries). Blank entries are dropped. | |
| httpPort | No | Plain-HTTP listen port. | |
| httpsPort | No | HTTPS listen port (used only when ssl.enabled is true). | |
| documentRoot | No | Filesystem path served as the web root (DocumentRoot / root). | /var/www/html |
| gzip | No | Emit gzip / compression directives for text responses. | |
| ssl | No | TLS settings. | |
| reverseProxy | No | Reverse-proxy / upstream settings. | |
| php | No | PHP-FPM FastCGI settings. | |
| static | No | Static-file serving settings. | |
| security | No | Security-header and server-token settings. | |
| errorPages | No | Map of HTTP status code (as key) to a custom error-page path. | |
| logging | No | Access / error log settings. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request succeeded. |
| operation | No | The operation performed (generate or presets). |
| result | No | For generate: the three configs plus warnings and explanation. For presets: a presets array of starter configurations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description reinforces by stating the tool 'only BUILDS config text' and 'never writes files, edits a live server, reloads, or restarts anything.' This adds meaningful context beyond annotations, though it could mention more about idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and provides a comprehensive overview. It could be slightly more concise, but the structure is logical and covers capabilities, constraints, and alternatives without excessive verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (14 parameters, nested objects, output schema), the description covers all major features (TLS, reverse proxy, PHP, static, security headers, error pages, logging) and the two modes. The output schema exists, so return values are not required. It feels complete for the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description does not need to explain parameters extensively. It mentions a few key constraints (requires serverName for generate) but does not add significant new meaning beyond what is already in the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates configuration text for Apache, Nginx, and Caddy web servers. It specifies the exact output (VirtualHost, server block, Caddyfile) and explicitly distinguishes from sibling tools like linux_htaccess_generator and linux_ssh_config_generator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (for full virtual-host or server-block files) and when to use alternatives (linux_htaccess_generator for .htaccess, linux_ssh_config_generator for SSH config). It also explains the two modes (generate and presets) and prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_bitwise_calculatorARead-onlyIdempotent
Bitwise Calculator. Perform a bitwise operation on integers with a selectable input base and bit width. operation chooses AND, OR, XOR, NOT, NAND, NOR, or a shift (shl, shr, ushr); pass operation=parse instead to just convert one value into all four bases. Operands accept base 2/8/10/16 (optional 0x/0b/0o prefix) at width 32 or 64, signed or unsigned, and the result is returned in binary, octal, decimal, and hex at once. Use this for bit-level logic and shifts; use conversion_number_base for plain radix conversion and math_scientific_calculator for arithmetic expressions. Pure local computation: read-only, non-destructive, deterministic, contacts no external service, and is rate-limited (60 requests/min anonymous).
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Bitwise op to run. and/or/xor/nand/nor need a and b; not is unary (a only); shl/shr/ushr shift a left or right by b bits (shr is arithmetic when signed, ushr is logical). Use parse to convert value into every base instead. | and |
| a | Yes | First operand (or the value to shift). String or number in base aBase; optional 0x/0b/0o prefix must match aBase. Negative only allowed when signed is true. Not used when operation=parse. | |
| b | No | Second operand for and/or/xor/nand/nor, or the shift count (0 to width-1) for shl/shr/ushr, in base bBase. Omit for not and parse. | |
| aBase | No | Radix used to read operand a. 2=binary, 8=octal, 10=decimal, 16=hex. | |
| bBase | No | Radix used to read operand b / the shift count. | |
| width | No | Integer bit width. Operands are masked to this width; shift counts must be less than it. | |
| signed | No | Interpret values as two's-complement signed (allows negative input and arithmetic shr) when true; unsigned when false. | |
| value | No | operation=parse only: the value to convert into all four bases, read using fromBase. | |
| fromBase | No | operation=parse only: radix of value. Required when operation=parse. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation succeeded. |
| operation | No | Echoes the requested operation (and/or/.../parse). |
| result | No | Bitwise op returns a/b/operation/width/signed plus a nested result with binary/octal/decimal/hex. operation=parse returns value/fromBase/width/signed/decimal/binary/octal/hex. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds behavioral context beyond annotations: 'read-only, non-destructive, deterministic, contacts no external service, rate-limited (60 requests/min anonymous).' No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, lists operations, explains operand/result behavior, then provides usage guidance. Efficient single paragraph with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all key aspects: operations, operands, bases, width, signedness, result format, and parse mode. Output schema exists, so return format is covered. Complete for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 100% (baseline 3), the description adds value by explaining shift semantics (e.g., shr vs ushr with signed) and the parse operation, enhancing understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs bitwise operations on integers with selectable base and width, and distinguishes itself from sibling tools like conversion_number_base and math_scientific_calculator by specifying use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool vs. alternatives, e.g., 'Use this for bit-level logic and shifts; use conversion_number_base for plain radix conversion and math_scientific_calculator for arithmetic expressions.' Also mentions rate limits and local computation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_bmi_calculatorARead-onlyIdempotent
BMI Calculator (Metric / Imperial). Compute Body Mass Index from height and weight in metric (cm, kg) or imperial (inches or feet+inches, lb) units, returning the BMI value, the WHO category (severe/moderate/mild thinness, normal, overweight, obese class I-III), and the healthy weight range for that height. Set operation to compute for a single BMI, target-weight to reverse a target BMI into the weight needed at a given height, or compare to diff two bodies. Use this for body-composition math; use math_unit_converter for plain length or mass unit conversion, or math_percentage_calculator for generic percentages. Runs locally on the values you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns BMI, category code and label, an interpretation string, the normalized weight and height in both unit systems, and the healthy weight range.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Which calculation to run: compute for BMI from weight plus height, target-weight to reverse a target BMI into the weight needed at a height, or compare to diff two bodies supplied as a and b. | |
| unitSystem | No | Unit system for weight and height. Metric reads weight in kg and height in cm; imperial reads weight in lb and height in inches (or feet plus inches). Required for compute and target-weight. | |
| weight | No | Body weight. In metric it is kilograms (max 1000); in imperial it is pounds (max 2200). Must be greater than zero. Required for compute. | |
| height | No | Body height. In metric it is centimetres (max 300); in imperial it is total inches (max 120), or pass an object with feet and inches keys. Must be greater than zero. Required for compute and target-weight. | |
| targetBmi | No | Desired BMI to solve the matching weight for at the given height. Required only when operation is target-weight. | |
| a | No | First body for the compare operation: an object of unitSystem, weight, and height. Required only when operation is compare. | |
| b | No | Second body for the compare operation, same shape as a. Required only when operation is compare. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | The operation that was executed, echoed back. |
| data | No | Result payload. Shape depends on the operation; the compute fields are listed here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable context beyond annotations: 'Runs locally on the values you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers).' Annotations already declared readOnlyHint=true, destructiveHint=false, idempotentHint=true, but the description enriches this with specificity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is densely packed with useful information yet remains concise. It front-loads the core function, then details operations, usage guidelines, and returned data. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, nested objects, three operations, and an output schema), the description covers all necessary details: operation variants, unit system handling, expected inputs for each mode, and an overview of the return values (BMI, category, interpretation, healthy weight range). The presence of an output schema doesn't require further description of return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning by explaining each parameter's role in different operations (e.g., 'Required for compute', 'Required only when operation is target-weight'). It clarifies that 'height' can be inches or an object with feet/inches, and describes the a/b objects for compare.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes BMI from height and weight in metric or imperial units, returns WHO category and healthy weight range, and lists three operations (compute, target-weight, compare). It differentiates from siblings by specifically mentioning when to use math_unit_converter or math_percentage_calculator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool for body-composition math and provides clear alternatives ('use math_unit_converter for plain length or mass unit conversion, or math_percentage_calculator for generic percentages'). Also notes it runs locally, is read-only, non-destructive, and rate-limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_compound_interest_calculatorARead-onlyIdempotent
Compound Interest Calculator. Project the future value of a lump-sum principal growing at a fixed annual rate with periodic (per-compounding-period) compounding and optional recurring contributions. Returns the final balance, total interest earned, total contributions, and a per-period or per-year breakdown. Use this for savings/investment growth ("how much will X grow to in N years"); use math_loan_calculator instead when you owe a balance and need a monthly payment + amortization schedule, or math_percentage_calculator for one-off percent-of / percent-change math. Pure local arithmetic: read-only, non-destructive, deterministic, contacts no external service, and is rate-limited.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | "compute" returns a per-year breakdown (one row per year); "schedule" returns the full per-period schedule (one row per compounding period). Both return the same final totals. | compute |
| principal | Yes | Starting lump-sum amount (P). 0 to 1,000,000,000,000. | |
| annualRatePercent | Yes | Nominal annual interest rate as a percent (e.g. 5 means 5%/yr). 0 to 100. | |
| years | Yes | Investment horizon in years (t). Greater than 0, up to 100; may be fractional. | |
| compoundingsPerYear | Yes | Compounding frequency per year (n): 1=annual, 2=semi-annual, 4=quarterly, 12=monthly, 365=daily. Must be exactly one of these values. | |
| monthlyContribution | No | Optional recurring monthly contribution. Converted to a per-compounding-period amount (monthlyContribution × 12 / compoundingsPerYear) so the same annual dollar flow applies at any frequency. 0 to 1,000,000,000. | |
| contributionTiming | No | Whether each contribution is applied at the start (annuity-due) or end (ordinary annuity) of the period. Only relevant when monthlyContribution > 0. | end |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the calculation succeeded. |
| operation | No | Echoes the operation that was run. |
| result | No | Computed totals plus a breakdown (compute) or schedule (schedule) array. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent. The description adds 'deterministic', 'contacts no external service', and 'rate-limited', providing useful context beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
5 sentences, no fluff. Front-loads purpose, then output, usage guidelines, and behavioral traits. Every sentence earns its place. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity with 7 parameters and existing output schema, the description covers purpose, usage, behavior, and output summary. No gaps remain for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for each parameter. The description adds value by summarizing outputs (final balance, interest, etc.) and explaining operation parameter semantics. This goes beyond baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: projecting future value of a lump-sum with fixed rate, periodic compounding, and optional contributions. It distinguishes itself from siblings like math_loan_calculator and math_percentage_calculator, making scope explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when-to-use (savings/investment growth) and when-not-to-use (use math_loan_calculator for loans, math_percentage_calculator for percent calculations). This leaves no ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_currency_converter_convertA
Currency Converter. Convert a money amount from one ISO 4217 currency to another using daily end-of-day (EOD) FX rates. Returns success plus a data object with the converted result, the applied rate and its inverse, the rate date, and the resolution path (direct, triangulation through USD, or identity). Rates come from a local cache of EODHD daily forex data; a first-time or stale currency pair triggers an on-demand outbound fetch from EODHD, so results change day to day and the call is not idempotent. Use this for present-day conversion between the 31 supported currencies; use math_currency_converter_history for a multi-day close-price series for charting, and math_unit_converter for non-currency length/mass/volume/speed conversion. Rate-limited (30 req/min anonymous) to protect the upstream API quota.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | Source ISO 4217 currency code (3 letters, case-insensitive). Must be one of the 31 supported codes. | |
| to | Yes | Target ISO 4217 currency code (3 letters, case-insensitive). Same 31-code enum as from; equal from/to returns a rate of 1. | |
| amount | No | Amount in the source currency to convert. Must be a finite number; defaults to 1 when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the conversion succeeded. |
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true. Description adds valuable context: triggers on-demand fetch for stale pairs, not idempotent, results change daily, rate limited to 30 req/min. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with main purpose and contains all necessary information without redundancy. Slightly long but each sentence adds value; could be trimmed slightly but remains effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (caching, daily rates, rate limiting, 31 currencies) and presence of output schema, description fully covers what an agent needs to know: purpose, behavior, limitations, and alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions including enums, case-insensitivity, and equal from/to behavior. Description does not add new parameter information beyond what schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool converts a money amount between ISO 4217 currencies using daily EOD FX rates. Lists output fields and distinguishes from siblings by naming math_currency_converter_history and math_unit_converter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool (present-day conversion among the 31 supported currencies) and when to use alternatives (math_currency_converter_history for multi-day series, math_unit_converter for non-currency conversions). Also mentions rate limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_currency_converter_historyA
Currency Converter Historical Rate Series. Fetch a historical end-of-day (EOD) FX rate series for one currency pair over a trailing date range, for charting price movement and percentage change. Returns success plus a data object holding the resolved from/to codes, the window start and end dates, and a series array of daily candles (date, open, high, low, close), plus the resolution path (direct, triangulation through USD, or identity). Data comes from a local cache of EODHD daily forex data; a first-time or stale range triggers an on-demand outbound fetch from EODHD, so the series is live external data that changes day to day and the call is not idempotent. Use this for a multi-day time series of a currency pair; use math_currency_converter_convert for a single present-day amount conversion, and math_unit_converter for non-currency length, mass, volume, or speed conversion. Rate-limited (30 req/min anonymous) to protect the upstream API quota.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | Base ISO 4217 currency code (3 letters, case-insensitive). Must be one of the 31 supported codes. | |
| to | Yes | Quote ISO 4217 currency code (3 letters, case-insensitive). Same 31-code enum as from; equal from/to returns a flat series of 1. | |
| days | No | Length of the trailing window in calendar days back from today. Must be between 7 and 1825 (about 5 years); defaults to 90 when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the series was retrieved. |
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes not idempotent behavior, data source (local cache + EODHD fetch), rate limit (30 req/min), and resolution path. Adds context beyond annotations (readOnlyHint=false, idempotentHint=false, openWorldHint=true).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is comprehensive but not overly verbose; each sentence adds value. Well-structured with purpose first, then details, usage, and rate limit. Could be slightly more concise but handles complexity well.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (3 parameters, output schema), description covers behavior, data source, non-idempotence, rate limits, and alternatives. Output schema exists, so no need to detail return values. Complete for agent decision.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions and enums; description adds minimal extra meaning (e.g., 'equal from/to returns a flat series of 1' already in schema). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches a historical EOD FX rate series for a currency pair, for charting. It also distinguishes from sibling tools math_currency_converter_convert and math_unit_converter, specifying when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this for a multi-day time series... use math_currency_converter_convert for a single present-day amount conversion, and math_unit_converter for non-currency...' providing clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_factorial_calculatorARead-onlyIdempotent
Compute Factorial, Double Factorial, Permutations And Combinations. Compute exact integer combinatorics with arbitrary-precision BigInt: factorial (n!), double factorial (n!!), permutations (nPr), or combinations (nCr). Select the operation via the operation field; factorial and doubleFactorial take only n, while permutations and combinations also require r (with r at most n). Inputs n and r accept a number or a decimal-digit string and must be integers in the range 0 to 10000. Use this for exact counting and probability math where doubles lose precision (n! overflows IEEE 754 at n=171); use math_scientific_calculator instead for general expression evaluation, or math_gcd_lcm_calculator for greatest common divisor and least common multiple. Pure local computation: read-only, non-destructive, deterministic, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the result as a decimal string, its digit count, and leading digits for very large outputs.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Which calculation to perform. permutations and combinations additionally require r. | |
| n | Yes | Non-negative integer 0 to 10000, as a number or decimal-digit string. For permutations and combinations this is the set size. | |
| r | No | Selection size for permutations and combinations: integer 0 to n. Required for those operations, ignored otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the calculation succeeded. |
| operation | No | The operation that was performed. |
| result | No | The computed value and its shape. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds valuable behavioral context: pure local computation, deterministic, no external service contact, and rate limiting. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough and well-structured, front-loading the core purpose and operation details. Every sentence earns its place, though it is somewhat lengthy. A slight reduction could improve conciseness without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, the description does not need to explain return values. It covers purpose, usage guidelines, behavioral transparency, and parameter semantics comprehensively. It also mentions the return format (decimal string, digit count, leading digits) for very large outputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description adds meaning by explaining operation selection, which parameters are required for each operation, that r must be at most n, and that inputs accept numbers or strings in the range 0-10000. This goes beyond the schema but is not vastly richer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes factorials, double factorials, permutations, and combinations with arbitrary-precision BigInt. It distinguishes itself from sibling tools like math_scientific_calculator and math_gcd_lcm_calculator by specifying its exact combinatorial use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (exact counting and probability math where doubles lose precision) and when not to (use math_scientific_calculator for general expression evaluation, math_gcd_lcm_calculator for GCD/LCM). It also mentions rate limits (60 requests/minute for anonymous callers) and that it is read-only and deterministic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_fibonacci_generatorARead-onlyIdempotent
Fibonacci Sequence Generator. Generate a Fibonacci sequence, compute the nth term via fast doubling, test whether a number is a Fibonacci number, or list every Fibonacci value in a range. The output is fully DETERMINISTIC (same input always yields the same result) and exact via BigInt, with values returned as decimal strings; supports indices up to F(50000) and range bounds up to 10 to the power 200. Use math_prime_number_checker for primality, or math_factorial_calculator for factorials and combinations. Runs locally as pure computation: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns a result object whose shape depends on the chosen operation (a values array, an nth value, a membership flag, or a range listing).
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Which computation to run. sequence lists count terms from start; nth returns the single nth term; isFibonacci tests membership of n; range lists Fibs between from and to. | |
| count | No | Number of terms to emit (operation sequence only). Required for sequence; must be 1 to 2000. | |
| start | No | Zero-based index of the first term emitted (operation sequence only). Optional; defaults to 0; must be 0 to 50000. | |
| n | No | Index for operation nth (0 to 50000), or the value to test for operation isFibonacci (non-negative; very large values may be passed as a numeric string). Required for nth and isFibonacci. | |
| from | No | Inclusive lower value bound (operation range only). Required for range; non-negative and not greater than to. | |
| to | No | Inclusive upper value bound (operation range only). Required for range; non-negative and at most 10 to the power 200. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the computation succeeded. |
| result | No | Operation-specific payload. Fields below are the union across all operations; only the fields for the chosen operation are present. |
| error | No | Error message when success is false (HTTP 400). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true, idempotentHint=true), description adds deterministic behavior, BigInt exactness, decimal string output, index/range bounds, rate limit, and return value shape variability. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph with effective front-loading of main operations. Every sentence contributes value. Could be slightly more structured (e.g., bullet points) but remains clear and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's multiple operations, 6 parameters, and output schema existence, the description covers all necessary context: operation types, constraints, limits, behavior, rate limiting, and return value variability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description's added value is limited. It provides high-level context (e.g., operation types) but does not significantly enrich individual parameter understanding beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates Fibonacci sequences, computes nth term via fast doubling, tests membership, and lists values in a range. It distinguishes itself from siblings by naming alternatives (math_prime_number_checker, math_factorial_calculator).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool (for Fibonacci operations) and when to use alternatives (primality, factorials). Also provides context: runs locally, read-only, non-destructive, no external service, rate-limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_fuel_consumption_calculatorARead-onlyIdempotent
Fuel Consumption Calculator. Convert a fuel-economy figure between US mpg, UK (Imperial) mpg, L/100km, and km/L, or estimate the fuel and money a trip will cost given distance, vehicle consumption, and a per-litre or per-gallon fuel price. Returns the converted value (convertConsumption) or litres needed plus total cost in the price's native currency (tripCost). Use this for fuel-economy and trip-cost math; use math_unit_converter instead for general length / volume / speed unit conversion, and math_running_pace_converter for pace and speed. Pure local arithmetic: read-only, non-destructive, deterministic, contacts no external service, and is rate-limited.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | "convertConsumption" converts one economy value between units (needs value, fromUnit, toUnit). "tripCost" estimates trip fuel and cost (needs distance, distanceUnit, consumption, consumptionUnit, pricePerUnit, priceUnit). | convertConsumption |
| value | No | convertConsumption only: the fuel-economy value to convert, expressed in fromUnit. Must be greater than zero for mpg_us, mpg_uk, and km_per_l. | |
| fromUnit | No | convertConsumption only: unit of the input value. mpg_us=miles per US gallon, mpg_uk=miles per Imperial gallon, l_per_100km=litres per 100km, km_per_l=kilometres per litre. | |
| toUnit | No | convertConsumption only: unit to convert the value into. Same four enum values as fromUnit. | |
| distance | No | tripCost only: trip distance, expressed in distanceUnit. | |
| distanceUnit | No | tripCost only: unit of distance. km=kilometres, mi=miles. | |
| consumption | No | tripCost only: the vehicle fuel economy, expressed in consumptionUnit. Must be greater than zero. | |
| consumptionUnit | No | tripCost only: unit of the consumption figure. Same four enum values as fromUnit. | |
| pricePerUnit | No | tripCost only: fuel price per volume unit, expressed in priceUnit currency and volume. | |
| priceUnit | No | tripCost only: currency + volume the price refers to. Determines the output currency (USD/EUR/GBP) and the volume (US gallon, UK gallon, or litre) pricePerUnit is multiplied by. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | Echoes the operation that was run (defaults to convertConsumption when omitted). |
| data | No | convertConsumption returns fromUnit/toUnit/fromValue/toValue/formattedFrom/formattedTo. tripCost returns distance/consumption/fuelNeeded/totalCost/pricePerUnit/currency and formatted strings. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations, stating it is 'read-only, non-destructive, deterministic, contacts no external service, and is rate-limited.' These details align with and supplement the annotation hints, providing full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences: first explaining core conversions, second specifying return values, third giving usage guidance and behavioral notes. It is front-loaded with the core purpose and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 10 parameters, 100% schema coverage, and presence of an output schema, the description provides sufficient context by explaining the two operations and their outputs. It is complete enough for an agent to understand the tool's capabilities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, but the description adds value by summarizing the return values for each operation: 'Returns the converted value (convertConsumption) or litres needed plus total cost in the price's native currency (tripCost).' This helps the agent understand what to expect without reading the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool as a fuel consumption calculator with two specific operations: convertConsumption and tripCost. It distinguishes itself from sibling tools like math_unit_converter and math_running_pace_converter, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides context for when to use this tool versus alternatives, stating 'Use this for fuel-economy and trip-cost math; use math_unit_converter instead for general length / volume / speed unit conversion, and math_running_pace_converter for pace and speed.' This gives clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_gcd_lcm_calculatorARead-onlyIdempotent
GCD / LCM Calculator and Prime Factorizer. Compute the greatest common divisor (GCD) and least common multiple (LCM) of a list of integers, or prime-factorize a single integer. GCD/LCM use the pairwise Euclidean algorithm (BigInt-backed so LCM never overflows) and return every reduction step; factorize uses trial division and returns prime/exponent pairs plus a pretty string. Set operation to gcd, lcm, or factorize. Use this for number-theory reductions; use math_prime_number_checker for primality/next-prime, math_factorial_calculator for n!/nPr/nCr, and math_bitwise_calculator for bit operations. Runs locally on the numbers you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the result value plus the worked steps (GCD/LCM) or factor list (factorize).
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Which computation to run: gcd or lcm (require numbers) or factorize (requires n). | |
| numbers | No | Required for gcd/lcm: 2 to 32 integers. GCD rejects an all-zero list; LCM rejects any zero. String digits like "12" are accepted and coerced. | |
| n | No | Required for factorize: a single integer from 2 to 10^12 (1000000000000) to prime-factorize. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the computation succeeded. |
| result | No | Operation output. gcd/lcm/factorize each populate different fields. |
| error | No | Present only on failure: the validation/computation error message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds algorithmic details (Euclidean algorithm, trial division, BigInt), confirms local execution with no external service, and specifies rate limits (60 req/min). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused paragraph that front-loads the core function. It efficiently covers purpose, usage, and behavior without waste. Could be slightly tighter but is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description need not detail return values, yet it still mentions return structure. It covers algorithms, rate limits, local execution, and parameter requirements, making it fully informative for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. The description adds minor context (string coercion for 'numbers', algorithm notes) but largely restates schema info. Minimal additional value beyond schema, so baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a GCD/LCM calculator and prime factorizer. It specifies the operations (gcd, lcm, factorize) and distinguishes from siblings like math_prime_number_checker, math_factorial_calculator, and math_bitwise_calculator, leaving no ambiguity about its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool ('for number-theory reductions') and when not to, with named alternative tools. Also mentions rate-limiting and local execution, providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_loan_calculatorARead-onlyIdempotent
Loan Amortization Calculator. Calculate a fixed-rate loan amortization: monthly payment, total interest, total paid, payoff month count, and (optionally) the full month-by-month schedule. Set operation to compute for the summary plus per-year breakdown, or schedule to also get every monthly row. Handles extra monthly principal payments (shortens the term) and zero-rate loans (payment equals principal divided by months). Use math_compound_interest_calculator instead to grow a savings balance forward with contributions; use this tool when you owe a principal and want the payment and interest cost. Runs locally on the numbers you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns monthlyPayment, totalInterest, totalPaid, payoffMonths, and the schedule or yearly summary.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | Output mode: compute returns the summary plus a per-year breakdown; schedule also returns every monthly row. Defaults to compute. | |
| principal | Yes | Loan amount borrowed, in currency units. Must be greater than 0 and at most 1000000000000. | |
| annualRatePercent | Yes | Annual nominal interest rate as a percent (for example 6.5 means 6.5 percent per year). Range 0 to 100; 0 gives a zero-rate loan. | |
| termYears | Yes | Loan term in years; multiplied by 12 to derive the month count. Must be greater than 0 and at most 100. | |
| extraMonthlyPayment | No | Optional extra principal paid each month to shorten the term. At least 0 and not greater than principal. Defaults to 0. | |
| startDateIso | No | Optional first-payment date as an ISO date string (for example 2026-06-01) used to label schedule rows. Defaults to today (UTC). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the calculation succeeded. |
| operation | No | The operation performed (compute or schedule). |
| result | No | The computed loan figures. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description aligns with annotations (readOnlyHint, destructiveHint, idempotentHint) and adds context: runs locally, non-destructive, contacts no external service, rate-limited. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise yet comprehensive. Front-loaded with purpose, then details modes and special features, then sibling comparison, then behavioral notes. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all aspects: purpose, parameters, edge cases, sibling differentiation, behavior, and rate limits. Output schema exists so return values not needed. Complete for a calculator tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3). Description adds meaning: explains operation modes, extra payment effect, startDateIso labeling. Adds value beyond schema but not highly extensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool calculates fixed-rate loan amortization with specific outputs (monthly payment, total interest, etc.). It distinguishes itself from the sibling math_compound_interest_calculator by explicitly stating when to use each tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use (loan amortization) and when-not-to-use (use compound interest calculator for savings). Also mentions handling extra payments, zero-rate loans, and rate limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_matrix_calculatorARead-onlyIdempotent
Matrix Calculator. Perform finite-precision linear-algebra operations on small matrices: add, subtract, multiply, scalarMultiply, transpose, determinant (cofactor for n<=3, LU with partial pivoting for n>=4), inverse (Gauss-Jordan), and identity construction. Matrices are arrays of rows (each row an array of finite numbers), capped at 8x8. Preconditions: add/subtract need equal dimensions; multiply needs cols(a) == rows(b); determinant and inverse need a square matrix and inverse additionally needs it to be non-singular. Use math_scientific_calculator for scalar expressions, math_statistics_calculator for dataset statistics, or math_quadratic_solver for polynomial roots. Runs locally on the numbers you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the resulting matrix (array of rows of numbers) for most operations, or a single number for determinant.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Operation to perform. add/subtract/multiply use a and b; scalarMultiply uses matrix and scalar; transpose/determinant/inverse use matrix; identity uses size. | |
| a | No | First operand matrix for add, subtract, multiply. Array of rows; each row an array of finite numbers. Max 8 rows and 8 columns; must be rectangular. | |
| b | No | Second operand matrix for add, subtract, multiply. For add/subtract must match the dimensions of a; for multiply rows(b) must equal cols(a). | |
| matrix | No | Single operand matrix for scalarMultiply, transpose, determinant, inverse. Array of rows of finite numbers, max 8x8. determinant and inverse require it to be square. | |
| scalar | No | Finite scalar multiplier used only by scalarMultiply. | |
| size | No | Dimension n of the identity matrix to build (n x n). Used only by identity. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the calculation succeeded. |
| operation | No | The operation that was performed, echoed back. |
| result | No | For determinant a single number; for all other operations the resulting matrix as an array of rows of numbers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses beyond annotations: runs locally, read-only and non-destructive (consistent with annotations), rate-limited (60 requests/min for anonymous), algorithm details for determinant (cofactor vs LU). While annotations already provide readOnlyHint/destructiveHint, description adds operational context like rate limit and local execution. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: begins with a summary of operations, then preconditions, then sibling alternatives, and finally behavioral notes. Sentences are efficient but some redundancy exists (e.g., repeated mention of 'finite-precision'). Front-loaded with the tool's core purpose. Could be slightly shorter, but effective overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 operations, multiple preconditions, siblings), the description covers all necessary aspects: operations list, preconditions, alternatives, rate limit, return types. Output schema exists, so return format detail is sufficient. No gaps in guidance for the agent to misuse the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described, so baseline is 3. Description adds meaningful context by grouping parameters per operation and stating preconditions (e.g., 'add/subtract need equal dimensions', 'inverse needs non-singular matrix'), which is not enforced in the schema alone. This additional guidance helps parameter selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes specific verb+resource: 'Matrix Calculator' performing finite-precision linear-algebra operations on small matrices. Lists all operations explicitly (add, subtract, multiply, scalarMultiply, transpose, determinant, inverse, identity) and distinguishes from siblings by naming alternatives (math_scientific_calculator, math_statistics_calculator, math_quadratic_solver).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear when-to-use context by listing preconditions (e.g., equal dimensions for add/subtract, square matrix for determinant/inverse). Explicitly states when not to use by suggesting alternatives for scalar expressions, statistics, and polynomial roots. Covers both inclusion and exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_number_to_wordsARead-onlyIdempotent
Integer to English or Spanish Words. Spell a whole number out in words: English (short scale, where 10^9 is a billion) or Spanish (long scale, where 10^12 is a billon), up to magnitudes below 10^36. Accepts negatives and BigInt-safe integer strings beyond the JS-safe range. Use this to render a number as spoken or cardinal text (cheques, legal copy, accessibility); use conversion_string_number for free-form numeric format conversion, or math_roman_numerals_converter for Roman numerals. Runs locally: read-only, non-destructive, contacts no external service, rate-limited (60 requests/minute for anonymous callers). Returns the normalized integer plus its words.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | Integer to spell out, as a digits-only string (optional leading minus) or a whole number. Use a string for values beyond JS-safe integer range. Magnitude must be below 10^36; non-integers and floats are rejected. | |
| language | No | Output language: en for English short scale, es for Spanish long scale. Defaults to en. | en |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the conversion succeeded. |
| result | No | The converted number and its word form. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, destructiveHint, idempotentHint), the description adds critical behavioral details: local execution, no external service calls, rate limiting (60 req/min for anonymous), and the return value structure (normalized integer plus words). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact at 4 sentences, front-loading the core purpose. Each sentence serves a distinct purpose: main function, example uses, sibling differentiation, and behavioral notes. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simple interface (2 params, 100% schema coverage, with output schema), the description fully covers purpose, usage guidelines, behavioral traits, and parameter semantics. Annotations and output schema description fill remaining gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline is 3. The description adds meaningful context beyond the schema: notes that string inputs handle beyond JS-safe range, magnitude must be below 10^36, and non-integers/floats are rejected. This aids the agent in correct parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's primary function: converting integers to English or Spanish words. It specifies the number scale (short/long), language options, magnitude limit, and input types. It also distinguishes itself from sibling tools like conversion_string_number and math_roman_numerals_converter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly guides when to use this tool (for cardinal text in cheques, legal copy, accessibility) and provides clear alternatives for related tasks (conversion_string_number for free-form numeric format conversion, math_roman_numerals_converter for Roman numerals).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_percentage_calculatorARead-onlyIdempotent
Multi-Mode Percentage Calculator. Perform one of eight percentage operations on plain numbers and return the computed figures. Operations: whatPercent (what percent value is of total), percentOf (a percent of a value), increase / decrease / addPercent (apply a percent up or down), percentChange (percent difference from one value to another, with direction), reversePercent (recover the pre-markup original from a post-percent result), and partWhole (find the whole when a value is a known percent of it). Use math_compound_interest_calculator for interest growth over time, math_ratio_calculator for proportions and splits, or math_statistics_calculator for mean/median/correlation over a dataset. Pure deterministic compute: read-only, non-destructive, contacts no external service, idempotent, offline-capable, and rate-limited (60 requests/minute for anonymous callers). Returns a success flag, the echoed operation, and a result object whose fields depend on the operation. Invalid, non-finite, or division-by-zero inp
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Which calculation to run. Determines the other required fields: whatPercent needs value+total; percentOf needs percent+value; increase/decrease/addPercent need value+percent; percentChange needs from+to; reversePercent needs result+percent; partWhole needs percent+value. | |
| value | No | The base number. Used by whatPercent (the part), percentOf (the amount), increase/decrease/addPercent (the original), and partWhole (the known part). Must be finite. | |
| total | No | whatPercent only: the whole that value is measured against. Must be finite and non-zero (division by zero rejected). | |
| percent | No | A percentage figure (e.g. 15 for 15 percent). Used by percentOf, increase/decrease/addPercent, reversePercent, and partWhole. Must be finite; for partWhole must be non-zero; for reversePercent must not equal -100. | |
| from | No | percentChange only: the starting value. Must be finite and non-zero (division by zero rejected). | |
| to | No | percentChange only: the ending value. Must be finite. | |
| result | No | reversePercent only: the post-percent figure to work backward from. Must be finite. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a successful calculation. |
| operation | No | The operation that was run, echoed back. |
| result | No | Operation-specific output. percent fields rounded to 4 decimals; value/amount fields to 6. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description reinforces these with specifics: 'Pure deterministic compute: read-only, non-destructive, contacts no external service, idempotent, offline-capable, and rate-limited (60 requests/minute for anonymous callers).' It also notes error handling for invalid inputs, adding value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear top sentence, a compact list of operations, usage guidelines, behavioral notes, and return shape. Every sentence adds information without redundancy, making it efficient for an AI agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 operations with conditional required parameters), the description provides complete guidance: operation definitions, parameter requirements, behavioral traits, error handling, return structure, and sibling differentiation. The presence of an output schema reduces the need to detail return fields, but the description still sketches the result object adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for all 7 parameters (100% coverage). The description enriches this by explaining the relationship between the 'operation' enum and required parameters for each operation, e.g., 'whatPercent needs value+total'. This adds critical semantic context for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title 'Multi-Mode Percentage Calculator' and the description clearly state it performs eight specific percentage operations on plain numbers. It distinguishes itself from sibling tools like math_compound_interest_calculator, math_ratio_calculator, and math_statistics_calculator by explicitly naming them and their use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises when to use alternative tools: 'Use math_compound_interest_calculator for interest growth over time, math_ratio_calculator for proportions and splits, or math_statistics_calculator for mean/median/correlation over a dataset.' This provides clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_prime_number_checkerARead-onlyIdempotent
Prime Number Checker, Factorizer, and Range Sieve. Test whether an integer is prime, list every prime within a numeric range, or find the next/previous prime relative to a number. The check operation reports primality plus a human-readable reason, the prime factorization (for composites up to 10^12), the surrounding primes, and which algorithm ran (trial division for n up to 10^12, deterministic Miller-Rabin up to 2^64). Use this for primality, factorization, and prime enumeration; use math_gcd_lcm_calculator for greatest common divisor / least common multiple, math_factorial_calculator for n! / nPr / nCr, and math_fibonacci_generator for Fibonacci sequences. Pure computation: deterministic, read-only, non-destructive, contacts no external service, and rate-limited (60 requests/minute for anonymous callers). Pass integers above 2^53 as numeric strings.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Which computation to run: check tests one integer (needs n); listPrimes enumerates primes between from and to; nextPrevPrime finds the adjacent prime to n in a given direction. | |
| n | No | Target integer for check and nextPrevPrime. Must be a non-negative base-10 integer; pass values above 2^53 as a numeric string. Hard upper bound 2^64. | |
| from | No | Inclusive lower bound for listPrimes. Non-negative integer. | |
| to | No | Inclusive upper bound for listPrimes. Non-negative integer; must be at least from, at most 10^8, and span (to minus from) at most 100000. | |
| direction | No | Required for nextPrevPrime: next finds the smallest prime greater than n, prev the largest prime less than n (null if none exists). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the operation succeeded. |
| result | No | Operation-specific payload. |
| error | No | Present only on failure; the validation message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds details: deterministic, read-only, non-destructive, no external service, rate-limited, and the algorithms used (trial division, Miller-Rabin). No contradiction; adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (about 10 sentences) and well-structured: summary sentence, operation details, usage guidelines, computational properties, and data convention. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (three operations, output schema exists), the description covers all necessary aspects: operation modes, input constraints, algorithm behavior, rate limits, and data format. It is complete enough for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds significant meaning: it explains the three operations, the check operation's output (primality, factorization, surrounding primes, algorithm), range constraints (max span 100000, up to 10^8), and data type guidance (string for >2^53). This goes beyond the schema's brief descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: prime checking, factorization, range sieve, next/prev prime. It distinguishes itself from sibling tools like math_gcd_lcm_calculator, math_factorial_calculator, and math_fibonacci_generator by specifying alternative use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (primality, factorization, prime enumeration) and when to use alternatives (gcd/lcm, factorial, Fibonacci). It also includes important usage details like passing large integers as strings and rate limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_quadratic_solverARead-onlyIdempotent
Quadratic Equation Solver. Solve a quadratic equation ax^2 + bx + c = 0 from its coefficients, evaluate f(x) = ax^2 + bx + c at a point, or build a monic quadratic from two roots; selected by the operation field. Solving returns the discriminant and its sign, real or complex-conjugate roots, root count, vertex, axis of symmetry, factored form when the roots are rational, and the Vieta sum/product of roots; it also handles the degenerate a = 0 (linear) cases. Use this for second-degree polynomial algebra; use math_scientific_calculator for general expression evaluation and math_matrix_calculator for linear algebra. Runs locally on the numbers you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers).
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Mode to run. solve needs a, b, c. evaluate needs a, b, c, x. fromRoots needs r1, r2. | |
| a | No | Quadratic (x^2) coefficient for solve and evaluate. May be 0, in which case the equation is treated as linear or degenerate. Required for solve and evaluate. | |
| b | No | Linear (x) coefficient for solve and evaluate. Required for solve and evaluate. | |
| c | No | Constant term for solve and evaluate. Required for solve and evaluate. | |
| x | No | Point at which to evaluate f(x) = ax^2 + bx + c. Required for the evaluate operation only. | |
| r1 | No | First root of the quadratic to construct. Required for the fromRoots operation only. | |
| r2 | No | Second root of the quadratic to construct. Required for the fromRoots operation only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the calculation succeeded. |
| operation | No | The operation performed (solve, evaluate, or fromRoots). |
| result | No | Operation output. solve fields listed here; evaluate returns a, b, c, x, y, vertex, axis; fromRoots returns a, b, c, equation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds valuable behavioral context: 'Runs locally on the numbers you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute).' It also details the output for the solve operation, which is not in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at 8 sentences, front-loaded with purpose, structured by operation, and every sentence adds value. It covers purpose, operations, outputs, usage guidance, and behavioral traits without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has three operations and 7 parameters. The description explains all operations, required parameters per operation, degenerate cases (a=0), output details, and behavioral traits. It is completely adequate given the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds high-level context about which operation uses which parameters but does not deepen the meaning of individual parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it solves quadratic equations, evaluates f(x), and builds monic quadratics from roots. It explicitly distinguishes from sibling tools math_scientific_calculator and math_matrix_calculator, which prevents confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use instructions: 'Use this for second-degree polynomial algebra; use math_scientific_calculator for general expression evaluation and math_matrix_calculator for linear algebra.' It also explains the three operations and their required parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_random_number_generatorARead-only
Generate Cryptographically Secure Random Values. Generates uniform random integers, floats, booleans, UUIDs (v4/v7), hex strings, or base64-encoded bytes using crypto.getRandomValues (CSPRNG), with rejection sampling to eliminate modulo bias. Pick the value family with operation. Use this for one numeric or token-style value family per call; for fake structured records (names, emails, CSV/JSON rows) use data_random_data_generator instead. An optional seed switches to a deterministic xoshiro128** PRNG for reproducible output — never use seeded output for keys, salts, tokens, nonces, or IVs. Read-only, non-destructive, no auth; rate-limited to 60 requests/minute per client. Returns the generated values as an array.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Value family to generate. Determines which other fields are required. | |
| min | No | Lower bound (required for integer/float; must be strictly less than max). Integers must be whole numbers. | |
| max | No | Upper bound (required for integer/float; must be strictly greater than min). | |
| count | No | How many values to generate (integer/float/boolean/uuid/hex/bytes). | |
| inclusive | No | Whether max is included in the range. Integer default true; float default false. Ignored by other operations. | |
| version | No | UUID layout, used only when operation is uuid. v4 is fully random; v7 is timestamp-ordered (RFC 9562). | v4 |
| length | No | Output length per value — hex character count, or raw byte count for bytes (base64 is longer). Required for hex/bytes. | |
| seed | No | Optional seed string for deterministic xoshiro128** output (reproducible, NOT cryptographically secure). Omit for CSPRNG. Max 1024 characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when generation succeeded. |
| operation | No | The operation that was executed (echoed from the request). |
| count | No | Number of values returned (length of values). |
| values | No | Generated values: numbers for integer/float, booleans for boolean, or strings for uuid/hex/bytes (base64). |
| error | No | Present only on failure (HTTP 400) with the validation message; omitted on success. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. Description adds that it uses crypto.getRandomValues (CSPRNG) with rejection sampling for bias elimination, optional deterministic PRNG with seed, and rate limiting (60 req/min). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise (3-4 sentences), front-loaded with main purpose, and every sentence adds value. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, output schema exists), the description covers purpose, sibling differentiation, behavioral details, parameter relationships, and return format. Output schema exists but description mentions 'returns generated values as an array', which is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description adds context beyond schema: explains that operation determines which fields are required, and warns that seeded output is not cryptographically secure. Provides meaningful guidance not in schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates cryptographically secure random values and lists specific value families (integers, floats, booleans, UUIDs, hex, bytes). It distinguishes itself from data_random_data_generator for structured records, providing a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (one numeric/token-style family per call) and when not to (use data_random_data_generator for structured data). Also warns against using seeded output for security-sensitive purposes. Provides clear alternative and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_ratio_calculatorARead-onlyIdempotent
Ratio Calculator (Simplify, Solve Proportion, Scale, Split, Percentage). Run one of five ratio operations on numbers you supply. The operation field selects the mode: simplify reduces an integer ratio by its GCD; solveProportion solves a is to b as c is to d for the one omitted term; scale multiplies every part so an anchored part hits a target; split distributes a total across parts with largest-remainder rounding; percentage expresses each part as a percent of the whole. Use this for proportions, scaling, and part-whole splits; use math_percentage_calculator for percent-of and percent-change math, or math_statistics_calculator for descriptive statistics on a dataset. Runs locally on the numbers you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns a JSON envelope (success, operation, result) whose result shape depends on the chosen operation.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Mode selector. simplify, scale, split, and percentage read the parts array; solveProportion reads a, b, c, d instead. | |
| parts | No | Ratio terms for simplify, scale, split, and percentage (ignored by solveProportion). 2 to 8 finite numbers greater than zero; numeric strings are coerced. simplify additionally requires every value to be a positive integer. | |
| a | No | First proportion term (solveProportion only). Provide exactly three of a, b, c, d, each greater than zero, and omit the one to solve for. | |
| b | No | Second proportion term (solveProportion only). Provide exactly three of a, b, c, d and omit the one to solve for. | |
| c | No | Third proportion term (solveProportion only). Provide exactly three of a, b, c, d and omit the one to solve for. | |
| d | No | Fourth proportion term (solveProportion only). Provide exactly three of a, b, c, d and omit the one to solve for. | |
| anchor | No | Anchor for the scale operation (required for scale, ignored otherwise): pin one part to a target value and scale the rest. | |
| total | No | Total to distribute across parts for the split operation (required for split, ignored otherwise). Each rounded allocation is proportional to its part. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the calculation succeeded. |
| operation | No | The operation that was executed (echoed from the request). |
| result | No | Operation-specific output. simplify returns input, simplified, gcd. solveProportion returns a, b, c, d, unknown, equation. scale returns input, scaled, anchor (index, value), factor. split returns total, parts, allocations, rounded, rounding. percentage returns parts, percentages, total. |
| error | No | Present only on failure (HTTP 400/500) with the validation message; omitted on success. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: 'Runs locally on the numbers you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers).' This adds context about local execution and rate limits, which are not covered by the readOnlyHint and idempotentHint annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph, but each sentence serves a purpose: defining scope, listing modes, usage guidance, and behavioral notes. It front-loads the tool's purpose and operation list. While slightly verbose (e.g., detailed operation descriptions could be shortened), it remains clear and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 operations, 8 parameters, nested objects, output schema), the description covers all necessary aspects: operation modes, parameter requirements, constraints (e.g., 'simplify requires positive integers'), usage guidance, and behavioral safety. The presence of an output schema means return values need not be described. Complete for agent selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the operation modes in a narrative way (e.g., 'simplify reduces an integer ratio by its GCD; solveProportion solves a is to b as c is to d'), and clarifies conditional usage of parameters like anchor and total. This enhances understanding beyond the schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a ratio calculator with five specific operations (simplify, solveProportion, scale, split, percentage), and distinguishes it from sibling tools math_percentage_calculator and math_statistics_calculator. The verb 'run' and resource 'ratio operations' provide a specific, actionable purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use this for proportions, scaling, and part-whole splits; use math_percentage_calculator for percent-of and percent-change math, or math_statistics_calculator for descriptive statistics on a dataset.' This clearly states when to use this tool and when to choose alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_running_pace_converterARead-onlyIdempotent
Running Pace and Speed Converter. Convert running pace and speed, compute race split times, or predict a race time with Pete Riegel 1981 formula, selected by the operation field. convert converts one value between min/km, min/mi, km/h, and mph (pace is decimal minutes on the wire, e.g. 5.5 means 5 minutes 30 seconds). splits projects 5K, 10K, half-marathon (21.0975 km), and marathon (42.195 km) finish times from a sustained pace. predict scales a known race time to a target distance via the Riegel power law. Use math_unit_converter instead for general length/volume conversion and math_fuel_consumption_calculator for fuel economy. Pure local arithmetic: read-only, non-destructive, deterministic, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Invalid input returns HTTP 400 with an error message.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | Mode selector. convert needs value, fromUnit, toUnit. splits needs pace, paceUnit. predict needs knownDistance, knownTime, targetDistance (exponent optional). Defaults to convert when omitted. | convert |
| value | No | convert: the figure to convert. Must be greater than 0. A pace value is decimal minutes (5.5 is 5 minutes 30 seconds); a speed value is in the fromUnit. | |
| fromUnit | No | convert: unit of value. Pace units are min_per_km and min_per_mi; speed units are km_per_h and mph. | |
| toUnit | No | convert: unit to convert value into. | |
| pace | No | splits: sustained pace as decimal minutes per unit (5.5 is 5 minutes 30 seconds). Must be greater than 0. | |
| paceUnit | No | splits: unit the pace is expressed in. | |
| knownDistance | No | predict: a distance alias (km, mi, 5K, 10K, half_marathon, marathon) or an object with a positive km number. | |
| knownTime | No | predict: the achieved time as HH:MM:SS or MM:SS (a number of seconds is also accepted). Must be greater than 0. | |
| targetDistance | No | predict: distance to predict, same accepted forms as knownDistance. | |
| exponent | No | predict: Riegel fatigue exponent in the range above 0 up to 2. Defaults to 1.06. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | Echo of the operation that ran (convert when omitted). |
| data | No | Operation-specific result. convert returns fromUnit, toUnit, fromValue, toValue (numbers) plus formattedFrom, formattedTo (strings). splits returns pace, paceUnit plus a splits object keyed 5K/10K/half_marathon/marathon, each with time (string) and seconds (number). predict returns knownDistance, targetDistance (echo), knownTime, predictedTime (strings), predictedSeconds, exponent (numbers). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), the description adds rate limiting (60 req/min anonymous), deterministic and local nature, and error behavior (HTTP 400). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise 6 sentences covering all aspects without redundancy, front-loaded with purpose, well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with multiple operation modes and 10 parameters, the description adequately covers purpose, usage, behavior, and error handling. Output schema covers return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already describes all parameters (100% coverage). Description adds minimal beyond explaining decimal minutes format and operation-specific roles, but not enough to warrant a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it converts running pace/speed, computes splits, and predicts race times via operation field. It explicitly distinguishes from siblings by directing general conversions to math_unit_converter and fuel economy to math_fuel_consumption_calculator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description provides explicit when-to-use for each operation (convert, splits, predict) and when-not-to-use by naming alternative tools for general conversions and fuel economy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_scientific_calculatorARead-onlyIdempotent
Scientific Calculator Expression Evaluator. Evaluate a single scientific math expression and return its numeric value, with support for trigonometry (sin, cos, tan, asin, acos, atan, atan2), logarithms (ln, log base 10, log2), exponent and power, square and cube root, abs, floor, ceil, round, factorial (n! or factorial), modulo (% or mod), the constants pi and e, and parentheses for grouping. The angleMode option selects whether trig functions read their argument in radians (default) or degrees. Uses a hand-rolled shunting-yard parser (no JavaScript eval and no dynamic code execution), so only the documented operators and functions run. Use this for general numeric expressions; use math_quadratic_solver to solve ax^2 + bx + c for roots, or math_statistics_calculator for descriptive statistics over a dataset. Runs locally on the expression you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests per minute for anonymous callers). On success returns the original ex
| Name | Required | Description | Default |
|---|---|---|---|
| expression | Yes | Math expression to evaluate (max 1000 characters). Supports plus, minus, times, divide, modulo, power operators, the mod keyword, parentheses, factorial via bang or factorial(), functions (sin cos tan asin acos atan atan2 ln log log2 exp sqrt cbrt abs floor ceil round max min), constants pi and e, and scientific notation such as 1.5e10. Must not be blank. | |
| angleMode | No | Angle unit for trig and inverse-trig functions: rad treats arguments as radians, deg as degrees. Aliases radians and degrees are accepted. | rad |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the expression evaluated successfully. |
| result | No | The evaluation payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses critical behavioral traits: uses a hand-rolled shunting-yard parser (no eval), runs locally as read-only and non-destructive, contacts no external service, and is rate-limited at 60 requests/minute. This transparency far exceeds the minimal annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and well-structured, covering operators, usage guidance, and safety. However, it is somewhat verbose and includes a truncated sentence at the end, slightly reducing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but indicated), the description does not need full return details. However, the description is truncated mid-sentence ('On success returns the original ex'), which is a clear gap. Otherwise, it covers supported operations, error handling implied, and limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters have full schema descriptions (100% coverage), but the description adds value by elaborating on angleMode aliases and clarifying the expression length limit (1000 characters). This enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool evaluates a single scientific math expression and returns its numeric value. It explicitly lists supported functions and operators, and distinguishes itself from sibling tools like math_quadratic_solver and math_statistics_calculator by stating when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (general numeric expressions) and when to use alternatives (quadratic solver, statistics calculator). It also mentions rate limits and safety, helping the agent decide correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_statistics_calculatorARead-onlyIdempotent
Statistics Calculator (Descriptive Stats, Z-Scores, Correlation, Regression). Compute descriptive statistics, z-scores, Pearson/Spearman correlation, or simple linear regression for a numeric dataset you supply. The 'operation' field selects one of four modes: 'describe' (single dataset), 'zScores' (single dataset), 'correlation' (two equal-length datasets), or 'linearRegression' (two equal-length datasets). Use this for analysing a list of numbers; use math_percentage_calculator for percent-of and percent-change math, or math_ratio_calculator for proportions. Runs locally on the numbers you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns a JSON envelope (success, operation, result) whose 'result' shape depends on the chosen operation; quartiles and percentiles use Type-7 linear interpolation, and excess kurtosis is reported (a normal distribution gives roughly 0).
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Mode selector. describe and zScores each need the values array; correlation and linearRegression each need both x and y arrays. | |
| values | No | Numeric dataset for describe and zScores (required for those, ignored otherwise). 1 to 100000 finite numbers; numeric strings are coerced. NaN and Infinity are rejected. | |
| x | No | First numeric dataset for correlation and linearRegression (the independent variable for regression). 2 to 100000 finite numbers; must be the same length as y. | |
| y | No | Second numeric dataset for correlation and linearRegression (the dependent variable for regression). 2 to 100000 finite numbers; must be the same length as x. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 200 response. |
| operation | No | Echo of the requested operation. |
| result | No | Operation-specific output (fields below are grouped by the operation that returns them). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it runs locally, is read-only, non-destructive, does not contact external services, and is rate-limited (60 req/min). Also details return format (JSON envelope) and special algorithms (Type-7 linear interpolation for quartiles, excess kurtosis). These go beyond annotations which already indicate readOnlyHint and destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the title and main purpose. It is concise yet includes essential details. A minor deduction for slight density but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, output schema, annotations), the description covers purpose, usage guidelines, behavioral traits, return format, and algorithm specifics. It leaves no obvious gaps for an AI agent to correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds explanation of operation modes (e.g., 'describe' needs values array, correlation needs x and y) but largely repeats schema descriptions. No significant new parameter semantics beyond what schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes descriptive statistics, z-scores, correlation, and linear regression, specifying it works on numeric datasets. It distinguishes from sibling tools math_percentage_calculator and math_ratio_calculator, providing a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (analysing a list of numbers) and when to use alternatives (percent-of/percent-change math with math_percentage_calculator, proportions with math_ratio_calculator). Also explains how the 'operation' field selects among four modes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
math_unit_converterARead-onlyIdempotent
Physical Unit Converter. Convert a numeric value between two units within a single physical-quantity category, using exact NIST SP 811 conversion factors. Supported categories are length, mass, volume, area, energy, power, pressure, temperature, and speed; the from and to units must both belong to the chosen category. Temperature is handled by formula (Celsius/Fahrenheit/Kelvin/Rankine); all other categories use a to-base multiplicative factor. Use math_running_pace_converter instead for running pace/speed splits and race-time prediction, file_file_size_calculator for digital storage units (KB/KiB/MB/MiB), and math_currency_converter for money at daily FX rates. Three operations: convert (default), listCategories (names of all categories), and listUnits (unit ids/names/symbols for one category). Runs locally on the value you provide: read-only, non-destructive, contacts no external service, deterministic, and rate-limited (60 requests/minute for anonymous callers). The convert result returns the numeric outpu
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | Action to run. convert requires category, fromUnit, toUnit, value. listUnits requires category. listCategories needs no other field. | convert |
| category | No | Physical-quantity category. Required for convert and listUnits. Both fromUnit and toUnit must be valid ids within this category. | |
| fromUnit | No | Source unit id within category. Required for convert. Examples: length m/cm/km/in/ft/mi; mass kg/g/lb/oz; volume L/mL/gal_us; area m2/acre/ha; energy J/kWh/BTU; power W/kW/hp_metric; pressure Pa/bar/psi; temperature K/C/F/Ra; speed m_s/km_h/mph/knot. Call listUnits to enumerate a category. | |
| toUnit | No | Target unit id within the same category. Required for convert. Same id set as fromUnit; call listUnits to enumerate valid ids for a category. | |
| value | No | Numeric quantity to convert, expressed in fromUnit. Required for convert. Accepts a JSON number or a numeric string (integer, decimal, or scientific notation); must be finite. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | The operation that was performed (convert, listCategories, or listUnits). |
| data | No | Operation payload. For convert: an object with category/fromUnit/toUnit/fromValue/toValue/formattedFrom/formattedTo. For listCategories: an array of category name strings. For listUnits: an array of unit objects with id, name, symbol, and factor or formula. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds valuable runtime behavior: local execution, no external service contact, deterministic, rate-limited (60 req/min), and exact NIST conversion factors. This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loading the core purpose, then providing usage guidance, behavioral details, and parameter examples. Every sentence adds value, and there is no redundancy. The truncated ending is assumed complete; otherwise still concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, 3 operations, many categories) and the presence of an output schema, the description covers all essential aspects: purpose, supported categories, behavioral traits, usage guidelines, and operation semantics. No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline is 3. The description enhances parameters by listing examples for fromUnit/toUnit (e.g., 'length m/cm/km/in/ft/mi') and explaining the category enumeration. This adds meaningful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a physical unit converter, specifies the exact operation (converting numeric values between units within a category), lists all supported categories, and differentiates from sibling tools like running pace, file size, and currency converters by naming alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool versus alternatives (e.g., 'Use math_running_pace_converter instead for running pace/speed splits...'). It also explains the three operations (convert, listCategories, listUnits) and their typical usage contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_asn_lookupA
ASN Lookup. Resolve an IP address, domain name, or AS number to its Autonomous System (ASN number, owning organization, country, RIR registry) by making an outbound query to an external ASN/geolocation data source (ip-api.com), optionally via a registered remote worker peer. Makes a live network call, so results depend on third-party data and are not deterministic. Use this to identify who owns/routes an IP. Use network_whois for domain/IP registration and contact records, network_bgp_route_lookup for AS-PATH and prefix routing analysis, and network_ip_geolocation for detailed geographic/ISP data. Anonymous limit 15/min, 90/hour, 300/day (authenticated 30/180/600); CAPTCHA after 30 requests/hour. Returns the resolved IP, an asn object, and the data source; geolocation only when requested (prefixes and upstreams are not populated by the default ip-api.com source).
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | IP address, domain name, or AS number to look up, for example 8.8.8.8, google.com, or AS15169. | |
| includeGeolocation | No | When true, include a geolocation object (country, region, city, zip, timezone, coordinates). | |
| includePrefixes | No | When true, request announced prefixes (not populated by the default ip-api.com source; needs a BGP data source/worker). | |
| includeUpstreams | No | When true, request upstream AS peers (not populated by the default ip-api.com source; needs a BGP data source/worker). | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the lookup completed. |
| target | No | The input target, echoed back. |
| resolvedIp | No | IP the target resolved to (null for direct AS-number input). |
| asn | No | Autonomous System details, or null when none found. |
| geolocation | No | Present only when includeGeolocation is true; null otherwise. |
| prefixes | No | Announced prefixes when includePrefixes is true (empty from the default source); null otherwise. |
| upstreams | No | Upstream AS peers when includeUpstreams is true (empty from the default source); null otherwise. |
| dataSource | No | Origin of the data, e.g. ip-api.com, Direct ASN input, or Private/Reserved IP. |
| timestamp | No | ISO-8601 response time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it details live network call, third-party dependency, non-determinism, rate limits, and limitations of optional parameters (prefixes/upstreams).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph with front-loaded purpose and key details; each sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, behavior, alternatives, parameters, rate limits, return content, and limitations; complete for a lookup tool with 5 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters with descriptions; description adds value by explaining behavior of boolean flags and worker_id, though schema coverage is already high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resolves IP/domain/AS to ASN details, and explicitly names sibling tools for differentiation, making it highly specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool ('identify who owns/routes an IP') and provides alternative tools for different purposes (whois, BGP, geolocation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_bgp_route_lookupA
BGP Route Lookup. Resolve an IPv4/IPv6 address or CIDR prefix to live BGP routing data: origin AS, AS-PATH, announced prefix, upstream/alternative paths, and path analysis. Makes a live outbound network call to a public BGP looking-glass API (BGPView), so results depend on third-party availability and may vary between calls. Use this when you need the routing path / AS-PATH for an address; use network_asn_lookup for plain AS number and network ownership, network_whois for registry/registration records, and network_ip_geolocation for physical location. Read-only and non-destructive, but not idempotent (reflects current global routing state). Anonymous callers are limited to 10 requests/minute, 60/hour, 200/day; CAPTCHA is required above 30 requests/hour. Returns primaryRoute (asPath, origin, asNames), alternativePaths, routeCount, pathAnalysis, and the routeServer used.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | IPv4/IPv6 address or CIDR prefix to look up (e.g. 8.8.8.8 or 8.8.8.0/24). Required; validated as an IP or CIDR before any query. | |
| routeServer | No | Routing data source. Only bgpview is implemented; route-views and ripe-ris fall back to BGPView. | bgpview |
| showAlternativePaths | No | Include up to three upstream/alternative AS paths in the result. | |
| showRouteAttributes | No | Include path-analysis attributes (hop count, geographic path, diversity). | |
| resolveASNNames | No | Resolve AS numbers to organisation names in the asNames map. | |
| showPathLatency | No | Include estimated path-latency analysis (best-effort; latency is not measured). | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| primaryRoute | No | Best-matching route, or null if no route was found. |
| alternativePaths | No | Up to three upstream AS paths (when showAlternativePaths is true). |
| routeCount | No | Total routes found (primary plus alternatives). |
| pathAnalysis | No | Path metrics (present when showRouteAttributes or showPathLatency is true). |
| routeServer | No | Routing data source actually used. |
| error | No | Present only on failure (400/500): describes the error. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint: false, destructiveHint: false). The description adds substantial behavioral context: read-only, non-destructive, not idempotent, rate limits, CAPTCHA, dependency on a third-party API (BGPView), and variability of results. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that is front-loaded with purpose. It includes necessary details (rate limits, alternatives) without verbosity. Could be slightly more structured, but overall concise and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, 1 required), the description covers purpose, usage, behavior, output (with output schema present), and limitations. It is complete for an AI agent to understand when and how to use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add significant meaning beyond what the schema already provides for parameters. It mentions output fields (origin AS, AS-PATH, etc.) but not parameter-specific semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Resolve') and resource ('IPv4/IPv6 address or CIDR prefix to live BGP routing data'), clearly stating the tool's purpose. It distinguishes from sibling tools by naming alternatives like network_asn_lookup, network_whois, and network_ip_geolocation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('when you need the routing path / AS-PATH for an address') and provides alternatives for other use cases. Also mentions non-idempotent behavior and rate limits, offering clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_cidr_calculatorARead-onlyIdempotent
CIDR Notation Calculator. Parse one IPv4 CIDR block (e.g. 192.168.1.0/24) or an IP plus dotted-decimal mask and return network/broadcast addresses, first/last host, total and usable host counts, subnet and wildcard masks, dotted-binary of each, network class, RFC 1918 private flag plus loopback/multicast/link-local flags, a sample child-subnet split, and a plain-text size/use summary. Use network_subnet_calculator for the same math with explicit IP-plus-mask form fields, or network_ip_range_calculator to enumerate every address in a block. Pure offline IPv4 math: read-only, non-destructive, contacts no DNS or network service, and is rate-limited (30 requests/minute for anonymous callers).
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | One IPv4 network in CIDR form like 192.168.1.0/24 (prefix 0-32), or an IP and contiguous dotted-decimal mask separated by a space like 192.168.1.0 255.255.255.0. A bare IP with no slash or mask is treated as /32. Each octet must be 0-255. | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 200; error responses use HTTP 400. |
| input | No | The submitted network string, trimmed and echoed back. |
| calculations | No | Computed network details for the parsed block. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, destructiveHint, idempotentHint. The description adds context: pure offline IPv4 math, no DNS/network contact, rate-limited (30 req/min). This exceeds annotation information without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that packs a lot of information. While comprehensive, it could be more structured (e.g., bullet points) for quick scanning. However, every sentence adds value, and it is overall concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (though not provided here), the description lists all key outputs: network/broadcast, first/last host, counts, masks, binary, class, RFC 1918 flag, sample subnet split, and summary. For a 2-parameter tool, this is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds examples (e.g., '192.168.1.0/24', '192.168.1.0 255.255.255.0') and clarifies behavior for bare IPs (treated as /32), enriching understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool parses IPv4 CIDR notation or IP+mask and returns a comprehensive set of network details. It explicitly distinguishes itself from sibling tools like network_subnet_calculator and network_ip_range_calculator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use guidance, mentioning alternatives for different input forms (network_subnet_calculator for explicit IP-plus-mask, network_ip_range_calculator for enumeration). It also notes offline and rate-limited behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_dmarc_record_checkerA
DMARC Record Checker. Look up and validate a domain's DMARC policy by making a live DNS TXT query for _dmarc., returning the DMARC record, every matching TXT record, and a flag for duplicate records. Use network_spf_record_checker instead for SPF/Sender-Policy records or network_mx_record_lookup for mail-server MX records; this tool only resolves DMARC and has a single action=lookup (no offline parse mode). Performs an outbound DNS query (may run on a remote worker peer), so results can change between calls as DNS records change. No auth required; rate-limited to 30 req/min, 180/hr, 500/day for anonymous callers, with CAPTCHA above 50/hr.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain whose DMARC record to query (registrable domain or hostname, e.g. example.com); the tool prepends _dmarc. automatically. No protocol or path; max 253 chars. | |
| action | No | Only lookup is supported; performs a live DNS TXT query for _dmarc.<domain>. Any other value is rejected. | lookup |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the request was processed; false on invalid input or server error. |
| data | No | DMARC lookup payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description describes a read-only DNS lookup, but annotations set readOnlyHint=false, indicating a contradiction. Per rules, a contradiction yields a score of 1. The description otherwise adds useful behavioral context (e.g., rate limits, remote worker, no auth), but the contradiction overrides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening, alternative tool mention, and behavioral details. It is slightly lengthy but every sentence adds value. Front-loading the purpose and sibling differentiation is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single lookup with 3 parameters) and presence of output schema, the description covers all necessary context: usage scope, behavioral notes (DNS query, remote worker, rate limits, CAPTCHA), and authentication requirements. No gaps are apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The description adds minimal extra meaning (e.g., clarifying action is only lookup and domain is prepended with _dmarc.), but does not significantly enhance understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Look up and validate a domain's DMARC policy by making a live DNS TXT query', specifying the verb, resource, and method. It also explicitly distinguishes from sibling tools like SPF and MX record checkers, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use network_spf_record_checker instead for SPF/Sender-Policy records or network_mx_record_lookup for mail-server MX records; this tool only resolves DMARC', including an alternative tool mention and scope limitation (single action=lookup).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_dnsA
DNS Lookup (NSLookup / Dig). Run a live DNS record lookup for a domain or IP, resolving A, AAAA, MX, NS, TXT, CNAME, PTR, or SOA records by sending an outbound query to a public resolver (default 8.8.8.8). Use this for forward and record-type lookups on a hostname; use network_reverse_dns to turn an IP into a hostname via PTR, or network_dns_propagation to compare a record across many global resolvers. NOT read-only and NOT idempotent: it reaches the public DNS system and results vary by resolver, caching, and TTL. Rate-limited (20 requests/minute for anonymous callers). Returns an array of records with name, type, ttl, value, and per-type details (MX priority, SOA serial/refresh/retry/expire).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Domain name or IP address to resolve (for example example.com or 8.8.8.8). Validated as a hostname or IP; must not be blank. | |
| recordType | No | DNS record type to query. Defaults to A (IPv4). PTR reverses an IPv4 host into in-addr.arpa form automatically. | A |
| dnsServer | No | Resolver IP used for the lookup. Defaults to Google Public DNS (8.8.8.8). Honored when a remote worker performs the query. | 8.8.8.8 |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the lookup completed. |
| host | No | The queried domain or IP, echoed back. |
| recordType | No | The record type that was queried. |
| dnsServer | No | The resolver IP used for the query. |
| records | No | Matched DNS records (empty when none exist or the query failed). |
| authority | No | Authority-section records, or null when not provided. |
| additional | No | Additional-section records, or null when not provided. |
| timestamp | No | ISO 8601 time the response was generated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explicitly states it is NOT read-only and NOT idempotent, results vary by resolver/caching/TTL, and rate-limited. This goes beyond annotations (which set hints) to provide behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise, front-loaded with primary action, and includes all necessary details in a well-structured manner. No unnecessary sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description covers return format. It addresses side effects, rate limits, and comparison to siblings, making it complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds minor context (default resolver, PTR auto-reverse) but does not significantly enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs DNS lookups resolving A, AAAA, MX, etc. records. It distinguishes from sibling tools network_reverse_dns and network_dns_propagation by explicitly comparing usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (forward/record-type lookups) and when not (use network_reverse_dns for IP->hostname, network_dns_propagation for global prop). Also mentions rate limits (20 req/min) guiding agent expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_dns_propagationA
DNS Propagation Checker. Check whether a DNS record has propagated by querying it across 14 global public resolvers (Google, Cloudflare, Quad9, OpenDNS, Verisign, DNS.WATCH, Comodo, Level3) and comparing the answers. Use this after changing a record to confirm the update has spread worldwide and is consistent; use network_dns for a single authoritative lookup against one resolver. This sends outbound DNS queries to those third-party servers, so it is NOT read-only and contacts the open internet. Rate-limited to 3 requests per minute for anonymous callers. Returns per-resolver records, response times and status, plus a propagation summary (percentage propagated, consistency, status) and warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain name to check (for example example.com). Must be a valid hostname of one or more labels with a letter top-level domain. | |
| record_type | No | DNS record type to query at each resolver. Defaults to A when omitted. | A |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the check ran successfully. |
| domain | No | The domain that was queried, echoed back. |
| record_type | No | The record type that was queried (defaults to A). |
| timestamp | No | Server timestamp when the check ran (Y-m-d H:i:s). |
| total_time | No | Sum of all per-resolver response times in milliseconds. |
| results | No | One entry per queried resolver. |
| summary | No | Aggregate propagation analysis across all resolvers. |
| warnings | No | Human-readable advisories about incomplete or inconsistent propagation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool sends outbound DNS queries to 14 third-party servers, is NOT read-only, contacts the open internet, and is rate-limited to 3 requests per minute. This adds significant context beyond the annotations (which only indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences long, efficiently front-loading purpose and usage guidelines before adding behavioral details. It is concise and well-structured, though a minor trimming could make it slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (checking across 14 resolvers, rate limits, output summary), the description covers all necessary aspects: purpose, usage context, behavioral traits, rate limiting, and the list of resolvers. The presence of an output schema reduces the need to describe return values. The description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already provides detailed descriptions for all parameters (domain, record_type with enum, worker_id). The description only mentions domain and record_type implicitly but does not add new meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks DNS propagation across 14 global resolvers. It distinguishes itself from the sibling tool 'network_dns' by specifying that this tool checks propagation across multiple resolvers while network_dns is for a single authoritative lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (after changing a record to confirm propagation) and when to use the alternative 'network_dns' (for a single authoritative lookup against one resolver). This provides clear guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
networking_ipv4_to_ipv6ARead-onlyIdempotent
IPv4 to IPv6 Converter. Convert a single IPv4 address into its IPv6 representations using offline bit/string arithmetic, with no DNS or live network lookup. Returns the IPv4-mapped form (compressed, expanded, and dotted-suffix), the deprecated IPv4-compatible form (compressed and expanded), the 6to4 prefix (only for public addresses; null for private/loopback), plus the address packed as hexadecimal and dotted binary. Also classifies the input (A-E class, public/ private/loopback/link-local/multicast/reserved type). Use network_subnet_calculator or network_cidr_calculator instead for subnet planning and CIDR notation; this tool only transforms one host address to IPv6 notation and does not parse CIDR. Accepts one dotted-decimal IPv4 (e.g. 192.168.1.1), no CIDR suffix. Read-only, non-destructive, contacts no external service, and rate-limited (60 req/min, 500/hr anonymous).
| Name | Required | Description | Default |
|---|---|---|---|
| ipv4 | Yes | The IPv4 address to convert, in dotted-decimal notation with four octets 0-255 and no CIDR suffix. | |
| input | No | Deprecated alias for ipv4, used only when ipv4 is omitted; same dotted-decimal format. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the address was valid and converted; false on invalid input. |
| error | No | Error message present only when success is false (e.g. invalid IPv4 address format). |
| result | No | Conversion output, present only when success is true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds behavioral details beyond annotations: read-only, non-destructive, no external service contacts, rate limits (60 req/min, 500/hr). Also enumerates output types and classification. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single well-structured paragraph with each sentence adding value: purpose, method, output types, sibling differentiation, input format, behavioral notes. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description does not need to detail return values but still lists them. Covers all necessary context for a two-parameter tool with high schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions. Description adds that ipv4 must be dotted-decimal without CIDR suffix, and that input is a deprecated alias. This adds context beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description starts with 'IPv4 to IPv6 Converter' and clearly states it converts a single IPv4 address to IPv6 representations using offline arithmetic, distinguishing it from sibling tools for subnet planning and CIDR notation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use network_subnet_calculator or network_cidr_calculator for subnet planning, and clarifies this tool only transforms one host address without CIDR parsing. States input format explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
networking_mac_address_generatorARead-only
MAC Address Generator And Analyzer. Generate random IEEE 802 MAC addresses and analyze or reformat existing ones. The default generate operation returns count fresh random MACs (output varies every call — not idempotent) with selectable unicast/multicast and locally/universally-administered bits; other operations are deterministic: analyze decodes one MAC into OUI, NIC, cast/admin bits and best-effort vendor, format converts one MAC between notations, use_case emits a single MAC tuned for a scenario, and vendor_oui prefixes random NIC bytes onto a supplied OUI. Use this to fabricate MACs for VMs, lab testing, and network config; use osint_mac_vendor_lookup instead to resolve a real manufacturer from a known MAC. Runs locally via a JS logic bridge: read-only, non-destructive, contacts no external service, rate-limited to 60 requests/min for anonymous callers. Returns a success flag, the echoed operation, and an operation-specific result.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Which action to perform. Defaults to generate. | generate |
| count | No | generate only: how many random MACs to return. | |
| mac | No | analyze/format only: the MAC to process; 12 hex digits, separators (: - .) ignored. | |
| format | No | Output notation for generate and format operations. | colon |
| unicast | No | generate only: force the unicast (LSB of first octet = 0) bit. | |
| locallyAdministered | No | generate only: set the locally-administered bit on generated MACs. | |
| universallyAdministered | No | generate only: clear the locally-administered bit (ignored if locallyAdministered is true). | |
| useCase | No | use_case only: scenario preset selecting the admin/cast bits. | virtual_machine |
| oui | No | vendor_oui only: 6 hex-digit OUI prefix to prepend to random NIC bytes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation completed. |
| operation | No | The operation that was executed. |
| result | No | Operation-specific payload. generate -> array of { mac, formatted, analysis }; analyze -> an analysis object; format -> { input, output, allFormats }; use_case -> { mac, formatted, useCase, description, analysis }; vendor_oui -> the generated 12-hex-digit MAC string. |
| error | No | Present only when success is false; the failure reason. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: non-idempotency for generate operations, local execution via JS logic bridge, read-only and non-destructive nature, no external service contact, and rate limiting (60 req/min). Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds valuable context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph that front-loads the purpose and systematically covers all operations, constraints, use cases, and alternatives. Every sentence adds necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, 5 operations, enum constraints), the description is complete. It explains all operations, parameter dependencies, and provides use-case guidance. The output structure is briefly described, and rate limiting is mentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining parameter interactions (e.g., universallyAdministered ignored if locallyAdministered is true) and clarifying operation-specific applicability (e.g., count only for generate). This increments the score to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as generating and analyzing MAC addresses, listing all five operations (generate, analyze, format, use_case, vendor_oui) with specific verbs and resources. It distinguishes itself from the sibling tool osint_mac_vendor_lookup by specifying when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (fabricating MACs for VMs, lab testing, network config) and when to use an alternative (osint_mac_vendor_lookup for real manufacturer resolution). It also explains the different operations and their intended scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
networking_mtu_size_calculatorARead-onlyIdempotent
MTU and TCP MSS Size Calculator. Compute the inner MTU, TCP MSS, usable payload, and total header overhead for a link once a stack of encapsulations is subtracted, using RFC-cited byte sizes (IPv4 20, IPv6 40, TCP 20, UDP 8, PPPoE 8, VLAN 4, QinQ 8, WireGuard 60, IPsec ESP 38 or 62, GRE 24, L2TP 12, IPIP 20). Set operation to compute for the full breakdown plus warnings, presets for a curated list of common stacks (Ethernet, PPPoE, VLAN, WireGuard, IPsec, GRE, jumbo, 6-in-4), or pathMtuDiscovery for a coarse PMTUD probe table. This is pure offline math on the numbers you supply; use networking_network_latency_calculator to interpret ping or speedtest samples instead. Read-only, non-destructive, contacts no host, and rate-limited (anonymous 60 requests/minute). Returns inner mtu, mss (null unless transport is tcp), payload, overhead, a per-layer byte breakdown, and warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Which computation to run. compute returns the MTU/MSS breakdown; presets returns curated stacks and ignores all other fields; pathMtuDiscovery returns a probe table. | compute |
| linkMtu | No | Underlying link MTU in bytes (required for compute and pathMtuDiscovery; ignored for presets). Must be 576 (RFC 791 minimum) to 9216 (jumbo ceiling). | |
| ipVersion | No | IP version selecting the L3 header size (IPv4 20 bytes or IPv6 40 bytes). | 4 |
| transport | No | Transport layer selecting the L4 header size (TCP 20, UDP 8, none 0). MSS is only returned when tcp. | tcp |
| encapsulations | No | Tunnel/encapsulation layers to subtract, each contributing its RFC byte size. Unknown ids are rejected. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the operation succeeded. |
| operation | No | The operation performed (compute, presets, or pathMtuDiscovery). |
| result | No | Operation output. For compute, an object as described below; for presets and pathMtuDiscovery, an array of entries. |
| error | No | Error message when success is false (HTTP 400/500). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds value beyond annotations by detailing that it is pure offline math, contacts no host, and has a rate limit of 60 requests/minute. No contradiction with readOnlyHint and destructiveHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single paragraph of about 6 sentences, front-loaded with purpose. Every sentence adds value, though slightly denser than necessary; could be broken into bullet points for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given rich schema with enums, full parameter descriptions, output schema present, and annotations, the description still adds critical context (rate limits, alternative tool, return fields) and is sufficient for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage, but the description adds useful context such as listing RFC byte sizes for encapsulations and stating that unknown encapsulation IDs are rejected. It explains the effect of each operation mode beyond schema enums.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes inner MTU, TCP MSS, usable payload, and overhead for encapsulations. It distinguishes three operations (compute, presets, pathMtuDiscovery) and explicitly contrasts with sibling tool networking_network_latency_calculator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use each operation and when to use an alternative tool ('use networking_network_latency_calculator to interpret ping or speedtest samples instead'). Also mentions read-only, non-destructive, and rate-limited behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
networking_network_latency_calculatorARead-onlyIdempotent
Network Latency Statistics Calculator. Computes descriptive statistics and a performance verdict from a list of latency measurements (in ms) you already have. Pure offline math — it never pings, traces, or contacts any host; you supply the numbers. The 'analyze' operation returns count/min/max/mean/median/stdDev/variance, jitter (mean consecutive delta), p25-p99 percentiles, an excellent-to-very-poor rating with issues + recommendations, per-application suitability (gaming, VoIP, video, web, streaming, downloads), and a theoretical fiber-distance estimate. 'convert' rescales one value between ns/us/ms/s; 'benchmarks' returns reference latency tables (no input). Use this to interpret ping/speedtest samples; use the live Ping or Internet Speed Test tools to actually measure, and MTU Size Calculator for packet-size math. Read-only, rate-limited (anonymous 30 req/min).
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Which computation to run. | analyze |
| latencies | No | analyze mode: latency samples in milliseconds, either a number array or a comma/whitespace-separated string. Non-finite or negative values are counted as invalid. | |
| input | No | Alias for 'latencies' (analyze mode) if that key is absent. | |
| value | No | convert mode - the latency value to rescale. | |
| fromUnit | No | convert mode - source time unit. | ms |
| toUnit | No | convert mode - target time unit. | ms |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | |
| operation | No | |
| result | No | analyze returns an object with statistics/performance/applications/distance; convert returns a number in the target unit; benchmarks returns reference tables. |
| error | No | Present only when success is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: pure offline math, never pings or contacts hosts, rate-limited (30 req/min), and read-only. It adds beyond annotations (which already declare readOnlyHint, destructiveHint, idempotentHint) by specifying rate limits and the operations' output structure. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured paragraph that front-loads the purpose, then details operations and usage. It is dense with information but could be slightly more concise; however, it avoids fluff and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has three operations, the description covers all modes, explains output for analyze, mentions rate limits and alternatives. With an output schema present, it doesn't need to detail return values. However, it could mention what happens if no input is provided for analyze, so not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the 'analyze' mode expects latency samples in ms, that non-finite or negative values are invalid, and that 'input' is an alias for 'latencies'. This provides context beyond schema but does not fully detail each parameter's format, so above baseline but not perfect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes descriptive statistics and performance verdict from latency measurements, and distinguishes three operations (analyze, convert, benchmarks). It explicitly notes it never pings or contacts any host, differentiating it from sibling tools like network_ping or networking_mtu_size_calculator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: for interpreting ping/speedtest samples, and when to use alternative tools (live Ping, Internet Speed Test, MTU Size Calculator). It also mentions rate limits (30 req/min anonymous) and read-only nature, providing clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
networking_wake_on_lanARead-onlyIdempotent
Wake-on-LAN Magic Packet & Command Builder. Build a Wake-on-LAN (WOL) magic packet and ready-to-run wake commands for a target MAC address — it constructs the 102-byte packet hex and emits Linux/Windows/macOS/router/ Python/Node.js/Bash commands, but does not transmit anything itself (run the returned command to actually wake the host). Choose operation to scope the work: "generate" (all outputs), "packet" (packet bytes only), "commands" (per-platform commands), "validate" (check MAC/broadcast/port + setup tips), or "analyze" (MAC WOL-suitability). Computes locally from your input: no socket is opened, non-destructive, idempotent, and rate-limited (5 req/min anonymous, CAPTCHA above 15/hr).
| Name | Required | Description | Default |
|---|---|---|---|
| mac | Yes | Target adapter MAC address; accepts colon, dash, dot, or bare 12-hex-digit formats. | |
| operation | No | Which output to build: generate=all, packet=magic-packet bytes only, commands=per-platform wake commands, validate=setup check, analyze=MAC suitability. | generate |
| broadcast | No | Broadcast IPv4 address the wake commands target; ignored by the packet and analyze operations. | 255.255.255.255 |
| port | No | UDP port for the wake commands (7 Echo or 9 Discard are standard); used by commands, validate, and generate. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the build succeeded. |
| operation | No | The operation that was run, echoed back. |
| result | No | Operation-dependent payload. packet returns the magic-packet bytes (targetMAC, formattedMAC, packetHex, packetLength, synchronizationBytes, macRepetitions 16, totalSize 102, packetStructure). commands returns targetMAC, broadcastAddress, port, and per-platform commands. validate returns isValid, errors, warnings, setupTips, networkInfo. analyze returns mac, isUnicast, isLocallyAdministered, wolCompatible, notes, warnings. generate returns magicPacket, commands, validation, and macAnalysis combined. |
| error | No | Failure message (e.g. Invalid MAC address format); present only when success is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that computation is local, no socket opened, non-destructive, idempotent, rate-limited (5 req/min), and CAPTCHA required above 15/hr, adding context beyond the annotations that already declare readOnly, idempotent, and non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is informative and well-structured, with purpose first, then scope of operations, then behavioral notes. Slightly verbose but each sentence contributes necessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple operations, rate limiting, local computation), the description covers all relevant aspects: functionality, limitations, behavior, and operational details. Output schema exists but description still adequately sets expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions and examples. Description adds value by explaining operation types and noting that broadcast and port are ignored for certain operations, enhancing understanding beyond schema constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool builds WOL magic packets and commands for a MAC address, lists five specific operations, and distinguishes from siblings by focusing on network wake functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use each operation ('Choose operation to scope the work'), clarifies that the tool does not transmit packets, and mentions rate limits, but does not explicitly list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_ip_geolocationARead-only
IP Geolocation Lookup. Resolve a single public IPv4 or IPv6 address to its geographic location and network owner by querying the external ip-api.com geolocation service (MaxMind GeoLite2). Use this when you have an IP and need its country, city, coordinates, ISP/ASN, and proxy/hosting/mobile flags; use network_my_ip instead to geolocate the caller's own public IP with no input. Read-only and non-destructive, but it makes an outbound network request, so results depend on live third-party data and may vary between calls. Rejects private/reserved IPs (10.x, 172.16-31.x, 192.168.x, 127.x). Rate-limited (10 req/min, 300/day anonymous; CAPTCHA above 30/hr). Returns nested location, network, accuracy, and data_sources objects.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | Public IPv4 or IPv6 address to locate. Must be a valid, non-private, non-reserved address. | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the lookup succeeded. |
| ip | No | The IP address that was looked up, echoed back. |
| location | No | Geographic data for the IP. |
| network | No | Network ownership and classification for the IP. |
| accuracy | No | Static confidence estimates for each location tier. |
| data_sources | No | Provenance of each data category. |
| timestamp | No | ISO 8601 timestamp of the response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already declaring readOnlyHint=true and destructiveHint=false, the description adds valuable behavioral context: outbound network request, dependency on live third-party data, rejection of private/reserved IPs, and rate limits (10 req/min, 300/day anonymous). This goes beyond the minimal annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that efficiently conveys purpose, usage, behavioral details, constraints, and output structure. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (external API, rate limits, private IP validation) and the presence of an output schema, the description covers all essential aspects: what it does, how to use it, behavioral caveats, constraints, and output structure. No gaps are evident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for both parameters (ip and worker_id). The description adds some context (e.g., IP must be public, output objects listed) but does not significantly enhance parameter semantics beyond the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resolves a public IPv4 or IPv6 address to geographic location and network owner using ip-api.com. It distinguishes itself from sibling network_my_ip by specifying that this tool requires an input IP while the sibling geolocates the caller's own IP.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('when you have an IP and need its country, city, coordinates, ISP/ASN...') and when to use the alternative network_my_ip. This provides clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_ip_range_calculatorARead-onlyIdempotent
IP Range Calculator. Compute IPv4 network details with offline integer arithmetic, no DNS or live network. The operation field selects one of four jobs: 'cidr' expands a CIDR block to its network/broadcast/mask/wildcard, usable host range, host count, class, and private/public flag; 'range' summarises an explicit start and end IPv4 into a total address count; 'check' tests whether an IPv4 falls inside a CIDR block; 'list' enumerates the first N addresses of a CIDR block. Use network_subnet_calculator or network_cidr_calculator instead for general subnet planning and notation conversion, and networking_ipv4_to_ipv6 to convert an address to IPv6. IPv4 only. Read-only, non-destructive, contacts no external service, and rate-limited (100 req/min, 1000/hr anonymous). The result object shape depends on the chosen operation.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Which calculation to run. cidr expands a CIDR block; range summarises start/end IPs; check tests membership; list enumerates addresses. | cidr |
| cidr | No | CIDR block in address/prefix form, required for the cidr, check, and list operations. Prefix must be 0-32. | |
| input | No | Alias for cidr accepted only by the cidr operation; cidr takes precedence when both are present. | |
| startIp | No | First IPv4 address of the range, required for the range operation. Must be less than or equal to endIp. | |
| endIp | No | Last IPv4 address of the range, required for the range operation. | |
| ip | No | IPv4 address to test for membership, required for the check operation. | |
| limit | No | Maximum number of addresses to enumerate for the list operation. Output is truncated to this many. | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the calculation succeeded. |
| operation | No | The operation that was run, echoed back. |
| result | No | Operation-specific payload (object for cidr/range/list; the check operation instead returns a boolean here). |
| error | No | Error message when success is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), description adds rate limits (100 req/min, 1000/hr anonymous), offline computation, and no external dependencies. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with front-loaded purpose, but slightly verbose with multiple clauses. Each sentence adds value, though could be more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (8 params, 4 operations, output schema), description fully covers behavior, limitations, and usage. No gaps remain for an AI agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline 3. Description minimally adds context beyond schema (e.g., 'result object shape depends on operation'), but schema already defines each parameter with descriptions and examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it's an IP Range Calculator for IPv4 with offline arithmetic. It enumerates four distinct operations (cidr, range, check, list) and distinguishes from sibling tools like network_subnet_calculator and networking_ipv4_to_ipv6.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use each operation via the 'operation' field. Provides alternatives for subnet planning and IPv6 conversion. States 'IPv4 only' and 'no DNS or live network', setting clear boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_mx_record_lookupA
MX Record Lookup (DNS Mail Servers). Run a live DNS MX (mail exchange) lookup for a domain to reveal its inbound mail servers and their routing priorities. Use this for the email-delivery path of a domain; use network_dns_lookup for arbitrary record types (A/CNAME/TXT), and network_spf_record_checker or network_dmarc_record_checker for email-auth policy. Issues a fresh outbound DNS query (preferably via a registered remote worker, with a local resolver fallback), so each call reflects current DNS state and is not idempotent. CAPTCHA-gated and rate-limited (anonymous 10/min, 60/hour, 200/day). Returns the MX records sorted ascending by priority (lowest preferred).
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain whose MX records to resolve, hostname only (no scheme or path), e.g. example.com. | |
| action | No | Operation to run; only "lookup" is supported. | lookup |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the lookup completed (HTTP 400/500 with success false on error). |
| data | No | The MX result payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that each call issues a fresh DNS query (non-idempotent), matching the idempotentHint=false annotation. It also reveals rate limits (10/min, 60/hour, 200/day) and CAPTCHA-gating, which annotations do not cover. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with front-loaded purpose and usage, then behavioral details. It is slightly verbose but every sentence adds value. Could be slightly tighter but still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown), the description does not need to detail return values. It covers purpose, usage guidelines, behavioral traits, and rate limits. Complete for a lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds minimal semantic value beyond the schema: it confirms 'action' only supports 'lookup' and domain note. No additional parameter context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs MX record lookup for a domain, returning mail servers and priorities. It distinguishes itself from siblings like network_dns_lookup (for arbitrary record types) and network_spf_record_checker/network_dmarc_record_checker (for email-auth policy).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('for the email-delivery path of a domain') and when not to, pointing to alternative tools for other record types or email-auth policies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_my_ipA
My Public IP Address and Geolocation. Detect the caller public IP address and enrich it with geolocation, proxy/VPN, and ASN details via an outbound lookup to ip-api.com. The result is live and varies by who calls it, since the IP is read from the incoming request headers (X-Forwarded-For, X-Real-IP, CF-Connecting-IP and similar) rather than from a parameter. Use this when you want the requester own address; use network_ip_geolocation instead to look up an arbitrary IP you supply. Not read-only in the side-effect sense (it queries a third party) and rate-limited (30 requests/minute for anonymous callers). Takes no input (HTTP GET, no body or query parameters). Returns the detected IP, proxy analysis, header echo, and country/region/city/ISP/ASN when the geo lookup succeeds.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ip | No | The public IP address detected for the caller, or unknown if it could not be determined. |
| timestamp | No | ISO 8601 time the response was generated. |
| source | No | How the IP was obtained; always server_detection. |
| proxy_detection | No | Proxy/CDN analysis derived from forwarding headers. |
| ip_analysis | No | Per-header breakdown keyed by server variable (HTTP_X_FORWARDED_FOR and similar); each entry reports its value, a human description, and a present flag. |
| country | No | Country name from ip-api.com (present only when the geo lookup succeeds). |
| countryCode | No | Two-letter ISO country code. |
| region | No | Region or state name (ip-api regionName). |
| city | No | City name. |
| zip | No | Postal/ZIP code. |
| lat | No | Latitude of the approximate location. |
| lon | No | Longitude of the approximate location. |
| timezone | No | IANA timezone name for the location. |
| isp | No | Internet service provider name. |
| org | No | Organization that owns the IP. |
| as | No | Autonomous System number and name (such as AS15169 Google LLC). |
| mobile | No | True if the IP is on a mobile carrier network. |
| proxy | No | True if ip-api flags the IP as a proxy or VPN. |
| hosting | No | True if the IP belongs to a hosting or data-center range. |
| headers | No | Echo of selected request headers including proxy-detection headers; each value is the header string or null when absent. |
| data_sources_info | No | Explanations of how each data point is derived and approximate accuracy. |
| server_info | No | Details about the responding server and connection (server IP/port, HTTPS, protocol, method). |
| warning | No | Present only when the ip-api.com lookup failed; the geo fields are then omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it queries a third-party API (ip-api.com), is rate-limited, reads IP from request headers, and that results are live. These details go beyond annotations, which already set readOnlyHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive but slightly verbose; however, each sentence adds value and it is well-structured with important details front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, behavior, input, and expected output fields. With no parameters and rich annotations, the description is fully informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty with additionalProperties: true, and the description explicitly says 'Takes no input (HTTP GET, no body or query parameters)', adding clarity beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool detects the caller's public IP and enriches it with geolocation, proxy/VPN, and ASN details. It distinguishes from sibling tool 'network_ip_geolocation' by specifying when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (requester's own address) versus alternatives (network_ip_geolocation for arbitrary IP). Also provides context on side effects and rate limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_pingA
Ping Host (ICMP/HTTP Reachability). Measure reachability and round-trip latency to a single host. Prefers a registered remote worker that runs a real ICMP ping (system ping -c, method remote_icmp) and returns average time, TTL, and full raw_output; if no worker is available it falls back to an HTTP HEAD/GET reachability probe (method HTTP simulation) that reports HTTP response time and status_code instead of true ICMP. Use this to confirm a host is up and gauge latency to ONE target. Use network_traceroute instead to see the per-hop path, network_website_status_checker to validate an HTTP(S) URL response/status, network_dns to resolve names to records, or networking_network_latency_calculator for offline RTT/jitter statistics. target may be a hostname or IPv4/IPv6 address (no scheme/path); private, reserved, and loopback addresses are rejected (SSRF guard, re-checked after DNS resolution). Performs an OUTBOUND network probe to the target, so results vary between calls and are not idempotent; it never modifies
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Hostname or IPv4/IPv6 address to ping, e.g. 8.8.8.8 or example.com. No scheme or path. Private, reserved, and loopback addresses are rejected. | |
| packet | No | Number of ICMP echo packets to send on the remote-worker path; the reported time is the average across replies. Ignored by the HTTP fallback, which always issues one request. | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the host responded (ICMP exit code 0, or a completed HTTP request). |
| target | No | The hostname or IP that was pinged, echoed from the request. |
| host | No | Host that answered: the target hostname on the worker path, or the resolved public IP on the HTTP fallback path. |
| packet | No | Number of packets sent (worker path) or 1 (HTTP fallback). |
| time | No | Round-trip time in milliseconds: average ICMP reply time on the worker path, or total HTTP response time on the fallback. Null when no reply was received. |
| ttl | No | Time To Live from the reply (parsed from ICMP on the worker path; defaulted to 64 on the HTTP fallback). |
| method | No | Which mechanism produced the result: remote_icmp for a real ICMP ping via a worker, or HTTP simulation for the HTTP reachability fallback. |
| raw_output | No | Full raw text output of the system ping command. Present only on the remote_icmp worker path. |
| bytes | No | Payload size in bytes (fixed 32). Present only on the HTTP simulation fallback path. |
| status_code | No | HTTP status code returned by the reachability probe. Present only on the HTTP simulation fallback path. |
| timestamp | No | ISO 8601 timestamp of when the ping completed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description details dual behavior (prefers ICMP via remote worker, falls back to HTTP probe), SSRF guard rejecting private addresses, and non-idempotent nature. Annotations (readOnlyHint=false, idempotentHint=false) align and don't contradict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with purpose and compressed but includes necessary details. Slightly verbose due to behavioral and security explanations, but each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (dual mode, SSRF guard, variability) and presence of output schema, description covers reachability, latency, fallback, SSRF rules, and non-idempotency. Complete for agent selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all three parameters (target, packet, worker_id) with descriptions. Description adds context on target format, packet's role only in ICMP path and ignored by HTTP fallback, and worker_id as optional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Title and description clearly state 'Ping Host (ICMP/HTTP Reachability)' with verb 'ping' and resource 'host'. Description explicitly distinguishes from sibling tools (network_traceroute, network_website_status_checker, etc.) by stating when to use each alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explicitly states 'Use this to confirm a host is up and gauge latency to ONE target' and provides clear alternatives for different needs (traceroute, DNS, HTTP validation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_port_scanA
TCP Connect Port Scanner. Probe a live host for open TCP ports by opening real outbound TCP connections from this server to each requested port and reporting which answer (open), refuse (closed), or time out (filtered). Use this to detect actually-listening services on a host you control; use network_tcp_udp_port_reference instead for offline lookup of what a port number conventionally means (no live probe). Makes outbound network connections from the server, resolves the host and pins the scan to the first publicly-routable IP (private and reserved ranges are rejected), is a TCP connect scan the target may log, and is heavily rate-limited (1 per minute, 5 per hour, 20 per day anonymous) with CAPTCHA and terms acceptance. Only scan systems you own or have permission to test. Returns per-port status with detected service name and response time, plus open/closed/filtered summary counts.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Target hostname or IP address to scan. Must resolve to a publicly-routable address (private and reserved IPs are rejected). | |
| ports | No | Comma-separated ports and ranges (for example 80,443,8080 or 1-1024). Each port must be 1-65535; at most 100 distinct ports after expansion or the request is rejected. | 22,23,25,53,80,110,143,443,993,995 |
| timeout | No | Per-port TCP connect timeout in seconds. Values outside 1-30 are coerced to 3. | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the scan completed. |
| host | No | The submitted target host, echoed back. |
| target_ip | No | The resolved publicly-routable IP the scan was pinned to. |
| ports_scanned | No | Number of ports probed. |
| timeout | No | Per-port timeout in seconds actually used. |
| results | No | One entry per scanned port. |
| summary | No | Aggregate counts across all probed ports. |
| warnings | No | Advisory notices about logging, authorization, and rate limits. |
| timestamp | No | ISO 8601 completion time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it makes outbound connections, resolves to public IP only, rejects private ranges, is rate-limited (1/min, 5/hr, 20/day), may be logged, and requires permission. These details are not present in annotations, providing valuable transparency beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with purpose. While slightly verbose, each sentence adds necessary information. Could be marginally trimmed, but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, output schema, annotations), the description covers behavioral aspects, usage guidelines, permission requirements, and output format. It is fully complete for an AI agent to understand and use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes all parameters. The description adds no extra detail on parameters beyond what the schema provides, but it contextualizes the tool's behavior. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a TCP connect port scan, probing a live host for open TCP ports. It distinguishes itself from the sibling tool network_tcp_udp_port_reference by emphasizing live probing versus offline lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool ('detect actually-listening services on a host you control') and when to use the alternative (network_tcp_udp_port_reference for offline lookup). Also includes permission requirements and rate limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_proxy_list_moreARead-onlyIdempotent
Free Proxy List (Load More). Reveal the remaining rows of the Free Proxy List beyond the first 50 the page renders for everyone, for the current filter view. This is the captcha-gated "load more" companion to the server-rendered network_proxy_list page (which has no list-fetch API of its own): one reCAPTCHA v3 solve unlocks the rest of that view (session-scoped, ~30 min) up to a hard cap of 200 rows. Reads alive, public, credential-free proxies from this site's own already-checked database — it does not crawl or connect out to proxies at call time. Read-only and non-destructive, rate-limited (anonymous 10/min, 60/hour, 200/day). Returns pre-rendered HTML table rows (not structured JSON proxy objects), the row count, and a done flag.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No | The active list filters identifying which view to page. Must match the filters used for the initial page render so the unlock and offset align. | |
| token | No | reCAPTCHA v3 response token (action "proxy_list_load_more"). Required only on the first reveal of a filter view; may also be sent via the X-Captcha-Response header. Omit once the view is unlocked for the session. | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when rows were returned (false with a 403 status when captcha verification is required). |
| html | No | Pre-rendered HTML table rows for the proxies beyond the initial 50, ready to append to the list. |
| count | No | Number of additional proxy rows included in html. |
| done | No | Always true; all remaining rows (up to the 200 cap) are returned in one call, so there is nothing further to page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description reinforces this by stating it is read-only, non-destructive, does not crawl proxies, and adds concrete rate limits and session scope. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense paragraph that front-loads the core purpose and covers all critical details without unnecessary fluff. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (captcha, session limits, rate limits, output format), the description addresses all key aspects. It mentions the output format (HTML rows, count, done flag) even though an output schema exists. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have schema descriptions (100% coverage). The description adds meaningful context: token required only on first reveal, filters must match initial view, and alternative header method. This goes beyond schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: revealing additional rows of the Free Proxy List beyond the initial 50. It specifies the resource, action, and constraints (captcha-gated, 200-row cap), and differentiates from the companion tool network_proxy_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to load more than 50 rows) and prerequisites (matching filters, reCAPTCHA token on first call). It implies when not to use (e.g., when initial page suffices), though not explicit. Alternatives are implied via sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_request_headersARead-only
Inspect Incoming HTTP Request Headers. Reflects and analyzes the HTTP request headers that the caller's own client sent to this endpoint — it does NOT fetch headers from a remote URL. Use it to see the exact User-Agent, Accept, Accept-Language, Accept-Encoding, Connection, cache, and CORS headers your browser or HTTP client emits, plus a parsed browser/platform/device summary and a present/missing security-header audit. Use my_ip instead to resolve your public IP, browser_fingerprint_viewer for client-side fingerprint surface, or header_analyzer to evaluate response headers of a site. Read-only and non-destructive; contacts no external service; results vary per request so it is not idempotent. Inherits the network category rate limit (30 req/min, 180/hr, 500/day for anonymous callers) and a CAPTCHA challenge above 50 requests/hour. Returns the normalized headers map, request metadata, analysis object, and a raw header string.
| Name | Required | Description | Default |
|---|---|---|---|
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when inspection completed. |
| headers | No | Incoming request headers, Title-Cased name to comma-joined value. |
| request_info | No | Request metadata (method, scheme, host, port, path, query_string, protocol, remote_addr, remote_port, server_addr, server_port, server_software, request_time, request_uri, is_secure, is_xhr). |
| analysis | No | Parsed browser info, present/missing security headers, connection details, accepted_types/languages/encodings, and request_type. |
| raw_headers | No | Raw request line plus header lines as a single CRLF-joined string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, destructiveHint=false, idempotentHint=false. The description adds context: 'Read-only and non-destructive; contacts no external service; results vary per request so it is not idempotent.' It also details rate limits and CAPTCHA, which are not in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and is well-structured. It is concise but the final sentence listing return fields is a bit dense; however, it still efficiently communicates key information without excess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single optional parameter, existence of output schema, and many sibling tools, the description covers all aspects: purpose, parameters, behavior, limitations, and return structure. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (1 parameter, fully described). The description adds meaning: 'Omit to use the default master-server behavior.' This clarifies usage beyond the schema field description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('Inspect', 'Reflects and analyzes') and clearly states the resource (incoming HTTP request headers). It explicitly distinguishes from sibling tools like my_ip, browser_fingerprint_viewer, and header_analyzer by contrasting their purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool ('to see the exact User-Agent...') and when not to use it (it does not fetch headers from a remote URL). It names alternatives (my_ip, browser_fingerprint_viewer, header_analyzer) and describes rate limits and CAPTCHA conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_request_headers_postARead-only
Inspect Incoming HTTP Request Headers. Reflects and analyzes the HTTP request headers that the caller's own client sent to this endpoint — it does NOT fetch headers from a remote URL. Use it to see the exact User-Agent, Accept, Accept-Language, Accept-Encoding, Connection, cache, and CORS headers your browser or HTTP client emits, plus a parsed browser/platform/device summary and a present/missing security-header audit. Use my_ip instead to resolve your public IP, browser_fingerprint_viewer for client-side fingerprint surface, or header_analyzer to evaluate response headers of a site. Read-only and non-destructive; contacts no external service; results vary per request so it is not idempotent. Inherits the network category rate limit (30 req/min, 180/hr, 500/day for anonymous callers) and a CAPTCHA challenge above 50 requests/hour. Returns the normalized headers map, request metadata, analysis object, and a raw header string.
| Name | Required | Description | Default |
|---|---|---|---|
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when inspection completed. |
| headers | No | Incoming request headers, Title-Cased name to comma-joined value. |
| request_info | No | Request metadata (method, scheme, host, port, path, query_string, protocol, remote_addr, remote_port, server_addr, server_port, server_software, request_time, request_uri, is_secure, is_xhr). |
| analysis | No | Parsed browser info, present/missing security headers, connection details, accepted_types/languages/encodings, and request_type. |
| raw_headers | No | Raw request line plus header lines as a single CRLF-joined string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states that the tool is read-only, non-destructive, contacts no external service, and is not idempotent, which aligns with annotations. It also adds details about rate limits and CAPTCHA challenges, providing valuable behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and informative, front-loading the main purpose. While it includes several sentences, each adds value. It could be slightly more concise (e.g., listing all headers explicitly), but overall it is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all necessary aspects: purpose, what it does and does not do, usage guidelines, behavioral traits, rate limits, and return values. Given the tool's simplicity and the presence of an output schema, the description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the single optional parameter worker_id with sufficient detail. The description does not add any additional meaning or context for this parameter, but given 100% schema coverage, a score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool inspects the incoming HTTP request headers from the caller's own client, explicitly distinguishing it from fetching remote headers. It lists specific headers and provides alternative tools for related but different tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to see exact headers, parsed summary, security audit) and when not to (it does not fetch remote headers). It also explicitly provides alternative tools for different needs (my_ip, browser_fingerprint_viewer, header_analyzer).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_reverse_dnsA
Reverse DNS Lookup (PTR / IP To Hostname). Run a live reverse-DNS (PTR) lookup that resolves an IPv4 or IPv6 address back to its hostname(s) via the in-addr.arpa / ip6.arpa zone. Use it to map an IP to a name; use network_dns_lookup for forward records (A/AAAA/MX/TXT from a hostname) and network_whois for registration/ownership data. Issues outbound DNS queries (preferably via a registered remote worker, with a local resolver fallback), so results vary as DNS changes. CAPTCHA-gated and rate-limited (anonymous 10/min, 60/hour, 200/day). Returns the resolved hostnames plus the PTR query that was issued.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IPv4 or IPv6 address to resolve to a hostname; validated, no scheme/port/CIDR, e.g. 8.8.8.8 or 2001:4860:4860::8888. | |
| dnsServer | No | Optional resolver IP to query; defaults to 8.8.8.8. | 8.8.8.8 |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True on the local resolver path when the lookup completed. |
| ip | No | The IP address that was queried, echoed back. |
| dnsServer | No | The resolver IP that was used. |
| hostnames | No | Resolved hostnames; empty when the IP has no PTR record. |
| ptrQuery | No | The reverse-zone query issued, e.g. 8.8.8.8.in-addr.arpa or an ip6.arpa name. |
| ipType | No | IPv4 or IPv6, inferred from the input. |
| timestamp | No | ISO 8601 timestamp of the response. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations set readOnlyHint: false, implying potential side effects, but the description describes a purely read-only operation (lookup). This is a direct contradiction between annotations and description, which misleads the agent about safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with title and type, and all sentences add value. It is concise yet comprehensive without being verbose, though could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of output schema and annotations, the description covers usage, limitations (DNS changes, rate limits), security considerations (CAPTCHA, worker), and alternatives, providing complete context for agent decision.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already well-documented. The description adds examples and validation hints but does not significantly enhance meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it performs reverse DNS lookup (PTR/IP to hostname) and distinguishes it from forward DNS and WHOIS lookups. The verb 'resolve' and resource 'IP address' are specific, and the description explicitly names sibling tools for comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool (reverse DNS) and when not: 'use network_dns_lookup for forward records' and 'network_whois for registration/ownership data'. Provides clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_spf_record_checkerA
SPF Record Checker. Look up and validate a domain's SPF (Sender Policy Framework) TXT record for email authentication and anti-spoofing. With action=lookup (default) it makes a live DNS TXT query for the domain and returns the SPF record, all matching records, and a multiple-record flag. With action=parse it parses an SPF string you supply (no network call) into mechanisms, modifiers, validity, warnings, and errors. Use network_dmarc_record_checker instead for DMARC alignment/reporting policy, or network_mx_record_lookup for mail-server MX records; this tool only handles SPF. Performs an outbound DNS query (may use a remote worker peer); results can change between calls as DNS records change. No auth required; rate-limited to 10 req/min, 60/hr, 200/day for anonymous callers, with CAPTCHA above 30/hr.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to query for an SPF record (registrable domain or hostname, e.g. example.com); required for action=lookup, ignored for action=parse. No protocol or path. | |
| action | No | lookup performs a live DNS TXT query for the domain; parse parses the supplied record string offline with no network call. | lookup |
| record | No | Raw SPF record string to parse; required only when action=parse and must start with v=spf1. | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the request was processed; false on invalid input or DNS failure. |
| error | No | Human-readable error message when success is false; absent otherwise. |
| data | No | Result payload; shape depends on action. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description goes beyond annotations by detailing that the tool performs a live DNS query (may use a remote worker), results are non-constant, no auth required, and rate limits (10 req/min, 60/hr, 200/day for anonymous, CAPTCHA above 30/hr). Annotations indicate openWorldHint=true but not specifics; the description adds valuable behavioral context without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-organized, starting with purpose, then actions, alternatives, and behavioral notes. It is a single paragraph but front-loads key information. Minor improvement could be using bullet points for rate limits, but overall it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (two actions, DNS query vs. offline parsing), the description covers purpose, operations, alternatives, behavioral traits, rate limits, and outlines return values (SPF record, matching records, multiple-record flag, parse results). With an output schema present, this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage with clear explanations for each parameter (domain, action, record, worker_id). The main description does not add significant extra information beyond the schema, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'SPF Record Checker. Look up and validate a domain's SPF (Sender Policy Foundation) TXT record for email authentication and anti-spoofing.' It specifies two actions (lookup and parse) and differentiates from sibling tools like network_dmarc_record_checker and network_mx_record_lookup, making the purpose distinct and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use network_dmarc_record_checker instead for DMARC alignment/reporting policy, or network_mx_record_lookup for mail-server MX records; this tool only handles SPF.' It explains when to use each action and mentions that domain is required for lookup but ignored for parse, giving clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_ssl_certificateA
SSL/TLS Certificate Checker. Fetches and parses the live TLS certificate chain from a host:port by opening an outbound SSL socket to it, then reports the leaf certificate's subject, issuer, validity window, expiry countdown, SANs, fingerprints, signature algorithm, public key, the presented chain, and a security analysis. Use this to inspect a server's actual served certificate (including self-signed or expired ones — peer verification is intentionally disabled, so tls_verified is always false and this is not a trust decision); use network_website_status_checker for HTTP status and response time, network_dns_lookup for DNS records, and network_whois for domain registration. Makes a real network connection to the target (hostname is pinned to a resolved public IP for SSRF safety; private, loopback, and reserved addresses are rejected), so results reflect the host's current certificate. CAPTCHA-gated and rate-limited (anonymous 5/min, 30/hour, 100/day). Key output includes days_until_expiry and expiry_status.
| Name | Required | Description | Default |
|---|---|---|---|
| hostname | Yes | Hostname to fetch the certificate from, no scheme or path, e.g. example.com. Must resolve to a public IP. | |
| port | No | TLS port to connect to. Defaults to 443. | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the certificate was fetched and parsed. |
| hostname | No | The hostname that was queried, echoed back. |
| resolved_ip | No | The public IP the TLS socket was pinned to. |
| port | No | The TLS port that was connected to. |
| tls_verified | No | Always false — peer verification is intentionally disabled so invalid certs can still be inspected. Not a trust decision. |
| timestamp | No | Server-side inspection time, Y-m-d H:i:s. |
| certificate | No | Parsed leaf certificate fields. |
| validation | No | Expiry and weakness checks on the leaf certificate. |
| security_analysis | No | Heuristic grading of key exchange, cipher strength, protocol support, and certificate transparency. |
| error | No | Present when success is false — the validation or connection failure reason. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations by detailing that it makes a real network connection, is CAPTCHA-gated and rate-limited, pins hostnames to public IPs for SSRF safety, rejects private addresses, and always sets tls_verified to false. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: starts with the main action, then caveats, usage guidance, and security/rate-limit info. Every sentence is valuable, though slightly verbose in listing all output fields. Still, it remains readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (3 params, full schema, output schema present), the description is very complete: explains behavior, security, rate limits, sibling differentiation, and key output fields like days_until_expiry and expiry_status. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, giving a baseline of 3. The description adds meaning by explaining that hostname must resolve to a public IP, port defaults to 443, and worker_id is optional for custom behavior. It also ties parameter use to the tool's security model.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly names the tool as an SSL/TLS Certificate Checker, specifies the action (fetches and parses live TLS certificate chain), and distinguishes it from siblings like network_website_status_checker, network_dns_lookup, and network_whois.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use (inspect a server's actual served certificate) and when-not-to-use (not for HTTP status, DNS, or whois) with specific sibling names. Also warns that peer verification is disabled, so it's not for trust decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_subnet_calculatorARead-onlyIdempotent
IPv4 Subnet Calculator (CIDR / IP+Mask). Compute IPv4 subnet details from a CIDR block (e.g. 192.168.1.0/24) or an IP address plus a dotted-decimal subnet mask. Returns the network and broadcast addresses, the usable host range (first/last host), total and usable host counts, the subnet and wildcard masks, the binary mask, network class, host/network bit split, private-range flag, and a default-class subnet count. Use network_cidr_calculator to convert between CIDR and notation formats, or network_ip_range_calculator to enumerate every address in a block. Pure offline IPv4 math: read-only, non-destructive, contacts no DNS or network service, and is rate-limited (30 requests/minute for anonymous callers).
| Name | Required | Description | Default |
|---|---|---|---|
| inputFormat | No | Input mode. cidr reads cidrInput; mask reads ipInput plus subnetMask. Defaults to cidr. | cidr |
| cidrInput | No | CIDR block in IP/prefix form, e.g. 192.168.1.0/24. Prefix must be 0-32 and the IP a valid dotted-decimal IPv4 address. Used when inputFormat is cidr. | |
| input | No | Alias for cidrInput accepted for backward compatibility; used only when cidrInput is absent. | |
| ipInput | No | Dotted-decimal IPv4 address (each octet 0-255), e.g. 10.0.0.5. Used when inputFormat is mask. | |
| subnetMask | No | Dotted-decimal subnet mask (contiguous, e.g. 255.255.255.0) paired with ipInput when inputFormat is mask. Converted internally to a CIDR prefix. | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request was processed without error. |
| result | No | Computed subnet details. Optional fields are omitted when valid is false. |
| error | No | Error message when success is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false. The description adds crucial context: 'Pure offline IPv4 math: read-only, non-destructive, contacts no DNS or network service, and is rate-limited (30 requests/minute for anonymous callers).' This enhances transparency beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that efficiently conveys the purpose, use cases, behavior, and limitations. It is well-structured, front-loading the core purpose and output list, then providing usage guidance and behavioral notes. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters (0 required), 100% schema coverage, and an output schema, the description covers all essential aspects: purpose, input modes, output fields, behavioral guarantees (offline, read-only, rate-limited), and differentiation from siblings. It does not need to explain return values since an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds context about when each parameter is used (e.g., 'Used when inputFormat is cidr') and explains the purpose of the input modes. While the schema already documents each parameter, the description clarifies the conditional relationships, justifying a slightly higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is an IPv4 Subnet Calculator, specifies the two input modes (CIDR or IP+Mask), and lists the computed outputs. It also distinguishes itself from sibling tools like network_cidr_calculator and network_ip_range_calculator by stating their different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (compute subnet details) and when not to (for conversion or enumeration, directing to siblings). It also mentions the tool is pure offline math and read-only, setting appropriate expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_tcp_udp_port_referenceARead-onlyIdempotent
TCP/UDP Port Reference Lookup. Look up TCP and UDP port assignments from a built-in static database of well-known and registered network services (HTTP, HTTPS, SSH, FTP, DNS, SMTP, databases, VPNs, games, and more). Filter by free-text query, protocol, numeric range, or service category and get matching port records with service name, description, and any security note. Use this for offline port-number and service identification; use network_port_scanner instead to probe a live host for actually-open ports. Read-only, non-destructive, contacts no external service (queries an in-memory table), and rate-limited (30 req/min, 180/hr anonymous). Returns the full match list, a limit-capped display slice, and TCP/UDP and range summary counts.
| Name | Required | Description | Default |
|---|---|---|---|
| search | Yes | Free-text query matched against port number, service name, description, and category (case-insensitive substring). The special form "tcp:443" or "udp:53" matches one exact protocol+port. Empty string returns all ports (subject to the other filters). | |
| protocol | No | Restrict results to one transport protocol. all returns both TCP and UDP. Case-insensitive. | all |
| range | No | Restrict by port range: well-known 0-1023, registered 1024-49151, dynamic 49152-65535, or all. | all |
| category | No | Restrict to one service category, or all for every category. | all |
| limit | No | Maximum number of records returned in displayedPorts. Non-positive or non-numeric values fall back to 50. Does not cap total or ports. | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the lookup succeeded. |
| search | No | Normalised (trimmed) search query that was applied. |
| protocol | No | Normalised (lowercased) protocol filter that was applied. |
| range | No | Range filter that was applied. |
| category | No | Category filter that was applied. |
| total | No | Total number of port records matching the filters (before the limit slice). |
| ports | No | All matching port records, sorted by port number then protocol. |
| displayedPorts | No | First limit records of ports, for paginated display. |
| stats | No | Aggregate counts over the matched ports. |
| error | No | Error message when success is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds useful context beyond that: it mentions the tool is read-only, non-destructive, uses an in-memory table (no external service), and has rate limits (30 req/min, 180/hr). This adds value but the annotations already cover core safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it starts with the core purpose, then details filtering capabilities, provides usage contrast, and ends with behavioral and rate-limit info. Every sentence contributes value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description explicitly lists what is returned (service name, description, security note, full match list, display slice, summary counts), ensuring the agent understands the response structure. It covers all key aspects for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add significant new meaning beyond what the parameter descriptions provide; it restates or summarizes them. No added depth.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'TCP/UDP Port Reference Lookup' and explicitly contrasts with network_port_scanner for probing live hosts, making its unique function unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool ('offline port-number and service identification') and when not to ('use network_port_scanner instead to probe a live host for actually-open ports'), including a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_traceroute_streamARead-only
Traceroute (Live SSE Stream). Streams a network path trace to a target host hop-by-hop in real time as Server-Sent Events (Content-Type text/event-stream), emitting one JSON event per hop as it is discovered. Sends outbound traceroute probes over the network — preferably via a registered remote worker, with a local-fallback path — so results reflect live network state and vary between calls. CAPTCHA-gated and rate-limited (anonymous 3/min, 20/hour, 60/day). Use network_ping for a single round-trip measurement; use this when you need the full router-by-router path. Each SSE frame carries a JSON object whose "type" is one of start, hop, timeout, info, error, or complete.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Destination hostname or IP address to trace (validated; private, loopback, and reserved ranges are blocked). | |
| maxHops | No | Maximum TTL / hop count before giving up (traceroute -m). The worker clamps it to 1-64. | |
| timeout | No | Per-hop probe wait in seconds (traceroute -w). The worker clamps it to 1-15. | |
| packetSize | No | Probe packet size in bytes reported in the start event; the local fallback and worker traceroute do not apply it. | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context: SSE streaming format, outbound probe sending, worker/clamping behavior, and rate limits. It does not contradict annotations and provides additional detail beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it starts with the core function, then provides key behavioral details, usage guidance, and rate limits in a logical order. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a live traceroute tool, the description covers the streaming nature, network effects, rate limits, worker behavior, and parameter clamping. It also describes the SSE event types, providing sufficient context for an AI agent to understand the tool's behavior and outputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have descriptions in the input schema (100% coverage). The tool description adds minimal extra meaning, only briefly mentioning clamping behavior already documented in the schema. Baseline of 3 is appropriate as schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a live traceroute to a target host, streaming results hop-by-hop via SSE. It distinguishes from the sibling network_ping by specifying that this tool is for full path information, while network_ping is for single round-trip measurements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool vs network_ping, highlights that results vary between calls due to live network state, and mentions CAPTCHA and rate limits. It also notes the preferred use of a remote worker with local fallback.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_website_status_checkerA
Website Status & Uptime Checker. Checks whether a website is up by making a live outbound HTTP GET request to the given URL and reporting the final HTTP status code, accessibility (up/down) flag, response time in milliseconds, the full redirect chain, and the final response headers. Use this for HTTP-level reachability, status codes, and latency; use network_ping for ICMP host reachability, network_ssl_certificate to inspect the TLS certificate, and network_dns_lookup for DNS records. Makes a real network request (the host is pinned to a resolved public IP for SSRF safety; private, loopback, and reserved addresses and redirect targets are rejected, and TLS verification stays on), so results reflect the site's current state. CAPTCHA-gated and rate-limited (anonymous 30/min, 180/hour, 500/day). Key output includes status_code, response_time_ms, and accessible.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute URL to check, including scheme, e.g. https://example.com. Must be a valid public URL; redirects to private or reserved hosts are blocked. | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the check completed. |
| error | No | Error message present only when success is false. |
| data | No | Status result fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses numerous behavioral traits beyond annotations: real network request, SSRF safety (host pinned to public IP, private/reserved IPs rejected), TLS verification on, CAPTCHA-gated, rate limits (30/min, 180/hour, 500/day). Annotations only provide readOnlyHint, destructiveHint, etc., which are not contradicted. This is comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by usage guidance, safety details, rate limits, and key output fields. While thorough, it is somewhat lengthy with three paragraphs; however, every sentence adds value. Could be slightly more concise but well-structured overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 parameters (1 required), an output schema, and moderate complexity, the description is complete. It covers purpose, alternatives, behavioral aspects, safety, rate limits, and hints at output fields. The existence of an output schema means return values need not be fully detailed here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with descriptions for both parameters (url with example, worker_id with description). The description adds general context but no additional parameter-specific meaning beyond what the schema provides. Baseline is 3 due to full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks website uptime via HTTP GET, reporting status code, accessibility, response time, redirect chain, and headers. It explicitly distinguishes from siblings like network_ping, network_ssl_certificate, and network_dns_lookup, making purpose and differentiation evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use this for HTTP-level reachability, status codes, and latency; use network_ping for ICMP host reachability, network_ssl_certificate to inspect the TLS certificate, and network_dns_lookup for DNS records.' This tells the agent when to use this tool and when to use alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_whoisA
Whois Lookup. Outbound WHOIS lookup: queries an authoritative WHOIS server (TCP port 43, or a registered remote worker when one is healthy) for the registration or allocation record of a domain name or public IP address. Returns registrar, creation/expiry dates, name servers, domain status, the full raw WHOIS text, and a parsed key/value map. Use this for ownership, registrar, and registration-record data. Prefer osint_domain_age when you only need the registration/expiry dates and computed age; prefer network_dns for live A/MX/NS/TXT records; prefer network_reverse_dns for IP-to-hostname (PTR); prefer network_asn_lookup for autonomous-system / network-owner data. Makes a live external network call and depends on third-party WHOIS servers, so results are not cached and not idempotent; it is non-destructive and read-only with respect to this service. Rate limited (anonymous 2/min, 10/hour, 30/day; authenticated 5/50/200) with a CAPTCHA challenge after 5 requests/hour.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Domain name or public IP address to look up, for example youtube.com or 8.8.8.8. Private, reserved, and loopback hosts are rejected; the value is validated and capped at 255 bytes. | |
| worker_id | No | Optional registered healthy worker peer ID. Omit to use the default master-server behavior. |
Output Schema
| Name | Required | Description |
|---|---|---|
| host | No | The domain name or IP address that was queried. |
| server | No | WHOIS server that answered the query, for example whois.verisign-grs.com or whois.arin.net. |
| raw_output | No | Full unparsed WHOIS response text exactly as returned by the upstream server. |
| parsed | No | Lowercased key/value map of every parsed WHOIS field, plus a common_fields sub-object normalizing domain_name, registrar, creation_date, expiration_date, name_servers, and status. |
| timestamp | No | ISO 8601 timestamp of when the lookup completed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Contradiction with annotations: description claims 'non-destructive and read-only with respect to this service', but annotations set readOnlyHint=false. This inconsistency undermines transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then clear usage guidance, then behavioral details, all in a compact paragraph. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (live network call, rate limits, third-party dependency), the description covers purpose, usage, behavior, parameters, limitations, and return value. Output schema exists but description already mentions returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds validation details (rejected private/reserved/loopback hosts, 255-byte cap) beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Whois Lookup' and resource 'domain name or public IP address' clearly state what the tool does. Distinguishes from siblings like osint_domain_age, network_dns, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (ownership, registrar, registration-record data) and provides alternatives (osint_domain_age, network_dns, network_reverse_dns, network_asn_lookup) with clear reasons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_barcode_generatorARead-onlyIdempotent
Barcode Payload Builder. Validate input for a 1D barcode and build a ready-to-render image URL for one of six symbologies: UPC-A (12 digits), EAN-13 (13 digits), Code 128 (alphanumeric, up to 80 chars), Code 39 (A-Z 0-9 and . - $ / + %, up to 43), ITF-14 (14 digits), or Codabar (starts/ends A-D, up to 16). Use this to prepare barcode content and a render URL; use osint_barcode_scanner to decode a barcode from an image, osint_qr_code_generator for 2D QR codes, and osint_ean_upc_validator to only checksum-verify a UPC/EAN without rendering. The API call runs locally and is read-only, non-destructive, deterministic, and rate-limited (20 req/min anonymous); the returned serviceUrl points at the third-party bwipjs-api.metafloor.com renderer, which a client fetches separately to obtain the image. Returns the normalized type, the cleaned data, a validity flag and message, checksum/format metadata, the normalized settings, and that render URL.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Barcode symbology. Unknown values fall back to code128. (barcodeType is accepted as an alias.) | code128 |
| barcodeType | No | Alias for type; used when type is absent. | |
| data | Yes | Value to encode; format depends on type (e.g. 12 digits for upc, 13 for ean13, alphanumeric for code128). Trimmed before validation. (inputData is accepted as an alias.) | |
| inputData | No | Alias for data; used when data is absent. | |
| settings | No | Rendering options applied to the serviceUrl; invalid values fall back to the listed default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the payload was built. |
| result | No | Barcode payload, validation, and render details. |
| error | No | Present only on failure; reason the payload could not be built. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, idempotent. The description adds crucial behavioral context beyond annotations: the API call runs locally, is rate-limited (20 req/min anonymous), and the returned serviceUrl points to an external third-party renderer fetched separately. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loaded with purpose, and each sentence adds value. However, it is slightly verbose (four sentences) and could be trimmed without losing essential information. Still, it is clear and not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (nested settings, multiple symbologies, output schema), the description covers everything: local API behavior, external renderer, rate limits, output fields (normalized type, cleaned data, validity flag, etc.). No gaps remain for effective tool usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant meaning: it explains validation rules per symbology (e.g., '12 digits for upc, 13 for ean13'), alias parameters, fallback behavior for unknown type, and the settings object. This helps the agent correctly format data and understand output structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool builds a barcode payload and render URL, listing six specific symbologies with character constraints. It distinguishes itself from sibling tools osint_barcode_scanner, osint_qr_code_generator, and osint_ean_upc_validator by explicitly stating when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use this to prepare barcode content and a render URL; use osint_barcode_scanner to decode..., osint_qr_code_generator for 2D QR codes, and osint_ean_upc_validator to only checksum-verify...' This clearly tells the agent when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_barcode_scannerA
Barcode Scanner. Free online barcode and QR code scanner. Read UPC, EAN, Code 128, Code 39, QR, Data Matrix, Aztec, PDF417 and more from your camera or an image file. Auto-detects the code, or drag a box to scan a region.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist beyond the title, so the description carries the full burden. It discloses that the tool reads barcodes from camera or image, auto-detects, or allows region selection. It is a read-only operation with no destructive behavior. It could mention privacy (e.g., not storing images) but is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the purpose and provide key details (supported formats, input methods, features). No unnecessary information; each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks information about the output format (e.g., decoded text, raw data). Given no output schema, this gap is notable. It also does not mention the sibling 'osint_barcode_generator' for contrast. However, for a simple scanner, the core purpose is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 defined parameters (additionalProperties: true), so schema coverage is 100%. The description implicitly defines the input (camera or file) without formal parameters. Since no parameters are needed, the description adds sufficient meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a barcode and QR code scanner, lists many supported formats (UPC, EAN, Code 128, etc.), and indicates it works from camera or image file. This distinguishes it from the sibling 'osint_barcode_generator' which generates barcodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the input methods (camera or image file) and provides guidance on auto-detection or manual region selection. However, it does not explicitly state when not to use this tool or compare it with alternatives like 'osint_qr_code_generator' or other scanners.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_bic_swift_validateARead-onlyIdempotent
BIC / SWIFT Code Validator. Validate the format and structure of a BIC/SWIFT bank code (ISO 9362) and decode its four parts: 4-letter bank code, 2-letter ISO country code, 2-character location code, and optional 3-character branch code. Confirms the code is 8 or 11 characters, matches the BIC character pattern, and has a recognised country, then reports the location type (primary office, passive, test), message-routing type, and whether it is a head office or a specific branch. Use osint_iban_validator instead when you have a full International Bank Account Number rather than a bank identifier code. Pure structural validation that runs locally on the code you provide: read-only, non-destructive, contacts no external service and does not look up the bank over the network, and is rate-limited (20 requests/minute for anonymous callers). Returns overall validity plus the parsed bank/country/location/branch structure, decoded details, and a space-grouped formatted code.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | BIC/SWIFT code to validate (8 or 11 characters). Case-insensitive and spaces/punctuation are stripped before validation. Must not be blank. | |
| bic_swift_code | No | Alias for code, accepted when code is not supplied. If both are present, code takes precedence. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the code was validated; false when the input was missing or rejected as malformed. |
| error | No | Human-readable failure reason, present only when success is false. |
| result | No | Validation result, present only when success is true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it states the validation runs locally, is read-only, non-destructive, contacts no external service, and has a rate limit of 20 requests/minute. This complements the readOnlyHint, destructiveHint, and idempotentHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded. It begins with a one-line summary, then expands on purpose, usage guidance, behavioral details, and return value. Every sentence adds necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (ISO 9362 validation, decoding, rate limits), the description covers all essential aspects: purpose, when to use, behavioral traits, parameter semantics, and return structure. It is fully adequate for an AI agent to understand and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, providing basic parameter info. The description further explains that the 'code' parameter is case-insensitive and strips spaces/punctuation, and that 'bic_swift_code' is an alias with precedence rules. This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates a BIC/SWIFT code, decodes its four parts, and confirms format and structure. It specifies the code length (8 or 11 characters), character pattern, and country recognition, while distinguishing itself from the sibling osint_iban_validator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs to use osint_iban_validator when the user has a full IBAN instead of a bank identifier code. This provides a clear alternative and implies the appropriate context for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_credit_card_validatorARead-onlyIdempotent
Credit Card Number Validator. Validate a credit-card number with the Luhn checksum and identify its issuing network from the IIN/BIN prefix (Visa, Mastercard, American Express, Discover, JCB, Diners Club, UnionPay), returning brand-specific length checks and a grouped/formatted number. For test and reference data only; it does not verify that a card is real, active, or funded. Use osint_iban_validator for bank account numbers, osint_bic_swift_validator for bank SWIFT codes, or osint_ean_upc_validator for product barcodes. Runs locally on the digits you provide: read-only, non-destructive, contacts no external BIN-lookup service, and is rate-limited (60 requests/minute for anonymous callers). Returns overall validity plus the detected card type, issuer, length, formatted number, and warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| card_number | Yes | Card number to validate. Spaces, dashes, and other non-digit characters are stripped before checking. Must contain at least one digit; typically 13 to 19 digits. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request was processed (false when the input has no digits). |
| error | No | Error message when success is false; otherwise absent. |
| result | No | Validation detail (present when success is true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, idempotentHint. Description adds valuable operational context: runs locally (no external BIN-lookup), is rate-limited at 60 req/min for anonymous callers, and is for test/reference data only. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences perfectly structured: first sentence defines purpose and core functionality, second adds disclaimer and alternatives, third covers behavioral traits and outputs. No redundant text; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (Luhn check, issuer detection, length/formatted output), the description covers all necessary aspects. It mentions the return fields (validity, card type, issuer, length, formatted number, warnings). Output schema exists, so explanation of return format is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with a clear parameter description (card_number with stripping of non-digits, length constraints). The description does not add additional meaning beyond the schema, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it validates credit card numbers via Luhn checksum, identifies issuing network, and returns brand-specific checks and formatted number. It explicitly lists alternative sibling tools for other identifier types, making the purpose and scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use (for credit card validation) and when not to (does not verify real/funded cards). It names alternative tools (osint_iban_validator, osint_bic_swift_validator, osint_ean_upc_validator) for other identifier types, providing clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_domain_ageA
Domain Age Checker. Check a domain's age and registration lifecycle from live WHOIS data: creation/registration date, expiry date, computed age (in days plus a human string like "5 years, 2 months"), registrar, name servers, domain status, and whether privacy/proxy protection is in use. Sends an outbound WHOIS lookup at call time (port 43 to whois.iana.org / whois.internic.net / whois.verisign-grs.com, with an HTTP WHOIS-API fallback), so it reaches the public network and results reflect live registry state. Use this when you specifically want age/expiry/trust signals for a single domain; use network_whois for the full raw registration record of a domain or IP, and network_dns for live DNS records. Read-only and non-destructive but not idempotent (registry data and computed age change over time). CAPTCHA-gated and rate-limited (anonymous 5/min, 30/hour, 100/day). Returns a result object with the parsed fields plus an analysis list of trust/expiry notes and the raw WHOIS text.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain name to check, without a URL path, for example youtube.com. A leading http:// or https:// scheme, a trailing path, and a :port are stripped before lookup; the host must be a valid dotted domain. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the request was processed (the WHOIS lookup itself may still have partially failed; check result.error). |
| result | No | Parsed domain-age report. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses outbound network access, CAPTCHA gating, rate limits, and non-idempotency. Adds context beyond annotations (e.g., live registry state, returned fields). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is comprehensive but slightly verbose. However, all information is necessary and front-loaded with purpose, making it well-structured for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers purpose, behavior, params, output (parsed fields, analysis, raw text), and limitations. Output schema exists but description still adds value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for one parameter. Description adds value by explaining stripping of schemes/paths and requirement for valid dotted domain, beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'check' and resource 'domain's age and registration lifecycle' with specific data points. It differentiates from siblings by naming alternative tools (network_whois, network_dns) and their uses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool vs alternatives, provides prerequisites (domain without path), and details behavior like live WHOIS lookup, rate limits, and non-idempotency.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_ean_upc_validatorARead-onlyIdempotent
EAN / UPC Barcode Validator. Validate EAN-13, EAN-8, UPC-A, and UPC-E retail barcode numbers by recomputing the GS1 check digit, or (mode "generate") compute the missing check digit for a partial code. Auto-detects format from digit length (8/12/13) and, for EAN-13/UPC-A, derives the GS1 country prefix and manufacturer/product segments. Use this for the bare numeric string when you already have the digits; use osint_barcode_scanner to decode a barcode from an image, osint_barcode_generator to render one, and osint_isbn_validator for book ISBNs. Pure local arithmetic: read-only, non-destructive, no lookup or network call, offline-capable, and rate-limited. Returns whether the checksum is valid, the detected type, and the calculated vs provided check digits.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The barcode number to process. Non-digit characters are stripped. For validate: 8, 12, or 13 digits (an 8-digit code starting with 0 is treated as UPC-E). For generate: the body without its check digit (7 digits for EAN-8, 11 for UPC-A, 12 for EAN-13). | |
| mode | No | validate verifies the full code's check digit; generate computes the check digit for a partial code. | validate |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request was processed. |
| mode | No | The mode used (validate or generate). |
| input | No | The raw code string as received. |
| result | No | Validation result (mode validate) or generated check-digit result (mode generate). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only and idempotent. The description adds transparency by detailing the local arithmetic nature, no network calls, offline capability, and what the tool returns (validity, type, check digits). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise, front-loading the purpose and then providing necessary details. Each sentence serves a purpose, though it could be slightly trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, clear output schema), the description covers all necessary aspects: purpose, input requirements, mode behavior, return values, offline capability, and sibling differentiation. Fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for 'code' and 'mode'. The description adds context such as auto-detection of format from length, and explains behavior per mode, which complements the schema. Slightly redundant with schema but still valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: validating EAN/UPC barcodes by recomputing check digits or generating missing check digits. It specifies supported formats (EAN-13, EAN-8, UPC-A, UPC-E) and distinguishes from related siblings like osint_barcode_scanner and osint_isbn_validator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (for bare numeric strings vs image decoding, rendering, or ISBN validation). Also notes it's read-only, offline-capable, and rate-limited, providing clear context for usage decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_email_headersARead-onlyIdempotent
Email Header Analyzer. Parse raw email headers (the "Show original" / full source block of a message) into a structured forensic report: the Received hop chain reversed into chronological delivery order, SPF/DKIM/DMARC results extracted from Authentication-Results, sender/subject/date basic info, TLS version and cipher, spam indicators, attachment hints, and an overall summary with recommendations. Use this when you already have the literal header text and want to trace how a message travelled and whether its authentication passed. It does NOT query DNS or contact any server, so it cannot fetch a domain's published policy - use network_spf_record_checker or network_dmarc_record_checker for live DNS record lookups, and osint_domain_age for registration data. Runs locally on the text you provide: read-only, non-destructive, offline, and rate-limited (10 requests/minute for anonymous callers, CAPTCHA above 30/hour). Returns nested analysis objects (basic_info, routing, authentication, security, spam_indicators,
| Name | Required | Description | Default |
|---|---|---|---|
| headers | Yes | Raw email header text, one "Header-Name: value" per line with leading-whitespace folded continuation lines supported. Header names are matched case-insensitively. Must not be blank. Paste the full headers from "Show original"/"View source". |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the headers were parsed successfully. |
| analysis | No | Full parsed analysis. Absent when success is false (error string returned instead). |
| error | No | Error message; present only when success is false (blank input or parser failure). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds valuable behavioral context: it runs locally, offline, with rate limits (10 req/min, CAPTCHA above 30/hr). This extra detail earns a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but well-structured and front-loaded with the core purpose. Each sentence provides meaningful information. While it could be slightly trimmed, the length is justified by the tool's complexity and the need for sibling differentiation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool's complexity, the description covers all critical aspects: input, output, behavior, limitations, and alternatives. The presence of an output schema (mentioned but not shown) reduces the need for describing return values. The description is fully sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 100% schema coverage. The description adds practical guidance on what to paste ('Show original'/'View source'), which helps the agent understand the expected input format better. This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool parses raw email headers into a structured forensic report, listing specific extracted elements (Received chain, SPF/DKIM/DMARC, etc.). It distinguishes itself from sibling tools by explicitly stating it does not perform DNS lookups and pointing to alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool (when you have literal header text) and what it does not do (no DNS queries). It also names specific sibling tools for live DNS lookups and domain registration data, providing clear guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_exif_dataARead-onlyIdempotent
EXIF Metadata Viewer. Extract EXIF, GPS, and camera metadata from an uploaded image and flag privacy-sensitive content. Decodes the embedded EXIF block into camera make/model, exposure settings, date/time taken, orientation/resolution, and software; converts GPS tags to decimal latitude/longitude/ altitude revealing where a photo was taken; and returns privacy warnings plus scrubbing recommendations - a forensics/OSINT and pre-share privacy check. Use osint_email_headers instead to trace email routing, webdev_base64_image_encoder to embed an image as a data URI (not read metadata), and file_mime_type_lookup to map an extension to a MIME type. Pure local parse: read-only, non-destructive, deterministic, contacts no external service, rate-limited (5 requests/minute for anonymous callers). Accepts a single multipart/form-data file upload (field "image"), max 10 MB, image/jpeg, image/tiff, or image/png; EXIF is only present in JPEG/TIFF.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the image was accepted and parsed; false on missing file or parse error (with an error message). |
| analysis | No | Metadata analysis of the uploaded image. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations: 'Pure local parse: read-only, non-destructive, deterministic, contacts no external service, rate-limited (5 requests/minute for anonymous callers).' This adds context about determinism, no external service calls, and rate limiting, which are not covered by the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized for the tool's complexity. It starts with a clear one-line summary, then expands on functionality, sibling distinctions, behavioral traits, and input constraints. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers all necessary aspects: purpose, input format and constraints, behavioral properties (read-only, deterministic, rate-limited), privacy features, and explicit sibling comparisons. The presence of an output schema and annotations complements the description, making it fully informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no JSON parameters (0 params), and the schema is empty with 100% coverage. The description adds meaning by detailing the file input constraints: multipart/form-data, field 'image', max 10 MB, and supported image formats (JPEG, TIFF, PNG). This compensates for the lack of schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool as an 'EXIF Metadata Viewer' and enumerates specific functions: extracting EXIF, GPS, camera metadata, flagging privacy-sensitive content, and providing scrubbing recommendations. It explicitly distinguishes from sibling tools by naming alternatives like osint_email_headers, webdev_base64_image_encoder, and file_mime_type_lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (forensics/OSINT and pre-share privacy check) and when not to, naming specific alternative tools and their purposes. It also notes that EXIF is only present in JPEG/TIFF, setting expectations for input formats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_iban_validatorARead-onlyIdempotent
IBAN Validator and Decoder. Validate and decode one or many International Bank Account Numbers (IBANs) entirely offline: checks the 2-letter country code, country-specific length, BBAN structure, and the ISO 7064 mod-97 check digits, then extracts bank, branch, and account fields. This is structural and arithmetic validation only (it never contacts a bank or confirms the account exists); use osint_bic_swift_validate instead to validate a BIC/SWIFT bank identifier code. Read-only, non-destructive, contacts no external service, and rate-limited (20 requests/minute for anonymous callers). Returns a per-IBAN result array (valid flag, country, check digits, BBAN parts, formatted grouping, and any errors) plus a summary tally.
| Name | Required | Description | Default |
|---|---|---|---|
| ibans | No | One or more IBANs to validate. Separate multiple entries with newlines; spaces within an IBAN are ignored and letters are uppercased. Takes precedence over iban when both are sent. | |
| iban | No | Single-IBAN alias for ibans, accepted for convenience. Used only when ibans is absent. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request was processed (true even when some IBANs are invalid). |
| results | No | One entry per non-blank input IBAN, in submission order. |
| summary | No | Aggregate counts across all results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive. Description adds valuable context: no external contact, structural/arithmetic only, rate-limited (20 req/min). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with core purpose, then details. Slightly verbose but every sentence adds value. Well-structured for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers input, validation process, limitations (no external contact), rate limits, sibling alternative, and output format (mention of result array and summary). Output schema exists so fine to skip details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers parameters fully (100% coverage). Description adds meaning: ibans accepts multiple entries separated by newlines, ignores spaces, uppercases, and iban is a convenience alias. Also explains validation logic.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it validates and decodes IBANs offline, checking country code, length, BBAN structure, and check digits. It distinguishes itself from the sibling osint_bic_swift_validate, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using osint_bic_swift_validate for BIC/SWIFT validation, implying when not to use this tool. Context about offline validation is clear, but no exhaustive list of when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_isbn_validatorARead-only
ISBN Validator (ISBN-10 / ISBN-13). Validate one or more book ISBNs by recomputing the check digit for ISBN-10 (mod-11, X allowed) and ISBN-13 (EAN-13 mod-10, 978/979 prefix), and report format, the registration group/language, ISBN-10<->13 conversion, and optional step-by-step check-digit math. Accepts a batch and returns per-ISBN results plus aggregate statistics. Use this for book ISBNs; use osint_ean_upc_validator for general EAN/UPC retail barcodes, osint_barcode_scanner to decode a barcode from an image, and osint_barcode_generator to render one. Pure local arithmetic: read-only, non-destructive, no remote book-metadata lookup or network call, offline-capable, rate-limited (CAPTCHA may be required). Each result embeds the validation timestamp, so responses are not byte-identical across calls. Returns each ISBN's validity, type, analysis, conversion, calculation, and warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| isbns | Yes | ISBN strings to validate. Hyphens and spaces are stripped; each must clean to 10 or 13 digits. Non-string entries are ignored. | |
| options | No | Optional flags toggling extra output (camelCase or snake_case keys accepted). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request was processed. |
| results | No | One entry per validatable input ISBN. |
| statistics | No | Batch totals across all results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond readOnlyHint=true and destructiveHint=false annotations by detailing pure local arithmetic, no network call, offline-capable, rate-limited, CAPTCHA possibility, and timestamp embedding for non-identical responses. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured, front-loaded with core function, and each sentence adds value. Slightly long but not wasteful; could be trimmed slightly for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage guidelines, behavioral traits, output description (per-ISBN results with aggregate statistics), and optional features. Given complexity and existing schema/annotations, description is fully complete for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds context (e.g., step-by-step math for showCheckDigitCalculation) but mostly reiterates schema info. Adequate but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it validates ISBN-10 and ISBN-13 by recomputing check digits, reporting format, registration group/language, and conversion. It explicitly distinguishes from sibling tools (osint_ean_upc_validator, osint_barcode_scanner, osint_barcode_generator) with clear when-to-use guidance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use this for book ISBNs' and provides alternatives for general EAN/UPC barcodes. Also clarifies batch acceptance, offline capability, and rate-limiting, giving clear context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_mac_vendor_lookupARead-onlyIdempotent
MAC Address Vendor Lookup. Identify the hardware manufacturer of a network device from its MAC address by matching the 24-bit OUI prefix against a built-in IEEE OUI table. Runs locally: no outbound request to macvendors.com or any external registry, so it is read-only, non-destructive, deterministic, and works offline. Use this to attribute an existing MAC to a vendor; use networking_mac_address_generator to create random/vendor MACs, and osint_vin_decoder to decode a vehicle VIN instead of a network address. Rate limited to 60 requests/minute for anonymous callers. Returns the normalized address, the OUI, the matched vendor (null when the OUI is not in the bundled subset), vendor details, and a structural analysis (unicast/multicast, locally vs universally administered, likely-virtual flag).
| Name | Required | Description | Default |
|---|---|---|---|
| mac_address | Yes | MAC address to look up. Accepts 12 hex digits with any or no separator (colon, hyphen, dot); case-insensitive. Must contain exactly 12 hex characters (6 bytes) after separators are stripped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the lookup completed; false on invalid input. |
| error | No | Present only when success is false; human-readable reason (blank or malformed MAC). |
| result | No | Lookup result; present when success is true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), the description adds that it runs locally, makes no outbound requests, is deterministic, works offline, and is rate-limited. This provides complete behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is moderately long but well-organized. Core purpose is front-loaded, and every sentence adds value. Could be slightly more concise, but still effective. Score 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has output schema (not shown but noted) and description explains return fields (normalized address, OUI, vendor, details, structural analysis). Input is simple. Description is complete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already has 100% coverage with detailed description for mac_address. The description adds context about OUI prefix matching and the built-in table, but the schema covers input format well. Slight added value justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'MAC Address Vendor Lookup' and explains it identifies the hardware manufacturer from a MAC address using a built-in OUI table. It distinguishes itself from sibling tools like networking_mac_address_generator and osint_vin_decoder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('attribute an existing MAC to a vendor') and when not to use (alternatives for creating MACs or decoding VINs). Also mentions rate limiting (60 req/min) for proper usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_phone_validatorARead-onlyIdempotent
Phone Number Validator and Formatter. Parse and validate a phone number, returning E.164, international, national, and RFC3966 (tel URI) formats plus the detected country, ITU-T number type (geographic/mobile/toll_free/premium_rate/special_service), and best-effort carrier and timezone notes. Validation is offline and rule-based: it checks 7-15 digit ITU-T E.164 length and matches a built-in table of about 20 country calling codes (no live HLR or carrier lookup and no third-party request), so carrier and ported fields are heuristic, not network-confirmed. Use osint_iban_validator, osint_bic_swift_validator, or osint_credit_card_validator instead for bank or card identifiers. Read-only, non-destructive, rate-limited (20 requests/minute for anonymous callers). Returns a result object with valid, formats, country_info, type, and warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| phone_number | Yes | Phone number to validate; may include a leading plus, spaces, dashes, or parentheses (all stripped to digits). Provide E.164 form (country code first) for reliable country detection. Must not be blank. | |
| country_code | No | Optional ISO country hint (for example US, GB, DE) used to pick the country when the number has no leading calling code. Empty string means auto-detect from the digits. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether validation ran; false with an error string on blank or failed input. |
| error | No | Human-readable failure reason; present only when success is false. |
| result | No | Validation detail, present only when success is true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior. The description adds critical context: validation is offline/rule-based, checks 7-15 digit length and a built-in table of ~20 country codes, no live HLR/carrier lookup, and carrier/timezone notes are heuristic. This fully discloses limitations beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: main purpose first, then output details, then limitations/alternatives, and finally rate limits. Every sentence adds information without redundancy. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, full schema and output schema presence, and annotations, the description provides all necessary context: functionality, output fields, limitations, alternatives, and rate limits. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining parameter usage: 'Provide E.164 form for reliable country detection' and notes that symbols like spaces/dashes are stripped. This goes slightly beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates and formats phone numbers, listing specific output formats (E.164, international, etc.) and data (country, type, carrier). It explicitly distinguishes from sibling tools like osint_iban_validator by saying to use those for bank/card identifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: use other tools for bank or card identifiers, and advises providing E.164 form for reliable country detection. It also notes the offline, rule-based nature and rate limits, helping the agent decide when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_qr_code_generatorARead-onlyIdempotent
QR Code Payload Builder. Build the encoded text payload for a QR code from one of six input types — plain text, a URL, WiFi credentials (WIFI:…), a vCard contact, an SMS draft, or a mailto email — and return a ready-to-render image URL. Use this to prepare QR content; use osint_qr_code_scanner to decode an existing QR image, osint_barcode_generator for UPC/EAN/Code128 barcodes, and security_totp_qr_generator for 2FA otpauth:// codes. The API call runs locally and is read-only, non-destructive, deterministic, and rate-limited (20 req/min anonymous); the returned serviceUrl points at the third-party api.qrserver.com renderer, which a client fetches separately to obtain the PNG. Returns the encoded content, its length, the normalized settings, and that render URL.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Payload type to encode. Unknown values fall back to text. (qrType is accepted as an alias.) | text |
| qrType | No | Alias for type; used when type is absent. | |
| inputs | No | Per-type fields; only the object matching type is read. | |
| settings | No | Rendering options applied to the serviceUrl. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the payload was built. |
| result | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations: non-destructive, deterministic, rate-limited (20 req/min anonymous), and explains the serviceUrl is a third-party renderer fetched separately. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with purpose, but is somewhat verbose. Every sentence adds value; could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (nested objects, 4 parameters, output schema exists), the description covers the API flow, rate limits, third-party dependency, and return fields. Fully adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for all properties. The description summarizes but adds little beyond the schema, e.g., mentioning encoding formats like 'WIFI:T:...'. Meets baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it builds QR code payloads from six input types and returns a render URL. It distinguishes itself from siblings by naming them explicitly (osint_qr_code_scanner, osint_barcode_generator, security_totp_qr_generator).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('prepare QR content') and when to use alternatives (decode, barcode, TOTP). Provides clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_vin_decoderARead-only
VIN Decoder (Vehicle Identification Number Lookup). Decode one or more 17-character Vehicle Identification Numbers using built-in deterministic lookup tables (WMI manufacturer, country/region, model-year code, assembly plant) and validate the position-9 check digit. Use it to identify a vehicle's maker, origin country, and model year offline; use osint_ean_upc_validator or osint_isbn_validator instead for product/book codes, and osint_credit_card_validator for PAN Luhn checks. Pure local compute — no VIN database, NHTSA vPIC, or other external API is contacted; read-only and non-destructive. Each result embeds the decode timestamp, so responses are not byte-identical across calls. Rate-limited (20 requests/min anonymous). Rejects VINs not exactly 17 chars or containing I, O, or Q. Returns per-VIN decoded info, optional segment breakdown, validity, warnings, and a batch summary.
| Name | Required | Description | Default |
|---|---|---|---|
| vins | Yes | VINs to decode. Each is uppercased/trimmed; non-strings and entries not matching 17 chars of A-H,J-N,P-R,Z,0-9 are dropped before decoding. | |
| options | No | Optional decoding flags. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when at least one valid VIN was decoded. |
| results | No | One entry per accepted VIN. |
| summary | No | Batch counts. |
| note | No | Fixed disclosure that decoding is local validation plus deterministic lookup tables. |
| processing_info | No | Echo of the resolved option flags (validate_check_digit, include_manufacturer_info, detailed_breakdown). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations by detailing offline computation (no external API), non-destructive nature, timestamp embedding causing non-idempotent responses, rate limit (20/min anonymous), and input rejection criteria (exactly 17 chars, no I/O/Q). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is comprehensive but slightly verbose; however, it is front-loaded with the main purpose and well-structured. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's batch nature and available schema/output schema, the description fully covers input constraints, behavior, limitations, and output structure (per-VIN info, breakdown, validity, warnings, summary). No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond schema: describes input normalization (uppercased/trimmed), filtering of invalid entries, and explains each option field (validate_check_digit, include_manufacturer_info, detailed_breakdown) with behavior flags.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it decodes VINs using built-in tables and check digit validation, and distinguishes itself from sibling tools like osint_ean_upc_validator, osint_isbn_validator, and osint_credit_card_validator, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool (VIN decoding) and when not to (product/book codes, PAN Luhn checks), naming specific alternatives. Also notes it's offline and rate-limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_bugA
File a bug report against one of the tools. Use this only when you have concrete reproduction details — endpoint is hard-rate-limited.
| Name | Required | Description | Default |
|---|---|---|---|
| tool_id | Yes | Menu id of the affected tool (e.g. `base64_encode`). | |
| url | Yes | URL where the bug was observed. | |
| expected | Yes | What you expected to happen. | |
| actual | Yes | What actually happened. | |
| repro_steps | No | Ordered steps to reproduce. | |
| agent_id | No | Optional self-identification (e.g. model name). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It discloses the hard rate limit, a key behavioral constraint. It does not mention success/failure response or side effects, but for a straightforward submission tool, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, no redundant words, and front-loaded with the core purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the purpose and a constraint (rate limit), but omits information about what happens after submission (e.g., confirmation, ticket ID). With no output schema, the agent is left guessing the response format. This is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for all 6 parameters. The description adds no extra parameter information beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'File a bug report against one of the tools,' specifying a concrete verb and resource. It distinguishes from sibling tools that perform conversions, encoding, or transformations, none of which are bug-reporting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'only when you have concrete reproduction details,' and warns about the hard rate limit. This tells the agent not to waste attempts on vague reports and sets expectations for frequency.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Keyword search across the Online Cyber Tools catalogue. Returns up to 25 ranked matches with their URL, API URL, description, and category.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query — substring or whitespace-separated tokens. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses up to 25 ranked matches but does not mention case sensitivity, error handling, or any rate limits. Adequate but could be more detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and key details. No fluff; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (1 parameter, no output schema), the description fully explains what the tool returns and its constraint (25 results). No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter description already matching the tool description's semantics. The tool description does not add additional meaning beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states keyword search across the Online Cyber Tools catalogue. Specifies return fields (URL, API URL, description, category) and limit of 25 ranked matches. Distinct from siblings which are mostly specific conversion/encoding tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use for general search but does not explicitly compare with alternatives or provide when-to-use/not-to-use guidance. No exclusions or alternative tool names mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_api_key_generatorARead-only
Generate Random API Keys, Bearer Tokens and Signing Secrets. Generate cryptographically-random API keys, bearer tokens and signing secrets in nine formats (hex, base64, base64url, alphanumeric, alphanumeric-upper, alphanumeric-lower, urlsafe, uuid-v4, bearer) with an optional prefix and separator, plus a bulk mode and a set of issuer-shaped presets (Stripe, GitHub PAT, OpenAI, Slack, AWS, webhook secret). Randomness comes only from a CSPRNG (browser or Node WebCrypto), never Math.random. Use crypto_password_generator instead for human-typeable passwords, passphrases or PINs; use this tool for machine-to-machine secrets. Read-only, non-destructive, stores nothing, contacts no external service, and is rate-limited (20 requests/minute for anonymous callers). Each call returns fresh random keys, so results are never reproducible across calls. Returns the formatted key plus its alphabet, byte count and estimated bits of entropy.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Action to run: generate yields one key; generateMany yields up to count keys; presets lists the curated issuer-shaped presets (needs no other field). | |
| format | No | Required for generate and generateMany. Output encoding or shape. bearer is a fixed 256-bit base64url token; uuid-v4 is a 36-char RFC 4122 UUID; both ignore length and byteCount. | |
| length | No | Character count for character-based formats (hex, alphanumeric variants, urlsafe). Ignored by uuid-v4 and bearer. | |
| byteCount | No | Raw random-byte count for byte-based formats (base64, base64url). Takes precedence over length when both are given. | |
| prefix | No | Optional literal text prepended to the key body (for example sk_live_). | |
| separator | No | Optional literal text inserted between prefix and body (only used when both prefix and body are non-empty). | |
| count | No | How many keys to produce for generateMany (each is independently random). Ignored by generate and presets. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 200 response. |
| operation | No | The operation that was run. |
| result | No | For generate, a single key object (key, alphabet, byteCount, bitsOfEntropy, format, prefix, separator); for generateMany, an array of such objects; for presets, an object with a presets array. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses significant behavioral details: it is read-only, non-destructive, stores nothing, contacts no external service, uses only CSPRNG, is rate-limited, and each call returns fresh keys. This fully informs the agent of its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but efficiently packs key information. It is front-loaded with purpose, then details, guidelines, and behavioral notes. Slightly long but no unnecessary content; could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, multiple operations, presets) and the existence of output schema, the description covers all critical aspects: operations, formats, randomness source, rate limits, storage guarantees, and sibling differentiation. It is complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the input schema has 100% coverage with descriptions, the description adds crucial context: explains the purpose of each operation (generate, generateMany, presets), details that bearer and uuid-v4 ignore length/byteCount, and clarifies the randomness source. This enriches understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates random API keys, bearer tokens, and signing secrets, with specific verb and resource. It lists nine formats and presets, and explicitly distinguishes from crypto_password_generator, making it easy to differentiate from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (machine-to-machine secrets) and when to use alternatives (crypto_password_generator for human-typeable passwords). It also mentions bulk mode and presets, and notes rate limits, providing clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_csp_generatorARead-onlyIdempotent
Content-Security-Policy Builder, Parser, and Analyzer. Build a Content-Security-Policy header value from a directives map, parse an existing CSP header string into structured directives, or analyze either form for misconfigurations ranked by severity (critical to info). Set operation to build, parse, or analyze. This assembles and audits the header TEXT only - it does not deploy, send, or apply the policy to any server. Use it to author or review a CSP; for full Apache or Nginx config files use linux_web_server_config_generator, for Apache rewrite and header rules use security_htaccess_generator, and for raw openssl CLI invocations use security_openssl_command_builder. Runs locally on the policy you provide: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/minute for anonymous callers). Returns the serialized header value, normalized directives, an HTML meta-tag form (build only), and severity-ranked warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Mode: build serializes a directives map into a header (requires policy); parse splits a header string into directives (requires value); analyze audits either input for weaknesses (requires value or policy). | |
| policy | No | CSP directives map keyed by directive name (default-src, script-src, style-src, img-src, connect-src, frame-ancestors, base-uri, form-action, object-src, and so on). Each value is an array of source tokens (such as self, unsafe-inline, https: or a nonce/hash) or a single space-separated string. Boolean directives like upgrade-insecure-requests take an empty array or true. Required for build; accepted by analyze. | |
| value | No | An existing CSP header value to parse or analyze, for example default-src self then script-src self. Required for parse; accepted by analyze. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation completed without error. |
| operation | No | The operation performed (build, parse, or analyze). |
| result | No | Operation output. build returns header/value/directives/warnings/htmlMetaTag; parse returns value/directives/warnings; analyze returns warnings only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (readOnlyHint=true, destructiveHint=false, idempotentHint=true) are reinforced with explicit behavioral context: 'Runs locally … read-only, non-destructive, contacts no external service, and is rate-limited'. It also describes return values (serialized header, normalized directives, HTML meta-tag, severity-ranked warnings), adding significant transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive, starting with the core purpose, then detailing operations, clarifying what it doesn't do, providing sibling differentiation, and adding behavioral notes. Every sentence serves a purpose without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-operation tool with parameters, annotations, and an output schema, the description covers all critical aspects: all three operations with their input requirements, behavioral constraints (read-only, rate-limited), output details (header value, directives, HTML meta-tag, warnings), and links to related tools. There are no gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter having a description. The description goes further by explaining operation modes and their parameter dependencies ('build serializes... requires policy; parse splits... requires value; analyze audits... requires value or policy'). It also elaborates on the policy structure (directives map, arrays of tokens, boolean directives), exceeding the schema's brief descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Content-Security-Policy Builder, Parser, and Analyzer' and immediately explains the three modes (build, parse, analyze). It distinguishes from sibling tools by naming alternatives for full Apache/Nginx configs (linux_web_server_config_generator, security_htaccess_generator, security_openssl_command_builder), effectively differentiating the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool ('Use it to author or review a CSP') and when to use alternatives ('for full Apache or Nginx config files use...'). It also states what the tool does not do ('it does not deploy, send, or apply the policy'), providing clear guardrails.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_htaccess_generatorARead-onlyIdempotent
Apache .htaccess Generator. Build the text of an Apache 2.4+ .htaccess file from structured options, then return it as a string for you to copy or save - it does NOT deploy, write, or touch any file on any server. Assembles named directive groups on demand: force HTTPS (mod_rewrite), www/non-www canonicalisation, mod_alias path redirects (301/302/303/307/308), custom mod_rewrite rules, IP allow/deny access control (Order/Deny/Allow, IPv4+CIDR / IPv6), custom ErrorDocument pages, GZIP (mod_deflate) and Brotli (mod_brotli) compression, mod_expires + mod_headers browser-cache lifetimes, directory-listing toggle, Referer hotlink protection, and free-form appended rules. Use security_csp_generator for Content-Security-Policy headers, security_robots_txt_generator for robots.txt, or linux_web_server_config_generator for full Apache/Nginx/Caddy vhost configs. Set operation to "presets" to list ready-made configurations instead of generating. Runs locally via a sandboxed compiled module: read-only, non-destructive, c
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | "generate" builds .htaccess text from the options below; "presets" ignores all options and returns the curated preset list. | generate |
| forceHttps | No | Emit a mod_rewrite block that 301-redirects every HTTP request to HTTPS. | |
| wwwMode | No | Canonical host: force the www subdomain, force the bare apex, or emit no host-canonicalisation rule. | leave-alone |
| redirects | No | mod_alias path-prefix redirects. Empty from/to, self-redirects, and homepage catches raise warnings. | |
| rewrites | No | Custom mod_rewrite rules. Pattern is regex-compiled for a warning check (Apache uses PCRE). | |
| denyIps | No | IPv4/IPv6 addresses or CIDR ranges to block (Deny from). Invalid entries still emit but raise a warning. | |
| allowIps | No | IPv4/IPv6 addresses or CIDR ranges to allow; when set alone, everyone else is denied. | |
| errorPages | No | Map of HTTP status code (400-599, as string key) to ErrorDocument path, e.g. 404 to /404.html. | |
| gzip | No | Emit a mod_deflate GZIP AddOutputFilterByType block for text/JS/CSS/JSON. | |
| brotli | No | Emit a mod_brotli compression block (typically 15-25% smaller than gzip). | |
| cacheHeaders | No | mod_expires + mod_headers cache lifetimes. Omit or use 0 to skip a tier. | |
| directoryListing | No | Autoindex: disabled emits Options -Indexes, enabled emits Options +Indexes, leave-alone emits nothing. | leave-alone |
| hotlinkProtection | No | Referer-based image hotlink protection via mod_rewrite. | |
| customRules | No | Free-form Apache directives appended verbatim at the end of the file. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request succeeded. |
| operation | No | The operation performed (generate or presets). |
| result | No | For operation=generate: the generated file and metadata. For operation=presets: a presets array. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent. The description reinforces that it does not touch any server files and runs locally in a sandbox. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that front-loads the core purpose and lists features comprehensively. While slightly dense, it is still relatively concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (14 params, nested objects, output schema), the description covers purpose, behavior, parameter details, warnings, and alternatives. It is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds valuable context beyond schema, such as warnings for self-redirects, explanations of wwwMode values, and compression size comparisons.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates Apache .htaccess text from structured options and returns it as a string, emphasizing it does not deploy or write files. It lists many features and distinguishes from sibling tools like security_csp_generator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool versus alternatives (e.g., 'Use security_csp_generator for Content-Security-Policy headers'). Also explains the 'presets' operation for listing ready-made configurations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_jwt_generator_validatorARead-onlyIdempotent
JWT Decode, Validate, Sign and Claim Builder. Decode, validate (HMAC), HMAC-sign, and assemble JSON Web Tokens (RFC 7519) plus list claim-set presets and standard-claim docs, all from a single operation switch. Unlike encoding_decoding_jwt, which only decodes/inspects, this tool also verifies HMAC signatures (HS256/HS384/HS512), recomputes a signature to mint a token, and builds claim payloads with iss/sub/aud/exp/nbf/iat/jti. Asymmetric algorithms (RS/ES/EdDSA) are decoded but NOT verified or signed server-side. Time is never read from the clock: pass an explicit now (epoch seconds) for exp/nbf/iat comparisons and deltas, so identical input yields identical output. Runs locally via a bundled pure-JS HMAC implementation: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/minute for anonymous callers). Returns success, the echoed operation, and an operation-specific result object.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Action to run. decode: parse a token (no signature check). validate: verify an HMAC signature plus claim validity. signHmac: mint an HMAC-signed token. assembleClaims: build a claim payload. presets: list curated claim-set presets. standardClaims: list RFC 7519 registered-claim docs. | |
| token | No | Compact JWS string (header.payload.signature). Required for decode and validate; ignored otherwise. | |
| secret | No | Shared HMAC secret (UTF-8) used by validate to recompute the signature. Required for HMAC validation; ignored otherwise. | |
| now | No | Current time in epoch seconds for exp/nbf/iat checks on decode. Omit to compare against epoch 0 (relative-time strings only). | |
| options | No | Claim-check settings for validate (ignored for other operations). | |
| input | No | Operation payload for assembleClaims (claim fields) or signHmac (token parts). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 2xx response. |
| operation | No | The operation that was executed. |
| result | No | Operation-specific output. decode: {header,payload,signature,raw,claims,warnings,error}. validate: {valid,errors,header,payload,signatureValid,claimsValid}. signHmac: {token,header,payload}. assembleClaims: {claims,warnings}. presets: {presets[]}. standardClaims: {claims[]}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond annotations: it discloses local pure-JS implementation, read-only/non-destructive nature, no external service contact, rate limiting (30 req/min), and explicit now parameter for deterministic behavior. Annotations already indicate read-only and idempotent, so the description provides additional detail without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but well-structured with a clear front-loaded purpose statement and logical flow. Every sentence adds value, although it could be slightly more condensed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (six operations, nested parameters, output schema exists), the description covers all necessary aspects: what operations do, when to use, behavioral traits, parameter semantics, and return structure. It is complete enough for an AI agent to understand and select the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds extra meaning beyond the schema, such as explaining that 'now' parameter ensures deterministic output by not reading the clock, and clarifying the behavior of exp/nbf deltas in assembleClaims. This provides enough value to raise the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'JWT Decode, Validate, Sign and Claim Builder' and lists six specific operations. It explicitly differentiates from the sibling tool encoding_decoding_jwt by noting that this tool also verifies HMAC signatures and builds claims, providing a specific verb+resource with sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit guidance on when to use this tool versus the sibling encoding_decoding_jwt, and states limitations for asymmetric algorithms (decoded but not verified/signed server-side). However, it does not provide explicit 'when-not-to-use' or alternatives for asymmetric operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_openssl_command_builderARead-onlyIdempotent
OpenSSL Command Builder. Build a copy-paste-ready openssl command line from structured form fields, covering 12 operations: keygen (RSA/EC/Ed25519/Ed448 private key via genpkey), csr (PKCS#10 certificate signing request), self-signed (key plus self-signed X.509 cert in one step), sign (detached dgst -sign signature), encrypt (symmetric enc encrypt/decrypt), hash (file digest), pkcs12 (bundle key+cert into a .p12/.pfx), inspect (x509/req/pkey/pkcs12 -text), connect (s_client TLS probe), random (rand bytes), verify (chain verification), and s-server (local TLS test server). This tool only GENERATES the command text with per-flag explanations, weak/deprecated-choice warnings, and the files each command reads or writes - it NEVER executes openssl, opens sockets, or touches the filesystem. For Linux CLI commands (find/grep/sed/rsync/tar/curl/ssh) use linux_command_builder; for Apache rewrite/redirect rules use security_htaccess_generator. Runs locally on the options you provide: read-only, non-destructive, contact
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | API action: build assembles a command from category+fields; categories returns the form-field catalogue; presets returns curated example field sets. Defaults to build. | build |
| category | No | Which openssl command to build (required when operation is build). keygen=private key, csr=signing request, self-signed=key+cert, sign=detached signature, encrypt=symmetric enc, hash=file digest, pkcs12=PFX bundle, inspect=read cert/key/CSR, connect=s_client probe, random=rand bytes, verify=chain check, s-server=test TLS server. | |
| fields | No | Per-category options; every key is optional and falls back to a sensible default. keygen/self-signed: algorithm (rsa-2048/rsa-3072/rsa-4096/ec/ed25519/ed448, default rsa-4096), curve (prime256v1/secp384r1/secp521r1/secp256k1), encryptKey/noEncrypt, cipher, outFile/keyOut/certOut, days (default 365). csr/self-signed subject DN: country, state, locality, organization, organizationalUnit, commonName, emailAddress; sans. csr/self-signed/sign/hash: digest (sha256/sha384/sha512/sha1/md5, default sha256), keyFile, inFile, sigFile. encrypt: mode (encrypt/decrypt), base64, pbkdf2 (default true), iter (default 100000), password. pkcs12: certFile, caFile, alias, password. inspect: what (cert/csr/key/p12), inFile. connect/s-server: host, sni, starttls, tlsVersion, ciphers, port (default 443 connect / 4433 s-server), showCerts/www. random: length (default 32), format (base64/hex), outFile. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request succeeded. |
| operation | No | The operation echoed back (build, categories, or presets). |
| result | No | Operation payload. For build this is the command object below; for categories/presets it wraps a categories/presets array of form definitions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false; description reinforces non-execution, no filesystem access, and local read-only operation. It adds context about warnings and explanations, consistent with annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and key exclusions. Uses bullet-style lists for operations and guidelines, making it scannable. Every sentence adds value—no filler, no repetition of schema info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 operations, nested fields, multiple parameter schemas), the description covers all behavioral aspects: generation vs. execution, file side-effects, parameter defaults, and alternative tools. No gaps remain even without output schema in the input.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and description enriches each parameter with defaults, examples (e.g., algorithm defaults to rsa-4096, digest to sha256), and per-category field lists. The description adds significant meaning beyond the enum names and property types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool builds copy-paste-ready openssl commands from form fields, lists 12 operations, and contrasts with sibling tools like linux_command_builder and security_htaccess_generator. The verb 'build' plus 'openssl command line' is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (build openssl commands) and when not to (never executes, opens sockets, or touches filesystem). Provides alternative tools for Linux CLI commands and Apache rules, guiding the agent away from misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_password_policy_generatorARead-onlyIdempotent
Password Policy Document and Validator Generator. Generate a written corporate password policy (Markdown plus rendered HTML) together with machine-readable validators (regex, JSON Schema, nginx, htpasswd, Active Directory, k8s, JavaScript, Python) from declared complexity constraints. Set operation to generate with an input object of constraints, or operation presets to list 8 built-in compliance baselines (NIST 800-63B, PCI DSS 4.0, HIPAA, ISO 27001, OWASP ASVS, Microsoft Entra, Google Workspace) you can use as a starting input. Use security_password_policy_generator to author the rules a workforce must follow; use crypto_password_generator instead to produce actual random passwords, or crypto_password_strength to score one password. Deterministic from its inputs (same input gives same document), pure compute: read-only, non-destructive, contacts no external service, no randomness, and rate-limited (30 requests/minute for anonymous callers). Returns the policy markdown and html, a validator regex, a JSON Sch
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | generate builds a policy from the input object; presets ignores input and returns the 8 built-in compliance baselines. | generate |
| input | No | Policy constraints (required when operation is generate; ignored for presets). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request succeeded. |
| operation | No | The operation performed (generate or presets). |
| result | No | For generate, the policy artifacts; for presets, a presets array. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes determinism, pure compute, read-only, non-destructive, no external service contact, rate limit (30/min for anonymous), and output format, adding value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information is front-loaded, each sentence serves a purpose, no redundancy, and well-structured despite length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and full parameter descriptions, the description covers purpose, usage, behavior, and output, leaving no gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description adds context for the operation parameter (generate vs presets) and clarifies usage, boosting it to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it generates a password policy document and validators, and distinguishes from sibling tools like crypto_password_generator and crypto_password_strength.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool versus alternatives, and describes the two operations (generate and presets) with clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_proxy_parseARead-onlyIdempotent
Proxy List Parser. Parse a newline-separated proxy list into structured records, splitting each line into protocol, host, port, and optional username/password. Use this to validate and normalise proxy input before testing; use security_proxy_test (or its streaming variant) when you actually want to connect to and benchmark the proxies. Pure local text parsing: read-only, non-destructive, contacts no proxy or external service, and rate-limited (anonymous 2/min, 10/hour, CAPTCHA after 5/hour). Returns the parsed valid proxies, per-line parse errors, and counts.
| Name | Required | Description | Default |
|---|---|---|---|
| proxies | Yes | Newline-separated proxy list. Each non-empty line must match [protocol://][user:pass@]host:port (protocol defaults to http; port 1-65535). Blank lines and lines starting with # are skipped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 200 response. |
| data | No | Parsed output payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds valuable context: pure local parsing, no external contacts, and rate limits (2/min, 10/hour, CAPTCHA after 5/hour). This enriches behavioral understanding without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four concise sentences: title-like opener, operational detail, usage guidance with alternatives, and behavioral constraints. No extraneous information; every sentence provides essential value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, when to use, behavioral traits (local, rate limits), and output summary (parsed proxies, parse errors, counts). Although an output schema exists, the description adequately summarizes return values without redundancy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter (proxies) has 100% schema description coverage. The description adds extra meaning by specifying the expected format (protocol://user:pass@host:port, defaults to http, port range 1-65535) and skipping rules (blank lines, # comments), exceeding the schema's examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a parser for proxy lists, specifying the action (parse) and the resource (newline-separated proxy list). It details the output structure (protocol, host, port, optional credentials) and distinguishes from siblings by explicitly naming security_proxy_test for actual connections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (validate/normalize before testing) and when to use alternatives (security_proxy_test for connecting/benchmarking), making the selection decision clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_proxy_testA
Proxy Tester (Batch). Test many proxy servers in one batch and return each result plus aggregate statistics. Every proxy is checked for HTTP/HTTPS connectivity, response speed, anonymity level, IP-leak, the outgoing IP it presents, and geographic location. Results are NOT cacheable: they reflect live network state and vary between calls. Use security_proxy_parse first to normalise raw input; use security_proxy_test_single to test exactly one proxy; use security_proxy_test_stream to stream incremental per-proxy results instead of waiting for the whole batch. This tool makes outbound network connections through each supplied proxy to fixed third-party endpoints (httpbin.org, ipify.org, ip-api.com, etc.); target URLs are not user-configurable. Rate-limited (anonymous 2/min, 10/hour, 30/day; CAPTCHA after 5/hour). Returns results[] (one full test record per proxy) and a statistics summary.
| Name | Required | Description | Default |
|---|---|---|---|
| proxies | Yes | Newline-separated proxy list. Each non-empty line must match protocol://user:pass@host:port (protocol defaults to http; port 1-65535; auth optional). Blank lines and lines starting with # are skipped. Lines that fail to parse are dropped; a 400 is returned only if no valid proxy remains. | |
| options | No | Optional test settings. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 200 response. |
| data | No | Aggregated batch output. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses results not cacheable, makes outbound connections to fixed endpoints, target URLs not configurable, rate-limited with specific limits and CAPTCHA. This goes beyond annotations which only give hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, dense paragraph that is front-loaded with purpose. Every sentence adds value; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, behavioral traits, rate limits, and alternatives. Output schema exists, so description doesn't need to detail return values. Complete for complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed descriptions for all parameters. The tool description adds minimal extra meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool batch-tests many proxy servers, listing specific checks (HTTP/HTTPS, speed, anonymity, IP leak, etc.). Distinguishes from siblings by mentioning batch vs single vs stream.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use alternatives: use security_proxy_parse first to normalize input, security_proxy_test_single for one proxy, security_proxy_test_stream for incremental results. Also notes non-cacheable nature and rate limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_proxy_test_singleA
Proxy Tester (Single Proxy). Test ONE proxy server synchronously and return its full result in a single JSON response. Makes outbound HTTP and HTTPS connections through the supplied proxy to measure reachability, speed, anonymity, SSL support, IP leakage, the outgoing IP it presents, and geolocation, so the result reflects live network state and varies between calls. Use security_proxy_parse first to normalise raw input; use security_proxy_test to batch many proxies into one JSON response, or security_proxy_test_stream to stream incremental per-proxy progress for a large list; use this when you only need to check a single proxy. CAPTCHA-gated and rate-limited (anonymous 2/min, 10/hour, 30/day; CAPTCHA after 5/hour).
| Name | Required | Description | Default |
|---|---|---|---|
| proxy | Yes | The single proxy to test, as a structured record (run security_proxy_parse to produce this shape from a raw line). | |
| originalIp | No | Your real public IP, used to score anonymity and detect IP leakage. Optional; defaults to the server-detected client IP when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the test ran (a failed proxy connection still returns success true with status failed). |
| data | No | Per-proxy test outcome. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true. Description elaborates that it makes outbound connections, measures live network state, varies between calls, and is rate-limited. This adds useful context beyond annotations, though it could mention idempotence explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph efficiently covers purpose, functionality, usage guidelines, and constraints. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (network testing, live results, rate limits, CAPTCHA), the description addresses all key aspects: what it does, how to use it, limitations, and alternative tools. Output schema existence is noted but not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema defines 2 parameters with full descriptions. Description adds value by linking proxy parameter to security_proxy_parse and clarifying optional originalIp defaults. No contradictions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool tests a single proxy synchronously, returning full results. It specifies measured attributes (reachability, speed, anonymity, etc.) and differentiates from sibling tools like security_proxy_test, security_proxy_test_stream, and security_proxy_parse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use security_proxy_parse first, and contrasts this tool with batch and streaming alternatives. Also mentions CAPTCHA and rate limits, providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_proxy_test_streamA
Proxy Tester (Live SSE Stream). Tests a list of proxy servers one at a time and streams each result as it completes via Server-Sent Events (Content-Type text/event-stream). Makes outbound HTTP/HTTPS connections through every supplied proxy to measure reachability, speed, anonymity, SSL support, IP leakage, and geolocation, so results reflect live network state and vary between calls. Use security_proxy_parse first to normalise raw input; use security_proxy_test for a single batched JSON response, or security_proxy_test_single for one proxy; use this streaming variant to show incremental per-proxy progress for a large list. CAPTCHA-gated and rate-limited (anonymous 2/min, 10/hour, 30/day; CAPTCHA after 5/hour). Each SSE frame is a JSON object whose "type" is one of start, result, error, or complete.
| Name | Required | Description | Default |
|---|---|---|---|
| proxies | Yes | Newline-separated proxy list. Each non-empty line must match [protocol://][user:pass@]host:port (protocol defaults to http; port 1-65535). Blank lines and lines starting with # are skipped. Lines that fail to parse are dropped before testing. | |
| options | No | Optional test settings. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses outbound HTTP/HTTPS connections, live network state, variance between calls, rate limiting details, and SSE frame types (start, result, error, complete). Adds significant context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structured with title, purpose, behavior, sibling differentiation, rate limits, and SSE format. Every sentence is informative and efficient, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all essential aspects: purpose, usage guidelines, behavior, parameter details, rate limits, and output format (SSE types). Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the proxies parameter format (protocol://user:pass@host:port, defaults, skipping rules) and notes that options like concurrency and retryAttempts are accepted but not applied. Adds meaning over the 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it tests proxy servers with a streaming SSE response, specifies the verb 'tests' and the resource 'list of proxy servers', and explicitly distinguishes from siblings like security_proxy_test and security_proxy_test_single.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: use security_proxy_parse for normalizing input, use security_proxy_test for batch JSON, use this streaming variant for incremental progress. Also mentions rate limits and CAPTCHA constraints, aiding in deciding when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_robots_txt_generatorARead-onlyIdempotent
Robots.txt Generator (Build, Parse, and Preset RFC 9309 Crawler Rules). Assemble, parse, or template an RFC 9309 robots.txt file from structured user-agent groups. The 'operation' field selects the mode: 'generate' serializes "input" (groups of user-agents with allow/disallow paths, optional crawl-delay, sitemaps, host, comment) into robots.txt text plus validation warnings; 'parse' round-trips an existing robots.txt string back into the same structured shape; 'presets' returns 12 ready-made rule sets (allow-all, block-all, WordPress, Drupal, Joomla, Magento, Shopify, Ghost, Next.js, block-AI-scrapers, custom); 'commonUserAgents' returns a 50-entry crawler reference table. Generation only assembles and validates strings — it does NOT fetch, test, or deploy the file, and crawler compliance is voluntary. Use seo_sitemap_generator to build the sitemap this file points at, or security_htaccess_generator for Apache server-config directives rather than crawler access rules. Pure local computation: read-only, non-de
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Mode to run. 'generate' needs "input"; 'parse' needs "text"; 'presets' and 'commonUserAgents' take no other fields. | |
| input | No | Robots.txt definition for operation "generate". Requires a non-empty "groups" array. | |
| text | No | Existing robots.txt text to parse for operation "parse". |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation succeeded. |
| operation | No | Echo of the operation performed. |
| result | No | Payload for the chosen operation. For "generate": robotsTxt/warnings/lineCount. For "parse": groups/sitemaps/host/comment. For "presets" and "commonUserAgents" this is instead a JSON array. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds that generation only assembles and validates strings, does not fetch/test/deploy, and that crawler compliance is voluntary. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear summary and uses bullet-like structure for modes. Slightly lengthy but every sentence is useful. Minor truncation ('non-de') but does not detract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (multiple modes, nested input, output schema), the description covers operation modes, input requirements, limitations, and alternative tools. Adequate for an agent to select and invole the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions. The tool description adds context beyond the schema, such as explaining each operation mode in detail and listing the preset names. This adds value, earning above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description clearly state the tool builds, parses, and presets robots.txt files per RFC 9309. It distinguishes from sibling tools by mentioning security_htaccess_generator and seo_sitemap_generator as alternatives for different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance on when to use each operation mode, and exclusions: use seo_sitemap_generator for sitemaps, security_htaccess_generator for Apache directives. Also states limitations: does not fetch, test, or deploy the file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_totp_qr_generatorARead-only
2FA TOTP/HOTP otpauth URI Builder and Parser. Build, parse, or seed otpauth:// Key-URI strings for two-factor authentication (RFC 6238 TOTP, RFC 4226 HOTP), compatible with Google Authenticator, Authy, 1Password, Microsoft Authenticator, and Bitwarden. The single operation field selects one of three actions. buildUri assembles an otpauth:// URI from a supplied base32 secret plus issuer/account/algorithm/digits/period (it does NOT invent a secret) and returns app-compatibility warnings. generateSecret returns a fresh random base32 secret (non-deterministic, CSPRNG via random_bytes) of the requested byte length. parseUri decodes an existing otpauth:// URI back into its fields. The QR image itself is rendered client-side in the browser from the returned URI; the server only produces the string and never contacts an external service. Use osint_qr_code_generator for general-purpose QR codes (WiFi, vCard, plain URLs); use this tool only for authenticator-app 2FA enrolment URIs. Read-only, non-destructive, rate-limi
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Action to perform: buildUri (assemble an otpauth URI from supplied fields), generateSecret (return a fresh random base32 secret), or parseUri (decode an existing otpauth URI). | |
| type | No | buildUri only. otpauth scheme: time-based (totp) or counter-based (hotp). Determines whether period or counter applies. | totp |
| issuer | No | buildUri only. Organisation/service name shown in the authenticator app (e.g. GitHub). Optional but recommended; omitting it triggers a warning. | |
| account | No | buildUri only. Account label shown in the app (e.g. alice@example.com). Required for buildUri. | |
| secret | No | buildUri only. Base32-encoded shared secret (RFC 4648 alphabet A-Z 2-7); whitespace stripped and upper-cased. Required for buildUri. Non-base32 input still builds but is flagged in warnings. | |
| algorithm | No | buildUri only. HMAC hash. Most apps (notably Google Authenticator) assume SHA1; non-default values trigger a compatibility warning. | SHA1 |
| digits | No | buildUri only. Number of code digits. Most apps assume 6. | |
| period | No | buildUri with type totp only. Time step in seconds (RFC 6238). Ignored for hotp. | |
| counter | No | buildUri with type hotp only. Initial HOTP counter (RFC 4226). Ignored for totp. | |
| byteCount | No | generateSecret only. Raw random bytes before base32 encoding. RFC 6238 recommends 20 (160 bits) for SHA1. | |
| uri | No | parseUri only. An existing otpauth:// URI to decode into component fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the operation succeeded. |
| operation | No | The operation that was executed (buildUri, generateSecret, or parseUri). |
| result | No | Operation payload. buildUri returns uri/type/issuer/account/secret/algorithm/digits/period/counter/warnings. parseUri returns the same fields minus uri and warnings. generateSecret returns secret/byteCount/bits. |
| error | No | Present only on failure: human-readable validation/runtime message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description explicitly states 'Read-only, non-destructive' and clarifies that the server only produces the URI string without external service contact, aligning with and adding context to the annotations (readOnlyHint: true, destructiveHint: false).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with front-loaded purpose and clear separation of actions. While slightly verbose, every sentence adds necessary detail and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (three operations, 11 parameters), the description thoroughly covers each operation's behavior, return values (app-compatibility warnings), and boundaries. The existence of an output schema further reduces need for return value explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining operational nuances (e.g., buildUri does not invent a secret, generateSecret uses CSPRNG, parseUri decodes) and flags compatibility warnings. These details enhance understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states '2FA TOTP/HOTP otpauth URI Builder and Parser' and distinguishes from the sibling 'osint_qr_code_generator' by specifying this tool is only for authenticator-app 2FA enrolment URIs. It covers three distinct operations with specific verbs and resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool vs. the alternative: 'Use osint_qr_code_generator for general-purpose QR codes... use this tool only for authenticator-app 2FA enrolment URIs.' Also details the three sub-actions and their respective contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_hreflang_generatorARead-onlyIdempotent
Hreflang Generator (Build International SEO Alternate-Language Link Tags). Generate and validate rel="alternate" hreflang annotations for international SEO from a list of language/region-to-URL entries. The 'operation' field selects the mode. 'generate' serializes the entries into three formats at once (HTML tags for , xhtml:link tags for a sitemap block, and RFC 8288 Link: HTTP-header lines), XML-escaping every href and emitting warnings for invalid BCP 47 codes, non-absolute URLs, duplicates, missing x-default, and reciprocity. 'validateCode' checks a single BCP 47 tag and returns its normalized form plus parsed language/script/region subtags. 'commonCodes' returns a curated 40+ entry catalogue of well-known codes (en, en-US, zh-Hans, x-default). Use this for standalone alternate-language tags; use seo_sitemap_generator when you want the same alternates embedded in a full XML sitemap, or seo_meta_tag_generator for a complete meta block. Runs locally in a 5s-bounded Node process:
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | "generate" builds hreflang tags from "entries"; "validateCode" checks one "code"; "commonCodes" lists the curated catalogue. Defaults to generate. | generate |
| entries | No | Language-variant entries for operation "generate" (required, min 1 valid entry). Entries missing hreflang or href are skipped with a warning. | |
| format | No | Output serialization for operation "generate". html = <link> tags; sitemap = <xhtml:link> tags; http-header = RFC 8288 Link: lines. Defaults to html. | html |
| includeXDefault | No | When true, append an x-default entry (using xDefaultHref or the first entry's href) unless one is already present. | |
| xDefaultHref | No | Absolute URL for the appended x-default entry when includeXDefault is true; ignored otherwise. Non-absolute values warn. | |
| code | No | Single BCP 47 tag to validate for operation "validateCode" (required for that operation), e.g. zh-Hant-TW. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation succeeded. |
| operation | No | Echo of the operation performed (generate, validateCode, or commonCodes). |
| result | No | Operation-specific payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, non-destructive. The description adds behavioral traits: runs locally, 5s timeout, XML-escaping hrefs, warnings for invalid BCP47, non-absolute URLs, duplicates, missing x-default, and reciprocity. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but well-structured: purpose first, then operation modes, usage guidance, sibling differentiation, and runtime info. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (6 params, 1 required) and existence of output schema, the description covers all necessary context: input, output formats, warnings, runtime, alternatives. It is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds context about operation modes, output formats, warnings, and how parameters interact (e.g., includeXDefault and xDefaultHref). This adds meaning beyond the schema, but not significantly enough for a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: generate and validate hreflang annotations. It specifies the verb (generate/validate) and resource (alternate-language link tags). It also distinguishes from sibling tools seo_sitemap_generator and seo_meta_tag_generator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when-to-use: 'Use this for standalone alternate-language tags; use seo_sitemap_generator when you want the same alternates embedded in a full XML sitemap, or seo_meta_tag_generator for a complete <head> meta block.' Also mentions runtime constraints (5s-bounded Node process).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_keyword_density_checkerARead-onlyIdempotent
SEO Keyword Density and N-gram Checker. Analyze plain text or HTML for keyword density and repeated phrases as an SEO content audit. Tokenizes the text (Unicode-aware, optional HTML tag/entity stripping, optional stopword removal) and returns the top unigrams, bigrams, and trigrams ranked by frequency, each with a density percentage, plus document stats (word/char/sentence/paragraph counts, unique words, lexical diversity) and over-optimization warnings when any term exceeds roughly 3-5% density. Use this when you need per-keyword and per-phrase density to detect keyword stuffing; use text_word_frequency for a plain single-word frequency list with no SEO density or n-gram analysis, text_text_statistics for readability/structure metrics without keyword ranking, seo_title_description_length_checker to validate title/meta length, and seo_meta_tag_generator to author the head tags. Runs locally on the text you provide: read-only, deterministic, non-destructive, contacts no external service, and is rate-limited (3
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Content to analyze: UTF-8 plain text, or an HTML document when mode is html. Must not be blank. Hard cap roughly 5 MB. | |
| mode | No | Input format. plain analyzes text verbatim; html strips script/style/comments/tags and decodes entities before analysis. Unrecognized values fall back to plain. | plain |
| stopwords | No | Stopword filter for the unigram ranking and (when active) n-grams. en/english uses the built-in English list; none/off/empty disables filtering; an array of strings supplies a custom case-insensitive list. Any other string defaults to the English list. | en |
| minLength | No | Minimum token character length to include in rankings; shorter tokens are dropped. Clamped to 1-10. | |
| topN | No | Maximum number of entries returned in each of the unigram, bigram, and trigram tables. Clamped to 1-100. | |
| operation | No | Operation to run. Only analyze is supported. | analyze |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the analysis succeeded. |
| operation | No | The operation performed (analyze). |
| result | No | The keyword density analysis. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by stating that the tool is 'read-only, deterministic, non-destructive, contacts no external service, and is rate-limited.' It also outlines the tokenization process (Unicode-aware, optional stripping/stopword removal), adding valuable behavioral context that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative yet efficient, covering purpose, usage, behavior, and parameter hints in a structured manner. It is slightly lengthy but every sentence adds value, so it earns a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the medium complexity and the presence of a comprehensive input schema and output schema (not shown but implied), the description covers all necessary aspects: input handling, processing details, output features, constraints, and sibling tool differentiation. It is fully complete for agent selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters well. The description adds minimal extra semantic value for parameters (e.g., 'stopwords can be en, none, or custom array'), but it doesn't go into depth beyond what the schema provides, resulting in a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Analyze plain text or HTML for keyword density and repeated phrases as an SEO content audit.' It distinguishes itself from sibling tools like text_word_frequency, text_text_statistics, seo_title_description_length_checker, and seo_meta_tag_generator, leaving no ambiguity about what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool ('when you need per-keyword and per-phrase density to detect keyword stuffing') and when to use alternatives (e.g., 'use text_word_frequency for a plain single-word frequency list'). This provides clear 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.
seo_meta_tag_generatorARead-onlyIdempotent
SEO Meta Tag Generator. Generate a complete HTML head block of SEO meta tags (title, description, canonical, robots, viewport, charset, theme-color), an Open Graph subset, a Twitter Card subset, and an optional schema.org WebPage JSON-LD block from structured fields. Set operation to generate (assemble tags) or presets (return four example field-sets). Use seo_open_graph_generator when you only need rich Open Graph type sub-properties such as article or product, and seo_schema_org_generator for standalone JSON-LD structured data across many schema types. Runs locally on the fields you provide: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/minute for anonymous callers). Returns the assembled head HTML, length counts, and char-count warnings for Google SERP and social-share truncation limits.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | Action to run. generate assembles meta tags from the fields; presets ignores all other fields and returns four example input sets. | generate |
| title | No | Page title for the title tag, og:title, and twitter:title fallback. Required for the generate operation; blank is rejected. Warns over 60 chars (Google SERP truncation). | |
| description | No | Meta description for the description tag, og:description, and twitter:description fallback. Required for the generate operation; blank is rejected. Warns over 160 chars (Google SERP truncation). | |
| canonical | No | Absolute canonical URL for rel=canonical and the og:url fallback. Should include scheme (https://); a missing or relative value adds a warning. | |
| robots | No | Comma-separated robots directives (for example index, follow). Tokens are lower-cased and validated against the Google robots vocabulary. | |
| lang | No | BCP 47 language code emitted as an http-equiv content-language meta and JSON-LD inLanguage. | |
| charset | No | Character set for the charset meta tag. Defaults to UTF-8 when blank. | UTF-8 |
| viewport | No | Viewport meta content (for example width=device-width, initial-scale=1). Omitted from output when blank. | |
| themeColor | No | Browser theme-color, a CSS hex or rgb/hsl color. An unrecognized value adds a warning. | |
| author | No | Author name for the author meta tag and JSON-LD author Person. | |
| publisher | No | Publisher name for the publisher meta tag and JSON-LD publisher Organization. | |
| jsonLd | No | When true, append an inline schema.org WebPage JSON-LD script built from the supplied fields. | |
| keywords | No | Keyword strings joined into one keywords meta tag (blank entries dropped). | |
| og | No | Open Graph overrides. og:title and og:description fall back to title/description; og:url falls back to canonical; og:type defaults to website. | |
| No | Twitter Card overrides. card auto-selects summary_large_image when an image is present, else summary; twitter:image falls back to og:image. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request succeeded. |
| operation | No | The operation performed (generate or presets). |
| result | No | For generate: the assembled tags, warnings, and lengths. For presets: a presets array of example field-sets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations: it confirms read-only, non-destructive behavior, notes it runs locally with no external service contact, specifies a rate limit (30 requests/minute), and describes the return format (HTML, length counts, truncation warnings). This fully aligns with annotations and adds useful detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and covers all necessary aspects concisely given the tool's complexity (15 params, siblings). Each sentence adds value, though the length could be slightly trimmed without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given full schema coverage, an output schema, and sibling references, the description is complete for agent decision-making. It explains both operation modes, cross-tool differentiation, behavioral guarantees, and return value highlights, leaving no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description provides a high-level summary but does not add significant meaning beyond what the schema already offers for each parameter. The two operation modes are already enumerated in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Generate') and resource ('complete HTML head block of SEO meta tags'), clearly differentiating from siblings by explicitly naming seo_open_graph_generator and seo_schema_org_generator and stating when to use those instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use seo_open_graph_generator when you only need rich Open Graph type sub-properties...' and 'seo_schema_org_generator for standalone JSON-LD'. It also explains the operation parameter modes (generate vs presets) and states the tool is read-only, non-destructive, and rate-limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_open_graph_generatorARead-onlyIdempotent
Open Graph Protocol Meta Tag Generator. Generate an Open Graph (ogp.me) meta-tag block from structured fields, plus type-specific sub-namespaces for article / book / profile / video and music types and a live Facebook share-card preview. Use seo_meta_tag_generator instead when you want a full head block (Twitter Card, canonical, robots, optional WebPage JSON-LD); use this tool when you need only the og tags with vertical sub-properties. Set operation to presets to fetch four worked example payloads. Runs locally on the data you supply: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the assembled meta HTML, a warnings list (length truncation, missing og image or og url, non-absolute URLs, unknown og type, bad BCP 47 locale), and a preview record.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | generate assembles the meta block (title and description required); presets returns four example input records and ignores all other fields. | generate |
| title | No | og:title text. Required for generate. Warns when over 60 chars (Facebook truncates the share card). | |
| description | No | og:description text. Required for generate. Warns when over 65 chars (Facebook truncates the share card). | |
| image | No | og:image URL. Should be an absolute https URL at 1200x630 (1.91 to 1); relative URLs raise a warning. | |
| url | No | og:url canonical permanent URL of the page. Should be absolute with scheme; non-absolute raises a warning. | |
| siteName | No | og:site_name brand label. Optional; emitted only when non-empty. | |
| locale | No | og:locale IETF BCP 47 tag such as en_US or pt-BR. Underscore or hyphen accepted; off-pattern values raise a warning. | |
| type | No | og:type. Unknown values still emit but warn and behave as website. Selects which vertical sub-namespace is read. | website |
| article | No | Read only when type is article. Fields author, publishedTime, modifiedTime, expirationTime, section (strings) and tag (string array). | |
| book | No | Read only when type is book. Fields author, isbn, releaseDate (strings) and tag (string array). | |
| profile | No | Read only when type is profile. Fields firstName, lastName, username, gender (strings). | |
| video | No | Read only when type starts with video. Fields actor, director, writer, duration, releaseDate, series (strings) and tag (string array). | |
| music | No | Read only when type starts with music. Fields duration, album, musician (strings). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation completed. |
| operation | No | Echo of the requested operation (generate or presets). |
| result | No | For generate: html (the assembled meta-tag block string), warnings (array of advisory strings), and preview (object with title, description, image, siteName, host derived from og url). For presets: a presets array of example input records. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds key behavioral context: runs locally, read-only, non-destructive, contacts no external service, rate-limited (60 req/min). This goes beyond annotations, giving agents clear safety and performance expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is relatively long but front-loaded with main purpose and key differentiator. Structured with clear sections (main use, alternative, operation modes, behavioral notes). Every sentence adds value. Could trim some redundancy but still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (13 parameters, nested objects, enum types), the description covers all necessary aspects: what it does, when to use, behavioral traits, parameter constraints, and return summary. Output schema exists so return explanation not needed. Complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline 3. Description adds value by noting warnings for length truncation, relative URLs, unknown og type, bad locale. Provides context like 'Required for generate' for title/description. Doesn't just repeat schema, adds practical usage details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool generates Open Graph Protocol meta tags. Explicitly distinguishes from sibling seo_meta_tag_generator by specifying use case: 'use this tool when you need only the og tags with vertical sub-properties' versus a full head block. Verb+resource is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use vs alternatives: mentions seo_meta_tag_generator for full head block. Also describes operation=presets for fetching example payloads. Covers both main use and auxiliary feature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_schema_org_generatorARead-onlyIdempotent
Schema.org JSON-LD Structured Data Generator. Generate schema.org JSON-LD structured-data markup for any of 17 supported types (Article, BlogPosting, NewsArticle, Product, LocalBusiness, Organization, Person, Event, Recipe, FAQPage, BreadcrumbList, VideoObject, Review, Course, JobPosting, HowTo, SoftwareApplication) from the fields you supply, ready to paste into a page head. Use seo_meta_tag_generator for the broader head meta block (it can embed a single WebPage JSON-LD), seo_open_graph_generator for og: social-share tags, and webdev_json_schema_generator for JSON Schema validation contracts (not schema.org). Send operation schemas first to discover each type required/ recommended/optional field names. Runs locally on the data you provide: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/minute for anonymous callers). Returns the JSON-LD object, a pretty-printed string, a ready script tag, and validation warnings for any missing required/recommended fields.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | generate builds JSON-LD from type + fields; schemas ignores other inputs and returns the field spec for every supported type. | generate |
| type | No | schema.org type to generate. Required when operation is generate; unknown values are rejected. | |
| fields | No | Flat record keyed by the chosen type field names (e.g. headline, author, datePublished for Article). Strings, arrays, or nested objects (person with name/url; offer with price/priceCurrency; address; rating; questions; steps; breadcrumbs). Empty values are dropped. Run operation schemas for the per-type field list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the request succeeded. |
| operation | No | The operation performed (generate or schemas). |
| result | No | For generate: the structured-data payload. For schemas: a schemas array catalog of supported types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by stating the tool is read-only, non-destructive, local, and rate-limited. This adds critical behavioral context not captured in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with front-loaded purpose. Each sentence contributes meaning. Slightly longer than minimal but appropriate for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (17 types, two operations, output schema), the description covers all necessary aspects: purpose, usage, behavioral traits, output details, and sibling references. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds value by explaining how to use the 'fields' parameter and referencing operation schemas for field details, slightly exceeding the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates schema.org JSON-LD structured data for 17 types. It distinguishes from siblings like seo_meta_tag_generator and seo_open_graph_generator, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool vs alternatives (e.g., 'Use seo_meta_tag_generator for the broader head meta block') and advises to run the 'schemas' operation first. This provides clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_sitemap_generatorARead-onlyIdempotent
Sitemap Generator (Build XML Sitemap From URL List). Serialize a user-supplied list of URLs into a sitemaps.org 0.9-compliant XML document (operation "generate"), or build a that references already-split sitemap files (operation "generateIndex"). Does NOT crawl, fetch, or discover URLs — it formats exactly the entries you pass, XML- escaping each value, optionally emitting the xhtml namespace when hreflang alternates are present. Use seo_robots_txt_generator to control crawler access and point at the finished sitemap, or seo_hreflang_generator when you only need standalone alternate-language tags. Runs locally: read-only, non-destructive, contacts no external service, idempotent, and rate-limited (30 req/min anon, 60 authenticated). Returns the serialized XML, the entry count, the UTF-8 byte size, and warnings for invalid dates, bad changefreq/priority values, or breaches of the 50,000-URL / 50 MB protocol limits.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | "generate" builds a <urlset> from "urls"; "generateIndex" builds a <sitemapindex> from "sitemaps". Defaults to generate. | generate |
| urls | No | URL entries for operation "generate" (required, min 1 valid entry). Entries missing loc are skipped with a warning. | |
| sitemaps | No | Child-sitemap entries for operation "generateIndex" (required for that operation, min 1 valid entry). | |
| prettyPrint | No | When true, indents and newline-separates the XML; false emits a single minified line. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when generation succeeded. |
| operation | No | Echo of the operation performed (generate or generateIndex). |
| result | No | Generation payload for the chosen operation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description adds further behavioral details: runs locally, read-only, non-destructive, no external service calls, idempotent, rate-limited (30/60 req/min), and describes return values (serialized XML, entry count, byte size, warnings). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet thorough, using bullet-like structure within paragraphs. Each sentence adds meaningful information without redundancy. It is front-loaded with the core purpose and then covers behavioral details, usage guidelines, and return values efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the parameter complexity (4 params, nested objects) and the presence of an output schema, the description still fully explains inputs, operations, edge cases (warnings for invalid values, limits), and the nature of the tool (non-destructive, idempotent). It is complete without relying solely on schema or annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds valuable context beyond the schema. It explains the 'operation' enum values, that 'urls' entries must have a 'loc' field, that 'alternates' triggers the xhtml namespace, and describes warnings for invalid dates, changefreq, priority, and protocol limits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Sitemap Generator (Build XML Sitemap From URL List)' and explains two operations: generate and generateIndex. It explicitly says what the tool does not do (crawl, fetch, discover URLs), distinguishing it from related tools like seo_robots_txt_generator and seo_hreflang_generator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool vs alternatives: 'Use seo_robots_txt_generator to control crawler access and point at the finished sitemap, or seo_hreflang_generator when you only need standalone alternate-language tags.' It also states that the tool does not crawl or discover URLs, only formats provided entries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo_title_description_length_checkerARead-onlyIdempotent
SEO Title and Meta Description Length Checker. Analyze an HTML title tag and meta description against Google SERP display limits, estimating rendered pixel width (Arial 18px title, Arial 13px description) rather than raw character count, since Google truncates by pixels. Reports char/word counts, estimated pixel width, the truncation point and truncated preview (with ellipsis), a within-limits flag, a 0-100 score, severity-tagged warnings, and cross-field suggestions for desktop or mobile. Use this to audit or proof an existing snippet before publishing; use seo_meta_tag_generator to build the meta tags themselves, or seo_keyword_density_checker to analyze body content. Runs locally on the text you provide (read-only, non-destructive, contacts no external service) and is rate-limited (30 requests per minute for anonymous callers). Returns a per-field analysis object for title and description plus a suggestions list.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | Operation to run. Only analyze is supported; omit to default to it. | analyze |
| title | Yes | The HTML title tag text to check. Required and must not be blank. Max 10000 characters. | |
| description | Yes | The meta description text to check. Required and must not be blank. Max 10000 characters. | |
| brand | No | Optional brand name. If supplied and it gets truncated out of the visible title, a suggestion advises moving it to the front. | |
| brandSuffix | No | Optional trailing brand suffix (for example a pipe then Acme). If the title ends with it, the tool flags how many chars it consumes. | |
| device | No | Which SERP layout to measure against. Mobile uses narrower pixel limits. Any value other than mobile is treated as desktop. | desktop |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the analysis succeeded. |
| operation | No | The operation performed (always analyze). |
| result | No | The analysis payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, idempotentHint; description adds 'Runs locally on the text you provide (read-only, non-destructive, contacts no external service)' and rate limit of 30 requests per minute for anonymous callers. No contradiction and adds meaningful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is thorough but slightly lengthy; however, every sentence earns its place by adding purpose, usage, behavioral notes, or parameter semantics. It is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, output schema exists), the description covers purpose, usage context, behavioral traits (read-only, rate-limited), parameter details, and output structure. It is fully complete for an agent to decide and use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 6 parameters. Description adds value by explaining the pixel width estimation (Arial font sizes), the purpose of brand and brandSuffix parameters, and details of the output (chars, words, pixel width, truncation point, score, warnings, suggestions). This goes beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes title and meta description lengths against Google SERP pixel limits, with specific verb 'analyze' and resource 'HTML title tag and meta description'. It differentiates from sibling tools seo_meta_tag_generator and seo_keyword_density_checker by explicitly stating what each does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance on when to use ('audit or proof an existing snippet before publishing') and when not to (for building tags, use seo_meta_tag_generator; for body content, use seo_keyword_density_checker). Also notes rate limiting and read-only nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_add_line_numbersARead-onlyIdempotent
Add Line Numbers. Prefix every line of the supplied text with a sequential number, returning the numbered text plus before/after statistics. Choose simple ("N: line"), zero-padded, or a custom template using {line} and {text} placeholders; control the starting number, increment, pad width, and whether blank lines are skipped (kept verbatim and uncounted). Use this to annotate logs, code, or lists; use text_remove_line_numbers for the inverse. Pure local compute: read-only, non-destructive, offline, and rate-limited (60 requests/min for anonymous callers). Returns the numbered result, the final number reached, and original/result line-word-character counts.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Multi-line text to number; split on newline (\n). | |
| startNumber | No | First line number. Values below 1 are clamped to 1. | |
| increment | No | Amount added per numbered line. Values below 1 are clamped to 1. | |
| format | No | Output style. simple and padded emit "<number>: <line>"; padded zero-pads the number; custom uses the customFormat template. | simple |
| customFormat | No | Template used when format is custom; {line} is replaced by the number and {text} by the line content. | {line}: {text} |
| padding | No | Zero-pad width when format is padded; falls back to 3 when 0. Ignored for other formats. | |
| skipEmptyLines | No | When true, blank/whitespace-only lines are kept as-is, not numbered, and counted as skipped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on success. |
| result | No | The numbered text. |
| stats | No | Counts for the input and output plus numbering summary. |
| options | No | The effective settings applied after clamping/normalization. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, etc. Description adds useful context: pure local compute, offline, rate-limited, and behavior for blank lines. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single well-structured paragraph of about 4 sentences, front-loaded with main purpose, and efficiently packs details without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all key aspects: purpose, usage, parameters, return values (numbered result, final number, counts), and constraints (rate limit, offline). Output schema enriches completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage. Description adds value by explaining format options (simple, padded, custom) and control over start, increment, pad width, and blank lines.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Add Line Numbers' with specific verb and resource, explains it prefixes lines with sequential numbers, and distinguishes from sibling tool text_remove_line_numbers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this to annotate logs, code, or lists; use text_remove_line_numbers for the inverse.' Also mentions rate limit and pure local compute, guiding when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_add_prefix_suffixARead-onlyIdempotent
Add Prefix And Suffix To Text. Add a prefix string, a suffix string, or both around every line, every word, or every character of the supplied text, choosing the granularity with targetType (lines, words, or characters). Use text_add_prefix_suffix to wrap, indent, comment out, quote, or tag many elements at once; use text_add_line_numbers instead when you need sequential numbering rather than a fixed repeated affix, and text_joiner when you need to concatenate separate elements with a separator. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the transformed string plus before/after statistics and the effective options.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to transform. Must not be blank; a blank value returns a 400 error. | |
| prefix | No | String prepended to each target element. Empty string adds no prefix. | |
| suffix | No | String appended to each target element. Empty string adds no suffix. | |
| targetType | No | Granularity of the affix. lines wraps each newline-separated line, words wraps each whitespace-separated word (whitespace preserved), characters wraps each character. Any other value returns the text unchanged. | lines |
| skipEmpty | No | When true, blank lines or words are left untouched. Ignored for the characters target. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the transformation succeeded. |
| result | No | The transformed text with prefixes and/or suffixes applied. |
| stats | No | Before and after counts plus a record of what changed. |
| options | No | The effective options after defaults were applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, destructive=false, idempotent=true. Description adds specific rate limit (60 req/min for anonymous), confirms local execution, no external service, and describes return value (transformed string plus stats and effective options).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences pack essential info: purpose, use cases, behavior, and output. No fluff, front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 params, 100% schema coverage, annotations, and an output schema (implied by description mentioning stats), the description covers all needed context: what tool does, how to choose granularity, guidance vs siblings, safety/limits, and return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 5 parameters with 100% description coverage, so baseline is 3. Description mentions targetType and implies use cases for affixes but does not add new parameter-level details beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear action 'Add Prefix And Suffix To Text' and specifies the granularity options (lines, words, characters). It names exact siblings (text_add_line_numbers, text_joiner) to distinguish this tool's purpose of wrapping elements with fixed affixes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (wrap, indent, comment out, quote, tag) and when to use alternatives (sequential numbering -> text_add_line_numbers, concatenate with separator -> text_joiner). Also notes it runs locally, is read-only, and rate-limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_anagram_generatorARead-only
Anagram Generator. Rearrange the letters of the supplied text into anagrams and return them with per-anagram length/is-original flags, summary statistics, and a character-frequency map. Input is cleaned to letters and digits only (punctuation/spaces removed) before permuting. For 8 or fewer cleaned characters it enumerates every distinct permutation deterministically; for longer input it emits random shuffles, so results vary between calls and are not idempotent. Operates only on the input's own letters — it does not consult a dictionary or wordlist, so outputs are letter rearrangements, not real words; for palindrome detection use text_palindrome_checker and for shuffling words/lines use text_randomizer. Pure local compute: read-only, non-destructive, offline, and rate-limited (60 requests/min for anonymous callers). Returns the anagram list, counts, and character frequencies.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Source text to rearrange; cleaned to letters/digits before permuting. Required and non-empty. | |
| maxResults | No | Maximum number of anagrams to return. Clamped into 1-1000. | |
| minLength | No | Minimum length an anagram must have to be included; also the minimum cleaned-text length (shorter input is rejected with 400). Clamped into 1-50. | |
| includeOriginal | No | When true the original (unshuffled) arrangement may appear in results; when false it is excluded. | |
| caseSensitive | No | When false the cleaned text is lowercased before permuting; when true case is preserved. | |
| sortBy | No | Ordering of the returned anagrams. length sorts longest-first; any other value sorts alphabetically. | alphabetical |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on success. |
| result | No | Anagram results and derived statistics. |
| options | No | The effective parameters after clamping/normalization. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes behavioral traits beyond annotations: deterministic for ≤8 chars, random for longer, input cleaning, offline/rate-limiting, and that outputs are not real words. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph covering all key aspects without redundancy. Could be slightly more structured (e.g., bullet points) but all information is necessary and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, no need to detail return values. The description covers input cleaning, deterministic vs random behavior, dictionary absence, alternatives, and constraints (rate limit, offline).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with descriptions. The description adds overall context but does not significantly augment individual parameter semantics beyond what schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates anagrams by rearranging letters, lists return items (flags, stats, frequency map), and distinguishes from sibling tools like text_palindrome_checker and text_randomizer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (anagram generation) and when not to (palindrome detection, word/line shuffling), naming specific alternatives. Also clarifies it does not use a dictionary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_ascii_tableARead-onlyIdempotent
ASCII Table Reference Generator. Generate the full ASCII character reference table: every code point with its decimal, hexadecimal, octal, and binary value, the printable glyph or control-code mnemonic, a description, a category, and a printable flag. Covers standard ASCII (0-127) and optionally extended ASCII (128-255). Use this for a complete lookup table; use text_hex_ascii_converter or conversion_number_base instead to convert a specific string between bases. Runs locally with no external input: read-only, non-destructive, offline, and rate-limited. Returns the table array plus a meta summary.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output detail: standard omits HTML entities; html adds an html_entity field per row. | standard |
| extended | No | When true, include extended ASCII (128-255); otherwise only 0-127. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on success. |
| table | No | One entry per character code in range. |
| meta | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint), the description adds that the tool runs locally with no external input, is read-only, non-destructive, offline, and rate-limited. These details align with and enhance the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences plus a practical usage note. It is front-loaded with the main purpose and efficiently covers all key aspects without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, an output schema exists, and the description covers purpose, usage, parameters, behavior, and safety. No gaps are evident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description mentions format and extended options but does not add substantial meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates the full ASCII character reference table with all code points, values, glyphs, descriptions, categories, and printable flags. It explicitly distinguishes from sibling tools like text_hex_ascii_converter and conversion_number_base.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use guidance: 'Use this for a complete lookup table; use text_hex_ascii_converter or conversion_number_base instead to convert a specific string between bases.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_ascii_table_postARead-onlyIdempotent
ASCII Table Reference Generator. Generate the full ASCII character reference table: every code point with its decimal, hexadecimal, octal, and binary value, the printable glyph or control-code mnemonic, a description, a category, and a printable flag. Covers standard ASCII (0-127) and optionally extended ASCII (128-255). Use this for a complete lookup table; use text_hex_ascii_converter or conversion_number_base instead to convert a specific string between bases. Runs locally with no external input: read-only, non-destructive, offline, and rate-limited. Returns the table array plus a meta summary.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output detail: standard omits HTML entities; html adds an html_entity field per row. | standard |
| extended | No | When true, include extended ASCII (128-255); otherwise only 0-127. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on success. |
| table | No | One entry per character code in range. |
| meta | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds behavioral context: 'Runs locally with no external input: read-only, non-destructive, offline, and rate-limited.' This enhances transparency beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprised of 4 sentences, each essential. It front-loads the core purpose and efficiently covers scope, alternatives, and behavior. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's role as a reference table generator with two parameters, the description covers output details (table array plus meta summary), parameter effects, and relevant alternatives among many siblings. The presence of an output schema offloads return value details, making the description appropriately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has full description coverage for both parameters. The description adds meaning by explaining the effect of format (standard vs html) and extended (include 128-255) in context of the output, without repeating schema details verbatim.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states that the tool generates the full ASCII character reference table, detailing what it covers (code points, values, glyphs, etc.). It clearly distinguishes from siblings like text_hex_ascii_converter and conversion_number_base.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use (complete lookup table) and when-not-to-use (for converting specific strings, use alternatives). It also states that it requires no external input, giving clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_ascii_textARead-onlyIdempotent
ASCII Banner Text Generator. Generate a multi-line ASCII-art banner (figlet-style large letters) from a short text string, using either the block font (6 rows of hash characters) or the small font (3 rows of Unicode block glyphs). Input is uppercased; letters A-Z, digits 0-9, space and a few punctuation marks are supported and unknown characters render as blank space. Use this for terminal headers, README titles and decorative plain-text banners; use text_ascii_table instead to look up ASCII character codes (a reference chart, not a banner), or text_ascii_art to convert an image to ASCII. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the rendered banner string plus size statistics and the effective options.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to render as a banner. Required and non-blank; maximum 50 characters. Uppercased before rendering. | |
| font | No | Font face. block is 6 rows tall using hash characters; small is 3 rows tall using Unicode block glyphs. Unknown values fall back to block. | block |
| width | No | Reported target line width in characters; clamped to the range 20-200. Echoed in options and does not wrap or truncate the banner. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether generation succeeded. |
| result | No | The rendered ASCII banner as newline-joined rows. |
| stats | No | Size metrics for the input and the rendered banner. |
| options | No | Effective options after defaults and clamping. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds valuable behavioral context: it runs locally, is rate-limited (60 req/min for anonymous callers), supports specific characters (A-Z, 0-9, space, few punctuation), and unknown characters render as blank space. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with purpose. Every sentence adds value, though the sentence about local execution and rate limits is slightly verbose and could be condensed. Overall, it's efficient for a tool with 3 parameters and sibling comparisons.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, output schema present, rich annotations), the description is completely sufficient. It covers all aspects: purpose, usage context, behavioral traits, parameter details, limitations, and sibling differentiation. No missing information for proper tool selection or invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning beyond the schema: for 'text', it clarifies required, max length 50, and uppercasing; for 'font', it explains the visual difference (6 rows, hash chars vs. 3 rows, Unicode block glyphs) and fallback behavior; for 'width', it clarifies it's a reported line width, not a wrap/truncation setting, and values are clamped.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates ASCII-art banners from text, specifies the two fonts (block and small), and the character set. It distinguishes itself from sibling tools text_ascii_table and text_ascii_art by explaining they serve different purposes (reference chart vs. image-to-ASCII conversion).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('for terminal headers, README titles and decorative plain-text banners') and directly names alternative tools for different tasks ('use text_ascii_table instead to look up ASCII character codes... or text_ascii_art to convert an image to ASCII').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_bash_escaperARead-onlyIdempotent
Bash CLI Shell Escaper. Escape (or, with reverse, unescape) text for safe use on the Bash/shell command line, choosing one of four quoting styles so the string survives the shell's metacharacter parsing intact. Modes: single (wrap in '...', safest, literal), double (wrap in "...", keeps interpolation, escapes \ " $ `), backslash (prefix each shell metacharacter with , no surrounding quotes), and ansi-c (wrap in $'...' with C-style \n \t \NNN octal escapes for control bytes). Prefer this over text_string_escape when the target is specifically a shell command or script; use text_string_escape for SQL/CSV/JS/regex/PHP/XML syntaxes. Runs locally, read-only, non-destructive, deterministic, and rate-limited (anonymous 30/min, 200/hour, 1000/day). Returns the escaped or unescaped string plus the echoed mode/reverse and input/output lengths.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to escape, or the already-escaped text to unescape when reverse is true. An empty string is allowed. | |
| mode | No | Bash quoting style. single='...' literal (safest); double="..." preserves $ and ` interpolation while escaping \ " $ `; backslash prefixes each metacharacter with a backslash and adds no quotes; ansi-c=$'...' uses C-style and octal escapes for control characters. | single |
| reverse | No | When false (default) escape the text; when true reverse the chosen mode to recover the original string. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation succeeded. |
| input | No | The original text, echoed back. |
| mode | No | The effective quoting mode used (single, double, backslash, or ansi-c). |
| reverse | No | Whether the request unescaped (true) or escaped (false). |
| result | No | The escaped or unescaped output string. |
| inputLength | No | Character length of the input text. |
| outputLength | No | Character length of the result string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations, including that it runs locally, is read-only, non-destructive, deterministic, and rate-limited (with specific limits). It also states the return format (escaped/unescaped string plus metadata). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence adds value, covering purpose, modes, usage guidance, behavior, and constraints. The description is well-structured, efficient, and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of output schema and 3 parameters, the description fully covers behavior, return values, rate limits, and sibling differentiation, making it complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description enriches parameter understanding by explaining the four modes in detail and the effect of the reverse parameter, adding value beyond the schema's enum descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a Bash CLI Shell Escaper with four quoting styles and reverse operation. It distinguishes itself from text_string_escape by specifying the target use case (shell commands vs. other syntaxes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises preferring this tool over text_string_escape for shell commands and directs to the sibling for SQL/CSV/JS/regex/PHP/XML, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_case_converterARead-onlyIdempotent
Convert Text Case (Upper, Lower, Title, camelCase, snake_case, kebab-case, …). Convert the letter case of text to one of 15 styles: UPPERCASE, lowercase, Title Case, Sentence case, Capitalize Words, camelCase, PascalCase, snake_case, SCREAMING_SNAKE_CASE, kebab-case, SCREAMING-KEBAB-CASE, dot.case, path/case, aLtErNaTiNg, or character reverse. Use it to reformat identifiers, headings, or prose; use reverse_text instead when you only need character/word/line/sentence reversal, or sort_lines to reorder lines. Runs locally on the text you provide: read-only, non-destructive, deterministic, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the converted text plus character/word/line statistics for the original and converted text.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to convert. May be empty, which returns an empty result. | |
| caseType | No | Which case style to apply. Unknown values return the text unchanged. | upper |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a 200 response. |
| result | No | The case-converted output text. |
| caseType | No | The case style that was applied, echoed back. |
| stats | No | Text statistics for the original and converted text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds critical context beyond annotations: 'Runs locally', 'read-only', 'non-destructive', 'deterministic', 'contacts no external service', 'rate-limited (60 requests/minute)'. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose. First sentence enumerates styles, second adds guidance and behavior. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, description mentions return value (converted text plus statistics). Annotations provide safety profile. Complete for a text conversion tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description lists the 15 case styles, which is redundant with the enum in schema, adding no new meaning beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Convert Text Case' and lists 15 specific styles. It differentiates from sibling tools reverse_text and sort_lines by specifying when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use it to reformat identifiers, headings, or prose; use reverse_text instead when you only need character/word/line/sentence reversal, or sort_lines to reorder lines.' Provides clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_counterARead-onlyIdempotent
Text Counter (character, word, and line tally). Count the characters, characters-without-spaces, words, lines, sentences and paragraphs of one block of text, plus average characters-per-word and words-per-sentence, an estimated reading time at three speeds, and (when the text exceeds 10 words) the ten most frequent a-z/space characters. Use this for a quick plain tally; use text_text_statistics instead for a richer linguistic profile with readability scores, or text_line_counter when you only need line counts and line-length metrics. Runs locally on the supplied text: read-only, non-destructive, contacts no external service, and is rate-limited. Returns a stats object, a readingTime object, and a topCharacters map.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to count. May be empty; an empty string yields zero counts. Counting is Unicode code-point based; lines split on newlines, sentences split on runs of . ! ?, paragraphs split on blank lines. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when counting succeeded. |
| stats | No | Core counts and averages. |
| readingTime | No | Estimated reading time strings (e.g. 30 sec, 2 min). |
| topCharacters | No | Map of the up-to-10 most frequent a-z/space characters to their counts. Empty object when the text has 10 or fewer words. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds that it runs locally, is non-destructive, contacts no external service, and is rate-limited. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise yet thorough, front-loads core functionality, lists metrics, then gives usage guidelines and behavioral notes. Every sentence is valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with output schema present, the description covers all essential aspects: what it counts, usage guidance, behavior, and return structure. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the description adds meaning about empty strings yielding zero counts, Unicode code-point based counting, and how lines, sentences, paragraphs are split.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it counts characters, words, lines, sentences, paragraphs, averages, reading time, and top characters. It distinguishes itself by naming alternatives like text_text_statistics and text_line_counter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (quick plain tally) and when to use alternatives (text_text_statistics for richer linguistic profile, text_line_counter for just line counts).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_diffARead-onlyIdempotent
Text Diff. Compare two text inputs and report every line-level difference using an LCS algorithm. Choose a view via diffType: 'unified' (single change list), 'side-by-side' (paired left/right lines), or 'inline'. Optional ignoreCase and ignoreWhitespace normalize before comparing. Use this for plain-text/code comparison; use file_comparer for the same diff over uploaded files, and text_find_replace to substitute matches rather than view changes. Pure local compute: read-only, non-destructive, offline, and rate-limited (60 requests/min for anonymous callers). Returns the diff segments plus per-text and change statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| text1 | Yes | First (original/left) text; compared line by line against text2. | |
| text2 | Yes | Second (modified/right) text; differences are reported relative to text1. | |
| diffType | No | Output shape of the diff segments; any other value falls back to unified. | unified |
| ignoreCase | No | Lowercase both texts before comparing so case differences are not reported. | |
| ignoreWhitespace | No | Trim and collapse runs of whitespace before comparing so spacing differences are not reported. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on success. |
| diff | No | Ordered diff segments; field set varies by diffType (unified adds prefix/lineNumber/text, side-by-side adds line1/line2/text1/text2, inline adds text). |
| stats | No | Size metrics for each input and a change tally. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent; description adds pure local compute, offline, rate limits, and output details. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, efficient sentences, no redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, behavior, parameters, and output; fully adequate for an AI agent given the complexity and rich annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions; description adds meaningful context like diffType views and normalization options, enhancing understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it compares two text inputs line-by-line using LCS algorithm, and distinguishes from sibling tools file_comparer and text_find_replace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool vs. file_comparer (for files) and text_find_replace (for substitution), with clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_duplicate_line_removerARead-onlyIdempotent
Duplicate Line Remover. Remove duplicate LINES from text, keeping the first occurrence of each, with options for case-sensitive matching, whitespace trimming, empty-line handling, and alphabetical sorting of the result. Operates on whole lines split on newlines - use text_duplicate_word_remover to dedupe individual words, text_remove_duplicate_characters to dedupe characters, or text_sort_lines to only reorder lines without removing duplicates. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the deduplicated text plus before/after line statistics and a top-10 list of the most repeated lines.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Multi-line text to deduplicate, split on newline. Blank input returns empty output with zeroed stats. | |
| caseSensitive | No | When true, lines differing only in letter case are kept as distinct; when false (default), comparison is case-insensitive. | |
| trimWhitespace | No | When true (default), leading/trailing whitespace is stripped before comparing and in output; when false, whitespace is significant. | |
| keepEmptyLines | No | When true, blank lines are preserved and deduplicated; when false (default), all empty lines are dropped. | |
| sortResults | No | When true, surviving unique lines are sorted alphabetically (case-aware per caseSensitive); when false (default), original order is preserved. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether deduplication succeeded. |
| result | No | The deduplicated text, unique lines joined by newline. |
| stats | No | Before/after line counts and reduction metric. |
| duplicateAnalysis | No | Up to 10 most-repeated lines, sorted by descending count. |
| options | No | The effective options after defaults were applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent. Description adds: runs locally, no external service, rate-limited (60 req/min), returns statistics and top-10 repeated lines. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured but somewhat long; however, every sentence adds value including purpose, options, sibling differentiation, and safety. Could be slightly more concise but earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 boolean parameters with defaults documented in schema, and existence of output schema (mentioned in description), the description covers purpose, behavior, alternatives, return structure, and constraints. Fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions. The description does not add new parameter details beyond summarizing options, but the schema already fully documents each parameter, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool removes duplicate lines from text, keeping first occurrences, with specific options. It distinguishes from siblings like word and character deduplication tools, meeting the 'specific verb+resource' criterion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly lists alternatives: text_duplicate_word_remover, text_remove_duplicate_characters, text_sort_lines. Also notes local execution, rate limits, and non-destructive nature, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_duplicate_word_removerARead-onlyIdempotent
Duplicate Word Remover (Deduplicate Words In Text). Removes duplicate words from text, keeping the first occurrence of each word and discarding later repeats. Words are split on whitespace. Use this to dedupe a word list or tags; use text_duplicate_line_remover to dedupe whole lines and text_remove_duplicate_characters to dedupe individual characters. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/min anonymous). Returns the deduplicated text, before/after statistics (original, unique, removed, reduction percent), and a top-15 analysis of the most-repeated words.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to deduplicate. Split into words on any run of whitespace. | |
| caseSensitive | No | When true, Cat and cat are treated as different words; when false, comparison is case-insensitive. | |
| removePunctuation | No | When true, punctuation is stripped before comparing words so cat. and cat match. | |
| sortResults | No | When true, the surviving unique words are sorted alphabetically; when false, original order is preserved. | |
| outputFormat | No | How to join the unique words in the output: spaces joins with single spaces, lines joins with newlines, commas joins with a comma and space. | spaces |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether deduplication succeeded. |
| result | No | The deduplicated output text joined per outputFormat. |
| stats | No | Before/after word counts. |
| duplicateAnalysis | No | Up to 15 most-repeated words, sorted by count descending. |
| options | No | The effective options applied (caseSensitive, removePunctuation, sortResults, outputFormat). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, and idempotent. Description adds valuable context: runs locally, rate-limited (60/min anonymous), and provides return statistics. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise (5 sentences) and front-loaded with purpose. Every sentence adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, output schema exists, and sibling tools, the description is complete: covers purpose, usage, behavior, return values (statistics and top-15 analysis).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description does not add new parameter meaning beyond what the schema already provides; words are split on whitespace is mentioned in schema too.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool removes duplicate words from text, keeping first occurrence, and splits on whitespace. It distinguishes from sibling tools text_duplicate_line_remover and text_remove_duplicate_characters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool (dedupe word list/tags) and when to use alternatives (line deduplication, character deduplication). Provides clear context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_extract_emailsARead-onlyIdempotent
Extract Email Addresses From Text. Extract every email address found in a block of arbitrary text using a regex scanner, with selectable strict/standard/permissive matching, optional deduplication, alphabetical sorting, surrounding-context capture, and a unique domain list. Use this for harvesting addresses from logs, documents, or pasted content; use text_extract_urls instead when you need links rather than emails. Matching is pattern-based only (it does not verify deliverability or check MX records over the network). Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests per minute for anonymous callers). Returns the matched emails plus per-domain, TLD, and count statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Source text to scan for email addresses. Must not be blank. | |
| extractionMode | No | Regex strictness. standard is a balanced pattern, strict requires well-formed local and domain parts, permissive matches the widest RFC-style character set. | standard |
| removeDuplicates | No | Collapse repeated addresses (case-insensitive) so each email appears once. | |
| sortResults | No | Sort the returned emails (and domains) alphabetically instead of by position of first appearance. | |
| includeContext | No | Include a snippet of surrounding text around each match in the context field. | |
| contextLength | No | Characters of context to capture on each side of a match when includeContext is true (clamped to the 10-200 range). | |
| extractDomains | No | Also return a deduplicated list of the domains that appear in the matched addresses. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether extraction succeeded. |
| emails | No | The matched email addresses, lowercased. |
| stats | No | Statistics about the source text and the extraction. |
| options | No | The effective options after defaults were applied. |
| domains | No | Deduplicated domain list (present only when extractDomains is true and matches exist). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, destructiveHint, idempotentHint. Description adds that it runs locally, is non-destructive, contacts no external service, and has rate limits, providing valuable context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is slightly verbose but well-structured with a clear purpose, usage, and behavioral notes. Every sentence adds value, though some phrases could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, full schema coverage, and presence of output schema, the description is comprehensive. It covers all modes, options, constraints, and behavioral traits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented. Description adds additional context (e.g., 'regex strictness' for extractionMode) but the schema already covers details. Good but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it extracts email addresses from text using a regex scanner. Distinguishes itself from the sibling tool text_extract_urls, indicating when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says use this for harvesting addresses from logs/documents, and use text_extract_urls for links. Notes that matching is pattern-based only and does not verify deliverability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_extract_urlsARead-onlyIdempotent
Extract URLs From Text. Scan a block of text and return every URL it contains, with per-match scheme, byte position, line number, and optional surrounding context. Filter by extraction mode (all, http, https, ftp, or a custom scheme list), deduplicate case-insensitively, and sort alphabetically. Use this for hyperlinks and protocol URIs; use text_extract_emails instead when you only want email addresses. Pure regex extraction — read-only, non-destructive, performs no network requests against the found URLs, runs locally with no auth. Rate limited to 30 requests/min per IP (text category). Returns the matched urls array plus stats (original text metrics + extraction counts and per-scheme tally) and the resolved options.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Source text to scan for URLs. Required and non-empty. | |
| extractionMode | No | Which schemes to match. all = http/https/ftp plus many app schemes and bare www. links; http = http or https; https = https only; ftp = ftp or ftps; custom = use customSchemes. | all |
| customSchemes | No | Comma-separated scheme list (e.g. "myapp,custom") used only when extractionMode is custom. Required and non-empty in that mode. | |
| removeDuplicates | No | Drop case-insensitive duplicate URLs from the results. | |
| sortResults | No | Sort results alphabetically by URL. | |
| includeContext | No | Include surrounding text around each match. | |
| contextLength | No | Characters of context on each side when includeContext is true. Clamped to 10-200. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when extraction succeeded. |
| urls | No | Matched URLs, after dedupe/sort. |
| stats | No | Original-text metrics and extraction summary. |
| options | No | Resolved options actually applied. |
| error | No | Error message when success is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), description adds crucial traits: pure regex extraction, read-only, non-destructive, no network requests, local with no auth, rate limited to 30 req/min. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is comprehensive but slightly long. It is front-loaded with main purpose and includes all critical details. Minor verbosity in listing every feature; still efficient and well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters with full schema description and existence of output schema, the description covers purpose, behavior, limitations, rate limit, alternatives, and output summary completely. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; description summarizes parameters (e.g., 'Filter by extraction mode', 'deduplicate case-insensitively') but repeats some schema info. It adds value by explaining output structure (per-match fields) not in input schema, and notes constraints like 'Required and non-empty'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Extract URLs From Text' with specific verb and resource. It details scanning text, returning per-match details, and distinguishes from sibling 'text_extract_emails' for email addresses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context for use: 'Use this for hyperlinks and protocol URIs; use text_extract_emails instead when you only want email addresses.' Also mentions rate limits and local execution, but does not exhaustively list when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_find_replaceARead-onlyIdempotent
Find and Replace Text with Optional Regex. Find and replace substrings in a block of text, with optional case-insensitive matching, JavaScript regular-expression patterns, and a replace-all-versus-first-match toggle. Use this for literal or regex search-and-replace; use webdev_regex_tester to test a pattern before applying it, or text_text_splitter to break text on a delimiter instead of rewriting it. Returns a new string and never mutates the input. Runs locally on the text you provide: read-only, contacts no external service, and is rate-limited (30 requests/minute for anonymous callers). Returns the rewritten text plus before/after statistics and found/replaced/remaining match counts.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Source text to search within. Must not be empty (empty returns HTTP 400). | |
| findText | Yes | Substring or regex pattern to find. Must not be empty (empty returns HTTP 400). Interpreted as a regular expression when useRegex is true. | |
| replaceText | No | Replacement string substituted for each match. Defaults to empty (which deletes matches). | |
| caseSensitive | No | When false (default), matching ignores letter case. When true, case must match exactly. | |
| useRegex | No | When true, findText is treated as a JavaScript regular expression. An invalid pattern returns HTTP 400. | |
| replaceAll | No | When true (default), replaces every match. When false, replaces only the first match. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation succeeded. |
| result | No | The rewritten text after replacements. |
| stats | No | Before/after text metrics and match accounting. |
| options | No | Echo of the normalized options applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, destructiveHint, idempotentHint), the description adds important behavioral details: runs locally, never mutates input, contacts no external service, and specifies rate limits (30 req/min for anonymous). It also explains what the return includes (statistics, counts). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a clear purpose sentence, followed by usage guidance, then behavioral details. It is informative without being verbose. Could be slightly more concise by removing the 'Find and Replace Text with Optional Regex' repetition, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 6 parameters, 2 required, and the existence of an output schema, the description fully covers all relevant aspects: input constraints (empty returns HTTP 400), behavior (local, read-only, rate-limited), return value (statistics, counts), and alternatives. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage with clear descriptions for all 6 parameters. The description's high-level summary of features (case-insensitive, regex, replace-all toggle) provides minimal additional meaning beyond the schema. Baseline 3 is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs find-and-replace on text with optional regex, and directly distinguishes itself from siblings like webdev_regex_tester and text_text_splitter by naming specific use cases for each. This meets the highest standard of purpose clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool ('for literal or regex search-and-replace') and provides named alternatives ('use webdev_regex_tester to test a pattern before applying it, or text_text_splitter to break text on a delimiter'). This is exemplary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_line_counterARead-onlyIdempotent
Count And Analyze Text Lines. Count and measure the lines of a text block: returns total lines, non-empty lines, blank lines, and line-length stats (max/min/average length plus the 1-based line numbers of the longest and shortest lines) and a length-bucket distribution. Optionally returns the text with line numbers prepended. Use this for line-focused metrics; use text_counter or text_text_statistics for word, character, sentence, and readability metrics, or text_sort_lines to reorder lines. It does NOT deduplicate or detect duplicate/unique lines. Pure local compute: read-only, non-destructive, offline, rate-limited (60 requests/minute for anonymous callers). Returns a stats object, an optional numberedText string, and a lengthDistribution array.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to analyze; split into lines on newline. Empty input yields zeroed stats. | |
| showLineNumbers | No | When true, numberedText prepends a right-padded line number (e.g. " 1: line") to each line; otherwise numberedText echoes the input unchanged. | |
| skipBlankLines | No | When true (and showLineNumbers is true), blank/whitespace-only lines are emitted verbatim and not assigned a number. Does not affect the stats counts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on success. |
| stats | No | Line metrics for the input. |
| numberedText | No | Input with line numbers prepended when showLineNumbers is true; otherwise the input verbatim. Empty for empty input. |
| lengthDistribution | No | Line-length buckets (0-20, 21-50, 51-80, 81-120, 120+); empty buckets omitted. |
| options | No | Echo of the effective request options. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), the description adds that it is 'pure local compute: read-only, non-destructive, offline, rate-limited (60 requests/minute)'. It also handles edge cases like empty input yielding zeroed stats, and explains the behavior of showLineNumbers and skipBlankLines parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, starting with the core purpose, followed by outputs, usage guidance, limitations, and non-functional properties. It is efficient and every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, output schema exists), the description covers all necessary aspects: input handling, output details, rate limits, safety profile, and comparisons to siblings. It is complete for agent selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds minimal extra per-parameter detail beyond the schema; it reiterates parameter effects but doesn't provide additional semantic meaning for the parameters. It does mention edge cases like empty input, which is slightly beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool counts and analyzes text lines, providing specific metrics like total lines, non-empty lines, blank lines, line-length stats, and line numbers. It also distinguishes itself from sibling tools by naming alternatives (text_counter, text_text_statistics, text_sort_lines) and explaining what it does not do (deduplication).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: 'Use this for line-focused metrics; use text_counter or text_text_statistics for word, character, sentence, and readability metrics, or text_sort_lines to reorder lines.' It also clarifies that it does not deduplicate, helping the agent decide when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_lorem_ipsumARead-only
Generate Random Lorem Ipsum Placeholder Text. Generate random classic Latin lorem ipsum filler text as words, sentences, paragraphs, or a bullet list, in plain text or HTML. Output is non-deterministic (each call uses random selection, so words and lengths vary) except for the optional fixed opening Lorem ipsum dolor sit amet clause. Use this for neutral placeholder/dummy copy in mockups, UI prototypes, and layout testing. Prefer text_lorem_ipsum_variations when you need themed vocabularies (bacon, cupcake, pirate, Shakespeare, tech, medical); prefer data_data_faker or data_sample_data_generator when you need structured fake records (names, emails, rows) rather than prose. Read-only, offline, no auth; rate limited to 60 requests/minute for anonymous callers. Returns the generated text plus character/word counts.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Unit of text to generate. Invalid values fall back to paragraphs. | paragraphs |
| count | No | How many units (words, sentences, paragraphs, or list items) to produce. Clamped to 1-1000. | |
| startWithLorem | No | Begin the output with the canonical Lorem ipsum dolor sit amet opening. Any value other than false is treated as true. | |
| format | No | Output format. html wraps paragraphs in p tags and lists in ul/li; anything other than html yields plain text. | plain |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when generation succeeded. |
| result | No | The generated lorem ipsum text (plain or HTML per the format parameter). |
| stats | No | Counts for the generated text. Always includes words, characters, charactersNoSpaces; plus paragraphs (type=paragraphs), sentences (type=sentences), or items (type=lists). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint. Description adds non-deterministic nature, optional fixed opening, and rate limits (60 req/min) without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded with key info (verb, resource, variants), and every sentence adds value. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, 100% schema coverage, annotations, and output schema existence, the description covers purpose, usage, behavioral traits, and output details (character/word counts) comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter is described in schema. Description adds minor clarifications like fallback behavior for invalid type and clamping range, but does not significantly enhance understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates random Lorem Ipsum placeholder text, and distinguishes from siblings by mentioning text_lorem_ipsum_variations for themed vocabularies and data_data_faker/data_sample_data_generator for structured fake records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (neutral placeholder/dummy copy in mockups, UI prototypes, layout testing) and when not to, with specific alternative tools named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_lorem_ipsum_variationsARead-only
Generate Themed Lorem Ipsum Placeholder Text. Generate themed placeholder text in one of seven vocabularies (classic Lorem Ipsum, bacon, cupcake, pirate, Shakespeare, tech, medical) as words, sentences, or paragraphs. Use this when you want a non-Latin themed vocabulary; use text_lorem_ipsum instead for plain Lorem Ipsum with HTML list output. Output is RANDOM and varies per call (words and sentence lengths are picked at random), so repeat calls return different text. Read-only, non-destructive, pure local compute (no network or persistence). Rate limited to 60 requests/minute for anonymous callers. Returns the generated text plus word/sentence/paragraph/character stats and the resolved generation options.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Vocabulary theme for the placeholder text. | lorem |
| format | No | Output unit. Unrecognised values fall back to paragraphs. | paragraphs |
| count | No | How many words/sentences/paragraphs to generate; clamped to 1-50. | |
| startWithTraditional | No | When true, begin output with the canonical "Lorem ipsum dolor sit amet..." line (consuming part of count). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when generation succeeded. |
| result | No | The generated placeholder text. |
| stats | No | Text and generation statistics. |
| options | No | Echoed effective options plus the list of available themes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses randomness of output, read-only nature, pure local compute, and rate limiting (60 req/min for anonymous). Annotations already indicate readOnlyHint=true and destructiveHint=false, and the description adds valuable behavioral context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, starting with purpose, then details, then sibling comparison, then behavioral notes. Every sentence adds value, though it could be slightly more concise by merging some sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 params, enums, output schema), the description covers generation behavior, output content (text + stats), and constraints (randomness, rate limit). It is complete for selecting and invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 4 parameters. The description adds minimal additional semantics beyond enumerating themes and formats already available in the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates themed Lorem Ipsum placeholder text with specific vocabularies and formats. It explicitly differentiates itself from sibling tool text_lorem_ipsum by mentioning themed vs plain and output format differences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (when you want a non-Latin themed vocabulary) and when to use the sibling tool text_lorem_ipsum (for plain Lorem Ipsum with HTML list output). This is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_palindrome_checkerARead-onlyIdempotent
Palindrome Checker. Check whether text reads the same forwards and backwards, at the whole-string level and per individual word, with options to ignore case, spaces, and punctuation. Use this to detect palindromes (for example racecar, or A man a plan a canal Panama) and to list which words in a phrase are palindromic; use text_reverse_text instead when you only need to flip text without a same-forwards-backwards verdict, or text_anagram_generator to rearrange letters. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests per minute for anonymous callers). Returns an isPalindrome boolean, the processed and reversed strings, the palindrome center, per-word analysis, and summary statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to test for palindrome (must not be blank). Whitespace, case, and punctuation are handled per the options below. | |
| caseSensitive | No | When true, uppercase and lowercase letters are treated as distinct; when false (default) the comparison is case-insensitive. | |
| ignoreSpaces | No | When true (default) all whitespace is stripped before comparison, so spaced phrases can still qualify; when false spaces must mirror. | |
| ignorePunctuation | No | When true (default) punctuation and symbols (anything that is not a letter, digit, or space) are stripped before comparison; when false they must mirror. | |
| analyzeWords | No | When true (default) each whitespace-separated word is also tested individually and reported under wordAnalysis; when false only the whole-string verdict is computed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the check succeeded. |
| result | No | Whole-string palindrome verdict and the strings it was derived from. |
| wordAnalysis | No | Per-word results, present only when analyzeWords is true. |
| palindromicWords | No | Subset of wordAnalysis whose entries are palindromes. |
| nonPalindromicWords | No | Subset of wordAnalysis whose entries are not palindromes. |
| statistics | No | Aggregate counts over the input and the per-word analysis. |
| options | No | The effective options after defaults were applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. Description adds valuable context: runs locally, no external service, rate-limited (60 req/min), and details return fields (isPalindrome, reversed strings, per-word analysis, etc.), going beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: starts with purpose, then usage guidelines with alternatives, followed by behavioral context, and ends with output summary. It is front-loaded and every sentence adds value, though somewhat lengthy, it remains informative without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (context indicates has output schema: true), the description does not need to detail return values but does mention key fields. It covers all aspects: functionality, options, behavior, limitations (rate limit, local execution), and comparisons with siblings, making it complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions. The description adds context by summarizing options (caseSensitive, ignoreSpaces, ignorePunctuation, analyzeWords) and their effects, but does not provide new parameter-specific details beyond the schema. Slight added value over schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks if text reads the same forwards and backwards at whole-string and per-word levels, with options to ignore case/spaces/punctuation. It distinguishes from siblings text_reverse_text and text_anagram_generator by specifying when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (palindrome detection) and when to use alternatives (reverse_text for flipping, anagram_generator for rearranging). Also mentions it runs locally and is rate-limited, providing clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_remove_duplicate_charactersARead-onlyIdempotent
Remove Duplicate Characters From Text. Removes repeated characters from text so each character appears once, keeping either the first or the last occurrence. Use this to dedupe at the character level (compress aabbcc to abc); use text_duplicate_word_remover to dedupe whole words and text_duplicate_line_remover to dedupe whole lines. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the deduplicated string, before/after statistics (length, character and unique-character counts, count removed, reduction percent), the effective options, and a sample list of up to 20 removed duplicates.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to deduplicate at the character level. Must not be blank. | |
| caseSensitive | No | When true, A and a count as different characters; when false, comparison is case-insensitive. | |
| preserveWhitespace | No | When true, every whitespace character is kept and never treated as a duplicate; when false, whitespace is deduplicated like any other character. | |
| firstOccurrence | No | When true, the first occurrence of each character is kept; when false, the last occurrence is kept. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether deduplication succeeded. |
| result | No | The deduplicated output text. |
| stats | No | Before/after character statistics. |
| options | No | The effective options applied (caseSensitive, preserveWhitespace, firstOccurrence). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds further transparency: 'Runs locally... read-only, non-destructive, contacts no external service, rate-limited (60 requests/minute for anonymous callers),' and details the return structure. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and informative, but somewhat verbose for a simple deduplication tool. It could be more concise without losing clarity, but it earns a 4 for effective communication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, the description need not detail return values but still does. It covers purpose, usage, behavior, parameters, and return, making it complete for the tool's complexity. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds minimal extra meaning beyond the schema; it mentions 'keeping either the first or the last occurrence' which relates to firstOccurrence, but the schema already has descriptions. Little added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Remove Duplicate Characters From Text' and explains it removes repeated characters keeping first or last occurrence. It explicitly distinguishes from sibling tools text_duplicate_word_remover and text_duplicate_line_remover, ensuring no confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('dedupe at the character level') and when to use alternatives ('text_duplicate_word_remover for whole words, text_duplicate_line_remover for whole lines'). It also notes that it runs locally, is read-only, non-destructive, and rate-limited, giving comprehensive usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_remove_line_numbersARead-onlyIdempotent
Remove Line Numbers. Strip leading line numbers and numbered prefixes from each line of the supplied text, returning the cleaned text plus before/after statistics. In auto mode it samples the first lines to detect the numbering style (colon, dot, parenthesis, bracketed, space-separated, or zero-padded) and removes the best match; pattern mode applies your own regex; manual mode strips any leading digits with common separators. This is the inverse of text_add_line_numbers; use this to clean pasted code listings, logs, or numbered output. Pure local compute: read-only, non-destructive, offline, and rate-limited (60 requests/min for anonymous callers). Returns the cleaned result, counts of processed and unchanged lines, and the detected pattern with a confidence percentage.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Multi-line text to clean; split on newline (\n). Empty input is rejected with HTTP 400. | |
| detectionMode | No | How numbers are found. auto detects the dominant style from a 10-line sample; pattern uses customPattern; manual strips leading digits followed by a separator. | auto |
| customPattern | No | Regex used only when detectionMode is pattern; accepts a bare body or /body/flags form. Capture group 1 or 2 is kept as the cleaned line. Invalid regex returns HTTP 400. | |
| removeAll | No | Reserved flag accepted for forward compatibility; does not change current output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on success. |
| result | No | The text with line numbers removed. |
| stats | No | Counts for the input and output plus detection summary. |
| options | No | The effective settings applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: 'Pure local compute: read-only, non-destructive, offline, and rate-limited (60 requests/min for anonymous callers).' It also details return values (cleaned result, counts, pattern, confidence) and error conditions (empty input, invalid regex). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at 5 sentences, front-loaded with the main purpose and then providing mode details and use cases. Every sentence adds value without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (three modes, regex parameter, rate limiting, return statistics) and the presence of an output schema, the description covers all necessary aspects: modes, usage scenarios, limitations (rate limit, error handling), and return values. It is fully adequate for an AI agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds significant meaning: explains auto mode samples first 10 lines, pattern mode uses customRegex, manual strips leading digits. It clarifies the reserved flag and default behaviors, enhancing understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Remove Line Numbers' as the core function and specifies stripping leading line numbers and numbered prefixes. It distinguishes from sibling tool text_add_line_numbers by calling itself the inverse, providing clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases: cleaning pasted code listings, logs, or numbered output. It also mentions it's the inverse of text_add_line_numbers. However, it doesn't explicitly state when not to use the tool or list alternative tools, but the guidance is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_reverse_textARead-onlyIdempotent
Reverse Text by Characters, Words, Lines, Sentences, or Paragraphs. Reverse the order of a text block at a chosen granularity (characters, words, lines, sentences, or paragraphs), optionally preserving per-line layout. Use text_reverse_text to flip or mirror text; use text_palindrome_checker to test whether text reads the same both ways, text_case_converter to change letter case, and text_randomizer to shuffle rather than reverse. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the reversed string plus before/after text statistics and the effective options.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Input text to reverse. Must not be blank. | |
| reverseType | No | Granularity of reversal (defaults to characters when omitted or unknown). | characters |
| preserveFormatting | No | When true with characters or words mode, reverse within each line instead of across the whole text (ignored for lines, sentences, paragraphs). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the reversal succeeded. |
| result | No | The reversed text. |
| stats | No | Text statistics computed before and after reversal. |
| options | No | The effective options applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses local execution, read-only, non-destructive, rate-limited behavior beyond annotations. No contradiction with annotations; adds value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph, front-loaded with purpose, then guidelines, then behavior. Every sentence adds value. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given high schema coverage and output schema existence, description covers usage, behavior, return value, and context. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds minimal extra meaning beyond schema; mentions 'optionally preserving per-line layout' which echoes the preserveFormatting parameter. Acceptable but not enhanced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb 'Reverse Text' and specifies the resource (text block) and granularities. It explicitly distinguishes from siblings like text_palindrome_checker, text_case_converter, and text_randomizer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('flip or mirror text') and names specific alternatives for other operations, providing clear usage context with exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_sort_linesARead-onlyIdempotent
Sort Lines. Sort the lines of a text block by a chosen order and type, with optional duplicate and empty-line removal. sortType picks the key: 'alphabetical' (locale-aware), 'numeric' (parses leading number), 'length' (byte length), 'date' (parsed timestamp), 'random' (shuffle), or 'reverse' (invert input order). Use this to order lines; use text_duplicate_line_remover when you only need dedupe with original order preserved, and text_randomizer for richer shuffling by word/character/sentence. Pure local compute: read-only, non-destructive, idempotent (except sortType=random), offline, and rate-limited (60 requests/min for anonymous callers). Returns the sorted text plus before/after line statistics and the effective options.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Newline-separated text to sort; each line is one element. | |
| sortType | No | Sort key. random shuffles; reverse inverts input order and ignores sortOrder. | alphabetical |
| sortOrder | No | Direction for alphabetical/numeric/length/date; ignored by random and reverse. | asc |
| caseSensitive | No | When true, alphabetical sort and dedupe are case-sensitive; when false they fold case. | |
| removeEmpty | No | Drop blank or whitespace-only lines before sorting. | |
| removeDuplicates | No | Remove duplicate lines (keeping first occurrence) before sorting. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on success. |
| result | No | The sorted lines joined by newlines. |
| stats | No | Line metrics before and after processing. |
| options | No | The effective settings applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds crucial behavioral context: 'Pure local compute: read-only, non-destructive, idempotent (except sortType=random), offline, and rate-limited (60 requests/min)' and describes output format with statistics and options.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence contributes: purpose, usage guidance, behavioral notes, output summary, rate limiting. Front-loaded with primary function, no redundancy, appropriate length for complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, description appropriately omits return value details but still mentions output content. Covers all aspects: purpose, when to use, behavioral nuances, parameter semantics, and constraints (rate limit, offline). Fully adequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage but description adds significant value by explaining each sortType option (e.g., 'alphabetical (locale-aware)', 'numeric (parses leading number)') and noting that caseSensitive affects both sorting and deduplication, enriching parameter understanding beyond enum labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Sort lines of a text block' with specific verb and resource. Lists sort type options and differentiates from sibling tools text_duplicate_line_remover and text_randomizer, establishing its unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this to order lines' and provides alternative tools for deduplication (text_duplicate_line_remover) and richer shuffling (text_randomizer), giving clear guidance on when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_string_escapeARead-onlyIdempotent
Escape or Unescape Strings for Code and Data Formats. Escape or unescape a string for one of eight code/data syntaxes so it pastes safely: SQL, CSV, shell/Bash, regular-expression, PHP, LDAP filter, XML attribute, or C/C++ string. Functionally identical to encoding_decoding_string_escape (same engine, same formats) — either may be used; prefer text_bash_cli_escaper for richer shell/Bash quoting modes, encoding_decoding_url for percent-encoding, or encoding_decoding_html_entities for HTML entities. Runs locally on the supplied text: read-only, non-destructive, offline, rate-limited (~60 req/min). Returns the transformed string plus format metadata, an escaping analysis, and the supported-format map.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The string to escape or unescape. Required, non-empty. | |
| format | Yes | Target syntax. sql doubles single quotes; csv RFC-4180 quoting; shell backslash-escapes metachars; regex escapes metachars; php escapes backslash and quote; ldap RFC-4515 hex escapes; xml_attr entity-escapes; c_string C/C++ literal escapes. | |
| operation | No | Whether to escape (default) or reverse-unescape the text for the chosen format. | escape |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the operation succeeded. |
| input | No | The original text, echoed back. |
| operation | No | The operation performed (escape or unescape). |
| format | No | The format used. |
| result | No | The escaped or unescaped output string. |
| format_info | No | Metadata for the chosen format. |
| analysis | No | Heuristic analysis of the input text. |
| available_formats | No | Map of format id to display label for all supported formats. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds that it runs locally, is read-only, non-destructive, offline, and rate-limited (~60 req/min), providing context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: first states main function, second provides usage guidance and alternatives, third adds behavioral traits. No wasted words; each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists (implied), the description covers purpose, alternatives, behavioral traits, and parameter semantics. It mentions return value format, making it complete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions and examples for all three parameters. The description adds format-specific escape rules (e.g., 'sql doubles single quotes'), which goes beyond the schema's enum descriptions, though much is already covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description explicitly state the tool escapes/unescapes strings for eight code/data syntaxes. The purpose is specific, with a clear verb and resource, and distinguishes from siblings by naming alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool vs. alternatives (e.g., preferring text_bash_cli_escaper for richer shell modes, encoding_decoding_url for percent-encoding, etc.). It also notes functional identity with encoding_decoding_string_escape.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_text_columnARead-onlyIdempotent
Extract, Align, or Analyze Columns in Delimited Text. Splits each line of delimited text on a delimiter and operates on the resulting columns. operation=extract pulls one 1-based column into a newline-separated list; operation=align pads every column to a fixed width (left/right/center) for monospaced tabular output; operation=split emits a human-readable per-column analysis report grouping values by column. Use this for columnar/tabular text (CSV, TSV, space-separated logs) when you need a single column or aligned table; use text_splitter to break text into rows/tokens (lines, regex, fixed length), text_joiner to recombine fields, and csv_json for structured CSV->JSON. Read-only, non-destructive pure computation that runs in-process with no network or storage; rate limited to 60 req/min (anonymous) / 120 req/min (authenticated). Returns the processed text plus before/after line/character/word stats and the resolved options.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Multi-line delimited input; each line is split on the delimiter into columns. | |
| operation | No | Column operation to perform. | extract |
| columnNumber | No | 1-based column index used by the extract operation; clamped to a minimum of 1. | |
| delimiter | No | Field separator splitting each line into columns; must be non-empty. | |
| alignment | No | Padding direction for the align operation. | left |
| width | No | Target column width in characters for the align operation; clamped to 1-200. | |
| fillChar | No | Single character used to pad columns during align; first character is used, empty falls back to a space. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation succeeded. |
| result | No | Processed text: extracted column list, aligned table, or analysis report. |
| stats | No | Before/after metrics plus operation-specific counters. |
| options | No | Echo of the resolved (normalized) request parameters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds critical behavioral context: 'Read-only, non-destructive pure computation that runs in-process with no network or storage; rate limited to 60 req/min (anonymous) / 120 req/min (authenticated). Returns the processed text plus before/after line/character/word stats and the resolved options.' No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough yet efficient: a single, well-structured paragraph. It front-loads the purpose, then explains operations, usage conditions, and technical details. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, multiple operations, existing output schema), the description covers all necessary aspects: operations, usage context, behavioral traits, rate limits, and return values. The output schema provides the return format, so the description does not need to repeat it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description briefly ties operations to parameters (e.g., columnNumber for extract) but does not add substantial meaning beyond the schema definitions. It's adequate but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb+resource: 'Extract, Align, or Analyze Columns in Delimited Text.' It explicitly lists three operations and distinguishes the tool from siblings like text_splitter, text_joiner, and csv_json, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use this for columnar/tabular text (CSV, TSV, space-separated logs) when you need a single column or aligned table.' It also names alternatives for other use cases, making it clear 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.
text_text_joinerARead-onlyIdempotent
Text Joiner. Join an array (or newline-separated string) of text elements into one string using a chosen separator, with optional trim, deduplicate, sort, prefix/suffix, drop-empty, and a structured output format (plain, csv, json, html-list, xml, numbered, bulleted, quoted, sql-values). Use this to merge lines/items; use text_splitter for the inverse (breaking one string into parts). Pure local compute: read-only, non-destructive, offline, and rate-limited (60 requests/min for anonymous callers). Returns the joined result plus element/length statistics and the effective settings.
| Name | Required | Description | Default |
|---|---|---|---|
| elements | Yes | Items to join: an array of strings, or a single string that is split on newlines (blank lines dropped). | |
| separator | No | String inserted between elements (ignored by csv/json/xml/html-list/sql-values formats, which use their own delimiters). | |
| format | No | Output structure. text joins with separator; others emit CSV row, JSON array, HTML/XML list, numbered/bulleted/quoted lines, or a SQL VALUES tuple. | text |
| removeEmpty | No | Drop elements that are empty or whitespace-only before joining. | |
| trimElements | No | Trim leading/trailing whitespace from each element. | |
| addPrefix | No | String prepended to every element after trim/sort. | |
| addSuffix | No | String appended to every element after trim/sort. | |
| sort | No | Lexicographically sort elements before joining. | |
| sortDirection | No | Sort order when sort is true. | asc |
| unique | No | Remove duplicate elements, keeping first occurrence. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on success. |
| result | No | The joined output string in the chosen format. |
| stats | No | Metrics over the processed elements. |
| settings | No | Effective options applied: separator, format, removeEmpty, trimElements, addPrefix, addSuffix, sort, sortDirection, unique. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent. The description adds that it is pure local compute, offline, rate-limited (60/min for anonymous), and explains the return value structure (joined result + statistics + settings). This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that efficiently covers purpose, usage, options, and behavior. It is front-loaded with the main action. Slightly verbose in listing all formats, but that detail is useful for the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (not shown) and schema coverage is 100%, the description is sufficiently complete. It mentions return value components and contrasts with a sibling tool. It could mention the default separator or output format more explicitly, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for each parameter. The description does not add new semantic meaning beyond what's in the schema, but it provides a readable overview. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool joins text elements into one string with configurable formatting. It names the core action (join) and resource (text elements), and distinguishes from the sibling tool text_splitter, providing clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description directly tells when to use this tool ('merge lines/items') and when not to, by pointing to text_splitter as the inverse. It includes explicit guidance on usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_text_obfuscatorARead-only
Obfuscate Text (Leet, Unicode, Homoglyphs, Reverse, Random). Disguise text by substituting characters using one of five techniques: leet speak, Greek/Cyrillic Unicode look-alikes, confusable homoglyphs, word/character reversal, or random character noise. Use it to make text visually unrecognizable for privacy or creative effect; use reverse_text for a clean character/word/line/sentence reversal, case_converter to only change letter case, or rot13/atbash for a reversible cipher. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Output is not reversible, and the "random" type plus "medium"/"heavy" intensities pick replacements randomly, so repeat calls may differ. Returns the obfuscated text, change statistics, the echoed options, and an original-vs-obfuscated comparison.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The input text to obfuscate. Required and non-empty. | |
| obfuscationType | No | Technique to apply. "leetspeak" swaps letters for digits/symbols; "unicode" uses Greek/Cyrillic look-alikes; "homoglyphs" uses confusable characters; "reverse" reverses order; "random" injects random characters. Unknown values return the text unchanged. | leetspeak |
| intensity | No | How aggressively characters are substituted. Ignored by the "reverse" type. "heavy" (and "medium" for some types) chooses among multiple replacements at random. | medium |
| preserveCase | No | Keep the original upper/lower case of substituted letters. | |
| preserveSpacing | No | Keep spaces between words. When false, "reverse" reverses the whole string and "random" may also alter spaces. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether obfuscation succeeded. |
| result | No | The obfuscated text. |
| statistics | No | Metrics describing the transformation. |
| options | No | The effective options used for the run. |
| comparison | No | Side-by-side original and obfuscated text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses read-only, non-destructive, local execution, rate limits (60 req/min), output non-reversibility, and random selection behavior, all beyond what annotations provide. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with front-loaded purpose, use case, and alternatives followed by behavioral notes. Slightly verbose but each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, behavior, parameter options, return values (mentioned), and constraints. Complete for a tool with 5 parameters, enums, and output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description adds marginal semantic value. It provides overall context (rate limits, randomness) but does not elaborate on parameter details beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Obfuscate Text') and resource ('text'), lists five distinct techniques, and explicitly distinguishes from sibling tools like reverse_text, case_converter, and rot13/atbash.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance: 'Use it to make text visually unrecognizable for privacy or creative effect' and specifically names alternatives (reverse_text, case_converter, rot13/atbash) with clear differentiators.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_text_randomizerARead-only
Randomize and Shuffle Text. Randomly shuffle the contents of text in one of five modes set by randomizeType: 'words', 'lines' (default), 'characters', 'sentences', or 'paragraphs'. Use this to scramble word/line/character order for puzzles, test fixtures, or anonymizing sample data; unlike text_sort_lines (deterministic ordering) and reverse_text (exact reversal), the order here is non-deterministic unless you pass an integer seed for a reproducible shuffle. Optional preserveFormatting keeps line breaks/whitespace in place (applies only to the 'words' and 'characters' modes). Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the randomized text plus before/after statistics and the effective options.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to randomize. Must not be blank (an empty value returns a 400 error). | |
| randomizeType | No | What unit to shuffle. Unrecognized values return the input text unchanged. | lines |
| preserveFormatting | No | When true, keeps line breaks and whitespace positions; only affects the words and characters modes. | |
| seed | No | Optional integer seed for a reproducible shuffle. Omit or null for true randomness via Math.random. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether randomization succeeded. |
| result | No | The randomized output text. |
| stats | No | Before/after metrics and per-mode randomization counts. |
| options | No | The effective options after defaults were applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive, but the description adds key behavioral details: runs locally, contacts no external service, rate-limited to 60 req/min, and returns statistics along with the randomized text. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two well-structured paragraphs. First paragraph introduces purpose, modes, and sibling differentiation. Second covers behavioral constraints and return info. Every sentence adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (mentioned in context), the description appropriately summarizes return values. It covers all essential aspects: modes, default, seeding, formatting options, local execution, rate limits, and sibling comparisons.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description reiterates the enum modes and default, and adds that preserveFormatting only applies to words/characters modes (already in schema). It does not add significant new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool randomizes/shuffles text with five specific modes (words, lines, characters, sentences, paragraphs). It explicitly distinguishes from siblings text_sort_lines and reverse_text by contrasting deterministic vs. non-deterministic behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases: puzzles, test fixtures, anonymizing data. It also contrasts with sort_lines (deterministic) and reverse_text (exact reversal), and explains when to use a seed for reproducibility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_text_splitterARead-onlyIdempotent
Text Splitter. Split one string into an array of parts using a chosen method: by lines, by words (whitespace runs), by individual characters, by a literal delimiter, or by a regular expression. Optionally trim each part, drop empty parts, and cap the number of splits. Use this to break a string apart; use text_joiner for the inverse (merging items into one string), text_statistics for whole-text metrics without splitting, and column_tool for aligning delimited tabular data. Pure local compute: read-only, non-destructive, offline, deterministic, and rate-limited (60 requests/min for anonymous callers). Returns the parts array plus original/result length statistics and the effective settings.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to split. Required and must be non-empty; a blank value returns a 400 error. | |
| splitType | No | Split method. lines splits on newlines; words on whitespace runs; characters into single chars; delimiter on the literal delimiter value; regex on the regex pattern. | lines |
| delimiter | No | Literal delimiter used only when splitType is delimiter; an empty string returns the text unsplit. | , |
| regex | No | Pattern used only when splitType is regex; accepts a bare pattern or PHP-style /pattern/flags; an empty string returns the text unsplit. | |
| removeEmpty | No | Drop empty parts after splitting (for characters mode, also drops spaces). | |
| trimElements | No | Trim leading/trailing whitespace from each part (ignored for characters mode). | |
| maxSplits | No | Maximum number of splits for delimiter/regex modes; 0 means no limit. Ignored for lines/words/characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on success. |
| result | No | The resulting parts after splitting and applying remove-empty/trim options. |
| stats | No | Metrics for the original text and the result. |
| options | No | The effective options echoed in camelCase. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds valuable behavioral details: rate limit (60 req/min), offline/deterministic nature, and mode-specific behavior (e.g., parameter ignore). Minor gap: does not mention error handling beyond blank text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with front-loaded main idea, followed by alternatives and behavioral notes. Every sentence adds value, though length could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 params, 100% schema coverage, output schema exists), the description covers all essential aspects: purpose, methods, options, alternatives, behavioral traits, and return summary. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds context beyond schema: explains behavior of each splitType (e.g., 'lines splits on newlines'), clarifies parameter dependencies (delimiter/regex only for specific types), and notes return value includes statistics. Does not repeat schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: splitting a string into parts using multiple methods. It specifies the resource (string) and verbs (split), and distinguishes from siblings like text_joiner, text_statistics, and column_tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool ('Use this to break a string apart') and provides alternatives for inverse operations and similar tools. Also includes behavioral constraints like rate limit and deterministic nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_text_statisticsARead-onlyIdempotent
Text Statistics Analyzer. Compute a comprehensive statistics report for one block of text: character, word, unique-word, sentence, paragraph and line counts; per-character-class breakdown; word-length distribution; estimated reading and speaking time at several speeds; and (optionally) readability scores (Flesch Reading Ease, Flesch-Kincaid grade, Gunning Fog, Coleman-Liau, Automated Readability) with grade-level interpretation. Use this for a full linguistic profile in one call; use text_word_frequency when you only need ranked word-occurrence counts, or text_text_counter for a plain character/word/line tally. Runs locally on the supplied text: read-only, non-destructive, contacts no external service, and is rate-limited. Returns a nested statistics object plus the echoed options.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to analyze. Must be non-empty; a blank value returns a 400 error. | |
| includeReadability | No | When true, include the statistics.readability block (Flesch, Gunning Fog, Coleman-Liau, ARI). Set false to skip the readability computation. | |
| includeSentiment | No | Reserved flag echoed back under options.includeSentiment; no sentiment block is produced. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when analysis succeeded. |
| statistics | No | Nested metrics grouped by category. |
| options | No | Echoed request options. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive. Description additionally states it runs locally, contacts no external service, and is rate-limited. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph that front-loads main purpose and lists statistics clearly. Slightly long but every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all essential aspects: input constraints, options, output as nested statistics object plus options. Given complexity, complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description adds value by specifying text non-empty requirement, defaults for includeReadability, and the echoed behavior of includeSentiment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes comprehensive text statistics (character, word, sentence counts, readability, etc.) and distinguishes it from siblings text_word_frequency and text_text_counter with specific use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool ('full linguistic profile in one call') and when not to (use text_word_frequency or text_text_counter for narrower needs). Also notes it's read-only and local.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_text_trimmerARead-onlyIdempotent
Text Trimmer (Whitespace & Character Cleanup). Trim and clean text by removing whitespace or custom characters from each line, with options to strip leading/trailing/all-occurrence characters, drop blank lines, and preserve indentation. Use it to normalize whitespace and tidy formatting; use text_find_replace for pattern-based edits and text_duplicate_line_remover to dedupe lines. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/min anonymous). Returns the trimmed text plus before/after statistics and a count of characters, spaces, lines, and empty lines removed.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to trim. Processed line by line, split on newlines. | |
| trimType | No | Where to trim on each line. both trims both ends (right-only when preserveIndentation is true); left/leading trims the start; right/trailing trims the end; all removes every occurrence of the trim characters anywhere in the line. | both |
| trimWhitespace | No | Include standard whitespace (space, tab, newline, CR, null, vtab) in the trim set. | |
| trimEmptyLines | No | Also drop lines that are empty or whitespace-only. | |
| customCharacters | No | Extra characters to trim, added to the whitespace set. If set and trimWhitespace is false, only these characters are trimmed. | |
| preserveIndentation | No | Keep leading indentation; for both/left trim types only trailing whitespace is affected. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether trimming succeeded. |
| result | No | The trimmed output text. |
| stats | No | Before/after statistics and change counts. |
| options | No | Echo of the effective options used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent. Description adds significant context: runs locally, no external service, rate-limited (60 req/min), returns trimmed text plus statistics. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose and key options. Every sentence earns its place with no fluff. Structure is clear and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters fully described in schema, annotations covering safety and idempotency, and mention of output statistics, the description is complete enough for effective tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description summarizes options but does not add new meaning beyond what the schema field descriptions already provide. No deeper explanation of parameter interactions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description clearly state it trims whitespace and custom characters, with detailed options. It distinguishes from siblings like text_find_replace and text_duplicate_line_remover, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (normalize whitespace/tidy formatting) and when not (pattern-based edits and duplicate line removal), naming alternative tools. This provides clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_word_frequencyARead-onlyIdempotent
Word Frequency Counter. Count how often each word appears in a block of text and return a ranked frequency table with per-word percentage and rank. Options let you fold case, drop common stop words, set a minimum word length, sort by frequency or alphabetically, and cap the number of rows returned. Use text_word_frequency when you only need a plain single-word frequency list with aggregate counts; use text_statistics for a full linguistic profile (readability scores, sentence and paragraph metrics) and word_counter for raw word, character, sentence, and paragraph totals without per-word breakdown. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the ranked results array plus summary statistics (total words processed, unique words, lexical diversity) and the effective options.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to analyze. Words are extracted as runs of letters and digits; punctuation is treated as a separator. Must not be blank. | |
| caseSensitive | No | When true, treat differing letter case as distinct words; when false, lowercase every word before counting. | |
| ignoreCommonWords | No | When true, exclude a built-in list of about 80 common English stop words (the, and, of, to, and similar) from the results. | |
| minWordLength | No | Minimum character length a word must have to be counted; values above 1 filter out shorter words. | |
| sortOrder | No | Result ordering: frequency sorts most-frequent first; alphabetical sorts words A to Z. | frequency |
| maxResults | No | Maximum number of word rows to return after sorting. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the analysis succeeded. |
| results | No | Ranked word rows, ordered per sortOrder and capped at maxResults. |
| statistics | No | Aggregate metrics for the processed text. |
| options | No | The effective request options after defaults were applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, and idempotent. The description adds valuable behavioral context: 'Runs locally on the text you provide... contacts no external service, and is rate-limited (60 requests/minute for anonymous callers).' This goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: purpose, options list, usage alternatives, behavioral notes. It is appropriately sized and front-loaded with the core purpose. Minor redundancy with annotations, but not excessive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, 100% schema coverage, and presence of output schema, the description sufficiently covers the tool's function. It mentions return value (ranked results array plus summary stats) and effective options. Could include a brief example, but not necessary for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description paraphrases some options (fold case, drop stop words, etc.) but adds little new meaning beyond what the schema already describes. No additional parameter constraints or examples are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Count how often each word appears' and the resource 'block of text', and specifies the output 'ranked frequency table with per-word percentage and rank'. It also distinguishes from sibling tools by naming text_statistics and word_counter as alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when to use this tool versus alternatives: 'Use text_word_frequency when you only need a plain single-word frequency list...; use text_statistics for a full linguistic profile... and word_counter for raw totals...' This gives clear guidance on context of use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_age_calculatorARead-onlyIdempotent
Age and Date-Span Calculator. Compute exact age or elapsed time from a birth date to a reference date (defaults to today, UTC), in proleptic-Gregorian calendar math. operation "compute" returns a years/months/days breakdown plus totals (months/weeks/days/hours/minutes/seconds), next-birthday details, the day of the week you were born, and decorative western/chinese zodiac; operation "yearsBetween" returns only the non-negative years/months/days/totalDays span between two dates. Use this for age and birthday math; use time_date_difference instead for business-day counts or for adding/subtracting a duration from a date. Runs locally via the same JS logic the page uses: read-only, non-destructive, offline-capable, rate-limited (60 req/min anonymous), no auth. Results are wrapped as operation plus data.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | "compute": age/elapsed time from a birth date (needs birthYear/Month/Day; optional asOf*). "yearsBetween": span between two dates (needs from* and to*). | |
| birthYear | No | Birth year (proleptic Gregorian). Required when operation is compute. | |
| birthMonth | No | Birth month 1-12. Required when operation is compute. | |
| birthDay | No | Birth day 1-31; must be a real calendar date. Required when operation is compute. | |
| asOfYear | No | Reference year for compute. Omit all asOf* to use today (UTC). | |
| asOfMonth | No | Reference month 1-12 for compute. Omit all asOf* to use today (UTC). | |
| asOfDay | No | Reference day 1-31 for compute. Omit all asOf* to use today (UTC). | |
| fromYear | No | Start year. Required when operation is yearsBetween. | |
| fromMonth | No | Start month 1-12. Required when operation is yearsBetween. | |
| fromDay | No | Start day 1-31. Required when operation is yearsBetween. | |
| toYear | No | End year. Required when operation is yearsBetween. | |
| toMonth | No | End month 1-12. Required when operation is yearsBetween. | |
| toDay | No | End day 1-31. Required when operation is yearsBetween. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | The operation that was run, echoed back (compute or yearsBetween). |
| data | No | Result payload; shape depends on operation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond annotations: read-only, non-destructive, offline-capable, rate-limited, no auth. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured and front-loaded, but slightly verbose with repeated 'operation' phrases. Still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all aspects: purpose, operations, parameters, usage, behavioral traits. Output schema exists, so return values not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description adds limited value on parameters. It hints at required params per operation but doesn't elaborate beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes age or elapsed time with two operations, and distinguishes from sibling time_date_difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool (age/birthday math) and when to use time_date_difference instead, plus mentions local execution and rate limits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_cron_parserARead-onlyIdempotent
Cron Expression Parser and Next-Run Preview. Parse a 5- or 6-field cron (crontab) expression into plain-English prose and preview the next firing times in UTC. Operation describe returns the per-field breakdown plus an English summary; operation nextRuns projects upcoming run timestamps from an optional start instant. Supports wildcards, steps, ranges, lists, named month/weekday aliases, and the @yearly @monthly @weekly @daily @midnight @hourly shortcuts (@reboot is rejected as non-deterministic). Use this to read or validate an existing cron string; use linux_cron_job instead to build a new schedule from a visual form. Runs locally on the expression you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Invalid expressions return HTTP 400 with a message naming the bad field, value, and reason.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Which action to run: describe for the field breakdown plus English summary, nextRuns for upcoming UTC firing times. | |
| expression | Yes | Cron expression to parse. Five fields (minute hour dayOfMonth month dayOfWeek) or six with a leading seconds column. Must not be blank. | |
| fromIso | No | nextRuns only: ISO 8601 start instant to search forward from. Defaults to the current time when omitted. | |
| count | No | nextRuns only: how many upcoming firing times to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | The operation that was run (describe or nextRuns). |
| data | No | Operation-specific result. describe returns expression/normalized/description/isStandardForm/fields; nextRuns returns expression/fromIso/count/runs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), description adds: runs locally, contacts no external service, rate-limited (60/min), error behavior (HTTP 400 with details), and that @reboot is rejected. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with title, operations, usage guidance, and behavioral details front-loaded. Sentences are informative but some redundancy (e.g., 'read-only, non-destructive' and 'Runs locally' could be merged). Slightly long but effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (4 params, 2 operations, output schema exists), description covers purpose, usage, behavior, parameter semantics, error handling, and rate limits. Output schema is present, so return value explanation is unnecessary. No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds context: operation describe vs nextRuns, and that fromIso and count are only for nextRuns. Extra detail on each operation's output (English summary vs timestamps) provides value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: 'Cron Expression Parser and Next-Run Preview' with specific operations (describe, nextRuns). Differentiates from sibling 'linux_cron_job' by stating its use case (read/validate existing vs build new schedule).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use this to read or validate an existing cron string; use linux_cron_job instead to build a new schedule from a visual form.' Also notes it is read-only and non-destructive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_date_calculatorARead-onlyIdempotent
Date Calculator (Add/Subtract Duration and Business Days). Add or subtract a years/months/weeks/days duration from an explicit base date, or add a signed number of business days that skips weekends, using proleptic-Gregorian UTC arithmetic. Years and months apply first with the day-of-month clamped to the last valid day (Jan 31 + 1 month is Feb 28/29, never Mar 3), then the week/day shift. Use this when you have a known start date and want the resulting date; use time_date_difference to measure the span between two dates, or time_time_duration for HH:MM:SS clock arithmetic. The caller supplies every date, so results are deterministic (no current-time dependency). Runs locally: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the base and result dates (year/month/day, ISO date, weekday) plus the total days shifted and, for business-day mode, the weekends skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Which calculation to run: "add" or "subtract" a calendar duration, or "addBusinessDays" to shift by weekday-only days. | |
| year | Yes | Base date year (proleptic Gregorian). | |
| month | Yes | Base date month, 1 (January) to 12 (December). | |
| day | Yes | Base date day of month; must be a real calendar day for the given year/month. | |
| years | No | Years to add (add/subtract only; ignored for addBusinessDays). | |
| months | No | Months to add (add/subtract only; ignored for addBusinessDays). | |
| weeks | No | Weeks to add (add/subtract only; ignored for addBusinessDays). | |
| days | No | Days to shift. For add/subtract, a calendar-day component in -1000..1000 (default 0); for addBusinessDays, a signed weekday-only count in -100000..100000 (negative walks backward). For add/subtract, at least one of years/months/weeks/days must be non-zero. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | Echo of the requested operation (add, subtract, or addBusinessDays). |
| data | No | Result payload. Always includes base and result; add/subtract add totalDaysAdded and breakdown, addBusinessDays adds daysAdded, weekendsSkipped, and totalCalendarDaysShifted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint), the description adds behavioral details: runs locally, read-only, rate-limited, and explains business day arithmetic and month clamping. No contradiction; all are consistent with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but is information-dense and well-front-loaded. Every sentence adds value, though breaking into bullet points could improve scannability. Still, it's concise for the amount of information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, business day logic, edge cases), the description covers input behavior (clamping), output format (returns base/result dates, total days, weekends skipped), constraints (rate limit, local execution), and non-destructiveness. Complete and sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema covers 100% of parameters, the description adds crucial semantics: explains the order of operations for years/months clamping, and details the behavior of 'days' for business days vs calendar days. This goes beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Date Calculator (Add/Subtract Duration and Business Days)'. It explicitly distinguishes from sibling tools like time_date_difference and time_time_duration, making it easy for an agent to select the correct tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use this when you have a known start date and want the resulting date' and directs to alternatives for other scenarios. It also notes deterministic behavior and no current-time dependency, aiding appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_date_differenceARead-onlyIdempotent
Date Difference and Duration Calculator. Pure deterministic proleptic-Gregorian date math over UTC, with no clock/now dependency — every date is supplied by the caller. operation "diff" returns the calendar years/months/days gap between two dates, the direction (forward/backward/same), and absolute totals (days, weeks plus remainder, hours/minutes/seconds, and Mon-Fri business days, no holiday exclusion). operation "addDuration" / "subtractDuration" apply a signed years/months/weeks/days duration to a base date using month-clamp (Jan 31 + 1 month is Feb 28/29) and return the resulting date. Use this for days-between, business-day counts, or date arithmetic; use time_age_calculator for age/birthday math, time_date_calculator for weekend-skipping business-day arithmetic, and time_time_duration for HH:MM:SS clock-time math. Read-only, non-destructive, idempotent, offline-capable, rate-limited (60 req/min anonymous), no auth. Result is wrapped as operation plus data.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | "diff": gap between two dates (needs from* and to*). "addDuration"/"subtractDuration": apply duration to a base date (needs year/month/day and duration). | |
| fromYear | No | Start-date year (proleptic Gregorian). Required when operation is diff. | |
| fromMonth | No | Start-date month 1-12. Required when operation is diff. | |
| fromDay | No | Start-date day 1-31; must be a real calendar date. Required when operation is diff. | |
| toYear | No | End-date year. Required when operation is diff. | |
| toMonth | No | End-date month 1-12. Required when operation is diff. | |
| toDay | No | End-date day 1-31. Required when operation is diff. | |
| year | No | Base-date year. Required when operation is addDuration or subtractDuration. | |
| month | No | Base-date month 1-12. Required when operation is addDuration or subtractDuration. | |
| day | No | Base-date day 1-31; must be a real calendar date. Required when operation is addDuration or subtractDuration. | |
| duration | No | Signed duration to apply. Required when operation is addDuration or subtractDuration. Each component defaults to 0 and may be negative. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | The operation that was run, echoed back (diff, addDuration, or subtractDuration). |
| data | No | Result payload; shape depends on operation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds non-annotation info: offline-capable, rate-limited (60 req/min), no auth, month-clamp behavior. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is moderately long but well-structured, front-loading core purpose. Each sentence adds value, though could be slightly shortened. Efficient communication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (11 params, 3 operations, output schema exists), description covers main behaviors, input requirements, return types (implied by operation), and error handling (month-clamp). Sibling differentiation is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all parameters. Description adds semantics by explaining operation enum behavior and duration object meaning (signed, month-clamp), going beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool calculates date differences and duration arithmetic using proleptic-Gregorian date math, with specific operations (diff, addDuration, subtractDuration). It distinguishes itself from siblings in the usage guidelines section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (days-between, business-day counts, date arithmetic) and when to use alternative siblings (time_age_calculator, time_date_calculator, time_time_duration). Provides clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_day_of_weekARead-onlyIdempotent
Day of Week Calculator. Find the weekday for any proleptic-Gregorian date, list the next or previous N occurrences of that weekday, or measure the calendar distance between two dates in days and weeks. Select the mode with the operation field (weekday, scan, distance). Use this for weekday lookups and recurring weekday schedules; use time_date_difference when you need business-day counts or to add or subtract a duration from a date. Supports years -9999 to 9999 including BCE (year 0 and negatives), with strict round-trip date validation. Pure local computation: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns ISO 8601 date strings plus weekday name, indices, ISO week number, and day-of-year metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Mode: weekday returns the weekday for one date; scan lists N recurring weekday dates; distance measures the gap between two dates. | |
| year | No | Year of the date (weekday and scan modes). BCE allowed via 0 and negative values. | |
| month | No | Month of the date (weekday and scan modes), 1 to 12. | |
| day | No | Day of month (weekday and scan modes); must be a real day for that month. | |
| count | No | Scan mode only. Non-zero signed count of same-weekday occurrences; positive scans forward, negative backward. | |
| fromYear | No | Distance mode only. Year of the start date. | |
| fromMonth | No | Distance mode only. Month of the start date, 1 to 12. | |
| fromDay | No | Distance mode only. Day of month of the start date. | |
| toYear | No | Distance mode only. Year of the end date. | |
| toMonth | No | Distance mode only. Month of the end date, 1 to 12. | |
| toDay | No | Distance mode only. Day of month of the end date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | The operation that was performed (weekday, scan, or distance). |
| data | No | Result payload; fields depend on the operation. Weekday fields shown below; scan adds from/dayOfWeek/count/occurrences, distance adds from/to/days/weeks/weekRemainder/sameWeekday. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds valuable context: 'Pure local computation: read-only, non-destructive, contacts no external service, rate-limited (60 requests/minute)'. It also mentions strict validation and BCE support, fully disclosing behavior without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (5-6 sentences) and well-structured: purpose first, then mode explanation, then differentiation, then constraints, then safety/performance. Every sentence provides unique value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (three modes, 11 parameters), excellent annotations, and an output schema, the description covers all necessary aspects: inputs, modes, constraints, safety, rate limits, and return metadata. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all 11 parameters. The description goes further by explaining the operation enum and how parameters relate to each mode (e.g., count for scan mode, fromYear/toYear for distance). This adds meaningful semantic context beyond the schema, justifying a slightly above-baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly labels the tool as a 'Day of Week Calculator' and explains three distinct modes (weekday, scan, distance) with specific verbs like 'Find', 'list', and 'measure'. It distinguishes from sibling tool time_date_difference by specifying when to use each, ensuring no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('weekday lookups and recurring weekday schedules') and when to use the alternative time_date_difference ('business-day counts or to add/subtract a duration'), providing clear, actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_iso_8601_formatterARead-onlyIdempotent
ISO 8601 / RFC 3339 Date Formatter. Parse, format, and do arithmetic on ISO 8601 / RFC 3339 dates, times, durations, intervals, and recurring intervals using a strict hand-rolled parser (the permissive native Date parser is deliberately avoided). The 'operation' field selects the mode: 'parse' decodes one ISO string into calendar/ordinal/week-date components, offset, epoch milliseconds, and UTC; 'format' renders date fields or a unix-ms value into a chosen ISO style; 'duration' normalises an ISO duration into canonical form, human text, and total seconds; 'add' applies a duration to a base instant with calendar-aware month wrapping; 'now' returns the current UTC instant. Use this for ISO/RFC string parsing and rendering, not time_timezone_converter (IANA zone-to-zone wall clock with DST), time_world_clock (live multi-city clock), or convert_timestamp (unix-epoch to human date). Pure read-only computation, no network or storage; only 'now' reads the wall clock. Rate limit 60 requests/minute per client (anonymo
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Mode to run. 'parse' decodes an ISO string; 'format' renders to an ISO style; 'duration' normalises an ISO duration; 'add' adds a duration to a base instant; 'now' returns the current UTC instant (ignores all other fields). | parse |
| input | No | Operation payload. For 'parse' an ISO 8601 string (e.g. 2026-05-26T14:30:00+02:00, 2026-W22-2, P1Y2M3DT4H5M6S, or start/end). For 'format' a unix-milliseconds number or an object with year, month, day and optional hour/minute/second/ millisecond/offsetMinutes (or unixMs). For 'duration' an ISO duration string, a seconds number, or a duration object. Unused by 'add' and 'now'. | |
| style | No | Output style for 'format' only. 'rfc3339' forces a trailing Z when no offset is given. | extended |
| base | No | Base date or datetime for 'add' (ISO 8601). Must be a date or datetime, not a duration or interval. | |
| duration | No | ISO 8601 duration to add for 'add' (e.g. P1M, PT1H30M, -P10D). Leading minus subtracts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the operation succeeded. |
| operation | No | The operation that was run (echoed back). |
| result | No | Operation-specific output. parse returns input, kind (date/time/datetime/duration/interval/recurring), and optional date/time/offset/epochMs/utc/duration/ seconds/start/end fields. format returns iso. duration returns iso, human, seconds. add returns iso, utc. now returns isoUtc, isoLocalLike, epochMs. |
| error | No | Error message when success is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits: it's a pure read-only computation with no network/storage (only 'now' reads wall clock), uses a strict hand-rolled parser, and aligns with annotations (readOnlyHint=true, destructiveHint=false, idempotentHint=true). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive but slightly long; however, every sentence is informative. It front-loads the core purpose and then details operations. It could be more concise, but the structure is logical and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, multiple operations, sibling tools), the description is thorough. It covers all operations, input/output behaviors (with output schema existing), and provides sufficient context for an agent to use it correctly. No major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 100% and the input schema already describes parameters, the description adds value by explaining operation-specific input expectations (e.g., 'for parse: an ISO 8601 string...'). This contextualizes the parameters beyond basic type/description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as an ISO 8601 / RFC 3339 date formatter, listing five specific operations (parse, format, duration, add, now). It also explicitly distinguishes this tool from siblings like time_timezone_converter, time_world_clock, and convert_timestamp, providing clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives, stating 'Use this for ISO/RFC string parsing and rendering, not...' and names three sibling tools with their purposes. It also mentions the rate limit of 60 requests/minute, helping agents choose appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_leap_year_checkerARead-onlyIdempotent
Leap Year Checker (Gregorian). Determine whether a year is a leap year under the Gregorian rule (divisible by 4, except centuries not divisible by 400), list every leap year in an inclusive year range, or find the next N leap years from a starting year. Set operation to check (with year), range (with from and to), or next (with startYear and count). Supports BCE via negative years from -9999 to 9999. Use time_date_calculator for date arithmetic and time_day_of_week for weekday lookups; this tool only answers leap-year questions. Runs locally on the integers you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the operation echo plus a data object whose shape depends on the operation (isLeap and reason for check, leapYears for range, years for next).
| Name | Required | Description | Default |
|---|---|---|---|
| operation | No | Which calculation to run: check tests one year, range lists leap years between from and to, next returns the next count leap years from startYear. | |
| year | No | Year to test (operation check only). Required for check; integer from -9999 to 9999, negative for BCE. | |
| from | No | Inclusive start year of the scan (operation range only). Must be less than or equal to to. | |
| to | No | Inclusive end year of the scan (operation range only). Must be greater than or equal to from. | |
| startYear | No | First year considered when collecting upcoming leap years (operation next only); the start year itself is included if it is a leap year. | |
| count | No | How many leap years to return (operation next only); integer from 1 to 50. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | The operation that was run (check, range, or next). |
| data | No | Operation-specific result payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds that the tool runs locally, is read-only, non-destructive, contacts no external service, and has a rate limit (60 req/min). This provides valuable behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that efficiently covers all operations, parameters, constraints, behavior, and sibling differentiation. It is front-loaded with the core purpose and avoids redundancy. Minor improvement could be structuring by operation, but it is still concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity (three operations, six parameters, no nested objects), the description covers all necessary aspects: operations, parameter usage, constraints, behavior, rate limits, and even references the output schema. It fully equips the agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds value by grouping parameters by operation (check with year, range with from and to, next with startYear and count), clarifying how parameters relate to each other beyond the schema's per-parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: determining leap years via three operations. It distinguishes from sibling tools by explicitly referencing time_date_calculator and time_day_of_week for other date-related tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool vs. alternatives: 'Use time_date_calculator for date arithmetic and time_day_of_week for weekday lookups; this tool only answers leap-year questions.' It also describes the three valid operation modes and their parameter requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_time_durationARead-onlyIdempotent
Time Duration Calculator. Pure clock-time/duration arithmetic on time spans expressed as hours/minutes/seconds (HH:MM:SS or total seconds) — no wall-clock, calendar, or "now" dependency. operation "compute" normalizes one duration; "add" sums 2-100 durations; "subtract" returns a-b (negative allowed); "multiply" scales a duration by a numeric factor; "divide" divides by a non-zero numeric divisor; "between" returns end-start for two clock times (hour 0-23, minute 0-59, second 0-<60), adding 24h when crossesMidnight is set and end<=start. This is HH:MM:SS clock-time math; use time_date_difference for calendar years/months/days and business-day counts, time_age_calculator for age/birthday spans, and convert_timestamp for Unix-epoch to human-date conversion. Runs locally via the same JS the page uses: read-only, deterministic, offline-capable, rate-limited (60 req/min anonymous), no auth. Result is wrapped as operation plus a data object (totalSeconds, hhmmss, hms, iso8601, signed component breakdown).
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | "compute": normalize one duration (hours/minutes/seconds). "add": sum items. "subtract": a-b. "multiply": duration*factor. "divide": duration/divisor. "between": end-start of two clock times. | |
| hours | No | Hours component for compute/multiply/divide (used when duration object is omitted). Defaults to 0; may be fractional or negative. | |
| minutes | No | Minutes component for compute/multiply/divide (used when duration object is omitted). Defaults to 0. | |
| seconds | No | Seconds component for compute/multiply/divide (used when duration object is omitted). Defaults to 0; may be fractional. | |
| duration | No | Duration operand for multiply/divide; if omitted the top-level hours/minutes/seconds are used instead. | |
| items | No | Durations to sum. Required when operation is add; 2-100 entries. | |
| a | No | Minuend duration. Required when operation is subtract. | |
| b | No | Subtrahend duration. Required when operation is subtract. | |
| factor | No | Finite multiplier. Required when operation is multiply; may be negative or fractional. | |
| divisor | No | Finite non-zero divisor. Required when operation is divide; must not be 0. | |
| start | No | Start clock time. Required when operation is between. | |
| end | No | End clock time. Required when operation is between. | |
| crossesMidnight | No | For between only: when true and end<=start, add 24h to end so the span wraps past midnight. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | The operation that was run, echoed back. |
| data | No | Normalized duration result. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds context: runs locally, read-only, deterministic, offline-capable, rate-limited, no auth, and describes return format. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise (under 200 words) and well-structured: front-loaded with purpose, then operation details, then sibling tool comparisons, then behavioral notes and return format. Every sentence provides essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (13 parameters, 6 operations, nested objects) and that it has an output schema, the description covers everything: purpose, when to use, operation semantics, behavioral traits, and return structure. It leaves no significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage. The description explains each operation's semantics (e.g., 'compute normalizes one duration; add sums 2-100 durations; subtract returns a-b (negative allowed); multiply scales; divide divides; between returns end-start'). This adds value beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool does pure clock-time/duration arithmetic on HH:MM:SS or total seconds, and explicitly distinguishes it from sibling tools like time_date_difference, time_age_calculator, and convert_timestamp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit instructions on when to use this tool and when to use alternatives, e.g., 'use time_date_difference for calendar years/months/days and business-day counts, time_age_calculator for age/birthday spans, and convert_timestamp for Unix-epoch to human-date conversion.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_timezone_converterARead-onlyIdempotent
Time Zone Converter. Convert a wall-clock date and time from one IANA time zone to another with DST awareness, or render one UTC instant across up to 12 zones at once. The 'operation' field selects the mode. 'convert' takes a year/month/day (plus optional hour/minute/second), a fromTz and a toTz, and returns the source and target wall clocks, the shared UTC instant, and the signed hours difference. 'compare' takes the same wall clock with a sourceTz and a targetTzs list and renders each target zone. 'listSupportedTimezones' returns a curated IANA name list and ignores all other fields. Use this for zone-to-zone wall-clock math; use time_world_clock for a live ticking multi-city clock, time_iso_8601_formatter for ISO/RFC string parsing, or convert_timestamp for unix-epoch dates. Pure local computation against the bundled tz database, no network or storage; read-only, non-destructive, idempotent, rate-limited (60 req/min anonymous, no auth). Each rendered zone reports its UTC offset, abbreviation, and DST flag.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Mode to run. 'convert' converts one wall clock from fromTz to toTz. 'compare' renders the same instant across targetTzs. 'listSupportedTimezones' returns the curated IANA list and ignores all other fields. | |
| year | No | Wall-clock year 1900-2100. Required for convert and compare. | |
| month | No | Wall-clock month 1-12. Required for convert and compare. | |
| day | No | Wall-clock day 1-31; must be a real calendar date. Required for convert and compare. | |
| hour | No | Wall-clock hour 0-23. Optional, defaults to 0. | |
| minute | No | Wall-clock minute 0-59. Optional, defaults to 0. | |
| second | No | Wall-clock second 0-59. Optional, defaults to 0. | |
| fromTz | No | Source IANA time zone name such as America/New_York. Required for convert. | |
| toTz | No | Target IANA time zone name such as Europe/London. Required for convert. | |
| sourceTz | No | Source IANA time zone for the wall clock. Required for compare. | |
| targetTzs | No | IANA time zone names to render the instant in, 1-12 entries. Required for compare. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | The operation that was run, echoed back. |
| data | No | Result payload; shape depends on operation (object for convert/compare, string array for listSupportedTimezones). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), description adds DST awareness, mode behavior, that listSupportedTimezones ignores other fields, and that each rendered zone reports UTC offset, abbreviation, and DST flag. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph, front-loaded with purpose, then mode details, then sibling comparisons, then behavioral notes. Slightly dense but efficient; every sentence adds value. Could be slightly more structured with line breaks.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (3 modes, many parameters, output schema present), the description covers all necessary context: operation selection, parameter requirements per mode, return value semantics (UTC offset, abbreviation, DST), and performance characteristics (local, rate-limited).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already well described. The description adds value by grouping parameters per mode and clarifying which are required for each operation, reinforcing the schema without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it's a wall-clock time zone converter with three named modes (convert, compare, listSupportedTimezones). It distinguishes from sibling tools (time_world_clock, time_iso_8601_formatter, convert_timestamp) by specifying their different use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('zone-to-zone wall-clock math') and lists three sibling tools for other time-related tasks. Also mentions local computation, no network, and rate limits, setting clear expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_week_numberARead-onlyIdempotent
Week Number Calculator. Pure deterministic week-numbering over UTC with no clock/now dependency — every date or week is supplied by the caller. operation "fromDate" returns the week number and week-year of a calendar date under all four schemes at once (ISO 8601 = Monday-start, week 1 holds Jan 4 / the first Thursday; US = Sunday-start, week 1 holds Jan 1; simple = Jan 1-7 is week 1; epi/MMWR CDC = Sunday-start, week 1 has at least 4 days in the new year). operation "toDate" maps a (scheme, year, week) back to that week's start and end dates; "weeksInYear" returns 52/53/54 for a scheme+year; "weekRange" returns the full list of dates in a week. Use this for ISO week numbers or week-to-date conversion; use time_day_of_week for the weekday name of a date and time_date_calculator for adding/subtracting durations or business days. Read-only, non-destructive, idempotent, offline-capable, rate-limited (60 req/min anonymous), no auth. Result is wrapped as operation plus data.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | "fromDate": week numbers for a date (needs year/month/day). "toDate": start/end dates of a week (needs scheme/year/week). "weeksInYear": week count for a scheme+year (needs scheme/year). "weekRange": every date in a week (needs scheme/year/week). | |
| scheme | No | Week-numbering scheme. Required for toDate, weeksInYear, and weekRange; ignored by fromDate (which returns all four). iso = ISO 8601 Monday-start; us = Sunday-start week 1 holds Jan 1; simple = Jan 1-7 is week 1; epi = MMWR/CDC. | iso |
| year | No | Calendar year in the proleptic Gregorian calendar. Required for every operation. | |
| month | No | Month 1-12. Required when operation is fromDate. | |
| day | No | Day 1-31; must be a real calendar date. Required when operation is fromDate. | |
| week | No | Week number 1-54; must not exceed the scheme/year week count. Required when operation is toDate or weekRange. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | The operation that was run, echoed back (fromDate, toDate, weeksInYear, or weekRange). |
| data | No | Result payload; shape depends on operation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds significant value by stating it is 'pure deterministic week-numbering over UTC with no clock/now dependency', 'Read-only, non-destructive, idempotent, offline-capable, rate-limited (60 req/min anonymous), no auth.' It also explains the four week-numbering schemes in detail, which is well beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long but well-structured, front-loading the purpose and then detailing each operation. It includes usage guidelines and behavioral traits. Every sentence adds value, though it could be slightly more concise. Still, it is well-organized and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (4 operations, 4 schemes, 6 parameters) and the presence of an output schema, the description combined with the schema is complete. The description covers all operations and schemes, and the schema provides full parameter details. The rule allows that output schema need not explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description provides high-level operation summaries (e.g., what each operation needs) but does not add significant per-parameter meaning beyond what the schema already provides. The schema descriptions themselves are thorough, so the description adds marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a 'Week Number Calculator' and lists four specific operations (fromDate, toDate, weeksInYear, weekRange) with detailed explanations of each. It also distinguishes from sibling tools time_day_of_week and time_date_calculator by specifying their different use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Use this for ISO week numbers or week-to-date conversion' and when not to use: 'use time_day_of_week for the weekday name of a date and time_date_calculator for adding/subtracting durations or business days.' This provides clear guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_working_days_calculatorARead-onlyIdempotent
Working Days Calculator. Pure deterministic proleptic-Gregorian working-day math over UTC, with no clock/now dependency — every date is supplied by the caller. operation "countBetween" counts Mon-Fri working days in the inclusive range [from, to], optionally excluding a holiday list, and returns the breakdown (total calendar days, weekend days, weekday holidays counted, working days, holidays that fell in range). operation "addWorkingDays" shifts a base date by a signed number of working days, skipping Saturdays, Sundays, and listed holidays, and returns the resulting date plus how many weekends/holidays were stepped over. Use this for business-day counts or weekend/holiday-skipping date arithmetic; use time_date_difference for plain calendar diffs or business-day counts without holiday exclusion, and time_date_calculator for weekend-skipping arithmetic by years/months/days. Read-only, non-destructive, idempotent, offline-capable, rate-limited (60 req/min anonymous), no auth. Result is wrapped as operation pl
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | "countBetween": count working days between two dates (needs from* and to*). "addWorkingDays": shift a base date by working days (needs year/month/day and days). | |
| fromYear | No | Start-date year (proleptic Gregorian). Required when operation is countBetween. | |
| fromMonth | No | Start-date month 1-12. Required when operation is countBetween. | |
| fromDay | No | Start-date day 1-31; must be a real calendar date. Required when operation is countBetween. | |
| toYear | No | End-date year; must be on or after the from date. Required when operation is countBetween. | |
| toMonth | No | End-date month 1-12. Required when operation is countBetween. | |
| toDay | No | End-date day 1-31. Required when operation is countBetween. | |
| year | No | Base-date year. Required when operation is addWorkingDays. | |
| month | No | Base-date month 1-12. Required when operation is addWorkingDays. | |
| day | No | Base-date day 1-31; must be a real calendar date. Required when operation is addWorkingDays. | |
| days | No | Signed number of working days to add (positive) or subtract (negative); 0 returns the base date. Required when operation is addWorkingDays. | |
| holidays | No | Optional dates to treat as non-working days, in addition to weekends. Duplicates are deduped; each must be a real calendar date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | The operation that was run, echoed back (countBetween or addWorkingDays). |
| data | No | Result payload; shape depends on operation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description adds that it's pure deterministic proleptic-Gregorian over UTC, no clock dependency, rate-limited (60 req/min anonymous), and requires no auth. It also describes the wrapped output. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for each operation and usage guidance. It front-loads the purpose. While slightly lengthy, every sentence adds value, and the structure aids readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (two operations, many parameters) and the presence of an output schema and annotations, the description covers purpose, operations, parameter semantics, usage guidelines, behavioral traits, rate limits, and alternatives. It is fully adequate for correct agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning by explaining the two operations, their parameter groups, and the return values (breakdown for countBetween, resulting date and counts for addWorkingDays). It also clarifies holiday behavior (dedup, real dates). This provides value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes working days with two operations (countBetween and addWorkingDays). It explicitly distinguishes itself from sibling tools like time_date_difference and time_date_calculator by specifying appropriate use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives: use this for business-day counts with holiday exclusion, use time_date_difference for plain calendar diffs, and time_date_calculator for weekend-skipping arithmetic. It also notes read-only, idempotent, and offline-capable properties.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_world_clockARead-only
World Clock. Render the current wall-clock time across multiple IANA time zones at once, each with date, UTC offset, zone abbreviation, weekday, and DST flag. The 'operation' field selects the mode. 'snapshot' takes 'tzs' (1-12 IANA names) and an optional 'iso' instant; when 'iso' is omitted it uses the server's current time, so the result changes every call (live clock). Pass an explicit 'iso' to pin a fixed instant and get a stable, repeatable result. 'listSupportedTimezones' returns the curated IANA name list and ignores other fields. Use this for a multi-city now view; use time_timezone_converter for one-off wall-clock zone-to-zone conversion, or time_iso_8601_formatter for ISO/RFC string parsing. Pure local computation against the bundled tz database, no network or storage; read-only, non-destructive, rate-limited (60 req/min anonymous, no auth). Each zone reports isoLocal, weekday, offset, abbreviation, and isDst.
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Mode to run. 'snapshot' renders the instant across the 'tzs' zones. 'listSupportedTimezones' returns the curated IANA list and ignores all other fields. | |
| tzs | No | IANA time zone names to render, 1-12 entries such as America/New_York or Asia/Tokyo. Required for snapshot. | |
| iso | No | Optional ISO 8601 instant to render. When omitted or empty the server current time is used, making the result non-idempotent. Supply it to pin a fixed instant. |
Output Schema
| Name | Required | Description |
|---|---|---|
| operation | No | The operation that was run, echoed back. |
| data | No | Result payload; an object for snapshot, a string array for listSupportedTimezones. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds significant behavioral context beyond annotations: pure local computation, no network/storage, rate-limited (60 req/min anonymous), and explains live vs pinned instant behavior. Annotations already declare readOnlyHint and destructiveHint, but description enriches understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise yet comprehensive, front-loaded with purpose, then operational details. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists and annotations are rich, the description is complete. It covers all operations, parameter behaviors, and use cases. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds meaning: explains operation modes, tzs constraints (1-12 entries), and iso's optional nature with idempotency implications. This goes beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renders wall-clock time across multiple IANA time zones with details like date, offset, abbreviation, etc. It distinguishes itself from sibling tools like time_timezone_converter and time_iso_8601_formatter, making its purpose specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use this for a multi-city now view; use time_timezone_converter for one-off wall-clock zone-to-zone conversion, or time_iso_8601_formatter for ISO/RFC string parsing.' Also explains operation modes and when to use each.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_base64_image_encoderARead-onlyIdempotent
Base64 Image Encoder With Code Snippets. Decode a base64-encoded image, sniff its real MIME type and pixel dimensions from the file header (PNG, JPEG, GIF, WebP), and emit ready-to-paste embed snippets: raw base64, a data URI, CSS background rules, HTML img/inline-style tags, a JavaScript variable, and a JSON descriptor. Pass the image bytes as base64 in the fileData field (a full data:...;base64,... URI is also accepted and stripped). Use this when you want embeddable code for a raster image; use webdev_data_uri_generator to turn arbitrary text/SVG/MIME content into a data URI without image-dimension detection, or file_base64_file_encoder to base64-encode a non-image file. Runs locally on the data you provide: read-only, non-destructive, contacts no external service, and is rate-limited. Returns detected MIME type, width, height, byte sizes, the base64 string, and a keyed set of code snippets.
| Name | Required | Description | Default |
|---|---|---|---|
| fileData | Yes | The image as base64. A bare base64 payload or a full data:<mime>;base64,<...> URI is accepted; the prefix and whitespace are stripped. Must decode to a PNG, JPEG, GIF, or WebP; invalid or non-image data returns HTTP 400. | |
| fileName | No | Base name used in the generated snippets (CSS class, img alt, JS variable). Non-alphanumeric characters become hyphens. Defaults to image. | |
| fileType | No | MIME type to write into the data URI, e.g. image/png. Defaults to the MIME detected from the file header. | |
| includeDataUri | No | Include the full data-URI output entry. Defaults to true. | |
| includeMimeType | No | Retained in the echoed options. Defaults to true. | |
| format | No | Snippet preference echoed back in options. Defaults to inline. |
Output Schema
| Name | Required | Description |
|---|---|---|
| originalFileName | No | Sanitized base name used in the snippets. |
| detectedMimeType | No | MIME type sniffed from the file header (image/png, image/jpeg, image/gif, image/webp). |
| imageWidth | No | Image width in pixels, read from the header. |
| imageHeight | No | Image height in pixels, read from the header. |
| originalSize | No | Decoded image size in bytes. |
| base64Size | No | Length of the base64 string in characters. |
| base64Data | No | Normalized raw base64 (no data-URI prefix, no whitespace). |
| outputs | No | Keyed code snippets (base64, dataUri, css, cssComplete, htmlImg, htmlInline, javascript, json); each value has title, description, and content strings. |
| options | No | Echoed request options: includeDataUri, includeMimeType, format. |
| error | No | Present instead of the above when input is invalid or not a supported image. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds that it runs locally, is read-only, non-destructive, contacts no external service, and is rate-limited, providing useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is informative but not overly verbose; three sentences cover purpose, usage, and output. Slightly long but each sentence is valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 params, output schema), the description covers purpose, guidelines, behavior, and return value (detected MIME, dimensions, snippets). No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with descriptions for all 6 parameters. Description provides slight additional context (e.g., accepting full data URI, default fileName), but baseline is 3 due to high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool encodes base64 images, sniffs MIME type and dimensions, and emits code snippets. It explicitly distinguishes from siblings like webdev_data_uri_generator and file_base64_file_encoder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use (embeddable code for raster images) and when not (use webdev_data_uri_generator for text/SVG, file_base64_file_encoder for non-image files).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_border_radius_generatorARead-onlyIdempotent
CSS Border Radius Generator. Generate CSS border-radius code for rounded corners from four per-corner pixel values and return the optimised declaration plus copy-ready usage snippets and an HTML preview. Collapses identical corners to the shortest form (one value when all equal, two-value when diagonals match, else four values). Use webdev_box_shadow_generator instead for drop/inset shadow effects, webdev_css_gradient_generator for gradient backgrounds, and webdev_css_filter_generator for blur/brightness filter effects. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/min for anonymous callers). Returns the border-radius CSS string, whether the radius is uniform, an HTML preview snippet, the echoed corner values, and CSS/inline/SCSS/Tailwind/individual-property usage examples.
| Name | Required | Description | Default |
|---|---|---|---|
| borderRadius | Yes | Per-corner radii in pixels; at least one corner is required (empty object returns HTTP 400). Missing corners default to 0. | |
| previewSettings | No | Optional styling for the returned HTML preview snippet only; does not affect the generated CSS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| css | No | The optimised border-radius declaration, e.g. "border-radius: 8px;". |
| isUniform | No | True when all four corners share the same radius. |
| previewHtml | No | Self-contained HTML snippet rendering a preview box with the generated radius. |
| borderRadius | No | The corner values echoed back from the request. |
| usageExamples | No | Keyed copy-ready snippets (css, inline, sass, tailwind, individual); each has a title and code string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds behavioral details such as collapsing identical corners to shortest form, local execution without external service, and rate limiting, which go beyond the annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly concise and front-loaded with the main purpose. While it contains multiple sentences, each adds necessary value. Minor redundancy could be trimmed, but overall it is well-structured without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (context signal), the description does not need to detail return values, but it still summarizes the returned items (CSS string, uniformity flag, HTML preview, echoed values, usage examples). This makes the tool's behavior fully understandable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning: it explains that missing corners default to 0, empty object returns HTTP 400, and previewSettings only affect the preview HTML, not the generated CSS. This clarifies parameter behavior beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool generates CSS border-radius code from per-corner pixel values, returning optimized declarations, usage snippets, and an HTML preview. It also explicitly distinguishes itself from sibling tools like webdev_box_shadow_generator and webdev_css_gradient_generator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use guidance by naming alternative tools for shadows, gradients, and filters. It also informs about local execution, read-only behavior, non-destructive nature, and rate limits, aiding the agent in selecting the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_box_shadow_generatorARead-onlyIdempotent
CSS Box Shadow Generator. Compose one or more CSS box-shadow layers from per-layer offset, blur, spread, color, opacity, and inset settings, then return the combined box-shadow declaration plus a ready-to-paste HTML preview and CSS, inline, SCSS, and Tailwind usage snippets. Layers are joined in order into a single comma-separated declaration; per-layer opacity below 1 is folded into the color as rgba. Use webdev_border_radius_generator instead for rounded corners, webdev_css_gradient_generator for gradient backgrounds, and webdev_css_filter_generator for blur and brightness filter effects. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the box-shadow CSS string, the rendered preview HTML, the echoed layers, the layer count, and keyed usage examples.
| Name | Required | Description | Default |
|---|---|---|---|
| shadows | Yes | One or more shadow layers, joined left-to-right into one box-shadow declaration. At least one layer is required (empty returns HTTP 400). | |
| previewSettings | No | Optional sizing and colors for the generated preview HTML only; does not affect the CSS declaration. |
Output Schema
| Name | Required | Description |
|---|---|---|
| css | No | The combined box-shadow CSS declaration joining all layers, ready to paste into a stylesheet. |
| previewHtml | No | Self-contained HTML snippet rendering the shadow on a sample element. |
| usageExamples | No | Keyed copy-ready snippets (css, inline, sass, tailwind); each value has title and code strings. |
| shadows | No | The echoed shadow layers after normalization. |
| shadowCount | No | Number of shadow layers in the declaration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it adds local execution, rate limits, and opacity folding behavior. No contradiction with readOnlyHint/ idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded purpose, efficient and complete without extra words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Mentions all key return elements and usage snippets. Output schema exists but description still provides context. No missing critical info.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds value by summarizing parameters and explaining layer joining and opacity handling, earning a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates CSS box shadows from layers, with output details like combined declaration and usage snippets. It explicitly distinguishes from siblings by naming alternatives for related tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Directly specifies when to use alternatives: 'use webdev_border_radius_generator... for rounded corners' etc. Also states context: runs locally, read-only, rate-limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_code_formatterARead-onlyIdempotent
HTML/CSS/JS Code Formatter and Minifier. Pretty-print or minify a single HTML, CSS, or JavaScript snippet using whitespace/brace indentation rules. Set language to pick the dialect and action to format (readable, indented) or minify (whitespace/comments stripped). This is the multi-language dispatcher: use webdev_css_beautifier or webdev_javascript_beautifier for those single languages, and webdev_sql_formatter, json_formatter, or webdev_xml_formatter for SQL/JSON/XML (not supported here). Heuristic whitespace formatter, not an AST validator, so JSX, template literals, and malformed input may need review. Runs locally via a Node bridge: read-only, non-destructive, contacts no external service, rate-limited (60 req/min anon). Returns the processed output plus size/line statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Source code to process (alias: input). Must be non-empty. | |
| language | No | Source dialect. Unknown values fall back to html. | html |
| action | No | format = readable indentation; minify = strip whitespace (and comments unless preserved). Any value other than "minify" is treated as format. | format |
| options | No | Formatting/minifying options. |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | No | The original code, echoed back. |
| output | No | The formatted or minified result. |
| language | No | Language actually used (post-fallback). |
| action | No | Action actually applied. |
| statistics | No | Size and line metrics comparing input to output. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, non-destructive), description adds details about local execution via Node bridge, rate limiting (60 req/min anon), and output contents (size/line stats). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with key actions, and structured with clear sections: summary, usage guidance, limitations, and behavioral notes. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 params, nested object, output schema), the description covers all essential aspects: purpose, usage, alternatives, limitations, behavior, and output. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the meaning of 'format' vs 'minify' actions and the role of indentSize, but schema descriptions already cover parameters well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool formats and minifies HTML, CSS, or JavaScript code, and identifies it as a multi-language dispatcher. It differentiates from sibling tools like webdev_css_beautifier and webdev_javascript_beautifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool versus alternatives (e.g., for single languages or SQL/JSON/XML). Also warns about limitations like JSX and malformed input, guiding appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_color_paletteARead-only
Color Palette Generator. Generate a harmonious color palette from a base hex color using a chosen color-theory scheme (complementary, analogous, triadic, tetradic, monochromatic, or random). Use this when you want a multi-color scheme derived from one seed color; use webdev_css_gradient_generator instead when you need CSS gradient code, or webdev_hex_color to inspect or convert a single color. Runs locally on the values you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). The random scheme draws fresh colors each call, so output is not idempotent. Returns each color as hex, RGB, and HSL plus its nearest name, white-background contrast ratio, and light/dark flag.
| Name | Required | Description | Default |
|---|---|---|---|
| paletteType | Yes | Color-theory scheme that determines how the other colors are derived from baseColor. Required; an unrecognized value is rejected with HTTP 400. | |
| baseColor | No | Seed color as a 3- or 6-digit hex string (formats #RGB or #RRGGBB). Defaults to #3498db. | #3498db |
| colorCount | No | Total number of colors to return, including the base color. Must be an integer from 2 to 12. |
Output Schema
| Name | Required | Description |
|---|---|---|
| baseColor | No | Normalized lowercase 6-digit base hex color used. |
| paletteType | No | The scheme applied to derive the palette. |
| colorCount | No | Number of colors returned. |
| colors | No | The generated colors in scheme order; the first is the base color. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, description discloses local execution, read-only nature, rate limits, non-idempotence of random scheme, and output details (hex, RGB, HSL, contrast). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a concise paragraph with front-loaded purpose, every sentence adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (3 params, output schema exists), the description covers purpose, usage, behavior, parameters, and output, making it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description adds limited input info beyond schema. It notes random scheme non-idempotence (relevant to paletteType) but otherwise the schema fully documents parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it generates a harmonious color palette from a base hex color using a chosen scheme, distinguishing it from sibling tools like webdev_css_gradient_generator and webdev_hex_color.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use this tool (multi-color scheme from one seed) and when to use alternatives (gradient, single color).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_css_beautifierARead-onlyIdempotent
CSS Beautifier. Pretty-print and re-indent minified or messy CSS with configurable indent size and type (spaces or tabs), brace/colon spacing, blank lines between rules, comment preservation, alphabetical property sorting, and a final-newline toggle. Use it to make CSS readable; use webdev_css_minifier for the inverse (strip whitespace to shrink for production), and webdev_code_formatter when you need HTML, CSS, or JS handled in one multi-language pass. Runs locally via a Node bridge on the CSS you provide: read-only, non-destructive, idempotent, offline, contacts no external service, and is rate-limited (anonymous 60/min, 500/hr, 2000/day). Returns the beautified CSS plus original/beautified byte sizes and the size-change delta and percentage.
| Name | Required | Description | Default |
|---|---|---|---|
| css | Yes | The CSS source to beautify. Must be non-empty. | |
| indentSize | No | Spaces per indent level; ignored when indentType is "tabs". | |
| indentType | No | Indent with spaces or a tab character. | spaces |
| newlineBeforeRule | No | Insert a blank line before each selector and comment block. | |
| newlineAfterRule | No | Put the opening brace and closing brace on their own lines. | |
| newlineBeforeProperty | No | Indent each declaration on its own line. | |
| spaceAfterColon | No | Add a space after the colon in each declaration. | |
| spaceBeforeBrace | No | Add a space between the selector and the opening brace. | |
| preserveComments | No | Keep CSS comments; when false they are dropped. | |
| sortProperties | No | Sort declarations alphabetically within each rule. | |
| insertFinalNewline | No | Ensure the output ends with a trailing newline. |
Output Schema
| Name | Required | Description |
|---|---|---|
| original | No | The original CSS, trimmed and echoed back. |
| beautified | No | The formatted, re-indented CSS. |
| originalSize | No | Original CSS length in characters. |
| beautifiedSize | No | Beautified CSS length in characters. |
| sizeChange | No | beautifiedSize minus originalSize (negative when smaller). |
| changePercentage | No | Percent size change relative to the original (2-decimal rounded). |
| options | No | The normalized options actually applied (defaults filled in). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds key operational traits: runs locally via Node bridge, offline, rate-limited (60/min, 500/hr, 2000/day), non-destructive, idempotent. Also describes return value (sizes and delta). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single well-structured paragraph: starts with tool purpose, then sibling differentiation, then behavioral notes, then return info. Dense but not verbose given 11 parameters and multiple siblings. Could be slightly shorter but earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage vs siblings, behavioral traits (local, rate limits), and return value. With output schema present, no need to detail return structure. Schema covers parameters. Minor gap: does not explicitly mention that it works on CSS strings only (but schema required field 'css' makes it obvious).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 11 parameters with 100% description coverage. The description offers a high-level summary of options (indent size/type, spacing, comments, sorting, newline) but adds no detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'CSS Beautifier' with verb 'Pretty-print and re-indent' and resource 'minified or messy CSS'. Explicitly distinguishes from siblings: webdev_css_minifier for minification and webdev_code_formatter for multi-language formatting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when-to-use ('make CSS readable') and when-not-to-use ('use webdev_css_minifier for the inverse, webdev_code_formatter for multi-language'). Gives direct alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_css_filter_generatorARead-onlyIdempotent
CSS Filter Generator. Compose a CSS filter declaration from an ordered list of filter functions and return the ready-to-paste code plus a live HTML preview. Supports blur, brightness, contrast, grayscale, hue-rotate, invert, opacity, saturate, sepia, and drop-shadow; each entry pairs a type with its value (drop-shadow instead takes offsetX/offsetY/blurRadius/color). Use webdev_css_gradient_generator for backgrounds, webdev_box_shadow_generator for box-shadow (not the filter drop-shadow variant), and webdev_color_palette to pick colors first. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/min anonymous). Returns the filter CSS string, an HTML preview snippet, the echoed filters, a filter count, a drop-shadow flag, and CSS/inline/SCSS/Tailwind/image/backdrop usage examples.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | Yes | Ordered filter functions to combine; at least one is required (empty returns HTTP 400). | |
| previewSettings | No | Optional dimensions/colors for the returned HTML preview snippet. |
Output Schema
| Name | Required | Description |
|---|---|---|
| css | No | CSS filter declaration, e.g. 'filter: blur(4px);' or 'filter: none;'. |
| previewHtml | No | Self-contained HTML snippet rendering the filter on the chosen preview surface. |
| usageExamples | No | Copy-ready snippets keyed by css/inline/sass/tailwind/image/backdrop, each with title and code. |
| filters | No | Echoed normalized filter list. |
| filterCount | No | Number of filters supplied. |
| hasDropShadow | No | True if any filter is drop-shadow. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations, detailing local execution, no external service contact, rate limits, and the return value structure. Annotations already mark readOnlyHint and destructiveHint, but the description enriches understanding with concrete constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose first, followed by details and sibling references. It is slightly verbose but every sentence adds value. Could be slightly tighter without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested parameters, output schema, multiple filter types), the description covers all essential aspects: behavior, usage, outputs, and distinctions. It enables an AI agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive property definitions. The description adds value by explaining the purpose of filter functions, units, and drop-shadow parameter grouping, complementing the schema. A minor lack of deeper nuance prevents a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a CSS filter generator that composes filter declarations and returns code and preview. It lists supported filter functions and explicitly distinguishes from sibling tools like webdev_css_gradient_generator and webdev_box_shadow_generator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives, naming siblings for gradients, box-shadow, and color picking. It also states the read-only, non-destructive, local execution and rate limits, giving clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_css_gradient_generatorARead-onlyIdempotent
CSS Gradient Generator. Build a ready-to-paste CSS gradient from an ordered list of color stops and return the full background declaration plus copy-ready usage snippets. Supports three gradient functions selected by type: linear (with a named direction like 'to right' or a custom angle), radial (circle or ellipse shape), and conic (swept from a starting angle); set repeating to emit the repeating-* variant. Use webdev_css_filter_generator instead for blur/brightness/contrast filter effects, and webdev_color_palette or webdev_hex_color to pick the colors before composing them here. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited. Returns the CSS declaration string, an HTML preview snippet, the echoed gradient settings, and CSS/inline/SCSS/Tailwind usage examples.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Gradient function to generate. | linear |
| direction | No | For linear, a named/keyword direction such as 'to right' or 'to bottom left'; pass 'custom' (or a value ending in deg) to drive the gradient by the angle field instead. For radial, 'circle' selects a circular shape and any other value yields an ellipse. Ignored for conic. | to right |
| angle | No | Angle in degrees. Used as the linear-gradient angle when direction is custom, and as the conic-gradient starting angle (from Ndeg). Ignored otherwise. | |
| colors | Yes | Ordered color stops; at least one is required (empty returns HTTP 400). | |
| repeating | No | When true, emit the repeating-* gradient variant (repeating-linear/radial/conic-gradient). |
Output Schema
| Name | Required | Description |
|---|---|---|
| css | No | Full CSS declaration, e.g. background: linear-gradient(to right, #22d3ee 0%, #a3e635 100%); |
| previewHtml | No | A self-contained div HTML snippet with the gradient applied inline, for live preview. |
| usageExamples | No | Copy-ready snippets keyed by format (css, inline, sass, tailwind), each with a title and code. |
| type | No | Echoed gradient type (linear, radial, or conic). |
| direction | No | Echoed direction/shape value. |
| angle | No | Echoed angle in degrees. |
| colors | No | Echoed color stops, each an object with color and optional position. |
| repeating | No | Echoed repeating flag. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only, non-destructive, idempotent. Description adds local execution, rate limiting, and reinforces non-destructive nature. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise (4 sentences) and front-loaded with purpose and key details. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complex parameters and output schema existence, description covers return values (CSS declaration, preview, settings, examples) and usage context thoroughly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. Description adds context like required length, defaults, and ignored fields, enhancing understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the tool generates CSS gradients from color stops, returning background declarations and snippets. It differentiates from siblings like webdev_css_filter_generator and webdev_color_palette.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use alternatives: filter effects (webdev_css_filter_generator) and color picking (webdev_color_palette/webdev_hex_color), and that it runs locally without external services.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_css_minifierARead-onlyIdempotent
CSS Minifier. Minify CSS by stripping comments and collapsing whitespace, and optionally compressing hex/named colors, shortening zero-value units, preserving !important, and tightening universal-selector combinators. Pass the stylesheet as the css parameter; each transform is an independent boolean toggle. Use webdev_code_formatter or webdev_css_beautifier to expand CSS for readability instead, webdev_sass_compiler to compile SCSS/SASS into CSS first, and webdev_html_minifier or webdev_js_minifier for standalone markup or scripts. Regex-based minifier, not a CSS parser, so unusual or malformed input may need review. Runs locally via a Node bridge: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the minified CSS plus original/minified byte sizes, byte savings, and compression ratio.
| Name | Required | Description | Default |
|---|---|---|---|
| css | Yes | CSS source to minify. Must not be blank; an empty value returns a 400 error. | |
| removeComments | No | Strip CSS comment blocks. | |
| removeWhitespace | No | Collapse whitespace and remove space around braces, colons, semicolons, and combinators. | |
| compressColors | No | Shorten 6-digit hex colors to 3 digits and replace common color names with shorter hex values. | |
| compressUnits | No | Drop leading zeros and remove units from zero values (for example 0px becomes 0). | |
| preserveImportant | No | Keep !important declarations intact during minification. | |
| optimizeSelectors | No | Tighten universal-selector combinators (for example a star then child combinator becomes just the child combinator). |
Output Schema
| Name | Required | Description |
|---|---|---|
| original | No | The submitted CSS, echoed back. |
| minified | No | The minified CSS output. |
| originalSize | No | Length of the original CSS in characters. |
| minifiedSize | No | Length of the minified CSS in characters. |
| compressionRatio | No | Percentage size reduction, rounded to two decimals (0 when input is empty). |
| savings | No | Characters saved (originalSize minus minifiedSize). |
| options | No | The effective options after defaults were applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses regex-based operation, local execution via Node bridge, read-only and non-destructive nature, and rate limits (60 req/min). Adds context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, well-structured paragraph front-loading core purpose; every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, behavioral traits, parameter semantics, and output (minified CSS with sizes, savings, ratio). Complete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Summarizes each boolean toggle's effect (e.g., 'compressColors shortens 6-digit hex to 3 digits') and clarifies css parameter must not be blank. Adds meaning beyond 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'CSS Minifier' and specifies actions: stripping comments, collapsing whitespace, and optional optimizations. Distinguishes from siblings like webdev_css_beautifier and webdev_sass_compiler.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes when to use (minifying CSS) and when not to (expanding CSS, compiling SCSS, minifying HTML/JS), naming specific sibling tools as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_csv_to_jsonARead-onlyIdempotent
CSV to JSON Converter. Parse delimited (CSV) text into JSON, with type coercion (numeric/boolean/null), custom delimiter/enclosure/escape, optional header row, and array-of-objects or array-of-arrays output. This is the CSV-to-JSON direction: use webdev_json_to_csv for the reverse, json_formatter to pretty-print/validate existing JSON, or text_column_tool to align/extract columns without converting. Runs locally via a Node bridge: read-only, non-destructive, contacts no external service, rate-limited (60 req/min anon). Returns the JSON string plus validity flag, per-row column-mismatch warnings, and size/row/column statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| csv | Yes | CSV text to convert. Must be non-empty. | |
| delimiter | No | Field separator. Empty string falls back to comma. | , |
| enclosure | No | Quote character wrapping fields that contain delimiters or newlines. | " |
| escape | No | Character that escapes an enclosure character inside a quoted field. | " |
| hasHeader | No | Treat the first row as column names; when false, object keys become Column1, Column2, etc. | |
| outputFormat | No | object = array of keyed records; array = array of value arrays. Alias: format. Unknown values fall back to object. | object |
| prettyPrint | No | Indent the JSON string with 2 spaces; false produces compact JSON. | |
| skipEmptyRows | No | Drop rows that are blank or all-empty after parsing. | |
| trimFields | No | Strip leading/trailing whitespace from every field and header. |
Output Schema
| Name | Required | Description |
|---|---|---|
| original | No | The original CSV input, echoed back. |
| json | No | The converted JSON as a string (indented when prettyPrint is true). |
| isValid | No | True when no fatal parse errors occurred. |
| errors | No | Fatal parse error messages (non-field-mismatch); empty on success. |
| warnings | No | Per-row column-count mismatch messages. |
| stats | No | Conversion metrics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint false, idempotentHint true. The description adds specific behavioral context: runs locally, non-destructive, rate-limited (60 req/min anon), and contacts no external service. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise paragraph that front-loads the main purpose, then efficiently covers usage guidelines, behavioral context, and return value details. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, 100% coverage, annotations, output schema present), the description is complete: it explains purpose, when to use, behavioral traits, rate limits, and explicitly states the return value includes JSON string, validity flag, warnings, and statistics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description mentions features like 'custom delimiter/enclosure/escape, optional header row, and array-of-objects or array-of-arrays output' but does not add meaningful detail beyond what the schema already provides with examples and descriptions for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'CSV to JSON Converter' and enumerates key features like type coercion, custom delimiters, and output formats. It distinguishes from sibling tools by naming webdev_json_to_csv for reverse conversion, json_formatter for pretty-printing, and text_column_tool for column extraction without conversion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool vs alternatives, providing direct references to reverse tool, pretty-printing tool, and column-alignment tool. It also states it 'runs locally' and 'contacts no external service', and gives rate limits (60 req/min anon).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_data_uri_generatorARead-onlyIdempotent
Data URI Generator From Text Or Base64 File. Build a data: URI from supplied content so it can be embedded inline in HTML, CSS, or JavaScript with no separate file fetch. Two modes via inputMethod: text base64- and URL-encodes a raw string (textInput) and returns both variants plus the shorter recommended one; file wraps an already-base64-encoded payload (fileData) and sniffs/optimizes its MIME type. Use this for arbitrary text, SVG markup, CSS, JS, or any MIME you name; use webdev_base64_image_encoder instead when you have a raster image and need pixel-dimension detection, or encoding_decoding_base64 for plain base64 encode/decode without the data: wrapper. Runs locally on the data you provide: read-only, non-destructive, contacts no external service, idempotent, and rate-limited (30 requests/minute for anonymous callers). Returns the data URI(s), MIME type, byte sizes, encoding variations, a recommended encoding, suitability analysis, and optional embed code examples.
| Name | Required | Description | Default |
|---|---|---|---|
| inputMethod | No | Which source to encode. text uses textInput; file uses fileData. Defaults to file. | file |
| textInput | No | Raw text/markup to encode (text mode). Required and non-empty when inputMethod is text; empty returns HTTP 400. | |
| mimeType | No | MIME type written into the text-mode data URI, e.g. text/plain, text/html, text/css, image/svg+xml. Defaults to text/plain. | text/plain |
| encoding | No | Charset label used when includeCharset is true (text mode). Defaults to utf-8. | utf-8 |
| fileData | No | File bytes as base64 (file mode). A bare base64 payload or a full data:<mime>;base64,<...> URI is accepted; the prefix is stripped. Required and non-empty when inputMethod is file; empty or invalid base64 returns HTTP 400. | |
| fileName | No | File name used for extension-based MIME detection and in generated examples (file mode). Defaults to file. | file |
| fileType | No | Provided MIME type for the file (file mode); may be overridden by detected type. Defaults to application/octet-stream. | application/octet-stream |
| includeCharset | No | When true (text mode), also emit charset-tagged base64 and URL-encoded variations. Defaults to false. | |
| optimizeSize | No | Echoed back in options; size is always compared across variations. Defaults to false. | |
| generateExamples | No | Include ready-to-paste embed code examples in the response. Defaults to true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| inputMethod | No | Echoes which mode produced the result: text or file. |
| textInput | No | Echo of the input string (text mode only). |
| mimeType | No | MIME type used in the data URI (text mode; also nested in analysis). |
| encoding | No | Charset label used (text mode). |
| textLength | No | UTF-8 byte length of the input text (text mode). |
| variations | No | Text mode: data URIs keyed by encoding - base64, urlencoded, and (when includeCharset) base64_charset, urlencoded_charset. |
| recommended | No | The shortest variation data URI (text mode). |
| originalFileName | No | Echo of fileName (file mode). |
| providedMimeType | No | The fileType supplied by the caller (file mode). |
| detectedMimeType | No | MIME type sniffed from content/extension, or null if undetermined (file mode). |
| originalSize | No | Decoded payload size in bytes (file mode). |
| dataUriSize | No | Character length of the generated data URI (file mode). |
| sizeOverhead | No | Percentage size increase of the data URI over the raw bytes (file mode). |
| dataUri | No | The generated base64 data URI (file mode). |
| optimizedDataUri | No | Data URI rebuilt with the detected MIME type when it differs (file mode). |
| isOptimized | No | True when optimizedDataUri differs from dataUri (file mode). |
| analysis | No | Breakdown of the data URI: mimeType, isBase64Encoded, hasCharset, parameters, isImage, isText, suitableFor (file mode), or inputLength, variationCount, mostEfficient, savings, recommendations (text mode). |
| examples | No | Keyed embed snippets (HTML img, CSS background, iframe, link, script, JavaScript, JSON, download anchor) when generateExamples is true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, idempotent. Description adds that it runs locally, contacts no external service, is rate-limited (30 req/min for anonymous), and is idempotent, with no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loading purpose and modes, then usage guidelines, then behavioral notes, then return value summary. Every sentence is informative with no redundancy. Efficient use of space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 10 params, two modes, and an output schema, the description is thorough. It covers both text and file modes, explains all options (MIME, charset, examples), and describes return fields. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. Description adds meaning by explaining how inputMethod selects mode, which params are required in each mode, defaults, and behavior (e.g., charset inclusion, optimization, examples). This goes beyond raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it builds data: URIs from text or base64 file content, specifying two modes and explicitly distinguishing from sibling tools (webdev_base64_image_encoder, encoding_decoding_base64) by enumerating use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use (arbitrary text, SVG, CSS, JS, any MIME) and when-not-to-use (raster images needing pixel detection; plain base64 encode/decode), naming specific alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_favicon_generatorARead-onlyIdempotent
Favicon Bundle Generator. Render a complete favicon bundle from text, an emoji, two-letter initials, or an uploaded base64 image data URI, returning the multi-size PNG set, a multi-resolution favicon.ico, an apple-touch-icon, a site.webmanifest, ready-to-paste HTML link tags, and a downloadable ZIP. Use this to produce browser tab and home-screen icons; for embedding a single image as a data URI use webdev_base64_image_encoder, and to shrink SVG artwork first use webdev_svg_optimizer. Runs server-side on the input you provide (GD image rendering only): read-only, non-destructive, contacts no external service, caps uploads at 4 MB, and is rate-limited (30 requests/minute for anonymous callers). Returns every generated file base64-encoded plus the resolved metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| faviconType | No | Source of the icon glyph. text/initials draw textContent (initials force upper-case), emoji draws emojiContent, upload rasterizes imageDataUrl. Invalid values fall back to initials. | initials |
| textContent | No | Text or initials drawn when faviconType is text or initials. Truncated to 8 characters; font shrinks as length grows. Defaults to AB. | |
| emojiContent | No | Single emoji drawn when faviconType is emoji. Defaults to a rocket glyph. | |
| backgroundColor | No | Icon background as a 3- or 6-digit hex color (for example 4338ca). Ignored when transparentBackground is true. Defaults to 4338ca. | |
| textColor | No | Glyph color as a 3- or 6-digit hex color. Defaults to ffffff. | |
| shape | No | Icon outline shape. Non-square shapes mask the corners to transparency. | rounded |
| fontFamily | No | CSS font stack hint for text glyphs; unrecognized values fall back to Arial. | Arial, sans-serif |
| sizes | No | Pixel sizes of PNG icons to emit (deduped and sorted). Out-of-range values are dropped. Defaults to 16, 32, 48, 64, 180, 192, 512. 16/32/48 always feed the .ico, 180 the apple-touch-icon, 192/512 the manifest. | |
| imageDataUrl | No | Source artwork for faviconType upload as a base64 data URI (png, jpeg, gif, webp, or svg+xml; SVG needs Imagick). Required for the upload type; max 4 MB decoded. | |
| imageFit | No | How an uploaded image is scaled into the square canvas. | contain |
| transparentBackground | No | When true, omit the background fill and keep the canvas transparent. | |
| padding | No | Inner padding as a fraction of icon size (clamped 0 to 0.4). | |
| siteName | No | Application name written into site.webmanifest. Falls back to tabTitle then Your Website. | |
| tabTitle | No | Page title used in the generated preview HTML; also the manifest name fallback. Defaults to Your Website. | |
| themeColor | No | theme-color meta and manifest theme as a 6-digit hex color. Defaults to backgroundColor. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether generation succeeded. |
| result | No | The generated bundle. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. Description adds rich behavioral context: runs server-side, read-only, non-destructive, contacts no external service, upload cap 4 MB, rate-limited (30 req/min for anonymous). Also details internal behavior like truncation, font scaling, fallbacks. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph of about 5 sentences. Front-loaded with main purpose and outputs. Dense but clear; could benefit from slight structural separation (e.g., bullet points), but remains concise and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 15 parameters, 0 required, and presence of output schema, description covers all necessary aspects: input types, output format (base64-encoded files + metadata), constraints (size, rate limits), and fallback behaviors. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with full parameter descriptions. Description adds extra context: e.g., initials force upper-case, font shrinks as length grows, defaults for various fields, relationships like sizes roles in .ico/apple-touch-icon/manifest. This goes beyond schema, justifying above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it generates a favicon bundle from text, emoji, initials, or upload. Lists specific outputs: multi-size PNG set, favicon.ico, apple-touch-icon, site.webmanifest, HTML tags, and downloadable ZIP. Explicitly distinguishes from sibling tools webdev_base64_image_encoder and webdev_svg_optimizer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use this to produce browser tab and home-screen icons'. Also provides clear alternatives: 'for embedding a single image as a data URI use webdev_base64_image_encoder, and to shrink SVG artwork first use webdev_svg_optimizer'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_graphql_formatterARead-onlyIdempotent
GraphQL Formatter and Minifier. Pretty-print or minify a GraphQL document (query, mutation, subscription, fragment, or SDL schema) with configurable indentation, and report bracket-balance validation plus document statistics. Use webdev_sql_formatter for SQL and webdev_json_formatter for JSON. This is a syntactic formatter only: it never sends the document to a GraphQL server or executes any operation. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the formatted document, an isValid flag with any brace/parenthesis/bracket errors and warnings, and statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| graphql | Yes | The GraphQL document to format. Must not be blank. | |
| format | No | When true, reindent the document; when false, return the input unchanged. | |
| compactMode | No | Minify: keep comma-separated items on one line instead of one per line. | |
| indentSize | No | Number of spaces per indent level (used only when indentType is spaces). | |
| indentType | No | Indent with spaces (honouring indentSize) or with a single tab per level. | spaces |
| removeComments | No | Strip GraphQL hash (number-sign) comments before formatting. | |
| sortArguments | No | Accepted for forward compatibility; field arguments are not reordered in the current implementation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| original | No | The submitted GraphQL document, echoed back. |
| formatted | No | The reindented (or minified) GraphQL document. |
| isValid | No | True when braces, parentheses, and brackets are all balanced. |
| errors | No | Bracket-balance errors found during validation. |
| warnings | No | Non-fatal notes (for example, no operations or type definitions detected). |
| stats | No | Size and content metrics for the document. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, destructiveHint, idempotentHint), the description adds that it runs locally, contacts no external service, and is rate-limited (60 requests/minute). It also explains that it returns validation (isValid flag, errors, warnings) and statistics, providing comprehensive behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loading purpose and usage, then behavior and return value. It is slightly verbose but every sentence adds value. Minor redundancy (e.g., 'read-only, non-destructive' partially repeats annotations) but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having a rich input schema and output schema, the description covers all necessary aspects: purpose, when to use, behavioral constraints, parameter options, and return value summary. It leaves no critical gaps for an agent to misuse the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with detailed descriptions. The tool description adds value by summarizing the main parameters (indentation, compact mode, remove comments) and clarifying that sortArguments is forward-compatibility only 'accepted for forward compatibility; field arguments are not reordered'. This extra context justifies a score above baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'GraphQL Formatter and Minifier' and specifies it can pretty-print or minify GraphQL documents (queries, mutations, subscriptions, fragments, or SDL schemas). It distinguishes itself from sibling tools by name-dropping webdev_sql_formatter and webdev_json_formatter, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use alternatives: 'Use webdev_sql_formatter for SQL and webdev_json_formatter for JSON.' It also clarifies that the tool is syntactic only and never sends documents to a server, so the agent knows not to use it for execution or server interaction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_hex_colorARead-onlyIdempotent
Hex Color Viewer And Analyzer. Parse a single color string and return it in every format (HEX, RGB, HSL, HSV, CMYK) plus four generated palettes and a WCAG accessibility analysis. Accepts hex (#RGB, #RRGGBB, 0x-prefixed), rgb()/rgba(), a bare r,g,b triple, hsl(), and 21 CSS color names — it auto-detects the format, so no source-format argument is needed. Use conversion_color_code for a focused HEX/RGB/HSL/HSV conversion between two chosen formats, or webdev_color_palette when you only want harmony schemes. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited. Returns the all-format color, monochromatic/analogous/complementary/triadic palettes, and brightness, contrast, temperature, and suggested-text-color analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | The color to parse, in any supported notation: a hex value (#RGB, #RRGGBB, or 0xRRGGBB), rgb()/rgba(), a bare r,g,b triple, hsl(), or a CSS color name (red, blue, teal, etc.). Whitespace and case are ignored. Invalid input returns HTTP 400. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether parsing succeeded. |
| input | No | The input color string, echoed back. |
| color | No | The color expressed in all supported formats. |
| palettes | No | Generated harmony palettes, each an array of #RRGGBB hex strings. |
| analysis | No | Perceptual and WCAG accessibility analysis of the color. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds valuable operational context: runs locally, no external service, rate-limited. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that efficiently convey purpose, capabilities, usage guidelines, and behavioral traits. Front-loaded with main action. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given tool complexity (multiple formats, palettes, analysis), description covers all key aspects. Output schema exists, but description still details return content. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 100% with detailed description and examples. Description adds that whitespace and case are ignored, and invalid input returns HTTP 400, enhancing understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it parses a color string and returns multiple formats, palettes, and WCAG analysis. Explicitly distinguishes from sibling tools conversion_color_code and webdev_color_palette.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use alternatives: 'Use conversion_color_code for a focused HEX/RGB/HSL/HSV conversion... or webdev_color_palette when you only want harmony schemes.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_hex_viewerARead-onlyIdempotent
Hex Viewer And Binary Analyzer. Produce a hex dump (8-digit offset column, hex bytes, ASCII gutter) of input supplied as plaintext, a hex string, or Base64, plus byte statistics, a byte-frequency distribution, and a magic-byte file-type hint. Use this to inspect or analyze the raw bytes of arbitrary data; use webdev_base64_image_encoder instead to turn an image into a Base64 data URI, or an encoding_decoding tool to convert between encodings. Runs locally on the data you provide: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/minute for anonymous callers). Returns the rendered hexDump string, totalBytes and related statistics, byteDistribution, and fileTypeHint.
| Name | Required | Description | Default |
|---|---|---|---|
| inputData | No | The data to dump, interpreted according to inputMethod. Blank input yields an empty dump. | |
| inputMethod | No | How inputData is decoded into bytes: text (UTF-8 encode), hex (paired hex digits, even length required), or base64. | text |
| displayOptions | No | Optional rendering settings for the hex dump. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether processing succeeded. |
| bytes | No | The decoded byte values as integers (0-255). |
| hexDump | No | The rendered multi-line hex dump (empty when no input). |
| fileTypeHint | No | Best-guess data type from magic bytes/entropy, or Unknown. |
| statistics | No | Per-byte counts and Shannon entropy, or null when input is empty. |
| byteDistribution | No | Byte-frequency table sorted by descending count (empty when no input). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false. The description adds critical behavioral context beyond annotations: 'Runs locally on the data you provide: read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/minute for anonymous callers).' No contradiction is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: it starts with the core functionality, then lists output features, usage guidance, and safety notes. Every sentence adds value, and the structure is logical without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, nested object, output schema), the description covers purpose, usage, behavior, and output components. It mentions the output fields (hexDump, totalBytes, byteDistribution, fileTypeHint) without needing to detail them further due to the presence of an output schema. It is complete and self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds context about input decoding methods (text, hex, base64) and mentions that blank input yields an empty dump, but does not significantly enhance parameter understanding beyond the schema. The description also summarizes output fields, which is helpful but not directly about parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Hex Viewer And Binary Analyzer' that produces a hex dump with offset, hex bytes, ASCII gutter, byte statistics, frequency distribution, and file-type hint. It explicitly distinguishes itself from sibling tools such as webdev_base64_image_encoder and encoding_decoding tools, specifying alternative use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use this to inspect or analyze the raw bytes of arbitrary data; use webdev_base64_image_encoder instead to turn an image into a Base64 data URI, or an encoding_decoding tool to convert between encodings.' This clearly states when to use the tool and when not, with specific alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_html_entity_referenceARead-onlyIdempotent
HTML Entity Reference Lookup. Search and filter a built-in table of named HTML character entities, returning each match as its entity name, decimal code, hex code, rendered glyph, plain-English description, and category (punctuation, math, currency, arrows, accents, greek, misc). Use this to look up the entity for a symbol or vice versa; use encoding_decoding_html_entities to actually encode or decode text into entities, text_ascii_table for plain ASCII codes, or webdev_http_status_reference for HTTP status codes. Runs locally on the static table: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests per minute for anonymous callers). Returns the paginated matching entities plus a fixed list of the most common entities.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Case-insensitive substring matched against each entity name, glyph, description, decimal code, and hex code. Blank returns all entities (subject to the category filter). | |
| category | No | Restrict results to one category. Blank returns every category. | |
| page | No | Page number for pagination over the filtered results (clamped to a minimum of 1). | |
| itemsPerPage | No | Number of entities returned per page (clamped to a minimum of 1). |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether the lookup succeeded. |
| query | No | The trimmed search query that was applied. |
| category | No | The trimmed category filter that was applied (empty when unfiltered). |
| page | No | The page number returned. |
| itemsPerPage | No | The page size that was applied. |
| total | No | Total number of entities matching the query and category before pagination. |
| totalPages | No | Total page count for the current filter and page size. |
| entities | No | The matching entities for the requested page. |
| commonEntities | No | Fixed quick-reference list of the eight most common entities (lt, gt, amp, quot, nbsp, copy, reg, trade), independent of the query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true, destructiveHint=false), the description adds concrete behavioral details: runs locally on a static table, no external service contact, rate-limited to 60 req/min for anonymous callers. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences) and well-structured: purpose first, then usage guidance, then behavioral details. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (not shown), the description covers purpose, usage guidance, behavioral traits, and even extra detail like the fixed list of common entities. It is fully adequate for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The description adds context not in the schema, such as 'Blank returns all entities' and mentions pagination pattern, but does not significantly extend parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as an HTML entity reference lookup, specifying the exact fields returned (entity name, decimal code, hex code, rendered glyph, description, category). It explicitly distinguishes from sibling tools like encoding_decoding_html_entities, text_ascii_table, and webdev_http_status_reference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use this to look up the entity for a symbol or vice versa; use encoding_decoding_html_entities to actually encode or decode...'. It also mentions operational constraints (local, rate-limited).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_html_minifierARead-onlyIdempotent
HTML Minifier. Minify HTML by stripping comments, collapsing whitespace, and optionally removing empty elements, redundant quotes, and optional closing tags, plus minifying inline style CSS and script JS. Pass the markup as the html parameter; every transform is an independent boolean toggle. Use webdev_css_minifier or webdev_js_minifier to compress standalone stylesheets/scripts, web_dev_html_to_markdown to convert HTML to Markdown, and webdev_javascript_beautifier to expand rather than compress. Regex/heuristic minifier, not an HTML parser, so unusual or malformed markup may need review; conditional comments are preserved. Runs locally via a Node bridge: read-only, non-destructive, contacts no external service, rate-limited (60 requests/minute for anonymous callers). Returns the minified HTML plus original/minified byte sizes, byte savings, and compression ratio.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | HTML markup to minify. Must be a non-empty string. | |
| removeComments | No | Strip HTML comments. Conditional comments are always preserved. | |
| removeWhitespace | No | Collapse runs of whitespace, trim, and remove whitespace between tags. | |
| removeEmptyElements | No | Remove elements whose content is empty or whitespace-only. | |
| removeQuotes | No | Drop quotes around attribute values that are safe to unquote (alphanumerics, hyphen, underscore). | |
| collapseInlineTagWhitespace | No | Collapse whitespace around inline tags (span, a, strong, b, i, em, small, code, etc.). | |
| preserveLineBreaks | No | Accepted for compatibility; reported back in options but does not currently alter output. | |
| removeOptionalTags | No | Remove optional closing tags such as the paragraph close before a block-container end and the list-item close before a list end. | |
| minifyInlineCSS | No | Minify CSS inside style attributes (strip comments and collapse whitespace). | |
| minifyInlineJS | No | Minify JavaScript inside script blocks (strip comments and collapse whitespace). |
Output Schema
| Name | Required | Description |
|---|---|---|
| original | No | The original HTML, echoed back. |
| minified | No | The minified HTML output. |
| originalSize | No | Original length in characters. |
| minifiedSize | No | Minified length in characters. |
| savings | No | originalSize minus minifiedSize (bytes removed). |
| compressionRatio | No | Percent size reduction, rounded to 2 decimals; 0 when input is empty. |
| options | No | The fully-resolved option set actually applied (every toggle with its effective boolean). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds valuable context: it runs locally via a Node bridge, is non-destructive, contacts no external service, and is rate-limited. It also clarifies it's a regex/heuristic minifier, not an HTML parser, and that conditional comments are preserved. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive, covering purpose, parameters, usage guidelines, limitations, and performance characteristics in a well-structured paragraph. Every sentence contributes meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, output schema exists), the description is complete. It explains the main function, all optional transforms, usage with sibling tools, behavioral caveats, and return value components (minified HTML plus sizes/savings/ratio). No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already well-documented. The description adds value by summarizing that 'every transform is an independent boolean toggle', which clarifies the parameter structure. Although it doesn't add details beyond the schema, it provides a useful high-level overview.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it minifies HTML by stripping comments, collapsing whitespace, and other transforms. It explicitly distinguishes from sibling tools like webdev_css_minifier and webdev_js_minifier by noting their separate use cases for standalone files. The verb 'minify' and resource 'HTML' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives: 'Use webdev_css_minifier or webdev_js_minifier to compress standalone stylesheets/scripts, web_dev_html_to_markdown to convert HTML to Markdown, and webdev_javascript_beautifier to expand rather than compress.' It also warns about unusual markup due to the regex/heuristic approach.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_dev_html_to_markdownARead-onlyIdempotent
HTML to Markdown Converter. Convert an HTML fragment or document into Markdown using fast regex-based rules: headings (h1-h6), bold/italic/strikethrough, links, images, inline code and fenced code blocks, blockquotes, horizontal rules, ordered and unordered lists, and tables (rendered as GFM pipe tables). Unrecognised tags are stripped and HTML entities are decoded. Use this to turn web content, emails, or HTML documents into Markdown; use web_dev_markdown_to_html for the inverse (Markdown to HTML), and webdev_html_minifier when you only want to shrink HTML rather than convert it. Runs locally on the input you provide: read-only, non-destructive, deterministic, offline, contacts no external service, and is rate-limited (anonymous 60 req/min, 500/hr). Returns the Markdown string, a stats object counting converted elements, and the whitespace-normalised source HTML. Note: the three options are accepted for forward compatibility but do not currently change the output.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | The HTML source to convert. Required and must be non-empty, or a 400 is returned. | |
| options | No | Reserved options. Currently accepted but ignored; output is identical whether or not they are set. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | No | The converted Markdown output. |
| stats | No | Counts derived from the input HTML and resulting Markdown. |
| cleaned_html | No | The input HTML with runs of whitespace collapsed and trimmed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant context beyond annotations: runs locally, read-only, non-destructive, deterministic, offline, no external service, rate-limited, and returns specific output structure. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise paragraphs front-loaded with the main action. Every sentence adds value; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully covers purpose, behavior, output format, rate limits, and sibling differentiation. Given the tool's complexity and the presence of an output schema, the description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions and examples. The description does not add new semantic info beyond what the schema already provides for the two parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it converts HTML to Markdown using regex-based rules, lists supported elements, and distinguishes from sibling tools by naming web_dev_markdown_to_html for the inverse and webdev_html_minifier for shrinking HTML.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool (convert web content, emails, HTML documents) and when to use alternatives (web_dev_markdown_to_html, webdev_html_minifier). Also clarifies that options are accepted but ignored for forward compatibility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_http_status_referenceARead-onlyIdempotent
HTTP Status Code Reference. Look up HTTP response status codes — number, name, category (1xx Informational through 5xx Server Error), meaning, RFC, typical use cases, and a request/response example. Pass no body to get the full table of all codes, or narrow it: code selects one status, category filters to one class, search matches code/name/ description/use-case text. Pure offline reference, read-only, contacts no network, and is rate-limited. Returns the matching codes plus a stats-by-category breakdown and a most-common-codes list.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Case-insensitive text filter matched against code, name, description, and use cases (e.g. "redirect", "auth"). Alias: query. | |
| query | No | Alias for search; used when search is absent. | |
| category | No | Restrict results to one status class; "all" returns every category. | all |
| code | No | Specific status code to highlight as selectedCode; defaults to 200 when omitted. Does not filter the codes list. | |
| includeExamples | No | Accepted for compatibility; example/useCases fields are always present in each code object. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Always true on a successful lookup. |
| search | No | The search text that was applied, echoed back. |
| category | No | The category filter that was applied (all if none). |
| total | No | Total number of status codes in the reference dataset (unfiltered). |
| codes | No | Matching status codes, ascending by number. |
| selectedCode | No | The single highlighted code object (same shape as a codes entry); null if the requested code is unknown. |
| stats | No | Count of codes per category, keyed 1xx..5xx. |
| commonCodes | No | Up to eight of the most frequently encountered codes (same object shape as codes). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds that the tool is 'Pure offline reference, read-only, contacts no network, and is rate-limited,' which confirms and extends the annotations with additional behavioral details (offline, rate-limited). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three well-structured sentences: first sentence states purpose and what is looked up; second explains usage modes with parameters; third notes behavior (offline, read-only, rate-limited) and return format. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (not shown but referenced), 100% schema description coverage, and only 5 optional parameters, the description fully covers functionality, usage modes, behavioral traits, and return structure. It is complete for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description explains that 'code selects one status,' 'category filters to one class,' and 'search matches code/name/description/use-case text,' adding semantic context beyond the schema field descriptions. It also clarifies that 'includeExamples' is accepted for compatibility but examples are always present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is an HTTP status code reference tool for looking up codes by number, name, category, etc. It is distinct from sibling tools which are converters, generators, or other utilities; no direct overlap exists, so differentiation is inherent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to use the tool: pass no body for full table, or narrow by code, category, or search. It also notes it is offline and read-only, providing safe usage context. However, it does not explicitly list alternatives or state when not to use it, though sibling tools do not compete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_javascript_beautifierARead-onlyIdempotent
JavaScript Beautifier. Pretty-print and re-indent minified or messy JavaScript with configurable indent (spaces or tabs), brace style, parenthesis spacing, and newline preservation. Use it to make JS readable; use webdev_js_minifier for the reverse (shrink for production), and webdev_code_formatter when you also need HTML/CSS in one pass. Runs locally on the code you provide: read-only, non-destructive, offline, contacts no external service, and is rate-limited. Returns the formatted code, token-count stats, and heuristic syntax warnings (it does not transpile or fully validate).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The JavaScript source to beautify (also accepted as "input"). | |
| options | No | Formatting options. Omit for defaults. |
Output Schema
| Name | Required | Description |
|---|---|---|
| formattedCode | No | The beautified, re-indented JavaScript. |
| stats | No | Token counts derived from the formatted code. |
| validationErrors | No | Heuristic syntax warnings (missing semicolons, unmatched quotes/braces); empty when none. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds critical behavioral details: runs locally, read-only, non-destructive, offline, no external service, rate-limited, and returns formatted code with stats and syntax warnings. It also clarifies it does not transpile or fully validate, which is valuable beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long. The first sentence states the core purpose and key features; the second covers usage guidance, behavioral transparency, and output. Every sentence adds value, and critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description does not need to detail return values. It covers purpose, usage, behavioral traits, and output summary (formatted code, stats, warnings). The parameter schema is comprehensive, and the description complements it well. No obvious gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description mentions configurable options (indent, brace style, etc.) but does not add meaning beyond what the input schema already provides (each option has a description and examples in the schema). No additional parameter guidance is given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a JavaScript beautifier that pretty-prints and re-indents minified or messy JavaScript. It explicitly distinguishes from siblings webdev_js_minifier (reverse operation) and webdev_code_formatter (HTML/CSS in one pass), fulfilling the specific verb+resource+scope requirement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('use it to make JS readable') and names alternatives for other scenarios ('use webdev_js_minifier for the reverse... and webdev_code_formatter when you also need HTML/CSS in one pass'). This provides clear selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_js_minifierARead-onlyIdempotent
JavaScript Code Minifier. Minify a JavaScript snippet to shrink file size by stripping comments, collapsing whitespace, and optionally removing console/debugger statements, mangling variable names, and dropping unused code. Use this for production deployment when you only need a smaller file; use webdev_js_obfuscator instead to actively hide logic with string encoding and control-flow flattening, or webdev_javascript_beautifier to reverse compaction and re-indent. Regex-based transform, not a full parser, so output is not guaranteed runnable and is not reversible: keep the original source. Runs locally via a Node bridge: read-only, non-destructive, contacts no external service, rate-limited (60 requests per minute for anonymous callers). Returns the minified code, applied options, before/after size and line statistics, and a per-step optimization report.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | JavaScript source to minify. Required and non-empty (the alias input is also accepted). | |
| level | No | Minification preset. basic does whitespace and comment stripping only; standard adds variable mangling; aggressive also removes unused code. Unknown values fall back to standard. | standard |
| removeComments | No | Strip block and line comments. | |
| removeConsole | No | Remove console log, info, warn, error, and debug calls. | |
| removeDebugger | No | Remove debugger statements. | |
| mangleVariables | No | Rename local variables to short names. Defaults to true unless level is basic. | |
| removeUnusedCode | No | Drop empty functions and dead code after return. Defaults to true only when level is aggressive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | No | Original JavaScript source. |
| output | No | Minified JavaScript. |
| level | No | Effective level applied (basic, standard, or aggressive). |
| options | No | Resolved boolean flags actually applied (removeComments, removeConsole, removeDebugger, mangleVariables, removeUnusedCode). |
| statistics | No | Size metrics: originalSize, minifiedSize, originalLines, minifiedLines, bytesSaved, and compressionRatio percent. |
| optimizationReport | No | Per-step entries, each with a type (success, info, or warning) and a message string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations, including local execution via Node bridge, read-only and non-destructive nature, no external service contact, rate limiting, and irreversibility warning. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4-5 sentences), well-structured, and front-loaded with the core purpose, followed by details and caveats. Every sentence provides useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, output schema), the description covers purpose, usage, behavior, parameters, limitations, and output content, making it complete for an agent to understand and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by explaining level presets and mentioning the 'input' alias, but the schema already describes parameters well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as a JavaScript code minifier that shrinks file size through specific operations, and explicitly distinguishes it from siblings (obfuscator and beautifier).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool (production deployment for smaller file) and when to use alternatives (obfuscator for hiding logic, beautifier for reversing), along with important caveats about non-guaranteed runnability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_js_obfuscatorARead-onlyIdempotent
JavaScript Code Obfuscator. Obfuscate a JavaScript snippet to deter casual reading and reverse engineering, applying variable/function name mangling, string Base64-encoding, optional control-flow flattening, dead-code injection, and whitespace compaction. Use this to harden client-side JS; use webdev_js_minifier instead when you only want a smaller file (no name mangling or string hiding), or webdev_javascript_beautifier to reverse compaction and re-indent. Regex-based transform, not a full parser, so output is NOT guaranteed runnable and is not reversible/decryptable — keep the original source. Runs locally via a Node bridge: read-only, non-destructive, contacts no external service, rate-limited (30 req/min anon). Returns the obfuscated code plus before/after size and line statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | JavaScript source to obfuscate (alias: input). Must be non-empty after trimming or the call returns HTTP 400. | |
| strength | No | Preset intensity. light skips control-flow flattening; medium adds it; heavy also enables dead-code injection. Unknown values fall back to medium. Individual options override the preset defaults. | medium |
| options | No | Per-technique toggles overriding the strength preset. |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | No | The original JavaScript exactly as submitted. |
| output | No | The obfuscated JavaScript. |
| strength | No | The effective strength preset applied. |
| options | No | The fully-resolved boolean toggles actually applied (defaults merged with overrides). |
| statistics | No | Before/after metrics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key traits beyond annotations: warns that output is not guaranteed runnable nor reversible (regex-based), describes local execution via Node bridge, read-only/non-destructive, rate-limited. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive yet well-structured, front-loading the verb and resource. Each sentence serves a purpose (purpose, alternatives, limitations, execution context, output summary). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 params, nested options, output schema), the description covers all aspects: purpose, when to use, behavioral caveats, parameter details, return value. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining strength presets' effects and individual option behaviors (e.g., mangleNames skips reserved words, controlFlowFlattening defaults depend on strength). This enriches understanding beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Obfuscate a JavaScript snippet to deter casual reading and reverse engineering' and lists specific techniques. It distinguishes from siblings by naming webdev_js_minifier and webdev_javascript_beautifier, making the tool's role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this to harden client-side JS' and provides clear alternatives: webdev_js_minifier for minification only, webdev_javascript_beautifier to reverse compaction. This fully guides when to use and when not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_json_schema_generatorARead-onlyIdempotent
JSON Schema Generator (Infer Draft-07 From Sample). Infer a JSON Schema (Draft-07, $schema fixed to http://json-schema.org/draft-07/schema#) from one sample JSON document, walking the value to emit types, properties, required, array items (oneOf for mixed element types), and optional format/pattern detection (email, date-time, uri, uuid, ipv4, ipv6) and per-property examples. Use this to draft a schema from data you already have; use webdev_json_schema_validator instead to check an existing instance against a schema you already have. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, and is rate-limited. Returns the inferred schema as both an object and a 2-space-indented JSON string, an isValid flag, parse errors, and shape statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| json | Yes | Sample JSON document to infer the schema from, as a string of raw JSON (also accepted as input). | |
| title | No | Value placed in the generated schema top-level title field. | Generated Schema |
| description | No | Value placed in the generated schema top-level description field. | Schema generated from JSON data |
| additionalProperties | No | Sets additionalProperties on every generated object schema; false forbids unlisted keys. | |
| detectFormats | No | Detect string format (email, date-time, uri, uuid, ipv4, ipv6) from sample values. | |
| requireAll | No | List every key in required; when false only non-null keys are required. | |
| includeExamples | No | Add an examples array carrying each sampled value to the generated schemas. |
Output Schema
| Name | Required | Description |
|---|---|---|
| isValid | No | Whether the input parsed as JSON and a schema was produced. |
| schema | No | The inferred JSON Schema as an object (Draft-07), or null when the input is empty or invalid. |
| schemaJson | No | The inferred schema serialized as a 2-space-indented JSON string (empty string on failure). |
| errors | No | Parse/validation errors; empty on success. |
| stats | No | Shape statistics computed from the generated schema. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by stating it runs locally, is read-only, non-destructive, contacts no external service, and is rate-limited. Also describes return format components.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Slightly long but informative and front-loaded with purpose. Efficient use of words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (7 params, output schema present), description covers purpose, usage, behavior, and output format adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so description doesn't need to repeat parameter details. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it infers a JSON Schema (Draft-07) from a sample JSON document. Distinguishes from sibling tool webdev_json_schema_validator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use this to draft a schema from existing data and to use webdev_json_schema_validator to check an instance against a schema. Provides alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_json_to_csvARead-onlyIdempotent
JSON to CSV Converter. Convert a JSON array of objects (or a single object) into CSV text, with a configurable delimiter, quote character, escape character, optional header row, null placeholder, boolean formatting, and optional flattening of nested objects into dotted-path columns. Use webdev_json_to_csv to turn structured JSON into spreadsheet-ready rows; for the reverse direction use webdev_csv_to_json, to pretty-print or validate JSON use format_json, and to fabricate demo rows use data_sample_data_generator. This tool only converts JSON to CSV (no reverse). Runs locally on the input you provide: read-only, non-destructive, contacts no external service, idempotent, and rate-limited (60 requests/minute for anonymous callers). Returns the CSV string plus validity, warnings, the discovered column headers, and row/column/size statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| json | Yes | JSON text to convert. Best results with an array of flat objects; a single object becomes one row, and non-object array items are wrapped as index/value pairs. Must not be blank. | |
| delimiter | No | Field separator between columns (for example a comma, a tab, or a pipe). | , |
| enclosure | No | Quote character wrapped around fields that contain the delimiter, the quote character, or a newline. Empty string disables quoting. | " |
| escape | No | Character used to escape the enclosure inside a quoted field (defaults to doubling the quote, RFC 4180 style). | " |
| includeHeaders | No | Emit a header row of column names as the first line. | |
| flattenObjects | No | Expand nested objects into dotted-path columns (parent.child). When false, nested objects are JSON-stringified into a single cell. | |
| nullValue | No | Text substituted for JSON null, undefined, or non-finite numbers. | |
| booleanFormat | No | How boolean values are rendered in cells. | true/false |
Output Schema
| Name | Required | Description |
|---|---|---|
| original | No | The submitted JSON text, echoed back. |
| csv | No | The generated CSV text (empty string on failure). |
| isValid | No | Whether the JSON parsed and converted successfully. |
| errors | No | Fatal parse or conversion messages (empty when isValid is true). |
| warnings | No | Non-fatal notices, such as nested objects being JSON-stringified. |
| stats | No | Size and shape metrics for the conversion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes behavior beyond annotations: 'Runs locally on the input you provide: read-only, non-destructive, contacts no external service, idempotent, and rate-limited (60 requests/minute for anonymous callers). Returns the CSV string plus validity, warnings, the discovered column headers, and row/column/size statistics.' Annotations already include readOnlyHint, destructiveHint, idempotentHint; description adds local execution, no external service, rate limits, and specific output. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. First sentence states purpose, then detailed conversion options, followed by usage guidelines, behavioral transparency, and output summary. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters, 100% schema coverage, an output schema (mentioned), and thorough annotations, the description covers all necessary aspects: purpose, usage, behavior, parameter hints, and output. It is complete for an AI agent to correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add significant meaning beyond what the schema provides for each parameter. It lists parameters but does not elaborate on semantics or provide usage examples. Score is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts JSON to CSV, specifying the input as 'JSON array of objects (or a single object)' and output as 'CSV text'. It distinguishes itself from siblings like webdev_csv_to_json (reverse), format_json (pretty-print/validate), and data_sample_data_generator (fabricate rows).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'turn structured JSON into spreadsheet-ready rows'. Provides clear alternatives: 'for the reverse direction use webdev_csv_to_json, to pretty-print or validate JSON use format_json, and to fabricate demo rows use data_sample_data_generator'. Also mentions 'This tool only converts JSON to CSV (no reverse).'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_json_to_typescriptARead-onlyIdempotent
JSON to TypeScript Interface Generator. Generate TypeScript interface and type declarations from a JSON sample by recursively inferring property types, nesting object shapes into named child interfaces, and unioning array element types. Use webdev_json_to_typescript to turn an example payload into typed TS for your code; for JSON Schema output use webdev_json_schema_generator, for the CSV/spreadsheet direction use webdev_json_to_csv, and to pretty-print or validate JSON use json_formatter. Runs locally on the input you provide: read-only, non-destructive, contacts no external service, idempotent, and rate-limited (30 requests/minute for anonymous callers). Returns the generated TypeScript source plus a validity flag, a per-property type analysis, and parse errors with line numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| json | Yes | JSON text to convert into TypeScript. Accepts an object, array, or primitive. Must not be blank. The legacy alias input is also accepted. | |
| rootInterfaceName | No | Name for the top-level interface or type. Non-alphanumeric characters are stripped. | RootInterface |
| namingStyle | No | Casing applied to generated interface names. | PascalCase |
| optional | No | Mark every property optional with a trailing question mark (null or undefined values are always optional regardless). | |
| exportInterfaces | No | Prefix each interface and type with the export keyword. | |
| readonly | No | Prefix every property with the readonly modifier. | |
| strictNullChecks | No | Emit the null type for JSON null values; when false, null becomes any. |
Output Schema
| Name | Required | Description |
|---|---|---|
| isValid | No | Whether the JSON parsed and generated successfully. |
| interfaces | No | The generated TypeScript interface or type source (empty string on failure). |
| analysis | No | Per-property type breakdown (empty on failure). |
| errors | No | Parse or empty-input errors (empty when isValid is true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds valuable context: local execution, no external service contact, rate limits (30 req/min for anonymous). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of 4 sentences, covering purpose, alternatives, and behavior. It is well-structured and front-loaded, but slightly verbose in listing all behavioral traits.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 7 parameters and an output schema. The description explains the core transformation, usage guidance, and behavioral traits. It does not explain return values (handled by output schema). Complete enough for informed usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description does not need to add parameter details. The description provides high-level overview but does not repeat or augment schema info. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool generates TypeScript interfaces/types from JSON, with details on recursive inference, nested interfaces, and union types. It distinguishes from siblings by naming alternative tools for different tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear when-to-use guidance (convert JSON to TS types) and explicitly lists alternatives (JSON Schema generator, CSV converter, formatter), helping the agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_dev_markdown_to_htmlARead-onlyIdempotent
Markdown to HTML Converter. Convert Markdown text into HTML using fast regex-based rules: ATX headings (h1-h5), bold/italic/bold-italic, strikethrough, inline code and fenced code blocks (with language class), links, images, ordered and unordered lists, blockquotes, horizontal rules, GFM pipe tables, and paragraphs. Use this to render Markdown for display; use web_dev_html_to_markdown for the inverse (HTML to Markdown), and webdev_html_minifier to shrink HTML rather than generate it. Runs locally on the input you provide: read-only, non-destructive, deterministic, offline, contacts no external service, and is rate-limited (anonymous 60 req/min, 500/hr). Returns the rendered HTML, a stats object counting produced elements, and a sanitised preview HTML with disallowed tags stripped. Note: the three options are accepted for forward compatibility but do not currently change the output.
| Name | Required | Description | Default |
|---|---|---|---|
| markdown | Yes | The Markdown source to convert. Required and must be non-empty, or a 400 is returned. | |
| options | No | Reserved options. Currently accepted but ignored; output is identical whether or not they are set. |
Output Schema
| Name | Required | Description |
|---|---|---|
| html | No | The rendered HTML output. |
| stats | No | Counts derived from the input Markdown and resulting HTML. |
| preview_safe | No | Copy of the HTML with tags outside an allow-list stripped, safe for preview. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint, idempotentHint), description adds critical details: runs locally, deterministic, offline, rate-limited (60 req/min, 500/hr), non-destructive, and describes return structure (rendered HTML, stats, sanitized preview). Also clarifies that options are currently ignored. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured, front-loaded with purpose, then features, usage guidance, properties, return info. No redundant sentences; every sentence provides essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (one required param, optional options, output schema exists), the description covers input constraints, behavior, return values, rate limits, and forward compatibility. Fully complete for agent selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds value beyond schema: for markdown, notes non-empty requirement and 400 error; for options, states they are reserved and do not change output. This extra context justifies a score above baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts Markdown to HTML using regex-based rules, listing supported elements (headings, bold, code, tables, etc.). It differentiates from siblings by naming the inverse tool (web_dev_html_to_markdown) and the minifier (webdev_html_minifier), providing specific verb+resource scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('render Markdown for display') and explicitly names alternatives for inverse conversion and HTML minification. Provides clear context for choosing this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_openapi_viewerARead-onlyIdempotent
OpenAPI/Swagger Spec Parser And Summarizer. Parse a pasted OpenAPI or Swagger API specification (JSON, or a simple subset of YAML) and return its detected version, total operation count, and component/definition schemas. Use it to inspect or summarize an API contract you already have as text; use format_json_schema_generator instead to derive a JSON Schema from sample data, or format_json to pretty-print generic JSON. Does not fetch any URL — it only parses the string you send; pure local compute, read-only, non-destructive, contacts no external service, and is rate-limited (30 requests/min anonymous). Returns the normalized spec object, a version label, the endpoint count, and the schemas map.
| Name | Required | Description | Default |
|---|---|---|---|
| specification | Yes | Raw OpenAPI/Swagger document as text (aliases: spec, input). Parsed as JSON first, then as simple YAML if that fails. Must be non-empty and contain an "openapi" or "swagger" field plus an "info" object, or the request is rejected. |
Output Schema
| Name | Required | Description |
|---|---|---|
| spec | No | The normalized specification object parsed from the input. |
| version | No | Detected version label, e.g. "OpenAPI 3.0.0", "Swagger 2.0", or "Unknown". |
| endpointCount | No | Total number of HTTP operations (get/post/put/delete/patch/options/head) across all paths. |
| schemas | No | Component schemas (OpenAPI components.schemas) or Swagger definitions; empty object if none. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, destructiveHint, idempotentHint, openWorldHint. Description adds: 'pure local compute, read-only, non-destructive, contacts no external service, rate-limited (30 req/min)'. This enriches transparency beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured: starts with main purpose, then usage guidance, then behavioral notes. Every sentence adds value; no fluff. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given single parameter, rich annotations, and output schema (mentioned), description covers input, behavior, constraints, rate limiting, and return values (normalized spec, version, endpoint count, schemas map). Highly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter description. Description adds parsing details (JSON first then simple YAML) and validation (must contain openapi/swagger and info). This provides significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'OpenAPI/Swagger Spec Parser And Summarizer' and explains what it does: parse spec and return version, operation count, and schemas. It distinguishes from siblings like format_json_schema_generator and format_json.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('inspect or summarize an API contract you have as text') and when to use alternatives ('use format_json_schema_generator instead to derive a JSON Schema from sample data, or format_json to pretty-print generic JSON'). Also clarifies does not fetch URLs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_regex_testerARead-onlyIdempotent
Regular Expression Tester (Match / Replace). Test a JavaScript-flavoured regular expression against sample text, returning every match with its position and capture groups, and optionally a regex find-and-replace preview. Set the flags object to toggle global, ignoreCase, multiline, and dotAll behaviour; supply replacement to also get the replaced string. Safe by design - it compiles and runs the pattern on the text you provide only, executes no arbitrary code, reaches no network, database, or filesystem, and is rate-limited (60 requests/minute for anonymous callers). Use this to debug or validate a pattern and inspect groups; use text_find_replace for plain text substitution without regex internals. Returns matches (text, index, end, captures), a replaceResult string, a pattern analysis summary, the resolved flag string, and an error message on invalid patterns.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | The regular expression body without slashes or inline flags (for example a digit-class pattern). Must not be blank; an invalid pattern returns an error field instead of throwing. | |
| testString | Yes | The sample text the pattern is run against. Must not be blank. Also accepted under the legacy key text. | |
| flags | No | Optional regex flag toggles assembled into a flag string. Omitted flags use their defaults. | |
| replacement | No | Optional replacement string for a find-and-replace preview (supports dollar-1 and named backreferences). When blank, replaceResult is empty. Also accepted under the legacy key replacePattern. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the pattern compiled and ran without error. |
| pattern | No | The submitted regex pattern, echoed back. |
| text | No | The submitted test string, echoed back. |
| flags | No | The resolved flag string built from the flags object (for example gi). |
| flagOptions | No | The effective flag toggles after defaults were applied. |
| replacement | No | The submitted replacement string, echoed back. |
| matches | No | One entry per match (or a single entry when global is false). |
| replaceResult | No | The text after applying replacement, or empty when no replacement was given. |
| patternAnalysis | No | Structural summary of the pattern, or null when the pattern or text was empty. |
| error | No | Null on success; an invalid-regex-pattern message when compilation failed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses safety guarantees (no arbitrary code, no network/database/filesystem), rate limits, and that invalid patterns return error field. Annotations already indicate read-only, idempotent, non-destructive; description adds context beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Slightly verbose but front-loaded with main purpose. Each sentence adds value. Could be more concise but well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists (not shown but implied). Description covers return fields and error handling. With high schema coverage and annotations, the description is fully adequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. Description adds value by noting legacy keys (text, replacePattern), explaining replacement supports dollar-1 and named backreferences, and clarifying replaceResult behavior. Baseline 3 plus extra context warrants 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Describes a regex tester for match/replace with specific verb 'test' and resource 'regular expression against sample text'. Distinguishes from sibling text_find_replace by highlighting regex internals vs plain text substitution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use this to debug or validate a pattern and inspect groups' and when not: 'use text_find_replace for plain text substitution without regex internals'. Also mentions safety and rate limiting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_sass_compilerARead-onlyIdempotent
SCSS / SASS to CSS Compiler. Compile SCSS or indented-SASS source into plain CSS, resolving variables, nesting, mixins, and partials, with a choice of output styles (expanded, compressed, compact, nested) and optional inline source maps. Use this to turn a preprocessor stylesheet into deliverable CSS; use webdev_css_minifier instead when the input is already plain CSS you only want shrunk, or webdev_code_formatter to pretty-print CSS/HTML/JS. The server runs the Dart Sass CLI on the source you submit and returns the compiled CSS; remote @import and load-path lookups are disabled, so it reads no files off the host and contacts no external service. Read-only and non-destructive, rate-limited to 30 requests per minute for anonymous callers. Returns the compiled CSS, the echoed source, an optional source map, and size statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| sass | Yes | SCSS or SASS source code to compile. Must not be blank; an empty value is rejected. | |
| syntax | No | Source syntax: scss for brace-and-semicolon SCSS, sass for the indented SASS syntax. Sets the temp file extension passed to the compiler. | scss |
| outputStyle | No | CSS formatting style forwarded to Dart Sass via the style flag. expanded is human-readable; compressed is minified. | expanded |
| sourceMap | No | When true, generate a source map and return its JSON in the sourceMap field. | |
| includePaths | No | Accepted and echoed for compatibility but ignored by the compiler (load paths are disabled for security, so remote or host @import lookups never run). |
Output Schema
| Name | Required | Description |
|---|---|---|
| original | No | The submitted SCSS/SASS source, echoed back. |
| compiled | No | The compiled CSS output. |
| syntax | No | The source syntax used (scss or sass). |
| outputStyle | No | The output style applied (expanded, compressed, compact, or nested). |
| sourceMap | No | Source map JSON when sourceMap was requested and produced, otherwise null. |
| hasSourceMap | No | Whether a source map is present in this response. |
| originalSize | No | Character length of the original source. |
| compiledSize | No | Character length of the compiled CSS. |
| compressionRatio | No | Size change as a percentage of the original length. |
| error | No | Present only on failure (HTTP 400/500): a cleaned compilation error message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds details: 'Read-only and non-destructive, rate-limited to 30 requests per minute for anonymous callers' and explains that the server runs Dart Sass without external file access, enhancing transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, fitting in 6 sentences without redundancy. It front-loads purpose, then provides usage guidance, implementation details, and return values. Every sentence adds value, making it efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple parameters, output schema, annotations), the description covers all necessary aspects: purpose, alternatives, behavioral constraints, rate limits, and return fields (compiled CSS, source, source map, statistics). It is complete and no gaps are evident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the 'includePaths' parameter is accepted but ignored for security, and outlines the effect of 'sourceMap' and 'outputStyle' options. This extra context justifies a score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'SCSS / SASS to CSS Compiler' and lists key features like resolving variables, nesting, mixins, partials, and output styles. It explicitly distinguishes from siblings webdev_css_minifier and webdev_code_formatter, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use this to turn a preprocessor stylesheet into deliverable CSS; use webdev_css_minifier instead when the input is already plain CSS you only want shrunk, or webdev_code_formatter to pretty-print CSS/HTML/JS.' It also notes that remote @imports are disabled, giving clear context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_sql_formatterARead-onlyIdempotent
SQL Formatter and Beautifier. Reformat a SQL statement or script with consistent indentation and keyword casing, and report query statistics. Use webdev_graphql_formatter for GraphQL or webdev_json_formatter for JSON. This is a purely syntactic beautifier: it never connects to a database, runs a query, or validates that the SQL executes. Runs locally on the text you provide: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the formatted SQL plus statistics (keyword count, line count, referenced table names, and byte sizes).
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SQL statement or script to format. Must not be blank. | |
| format | No | When true, reindent via the sql-formatter engine; when false, only apply keyword casing. | |
| uppercase | No | Upper-case SQL keywords (SELECT, FROM, WHERE); when false, preserve original casing. | |
| indentSize | No | Number of spaces per indent level (used only when indentType is spaces). | |
| indentType | No | Indent with spaces (honouring indentSize) or with a single tab per level. | spaces |
| addSemicolon | No | Append a trailing semicolon when the statement does not already end with one. | |
| removeComments | No | Strip block (slash-star) and line (double-dash) comments before formatting. | |
| compactMode | No | Collapse the SELECT field list onto a single line instead of one column per line. |
Output Schema
| Name | Required | Description |
|---|---|---|
| original | No | The submitted SQL, echoed back. |
| formatted | No | The reindented or recased SQL output. |
| stats | No | Size and content metrics for the statement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, and idempotent. Description adds rate-limiting (60 req/min), local execution, and that it returns formatted SQL plus statistics. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, no unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With rich schema, annotations, and output schema, the description covers the tool's scope, limitations, and behavior completely. It differentiates from siblings and explains what it does and does not do.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description does not add new parameter info beyond what schema provides; statistics mention is about output, not parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it's a SQL formatter/beautifier that reformats SQL with consistent indentation and keyword casing, and reports statistics. It explicitly distinguishes itself from sibling tools webdev_graphql_formatter and webdev_json_formatter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use for SQL formatting, and to use webdev_graphql_formatter for GraphQL and webdev_json_formatter for JSON. Also clarifies it never connects to a database, so it's safe for any SQL text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_svg_optimizerARead-onlyIdempotent
SVG Optimizer and Minifier. Minify and optimize an SVG markup string by stripping the XML declaration, comments, DOCTYPE, empty elements, default attributes, redundant groups, and whitespace, plus shortening colors and rounding coordinate precision. Pass the raw SVG text in the svg field; the file is never uploaded. Use webdev_css_minifier or webdev_html_minifier for CSS/HTML, or webdev_data_uri_generator and webdev_base64_image_encoder to embed the result. Runs locally: read-only, non-destructive, contacts no external service, and is rate-limited (60 requests/minute for anonymous callers). Returns the optimized markup, before/after byte sizes, compression ratio, the list of optimizations applied, and a base64 data-URL preview.
| Name | Required | Description | Default |
|---|---|---|---|
| svg | Yes | Raw SVG markup to optimize. Must contain a valid svg root element or the request is rejected. | |
| options | No | Optional toggles; each optimization defaults to enabled unless explicitly set to false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| optimizedSvg | No | The optimized SVG markup string. |
| originalSize | No | Character length of the input SVG. |
| optimizedSize | No | Character length of the optimized SVG. |
| compressionRatio | No | Percent size reduction relative to the original. |
| bytesSaved | No | Characters removed (original minus optimized). |
| optimizationsApplied | No | Human-readable labels for each optimization performed. |
| previewDataUrl | No | Base64 data URL of the optimized SVG for preview. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false. The description adds valuable context: runs locally, contacts no external service, rate-limited (60 req/min), and details the return fields (optimized markup, sizes, ratio, optimizations list, base64 preview). No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured. It starts with the core purpose, lists operations, provides usage instructions, compares with siblings, mentions behavioral traits, then return values. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 parameters (one nested), the description covers purpose, input format, alternatives, behavioral traits (local, rate-limited), and output fields. With an output schema implied, the description is sufficiently complete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds minimal value beyond the schema, merely reiterating that the svg field receives raw SVG text and that options have defaults. The return value details are helpful but not parameter-specific.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: optimize/minify SVG strings. It specifies operations (strip XML declaration, comments, DOCTYPE, etc.) and distinguishes from siblings by naming related tools for CSS/HTML and data URI generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool (for SVG optimization) and when to use alternatives (webdev_css_minifier for CSS, webdev_html_minifier for HTML, webdev_data_uri_generator or webdev_base64_image_encoder for embedding). Also clarifies that it runs locally and is read-only, guiding appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_typescript_playgroundARead-onlyIdempotent
TypeScript Playground (transpile to JavaScript). Transpile TypeScript source to JavaScript by regex stripping of type annotations, interfaces, and type-only imports/exports, with optional ES5 downleveling (const/let to var, arrow functions, template literals); also runs a lightweight type check that flags uninitialized const, type-mismatch assignments, and implicit-any parameters. Use it to preview compiled output and catch obvious type errors; use webdev_json_to_typescript instead to derive interfaces from JSON, or webdev_javascript_beautifier to reformat plain JS. Does not execute the code — pure string transformation that runs locally, read-only, non-destructive, contacts no external service, and is rate-limited. Returns the compiled JavaScript, detected diagnostics, extracted type symbols, and a success flag.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | TypeScript source to transpile (alias: typescript). Must be non-empty. | |
| target | No | ECMAScript target. Only "ES5" triggers downleveling (const/let to var, arrows to functions, template literals to concatenation); any other value emits as-is. | ES2017 |
| module | No | Module system label echoed back in compilerOptions; does not alter output. | CommonJS |
| strict | No | Strict-mode flag echoed back in compilerOptions; does not change checks. | |
| noImplicitAny | No | When true, flags function parameters with no type annotation as implicit-any diagnostics. |
Output Schema
| Name | Required | Description |
|---|---|---|
| compiledJs | No | The transpiled JavaScript output. |
| errors | No | Detected type/syntax diagnostics; empty when none. |
| typeInfo | No | Extracted typed symbols (variables and functions). |
| success | No | True when no diagnostics were found (errors is empty). |
| compilerOptions | No | The normalized options actually applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes local execution, read-only, non-destructive, no external service, rate-limited, and specifics of type checks, adding context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Multiple sentences, each serving a purpose (transformation, type check, usage guidance, limitations), with no redundancy, though slightly long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers transformation, type checking, limitations, alternatives, and behavioral traits; output schema exists so return values not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions, so description adds little new param info; it provides context like 'optional ES5 downleveling' but doesn't enhance semantics beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it transpiles TypeScript to JavaScript via regex stripping, and explicitly distinguishes from siblings like webdev_json_to_typescript and webdev_javascript_beautifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use (preview compiled output, catch type errors) and when-not (does not execute code), and names specific alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_user_agentARead-onlyIdempotent
User-Agent String Parser. Parse a User-Agent string you supply into structured browser, engine, OS, device, CPU, and feature data, and flag whether it is a bot/crawler/headless agent. It parses the userAgent value in the request body — it does not read the caller's own request header; pair it with network_request_headers to inspect live headers instead. Runs locally on the input: read-only, non-destructive, contacts no external service, and is rate-limited. Returns parsed browser/engine/os/device/cpu/features plus isBot, botType, botPurpose and suspicious/commonCrawler/headlessBrowser flags.
| Name | Required | Description | Default |
|---|---|---|---|
| userAgent | Yes | The User-Agent string to parse, e.g. a browser or bot UA header value. Required; an empty/blank value returns HTTP 400. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | Whether parsing succeeded. |
| parsed | No | Structured breakdown of the User-Agent string. |
| isBot | No | True when the UA matches a known bot/crawler/HTTP-client keyword. |
| botType | No | Bot category (Search Engine, Social Media, Messaging, Command Line Tool, Programming Language, Unknown Bot) when isBot, else null. |
| botPurpose | No | Inferred bot purpose (Web Indexing, Content Preview, Site Monitoring, Data Fetching, Content Access) when isBot, else null. |
| suspicious | No | True for scripted/scraper UAs (python/curl/wget/bot/crawl/scrape) excluding googlebot/bingbot. |
| commonCrawler | No | True for a known search crawler (googlebot, bingbot, slurp, duckduckbot, baiduspider, yandexbot). |
| headlessBrowser | No | True when the UA indicates headless/PhantomJS/Selenium automation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, non-destructive, idempotent), description adds that it runs locally, contacts no external service, is rate-limited, and details output flags like isBot, botType, etc. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
4-5 sentences, each adding unique value. Front-loaded with purpose, then behavior, then output. No superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given single parameter and complex output, description adequately explains both input constraints (empty returns 400) and output structure (browser, OS, bot flags). Output schema exists, so not required to list every field, but description covers categories.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema already covers userAgent with description and examples. Description adds context that it parses the value in the request body, not the caller's header, but this is a clarification on usage rather than parameter semantics. Still, it's helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it parses a user-agent string into structured browser/engine/OS/device/CPU/feature data and checks for bots. Distinguishes itself from sibling network_request_headers by noting it does not read the caller's own header.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use (when supplying a UA string) and when not to (do not use to read caller's header), and suggests pairing with network_request_headers. Provides clear alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_webhook_testerA
Webhook Tester (send an outbound HTTP request to a public URL). Sends a real outbound HTTP request from this server to a user-supplied public webhook URL and returns the live response. Choose the GET/POST/PUT/PATCH/DELETE method, set custom headers, and attach a request body (POST/PUT/PATCH only) to deliver a test payload and inspect what the endpoint replies. Use this to verify a webhook receiver or HTTP endpoint end-to-end; use network_request_headers to only view request headers, network_website_status_checker for a plain status/uptime probe, or webdev_user_agent to parse a UA string. Network tool, openWorld, not read-only and not idempotent: each call hits the target and may mutate remote state. Private, localhost, .local, and reserved-IP targets are blocked; redirects are not followed; body limited to 128 KiB; up to 32 custom headers; 15s timeout. Rate limited (anonymous 5/min, 30/hour, 100/day; authenticated 20/min, 120/hour, 500/day) with CAPTCHA above 15/hour. Returns response status, statusText, head
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute http(s) webhook URL to send the request to. Must resolve to a public IP; localhost, .local, private, and reserved ranges are rejected. | |
| method | No | HTTP method to use. Defaults to POST. Body is only sent for POST, PUT, and PATCH. | POST |
| body | No | Raw request body sent only with POST/PUT/PATCH. Max 131072 bytes (128 KiB). | |
| headers | No | Custom request headers as a name to value map (max 32). Host, content-length, connection, transfer-encoding, expect, and upgrade are blocked; CR/LF stripped from values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | No | True when the outbound request completed and a response was captured. |
| data | No | |
| meta | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true. The description goes far beyond: states each call hits the target and may mutate remote state, lists blocked targets (private, localhost, .local, reserved-IP), no redirects, body limit 128 KiB, max 32 headers, timeout 15s, and detailed rate limits with CAPTCHA condition. Provides comprehensive behavioral constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long but well-structured: starts with purpose, then details on methods/headers/body, use cases, constraints, and limitations. Every sentence adds value, but some minor redundancy could be trimmed. Still, it maintains good readability and front-loads key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters (1 required, enum, nested object) and an output schema, the description covers all critical aspects: behavior, allowed inputs, restrictions, rate limits, and alternatives. The output schema exists so return values are not needed in description. It is complete enough for an agent to correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, but the description adds meaningful context: method defaults to POST, body is only sent with POST/PUT/PATCH, headers description blocks specific headers and strips CR/LF, and the url description mentions rejection of private/localhost targets. While the schema already details parameter constraints, the description reinforces and adds nuance, so score 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a webhook tester that sends outbound HTTP requests and returns live responses. It lists supported methods, custom headers, and body usage. It distinguishes itself from sibling tools like network_request_headers, network_website_status_checker, and webdev_user_agent by specifying their different use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use this to verify a webhook receiver or HTTP endpoint end-to-end'. Provides clear alternatives: 'use network_request_headers to only view request headers, network_website_status_checker for a plain status/uptime probe, or webdev_user_agent to parse a UA string'. Also notes that it is not idempotent and may mutate remote state, guiding appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_xml_formatterARead-onlyIdempotent
XML Formatter and Validator. Pretty-print, beautify, and validate XML with configurable indentation (spaces or tabs), attribute sorting, comment removal, and an optional XML declaration. Pass the document as the xml parameter. Use webdev_xml_to_json when you need to convert XML into a JSON object rather than tidy the markup; use webdev_sql_formatter or webdev_graphql_formatter for those languages. Regex-based parser (not a full XML processor), so DTDs and complex namespaces are not resolved and malformed markup is reported as an error with the original text echoed back. Runs locally via a Node bridge: read-only, non-destructive, contacts no external service, rate-limited (30 requests/minute for anonymous callers). Returns the formatted XML, a validity flag, error and warning lists, and element/attribute/size statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| xml | Yes | The XML document to format or validate. Must not be blank. | |
| format | No | Pretty-print with indentation when true; emit compact single-line XML when false. | |
| validate | No | Check well-formedness and report mismatched or unclosed tags as errors. | |
| indentSize | No | Number of spaces per indent level (ignored when indentType is tabs). | |
| indentType | No | Whether each indent level is spaces or a tab character. | spaces |
| removeComments | No | Strip XML comments from the output when true. | |
| preserveWhitespace | No | Keep original text whitespace when true; trim element text when false. | |
| sortAttributes | No | Sort the attributes of each element alphabetically by name when true. | |
| addDeclaration | No | Prepend an XML declaration (version 1.0, UTF-8) when one is absent. |
Output Schema
| Name | Required | Description |
|---|---|---|
| original | No | The submitted XML, echoed back. |
| formatted | No | The formatted XML, or the original input when parsing failed. |
| isValid | No | Whether the XML parsed as well-formed. |
| errors | No | Parse error messages (empty when valid). |
| warnings | No | Non-fatal warnings. |
| stats | No | Node counts and size metrics for the document. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent. Description adds important details: regex-based parser (not full XML processor), rate limit of 30 requests/minute, local execution via Node bridge, and error handling behavior. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, well-structured paragraph covering purpose, features, alternatives, limitations, and performance. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, full schema coverage, and existing output schema, the description adequately covers purpose, usage context, behavioral traits, and limitations. It is complete for an AI agent to decide when and how to use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. Description summarizes parameter categories but does not add significant semantic value beyond what the schema already provides for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it formats and validates XML, listing specific features like pretty-print, attribute sorting, comment removal, and optional declaration. It distinguishes itself from siblings by naming alternative tools for XML-to-JSON conversion and other language formatters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use alternatives: 'Use webdev_xml_to_json when you need to convert XML into a JSON object rather than tidy the markup; use webdev_sql_formatter or webdev_graphql_formatter for those languages.' Also warns about limitations for complex XML.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_xml_to_jsonARead-onlyIdempotent
XML to JSON Converter. Convert an XML document into a JSON object, preserving element nesting, attributes (with a configurable prefix), text nodes, and repeated siblings (collapsed into arrays), with optional numeric and boolean type coercion and namespace stripping. Parsing is a local regex tokenizer that never resolves or fetches external entities or DTDs, so it is XXE-safe and fully offline. Use format_json afterward to re-pretty-print or minify the result, webdev_json_to_csv to flatten JSON into CSV, or webdev_xml_formatter to tidy XML without converting it. Read-only, non-destructive, contacts no external service, rate-limited to 30 requests per minute for anonymous callers. Returns the JSON string plus the parsed data object, an isValid flag, errors, and element/attribute statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| xml | Yes | The XML document to convert. Must be non-blank and have a single root element. Mismatched or unclosed tags produce an isValid false result with an error message. | |
| prettyPrint | No | Indent the JSON output with two spaces when true; emit compact single-line JSON when false. | |
| preserveAttributes | No | Include element attributes in the output (each key prefixed by attributePrefix) when true; drop all attributes when false. | |
| attributePrefix | No | Prefix prepended to attribute names so they do not collide with child element keys. | @ |
| textNodeName | No | Key used to hold an element text value when that element also has attributes or child elements. | _text |
| removeEmptyNodes | No | Omit elements whose converted value is empty (empty string, empty object, or null) when true. | |
| numericConversion | No | Coerce numeric-looking text values into JSON numbers when true; keep them as strings when false. | |
| booleanConversion | No | Coerce the literal text true and false into JSON booleans when true; keep them as strings when false. | |
| ignoreNamespaces | No | Strip namespace prefixes from element and attribute names (for example soap:Body becomes Body) when true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| original | No | The submitted XML, echoed back. |
| json | No | The JSON output as a string (indented or compact per prettyPrint). |
| data | No | The parsed JSON value as a structured object (null when parsing failed). |
| isValid | No | True when the XML parsed successfully and JSON was produced. |
| errors | No | Parse or validation error messages (empty when isValid is true). |
| warnings | No | Non-fatal warning messages. |
| stats | No | Counts and metrics describing the converted document. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint. The description adds valuable behavior details: local regex tokenizer, no external entity resolution, offline operation, rate limits, and return structure (isValid flag, errors, statistics). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that covers multiple aspects efficiently. Every sentence adds value, but it could be more scannable with bullet points or shorter sentences. Still, it is not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, output schema exists), the description covers all essential aspects: purpose, usage alternatives, behavior, constraints, and return values. The existence of an output schema reduces the need to explain return format, but the description still mentions it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description summarizes key parameters (prettyPrint, attributePrefix, etc.) but adds minimal extra meaning beyond schema descriptions. It does not explain parameter interactions or provide examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ('Convert'), resource ('XML document'), and output ('JSON object'). It distinguishes from sibling tools like webdev_xml_formatter and webdev_json_to_csv by naming them explicitly and advising when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool (XML to JSON conversion) and when to use alternatives (format_json, webdev_json_to_csv, webdev_xml_formatter). It also describes important constraints: XXE-safe, offline, rate-limited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webdev_yaml_formatterARead-onlyIdempotent
YAML Formatter and Validator. Format, validate, and beautify a YAML document, with optional conversion to JSON. Pretty-prints with a chosen indent, reports parse errors with line numbers, flags mixed-indentation and trailing-whitespace warnings, and can sort keys, strip comments, add document separators, or emit equivalent JSON. Use this for YAML; use webdev_json_formatter for JSON or webdev_xml_formatter for XML. Runs locally on the text you provide (read-only, non-destructive, contacts no external service) and is rate-limited to 60 requests/minute for anonymous callers. Returns the formatted YAML, optional JSON, a validity flag, error and warning lists, and structure statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| yaml | Yes | YAML document to process. Must not be blank. | |
| format | No | Re-serialize (pretty-print) the parsed data; when false the original text is returned unchanged. | |
| validate | No | Parse the input to determine validity and collect warnings. | |
| indentSize | No | Spaces per indent level for the formatted output (UI offers 2, 4, or 8). | |
| arrayStyle | No | Sequence rendering: block (one item per line) or inline (flow style). | block |
| objectStyle | No | Mapping rendering: block (one key per line) or inline (flow style). | block |
| convertToJson | No | Also emit the data as 2-space-indented JSON in the json field. | |
| sortKeys | No | Recursively sort mapping keys alphabetically before output. | |
| removeComments | No | Drop lines that are YAML comments from the formatted output. | |
| addDocumentSeparator | No | Wrap output with a leading start marker and a trailing end marker. |
Output Schema
| Name | Required | Description |
|---|---|---|
| original | No | The submitted YAML, echoed back. |
| formatted | No | The formatted YAML (or original text when format is false or parsing failed). |
| json | No | Equivalent JSON when convertToJson is true, otherwise an empty string. |
| isValid | No | Whether the input parsed as valid YAML. |
| errors | No | Parse error messages (empty when valid). |
| warnings | No | Non-fatal lint warnings with line numbers (mixed indentation, trailing whitespace). |
| stats | No | Structure and size metrics for the document. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds beyond annotations: 'Runs locally... read-only, non-destructive, contacts no external service' and 'rate-limited to 60 requests/minute'. No contradiction with readOnlyHint, destructiveHint, or idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise and well-structured: starts with core purpose, lists features, then usage guidance and technical details. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given high parameter count, full schema coverage, and rich annotations, the description completes the picture by stating return values (formatted YAML, optional JSON, validity flag, errors, warnings, statistics) and behavioral constraints (local, rate-limited).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. Description provides a high-level overview of features (e.g., sorting keys, stripping comments) but does not add significant information beyond the schema for individual parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool formats, validates, and beautifies YAML, with optional JSON conversion. It explicitly distinguishes from siblings: 'Use this for YAML; use webdev_json_formatter for JSON or webdev_xml_formatter for XML.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool versus alternatives for JSON and XML. Also describes local, read-only execution and rate limits, providing clear context for usage.
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.
260 tool updates
v0.5.1- Changed
conversion_base_converter12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / from_base / defaultAdded value: +10 - added
Input schema / properties / from_base / descriptionAdded value: +"Radix the input is written in (2-36). Defaults to 10 (decimal)." - added
Input schema / properties / from_base / maximumAdded value: +36 - added
Input schema / properties / from_base / minimumAdded value: +2 - added
Input schema / properties / input / descriptionAdded value: +"The number to convert, expressed in from_base. Uses digits 0-9 then A-Z (case-insensitive), must be non-blank, and every character must be valid for from_base." - added
Input schema / properties / to_base / defaultAdded value: +10 - added
Input schema / properties / to_base / descriptionAdded value: +"Radix to convert the value into (2-36). Defaults to 10 (decimal)." - added
Input schema / properties / to_base / maximumAdded value: +36 - added
Input schema / properties / to_base / minimumAdded value: +2 - changed
Input schema / requiredPrevious value: -[ - "input", - "from_base", - "to_base" -]New value: +[ + "input" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Failure message when success is false (blank input, base out of the 2-36 range, or invalid digit for from_base).", + "type": "string" + }, + "result": { + "description": "Conversion payload (present when success is true).", + "properties": { + "analysis": { + "description": "Number properties (decimal_value, original_representation, original_base, digit_count, properties list, plus binary_info or hex_info when from_base is 2 or 16).", + "type": "object" + }, + "base_info": { + "description": "Human-readable names and digit-set metadata for the source and target bases.", + "properties": { + "from_base_info": { + "description": "Source base details (base, digits_used, digit_set, description, common_use).", + "type": "object" + }, + "from_base_name": { + "description": "Name of the source base (for example Binary, Hexadecimal, or Base N).", + "type": "string" + }, + "to_base_info": { + "description": "Target base details (base, digits_used, digit_set, description, common_use).", + "type": "object" + }, + "to_base_name": { + "description": "Name of the target base.", + "type": "string" + } + }, + "type": "object" + }, + "common_representations": { + "description": "The value rendered in common bases.", + "properties": { + "base32": { + "description": "Value in base 32.", + "type": "string" + }, + "base36": { + "description": "Value in base 36.", + "type": "string" + }, + "binary": { + "description": "Value in base 2.", + "type": "string" + }, + "decimal": { + "description": "Value in base 10.", + "type": "string" + }, + "hexadecimal": { + "description": "Value in base 16.", + "type": "string" + }, + "octal": { + "description": "Value in base 8.", + "type": "string" + } + }, + "type": "object" + }, + "conversion_steps": { + "description": "Ordered working steps (to-decimal then from-decimal), each with a title, per-digit process rows, and a result. Empty when both bases are 10.", + "items": { + "description": "One conversion step with step number, title, process rows, and result.", + "type": "object" + }, + "type": "array" + }, + "decimal_value": { + "description": "The value as a base-10 integer.", + "type": "integer" + }, + "from_base": { + "description": "The source radix used (2-36).", + "type": "integer" + }, + "input": { + "description": "The submitted number, trimmed and upper-cased.", + "type": "string" + }, + "output": { + "description": "The number rewritten in to_base.", + "type": "string" + }, + "to_base": { + "description": "The target radix used (2-36).", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the conversion succeeded; false carries an error field instead of result.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_bcd13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / input / descriptionAdded value: +"Value to convert. For decimal-to-bcd, decimal digits 0-9 only, maximum 16 digits. For bcd-to-decimal, BCD interpreted per inputFormat (maximum 16 nibbles); each nibble must decode to 0-9." - added
Input schema / properties / input / examplesAdded value: +[ + "25" +] - added
Input schema / properties / inputFormat / defaultAdded value: +"nibbles" - added
Input schema / properties / inputFormat / descriptionAdded value: +"How input is parsed for bcd-to-decimal. nibbles is space-separated 4-bit groups, continuous is a bit string whose length is a multiple of 4, hex is a 0x prefixed hexadecimal string. Ignored for decimal-to-bcd." - added
Input schema / properties / inputFormat / enumAdded value: +[ + "nibbles", + "continuous", + "hex" +] - added
Input schema / properties / mode / descriptionAdded value: +"Conversion direction. decimal-to-bcd encodes a decimal number as BCD; bcd-to-decimal decodes BCD nibbles back to a decimal number." - added
Input schema / properties / mode / enumAdded value: +[ + "decimal-to-bcd", + "bcd-to-decimal" +] - added
Input schema / properties / outputFormat / defaultAdded value: +"nibbles" - added
Input schema / properties / outputFormat / descriptionAdded value: +"BCD rendering for decimal-to-bcd output. nibbles is space-separated 4-bit groups, continuous is one unbroken bit string, hex is a 0x prefixed hexadecimal string. Ignored for bcd-to-decimal." - added
Input schema / properties / outputFormat / enumAdded value: +[ + "nibbles", + "continuous", + "hex" +] - changed
Input schema / requiredPrevious value: -[ - "input", - "mode", - "outputFormat", - "inputFormat" -]New value: +[ + "input", + "mode" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "breakdown": { + "description": "Per-digit mapping between each decimal digit and its 4-bit BCD group.", + "items": { + "properties": { + "bcd": { + "description": "The 4-bit BCD nibble for that digit.", + "type": "string" + }, + "decimal": { + "description": "Decimal value of the nibble (equals digit).", + "type": "integer" + }, + "digit": { + "description": "The decimal digit 0-9.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "input": { + "description": "The input value, echoed back.", + "type": "string" + }, + "inputFormat": { + "description": "The input format applied: nibbles, continuous, or hex.", + "type": "string" + }, + "mode": { + "description": "The conversion mode used: decimal-to-bcd or bcd-to-decimal.", + "type": "string" + }, + "outputFormat": { + "description": "The output format applied: nibbles, continuous, or hex.", + "type": "string" + }, + "result": { + "description": "The converted string (BCD groups or decimal number, per mode).", + "type": "string" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_binary_decimal15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / allowFractional / defaultAdded value: +false - added
Input schema / properties / allowFractional / descriptionAdded value: +"When true, permits a fractional (radix-point) part; when false, a fractional input is rejected with an error." - added
Input schema / properties / bitWidth / defaultAdded value: +8 - added
Input schema / properties / bitWidth / descriptionAdded value: +"Fixed width for signed (two's-complement) interpretation. Required to be one of the enum values when numberType is 'signed'; ignored for unsigned." - added
Input schema / properties / bitWidth / enumAdded value: +[ + 8, + 16, + 32, + 64 +] - added
Input schema / properties / input / descriptionAdded value: +"The number to convert. For binary-to-decimal, digits 0/1 with an optional fractional part (e.g. \"1010\" or \"101.1\"). For decimal-to-binary, a decimal value with optional sign/decimal point (e.g. \"-42\" or \"5.25\"). Leading/trailing whitespace is trimmed." - added
Input schema / properties / input / minLengthAdded value: +1 - added
Input schema / properties / mode / descriptionAdded value: +"Conversion direction." - added
Input schema / properties / mode / enumAdded value: +[ + "binary-to-decimal", + "decimal-to-binary" +] - added
Input schema / properties / numberType / defaultAdded value: +"unsigned" - added
Input schema / properties / numberType / descriptionAdded value: +"Interpretation of the value. 'signed' enables two's-complement at the given bitWidth; 'unsigned' treats it as non-negative." - added
Input schema / properties / numberType / enumAdded value: +[ + "unsigned", + "signed" +] - changed
Input schema / requiredPrevious value: -[ - "mode", - "input", - "numberType", - "bitWidth", - "allowFractional" -]New value: +[ + "mode", + "input" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message (present when success is false).", + "type": "string" + }, + "result": { + "description": "The conversion result (present when success is true).", + "properties": { + "allowFractional": { + "description": "Echoed fractional-allowed flag.", + "type": "boolean" + }, + "bitBreakdown": { + "description": "Per-bit positional breakdown (binary-to-decimal only).", + "items": { + "properties": { + "bit": { + "description": "The bit digit (0 or 1).", + "type": "string" + }, + "decimal": { + "description": "Same contribution mirrored as a decimal value.", + "type": [ + "number", + "string" + ] + }, + "position": { + "description": "Power of two for this bit, e.g. 2^3 or 2^-1.", + "type": "string" + }, + "value": { + "description": "Contribution of this bit (numeric for integer bits, formatted string for fractional bits).", + "type": [ + "number", + "string" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "bitCount": { + "description": "Total bit count of the input (binary-to-decimal only).", + "type": "integer" + }, + "bitWidth": { + "description": "Echoed bit width used for signed interpretation.", + "type": "integer" + }, + "info": { + "description": "Note on representation, e.g. two's complement or fractional (decimal-to-binary only).", + "type": "string" + }, + "input": { + "description": "The trimmed input value as supplied.", + "type": "string" + }, + "mode": { + "description": "Echoed conversion direction.", + "type": "string" + }, + "numberType": { + "description": "Echoed number interpretation (unsigned or signed).", + "type": "string" + }, + "output": { + "description": "The converted number as a string.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "True when conversion succeeded; false on validation error.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_braille10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / grade / defaultAdded value: +1 - added
Input schema / properties / grade / descriptionAdded value: +"1 = uncontracted (each letter individually); 2 = contracted (uses word/letter-group contractions, ~20-30% shorter)." - added
Input schema / properties / grade / enumAdded value: +[ + 1, + 2 +] - added
Input schema / properties / operation / descriptionAdded value: +"encode = text to braille; decode = braille to text." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / text / descriptionAdded value: +"Input to convert: plain text when operation=encode, or a Unicode braille string when operation=decode. Trimmed; must be non-empty. Unsupported characters become the question-mark braille cell." - added
Input schema / properties / text / examplesAdded value: +[ + "hello world" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "grade" -]New value: +[ + "text", + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Per-conversion stats (operation, input_length, output_length, compression_ratio, character_stats, braille_stats); null on error.", + "type": [ + "object", + "null" + ] + }, + "ascii_braille": { + "description": "ASCII-braille (computer braille) form of the braille output.", + "type": "string" + }, + "braille_info": { + "description": "Reference facts for the selected grade (name, description, cell_structure, inventor, supported_chars, etc.).", + "type": "object" + }, + "error": { + "description": "Error message, present only when success is false.", + "type": "string" + }, + "grade": { + "description": "The braille grade used.", + "enum": [ + 1, + 2 + ], + "type": "integer" + }, + "result": { + "description": "The converted output: braille for encode, Latin text for decode.", + "type": "string" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_color_code8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / input / descriptionAdded value: +"The color to convert. Format must match inputFormat: hex is #RGB/#RRGGBB, rgb is rgb(255,0,0) or a bare 255,0,0 triple, hsl is hsl(210,80%,60%) or 210,80,60, hsv is hsv(210,80%,60%) or 210,80,60. A CSS color name (red, teal, etc.) is accepted in any mode. Whitespace and case are ignored. Invalid input returns HTTP 400." - added
Input schema / properties / input / examplesAdded value: +[ + "#22d3ee" +] - added
Input schema / properties / inputFormat / defaultAdded value: +"hex" - added
Input schema / properties / inputFormat / descriptionAdded value: +"The expected source notation of input. Determines which parser runs first; a CSS color name is tried as a fallback regardless." - added
Input schema / properties / inputFormat / enumAdded value: +[ + "hex", + "rgb", + "hsl", + "hsv" +] - changed
Input schema / requiredPrevious value: -[ - "input", - "inputFormat" -]New value: +[ + "input" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "description": "The color expressed in every supported format.", + "properties": { + "colorInfo": { + "description": "Numeric channel values for the color.", + "properties": { + "b": { + "description": "Blue channel, 0-255.", + "type": "integer" + }, + "brightness": { + "description": "Perceived brightness, 0-100 percent.", + "type": "integer" + }, + "g": { + "description": "Green channel, 0-255.", + "type": "integer" + }, + "h": { + "description": "Hue, 0-360 degrees.", + "type": "integer" + }, + "l": { + "description": "HSL lightness, 0-100 percent.", + "type": "integer" + }, + "r": { + "description": "Red channel, 0-255.", + "type": "integer" + }, + "s": { + "description": "HSL saturation, 0-100 percent.", + "type": "integer" + }, + "sv": { + "description": "HSV saturation, 0-100 percent.", + "type": "integer" + }, + "v": { + "description": "HSV value, 0-100 percent.", + "type": "integer" + } + }, + "type": "object" + }, + "colorPreview": { + "description": "Uppercase #RRGGBB hex suitable for a swatch.", + "type": "string" + }, + "formats": { + "description": "The color rendered as display strings in each format.", + "properties": { + "hex": { + "description": "Uppercase #RRGGBB hex string.", + "type": "string" + }, + "hexShort": { + "description": "Three-digit #RGB hex when collapsible, else #RRGGBB.", + "type": "string" + }, + "hsl": { + "description": "CSS hsl(h, s%, l%) string.", + "type": "string" + }, + "hslValues": { + "description": "Bare h, s, l triple.", + "type": "string" + }, + "hsv": { + "description": "CSS hsv(h, s%, v%) string.", + "type": "string" + }, + "hsvValues": { + "description": "Bare h, sv, v triple.", + "type": "string" + }, + "rgb": { + "description": "CSS rgb(r, g, b) string.", + "type": "string" + }, + "rgbValues": { + "description": "Bare r, g, b triple.", + "type": "string" + } + }, + "type": "object" + }, + "input": { + "description": "The trimmed input string, echoed back.", + "type": "string" + }, + "inputFormat": { + "description": "The source notation used: hex, rgb, hsl, or hsv.", + "type": "string" + }, + "isValidColor": { + "description": "True when the input parsed to a valid color.", + "type": "boolean" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_decimal_hex24 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / bitWidth / defaultAdded value: +8 - added
Input schema / properties / bitWidth / descriptionAdded value: +"Fixed width for signed (two's-complement) interpretation. Must be one of the enum values when numberType is 'signed'; ignored for unsigned." - added
Input schema / properties / bitWidth / enumAdded value: +[ + 8, + 16, + 32, + 64 +] - added
Input schema / properties / hexOptions / additionalPropertiesAdded value: +false - added
Input schema / properties / hexOptions / descriptionAdded value: +"Optional output formatting for decimal-to-hex (ignored for hex-to-decimal)." - added
Input schema / properties / hexOptions / properties / padWidth / defaultAdded value: +4 - added
Input schema / properties / hexOptions / properties / padWidth / descriptionAdded value: +"Target length for zero-padding when padding is true." - added
Input schema / properties / hexOptions / properties / padding / defaultAdded value: +false - added
Input schema / properties / hexOptions / properties / padding / descriptionAdded value: +"Left-pad the hex output with zeros to padWidth." - added
Input schema / properties / hexOptions / properties / prefix / defaultAdded value: +false - added
Input schema / properties / hexOptions / properties / prefix / descriptionAdded value: +"Prepend \"0x\" to the hexadecimal output." - added
Input schema / properties / hexOptions / properties / uppercase / defaultAdded value: +true - added
Input schema / properties / hexOptions / properties / uppercase / descriptionAdded value: +"Emit hex digits A-F uppercase; false emits a-f lowercase." - removed
Input schema / properties / hexOptions / requiredRemoved value: -[ - "prefix", - "uppercase", - "padding", - "padWidth" -] - added
Input schema / properties / input / descriptionAdded value: +"The number to convert. For decimal-to-hex, a whole decimal value with optional sign (e.g. \"255\" or \"-42\"). For hex-to-decimal, hex digits 0-9/A-F with an optional 0x prefix (e.g. \"FF\" or \"0x1a\"). Leading/trailing whitespace is trimmed; must not be blank." - added
Input schema / properties / input / minLengthAdded value: +1 - added
Input schema / properties / mode / descriptionAdded value: +"Conversion direction." - added
Input schema / properties / mode / enumAdded value: +[ + "decimal-to-hex", + "hex-to-decimal" +] - added
Input schema / properties / numberType / defaultAdded value: +"unsigned" - added
Input schema / properties / numberType / descriptionAdded value: +"Interpretation of the value. 'signed' enables two's-complement at the given bitWidth; 'unsigned' treats it as non-negative." - added
Input schema / properties / numberType / enumAdded value: +[ + "unsigned", + "signed" +] - changed
Input schema / requiredPrevious value: -[ - "mode", - "input", - "numberType", - "bitWidth", - "hexOptions" -]New value: +[ + "mode", + "input" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message (present when success is false).", + "type": "string" + }, + "result": { + "description": "The conversion result (present when success is true).", + "properties": { + "bitWidth": { + "description": "Echoed bit width used for signed interpretation.", + "type": "integer" + }, + "conversionSteps": { + "description": "Ordered step-by-step breakdown of the conversion.", + "items": { + "properties": { + "calculation": { + "description": "The arithmetic for this step.", + "type": "string" + }, + "description": { + "description": "What this step does.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "hexDigitCount": { + "description": "Number of hex digits parsed (hex-to-decimal only).", + "type": "integer" + }, + "hexOptions": { + "description": "Echoed hex formatting options after defaults were applied.", + "properties": { + "padWidth": { + "description": "Zero-padding target length.", + "type": "integer" + }, + "padding": { + "description": "Whether zero-padding was applied.", + "type": "boolean" + }, + "prefix": { + "description": "Whether a 0x prefix was added.", + "type": "boolean" + }, + "uppercase": { + "description": "Whether hex digits are uppercase.", + "type": "boolean" + } + }, + "type": "object" + }, + "input": { + "description": "The trimmed input value as supplied.", + "type": "string" + }, + "mode": { + "description": "Echoed conversion direction.", + "type": "string" + }, + "numberType": { + "description": "Echoed number interpretation (unsigned or signed).", + "type": "string" + }, + "output": { + "description": "The converted value as a string (formatted hex, or decimal).", + "type": "string" + }, + "rawHex": { + "description": "Unformatted hex digits before prefix/padding/case (decimal-to-hex only).", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "True when conversion succeeded; false on validation error.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_emoji7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / query / descriptionAdded value: +"Non-empty search term. Its meaning depends on search_type: an emoji glyph, an emoji name fragment, a keyword, an exact category id, or a Unicode code point (e.g. 1F600, U+1F600, 0x1F600)." - added
Input schema / properties / query / minLengthAdded value: +1 - added
Input schema / properties / search_type / defaultAdded value: +"name" - added
Input schema / properties / search_type / descriptionAdded value: +"How to interpret query. 'emoji' matches an exact glyph; 'name' and 'keyword' do case-insensitive substring matches; 'category' is an exact category id; 'unicode' parses query as a hex code point." - added
Input schema / properties / search_type / enumAdded value: +[ + "emoji", + "name", + "keyword", + "category", + "unicode" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "description": "Number of entries in results.", + "type": "integer" + }, + "emoji_info": { + "description": "Reference metadata about the emoji database (Unicode/Emoji version, categories, ranges, search tips); present on success.", + "type": "object" + }, + "error": { + "description": "Error message when success is false; absent on success.", + "type": [ + "string", + "null" + ] + }, + "query": { + "description": "Echo of the submitted query.", + "type": "string" + }, + "results": { + "description": "Matching emoji entries (empty when none match).", + "items": { + "properties": { + "category": { + "description": "Category id (e.g. smileys-emotion).", + "type": "string" + }, + "character_info": { + "description": "Present only for non-database/unicode lookups: glyph classification flags.", + "properties": { + "is_ascii": { + "description": "True if the code point is <= 127.", + "type": "boolean" + }, + "is_control": { + "description": "True if it is a control character.", + "type": "boolean" + }, + "is_emoji": { + "description": "True if the code point is in an emoji range.", + "type": "boolean" + }, + "is_printable": { + "description": "True if the glyph is printable.", + "type": "boolean" + } + }, + "type": "object" + }, + "emoji": { + "description": "The emoji or character glyph.", + "type": "string" + }, + "html_entities": { + "description": "HTML entity encodings of the glyph.", + "properties": { + "decimal": { + "description": "Decimal HTML entity, e.g. 😀.", + "type": "string" + }, + "hex": { + "description": "Hex HTML entity, e.g. 😀.", + "type": "string" + } + }, + "type": "object" + }, + "keywords": { + "description": "Search keywords for the entry.", + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "Emoji name or Unicode block name.", + "type": "string" + }, + "unicode": { + "description": "Unicode details for the glyph.", + "properties": { + "code_point": { + "description": "Unicode code point (decimal).", + "type": "integer" + }, + "decimal": { + "description": "Code point as a decimal integer.", + "type": "integer" + }, + "hex": { + "description": "Code point in U+ hex form, e.g. U+1F600.", + "type": "string" + }, + "utf8_bytes": { + "description": "UTF-8 bytes as 0x-prefixed hex, e.g. 0xF0.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "search_type": { + "description": "Echo of the search_type used.", + "type": "string" + }, + "success": { + "description": "True when the lookup completed.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_gray_code12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / bitWidth / defaultAdded value: +8 - added
Input schema / properties / bitWidth / descriptionAdded value: +"Fixed width in bits the input is zero-padded to (1-32)." - added
Input schema / properties / bitWidth / maximumAdded value: +32 - added
Input schema / properties / bitWidth / minimumAdded value: +1 - added
Input schema / properties / input / descriptionAdded value: +"The bit string to convert, digits 0 and 1 only. Left-padded with zeros to bitWidth; must not exceed bitWidth digits." - added
Input schema / properties / input / examplesAdded value: +[ + "1011" +] - added
Input schema / properties / input / patternAdded value: +"^[01]+$" - added
Input schema / properties / mode / descriptionAdded value: +"Conversion direction. binary-to-gray treats input as plain binary and emits Gray code; gray-to-binary treats input as Gray code and emits plain binary." - added
Input schema / properties / mode / enumAdded value: +[ + "binary-to-gray", + "gray-to-binary" +] - changed
Input schema / requiredPrevious value: -[ - "mode", - "input", - "bitWidth" -]New value: +[ + "mode", + "input" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "description": "The Gray code conversion result.", + "properties": { + "bitWidth": { + "description": "The bit width applied (1-32).", + "type": "integer" + }, + "conversionSteps": { + "description": "Ordered XOR working, one entry per output bit.", + "items": { + "properties": { + "description": { + "description": "Plain-language description of the step.", + "type": "string" + }, + "operation": { + "description": "The XOR expression evaluated for this bit.", + "type": "string" + }, + "result": { + "description": "The single resulting bit.", + "type": "string" + }, + "step": { + "description": "1-based step index.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "decimalValue": { + "description": "Decimal value of the binary number involved.", + "type": "integer" + }, + "explanation": { + "description": "One-line summary of the conversion method.", + "type": "string" + }, + "grayDecimalValue": { + "description": "Decimal value of the Gray code bit pattern.", + "type": "integer" + }, + "input": { + "description": "The trimmed input bit string, echoed back.", + "type": "string" + }, + "mode": { + "description": "The conversion mode used: binary-to-gray or gray-to-binary.", + "type": "string" + }, + "output": { + "description": "The converted bit string (Gray code or binary, per mode).", + "type": "string" + }, + "properties": { + "description": "Bit-pattern analysis of the output.", + "properties": { + "bitLength": { + "description": "Number of bits in the output.", + "type": "integer" + }, + "characteristics": { + "description": "Notes about Gray code (binary-to-gray mode).", + "items": { + "type": "string" + }, + "type": "array" + }, + "decimalValue": { + "description": "Decimal value (present for binary output).", + "type": "integer" + }, + "isReflected": { + "description": "Present for Gray-code output; true.", + "type": "boolean" + }, + "mathematicalProperties": { + "description": "Number traits of the binary value, e.g. Prime number, Power of 2 (gray-to-binary mode).", + "items": { + "type": "string" + }, + "type": "array" + }, + "onesCount": { + "description": "Count of 1 bits.", + "type": "integer" + }, + "zerosCount": { + "description": "Count of 0 bits.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_hamming_code11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / hammingType / defaultAdded value: +"hamming-7-4" - added
Input schema / properties / hammingType / descriptionAdded value: +"Code size: hamming-7-4 (4 data/3 parity), hamming-15-11 (11 data/4 parity), hamming-31-26 (26 data/5 parity)." - added
Input schema / properties / hammingType / enumAdded value: +[ + "hamming-7-4", + "hamming-15-11", + "hamming-31-26" +] - added
Input schema / properties / input / descriptionAdded value: +"Binary string (0/1 only). For encode its length must equal the type's data bits (4/11/26); for decode it must equal the total bits (7/15/31)." - added
Input schema / properties / input / examplesAdded value: +[ + "1011" +] - added
Input schema / properties / input / patternAdded value: +"^[01]+$" - added
Input schema / properties / mode / descriptionAdded value: +"\"encode\" turns data bits into a codeword; \"decode\" checks a codeword and corrects a single-bit error." - added
Input schema / properties / mode / enumAdded value: +[ + "encode", + "decode" +] - changed
Input schema / requiredPrevious value: -[ - "mode", - "input", - "hammingType" -]New value: +[ + "mode", + "input" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "description": "Encode and decode share input, mode, hammingType, output, steps, explanation, properties; the remaining fields depend on mode.", + "properties": { + "correctedCodeword": { + "description": "Decode only: codeword after single-bit correction.", + "type": "string" + }, + "dataBits": { + "description": "Encode only: number of data bits for the variant.", + "type": "integer" + }, + "errorInfo": { + "description": "Decode only: errorDetected flag, errorPosition, syndrome, and the action taken.", + "type": "object" + }, + "explanation": { + "description": "Plain-language summary of the algorithm.", + "type": "string" + }, + "hammingType": { + "description": "The Hamming code variant used.", + "type": "string" + }, + "input": { + "description": "The trimmed input bit string, echoed back.", + "type": "string" + }, + "mode": { + "description": "The operation performed: encode or decode.", + "type": "string" + }, + "originalCodeword": { + "description": "Decode only: the input codeword as received.", + "type": "string" + }, + "originalData": { + "description": "Encode only: the input data bits.", + "type": "string" + }, + "output": { + "description": "Encode: the full codeword. Decode: the recovered data bits.", + "type": "string" + }, + "parityBits": { + "description": "Encode only: number of parity bits for the variant.", + "type": "integer" + }, + "parityChecks": { + "description": "Decode only: per-parity-bit position, computed parity, and checked positions.", + "items": { + "type": "object" + }, + "type": "array" + }, + "parityPositions": { + "description": "Encode only: 1-based positions holding parity bits.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "properties": { + "description": "Variant metadata: name, dataBits, parityBits, totalBits, hammingDistance 3, efficiency, error-detection/correction capability, characteristics.", + "type": "object" + }, + "steps": { + "description": "Ordered step-by-step working of the calculation.", + "items": { + "type": "object" + }, + "type": "array" + }, + "syndrome": { + "description": "Decode only: parity syndrome; 0 means no error, else the 1-based error position.", + "type": "integer" + }, + "totalBits": { + "description": "Encode only: total codeword length.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "True when the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_ieee754_float12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / input / descriptionAdded value: +"A decimal number (when mode is decimal-to-ieee754) or a bit string (when mode is ieee754-to-decimal). Must not be blank; whitespace is trimmed." - added
Input schema / properties / inputFormat / defaultAdded value: +"binary" - added
Input schema / properties / inputFormat / descriptionAdded value: +"Format of input when decoding (mode ieee754-to-decimal): a binary bit string (32 or 64 bits) or a hex string (8 or 16 chars). Ignored when encoding." - added
Input schema / properties / inputFormat / enumAdded value: +[ + "binary", + "hex" +] - added
Input schema / properties / mode / descriptionAdded value: +"Direction of conversion: decimal number into IEEE 754 bits, or IEEE 754 bits back into a decimal number." - added
Input schema / properties / mode / enumAdded value: +[ + "decimal-to-ieee754", + "ieee754-to-decimal" +] - added
Input schema / properties / precision / defaultAdded value: +"single" - added
Input schema / properties / precision / descriptionAdded value: +"IEEE 754 width: single is 32-bit (8-bit exponent, 23-bit mantissa); double is 64-bit (11-bit exponent, 52-bit mantissa)." - added
Input schema / properties / precision / enumAdded value: +[ + "single", + "double" +] - changed
Input schema / requiredPrevious value: -[ - "input", - "mode", - "precision", - "inputFormat" -]New value: +[ + "input", + "mode" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message when success is false (HTTP 400).", + "type": "string" + }, + "result": { + "description": "The conversion output and bit-level analysis.", + "properties": { + "binaryInput": { + "description": "Normalized binary bit string of the decoded input (decode mode only).", + "type": "string" + }, + "binaryOutput": { + "description": "Full binary bit string (encode mode only).", + "type": "string" + }, + "bitBreakdown": { + "description": "Sign/exponent/mantissa decomposition and special-case detection.", + "properties": { + "binaryRepresentation": { + "description": "Full binary bit string of the value (decode mode only).", + "type": "string" + }, + "exponentActual": { + "description": "Unbiased exponent (exponentDecimal minus exponentBiased).", + "type": "integer" + }, + "exponentBiased": { + "description": "The exponent bias constant (127 single, 1023 double).", + "type": "integer" + }, + "exponentBits": { + "description": "The exponent field as a zero-padded bit string (8 bits single, 11 bits double).", + "type": "string" + }, + "exponentDecimal": { + "description": "Stored (biased) exponent as an unsigned integer.", + "type": "integer" + }, + "hexRepresentation": { + "description": "Full hexadecimal of the value (decode mode only).", + "type": "string" + }, + "mantissaBits": { + "description": "The mantissa/fraction field as a zero-padded bit string (23 bits single, 52 bits double).", + "type": "string" + }, + "mantissaDecimal": { + "description": "Mantissa as a fraction in the range 0 to 1.", + "type": "number" + }, + "precision": { + "description": "Precision of this breakdown (single or double).", + "type": "string" + }, + "signBit": { + "description": "The sign bit, 0 (positive) or 1 (negative).", + "type": "string" + }, + "specialCase": { + "description": "Set when the value is Zero, a Denormalized number (subnormal), Infinity, or NaN; absent for normal numbers.", + "type": "string" + }, + "totalBits": { + "description": "Total bit width (32 single, 64 double).", + "type": "integer" + } + }, + "type": "object" + }, + "decimalOutput": { + "description": "Decoded decimal value (decode mode only).", + "type": "number" + }, + "decimalValue": { + "description": "Parsed decimal value of the input (encode mode only).", + "type": "number" + }, + "hexInput": { + "description": "Normalized hexadecimal of the decoded input (decode mode only).", + "type": "string" + }, + "hexOutput": { + "description": "Full hexadecimal representation (encode mode only).", + "type": "string" + }, + "input": { + "description": "The submitted input, trimmed and echoed back.", + "type": "string" + }, + "inputFormat": { + "description": "The input format used (binary or hex).", + "type": "string" + }, + "mode": { + "description": "The mode used (decimal-to-ieee754 or ieee754-to-decimal).", + "type": "string" + }, + "output": { + "description": "Primary result string: the bit string (encode) or the decimal value as text (decode).", + "type": "string" + }, + "precision": { + "description": "The precision used (single or double).", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_morse5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operation / descriptionAdded value: +"encode converts text to Morse code; decode converts Morse code to text. Required; any other value returns a 400 error." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / text / descriptionAdded value: +"Input to convert: plain text when operation is encode, or a Morse string (dots, dashes, spaces between letters, a slash between words) when operation is decode. Trimmed; must be non-empty. Unsupported text characters encode to the Morse for a question mark; unrecognised Morse tokens decode to a question mark." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Per-conversion stats (operation, input_length, output_length, compression_ratio, character_stats, morse_stats: dots, dashes, total_symbols, word_separators, char_separators, dot_dash_ratio); null on error.", + "type": [ + "object", + "null" + ] + }, + "error": { + "description": "Error message, present only when success is false.", + "type": "string" + }, + "morse_info": { + "description": "Reference facts (name, description, dot_duration, dash_duration, char_separator, word_separator, supported_chars, inventor, standard, common_uses).", + "type": "object" + }, + "result": { + "description": "The converted output: Morse code for encode, Latin text for decode.", + "type": "string" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_number_base11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / from_format / descriptionAdded value: +"Encoding of the input text. Decimal/octal values must be 0-1114111 per item." - added
Input schema / properties / from_format / enumAdded value: +[ + "ascii", + "binary", + "hex", + "decimal", + "octal" +] - added
Input schema / properties / hex_delimiter / defaultAdded value: +" " - added
Input schema / properties / hex_delimiter / descriptionAdded value: +"Separator between hex bytes when to_format is hex; use \"\\x\" for \\xNN style (no separator). Ignored otherwise." - added
Input schema / properties / text / descriptionAdded value: +"The value(s) to convert, parsed per from_format (space/comma-separated for numeric formats)." - added
Input schema / properties / text / examplesAdded value: +[ + "01001000 01101001" +] - added
Input schema / properties / to_format / descriptionAdded value: +"Encoding to produce in the result string." - added
Input schema / properties / to_format / enumAdded value: +[ + "ascii", + "binary", + "hex", + "decimal", + "octal" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "from_format", - "to_format", - "hex_delimiter" -]New value: +[ + "text", + "from_format", + "to_format" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Conversion stats (null on error): input_length, output_length, values_count, value_range{min,max}, formats{from,to}, printable_chars (ASCII input only, else null), encoding_efficiency{compression_ratio,space_saving}.", + "type": [ + "object", + "null" + ] + }, + "error": { + "description": "Error message; present only when success is false.", + "type": "string" + }, + "format_info": { + "description": "Reference info for to_format (name, description, base, chars, example).", + "type": "object" + }, + "result": { + "description": "The input re-encoded in to_format (empty string on error).", + "type": "string" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_octal_text12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / encoding / defaultAdded value: +"utf8" - added
Input schema / properties / encoding / descriptionAdded value: +"Byte encoding. ascii maps each character to a single byte (codepoints > 127 become 63 / \"?\"); utf8 encodes/decodes multi-byte UTF-8, rejecting invalid sequences on decode." - added
Input schema / properties / encoding / enumAdded value: +[ + "ascii", + "utf8" +] - added
Input schema / properties / format / defaultAdded value: +"space" - added
Input schema / properties / format / descriptionAdded value: +"Separator for the octal output values when encoding (input octal is split on any whitespace regardless). space joins with single spaces; newline puts one value per line." - added
Input schema / properties / format / enumAdded value: +[ + "space", + "newline" +] - added
Input schema / properties / input / descriptionAdded value: +"Data to convert: plaintext when mode is text-to-octal, or whitespace-separated octal byte values (each 0-7 digits, max 377 octal / 255 decimal) when mode is octal-to-text. Must not be blank." - added
Input schema / properties / mode / descriptionAdded value: +"Conversion direction. text-to-octal encodes text into octal byte values; octal-to-text decodes octal byte values back into text." - added
Input schema / properties / mode / enumAdded value: +[ + "text-to-octal", + "octal-to-text" +] - changed
Input schema / requiredPrevious value: -[ - "input", - "mode", - "encoding", - "format" -]New value: +[ + "input", + "mode" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "description": "The conversion result object.", + "properties": { + "conversionDetails": { + "description": "Per-byte breakdown of the conversion.", + "items": { + "properties": { + "decimal": { + "description": "The byte value in decimal (0-255).", + "type": "integer" + }, + "from": { + "description": "Source token for this byte (character or escape placeholder when encoding; octal value when decoding).", + "type": "string" + }, + "to": { + "description": "Result token for this byte (octal value when encoding; character or escape placeholder when decoding).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "encoding": { + "description": "The byte encoding used (ascii or utf8).", + "type": "string" + }, + "format": { + "description": "The output separator used (space or newline).", + "type": "string" + }, + "input": { + "description": "The submitted input, echoed back.", + "type": "string" + }, + "mode": { + "description": "The conversion direction performed (text-to-octal or octal-to-text).", + "type": "string" + }, + "output": { + "description": "The converted result: octal byte values (encode) or decoded text (decode).", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_parity_bit12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / input / descriptionAdded value: +"Binary string, digits 0 and 1 only. In check mode it must be at least 2 bits long (data bits plus a trailing parity bit)." - added
Input schema / properties / input / examplesAdded value: +[ + "1011" +] - added
Input schema / properties / input / patternAdded value: +"^[01]+$" - added
Input schema / properties / mode / defaultAdded value: +"add" - added
Input schema / properties / mode / descriptionAdded value: +"add appends a computed parity bit to the data; check treats the last bit as the received parity and verifies it against the data bits." - added
Input schema / properties / mode / enumAdded value: +[ + "add", + "check" +] - added
Input schema / properties / parityType / defaultAdded value: +"even" - added
Input schema / properties / parityType / descriptionAdded value: +"Parity scheme. even/odd make the total 1 count even/odd; mark forces the parity bit to 1; space forces it to 0." - added
Input schema / properties / parityType / enumAdded value: +[ + "even", + "odd", + "mark", + "space" +] - changed
Input schema / requiredPrevious value: -[ - "mode", - "input", - "parityType" -]New value: +[ + "input" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "description": "The parity calculation or verification result.", + "properties": { + "dataBits": { + "description": "check mode only: the leading data bits with the trailing parity bit removed.", + "type": "string" + }, + "errorDetected": { + "description": "check mode only: true when an error was detected (received parity does not match).", + "type": "boolean" + }, + "expectedParity": { + "description": "check mode only: the parity bit recomputed from the data bits.", + "type": "integer" + }, + "explanation": { + "description": "One-line summary of the parity scheme.", + "type": "string" + }, + "input": { + "description": "The validated binary input, echoed back.", + "type": "string" + }, + "mode": { + "description": "The mode used: add or check.", + "type": "string" + }, + "oneCount": { + "description": "Count of 1 bits in the data bits.", + "type": "integer" + }, + "output": { + "description": "add mode only: the codeword (data bits plus appended parity bit).", + "type": "string" + }, + "parityBit": { + "description": "The parity bit value, 0 or 1 (computed in add mode, received in check mode).", + "type": "integer" + }, + "parityCorrect": { + "description": "check mode only: true when the received parity matches the expected parity.", + "type": "boolean" + }, + "parityType": { + "description": "The parity scheme applied: even, odd, mark, or space.", + "type": "string" + }, + "properties": { + "description": "Parity-scheme properties (name, description, calculation, errorDetection, errorCorrection, overhead, applications).", + "type": "object" + }, + "steps": { + "description": "Ordered step-by-step working.", + "items": { + "properties": { + "calculation": { + "description": "The expression or values evaluated for this step.", + "type": "string" + }, + "description": { + "description": "Plain-language description of the step.", + "type": "string" + }, + "result": { + "description": "The outcome of this step.", + "type": "string" + }, + "step": { + "description": "1-based step index.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_roman_numerals8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / direction / defaultAdded value: +"auto" - added
Input schema / properties / direction / descriptionAdded value: +"Conversion direction. auto detects from input (letters I V X L C D M to_arabic, digits to_roman); to_roman forces integer-to-Roman; to_arabic forces Roman-to-integer." - added
Input schema / properties / direction / enumAdded value: +[ + "auto", + "to_roman", + "to_arabic" +] - added
Input schema / properties / input / descriptionAdded value: +"Value to convert: an integer 1-3999 (e.g. 2024) or a Roman numeral (e.g. MCMXCIV). Trimmed; Roman input is case-insensitive." - added
Input schema / properties / input / examplesAdded value: +[ + "2024", + "MCMXCIV" +] - changed
Input schema / requiredPrevious value: -[ - "input", - "direction" -]New value: +[ + "input" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message when success is false (e.g. out-of-range or invalid Roman numeral).", + "type": "string" + }, + "result": { + "description": "The conversion result (present when success is true).", + "properties": { + "alternative_representations": { + "description": "The integer in other forms.", + "properties": { + "binary": { + "description": "Base-2 representation.", + "type": "string" + }, + "hexadecimal": { + "description": "Uppercase base-16 representation.", + "type": "string" + }, + "octal": { + "description": "Base-8 representation.", + "type": "string" + }, + "ordinal": { + "description": "Ordinal form (e.g. 21st).", + "type": "string" + }, + "words": { + "description": "English words for the number.", + "type": "string" + } + }, + "type": "object" + }, + "arabic_number": { + "description": "The integer value (1-3999).", + "type": "integer" + }, + "breakdown": { + "description": "Numeral structure analysis.", + "properties": { + "character_count": { + "description": "Count of each Roman symbol used.", + "type": "object" + }, + "length": { + "description": "Character length of the Roman numeral.", + "type": "integer" + }, + "subtractive_notation": { + "description": "Subtractive pairs found (e.g. IV, CM) with their meaning.", + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "conversion_steps": { + "description": "Ordered step-by-step working of the conversion.", + "items": { + "type": "object" + }, + "type": "array" + }, + "direction": { + "description": "Resolved direction actually used: to_roman or to_arabic.", + "type": "string" + }, + "facts": { + "description": "Historical/number facts about the value.", + "items": { + "type": "string" + }, + "type": "array" + }, + "input": { + "description": "The trimmed input, echoed back.", + "type": "string" + }, + "input_type": { + "description": "Type of the input value.", + "enum": [ + "arabic", + "roman" + ], + "type": "string" + }, + "output_type": { + "description": "Type of the output value.", + "enum": [ + "arabic", + "roman" + ], + "type": "string" + }, + "roman_numeral": { + "description": "The Roman numeral string.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
conversion_string_number8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / from_type / descriptionAdded value: +"How to interpret the input. string=Unicode code points per character; integer/float/scientific=numeric tokens; words=English number words; roman=Roman numerals." - added
Input schema / properties / from_type / enumAdded value: +[ + "string", + "integer", + "float", + "scientific", + "words", + "roman" +] - added
Input schema / properties / text / descriptionAdded value: +"Value(s) to convert. For from_type=string the whole text is read character-by-character; for numeric types it is split on spaces, commas, and newlines into separate values. Must be non-empty." - added
Input schema / properties / text / examplesAdded value: +[ + "Hi" +] - added
Input schema / properties / to_type / descriptionAdded value: +"Output format. string emits one character per code point; float fixes 3 decimals; scientific uses 3-digit exponential; roman supports 1-3999; words covers 0-99 then falls back to digits." - added
Input schema / properties / to_type / enumAdded value: +[ + "string", + "integer", + "float", + "scientific", + "words", + "roman" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Conversion stats (null on error): input_length, output_length, values_count, value_statistics{min,max,average,sum}, conversion_type{from,to}, data_type_analysis{integers,floats,negative,zero,positive}, encoding_info{source_format,target_format,reversible,precision_loss}.", + "type": [ + "object", + "null" + ] + }, + "error": { + "description": "Error message; present only when success is false (e.g. empty input, invalid token, unknown number word).", + "type": "string" + }, + "format_info": { + "description": "Reference info for to_type (name, description, example, data_type); present only on success.", + "type": "object" + }, + "result": { + "description": "The values rendered in to_type (empty string on error).", + "type": "string" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
convert_timestamp4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / input / descriptionAdded value: +"The timestamp or date to convert. Accepts 10-digit Unix seconds, 13-digit Unix milliseconds, an ISO 8601 datetime, or any parseable date string. Must not be blank (also accepted under the keys timestamp or text)." - added
Input schema / properties / nowAdded value: +{ + "description": "Optional reference instant in Unix milliseconds used only to compute the relative phrase (for example 2 days ago). Omit to use the server current time, which makes the relative field vary between calls.", + "type": [ + "integer", + "null" + ] +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "detectedFormat": { + "description": "The input format that was auto-detected (for example Unix Timestamp seconds, ISO 8601, or Date String).", + "type": "string" + }, + "error": { + "description": "Present only on a 400 error response; the failure reason.", + "type": "string" + }, + "results": { + "description": "The converted instant in multiple representations.", + "properties": { + "analysis": { + "description": "Calendar breakdown of the instant.", + "properties": { + "dayOfWeek": { + "description": "Weekday name (Sunday through Saturday).", + "type": "string" + }, + "dayOfYear": { + "description": "Ordinal day number within the year.", + "type": "integer" + }, + "daysInMonth": { + "description": "Number of days in the instant month.", + "type": "integer" + }, + "isLeapYear": { + "description": "Whether the year is a leap year.", + "type": "boolean" + }, + "quarter": { + "description": "Calendar quarter (Q1 through Q4).", + "type": "string" + }, + "relative": { + "description": "Human phrase relative to now or the supplied now value (for example Just now, 3 hours ago, 2 days from now).", + "type": "string" + }, + "timezoneOffset": { + "description": "Server timezone offset (for example UTC+00:00).", + "type": "string" + }, + "weekOfYear": { + "description": "Simple week number within the year.", + "type": "integer" + } + }, + "type": "object" + }, + "isValid": { + "description": "Always true on a successful 200 response.", + "type": "boolean" + }, + "iso": { + "description": "The instant as an ISO 8601 UTC string.", + "type": "string" + }, + "local": { + "description": "The instant rendered in the server local locale and timezone.", + "type": "string" + }, + "milliseconds": { + "description": "The instant as Unix milliseconds.", + "type": "integer" + }, + "unix": { + "description": "The instant as whole Unix seconds.", + "type": "integer" + }, + "utc": { + "description": "The instant as an RFC 2822 / toUTCString UTC string.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
crypto_argon220 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / memory / defaultAdded value: +65536 - added
Input schema / properties / memory / descriptionAdded value: +"Memory cost in KiB (the m parameter). Higher is stronger but slower." - added
Input schema / properties / memory / maximumAdded value: +4194304 - added
Input schema / properties / memory / minimumAdded value: +1024 - added
Input schema / properties / password / descriptionAdded value: +"The plaintext password to hash. Required and must be non-empty." - added
Input schema / properties / password / examplesAdded value: +[ + "correct horse battery staple" +] - added
Input schema / properties / threads / defaultAdded value: +3 - added
Input schema / properties / threads / descriptionAdded value: +"Degree of parallelism / threads (the p parameter)." - added
Input schema / properties / threads / maximumAdded value: +16 - added
Input schema / properties / threads / minimumAdded value: +1 - added
Input schema / properties / time / defaultAdded value: +4 - added
Input schema / properties / time / descriptionAdded value: +"Time cost / number of iterations (the t parameter)." - added
Input schema / properties / time / maximumAdded value: +50 - added
Input schema / properties / time / minimumAdded value: +1 - added
Input schema / properties / variant / defaultAdded value: +"argon2id" - added
Input schema / properties / variant / descriptionAdded value: +"Argon2 variant. argon2id (hybrid, recommended) resists both side-channel and GPU attacks; argon2i is data-independent only." - added
Input schema / properties / variant / enumAdded value: +[ + "argon2id", + "argon2i" +] - changed
Input schema / requiredPrevious value: -[ - "password", - "variant", - "memory", - "time", - "threads" -]New value: +[ + "password" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "generatedAt": { + "description": "ISO 8601 timestamp of when the hash was generated.", + "format": "date-time", + "type": "string" + }, + "hash": { + "description": "The encoded Argon2 hash in PHC format: $argon2id$v=19$m=65536,t=4,p=3$<saltBase64>$<hashBase64>.", + "type": "string" + }, + "info": { + "description": "Components parsed back out of the encoded hash.", + "properties": { + "hash": { + "description": "Base64 derived-key segment from the hash.", + "type": "string" + }, + "hashLength": { + "description": "Decoded derived-key length in bytes.", + "type": "integer" + }, + "parameters": { + "additionalProperties": { + "type": "string" + }, + "description": "Cost parameters parsed from the hash, e.g. m (memory KiB), t (time), p (parallelism).", + "type": "object" + }, + "salt": { + "description": "Base64 salt segment from the hash.", + "type": "string" + }, + "saltLength": { + "description": "Decoded salt length in bytes.", + "type": "integer" + }, + "totalLength": { + "description": "Character length of the full encoded hash string.", + "type": "integer" + }, + "variant": { + "description": "Variant segment parsed from the hash.", + "type": "string" + }, + "version": { + "description": "Argon2 version field, e.g. 19.", + "type": "string" + } + }, + "type": "object" + }, + "length": { + "description": "Character length of the encoded hash string.", + "type": "integer" + }, + "options": { + "description": "The cost parameters applied to the hash.", + "properties": { + "memory_cost": { + "description": "Memory cost in KiB that was used.", + "type": "integer" + }, + "threads": { + "description": "Parallelism / threads that was used.", + "type": "integer" + }, + "time_cost": { + "description": "Time cost / iterations that was used.", + "type": "integer" + } + }, + "type": "object" + }, + "password": { + "description": "The plaintext password that was hashed (echoed from the request).", + "type": "string" + }, + "variant": { + "description": "The variant used to hash, argon2id or argon2i.", + "type": "string" + }, + "variantName": { + "description": "Human-readable variant label, e.g. Argon2id.", + "type": "string" + }, + "verified": { + "description": "Always true — a self-check that the generated hash verifies against the input password.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
crypto_argon2_verify10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / hashAdded value: +{ + "description": "The encoded Argon2 hash to verify against, in PHP's PHC format produced by crypto_argon2: $argon2id$v=19$m=65536,t=4,p=3$<saltBase64>$<hashBase64>. The variant, version, and m/t/p cost parameters are read from this string; argon2i and argon2id are both accepted.", + "examples": [ + "$argon2id$v=19$m=65536,t=4,p=3$c29tZXNhbHQ$RdescudvJCsgt3ub+b+dWRWJTmaaJObG" + ], + "type": "string" +} - removed
Input schema / properties / memoryRemoved value: -{ - "type": "integer" -} - added
Input schema / properties / password / descriptionAdded value: +"The plaintext password to test against the hash." - added
Input schema / properties / password / examplesAdded value: +[ + "correct horse battery staple" +] - removed
Input schema / properties / threadsRemoved value: -{ - "type": "integer" -} - removed
Input schema / properties / timeRemoved value: -{ - "type": "integer" -} - removed
Input schema / properties / variantRemoved value: -{ - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "password", - "variant", - "memory", - "time", - "threads" -]New value: +[ + "password", + "hash" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hash": { + "description": "The encoded Argon2 hash that was checked (echoed from the request).", + "type": "string" + }, + "info": { + "description": "Components parsed from the hash. Contains only {error} when the hash has fewer than six $-delimited segments.", + "properties": { + "error": { + "description": "Present only when the hash format is invalid.", + "type": "string" + }, + "hash": { + "description": "Base64 derived-key segment from the hash.", + "type": "string" + }, + "hashLength": { + "description": "Decoded derived-key length in bytes.", + "type": "integer" + }, + "parameters": { + "additionalProperties": { + "type": "string" + }, + "description": "Cost parameters parsed from the hash, e.g. m (memory KiB), t (time/iterations), p (parallelism).", + "type": "object" + }, + "salt": { + "description": "Base64 salt segment from the hash.", + "type": "string" + }, + "saltLength": { + "description": "Decoded salt length in bytes.", + "type": "integer" + }, + "totalLength": { + "description": "Character length of the full encoded hash string.", + "type": "integer" + }, + "variant": { + "description": "Argon2 variant parsed from the hash (e.g. argon2id, argon2i).", + "type": "string" + }, + "version": { + "description": "Argon2 version field parsed from the hash (e.g. v=19).", + "type": "string" + } + }, + "type": "object" + }, + "password": { + "description": "The plaintext password that was tested (echoed from the request).", + "type": "string" + }, + "verified": { + "description": "True when the password matches the supplied hash.", + "type": "boolean" + }, + "verifiedAt": { + "description": "ISO 8601 timestamp of when verification ran.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
crypto_bcrypt10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / cost / defaultAdded value: +12 - added
Input schema / properties / cost / descriptionAdded value: +"Bcrypt cost factor (log2 of the key-expansion rounds); higher is slower and more brute-force resistant. 12 is recommended for production. Values outside 4-15 are rejected with a 400." - added
Input schema / properties / cost / maximumAdded value: +15 - added
Input schema / properties / cost / minimumAdded value: +4 - added
Input schema / properties / password / descriptionAdded value: +"The plaintext password to hash. Must be non-empty." - added
Input schema / properties / password / examplesAdded value: +[ + "correct horse battery staple" +] - added
Input schema / properties / password / minLengthAdded value: +1 - changed
Input schema / requiredPrevious value: -[ - "password", - "cost" -]New value: +[ + "password" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "algorithm": { + "description": "Always \"bcrypt\".", + "type": "string" + }, + "cost": { + "description": "The cost factor used to generate the hash.", + "type": "integer" + }, + "duration": { + "description": "Time taken to generate the hash, in seconds (rounded to 3 decimals).", + "type": "number" + }, + "error": { + "description": "Present only on a 4xx/5xx error response (e.g. missing password or cost out of range); absent on success.", + "type": "string" + }, + "format": { + "description": "Structural breakdown of the hash string.", + "properties": { + "length": { + "description": "Total character length of the hash string.", + "type": "integer" + }, + "parts": { + "description": "The hash split into its component substrings.", + "properties": { + "cost": { + "description": "Cost factor read from the hash, or null if it could not be parsed.", + "type": [ + "integer", + "null" + ] + }, + "hash": { + "description": "The digest substring following the salt.", + "type": "string" + }, + "identifier": { + "description": "The 3-character algorithm identifier (e.g. $2y).", + "type": "string" + }, + "salt": { + "description": "The 22-character salt substring.", + "type": "string" + } + }, + "type": "object" + }, + "structure": { + "description": "Human-readable layout label: $version$cost$salt_and_hash.", + "type": "string" + } + }, + "type": "object" + }, + "hash": { + "description": "The bcrypt hash in modular crypt format $2y$<cost>$<22charSalt><31charDigest>.", + "type": "string" + }, + "info": { + "description": "Fields parsed from the generated bcrypt hash.", + "properties": { + "cost": { + "description": "Cost factor read from the hash.", + "type": "integer" + }, + "full_length": { + "description": "Total character length of the hash string.", + "type": "integer" + }, + "hash_part": { + "description": "The 31-character base64 digest segment.", + "type": "string" + }, + "is_valid_format": { + "description": "True when the hash matched the expected bcrypt structure.", + "type": "boolean" + }, + "salt": { + "description": "The 22-character base64 salt segment.", + "type": "string" + }, + "version": { + "description": "Algorithm version prefix: $2a, $2b, $2x, or $2y.", + "type": "string" + } + }, + "type": "object" + }, + "password": { + "description": "The plaintext password that was hashed (echoed back from the request).", + "type": "string" + }, + "salt": { + "description": "The 22-character base64 salt parsed from the generated hash.", + "type": "string" + }, + "security": { + "description": "Strength analysis of the chosen cost factor.", + "properties": { + "cost_factor": { + "description": "The cost factor analysed.", + "type": "integer" + }, + "estimated_time": { + "description": "Rough hashing-time estimate for this cost, e.g. \"1-3s\".", + "type": "string" + }, + "iterations": { + "description": "Key-expansion rounds (2 ^ cost_factor).", + "type": "integer" + }, + "recommendation": { + "description": "Advisory note on whether to adjust the cost factor.", + "type": "string" + }, + "security_level": { + "description": "Qualitative rating, e.g. \"Strong - Good for high-security applications\".", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
crypto_bcrypt_verify7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / costRemoved value: -{ - "type": "integer" -} - added
Input schema / properties / hashAdded value: +{ + "description": "The bcrypt hash to verify against, in modular crypt format $2<version>$<cost>$<22charSalt><31charDigest> as produced by crypto_bcrypt. The cost and salt are read from this string to recompute the digest and compare it against the supplied password; no separate cost or salt parameter is needed.", + "examples": [ + "$2y$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW" + ], + "type": "string" +} - added
Input schema / properties / password / descriptionAdded value: +"The plaintext password to test against the hash." - added
Input schema / properties / password / examplesAdded value: +[ + "correct horse battery staple" +] - changed
Input schema / requiredPrevious value: -[ - "password", - "cost" -]New value: +[ + "password", + "hash" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "duration": { + "description": "Time taken to run the verification, in seconds (rounded to 3 decimals).", + "type": "number" + }, + "error": { + "description": "Present only on a 4xx/5xx error response (e.g. missing password or hash); absent on success.", + "type": "string" + }, + "format": { + "description": "Structural breakdown of the hash string.", + "properties": { + "length": { + "description": "Total character length of the hash string.", + "type": "integer" + }, + "parts": { + "description": "The hash split into its component substrings.", + "properties": { + "cost": { + "description": "Cost factor read from the hash, or null if it could not be parsed.", + "type": [ + "integer", + "null" + ] + }, + "hash": { + "description": "The digest substring following the salt.", + "type": "string" + }, + "identifier": { + "description": "The 3-character algorithm identifier (e.g. $2y).", + "type": "string" + }, + "salt": { + "description": "The 22-character salt substring.", + "type": "string" + } + }, + "type": "object" + }, + "structure": { + "description": "Human-readable layout label: $version$cost$salt_and_hash.", + "type": "string" + } + }, + "type": "object" + }, + "hash": { + "description": "The bcrypt hash that was verified against (echoed back from the request).", + "type": "string" + }, + "info": { + "description": "Fields parsed from the bcrypt hash; contains only error when the hash format is invalid.", + "properties": { + "cost": { + "description": "Cost factor (log2 of the number of key-expansion rounds).", + "type": "integer" + }, + "error": { + "description": "Set to \"Invalid bcrypt hash format\" when the hash could not be parsed; other fields are then absent.", + "type": "string" + }, + "full_length": { + "description": "Total character length of the hash string.", + "type": "integer" + }, + "hash_part": { + "description": "The 31-character base64 digest segment of the hash.", + "type": "string" + }, + "is_valid_format": { + "description": "True when the hash matched the expected bcrypt structure.", + "type": "boolean" + }, + "salt": { + "description": "The 22-character base64 salt segment of the hash.", + "type": "string" + }, + "version": { + "description": "Algorithm version prefix: $2a, $2b, $2x, or $2y.", + "type": "string" + } + }, + "type": "object" + }, + "password": { + "description": "The plaintext password that was tested (echoed back from the request).", + "type": "string" + }, + "security": { + "description": "Strength analysis of the parsed cost factor; null when no cost could be read from the hash.", + "properties": { + "cost_factor": { + "description": "The cost factor analysed.", + "type": "integer" + }, + "estimated_time": { + "description": "Rough hashing-time estimate for this cost, e.g. \"< 0.5s\".", + "type": "string" + }, + "iterations": { + "description": "Key-expansion rounds (2 ^ cost_factor).", + "type": "integer" + }, + "recommendation": { + "description": "Advisory note on whether to adjust the cost factor.", + "type": "string" + }, + "security_level": { + "description": "Qualitative rating, e.g. \"Good - Acceptable for most applications\" or \"Very Strong - Maximum security\".", + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "valid": { + "description": "True when the password matches the supplied bcrypt hash.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
crypto_blake213 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / encoding / defaultAdded value: +"text" - added
Input schema / properties / encoding / descriptionAdded value: +"How to decode text into bytes before hashing: UTF-8 text (default), hex, or base64. Invalid hex/base64 is rejected." - added
Input schema / properties / encoding / enumAdded value: +[ + "text", + "hex", + "base64" +] - added
Input schema / properties / key / descriptionAdded value: +"Optional UTF-8 key. When non-empty, a keyed (MAC) digest is produced and the keyed flag becomes true; when omitted or empty, a plain unkeyed digest is returned." - removed
Input schema / properties / key / nullableRemoved value: -true - added
Input schema / properties / key / typeAdded value: +"string" - added
Input schema / properties / text / descriptionAdded value: +"Data to hash, interpreted per the encoding field. The empty string is valid." - added
Input schema / properties / variant / defaultAdded value: +"blake2b512" - added
Input schema / properties / variant / descriptionAdded value: +"BLAKE2 variant and digest size. blake2b* is 64-bit-optimized (up to 512-bit); blake2s* is 8-to-32-bit-optimized (up to 256-bit). Defaults to blake2b512." - added
Input schema / properties / variant / enumAdded value: +[ + "blake2b512", + "blake2b384", + "blake2b256", + "blake2b160", + "blake2s256", + "blake2s224", + "blake2s160", + "blake2s128" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "encoding", - "variant", - "key" -]New value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "algorithm": { + "description": "Resolved variant id, e.g. blake2b512.", + "type": "string" + }, + "bits": { + "description": "Digest length in bits (length x 8).", + "type": "integer" + }, + "encoding": { + "description": "Resolved input encoding applied to text (text, hex, or base64).", + "type": "string" + }, + "hash": { + "description": "Digest as lowercase hex.", + "type": "string" + }, + "keyed": { + "description": "True when a non-empty key was supplied (keyed/MAC digest).", + "type": "boolean" + }, + "length": { + "description": "Digest length in bytes.", + "type": "integer" + }, + "uppercase": { + "description": "The same digest in uppercase hex.", + "type": "string" + }, + "variant": { + "description": "Human-readable variant name, e.g. BLAKE2b-512.", + "type": "string" + } + }, + "type": "object" +}
- Changed
crypto_blake318 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / contextAdded value: +{ + "description": "Application-specific context string for mode=derive-key (decoded as UTF-8). Required and used only when mode=derive-key; ignored otherwise.", + "type": "string" +} - added
Input schema / properties / encoding / defaultAdded value: +"text" - added
Input schema / properties / encoding / descriptionAdded value: +"How to decode text into bytes before hashing: UTF-8 text, hex, or base64." - added
Input schema / properties / encoding / enumAdded value: +[ + "text", + "hex", + "base64" +] - added
Input schema / properties / keyAdded value: +{ + "description": "Keying material for mode=keyed. After decoding with keyEncoding it must be exactly 32 bytes. Required and used only when mode=keyed; ignored otherwise.", + "type": "string" +} - added
Input schema / properties / keyEncodingAdded value: +{ + "default": "text", + "description": "How to decode key into bytes (must yield 32 bytes). Only applies when mode=keyed.", + "enum": [ + "text", + "hex", + "base64" + ], + "type": "string" +} - added
Input schema / properties / length / defaultAdded value: +32 - added
Input schema / properties / length / descriptionAdded value: +"Output digest length in bytes (BLAKE3 is an XOF). Defaults to 32 (256-bit)." - added
Input schema / properties / length / maximumAdded value: +1024 - added
Input schema / properties / length / minimumAdded value: +1 - added
Input schema / properties / mode / defaultAdded value: +"hash" - added
Input schema / properties / mode / descriptionAdded value: +"hash = plain BLAKE3 digest; keyed = 32-byte-keyed MAC (requires key); derive-key = KDF from a context string (requires context)." - added
Input schema / properties / mode / enumAdded value: +[ + "hash", + "keyed", + "derive-key" +] - added
Input schema / properties / text / descriptionAdded value: +"Message to hash. Interpreted per the encoding field. The empty string is valid (BLAKE3 of empty input is af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 at 32 bytes)." - added
Input schema / properties / text / examplesAdded value: +[ + "hello" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "encoding", - "mode", - "length" -]New value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "algorithm": { + "description": "Algorithm id, always blake3.", + "type": "string" + }, + "bits": { + "description": "Output length in bits (length x 8).", + "type": "integer" + }, + "context": { + "description": "Context string echoed back; present only when mode=derive-key.", + "type": "string" + }, + "encoding": { + "description": "Resolved input encoding applied to text.", + "enum": [ + "text", + "hex", + "base64" + ], + "type": "string" + }, + "hash": { + "description": "Digest as lowercase hex.", + "type": "string" + }, + "hashBase64": { + "description": "Same digest encoded as standard base64.", + "type": "string" + }, + "keyed": { + "description": "True when mode=keyed (a 32-byte key was applied).", + "type": "boolean" + }, + "length": { + "description": "Output length in bytes (1-1024).", + "type": "integer" + }, + "mode": { + "description": "Resolved hashing mode.", + "enum": [ + "hash", + "keyed", + "derive-key" + ], + "type": "string" + }, + "uppercase": { + "description": "Same digest as uppercase hex.", + "type": "string" + } + }, + "type": "object" +}
- Changed
crypto_checksum13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / algorithms / defaultAdded value: +[ + "crc32" +] - added
Input schema / properties / algorithms / descriptionAdded value: +"One or more checksum algorithm ids to compute. Unknown ids are silently skipped; at least one valid id is required." - added
Input schema / properties / algorithms / items / enumAdded value: +[ + "crc32", + "crc32b", + "adler32", + "md5", + "sha1", + "sha256", + "sha384", + "sha512", + "fnv132", + "fnv1a32", + "fnv164", + "fnv1a64", + "joaat", + "crc16", + "fletcher16", + "fletcher32" +] - added
Input schema / properties / algorithms / minItemsAdded value: +1 - added
Input schema / properties / outputFormat / defaultAdded value: +"hex" - added
Input schema / properties / outputFormat / descriptionAdded value: +"Numeric-base/case for the output. Numeric checksums honour all five values; fixed hex-digest algorithms (md5, sha1, sha256, sha384, sha512, crc32b) only vary case between \"hex\" (lower) and \"upper\"." - added
Input schema / properties / outputFormat / enumAdded value: +[ + "hex", + "upper", + "decimal", + "binary", + "octal" +] - added
Input schema / properties / text / descriptionAdded value: +"The UTF-8 text to checksum. Required and must be non-empty; hashed as raw bytes." - added
Input schema / properties / text / examplesAdded value: +[ + "hello world" +] - added
Input schema / properties / text / minLengthAdded value: +1 - changed
Input schema / requiredPrevious value: -[ - "text", - "algorithms", - "outputFormat" -]New value: +[ + "text", + "algorithms" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "algorithms": { + "description": "Algorithm ids that produced a result (unknown ids dropped).", + "items": { + "type": "string" + }, + "type": "array" + }, + "checksums": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of requested algorithm id to its checksum string, formatted per outputFormat.", + "type": "object" + }, + "inputLength": { + "description": "Byte length of the input text.", + "type": "integer" + }, + "outputFormat": { + "description": "The normalized output format applied (one of hex, upper, decimal, binary, octal).", + "type": "string" + } + }, + "type": "object" +}
- Changed
crypto_hash12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / algorithms / defaultAdded value: +[ + "md5", + "sha256" +] - added
Input schema / properties / algorithms / descriptionAdded value: +"One or more algorithm ids to compute. Also accepts an object map of id to boolean. Unknown ids are silently skipped; if none are valid it falls back to md5 and sha256." - added
Input schema / properties / algorithms / items / enumAdded value: +[ + "md5", + "sha1", + "sha256", + "sha512", + "crc32", + "adler32" +] - added
Input schema / properties / algorithms / minItemsAdded value: +1 - added
Input schema / properties / outputFormat / defaultAdded value: +"hex" - added
Input schema / properties / outputFormat / descriptionAdded value: +"Hex digit case for every digest: \"hex\" for lowercase, \"HEX\" for uppercase. Any other value is treated as \"hex\"." - added
Input schema / properties / outputFormat / enumAdded value: +[ + "hex", + "HEX" +] - added
Input schema / properties / text / descriptionAdded value: +"The UTF-8 text to hash. Hashed as raw bytes; an empty string is permitted and yields each algorithm's empty-input digest." - added
Input schema / properties / text / examplesAdded value: +[ + "hello world" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "algorithms", - "outputFormat" -]New value: +[ + "text", + "algorithms" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "algorithms": { + "description": "Algorithm ids that produced a digest (unknown ids dropped).", + "items": { + "type": "string" + }, + "type": "array" + }, + "hashes": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of algorithm id (md5, sha1, sha256, sha512, crc32, adler32) to its hex digest; algorithms not requested have an empty-string value.", + "type": "object" + }, + "inputLength": { + "description": "Byte length of the input text.", + "type": "integer" + }, + "outputFormat": { + "description": "The normalized hex case applied (hex or HEX).", + "type": "string" + } + }, + "type": "object" +}
- Changed
crypto_hash_cracker12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / dictionary / defaultAdded value: +[] - added
Input schema / properties / dictionary / descriptionAdded value: +"Optional custom candidate passwords to try first, in order. Combined with the built-in list when useCommonPasswords is true." - added
Input schema / properties / hash / descriptionAdded value: +"The hash string to crack, e.g. an MD5/SHA/bcrypt digest." - added
Input schema / properties / hash / examplesAdded value: +[ + "5f4dcc3b5aa765d61d8327deb882cf99" +] - added
Input schema / properties / type / defaultAdded value: +"auto" - added
Input schema / properties / type / descriptionAdded value: +"Hash algorithm. Leave as \"auto\" to detect it from the hash length/format, or set it explicitly to skip detection." - added
Input schema / properties / type / enumAdded value: +[ + "auto", + "md5", + "sha1", + "sha256", + "sha384", + "sha512", + "bcrypt", + "md5-crypt", + "sha256-crypt", + "sha512-crypt" +] - added
Input schema / properties / useCommonPasswords / defaultAdded value: +true - added
Input schema / properties / useCommonPasswords / descriptionAdded value: +"Also test a built-in list of the most common passwords. Disable to test only the supplied dictionary." - changed
Input schema / requiredPrevious value: -[ - "hash", - "type", - "useCommonPasswords", - "dictionary" -]New value: +[ + "hash" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "attempts": { + "description": "Number of candidate passwords tested.", + "type": "integer" + }, + "duration": { + "description": "Elapsed wall-clock time in seconds (rounded to 3 decimals).", + "type": "number" + }, + "found": { + "description": "Whether a candidate password matched the hash.", + "type": "boolean" + }, + "hash": { + "description": "The input hash, echoed back.", + "type": "string" + }, + "password": { + "description": "The recovered plaintext password, or null when not found.", + "type": [ + "string", + "null" + ] + }, + "type": { + "description": "Hash algorithm used or detected (\"unknown\" if undetectable).", + "type": "string" + } + }, + "type": "object" +}
- Changed
crypto_hash_identifier4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "hash": { + "description": "The hash string to identify. Must not be blank. Common prefixes (0x), salts, and separators are stripped before length analysis; special formats such as bcrypt or Unix crypt are recognised by their full marker.", + "minLength": 1, + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "hash" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "additional_info": { + "additionalProperties": { + "type": "string" + }, + "description": "Optional notes such as detected salt, mixed case, or unusual length.", + "type": "object" + }, + "character_set": { + "description": "Detected character composition of the hash.", + "properties": { + "primary": { + "description": "Dominant character class (hex_lower, hex_upper, hex_mixed, base64, base58, numeric, alphanumeric, or unknown).", + "type": "string" + }, + "sets": { + "additionalProperties": { + "type": "boolean" + }, + "description": "Boolean flags for each tested character class (hex_lower, hex_upper, hex_mixed, base64, base58, numeric, alphanumeric, has_special).", + "type": "object" + } + }, + "type": "object" + }, + "cleaned_hash": { + "description": "The hash after stripping prefixes, separators, and salt, used for length and charset analysis.", + "type": "string" + }, + "confidence": { + "description": "Overall confidence summary for the identification.", + "properties": { + "factors": { + "description": "Factors that raised or lowered confidence.", + "items": { + "type": "string" + }, + "type": "array" + }, + "match_count": { + "description": "Number of candidate algorithms found.", + "type": "integer" + }, + "overall": { + "description": "Overall confidence score (0 to 100).", + "type": "integer" + }, + "reasoning": { + "description": "Explanation present only when no algorithm matched.", + "type": "string" + } + }, + "type": "object" + }, + "input": { + "description": "The original hash string as submitted, trimmed.", + "type": "string" + }, + "length": { + "description": "Character length of the cleaned hash.", + "type": "integer" + }, + "most_likely": { + "description": "The highest-confidence candidate, or null when no algorithm matches.", + "properties": { + "charset": { + "description": "Character classes consistent with the top candidate.", + "items": { + "type": "string" + }, + "type": "array" + }, + "confidence": { + "description": "Confidence score of the top candidate (0 to 100).", + "type": "integer" + }, + "description": { + "description": "Short note about the top candidate.", + "type": "string" + }, + "name": { + "description": "Algorithm name of the top candidate.", + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "possible_algorithms": { + "description": "Candidate algorithms matching the length and charset, sorted by descending confidence.", + "items": { + "properties": { + "charset": { + "description": "Character classes consistent with this algorithm.", + "items": { + "type": "string" + }, + "type": "array" + }, + "confidence": { + "description": "Heuristic confidence for this candidate (0 to 100).", + "type": "integer" + }, + "description": { + "description": "Short human-readable note about the algorithm.", + "type": "string" + }, + "name": { + "description": "Algorithm name (for example MD5, SHA-256, NTLM, bcrypt).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
crypto_hmac16 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / algorithm / defaultAdded value: +"sha256" - added
Input schema / properties / algorithm / descriptionAdded value: +"HMAC hash algorithm. Defaults to sha256." - added
Input schema / properties / algorithm / enumAdded value: +[ + "md5", + "sha1", + "sha224", + "sha256", + "sha384", + "sha512", + "sha3-224", + "sha3-256", + "sha3-384", + "sha3-512", + "ripemd160" +] - added
Input schema / properties / key / descriptionAdded value: +"The secret key. Decoded per keyFormat (text/hex/base64); never stored or logged." - added
Input schema / properties / key / examplesAdded value: +[ + "my-secret-key" +] - added
Input schema / properties / keyFormat / defaultAdded value: +"text" - added
Input schema / properties / keyFormat / descriptionAdded value: +"How to decode the key string into bytes: UTF-8 text, hex, or base64." - added
Input schema / properties / keyFormat / enumAdded value: +[ + "text", + "hex", + "base64" +] - added
Input schema / properties / outputFormat / defaultAdded value: +"hex" - added
Input schema / properties / outputFormat / descriptionAdded value: +"Encoding of the returned hmac field. binary yields a 0x-prefixed hex string." - added
Input schema / properties / outputFormat / enumAdded value: +[ + "hex", + "base64", + "base64url", + "binary" +] - added
Input schema / properties / text / descriptionAdded value: +"The message to authenticate. Interpreted as UTF-8 text." - added
Input schema / properties / text / examplesAdded value: +[ + "The quick brown fox" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "key", - "keyFormat", - "algorithm", - "outputFormat" -]New value: +[ + "text", + "key" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "algorithm": { + "description": "The algorithm id used (e.g. sha256).", + "type": "string" + }, + "algorithmName": { + "description": "Human-readable algorithm name (e.g. SHA256).", + "type": "string" + }, + "formats": { + "description": "The HMAC pre-rendered in every text encoding.", + "properties": { + "base64": { + "description": "Standard base64 HMAC.", + "type": "string" + }, + "base64url": { + "description": "URL-safe base64 HMAC, unpadded.", + "type": "string" + }, + "hex": { + "description": "Lowercase hexadecimal HMAC.", + "type": "string" + } + }, + "type": "object" + }, + "hmac": { + "description": "The HMAC encoded per outputFormat.", + "type": "string" + }, + "key": { + "description": "The input key, echoed back.", + "type": "string" + }, + "length": { + "description": "HMAC length in bits.", + "type": "integer" + }, + "outputFormat": { + "description": "The output encoding that was applied.", + "type": "string" + }, + "text": { + "description": "The input message, echoed back.", + "type": "string" + } + }, + "type": "object" +}
- Changed
crypto_keccak_generator3 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "input": { + "default": "", + "description": "Message to hash, interpreted per inputFormat. The empty string is valid and hashes the zero-length input.", + "type": "string" + }, + "inputFormat": { + "default": "text", + "description": "How to decode input into bytes before hashing: UTF-8 text, hexadecimal, or base64.", + "enum": [ + "text", + "hex", + "base64" + ], + "type": "string" + }, + "variant": { + "default": "keccak-256", + "description": "Keccak bit length to compute. Defaults to keccak-256 (the Ethereum variant).", + "enum": [ + "keccak-224", + "keccak-256", + "keccak-384", + "keccak-512" + ], + "type": "string" + } +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "applications": { + "description": "Typical use cases for the chosen variant.", + "items": { + "type": "string" + }, + "type": "array" + }, + "description": { + "description": "Short description of the chosen variant.", + "type": "string" + }, + "differences": { + "description": "One-line note on the padding difference from the matching SHA-3 variant.", + "type": "string" + }, + "digest": { + "description": "The Keccak digest as lowercase hex.", + "type": "string" + }, + "hash": { + "description": "Alias of digest (same lowercase hex string).", + "type": "string" + }, + "hashLength": { + "description": "Length of the hex digest string in characters.", + "type": "integer" + }, + "implementations": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of real-world Keccak usage notes (Ethereum, Bitcoin, Monero, academic).", + "type": "object" + }, + "input": { + "description": "The submitted message, echoed back.", + "type": "string" + }, + "inputFormat": { + "description": "Resolved input encoding (text, hex, or base64).", + "type": "string" + }, + "notice": { + "description": "Notice that this computes original Keccak using pre-standard SHA-3 padding.", + "type": "string" + }, + "outputSize": { + "description": "Human-readable output size, for example 256 bits (32 bytes).", + "type": "string" + }, + "securityLevel": { + "description": "Approximate security level, for example 128-bit security.", + "type": "string" + }, + "technicalDifferences": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of Keccak-vs-SHA3 technical differences (padding, standardization, domain separation, capacity).", + "type": "object" + }, + "variant": { + "description": "Resolved Keccak variant in upper case, for example KECCAK-256.", + "type": "string" + } + }, + "type": "object" +}
- Changed
crypto_mysql_password_generator4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "password": { + "description": "Plaintext password to hash. Required and non-empty.", + "examples": [ + "s3cret" + ], + "minLength": 1, + "type": "string" + }, + "version": { + "default": "mysql57", + "description": "Target MySQL format. mysql41/5/55/56/57 produce the SHA1(SHA1()) PASSWORD() hash; mysql80/mysql8 produce a salted caching_sha2_password hash; old_mysql/mysql323 produce the deprecated, insecure pre-4.1 hash.", + "enum": [ + "mysql41", + "mysql5", + "mysql55", + "mysql56", + "mysql57", + "mysql80", + "mysql8", + "old_mysql", + "mysql323" + ], + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "password" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "algorithm": { + "description": "Hash algorithm, e.g. SHA1(SHA1(password)) or PBKDF2-SHA256.", + "type": "string" + }, + "format": { + "description": "Description of the output encoding/format.", + "type": "string" + }, + "hash": { + "description": "The MySQL-format password hash (e.g. *HEX, or $A$005$... for 8.0).", + "type": "string" + }, + "iterations": { + "description": "PBKDF2 iteration count (caching_sha2_password / mysql80 only).", + "type": "integer" + }, + "original": { + "description": "The plaintext password, echoed back.", + "type": "string" + }, + "salt": { + "description": "Base64 random salt used (caching_sha2_password / mysql80 only).", + "type": "string" + }, + "version": { + "description": "Human-readable label of the MySQL format used.", + "type": "string" + }, + "warning": { + "description": "Present only for deprecated old_mysql/mysql323 formats.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
crypto_ntlm4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "includeHash": { + "default": true, + "description": "Include the NTLM (NT) hash in the result.", + "type": "boolean" + }, + "includeLm": { + "default": false, + "description": "Include the legacy LM hash; fails if the runtime has DES disabled, and truncates the password to 14 characters.", + "type": "boolean" + }, + "outputFormat": { + "default": "hex", + "description": "Hex case of the returned hash strings; hex/lower/lowercase emit lowercase, upper/uppercase emit uppercase.", + "enum": [ + "hex", + "lower", + "lowercase", + "upper", + "uppercase" + ], + "type": "string" + }, + "password": { + "description": "Plaintext password to hash. UTF-16LE-encoded for NTLM; upper-cased and truncated to 14 characters for LM.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "password" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "algorithms_used": { + "description": "Algorithm keys present in hashes (e.g. ntlm, lm).", + "items": { + "type": "string" + }, + "type": "array" + }, + "hashes": { + "description": "Computed hashes, keyed by algorithm; only requested algorithms are present.", + "properties": { + "lm": { + "description": "LM (LAN Manager) hash: DES of the KGS constant per 7-byte password half.", + "type": "string" + }, + "ntlm": { + "description": "NTLM (NT) hash: MD4 of the UTF-16LE password.", + "type": "string" + } + }, + "type": "object" + }, + "output_format": { + "description": "The output format that was applied.", + "type": "string" + }, + "password_info": { + "description": "Analysis of the submitted password.", + "properties": { + "complexity": { + "description": "Character-class breakdown plus a 0-100 score and strength level.", + "properties": { + "has_digits": { + "description": "Contains a digit.", + "type": "boolean" + }, + "has_lowercase": { + "description": "Contains a lowercase letter.", + "type": "boolean" + }, + "has_special": { + "description": "Contains a non-alphanumeric character.", + "type": "boolean" + }, + "has_uppercase": { + "description": "Contains an uppercase letter.", + "type": "boolean" + }, + "length": { + "description": "Byte length of the password.", + "type": "integer" + }, + "level": { + "description": "Strength label: very_weak, weak, moderate, or strong.", + "type": "string" + }, + "score": { + "description": "Complexity score from 0 to 100.", + "type": "integer" + } + }, + "type": "object" + }, + "has_unicode": { + "description": "Whether the password contains non-ASCII characters.", + "type": "boolean" + }, + "password_length": { + "description": "Byte length of the submitted password.", + "type": "integer" + }, + "warnings": { + "description": "Security warnings about the password and LM usage.", + "items": { + "properties": { + "message": { + "description": "Human-readable advisory text.", + "type": "string" + }, + "type": { + "description": "Severity: critical, warning, or info.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
crypto_password_generator22 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / customCharsetAdded value: +{ + "default": null, + "description": "When set, overrides all include* options and draws every character from this exact string instead.", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / excludeAmbiguousAdded value: +{ + "default": false, + "description": "Remove ambiguous punctuation ({}[]()/\\'\"`~,;.<>) from the character set.", + "type": "boolean" +} - added
Input schema / properties / excludeSimilar / defaultAdded value: +false - added
Input schema / properties / excludeSimilar / descriptionAdded value: +"Remove look-alike characters (0, O, 1, l, I) from the character set to improve readability." - added
Input schema / properties / includeLowercase / defaultAdded value: +true - added
Input schema / properties / includeLowercase / descriptionAdded value: +"Include lowercase letters a-z in the character set." - added
Input schema / properties / includeNumbers / defaultAdded value: +true - added
Input schema / properties / includeNumbers / descriptionAdded value: +"Include digits 0-9 in the character set." - added
Input schema / properties / includeSymbols / defaultAdded value: +false - added
Input schema / properties / includeSymbols / descriptionAdded value: +"Include symbols from !@#$%&*+-=? in the character set." - added
Input schema / properties / includeUppercase / defaultAdded value: +true - added
Input schema / properties / includeUppercase / descriptionAdded value: +"Include uppercase letters A-Z in the character set." - added
Input schema / properties / length / defaultAdded value: +12 - added
Input schema / properties / length / descriptionAdded value: +"Number of characters per password. Clamped to 4-128." - added
Input schema / properties / noRepeatingAdded value: +{ + "default": false, + "description": "When true, no character repeats within a password; length must not exceed the character set size or the request fails.", + "type": "boolean" +} - added
Input schema / properties / pronounceableAdded value: +{ + "default": false, + "description": "When true, generate alternating consonant/vowel syllables for an easier-to-say password; includeNumbers/includeSymbols/ includeUppercase still inject those, and customCharset/ excludeSimilar/excludeAmbiguous/noRepeating do not apply.", + "type": "boolean" +} - added
Input schema / properties / quantity / defaultAdded value: +1 - added
Input schema / properties / quantity / descriptionAdded value: +"How many passwords to generate. Clamped to 1-100." - changed
Input schema / properties / quantity / maximumPrevious value: -50New value: +100 - added
Input schema / requiredAdded value: +[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "charset": { + "description": "The character set the passwords were drawn from.", + "properties": { + "characters": { + "description": "The full character set string used.", + "type": "string" + }, + "size": { + "description": "Number of distinct characters in the set.", + "type": "integer" + } + }, + "type": "object" + }, + "options": { + "description": "The normalized options actually used after clamping defaults.", + "properties": { + "customCharset": { + "description": "Custom character set used, or null.", + "type": [ + "string", + "null" + ] + }, + "excludeAmbiguous": { + "description": "Whether ambiguous punctuation was removed.", + "type": "boolean" + }, + "excludeSimilar": { + "description": "Whether look-alike characters were removed.", + "type": "boolean" + }, + "includeLowercase": { + "description": "Whether lowercase letters were included.", + "type": "boolean" + }, + "includeNumbers": { + "description": "Whether digits were included.", + "type": "boolean" + }, + "includeSymbols": { + "description": "Whether symbols were included.", + "type": "boolean" + }, + "includeUppercase": { + "description": "Whether uppercase letters were included.", + "type": "boolean" + }, + "length": { + "description": "Effective character length applied.", + "type": "integer" + }, + "noRepeating": { + "description": "Whether repeated characters were disallowed.", + "type": "boolean" + }, + "pronounceable": { + "description": "Whether pronounceable mode was used.", + "type": "boolean" + }, + "quantity": { + "description": "Number of passwords generated.", + "type": "integer" + } + }, + "type": "object" + }, + "passwords": { + "description": "The generated passwords, one entry per requested quantity.", + "items": { + "properties": { + "entropy": { + "description": "Estimated password entropy in bits, based on the character set size and length.", + "type": "number" + }, + "length": { + "description": "Character length of this password.", + "type": "integer" + }, + "password": { + "description": "The generated password string.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
crypto_password_generator_passphrase19 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / capitalizeAdded value: +{ + "default": false, + "description": "When true, the first letter of each word is uppercased.", + "type": "boolean" +} - removed
Input schema / properties / excludeSimilarRemoved value: -{ - "type": "boolean" -} - removed
Input schema / properties / includeLowercaseRemoved value: -{ - "type": "boolean" -} - added
Input schema / properties / includeNumbers / defaultAdded value: +false - added
Input schema / properties / includeNumbers / descriptionAdded value: +"When true, a random number (10-9999) is appended to the end of the passphrase." - added
Input schema / properties / includeSymbols / defaultAdded value: +false - added
Input schema / properties / includeSymbols / descriptionAdded value: +"When true, one random symbol from !@#$%&* is appended to the end of the passphrase." - removed
Input schema / properties / includeUppercaseRemoved value: -{ - "type": "boolean" -} - removed
Input schema / properties / lengthRemoved value: -{ - "type": "integer" -} - added
Input schema / properties / quantity / defaultAdded value: +1 - added
Input schema / properties / quantity / descriptionAdded value: +"How many passphrases to generate. Clamped to 1-50." - added
Input schema / properties / quantity / maximumAdded value: +50 - added
Input schema / properties / quantity / minimumAdded value: +1 - added
Input schema / properties / separatorAdded value: +{ + "default": "-", + "description": "String placed between words. Any string is allowed; pass an empty string to concatenate words with no separator.", + "type": "string" +} - added
Input schema / properties / wordCountAdded value: +{ + "default": 4, + "description": "Number of words per passphrase. Clamped to 3-10.", + "maximum": 10, + "minimum": 3, + "type": "integer" +} - added
Input schema / properties / wordListAdded value: +{ + "default": "common", + "description": "Source word list. \"common\" is 64 five-to-six-letter words; \"simple\" is 40 short three-to-four-letter words. An unknown value falls back to \"common\".", + "enum": [ + "common", + "simple" + ], + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "length", - "includeUppercase", - "includeLowercase", - "includeNumbers", - "includeSymbols", - "excludeSimilar", - "quantity" -]New value: +[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "The normalized options actually used after clamping defaults.", + "properties": { + "capitalize": { + "description": "Whether each word was capitalized.", + "type": "boolean" + }, + "includeNumbers": { + "description": "Whether a trailing number was appended.", + "type": "boolean" + }, + "includeSymbols": { + "description": "Whether a trailing symbol was appended.", + "type": "boolean" + }, + "quantity": { + "description": "Number of passphrases generated.", + "type": "integer" + }, + "separator": { + "description": "Separator string applied between words.", + "type": "string" + }, + "wordCount": { + "description": "Effective word count applied.", + "type": "integer" + }, + "wordList": { + "description": "Word list source actually used.", + "type": "string" + } + }, + "type": "object" + }, + "passphrases": { + "description": "The generated passphrases, one entry per requested quantity.", + "items": { + "properties": { + "length": { + "description": "Character length of the full passphrase string.", + "type": "integer" + }, + "passphrase": { + "description": "The full passphrase string, including any appended number or symbol.", + "type": "string" + }, + "wordCount": { + "description": "Number of words used in this passphrase.", + "type": "integer" + }, + "words": { + "description": "The component words chosen for this passphrase, in order.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
crypto_password_generator_pin18 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / excludeSimilarRemoved value: -{ - "type": "boolean" -} - removed
Input schema / properties / includeLowercaseRemoved value: -{ - "type": "boolean" -} - removed
Input schema / properties / includeNumbersRemoved value: -{ - "type": "boolean" -} - removed
Input schema / properties / includeSymbolsRemoved value: -{ - "type": "boolean" -} - removed
Input schema / properties / includeUppercaseRemoved value: -{ - "type": "boolean" -} - added
Input schema / properties / length / defaultAdded value: +4 - added
Input schema / properties / length / descriptionAdded value: +"Number of digits per PIN. Clamped to 4-20. When noRepeating is true, an effective length above 10 is rejected (only 10 unique digits exist)." - added
Input schema / properties / length / maximumAdded value: +20 - added
Input schema / properties / length / minimumAdded value: +4 - added
Input schema / properties / noRepeatingAdded value: +{ + "default": false, + "description": "When true, no digit repeats within a PIN; this caps the usable length at 10.", + "type": "boolean" +} - added
Input schema / properties / noSequentialAdded value: +{ + "default": false, + "description": "When true, consecutive digits never differ by exactly 1 (e.g. avoids 12, 65), reducing easily-guessed runs.", + "type": "boolean" +} - added
Input schema / properties / quantity / defaultAdded value: +1 - added
Input schema / properties / quantity / descriptionAdded value: +"How many PINs to generate. Clamped to 1-100." - added
Input schema / properties / quantity / maximumAdded value: +100 - added
Input schema / properties / quantity / minimumAdded value: +1 - changed
Input schema / requiredPrevious value: -[ - "length", - "includeUppercase", - "includeLowercase", - "includeNumbers", - "includeSymbols", - "excludeSimilar", - "quantity" -]New value: +[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "The normalized options actually used after clamping defaults.", + "properties": { + "length": { + "description": "Effective digit length applied.", + "type": "integer" + }, + "noRepeating": { + "description": "Whether repeated digits were disallowed.", + "type": "boolean" + }, + "noSequential": { + "description": "Whether consecutive ±1 digits were disallowed.", + "type": "boolean" + }, + "quantity": { + "description": "Number of PINs generated.", + "type": "integer" + } + }, + "type": "object" + }, + "pins": { + "description": "The generated PINs, one entry per requested quantity.", + "items": { + "properties": { + "length": { + "description": "Number of digits in this PIN.", + "type": "integer" + }, + "pin": { + "description": "The generated numeric PIN string (digits 0-9).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
crypto_password_strength10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / commonWords / defaultAdded value: +[] - added
Input schema / properties / commonWords / descriptionAdded value: +"Optional context words (site name, real name); each word longer than 3 chars found in the password lowers the score." - added
Input schema / properties / password / descriptionAdded value: +"The password to analyse. Required; an empty string scores 0." - added
Input schema / properties / password / examplesAdded value: +[ + "Tr0ub4dour&3" +] - added
Input schema / properties / username / defaultAdded value: +null - added
Input schema / properties / username / descriptionAdded value: +"Optional account username; if the password contains it (case-insensitive) the score is reduced." - changed
Input schema / properties / username / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / requiredPrevious value: -[ - "password", - "username", - "commonWords" -]New value: +[ + "password" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "crackTime": { + "description": "Estimated offline crack time.", + "properties": { + "time": { + "description": "Magnitude, or 'Instant'/'billions of'.", + "type": [ + "string", + "number" + ] + }, + "unit": { + "description": "Unit, e.g. 'seconds', 'years' (empty for Instant).", + "type": "string" + } + }, + "type": "object" + }, + "details": { + "description": "Character-class breakdown.", + "properties": { + "hasLowercase": { + "description": "1 if lowercase present, else 0.", + "type": "integer" + }, + "hasNumbers": { + "description": "1 if digits present, else 0.", + "type": "integer" + }, + "hasSpecial": { + "description": "1 if special chars present, else 0.", + "type": "integer" + }, + "hasUppercase": { + "description": "1 if uppercase present, else 0.", + "type": "integer" + }, + "isCommon": { + "description": "True if it matches the built-in common-password list.", + "type": "boolean" + }, + "varietyCount": { + "description": "Count of distinct character classes (0-4).", + "type": "integer" + } + }, + "type": "object" + }, + "entropy": { + "description": "Shannon entropy in bits, rounded to 2 dp.", + "type": "number" + }, + "feedback": { + "description": "Warnings and improvement suggestions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "length": { + "description": "Password length in bytes.", + "type": "integer" + }, + "positives": { + "description": "Strengths detected in the password.", + "items": { + "type": "string" + }, + "type": "array" + }, + "score": { + "description": "Strength score, 0 (weak) to 100 (strong).", + "type": "integer" + }, + "strength": { + "description": "Label: Very Weak, Weak, Fair, Good, or Strong.", + "type": "string" + }, + "strengthClass": { + "description": "CSS colour class for the label.", + "type": "string" + } + }, + "type": "object" +}
- Changed
crypto_password_strength_bulk7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / commonWordsRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - removed
Input schema / properties / passwordRemoved value: -{ - "type": "string" -} - added
Input schema / properties / passwordsAdded value: +{ + "description": "The passwords to analyse, in order. Results are returned in the same order. An empty string scores 0.", + "examples": [ + [ + "Tr0ub4dour&3", + "password123", + "correct horse battery staple" + ] + ], + "items": { + "type": "string" + }, + "type": "array" +} - removed
Input schema / properties / usernameRemoved value: -{ - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "password", - "username", - "commonWords" -]New value: +[ + "passwords" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "results": { + "description": "Per-password analyses, aligned to the input order.", + "items": { + "properties": { + "crackTime": { + "description": "Estimated offline crack time.", + "properties": { + "time": { + "description": "Magnitude, or 'Instant'/'billions of'.", + "type": [ + "string", + "number" + ] + }, + "unit": { + "description": "Unit, e.g. 'seconds', 'years' (empty for Instant).", + "type": "string" + } + }, + "type": "object" + }, + "details": { + "description": "Character-class breakdown.", + "properties": { + "hasLowercase": { + "description": "1 if lowercase present, else 0.", + "type": "integer" + }, + "hasNumbers": { + "description": "1 if digits present, else 0.", + "type": "integer" + }, + "hasSpecial": { + "description": "1 if special chars present, else 0.", + "type": "integer" + }, + "hasUppercase": { + "description": "1 if uppercase present, else 0.", + "type": "integer" + }, + "isCommon": { + "description": "True if it matches the built-in common-password list.", + "type": "boolean" + }, + "varietyCount": { + "description": "Count of distinct character classes (0-4).", + "type": "integer" + } + }, + "type": "object" + }, + "entropy": { + "description": "Shannon entropy in bits, rounded to 2 dp.", + "type": "number" + }, + "feedback": { + "description": "Warnings and improvement suggestions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "length": { + "description": "Password length in bytes.", + "type": "integer" + }, + "positives": { + "description": "Strengths detected in the password.", + "items": { + "type": "string" + }, + "type": "array" + }, + "score": { + "description": "Strength score, 0 (weak) to 100 (strong).", + "type": "integer" + }, + "strength": { + "description": "Label: Very Weak, Weak, Fair, Good, or Strong.", + "type": "string" + }, + "strengthClass": { + "description": "CSS colour class for the label.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
crypto_pbkdf221 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / algorithm / defaultAdded value: +"sha256" - added
Input schema / properties / algorithm / descriptionAdded value: +"HMAC digest backing the derivation. sha256/sha512 recommended; md5 and sha1 are cryptographically weak." - added
Input schema / properties / algorithm / enumAdded value: +[ + "sha1", + "sha256", + "sha384", + "sha512", + "md5" +] - added
Input schema / properties / iterations / defaultAdded value: +310000 - added
Input schema / properties / iterations / descriptionAdded value: +"Number of PBKDF2 rounds. Higher is slower and stronger." - added
Input schema / properties / iterations / maximumAdded value: +10000000 - added
Input schema / properties / iterations / minimumAdded value: +1000 - added
Input schema / properties / length / defaultAdded value: +32 - added
Input schema / properties / length / descriptionAdded value: +"Derived key length in bytes." - added
Input schema / properties / length / maximumAdded value: +128 - added
Input schema / properties / length / minimumAdded value: +1 - added
Input schema / properties / password / descriptionAdded value: +"The plaintext password (passphrase) to derive a key from. Required and non-empty." - added
Input schema / properties / password / examplesAdded value: +[ + "correct horse battery staple" +] - added
Input schema / properties / salt / descriptionAdded value: +"Optional salt string (8–128 characters). If omitted or empty, a random 16-byte (32 hex char) salt is generated and returned." - added
Input schema / properties / salt / maxLengthAdded value: +128 - added
Input schema / properties / salt / minLengthAdded value: +8 - removed
Input schema / properties / salt / nullableRemoved value: -true - added
Input schema / properties / salt / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "password", - "algorithm", - "iterations", - "length", - "salt" -]New value: +[ + "password" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "algorithm": { + "description": "Resolved digest token: sha1, sha256, sha384, sha512, or md5.", + "type": "string" + }, + "algorithmName": { + "description": "Human-readable algorithm name, e.g. SHA-256.", + "type": "string" + }, + "base64Hash": { + "description": "Derived key encoded as base64.", + "type": "string" + }, + "formattedHash": { + "description": "Passlib-style encoded hash: $pbkdf2-<algorithm>$<iterations>$<salt>$<base64DerivedKey>.", + "type": "string" + }, + "generatedAt": { + "description": "ISO 8601 timestamp of generation.", + "format": "date-time", + "type": "string" + }, + "hash": { + "description": "Derived key encoded as lowercase hex.", + "type": "string" + }, + "iterations": { + "description": "Iteration count used.", + "type": "integer" + }, + "length": { + "description": "Derived key length in bytes.", + "type": "integer" + }, + "password": { + "description": "The plaintext password (echoed from the request).", + "type": "string" + }, + "salt": { + "description": "Salt used (supplied value or the generated 32-hex-char salt).", + "type": "string" + }, + "saltLength": { + "description": "Character length of the salt.", + "type": "integer" + }, + "security": { + "description": "Strength analysis of the chosen parameters.", + "properties": { + "algorithm": { + "description": "Algorithm analyzed.", + "type": "string" + }, + "estimatedTimeMs": { + "description": "Rough estimated derivation time in milliseconds.", + "type": "number" + }, + "iterationRatio": { + "description": "iterations / recommended.", + "type": "number" + }, + "iterations": { + "description": "Iteration count analyzed.", + "type": "integer" + }, + "lengthBytes": { + "description": "Derived key length in bytes.", + "type": "integer" + }, + "level": { + "description": "Rating: Weak, Moderate, Good, High, or Very High.", + "type": "string" + }, + "notes": { + "description": "Advisory notes about the configuration.", + "items": { + "type": "string" + }, + "type": "array" + }, + "recommended": { + "description": "Recommended iterations for this algorithm.", + "type": "integer" + }, + "score": { + "description": "Composite strength score (iteration ratio + length score, /2).", + "type": "number" + } + }, + "type": "object" + }, + "verified": { + "description": "Self-check that the generated formattedHash verifies against the password (always true on success).", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
crypto_pbkdf2_verify10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / algorithmRemoved value: -{ - "type": "string" -} - added
Input schema / properties / hashAdded value: +{ + "description": "The encoded PBKDF2 hash to verify against. Two formats are accepted: the passlib-style string produced by crypto_pbkdf2, $pbkdf2-<algorithm>$<iterations>$<saltHex>$<base64DerivedKey>, or a colon-delimited <algorithm>:<iterations>:<salt>:<derivedKeyHexOrBase64>. The digest algorithm, iteration count, salt, and key length are read from this string to recompute the derivation; no separate algorithm, iterations, length, or salt fields are supplied.", + "examples": [ + "$pbkdf2-sha256$310000$a1b2c3d4e5f6a7b8$Base64DerivedKey==" + ], + "type": "string" +} - removed
Input schema / properties / iterationsRemoved value: -{ - "type": "integer" -} - removed
Input schema / properties / lengthRemoved value: -{ - "type": "integer" -} - added
Input schema / properties / password / descriptionAdded value: +"The plaintext password to test against the hash." - added
Input schema / properties / password / examplesAdded value: +[ + "correct horse battery staple" +] - removed
Input schema / properties / saltRemoved value: -{ - "nullable": true -} - changed
Input schema / requiredPrevious value: -[ - "password", - "algorithm", - "iterations", - "length", - "salt" -]New value: +[ + "password", + "hash" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message when verification fails (e.g. \"Invalid hash format\"). Absent on success.", + "type": "string" + }, + "hash": { + "description": "The encoded hash that was verified against (echoed from the request).", + "type": "string" + }, + "info": { + "description": "Parameters parsed from the hash. Absent when the hash format is invalid.", + "properties": { + "algorithm": { + "description": "Digest algorithm token parsed from the hash: sha1, sha256, sha384, sha512, or md5.", + "type": "string" + }, + "algorithmName": { + "description": "Human-readable algorithm name, e.g. SHA-256; Unknown if unrecognized.", + "type": "string" + }, + "iterations": { + "description": "Iteration count parsed from the hash.", + "type": "integer" + }, + "length": { + "description": "Derived key length in bytes (computed from the decoded digest).", + "type": "integer" + }, + "salt": { + "description": "Salt parsed from the hash.", + "type": "string" + }, + "saltLength": { + "description": "Character length of the parsed salt string.", + "type": "integer" + } + }, + "type": "object" + }, + "password": { + "description": "The plaintext password that was tested (echoed from the request).", + "type": "string" + }, + "security": { + "description": "Strength analysis of the parsed parameters. Absent on error.", + "properties": { + "algorithm": { + "description": "Digest algorithm the metrics were computed for.", + "type": "string" + }, + "estimatedTimeMs": { + "description": "Rough single-derivation time estimate in milliseconds.", + "type": "number" + }, + "iterationRatio": { + "description": "iterations divided by the recommended minimum.", + "type": "number" + }, + "iterations": { + "description": "Iteration count analyzed.", + "type": "integer" + }, + "lengthBytes": { + "description": "Derived key length in bytes.", + "type": "integer" + }, + "level": { + "description": "Qualitative rating: Weak, Moderate, Good, High, or Very High.", + "type": "string" + }, + "notes": { + "description": "Advisory notes about weak or deprecated parameters.", + "items": { + "type": "string" + }, + "type": "array" + }, + "recommended": { + "description": "Recommended minimum iterations for this algorithm.", + "type": "integer" + }, + "score": { + "description": "Numeric strength score (rounded to 2 decimals).", + "type": "number" + } + }, + "type": "object" + }, + "verified": { + "description": "True when the recomputed derivation matches the digest in the supplied hash.", + "type": "boolean" + }, + "verifiedAt": { + "description": "ISO 8601 timestamp of when verification ran. Absent on error.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
crypto_postgresql_password_generator4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "password": { + "description": "Plaintext password to hash. Required and non-empty.", + "minLength": 1, + "type": "string" + }, + "username": { + "default": "postgres", + "description": "Role name mixed into the md5 hash (md5 is MD5 of password plus username). Defaults to postgres.", + "type": "string" + }, + "version": { + "default": "md5", + "description": "Target format. md5 produces the legacy md5-prefixed hash (PostgreSQL under 10); scram_sha256 produces a salted SCRAM-SHA-256 verifier (PostgreSQL 10 and later); plain returns the unencrypted password (HIGHLY INSECURE); crypt produces a Unix MD5 modular-crypt hash.", + "enum": [ + "md5", + "scram_sha256", + "plain", + "crypt" + ], + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "password" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "algorithm": { + "description": "Hash algorithm used, for example MD5 of password plus username, or SCRAM-SHA-256.", + "type": "string" + }, + "format": { + "description": "Description of the output encoding format.", + "type": "string" + }, + "hash": { + "description": "The PostgreSQL-format password hash or verifier.", + "type": "string" + }, + "iterations": { + "description": "PBKDF2 iteration count (scram_sha256 only).", + "type": "integer" + }, + "original": { + "description": "The plaintext password, echoed back.", + "type": "string" + }, + "salt": { + "description": "Salt used (scram_sha256 base64 salt, or crypt modular-crypt salt).", + "type": "string" + }, + "username": { + "description": "The role name used (relevant for the md5 format).", + "type": "string" + }, + "version": { + "description": "Human-readable label of the format used.", + "type": "string" + }, + "warning": { + "description": "Present only for the plain format, warning the password is unencrypted.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
crypto_ripemd12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / algorithms / defaultAdded value: +[ + "ripemd160" +] - added
Input schema / properties / algorithms / descriptionAdded value: +"RIPEMD variants to compute, one digest each. At least one required; unknown values are rejected." - added
Input schema / properties / algorithms / items / enumAdded value: +[ + "ripemd128", + "ripemd160", + "ripemd256", + "ripemd320" +] - added
Input schema / properties / algorithms / minItemsAdded value: +1 - added
Input schema / properties / outputFormat / defaultAdded value: +"hex" - added
Input schema / properties / outputFormat / descriptionAdded value: +"Encoding of each hashes value: lowercase hex, uppercase HEX, standard base64, or URL-safe base64url. hex/base64/base64url are always also returned under formats regardless of this choice." - added
Input schema / properties / outputFormat / enumAdded value: +[ + "hex", + "HEX", + "base64", + "base64url" +] - added
Input schema / properties / text / descriptionAdded value: +"Text to hash, encoded as UTF-8 before digesting. The empty string is valid (RIPEMD-160 of the empty string is 9c1185a5c5e9fc54612808977ee8f548b2258d31)." - added
Input schema / properties / text / examplesAdded value: +[ + "hello" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "algorithms", - "outputFormat" -]New value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "hashes": { + "additionalProperties": { + "properties": { + "formats": { + "description": "Same digest in all encodings.", + "properties": { + "base64": { + "description": "Standard base64 digest.", + "type": "string" + }, + "base64url": { + "description": "URL-safe base64 digest, no padding.", + "type": "string" + }, + "hex": { + "description": "Lowercase hex digest.", + "type": "string" + } + }, + "type": "object" + }, + "length": { + "description": "Digest length in bits (128/160/256/320).", + "type": "integer" + }, + "name": { + "description": "Human variant name, e.g. RIPEMD-160.", + "type": "string" + }, + "value": { + "description": "Digest rendered in outputFormat.", + "type": "string" + } + }, + "type": "object" + }, + "description": "Map keyed by variant id (e.g. ripemd160) to that variant digest.", + "type": "object" + }, + "outputFormat": { + "description": "The output format applied to each value.", + "type": "string" + }, + "text": { + "description": "The input text, echoed back.", + "type": "string" + }, + "timestamp": { + "description": "Unix epoch seconds when the response was generated.", + "type": "integer" + } + }, + "type": "object" +}
- Changed
crypto_scrypt23 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / N / defaultAdded value: +32768 - added
Input schema / properties / N / descriptionAdded value: +"CPU/memory cost factor; must be a power of 2 between 2 and 1048576. Higher values increase both time and memory cost (32768 or above recommended)." - added
Input schema / properties / N / maximumAdded value: +1048576 - added
Input schema / properties / N / minimumAdded value: +2 - added
Input schema / properties / length / defaultAdded value: +32 - added
Input schema / properties / length / descriptionAdded value: +"Derived key length in bytes (16 to 128)." - added
Input schema / properties / length / maximumAdded value: +128 - added
Input schema / properties / length / minimumAdded value: +16 - added
Input schema / properties / p / defaultAdded value: +1 - added
Input schema / properties / p / descriptionAdded value: +"Parallelization factor (1 to 256); number of independent mixing operations." - added
Input schema / properties / p / maximumAdded value: +256 - added
Input schema / properties / p / minimumAdded value: +1 - added
Input schema / properties / password / descriptionAdded value: +"The plaintext password to derive the scrypt hash from. Required and must be non-empty." - added
Input schema / properties / r / defaultAdded value: +8 - added
Input schema / properties / r / descriptionAdded value: +"Block-size factor (1 to 256); scales memory usage. 8 is the standard value." - added
Input schema / properties / r / maximumAdded value: +256 - added
Input schema / properties / r / minimumAdded value: +1 - added
Input schema / properties / salt / descriptionAdded value: +"Optional salt as a hexadecimal string (even number of hex digits). When omitted or empty, a random 16-byte salt is generated, making output non-deterministic." - removed
Input schema / properties / salt / nullableRemoved value: -true - added
Input schema / properties / salt / typeAdded value: +[ + "string", + "null" +] - changed
Input schema / requiredPrevious value: -[ - "password", - "N", - "r", - "p", - "length", - "salt" -]New value: +[ + "password" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "algorithm": { + "description": "Algorithm identifier; always scrypt.", + "type": "string" + }, + "base64Hash": { + "description": "Derived key encoded as base64.", + "type": "string" + }, + "formattedHash": { + "description": "Encoded hash string in the format $scrypt$N=<N>,r=<r>,p=<p>$<saltHex>$<base64DerivedKey>, accepted by crypto_scrypt_verify.", + "type": "string" + }, + "hash": { + "description": "Derived key encoded as a hexadecimal string.", + "type": "string" + }, + "parameters": { + "description": "The cost parameters used for the derivation.", + "properties": { + "N": { + "description": "CPU/memory cost factor used.", + "type": "integer" + }, + "length": { + "description": "Derived key length in bytes used.", + "type": "integer" + }, + "p": { + "description": "Parallelization factor used.", + "type": "integer" + }, + "r": { + "description": "Block-size factor used.", + "type": "integer" + } + }, + "type": "object" + }, + "salt": { + "description": "Salt used for the derivation, in hexadecimal (random when none supplied).", + "type": "string" + }, + "saltLength": { + "description": "Length of the hex salt string.", + "type": "integer" + }, + "security": { + "description": "Strength analysis of the chosen parameters.", + "properties": { + "estimatedTimeMs": { + "description": "Rough derivation time estimate in milliseconds.", + "type": "number" + }, + "level": { + "description": "Qualitative rating: Very Low, Low, Moderate, High, or Very High.", + "type": "string" + }, + "maxScore": { + "description": "Maximum possible score (3.0).", + "type": "number" + }, + "memoryUsageKB": { + "description": "Estimated memory use in KB.", + "type": "number" + }, + "memoryUsageMB": { + "description": "Estimated memory use in MB.", + "type": "number" + }, + "notes": { + "description": "Advisory notes about weak parameters.", + "items": { + "type": "string" + }, + "type": "array" + }, + "score": { + "description": "Numeric strength score.", + "type": "number" + }, + "totalOperations": { + "description": "The N times r times p work factor.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
crypto_scrypt_verify11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / NRemoved value: -{ - "type": "integer" -} - added
Input schema / properties / hashAdded value: +{ + "description": "The encoded scrypt hash to verify against, in the format produced by crypto_scrypt: $scrypt$N=<N>,r=<r>,p=<p>$<saltHex>$<base64DerivedKey>. The N, r, p, and salt are read from this string to recompute the derivation and compare it against the supplied password.", + "examples": [ + "$scrypt$N=32768,r=8,p=1$a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6$Base64DerivedKey==" + ], + "type": "string" +} - removed
Input schema / properties / lengthRemoved value: -{ - "type": "integer" -} - removed
Input schema / properties / pRemoved value: -{ - "type": "integer" -} - added
Input schema / properties / password / descriptionAdded value: +"The plaintext password to test against the hash." - added
Input schema / properties / password / examplesAdded value: +[ + "correct horse battery staple" +] - removed
Input schema / properties / rRemoved value: -{ - "type": "integer" -} - removed
Input schema / properties / saltRemoved value: -{ - "nullable": true -} - changed
Input schema / requiredPrevious value: -[ - "password", - "N", - "r", - "p", - "length", - "salt" -]New value: +[ + "password", + "hash" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message when verification fails (e.g. invalid hash format); null on success.", + "type": [ + "string", + "null" + ] + }, + "info": { + "description": "Parameters parsed from the hash; null when the hash format is invalid.", + "properties": { + "N": { + "description": "CPU/memory cost factor (a power of 2).", + "type": "integer" + }, + "length": { + "description": "Derived key length in bytes.", + "type": "integer" + }, + "p": { + "description": "Parallelization factor.", + "type": "integer" + }, + "r": { + "description": "Block-size factor.", + "type": "integer" + }, + "salt": { + "description": "Salt parsed from the hash, in hexadecimal.", + "type": "string" + }, + "saltLength": { + "description": "Length of the hex salt string.", + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "security": { + "description": "Strength analysis of the parsed parameters; null on error.", + "properties": { + "estimatedTimeMs": { + "description": "Rough derivation time estimate in milliseconds.", + "type": "number" + }, + "level": { + "description": "Qualitative rating: Very Low, Low, Moderate, High, or Very High.", + "type": "string" + }, + "maxScore": { + "description": "Maximum possible score (3.0).", + "type": "number" + }, + "memoryUsageKB": { + "description": "Estimated memory use in KB.", + "type": "number" + }, + "memoryUsageMB": { + "description": "Estimated memory use in MB.", + "type": "number" + }, + "notes": { + "description": "Advisory notes about weak parameters.", + "items": { + "type": "string" + }, + "type": "array" + }, + "score": { + "description": "Numeric strength score.", + "type": "number" + }, + "totalOperations": { + "description": "The N * r * p work factor.", + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "verified": { + "description": "True when the password matches the supplied hash.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
crypto_sha3_generator4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "algorithm": { + "default": "sha3-256", + "description": "SHA3 variant determining digest width (224, 256, 384, or 512 bits). Case-insensitive.", + "enum": [ + "sha3-224", + "sha3-256", + "sha3-384", + "sha3-512" + ], + "type": "string" + }, + "input": { + "description": "Data to hash, interpreted per inputFormat (plaintext, hex, or Base64). Empty string hashes to the variant fixed-empty digest.", + "type": "string" + }, + "inputFormat": { + "default": "text", + "description": "How to decode input before hashing. hex requires even-length valid hex; base64 requires a valid Base64 string.", + "enum": [ + "text", + "hex", + "base64" + ], + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "input" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "algorithm": { + "description": "The variant used, uppercased (such as SHA3-256).", + "type": "string" + }, + "description": { + "description": "Human-readable summary of the variant.", + "type": "string" + }, + "hash": { + "description": "Lowercase hexadecimal digest.", + "type": "string" + }, + "hashLength": { + "description": "Number of hex characters in hash (twice the byte length).", + "type": "integer" + }, + "input": { + "description": "The submitted input, echoed back.", + "type": "string" + }, + "inputFormat": { + "description": "The decoding applied (text, hex, or base64).", + "type": "string" + }, + "outputSize": { + "description": "Digest size in bits and bytes (such as 256 bits / 32 bytes).", + "type": "string" + }, + "securityLevel": { + "description": "Collision-resistance level (such as 128-bit security).", + "type": "string" + }, + "useCases": { + "description": "Typical applications for the variant.", + "items": { + "description": "A typical use case.", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
crypto_uuid19 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / formatting / additionalPropertiesAdded value: +false - added
Input schema / properties / formatting / descriptionAdded value: +"Optional output formatting applied to every generated UUID." - added
Input schema / properties / formatting / properties / braces / defaultAdded value: +false - added
Input schema / properties / formatting / properties / braces / descriptionAdded value: +"Wrap each UUID in curly braces, e.g. {550e8400-...}." - added
Input schema / properties / formatting / properties / hyphens / defaultAdded value: +true - added
Input schema / properties / formatting / properties / hyphens / descriptionAdded value: +"Keep the standard 8-4-4-4-12 hyphens; set false to remove them." - added
Input schema / properties / formatting / properties / uppercase / defaultAdded value: +false - added
Input schema / properties / formatting / properties / uppercase / descriptionAdded value: +"Emit hex digits in uppercase instead of lowercase." - removed
Input schema / properties / formatting / requiredRemoved value: -[ - "hyphens", - "uppercase", - "braces" -] - added
Input schema / properties / quantity / defaultAdded value: +1 - added
Input schema / properties / quantity / descriptionAdded value: +"How many UUIDs to generate, from 1 to 100." - added
Input schema / properties / quantity / maximumAdded value: +100 - added
Input schema / properties / quantity / minimumAdded value: +1 - added
Input schema / properties / version / defaultAdded value: +4 - added
Input schema / properties / version / descriptionAdded value: +"UUID version. 4 = fully random; 1 = time-based (embeds a timestamp and a random node). Only 1 and 4 are supported." - added
Input schema / properties / version / enumAdded value: +[ + 1, + 4 +] - changed
Input schema / requiredPrevious value: -[ - "version", - "quantity", - "formatting" -]New value: +[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "description": "The generation payload.", + "properties": { + "formattedUuids": { + "description": "The UUIDs with the requested formatting (hyphens, case, braces) applied.", + "items": { + "type": "string" + }, + "type": "array" + }, + "quantity": { + "description": "Number of UUIDs returned.", + "type": "integer" + }, + "rawUuids": { + "description": "Canonical lowercase, hyphenated UUID strings.", + "items": { + "type": "string" + }, + "type": "array" + }, + "version": { + "description": "The UUID version generated (1 or 4).", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether generation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
crypto_whirlpool8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / encoding / defaultAdded value: +"text" - added
Input schema / properties / encoding / descriptionAdded value: +"How to interpret text before hashing: text (UTF-8, default), hex (decode hex first; rejected if not valid hex), or base64 (decode base64 first; rejected if invalid)." - added
Input schema / properties / encoding / enumAdded value: +[ + "text", + "hex", + "base64" +] - added
Input schema / properties / text / descriptionAdded value: +"Data to hash. Interpreted according to encoding: as a UTF-8 string when text, or decoded from a hex/base64 string first. The empty string is valid." - added
Input schema / properties / text / examplesAdded value: +[ + "hello" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "encoding" -]New value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "algorithm": { + "description": "Always \"whirlpool\".", + "type": "string" + }, + "encoding": { + "description": "The input encoding that was applied (text, hex, or base64).", + "type": "string" + }, + "hash": { + "description": "Lowercase 128-character hex Whirlpool (512-bit) digest.", + "type": "string" + }, + "length": { + "description": "Digest length in bytes (64).", + "type": "integer" + }, + "truncated": { + "description": "Leading-bit truncations of the hex digest for use as shorter checksums.", + "properties": { + "128": { + "description": "First 128 bits (32 hex chars).", + "type": "string" + }, + "256": { + "description": "First 256 bits (64 hex chars).", + "type": "string" + }, + "384": { + "description": "First 384 bits (96 hex chars).", + "type": "string" + }, + "512": { + "description": "Full 512-bit digest (128 hex chars).", + "type": "string" + } + }, + "type": "object" + }, + "uppercase": { + "description": "The same digest in uppercase hex.", + "type": "string" + } + }, + "type": "object" +}
- Changed
data_data_anonymizer17 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / enable / additionalPropertiesAdded value: +false - added
Input schema / properties / enable / descriptionAdded value: +"Per-type detection toggles; each key defaults to true (detected) when omitted. Set a key to false to skip that PII type." - added
Input schema / properties / enable / properties / cc / descriptionAdded value: +"Detect credit card numbers (Luhn validated)." - added
Input schema / properties / enable / properties / date / descriptionAdded value: +"Detect ISO-8601 dates." - added
Input schema / properties / enable / properties / email / descriptionAdded value: +"Detect email addresses." - added
Input schema / properties / enable / properties / iban / descriptionAdded value: +"Detect IBAN account numbers (mod-97 validated)." - added
Input schema / properties / enable / properties / ip / descriptionAdded value: +"Detect IPv4 and IPv6 addresses." - added
Input schema / properties / enable / properties / phone / descriptionAdded value: +"Detect NANP or E.164 phone numbers." - added
Input schema / properties / enable / properties / ssn / descriptionAdded value: +"Detect US Social Security Numbers." - removed
Input schema / properties / enable / requiredRemoved value: -[ - "email", - "phone", - "ssn", - "iban", - "cc", - "ip", - "date" -] - added
Input schema / properties / mask / defaultAdded value: +"token" - added
Input schema / properties / mask / descriptionAdded value: +"Masking mode. token replaces each match with a bracketed type label; partial redacts the middle and keeps a few leading and trailing characters; counter substitutes per-type sequential ids such as email-1." - added
Input schema / properties / mask / enumAdded value: +[ + "token", + "partial", + "counter" +] - added
Input schema / properties / text / descriptionAdded value: +"Text to scan for PII. Maximum 1000000 characters; longer input is rejected." - changed
Input schema / requiredPrevious value: -[ - "text", - "mask", - "enable" -]New value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "description": "The anonymization output.", + "properties": { + "anonymized": { + "description": "The text with all detected PII replaced.", + "type": "string" + }, + "counts": { + "description": "Count of matches per PII type.", + "properties": { + "cc": { + "description": "Credit card matches.", + "type": "integer" + }, + "date": { + "description": "Date matches.", + "type": "integer" + }, + "email": { + "description": "Email matches.", + "type": "integer" + }, + "iban": { + "description": "IBAN matches.", + "type": "integer" + }, + "ip": { + "description": "IP matches.", + "type": "integer" + }, + "phone": { + "description": "Phone matches.", + "type": "integer" + }, + "ssn": { + "description": "SSN matches.", + "type": "integer" + } + }, + "type": "object" + }, + "mask": { + "description": "The masking mode applied (token, partial, or counter).", + "type": "string" + }, + "replacements": { + "description": "One entry per replaced match, in input order.", + "items": { + "properties": { + "offset": { + "description": "Zero-based start index of the match in the original text.", + "type": "integer" + }, + "original": { + "description": "The matched substring before masking.", + "type": "string" + }, + "replacement": { + "description": "The value it was replaced with.", + "type": "string" + }, + "type": { + "description": "PII type (email, phone, ssn, iban, cc, ip, or date).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "text": { + "description": "The original submitted text, echoed back.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "Whether anonymization succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
data_data_faker12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / count / defaultAdded value: +1 - added
Input schema / properties / count / descriptionAdded value: +"How many values to generate. Integer 1 to 1000; defaults to 1." - added
Input schema / properties / count / maximumAdded value: +1000 - added
Input schema / properties / count / minimumAdded value: +1 - added
Input schema / properties / preset / descriptionAdded value: +"Field preset to generate, namespaced as group.field (e.g. person.fullName, internet.email, finance.iban). Must be one of the 44 enum values." - added
Input schema / properties / preset / enumAdded value: +[ + "person.firstName", + "person.lastName", + "person.fullName", + "person.jobTitle", + "person.gender", + "internet.email", + "internet.username", + "internet.url", + "internet.domain", + "internet.password", + "internet.ipv4", + "internet.ipv6", + "internet.mac", + "address.street", + "address.city", + "address.state", + "address.zip", + "address.country", + "address.countryCode", + "phone.number", + "phone.imei", + "company.name", + "company.catchPhrase", + "company.industry", + "commerce.product", + "commerce.price", + "commerce.color", + "date.past", + "date.future", + "date.weekday", + "date.month", + "lorem.word", + "lorem.sentence", + "lorem.paragraph", + "lorem.slug", + "finance.iban", + "finance.bitcoinAddress", + "finance.creditCardNumber", + "finance.currencyCode", + "system.fileName", + "system.fileExtension", + "system.mimeType", + "system.semver" +] - added
Input schema / properties / seed / descriptionAdded value: +"Optional string seed (max 1024 chars) for reproducible output via a non-cryptographic xoshiro128** generator. Omit or null for cryptographically random values. Never use seeded output for tokens, salts, keys, IVs, or nonces." - added
Input schema / properties / seed / maxLengthAdded value: +1024 - changed
Input schema / properties / seed / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Input schema / requiredPrevious value: -[ - "preset", - "count", - "seed" -]New value: +[ + "preset" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "description": "Number of values returned (matches the requested count on success).", + "type": "integer" + }, + "error": { + "description": "Present only on failure; the validation error message.", + "type": "string" + }, + "preset": { + "description": "The resolved preset that was generated.", + "type": "string" + }, + "success": { + "description": "True when generation succeeded; false on a validation error.", + "type": "boolean" + }, + "values": { + "description": "The generated fake values, one string per requested count.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
data_json_path_evaluator8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / document / descriptionAdded value: +"JSON document to query. Pass either a JSON value (object, array, string, number, boolean, null) or a string of raw JSON, which is parsed before evaluation." - removed
Input schema / properties / document / propertiesRemoved value: -{ - "store": { - "properties": { - "bicycle": { - "properties": { - "color": { - "type": "string" - }, - "price": { - "type": "number" - } - }, - "required": [ - "color", - "price" - ], - "type": "object" - }, - "book": { - "items": { - "properties": { - "author": { - "type": "string" - }, - "category": { - "type": "string" - }, - "price": { - "type": "number" - }, - "title": { - "type": "string" - } - }, - "required": [ - "category", - "author", - "title", - "price" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "book", - "bicycle" - ], - "type": "object" - } -} - removed
Input schema / properties / document / requiredRemoved value: -[ - "store" -] - removed
Input schema / properties / document / typeRemoved value: -"object" - added
Input schema / properties / expression / descriptionAdded value: +"JSONPath query expression. Must be non-empty and start with the root token $ (for example $..book[?(@.price<10)].title)." - added
Input schema / properties / expression / minLengthAdded value: +1 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Always evaluate.", + "type": "string" + }, + "result": { + "description": "The evaluation payload.", + "properties": { + "document": { + "description": "The parsed JSON document the expression was evaluated against, echoed back." + }, + "expression": { + "description": "The JSONPath expression that was evaluated, echoed back.", + "type": "string" + }, + "matchCount": { + "description": "Number of entries in matches.", + "type": "integer" + }, + "matches": { + "description": "Every node matched by the expression, in document order.", + "items": { + "properties": { + "normalisedPath": { + "description": "Match location in RFC 9535 normalised bracket notation, e.g. $['store']['book'][0]['price'].", + "type": "string" + }, + "path": { + "description": "Match location in dot/bracket notation, e.g. $.store.book[0].price.", + "type": "string" + }, + "value": { + "description": "The matched JSON value (any type)." + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether evaluation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
data_json_schema_validator10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / instance / descriptionAdded value: +"JSON document to validate. Accepts a parsed value (object, array, number, boolean, null) or a raw-JSON string, which is parsed when it looks like JSON." - removed
Input schema / properties / instance / propertiesRemoved value: -{ - "age": { - "type": "integer" - }, - "name": { - "type": "string" - } -} - removed
Input schema / properties / instance / requiredRemoved value: -[ - "name", - "age" -] - changed
Input schema / properties / instance / typePrevious value: -"object"New value: +[ + "object", + "array", + "string", + "number", + "boolean", + "null" +] - added
Input schema / properties / schema / descriptionAdded value: +"JSON Schema to validate against, as an object/boolean or a raw-JSON string. Draft is auto-detected from its $schema URI (defaults to Draft 2020-12)." - removed
Input schema / properties / schema / propertiesRemoved value: -{ - "properties": { - "properties": { - "age": { - "properties": { - "type": { - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - }, - "name": { - "properties": { - "type": { - "type": "string" - } - }, - "required": [ - "type" - ], - "type": "object" - } - }, - "required": [ - "name", - "age" - ], - "type": "object" - }, - "required": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": { - "type": "string" - } -} - removed
Input schema / properties / schema / requiredRemoved value: -[ - "type", - "required", - "properties" -] - changed
Input schema / properties / schema / typePrevious value: -"object"New value: +[ + "object", + "string", + "boolean" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Always validate.", + "type": "string" + }, + "result": { + "description": "The validation result payload.", + "properties": { + "errorCount": { + "description": "Number of entries in errors (0 when valid).", + "type": "integer" + }, + "errors": { + "description": "One entry per constraint violation; empty when valid.", + "items": { + "properties": { + "instancePath": { + "description": "JSON Pointer to the offending location in the instance.", + "type": "string" + }, + "keyword": { + "description": "Failing JSON Schema keyword (type, required, enum, pattern, and similar).", + "type": "string" + }, + "message": { + "description": "Human-readable Ajv error message.", + "type": "string" + }, + "params": { + "description": "Keyword-specific detail (allowed values, limits, missing property).", + "type": "object" + }, + "schemaPath": { + "description": "JSON Pointer to the failing keyword in the schema.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "schemaVersion": { + "description": "Detected schema draft label, for example Draft 2020-12.", + "type": "string" + }, + "valid": { + "description": "True when the instance satisfies the schema.", + "type": "boolean" + } + }, + "type": "object" + }, + "success": { + "description": "True when validation ran (independent of whether the instance was valid).", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
data_mock_api_generator28 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / seed / descriptionAdded value: +"Optional seed; when set, record bodies are reproducible (generatedAt still varies). Omit for crypto-random output." - added
Input schema / properties / seed / maxLengthAdded value: +1024 - added
Input schema / properties / template / additionalPropertiesAdded value: +false - added
Input schema / properties / template / descriptionAdded value: +"Schema describing the endpoints to fabricate." - added
Input schema / properties / template / properties / endpoints / descriptionAdded value: +"Endpoints to generate; total records across all endpoints must not exceed 5000." - added
Input schema / properties / template / properties / endpoints / items / additionalPropertiesAdded value: +false - added
Input schema / properties / template / properties / endpoints / items / properties / count / descriptionAdded value: +"Number of records to generate for this endpoint." - added
Input schema / properties / template / properties / endpoints / items / properties / count / maximumAdded value: +1000 - added
Input schema / properties / template / properties / endpoints / items / properties / count / minimumAdded value: +1 - added
Input schema / properties / template / properties / endpoints / items / properties / fields / descriptionAdded value: +"Field specifications for each record; field names must be unique within an endpoint." - added
Input schema / properties / template / properties / endpoints / items / properties / fields / items / additionalPropertiesAdded value: +false - added
Input schema / properties / template / properties / endpoints / items / properties / fields / items / properties / name / descriptionAdded value: +"Output property name for this field." - added
Input schema / properties / template / properties / endpoints / items / properties / fields / items / properties / optionsAdded value: +{ + "description": "Per-type options: integer/float min/max (float adds decimals 0-15), iso_date/iso_datetime from/to (yyyy-mm-dd), enum values (non-empty string array).", + "type": "object" +} - added
Input schema / properties / template / properties / endpoints / items / properties / fields / items / properties / type / descriptionAdded value: +"Generator type for the field value." - added
Input schema / properties / template / properties / endpoints / items / properties / fields / items / properties / type / enumAdded value: +[ + "uuid", + "integer", + "float", + "boolean", + "full_name", + "first_name", + "last_name", + "email", + "phone", + "iso_date", + "iso_datetime", + "sentence", + "paragraph", + "enum" +] - added
Input schema / properties / template / properties / endpoints / items / properties / fields / maxItemsAdded value: +50 - added
Input schema / properties / template / properties / endpoints / items / properties / fields / minItemsAdded value: +1 - added
Input schema / properties / template / properties / endpoints / items / properties / method / defaultAdded value: +"GET" - added
Input schema / properties / template / properties / endpoints / items / properties / method / descriptionAdded value: +"HTTP method for the endpoint." - added
Input schema / properties / template / properties / endpoints / items / properties / method / enumAdded value: +[ + "GET", + "POST", + "PUT", + "PATCH", + "DELETE", + "HEAD", + "OPTIONS" +] - added
Input schema / properties / template / properties / endpoints / items / properties / path / descriptionAdded value: +"Endpoint path, preserved verbatim (e.g. /users or /users/:id). Required, non-empty." - added
Input schema / properties / template / properties / endpoints / items / properties / path / examplesAdded value: +[ + "/users" +] - changed
Input schema / properties / template / properties / endpoints / items / requiredPrevious value: -[ - "path", - "method", - "count", - "fields" -]New value: +[ + "path", + "count", + "fields" +] - added
Input schema / properties / template / properties / endpoints / maxItemsAdded value: +20 - added
Input schema / properties / template / properties / endpoints / minItemsAdded value: +1 - changed
Input schema / requiredPrevious value: -[ - "template", - "seed" -]New value: +[ + "template" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "endpoints": { + "description": "One entry per requested endpoint.", + "items": { + "properties": { + "method": { + "description": "Resolved HTTP method (defaults to GET).", + "type": "string" + }, + "path": { + "description": "The endpoint path, as supplied.", + "type": "string" + }, + "records": { + "description": "Generated records; each is an object keyed by the requested field names.", + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "info": { + "description": "Summary of the generated document.", + "properties": { + "endpointCount": { + "description": "Number of endpoints generated.", + "type": "integer" + }, + "generatedAt": { + "description": "ISO 8601 generation timestamp; varies each call even with a seed.", + "type": "string" + }, + "totalRecords": { + "description": "Total records across all endpoints.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "True when generation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
data_random_data_generator18 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / count / descriptionAdded value: +"Number of records to generate. Required, 1 to 1000." - added
Input schema / properties / count / maximumAdded value: +1000 - added
Input schema / properties / count / minimumAdded value: +1 - added
Input schema / properties / fields / descriptionAdded value: +"Field schema: 1 to 50 field specifications. Each row of output contains one value per field. Field names must be unique." - added
Input schema / properties / fields / items / additionalPropertiesAdded value: +false - added
Input schema / properties / fields / items / properties / name / descriptionAdded value: +"Output column / JSON key for this field. Required, non-empty, must be unique across fields." - added
Input schema / properties / fields / items / properties / optionsAdded value: +{ + "description": "Per-type options. integer uses min (default 0) and max (default 100). float uses min (default 0), max (default 1, must be strictly greater than min), and decimals (0 to 15, default 2). enum requires values (a non-empty array). iso_date/iso_datetime use from and to (yyyy-mm-dd, to must be greater than or equal to from). Ignored by other types.", + "type": "object" +} - added
Input schema / properties / fields / items / properties / type / descriptionAdded value: +"Generator for this field." - added
Input schema / properties / fields / items / properties / type / enumAdded value: +[ + "first_name", + "last_name", + "full_name", + "email", + "phone", + "company", + "street_address", + "city", + "state", + "zip", + "country", + "country_code", + "iso_date", + "iso_datetime", + "uuid", + "integer", + "float", + "boolean", + "word", + "sentence", + "paragraph", + "enum" +] - added
Input schema / properties / fields / maxItemsAdded value: +50 - added
Input schema / properties / fields / minItemsAdded value: +1 - added
Input schema / properties / format / defaultAdded value: +"json" - added
Input schema / properties / format / descriptionAdded value: +"Output serialization for the output field. Default json (pretty-printed). csv is RFC 4180." - added
Input schema / properties / format / enumAdded value: +[ + "json", + "ndjson", + "csv", + "tsv" +] - added
Input schema / properties / seedAdded value: +{ + "description": "Optional seed (max 1024 chars). Omit or null for non-deterministic CSPRNG output; supply to get deterministic reproducible output. Do not use seeded output for security tokens.", + "maxLength": 1024, + "type": [ + "string", + "null" + ] +} - changed
Input schema / requiredPrevious value: -[ - "fields", - "count", - "format" -]New value: +[ + "fields", + "count" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "description": "Number of records generated (echoes the request count).", + "type": "integer" + }, + "fields": { + "description": "Normalised field specifications used, each with name, type, and resolved options.", + "items": { + "type": "object" + }, + "type": "array" + }, + "format": { + "description": "Output format used (json, ndjson, csv, or tsv).", + "type": "string" + }, + "output": { + "description": "Records serialized as a single string in the chosen format.", + "type": "string" + }, + "records": { + "description": "Parsed records; each item is an object keyed by field name.", + "items": { + "type": "object" + }, + "type": "array" + }, + "success": { + "description": "True on success; false with an error string on bad input.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
data_sample_data_generator13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / count / defaultAdded value: +10 - added
Input schema / properties / count / descriptionAdded value: +"Number of records to generate (1 to 500)." - added
Input schema / properties / count / maximumAdded value: +500 - added
Input schema / properties / count / minimumAdded value: +1 - added
Input schema / properties / format / defaultAdded value: +"json" - added
Input schema / properties / format / descriptionAdded value: +"Output serialisation: json (pretty array), ndjson (one object per line), csv (RFC 4180), or tsv." - added
Input schema / properties / format / enumAdded value: +[ + "json", + "ndjson", + "csv", + "tsv" +] - added
Input schema / properties / seedAdded value: +{ + "description": "Optional seed string for reproducible output (max 1024 chars); omit or null for cryptographic randomness.", + "maxLength": 1024, + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / shape / descriptionAdded value: +"Dataset preset to generate; each shape has a fixed column set." - added
Input schema / properties / shape / enumAdded value: +[ + "users", + "orders", + "products", + "log_lines", + "transactions", + "inventory", + "tickets", + "employees", + "analytics_events" +] - changed
Input schema / requiredPrevious value: -[ - "shape", - "count", - "format" -]New value: +[ + "shape" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "description": "Number of records returned.", + "type": "integer" + }, + "format": { + "description": "The output format applied (json, ndjson, csv, or tsv).", + "type": "string" + }, + "output": { + "description": "The serialised dataset in the requested format.", + "type": "string" + }, + "records": { + "description": "The generated records as objects, before serialisation.", + "items": { + "description": "One record; keys match the shape column set.", + "type": "object" + }, + "type": "array" + }, + "shape": { + "description": "The shape preset that was generated.", + "type": "string" + }, + "success": { + "description": "Whether generation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
data_table_generator17 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / alignmentAdded value: +{ + "description": "render only, optional. Per-column alignment for markdown and html output; each entry is left, center, or right. Padded with left to column count. Ignored for csv/tsv.", + "items": { + "enum": [ + "left", + "center", + "right" + ], + "type": "string" + }, + "type": [ + "array", + "null" + ] +} - added
Input schema / properties / format / descriptionAdded value: +"Target/source format. For render one of markdown, html, csv, tsv. For parse only csv, tsv, or markdown are accepted (html is render-only). Required for both operations." - added
Input schema / properties / format / enumAdded value: +[ + "markdown", + "html", + "csv", + "tsv" +] - added
Input schema / properties / headers / descriptionAdded value: +"render only. Optional array of column header strings; max 200. When present and content rows exist, its length must equal the widest row or the request is rejected." - added
Input schema / properties / headers / maxItemsAdded value: +200 - changed
Input schema / properties / headers / typePrevious value: -"array"New value: +[ + "array", + "null" +] - added
Input schema / properties / operation / defaultAdded value: +"render" - added
Input schema / properties / operation / descriptionAdded value: +"render serializes headers/rows into a table string; parse reads a table string into headers/rows. Defaults to render." - added
Input schema / properties / operation / enumAdded value: +[ + "render", + "parse" +] - added
Input schema / properties / rows / descriptionAdded value: +"render only. Array of rows, each an array of scalar cells (string, number, boolean, null); max 10000 rows and 200 columns per row. Required for render." - changed
Input schema / properties / rows / items / items / typePrevious value: -"string"New value: +[ + "string", + "number", + "boolean", + "null" +] - added
Input schema / properties / rows / items / maxItemsAdded value: +200 - added
Input schema / properties / rows / maxItemsAdded value: +10000 - added
Input schema / properties / sourceAdded value: +{ + "description": "parse only. The raw CSV, TSV, or Markdown table text to parse. The first row is treated as headers. Null or empty returns empty headers/rows. Required for parse.", + "type": [ + "string", + "null" + ] +} - removed
Input schema / requiredRemoved value: -[ - "operation", - "headers", - "rows", - "format" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Echo of the requested operation (render or parse).", + "type": "string" + }, + "result": { + "description": "render returns format, headers, rows, output, rowCount, columnCount. parse returns headers, rows, rowCount, columnCount (no output/format).", + "properties": { + "columnCount": { + "description": "Column count of the widest row.", + "type": "integer" + }, + "format": { + "description": "render only. The output format used (markdown, html, csv, or tsv).", + "type": "string" + }, + "headers": { + "description": "Normalized column header strings (empty array when no header row).", + "items": { + "type": "string" + }, + "type": "array" + }, + "output": { + "description": "render only. The fully formatted table serialized as a single string in the chosen format.", + "type": "string" + }, + "rowCount": { + "description": "Number of body rows (excludes the header row).", + "type": "integer" + }, + "rows": { + "description": "Normalized 2-D table body; each row is an array of stringified cell values.", + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "True when the operation completed without a validation error.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
data_uuid_validator9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / aAdded value: +{ + "description": "First UUID string. Required for the compare operation.", + "type": "string" +} - added
Input schema / properties / bAdded value: +{ + "description": "Second UUID string. Required for the compare operation.", + "type": "string" +} - added
Input schema / properties / input / descriptionAdded value: +"The UUID/GUID string to parse. Required for validate and identify. Accepts hyphenated, 32-hex, braced, or urn:uuid: forms; whitespace is trimmed." - added
Input schema / properties / inputsAdded value: +{ + "description": "List of UUID strings to validate in one call. Required for batchValidate; 1 to 1000 items.", + "items": { + "description": "A single UUID/GUID string to validate.", + "type": "string" + }, + "maxItems": 1000, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / operation / descriptionAdded value: +"Which check to run. validate and identify parse one string (field input); compare tests two strings (fields a and b) for equality; batchValidate parses a list (field inputs)." - added
Input schema / properties / operation / enumAdded value: +[ + "validate", + "identify", + "compare", + "batchValidate" +] - removed
Input schema / requiredRemoved value: -[ - "operation", - "input" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation that was run, echoed back.", + "type": "string" + }, + "result": { + "description": "Operation-dependent payload. For validate/identify: a single validation object. For compare: equality flags. For batchValidate: counts plus a results array.", + "properties": { + "a": { + "description": "First input, echoed (compare).", + "type": "string" + }, + "b": { + "description": "Second input, echoed (compare).", + "type": "string" + }, + "bytes": { + "description": "32-character lowercase hex payload (no dashes).", + "type": "string" + }, + "count": { + "description": "Number of strings processed (batchValidate).", + "type": "integer" + }, + "details": { + "description": "Embedded fields, present only for RFC 4122 variant v1/v6/v7.", + "properties": { + "clockSequence": { + "description": "v1/v6 14-bit clock sequence.", + "type": "integer" + }, + "node": { + "description": "v1/v6 node as 6 colon-separated hex pairs.", + "type": "string" + }, + "timestamp": { + "description": "Decoded ISO 8601 timestamp.", + "type": "string" + }, + "unixMs": { + "description": "Decoded timestamp as Unix milliseconds.", + "type": "integer" + } + }, + "type": "object" + }, + "equal": { + "description": "True if a and b are byte-for-byte identical after trim (compare).", + "type": "boolean" + }, + "equalNormalized": { + "description": "True if both are valid and share the same 32-hex payload (compare).", + "type": "boolean" + }, + "input": { + "description": "The submitted UUID string, echoed (validate/identify).", + "type": "string" + }, + "invalid": { + "description": "Count of invalid strings (batchValidate).", + "type": "integer" + }, + "isMax": { + "description": "True if the all-ff Max UUID.", + "type": "boolean" + }, + "isNil": { + "description": "True if the all-zero Nil UUID.", + "type": "boolean" + }, + "normalized": { + "description": "Canonical lowercase hyphenated form.", + "type": "string" + }, + "reason": { + "description": "Why validation failed; present only when valid is false.", + "type": "string" + }, + "results": { + "description": "Per-string validation objects, same shape as the single-validate result (batchValidate).", + "items": { + "description": "One validation result.", + "type": "object" + }, + "type": "array" + }, + "uppercase": { + "description": "Canonical form in uppercase.", + "type": "string" + }, + "urn": { + "description": "urn:uuid: prefixed canonical form.", + "type": "string" + }, + "valid": { + "description": "Whether the string is a well-formed UUID (validate/identify); in batchValidate the response reuses this key as the integer count of valid strings.", + "type": "boolean" + }, + "variant": { + "description": "Variant label: NCS, RFC 4122, Microsoft, or Reserved.", + "type": "string" + }, + "variantBits": { + "description": "Significant high-order variant bits (for example 10 for RFC 4122).", + "type": "string" + }, + "version": { + "description": "UUID version nibble (1-8).", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request was processed (true on any 200; per-UUID validity is in result).", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_ascii8518 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operation / descriptionAdded value: +"Direction: \"encode\" turns text into ASCII85; \"decode\" turns an ASCII85 string back into text." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / options / additionalPropertiesAdded value: +false - added
Input schema / properties / options / descriptionAdded value: +"Optional encode-time settings (ignored when decoding, since delimiters and whitespace are auto-detected)." - added
Input schema / properties / options / properties / addDelimiters / defaultAdded value: +false - added
Input schema / properties / options / properties / addDelimiters / descriptionAdded value: +"Wrap encoded output in Adobe <~ ~> delimiters." - added
Input schema / properties / options / properties / useSpaceCompression / defaultAdded value: +false - added
Input schema / properties / options / properties / useSpaceCompression / descriptionAdded value: +"Emit \"y\" for each all-space 4-byte group (non-standard extension)." - added
Input schema / properties / options / properties / useZeroCompression / defaultAdded value: +true - added
Input schema / properties / options / properties / useZeroCompression / descriptionAdded value: +"Emit \"z\" for each all-zero 4-byte group instead of \"!!!!!\"." - added
Input schema / properties / options / properties / wrapLines / defaultAdded value: +false - added
Input schema / properties / options / properties / wrapLines / descriptionAdded value: +"Wrap encoded output at 80 characters per line." - removed
Input schema / properties / options / requiredRemoved value: -[ - "wrapLines", - "addDelimiters", - "useZeroCompression", - "useSpaceCompression" -] - added
Input schema / properties / text / descriptionAdded value: +"Input to convert: UTF-8 plaintext when encoding, or an ASCII85 string when decoding. Must not be blank." - added
Input schema / properties / text / examplesAdded value: +[ + "Hello, World!" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "options" -]New value: +[ + "text", + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "input": { + "description": "The submitted text, echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (\"encode\" or \"decode\").", + "type": "string" + }, + "options": { + "description": "The effective encode options after defaults were applied.", + "properties": { + "addDelimiters": { + "description": "Whether <~ ~> delimiters were added.", + "type": "boolean" + }, + "useSpaceCompression": { + "description": "Whether all-space groups became \"y\".", + "type": "boolean" + }, + "useZeroCompression": { + "description": "Whether all-zero groups became \"z\".", + "type": "boolean" + }, + "wrapLines": { + "description": "Whether output was wrapped at 80 chars.", + "type": "boolean" + } + }, + "type": "object" + }, + "result": { + "description": "The ASCII85 string (encode) or decoded text (decode).", + "type": "string" + }, + "stats": { + "description": "Size and efficiency metrics for the conversion.", + "properties": { + "compressions": { + "description": "Count of 4-byte groups collapsed to a \"z\"/\"y\" token.", + "type": "integer" + }, + "efficiency": { + "description": "Compactness ratio as a percentage (original/encoded*100).", + "type": "integer" + }, + "encodedSize": { + "description": "Character length of the encoded output.", + "type": "integer" + }, + "originalSize": { + "description": "Byte length of the original (pre-encode) text.", + "type": "integer" + }, + "overhead": { + "description": "Size increase as a percentage ((encoded-original)/original*100).", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_atbash11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operation / descriptionAdded value: +"Required label for the requested direction. Atbash is symmetric, so encode and decode produce identical output; this only sets the echoed operation field." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / preserve_case / defaultAdded value: +true - added
Input schema / properties / preserve_case / descriptionAdded value: +"When true, keep each letter's original case; when false, uppercase letters become lowercase and lowercase become uppercase." - added
Input schema / properties / preserve_non_alpha / defaultAdded value: +true - added
Input schema / properties / preserve_non_alpha / descriptionAdded value: +"When true, pass digits, spaces, and punctuation through unchanged; when false, drop all non-letter characters from the output." - added
Input schema / properties / text / descriptionAdded value: +"The text to transform; must not be blank. Letters are mirrored, other characters are unaffected." - added
Input schema / properties / text / examplesAdded value: +[ + "Hello, World!" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "preserve_case", - "preserve_non_alpha" -]New value: +[ + "text", + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "info": { + "description": "Note that Atbash is symmetric — encoding and decoding are identical.", + "type": "string" + }, + "input": { + "description": "The original text, echoed back.", + "type": "string" + }, + "operation": { + "description": "The requested direction (encode or decode); output is identical either way.", + "type": "string" + }, + "preserve_case": { + "description": "The effective preserve_case setting used.", + "type": "boolean" + }, + "preserve_non_alpha": { + "description": "The effective preserve_non_alpha setting used.", + "type": "boolean" + }, + "result": { + "description": "The Atbash-transformed text.", + "type": "string" + }, + "success": { + "description": "True when the transform succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_baconian14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / alphabet / defaultAdded value: +"AB" - added
Input schema / properties / alphabet / descriptionAdded value: +"Symbol pair for the five-symbol groups: AB uses letters A and B, 01 uses digits 0 and 1." - added
Input schema / properties / alphabet / enumAdded value: +[ + "AB", + "01" +] - added
Input schema / properties / operation / defaultAdded value: +"encode" - added
Input schema / properties / operation / descriptionAdded value: +"Direction of the transform: encode turns plaintext into Baconian groups, decode turns Baconian groups back into plaintext." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / text / descriptionAdded value: +"Text to process; must not be blank. When encoding, letters are mapped to five-symbol groups and non-letters pass through; when decoding, five-symbol groups are converted back to letters." - added
Input schema / properties / text / examplesAdded value: +[ + "Hello" +] - added
Input schema / properties / text / minLengthAdded value: +1 - added
Input schema / properties / version / defaultAdded value: +"A" - added
Input schema / properties / version / descriptionAdded value: +"Cipher table variant. A is the 24-letter classical table where I/J and U/V share codes (lossy on decode); B is the full 26-letter table with a unique code per letter." - added
Input schema / properties / version / enumAdded value: +[ + "A", + "B" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "alphabet": { + "description": "The symbol pair used (AB or 01), echoed back.", + "type": "string" + }, + "analysis": { + "description": "Metrics about the transform.", + "properties": { + "cipher_groups": { + "description": "Count of valid five-symbol Baconian groups.", + "type": "integer" + }, + "ciphertext_length": { + "description": "Character length of the Baconian ciphertext side.", + "type": "integer" + }, + "encoding_efficiency": { + "description": "Cipher groups as a percentage of letter count, rounded to 1 decimal.", + "type": "number" + }, + "expansion_ratio": { + "description": "Ciphertext length divided by plaintext length, rounded to 2 decimals.", + "type": "number" + }, + "letter_count": { + "description": "Number of alphabetic characters in the plaintext.", + "type": "integer" + }, + "plaintext_length": { + "description": "Character length of the plaintext side.", + "type": "integer" + }, + "security_level": { + "description": "Qualitative strength rating (e.g. Very Weak, Weak, Medium, Medium-Strong).", + "type": "string" + }, + "space_count": { + "description": "Number of spaces in the plaintext.", + "type": "integer" + }, + "version_used": { + "description": "Cipher table variant applied (A or B).", + "type": "string" + } + }, + "type": "object" + }, + "operation": { + "description": "The requested direction (encode or decode), echoed back.", + "type": "string" + }, + "result": { + "description": "The transformed text: space-separated five-symbol groups when encoding, decoded plaintext when decoding.", + "type": "string" + }, + "success": { + "description": "True when the transform succeeded.", + "type": "boolean" + }, + "version": { + "description": "The cipher table variant used (A or B), echoed back.", + "type": "string" + } + }, + "type": "object" +}
- Changed
encoding_decoding_base645 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operation / descriptionAdded value: +"Direction of conversion: 'encode' turns text into Base64; 'decode' turns valid Base64 back into text. Invalid Base64 on decode returns an error." - added
Input schema / properties / text / descriptionAdded value: +"The payload to process. For encode, the plain UTF-8 text to convert to Base64; for decode, the Base64 string to convert back to text (surrounding whitespace and newlines are stripped). Must not be blank." - added
Input schema / properties / text / minLengthAdded value: +1 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "input": { + "description": "The original text submitted, echoed back.", + "type": "string" + }, + "operation": { + "description": "The direction requested; either encode or decode.", + "type": "string" + }, + "result": { + "description": "The converted output — Base64 for encode, decoded UTF-8 text for decode.", + "type": "string" + }, + "success": { + "description": "True when the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_base919 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / format / defaultAdded value: +"text" - added
Input schema / properties / format / descriptionAdded value: +"How to read text when encoding: text (UTF-8), hex (even-length hex, whitespace allowed), or binary (0/1 digits in multiples of 8 bits). Ignored when decoding." - added
Input schema / properties / format / enumAdded value: +[ + "text", + "hex", + "binary" +] - added
Input schema / properties / operation / descriptionAdded value: +"Direction: encode turns input into basE91; decode turns a basE91 string back into text." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / text / descriptionAdded value: +"Input to convert: when encoding, data interpreted per format (UTF-8 text, hex, or binary digits); when decoding, a basE91 string. Must not be blank." - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "format" -]New value: +[ + "text", + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "char_analysis": { + "description": "Distinct output characters (encode only; empty on decode), sorted.", + "items": { + "properties": { + "char": { + "description": "A character appearing in the output.", + "type": "string" + }, + "code": { + "description": "Its char code (charCodeAt).", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "format": { + "description": "The input format used for encoding (text, hex, or binary).", + "type": "string" + }, + "input": { + "description": "The submitted text, echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (encode or decode).", + "type": "string" + }, + "result": { + "description": "The basE91 string (encode) or decoded text (decode).", + "type": "string" + }, + "stats": { + "description": "Size and efficiency metrics for the conversion.", + "properties": { + "base64Comparison": { + "description": "Encode-only comparison against Base64 output size.", + "properties": { + "percentage": { + "description": "Savings as a percentage of the Base64 size.", + "type": "integer" + }, + "savings": { + "description": "Characters saved versus Base64 (base64 size minus basE91 size).", + "type": "integer" + }, + "size": { + "description": "Estimated Base64 character length for the same input.", + "type": "integer" + } + }, + "type": "object" + }, + "efficiency": { + "description": "Compactness ratio as a percentage (input over output times 100).", + "type": "integer" + }, + "inputSize": { + "description": "Byte length of the input data.", + "type": "integer" + }, + "outputSize": { + "description": "Character length of the output.", + "type": "integer" + }, + "overhead": { + "description": "Size increase as a percentage.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_basex9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / base / defaultAdded value: +"32" - added
Input schema / properties / base / descriptionAdded value: +"Target alphabet. \"32\" = RFC 4648 Base32 with = padding; \"58\" = Base58 (Bitcoin alphabet); \"85\" = Base85 (Z85-style set)." - added
Input schema / properties / base / enumAdded value: +[ + "32", + "58", + "85" +] - added
Input schema / properties / operation / descriptionAdded value: +"Direction of conversion. \"encode\" turns text into the chosen base; \"decode\" turns an encoded string back into text." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / text / descriptionAdded value: +"Input to convert: UTF-8 plaintext when encoding, or an encoded string in the chosen base when decoding. Must not be blank." - added
Input schema / properties / text / examplesAdded value: +[ + "Hello, World!" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Length and efficiency metrics for the conversion.", + "properties": { + "efficiency": { + "description": "Compactness as a percentage (smaller-over-larger length times 100).", + "type": "integer" + }, + "inputLength": { + "description": "Character length of the input string.", + "type": "integer" + }, + "outputLength": { + "description": "Character length of the result string.", + "type": "integer" + }, + "ratio": { + "description": "Input-to-output size ratio (e.g. \"1:1.60\" when encoding).", + "type": "string" + } + }, + "type": "object" + }, + "base": { + "description": "The base used (\"32\", \"58\", or \"85\").", + "type": "string" + }, + "input": { + "description": "The submitted text, echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (\"encode\" or \"decode\").", + "type": "string" + }, + "result": { + "description": "The encoded string (encode) or decoded text (decode).", + "type": "string" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_binary_text15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / encoding / defaultAdded value: +"utf8" - added
Input schema / properties / encoding / descriptionAdded value: +"Character encoding. utf8: full Unicode (multi-byte chars become multiple bytes). ascii: rejects code points above 127. latin1: rejects code points above 255." - added
Input schema / properties / encoding / enumAdded value: +[ + "utf8", + "ascii", + "latin1" +] - added
Input schema / properties / format / defaultAdded value: +"spaced" - added
Input schema / properties / format / descriptionAdded value: +"Output/input grouping. spaced: bytes separated by a single space. continuous: no separators (decode requires length divisible by 8). custom_separator: bytes joined/split on the separator value." - added
Input schema / properties / format / enumAdded value: +[ + "spaced", + "continuous", + "custom_separator" +] - added
Input schema / properties / input / descriptionAdded value: +"Data to convert: UTF-8 plaintext when encoding, or a binary bit string when decoding. Must not be blank." - added
Input schema / properties / operation / defaultAdded value: +"text_to_binary" - added
Input schema / properties / operation / descriptionAdded value: +"Direction: text_to_binary encodes plaintext into binary; binary_to_text decodes a binary bit string back into text." - added
Input schema / properties / operation / enumAdded value: +[ + "text_to_binary", + "binary_to_text" +] - added
Input schema / properties / separator / defaultAdded value: +" " - added
Input schema / properties / separator / descriptionAdded value: +"Delimiter used only when format is custom_separator; ignored otherwise." - changed
Input schema / requiredPrevious value: -[ - "operation", - "input", - "format", - "separator", - "encoding" -]New value: +[ + "input" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Present only on failure: the error message.", + "type": "string" + }, + "result": { + "description": "The conversion payload from the binary-text logic.", + "properties": { + "analysis": { + "description": "Statistics about the conversion.", + "properties": { + "binary_groups": { + "description": "Number of whitespace-separated binary groups.", + "type": "integer" + }, + "binary_length": { + "description": "Count of 0/1 bits in the binary side.", + "type": "integer" + }, + "bits_per_character": { + "description": "Average bits per character, rounded to 1 decimal.", + "type": "number" + }, + "bytes_used": { + "description": "Total bytes (binary_length divided by 8).", + "type": "number" + }, + "character_count": { + "description": "Number of text characters.", + "type": "integer" + }, + "compression_ratio": { + "description": "binary_length vs text times 8, as a percentage.", + "type": "number" + }, + "encoding_used": { + "description": "The encoding applied (utf8, ascii, or latin1).", + "type": "string" + }, + "entropy": { + "description": "Shannon entropy of the text, rounded to 2 decimals.", + "type": "number" + }, + "most_frequent_char": { + "description": "Most frequent character, or null when text is empty.", + "type": [ + "string", + "null" + ] + }, + "operation": { + "description": "The operation performed.", + "type": "string" + }, + "text_length": { + "description": "Character length of the text side.", + "type": "integer" + }, + "unique_characters": { + "description": "Count of distinct characters.", + "type": "integer" + } + }, + "type": "object" + }, + "binary_parts": { + "description": "The individual 8-bit binary byte groups.", + "items": { + "type": "string" + }, + "type": "array" + }, + "byte_values": { + "description": "Decoded byte values 0-255 (present only for binary_to_text).", + "items": { + "type": "integer" + }, + "type": "array" + }, + "output": { + "description": "Converted string: binary bit groups (encode) or decoded text (decode).", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_binhex18 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / creator / defaultAdded value: +"UNIX" - added
Input schema / properties / creator / descriptionAdded value: +"Encode-only: 4-character Macintosh Finder creator code (padded/truncated to 4 chars). Ignored when decoding." - added
Input schema / properties / creator / maxLengthAdded value: +4 - added
Input schema / properties / creator / minLengthAdded value: +1 - added
Input schema / properties / filename / defaultAdded value: +"data.bin" - added
Input schema / properties / filename / descriptionAdded value: +"Encode-only: filename stored in the BinHex header (truncated to 63 bytes). Ignored when decoding (filename is read from the stream)." - added
Input schema / properties / filename / maxLengthAdded value: +63 - added
Input schema / properties / filename / minLengthAdded value: +1 - added
Input schema / properties / operation / descriptionAdded value: +"Direction: encode wraps text into a BinHex 4.0 envelope; decode recovers the original text and Finder metadata from a BinHex stream." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / text / descriptionAdded value: +"Input to convert: UTF-8 plaintext when encoding, or a BinHex 4.0 stream (the \":...:\" block) when decoding. Must not be blank." - added
Input schema / properties / type / defaultAdded value: +"TEXT" - added
Input schema / properties / type / descriptionAdded value: +"Encode-only: 4-character Macintosh Finder file type code (padded/truncated to 4 chars). Ignored when decoding." - added
Input schema / properties / type / maxLengthAdded value: +4 - added
Input schema / properties / type / minLengthAdded value: +1 - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "filename", - "type", - "creator" -]New value: +[ + "text", + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "creator": { + "description": "Encode: the creator code you supplied. Decode: creator code recovered from the header.", + "type": "string" + }, + "filename": { + "description": "Encode: the filename you supplied. Decode: filename recovered from the BinHex header.", + "type": "string" + }, + "input": { + "description": "The submitted text, echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (encode or decode).", + "type": "string" + }, + "result": { + "description": "Encode: the BinHex 4.0 envelope string. Decode: the recovered file contents as text.", + "type": "string" + }, + "size": { + "description": "Decode only: byte length of the recovered data fork.", + "type": "integer" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + }, + "type": { + "description": "Encode: the type code you supplied. Decode: type code recovered from the header.", + "type": "string" + } + }, + "type": "object" +}
- Changed
encoding_decoding_bubble_babble10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / format / defaultAdded value: +"text" - added
Input schema / properties / format / descriptionAdded value: +"How text is read on encode and rendered on decode. text is raw UTF-8, hex is hexadecimal, binary is space-separated 8-bit groups." - added
Input schema / properties / format / enumAdded value: +[ + "text", + "hex", + "binary" +] - added
Input schema / properties / operation / descriptionAdded value: +"encode turns input bytes into Bubble Babble; decode recovers the original bytes." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / text / descriptionAdded value: +"Data to process. When encoding, interpreted per format; when decoding, the Bubble Babble string (e.g. xexax)." - added
Input schema / properties / text / examplesAdded value: +[ + "hello" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "format" -]New value: +[ + "text", + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Metrics about the input.", + "properties": { + "bytes": { + "description": "Byte count of the input under the chosen format.", + "type": "number" + }, + "contains_binary_chars": { + "description": "Whether the input has non-printable-ASCII characters.", + "type": "boolean" + }, + "estimated_encoded_length": { + "description": "Predicted Bubble Babble output length.", + "type": "integer" + }, + "length": { + "description": "Character length of the input.", + "type": "integer" + } + }, + "type": "object" + }, + "format": { + "description": "The format applied (text, hex, or binary).", + "type": "string" + }, + "info": { + "description": "One-line explanation of Bubble Babble encoding.", + "type": "string" + }, + "input": { + "description": "The input text, echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (encode or decode).", + "type": "string" + }, + "result": { + "description": "The Bubble Babble string (encode) or recovered data in the chosen format (decode).", + "type": "string" + }, + "success": { + "description": "Whether the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_caesar14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operation / descriptionAdded value: +"Whether to encode (shift forward) or decode (shift backward by the same amount)." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / preserve_case / defaultAdded value: +true - added
Input schema / properties / preserve_case / descriptionAdded value: +"Keep each letter's original upper/lower case. When false, encoded output is upper-cased and decoded output lower-cased." - added
Input schema / properties / preserve_non_alpha / defaultAdded value: +true - added
Input schema / properties / preserve_non_alpha / descriptionAdded value: +"Keep numbers, spaces, and punctuation in the output. When false, all non-letter characters are removed." - added
Input schema / properties / shift / descriptionAdded value: +"Number of alphabet positions to rotate each letter. Must be an integer 1-25; shift 13 equals ROT13 (encode and decode are identical)." - added
Input schema / properties / shift / maximumAdded value: +25 - added
Input schema / properties / shift / minimumAdded value: +1 - added
Input schema / properties / text / descriptionAdded value: +"The text to transform. Only A-Z/a-z letters are shifted; other characters are passed through or dropped per preserve_non_alpha." - added
Input schema / properties / text / examplesAdded value: +[ + "Hello World" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "shift", - "preserve_case", - "preserve_non_alpha" -]New value: +[ + "text", + "operation", + "shift" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Letter-frequency analysis of the input text.", + "properties": { + "letter_frequency": { + "description": "Top five letters mapped to their occurrence counts.", + "type": "object" + }, + "most_frequent": { + "description": "The most frequent letter, or null when no letters.", + "type": [ + "string", + "null" + ] + }, + "total_letters": { + "description": "Count of A-Z letters in the input.", + "type": "integer" + }, + "unique_letters": { + "description": "Number of distinct letters present.", + "type": "integer" + } + }, + "type": "object" + }, + "info": { + "description": "Human-readable summary of the shift, e.g. noting when shift 13 equals ROT13.", + "type": "string" + }, + "input": { + "description": "The input text, echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (encode or decode).", + "type": "string" + }, + "preserve_case": { + "description": "Whether original letter case was preserved.", + "type": "boolean" + }, + "preserve_non_alpha": { + "description": "Whether non-letter characters were preserved.", + "type": "boolean" + }, + "result": { + "description": "The transformed (encoded or decoded) text.", + "type": "string" + }, + "shift": { + "description": "The shift value applied (1-25).", + "type": "integer" + }, + "success": { + "description": "Whether the transform succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_hex_ascii19 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / case / defaultAdded value: +"lowercase" - added
Input schema / properties / case / descriptionAdded value: +"Letter case of emitted hex digits. Applies only to \"ascii_to_hex\"." - added
Input schema / properties / case / enumAdded value: +[ + "lowercase", + "uppercase" +] - added
Input schema / properties / encoding / defaultAdded value: +"ascii" - added
Input schema / properties / encoding / descriptionAdded value: +"Character encoding used to map bytes to characters. \"ascii\" rejects bytes above 127; \"latin1\" allows 0-255; \"utf8\" decodes multi-byte sequences." - added
Input schema / properties / encoding / enumAdded value: +[ + "ascii", + "latin1", + "utf8" +] - added
Input schema / properties / format / defaultAdded value: +"spaced" - added
Input schema / properties / format / descriptionAdded value: +"Hex byte layout. \"spaced\" separates pairs with a single space; \"continuous\" emits unbroken hex; \"custom_separator\" uses the separator field." - added
Input schema / properties / format / enumAdded value: +[ + "spaced", + "continuous", + "custom_separator" +] - added
Input schema / properties / input / descriptionAdded value: +"Data to convert: a hex string when operation is \"hex_to_ascii\", or plaintext when \"ascii_to_hex\". Must not be empty." - added
Input schema / properties / input / examplesAdded value: +[ + "48 65 6c 6c 6f" +] - added
Input schema / properties / operation / defaultAdded value: +"hex_to_ascii" - added
Input schema / properties / operation / descriptionAdded value: +"Direction of conversion. \"hex_to_ascii\" decodes hex into text; \"ascii_to_hex\" encodes text into hex." - added
Input schema / properties / operation / enumAdded value: +[ + "hex_to_ascii", + "ascii_to_hex" +] - added
Input schema / properties / separator / defaultAdded value: +" " - added
Input schema / properties / separator / descriptionAdded value: +"Delimiter between hex pairs. Only used when format is \"custom_separator\" (for example \"0x\" or backslash-x)." - changed
Input schema / requiredPrevious value: -[ - "operation", - "input", - "format", - "separator", - "case", - "encoding" -]New value: +[ + "operation", + "input" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Statistics about the converted data.", + "properties": { + "bytes_used": { + "description": "Number of bytes represented.", + "type": "integer" + }, + "character_count": { + "description": "Number of characters in the text side.", + "type": "integer" + }, + "character_range": { + "description": "Lowest/highest characters by code point, or null when text is empty.", + "properties": { + "max_char": { + "description": "Character with the highest code point.", + "type": "string" + }, + "max_ord": { + "description": "Highest code point value.", + "type": "integer" + }, + "min_char": { + "description": "Character with the lowest code point.", + "type": "string" + }, + "min_ord": { + "description": "Lowest code point value.", + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "chars_per_byte": { + "description": "Average characters per byte, rounded to one decimal.", + "type": "number" + }, + "encoding_used": { + "description": "The encoding applied during analysis.", + "type": "string" + }, + "entropy": { + "description": "Shannon entropy of the text in bits, rounded to two decimals.", + "type": "number" + }, + "hex_length": { + "description": "Count of hex digit characters.", + "type": "integer" + }, + "hex_pairs": { + "description": "Number of hex byte pairs.", + "type": "integer" + }, + "operation": { + "description": "Operation the analysis describes.", + "type": "string" + }, + "printable_characters": { + "description": "Count of printable/whitespace characters.", + "type": "integer" + }, + "printable_percentage": { + "description": "Printable characters as a percentage, one decimal.", + "type": "number" + }, + "text_length": { + "description": "Character length of the text side.", + "type": "integer" + }, + "unique_characters": { + "description": "Count of distinct characters in the text.", + "type": "integer" + } + }, + "type": "object" + }, + "byte_values": { + "description": "Decimal byte values (present only for \"hex_to_ascii\").", + "items": { + "type": "integer" + }, + "type": "array" + }, + "encoding": { + "description": "The character encoding that was applied.", + "type": "string" + }, + "format": { + "description": "The hex layout that was applied.", + "type": "string" + }, + "hex_pairs": { + "description": "The individual two-character hex bytes produced or parsed.", + "items": { + "type": "string" + }, + "type": "array" + }, + "input": { + "description": "The submitted input, echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (\"hex_to_ascii\" or \"ascii_to_hex\").", + "type": "string" + }, + "output": { + "description": "The converted result: ASCII/text when decoding, a hex string when encoding.", + "type": "string" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_html_entities13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / format / defaultAdded value: +"named" - added
Input schema / properties / format / descriptionAdded value: +"Encode only. Output entity form: named (&lt; with numeric fallback), decimal (&#60;), or hex (&#x3C;). Ignored when decoding." - added
Input schema / properties / format / enumAdded value: +[ + "named", + "decimal", + "hex" +] - added
Input schema / properties / mode / defaultAdded value: +"safe" - added
Input schema / properties / mode / descriptionAdded value: +"Encode only. safe escapes < > & \" only; all also escapes every non-ASCII character; extended escapes the common Latin-1, punctuation, and currency ranges. Ignored when decoding." - added
Input schema / properties / mode / enumAdded value: +[ + "safe", + "all", + "extended" +] - added
Input schema / properties / operation / descriptionAdded value: +"encode converts characters to HTML entities; decode resolves named/decimal/hex entities back to characters." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / text / descriptionAdded value: +"The text to encode or decode. Required, non-empty." - added
Input schema / properties / text / examplesAdded value: +[ + "<a href=\"x\">Tom & Jerry</a>" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "mode", - "format" -]New value: +[ + "text", + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Length and entity-count metrics for the conversion.", + "properties": { + "entities": { + "description": "Count of HTML entities in the result (encode) or input (decode).", + "type": "integer" + }, + "inputLength": { + "description": "Number of code points in the input.", + "type": "integer" + }, + "outputLength": { + "description": "Number of code points in the result.", + "type": "integer" + } + }, + "type": "object" + }, + "format": { + "description": "The encode output format used (named, decimal, or hex).", + "type": "string" + }, + "input": { + "description": "The original text, echoed back.", + "type": "string" + }, + "mode": { + "description": "The encode mode used (safe, all, or extended).", + "type": "string" + }, + "operation": { + "description": "The operation performed (encode or decode).", + "type": "string" + }, + "result": { + "description": "The encoded or decoded output string.", + "type": "string" + }, + "success": { + "description": "Whether the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_jwt3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / token / descriptionAdded value: +"The JSON Web Token to decode, as a compact dot-separated string of three Base64URL parts (header then payload then signature). Must not be blank. Whitespace is trimmed before parsing." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "claimsAnalysis": { + "additionalProperties": { + "properties": { + "description": { + "description": "Human-readable meaning of the claim (the registered-claim definition, or Custom claim).", + "type": "string" + }, + "formatted": { + "description": "Present only for numeric exp, nbf, and iat claims: the value rendered as a locale date-time string, suffixed with an EXPIRED marker when an exp is in the past.", + "type": "string" + }, + "value": { + "description": "The raw claim value as it appears in the payload (any JSON type)." + } + }, + "type": "object" + }, + "description": "Per-claim breakdown keyed by claim name; each entry describes one payload claim. Empty when decoding failed.", + "type": "object" + }, + "decodedJWT": { + "description": "The decoded token sections. header and payload are null when decoding failed.", + "properties": { + "header": { + "description": "The decoded JWT header JSON object (for example alg and typ). Always a JSON object when present, never an array; null on failure.", + "type": [ + "object", + "null" + ] + }, + "payload": { + "description": "The decoded JWT payload (claims) as a JSON object holding registered claims (iss, sub, aud, exp, nbf, iat, jti) and any custom claims. Always a JSON object when present, never an array; null on failure.", + "type": [ + "object", + "null" + ] + }, + "signature": { + "description": "The third token part (the raw Base64URL signature) as an unverified string; null on failure.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "error": { + "description": "A high-level parse error message when decoding failed, or null on success.", + "type": [ + "string", + "null" + ] + }, + "input": { + "description": "The submitted token string, echoed back.", + "type": "string" + }, + "success": { + "description": "True when the token had a valid three-part structure and both header and payload decoded; otherwise the endpoint returns HTTP 400.", + "type": "boolean" + }, + "tokenParts": { + "description": "The token split on dots, before decoding. Normally three elements (header, payload, signature).", + "items": { + "type": "string" + }, + "type": "array" + }, + "tokenStatus": { + "description": "Structural assessment of the token.", + "properties": { + "error": { + "description": "A structural error message (for example a wrong part count or bad Base64URL), or null when the structure is valid.", + "type": [ + "string", + "null" + ] + }, + "parts": { + "description": "The number of dot-separated parts found in the token.", + "type": "integer" + }, + "structure": { + "description": "Whether the token had exactly three dot-separated parts and decoded successfully.", + "type": "boolean" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
encoding_decoding_punycode6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operation / descriptionAdded value: +"Direction of conversion." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / text / descriptionAdded value: +"Input to convert. For encode: a Unicode domain (e.g. münchen.de) or a single label; a value containing a dot with no spaces is treated as a domain and each label encoded separately. For decode: an xn-- ASCII string or full ASCII domain containing xn-- labels." - added
Input schema / properties / text / minLengthAdded value: +1 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "character_info": { + "description": "Up to 20 unique non-ASCII characters in the input (encode only), else empty.", + "items": { + "properties": { + "char": { + "description": "The non-ASCII character.", + "type": "string" + }, + "codePoint": { + "description": "The character's code point.", + "type": "integer" + }, + "name": { + "description": "Unicode character name (or UNICODE CHARACTER if unknown).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "domain_analysis": { + "description": "Per-label breakdown when input is domain-like, else empty.", + "items": { + "properties": { + "converted": { + "description": "The converted label.", + "type": "string" + }, + "needsEncoding": { + "description": "True if the label contained non-ASCII characters.", + "type": "boolean" + }, + "original": { + "description": "The original label.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "input": { + "description": "The original text submitted.", + "type": "string" + }, + "operation": { + "description": "The operation performed (encode or decode).", + "type": "string" + }, + "result": { + "description": "Converted output — xn-- ASCII for encode, Unicode for decode.", + "type": "string" + }, + "success": { + "description": "True when conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_quoted_printable6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operation / descriptionAdded value: +"Direction of conversion: 'encode' turns text into Quoted-Printable; 'decode' turns Quoted-Printable back into UTF-8 text. Any other value returns an error." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / text / descriptionAdded value: +"The payload to process. For encode, the plain UTF-8 text to convert to Quoted-Printable; for decode, the Quoted-Printable string to convert back to text. Must not be blank." - added
Input schema / properties / text / minLengthAdded value: +1 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "input": { + "description": "The original text submitted, echoed back.", + "type": "string" + }, + "operation": { + "description": "The direction requested; either encode or decode.", + "type": "string" + }, + "result": { + "description": "The converted output — Quoted-Printable for encode, decoded UTF-8 text for decode.", + "type": "string" + }, + "stats": { + "description": "Size metrics comparing original and converted payloads.", + "properties": { + "encodedSize": { + "description": "Character length of the converted output.", + "type": "integer" + }, + "originalSize": { + "description": "Byte length of the original UTF-8 text.", + "type": "integer" + }, + "overhead": { + "description": "Percent size change from original to converted, rounded.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "True when the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_railfence12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operation / descriptionAdded value: +"Whether to encode (write the zigzag, read off by rail) or decode (rebuild the zigzag to recover the original order)." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / rails / descriptionAdded value: +"Number of rails (rows) in the zigzag. Must be an integer 2-50. More rails increases scrambling but offers no real security." - added
Input schema / properties / rails / maximumAdded value: +50 - added
Input schema / properties / rails / minimumAdded value: +2 - added
Input schema / properties / remove_spaces / defaultAdded value: +false - added
Input schema / properties / remove_spaces / descriptionAdded value: +"Strip all spaces from the text before encoding/decoding. When false, spaces are kept and repositioned like any other character." - added
Input schema / properties / text / descriptionAdded value: +"The text to transform. All characters are repositioned; nothing is dropped except spaces when remove_spaces is true." - added
Input schema / properties / text / examplesAdded value: +[ + "Hello World" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "rails", - "remove_spaces" -]New value: +[ + "text", + "operation", + "rails" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Character-distribution analysis of the plaintext.", + "properties": { + "characters_per_rail": { + "description": "Character count landing on each rail.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "letter_count": { + "description": "Count of A-Z/a-z letters.", + "type": "integer" + }, + "other_characters": { + "description": "Count of non-letter, non-space characters.", + "type": "integer" + }, + "rails_used": { + "description": "Number of rails used (2-50).", + "type": "integer" + }, + "security_level": { + "description": "Qualitative strength rating (e.g. Very Weak, Weak, Medium, Strong).", + "type": "string" + }, + "space_count": { + "description": "Count of space characters.", + "type": "integer" + }, + "total_characters": { + "description": "Total character count.", + "type": "integer" + } + }, + "type": "object" + }, + "input": { + "description": "The input text, echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (encode or decode).", + "type": "string" + }, + "pattern": { + "description": "Visual zigzag layout for display (first 50 characters).", + "properties": { + "display_length": { + "description": "Number of characters rendered in the pattern (capped at 50).", + "type": "integer" + }, + "pattern": { + "description": "One string per rail showing character placement.", + "items": { + "type": "string" + }, + "type": "array" + }, + "total_length": { + "description": "Full character length of the analysed text.", + "type": "integer" + } + }, + "type": "object" + }, + "rails": { + "description": "The number of rails applied (2-50).", + "type": "integer" + }, + "remove_spaces": { + "description": "Whether spaces were stripped before processing.", + "type": "boolean" + }, + "result": { + "description": "The transformed (encoded or decoded) text.", + "type": "string" + }, + "success": { + "description": "Whether the transform succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_rot12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operation / descriptionAdded value: +"Direction of the shift. Ignored for rotation 13 and 47 (those are symmetric); for all other rotations, decode applies the inverse shift of encode." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / rotation / descriptionAdded value: +"Shift amount. 13 selects ROT13 (letters only), 47 selects ROT47 (printable ASCII 33-126); any other value rotates printable ASCII 32-126 by that many positions." - added
Input schema / properties / rotation / examplesAdded value: +[ + 13 +] - added
Input schema / properties / rotation / maximumAdded value: +94 - added
Input schema / properties / rotation / minimumAdded value: +1 - removed
Input schema / properties / rotation / nullableRemoved value: -true - added
Input schema / properties / rotation / typeAdded value: +"integer" - added
Input schema / properties / text / descriptionAdded value: +"The text to transform; must not be blank. Characters outside the rotated set pass through unchanged." - added
Input schema / properties / text / examplesAdded value: +[ + "Hello, World!" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Character-class breakdown of the input text.", + "properties": { + "digits": { + "description": "Number of 0-9 digits.", + "type": "integer" + }, + "letters": { + "description": "Number of A-Z/a-z letters.", + "type": "integer" + }, + "other": { + "description": "Number of other (non-printable-ASCII) characters.", + "type": "integer" + }, + "spaces": { + "description": "Number of space characters.", + "type": "integer" + }, + "symbols": { + "description": "Number of printable ASCII symbols (33-126, non-alphanumeric).", + "type": "integer" + }, + "total_chars": { + "description": "Total character count of the input.", + "type": "integer" + } + }, + "type": "object" + }, + "info": { + "description": "Details about the rotation applied.", + "properties": { + "character_set": { + "description": "The character set affected by this rotation.", + "type": "string" + }, + "description": { + "description": "Human-readable note on the rotation (e.g. ROT13 - Classic letter rotation).", + "type": "string" + }, + "reversible": { + "description": "Whether the transform is reversible (always true).", + "type": "boolean" + }, + "rotation": { + "description": "The normalized rotation value.", + "type": "integer" + }, + "type": { + "description": "Character coverage label (e.g. Letters only, Full ASCII printable).", + "type": "string" + } + }, + "type": "object" + }, + "input": { + "description": "The original text, echoed back.", + "type": "string" + }, + "operation": { + "description": "The requested direction (encode or decode), echoed back.", + "type": "string" + }, + "result": { + "description": "The ROT-transformed text.", + "type": "string" + }, + "rotation": { + "description": "The rotation amount applied (1-94).", + "type": "integer" + }, + "success": { + "description": "True when the transform succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_rot138 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operation / descriptionAdded value: +"Direction for custom rotations: encode shifts forward, decode shifts backward by the same amount. Ignored for rotation 13 and 47, which are self-inverse." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / rotation / descriptionAdded value: +"Number of positions to rotate. 13 selects ROT13 (A-Z and a-z only), 47 selects ROT47 (ASCII 33-126), any other 1-94 rotates the full printable range ASCII 32-126." - added
Input schema / properties / rotation / maximumAdded value: +94 - added
Input schema / properties / rotation / minimumAdded value: +1 - added
Input schema / properties / text / descriptionAdded value: +"The text to transform. Printable ASCII is rotated per the rotation rule; characters outside the active range pass through unchanged." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Character-class breakdown of the input text.", + "properties": { + "digits": { + "description": "Count of 0-9 digits.", + "type": "integer" + }, + "letters": { + "description": "Count of A-Z and a-z letters.", + "type": "integer" + }, + "other": { + "description": "Count of remaining characters outside printable ASCII.", + "type": "integer" + }, + "spaces": { + "description": "Count of space characters.", + "type": "integer" + }, + "symbols": { + "description": "Count of printable ASCII symbols (33-126 excluding letters and digits).", + "type": "integer" + }, + "total_chars": { + "description": "Total number of characters in the input.", + "type": "integer" + } + }, + "type": "object" + }, + "info": { + "description": "Details of the rotation that was applied.", + "properties": { + "character_set": { + "description": "The character set affected by this rotation.", + "type": "string" + }, + "description": { + "description": "Human-readable name of the cipher variant, such as ROT13 or a custom ROT-N description.", + "type": "string" + }, + "reversible": { + "description": "Whether applying the same settings reverses the transform (always true).", + "type": "boolean" + }, + "rotation": { + "description": "The rotation amount used.", + "type": "integer" + }, + "type": { + "description": "Character coverage label, such as Letters only, ASCII printable, or Full ASCII printable.", + "type": "string" + } + }, + "type": "object" + }, + "input": { + "description": "The input text, echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (encode or decode).", + "type": "string" + }, + "result": { + "description": "The transformed (rotated) text.", + "type": "string" + }, + "rotation": { + "description": "The rotation value applied (1-94).", + "type": "integer" + }, + "success": { + "description": "Whether the transform succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_string_escape10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / format / descriptionAdded value: +"Target syntax. sql doubles single quotes; csv RFC-4180 quoting; shell backslash-escapes metachars; regex escapes metachars; php escapes backslash and quote; ldap RFC-4515 hex escapes; xml_attr entity-escapes; c_string C/C++ literal escapes." - added
Input schema / properties / format / enumAdded value: +[ + "sql", + "csv", + "shell", + "regex", + "php", + "ldap", + "xml_attr", + "c_string" +] - added
Input schema / properties / operation / defaultAdded value: +"escape" - added
Input schema / properties / operation / descriptionAdded value: +"Whether to escape (default) or reverse-unescape the text for the chosen format." - added
Input schema / properties / operation / enumAdded value: +[ + "escape", + "unescape" +] - added
Input schema / properties / text / descriptionAdded value: +"The string to escape or unescape. Required, non-empty." - added
Input schema / properties / text / examplesAdded value: +[ + "O'Reilly" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "format" -]New value: +[ + "text", + "format" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Heuristic analysis of the input text.", + "properties": { + "detected_escapes": { + "description": "Escape patterns detected in the input.", + "items": { + "type": "string" + }, + "type": "array" + }, + "length": { + "description": "UTF-8 byte length of the input.", + "type": "integer" + }, + "needs_escaping": { + "description": "Formats the text likely needs escaping for.", + "items": { + "type": "string" + }, + "type": "array" + }, + "recommendations": { + "description": "Suggested escaping actions.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "available_formats": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of format id to display label for all supported formats.", + "type": "object" + }, + "format": { + "description": "The format used.", + "type": "string" + }, + "format_info": { + "description": "Metadata for the chosen format.", + "properties": { + "description": { + "description": "What the format escapes.", + "type": "string" + }, + "example": { + "description": "Before/after example.", + "type": "string" + }, + "name": { + "description": "Human-readable format name.", + "type": "string" + }, + "pattern": { + "description": "Example substitution pattern.", + "type": "string" + } + }, + "type": "object" + }, + "input": { + "description": "The original text, echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (escape or unescape).", + "type": "string" + }, + "result": { + "description": "The escaped or unescaped output string.", + "type": "string" + }, + "success": { + "description": "Whether the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_unicode9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / format / defaultAdded value: +"json" - added
Input schema / properties / format / descriptionAdded value: +"Target escape syntax used when escaping (unescape auto-detects all styles): json/java use backslash-uXXXX, python adds backslash-UXXXXXXXX for astral, css uses backslash-XXXXXX space-terminated, html uses hex numeric entities, xml uses decimal numeric entities, url uses percent-XX UTF-8 bytes. Defaults to json." - added
Input schema / properties / format / enumAdded value: +[ + "json", + "python", + "java", + "css", + "html", + "xml", + "url" +] - added
Input schema / properties / operation / descriptionAdded value: +"Direction: escape converts characters to escape sequences; unescape decodes escape sequences back to characters." - added
Input schema / properties / operation / enumAdded value: +[ + "escape", + "unescape" +] - added
Input schema / properties / text / descriptionAdded value: +"Input to convert: plaintext when escaping, or a string containing Unicode escape sequences when unescaping. Must not be blank." - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "format" -]New value: +[ + "text", + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Character and code-point statistics for the input text.", + "properties": { + "ascii_chars": { + "description": "Count of ASCII characters (code point 127 or below).", + "type": "integer" + }, + "code_points": { + "description": "Up to the 10 most frequent characters, each with code-point detail.", + "items": { + "properties": { + "category": { + "description": "Unicode block/category label (e.g. ASCII, Emoticons).", + "type": "string" + }, + "char": { + "description": "The character.", + "type": "string" + }, + "code_point": { + "description": "Decimal Unicode code point.", + "type": "integer" + }, + "hex": { + "description": "Code point as U+XXXX.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "encoding": { + "description": "Text encoding assumed for analysis (always UTF-8).", + "type": "string" + }, + "escape_sequences": { + "description": "Number of recognized escape sequences detected in the input.", + "type": "integer" + }, + "total_chars": { + "description": "Total number of characters (code points) in the input.", + "type": "integer" + }, + "unicode_chars": { + "description": "Count of non-ASCII characters (code point above 127).", + "type": "integer" + }, + "unique_chars": { + "description": "Count of distinct characters in the input.", + "type": "integer" + } + }, + "type": "object" + }, + "format": { + "description": "The effective format after defaulting (json when omitted).", + "type": "string" + }, + "format_info": { + "description": "Metadata describing the chosen format.", + "properties": { + "description": { + "description": "Short explanation of the format.", + "type": "string" + }, + "example": { + "description": "Example escaped output for the format.", + "type": "string" + }, + "name": { + "description": "Human-readable format name (e.g. JSON/JavaScript).", + "type": "string" + }, + "pattern": { + "description": "Escape-sequence pattern for the format.", + "type": "string" + } + }, + "type": "object" + }, + "input": { + "description": "The submitted text, echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (escape or unescape).", + "type": "string" + }, + "result": { + "description": "The escaped string (escape) or decoded text (unescape).", + "type": "string" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_url8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operation / defaultAdded value: +"encode" - added
Input schema / properties / operation / descriptionAdded value: +"Direction of conversion. \"encode\" percent-encodes the text; \"decode\" reverses it. Decoding malformed percent sequences returns a 400 error." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / text / descriptionAdded value: +"Text to convert. For encode, the raw string to percent-encode; for decode, a percent-encoded string. Must be non-empty." - added
Input schema / properties / text / examplesAdded value: +[ + "hello world & friends" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "operation" -]New value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "input": { + "description": "The original text submitted, echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (encode or decode).", + "type": "string" + }, + "result": { + "description": "The percent-encoded or decoded output string.", + "type": "string" + }, + "success": { + "description": "True when the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_uuencode13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / filename / defaultAdded value: +"data.txt" - added
Input schema / properties / filename / descriptionAdded value: +"Name written into the begin header (encode only); ignored on decode." - added
Input schema / properties / filename / maxLengthAdded value: +255 - added
Input schema / properties / filename / minLengthAdded value: +1 - added
Input schema / properties / operation / descriptionAdded value: +"encode wraps text into uuencode; decode extracts the original data from a uuencoded block." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / permissions / defaultAdded value: +"644" - added
Input schema / properties / permissions / descriptionAdded value: +"3-digit octal Unix mode in the begin header (encode only); ignored on decode." - added
Input schema / properties / permissions / patternAdded value: +"^[0-7]{3}$" - added
Input schema / properties / text / descriptionAdded value: +"Data to process: plain text to encode, or a full uuencoded block (begin...end) to decode." - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "filename", - "permissions" -]New value: +[ + "text", + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "file_info": { + "description": "Header metadata parsed on decode; null on encode.", + "properties": { + "contentLength": { + "description": "Decoded byte count.", + "type": "integer" + }, + "filename": { + "description": "Filename from the begin line.", + "type": "string" + }, + "permissionString": { + "description": "rwx string, e.g. rw-r--r--.", + "type": "string" + }, + "permissions": { + "description": "Octal permissions from the begin line.", + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "filename": { + "description": "Filename used (encode) or parsed from the header (decode).", + "type": "string" + }, + "input": { + "description": "Echo of the submitted text.", + "type": "string" + }, + "operation": { + "description": "The operation performed.", + "enum": [ + "encode", + "decode" + ], + "type": "string" + }, + "permissions": { + "description": "Octal mode used (encode) or parsed from the header (decode).", + "type": "string" + }, + "result": { + "description": "Uuencoded block (encode) or recovered data (decode).", + "type": "string" + }, + "stats": { + "description": "Size metrics.", + "properties": { + "encodedSize": { + "description": "Output size in bytes.", + "type": "integer" + }, + "lines": { + "description": "Number of data lines.", + "type": "integer" + }, + "originalSize": { + "description": "Input size in bytes.", + "type": "integer" + }, + "overhead": { + "description": "Size increase as a percentage.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_vigenere13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / key / descriptionAdded value: +"The keyword that drives the shifts. Non-letters are stripped and it is upper-cased; must contain at least one letter. A 1-letter key degrades to a Caesar cipher." - added
Input schema / properties / key / examplesAdded value: +[ + "LEMON" +] - added
Input schema / properties / operation / descriptionAdded value: +"Whether to encrypt (encode) or decrypt (decode) the text." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / preserve_case / defaultAdded value: +true - added
Input schema / properties / preserve_case / descriptionAdded value: +"Keep each letter's original upper/lower case when true; otherwise invert it." - added
Input schema / properties / preserve_non_alpha / defaultAdded value: +true - added
Input schema / properties / preserve_non_alpha / descriptionAdded value: +"Pass spaces, digits and punctuation through unchanged when true; drop them when false." - added
Input schema / properties / text / descriptionAdded value: +"The plaintext (encode) or ciphertext (decode) to transform. Must not be blank." - added
Input schema / properties / text / examplesAdded value: +[ + "Attack at dawn" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "key", - "preserve_case", - "preserve_non_alpha" -]New value: +[ + "text", + "operation", + "key" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Letter-frequency and key-strength breakdown of the text.", + "properties": { + "key_length": { + "description": "Length of the normalized key.", + "type": "integer" + }, + "key_shifts": { + "description": "Per-letter shift values (0-25) derived from the key.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "key_strength": { + "description": "Qualitative key rating, e.g. Very Weak / Weak / Medium / Strong.", + "type": "string" + }, + "letter_frequency": { + "additionalProperties": { + "type": "integer" + }, + "description": "Top 5 letters mapped to their occurrence counts.", + "type": "object" + }, + "most_frequent": { + "description": "The most frequent letter, or null when the text has none.", + "type": [ + "string", + "null" + ] + }, + "total_letters": { + "description": "Count of alphabetic characters in the text.", + "type": "integer" + }, + "unique_letters": { + "description": "Number of distinct letters present.", + "type": "integer" + } + }, + "type": "object" + }, + "info": { + "description": "Human-readable summary of the key and its relative strength.", + "type": "string" + }, + "input": { + "description": "The original text, echoed back.", + "type": "string" + }, + "key": { + "description": "The normalized key actually used (letters only, upper-cased).", + "type": "string" + }, + "operation": { + "description": "The operation performed: encode or decode.", + "type": "string" + }, + "preserve_case": { + "description": "The preserve_case flag that was applied.", + "type": "boolean" + }, + "preserve_non_alpha": { + "description": "The preserve_non_alpha flag that was applied.", + "type": "boolean" + }, + "result": { + "description": "The encrypted or decrypted output text.", + "type": "string" + }, + "success": { + "description": "Always true on a 200 response.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
encoding_decoding_xxencode26 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / filename / defaultAdded value: +"document.txt" - added
Input schema / properties / filename / descriptionAdded value: +"Filename written into the begin header on encode (ignored on decode). Used only when options.includeHeaders is true." - added
Input schema / properties / filename / maxLengthAdded value: +255 - added
Input schema / properties / filename / minLengthAdded value: +1 - added
Input schema / properties / input_format / defaultAdded value: +"text" - added
Input schema / properties / input_format / descriptionAdded value: +"How to interpret text when encoding: text (UTF-8), hex string, or base64. Ignored on decode." - added
Input schema / properties / input_format / enumAdded value: +[ + "text", + "hex", + "base64" +] - added
Input schema / properties / operation / descriptionAdded value: +"Direction: encode turns input into XXEncode; decode turns an XXEncode block back into text." - added
Input schema / properties / operation / enumAdded value: +[ + "encode", + "decode" +] - added
Input schema / properties / options / additionalPropertiesAdded value: +false - added
Input schema / properties / options / descriptionAdded value: +"Optional encode/decode settings." - added
Input schema / properties / options / properties / includeHeaders / defaultAdded value: +true - added
Input schema / properties / options / properties / includeHeaders / descriptionAdded value: +"On encode, wrap output in begin/end lines." - added
Input schema / properties / options / properties / lineLength / defaultAdded value: +45 - added
Input schema / properties / options / properties / lineLength / descriptionAdded value: +"On encode, max characters of source data per output line (chunked as floor(lineLength*3/4) bytes)." - added
Input schema / properties / options / properties / lineLength / minimumAdded value: +1 - added
Input schema / properties / options / properties / strictMode / defaultAdded value: +false - added
Input schema / properties / options / properties / strictMode / descriptionAdded value: +"On decode, throw on any malformed line instead of skipping it." - removed
Input schema / properties / options / requiredRemoved value: -[ - "includeHeaders", - "strictMode", - "lineLength" -] - added
Input schema / properties / permissions / defaultAdded value: +"644" - added
Input schema / properties / permissions / descriptionAdded value: +"Three octal digits for the Unix file mode in the begin header on encode. Ignored on decode." - added
Input schema / properties / permissions / patternAdded value: +"^[0-7]{3}$" - added
Input schema / properties / text / descriptionAdded value: +"Input to convert: plaintext/hex/base64 (per input_format) when encoding, or an XXEncoded block when decoding. Must not be blank." - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "filename", - "permissions", - "input_format", - "options" -]New value: +[ + "text", + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "decoded_info": { + "description": "Metadata parsed from the XXEncode header on decode (empty on encode).", + "properties": { + "filename": { + "description": "Filename parsed from the begin line (decode).", + "type": "string" + }, + "isText": { + "description": "Whether the decoded output was treated as text.", + "type": "boolean" + }, + "permissions": { + "description": "Octal permissions parsed from the begin line (decode).", + "type": "string" + }, + "size": { + "description": "Number of decoded bytes (decode).", + "type": "integer" + } + }, + "type": "object" + }, + "filename": { + "description": "The filename argument echoed back.", + "type": "string" + }, + "input": { + "description": "The submitted text, echoed back.", + "type": "string" + }, + "input_format": { + "description": "The input_format argument echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (encode or decode).", + "type": "string" + }, + "options": { + "description": "The effective options after defaults were applied.", + "properties": { + "includeHeaders": { + "description": "Whether begin/end headers were emitted.", + "type": "boolean" + }, + "lineLength": { + "description": "Source bytes-per-line setting used on encode.", + "type": "integer" + }, + "strictMode": { + "description": "Whether strict decoding was enabled.", + "type": "boolean" + } + }, + "type": "object" + }, + "permissions": { + "description": "The permissions argument echoed back.", + "type": "string" + }, + "result": { + "description": "The XXEncode block (encode) or decoded text (decode).", + "type": "string" + }, + "success": { + "description": "Whether the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
file_file_size_calculator14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / itemSizeAdded value: +{ + "additionalProperties": false, + "description": "storageFit only: size of one item; must be greater than zero.", + "properties": { + "unit": { + "description": "Size unit (MB, MiB, etc.).", + "type": "string" + }, + "value": { + "description": "Numeric size.", + "minimum": 0, + "type": "number" + } + }, + "required": [ + "value", + "unit" + ], + "type": "object" +} - added
Input schema / properties / itemsAdded value: +{ + "description": "compare only: 2-32 sizes to rank by byte count.", + "items": { + "additionalProperties": false, + "properties": { + "label": { + "description": "Optional name; defaults to \"Item N\".", + "type": "string" + }, + "unit": { + "description": "Size unit (B, KB, MiB, Gbit, etc.).", + "type": "string" + }, + "value": { + "description": "Numeric size.", + "minimum": 0, + "type": "number" + } + }, + "required": [ + "value", + "unit" + ], + "type": "object" + }, + "maxItems": 32, + "minItems": 2, + "type": "array" +} - added
Input schema / properties / operation / descriptionAdded value: +"Which calculation to run. Each operation reads a different subset of the other fields." - added
Input schema / properties / operation / enumAdded value: +[ + "convert", + "compare", + "transferTime", + "storageFit" +] - added
Input schema / properties / sizeAdded value: +{ + "additionalProperties": false, + "description": "transferTime only: the amount of data to transfer.", + "properties": { + "unit": { + "description": "Size unit (B, KB, MiB, etc.).", + "type": "string" + }, + "value": { + "description": "Numeric size.", + "minimum": 0, + "type": "number" + } + }, + "required": [ + "value", + "unit" + ], + "type": "object" +} - added
Input schema / properties / speedAdded value: +{ + "additionalProperties": false, + "description": "transferTime only: the transfer rate; must be greater than zero.", + "properties": { + "unit": { + "description": "Speed unit: lowercase b = bits/s (Mbps), uppercase B = bytes/s (MBps).", + "enum": [ + "bps", + "Kbps", + "Mbps", + "Gbps", + "Tbps", + "Kibps", + "Mibps", + "Gibps", + "Bps", + "KBps", + "MBps", + "GBps", + "TBps", + "KiBps", + "MiBps", + "GiBps" + ], + "type": "string" + }, + "value": { + "description": "Numeric speed.", + "minimum": 0, + "type": "number" + } + }, + "required": [ + "value", + "unit" + ], + "type": "object" +} - added
Input schema / properties / targetCapacityAdded value: +{ + "additionalProperties": false, + "description": "storageFit only: total capacity to fill.", + "properties": { + "unit": { + "description": "Size unit (GB, GiB, TB, etc.).", + "type": "string" + }, + "value": { + "description": "Numeric size.", + "minimum": 0, + "type": "number" + } + }, + "required": [ + "value", + "unit" + ], + "type": "object" +} - added
Input schema / properties / unit / descriptionAdded value: +"convert only: unit of \"value\". Decimal (KB=1000), binary (KiB=1024), or bit units." - added
Input schema / properties / unit / enumAdded value: +[ + "B", + "KB", + "MB", + "GB", + "TB", + "PB", + "EB", + "KiB", + "MiB", + "GiB", + "TiB", + "PiB", + "EiB", + "bit", + "Kbit", + "Mbit", + "Gbit", + "Tbit", + "Kibit", + "Mibit", + "Gibit", + "Tibit" +] - added
Input schema / properties / value / descriptionAdded value: +"convert only: the numeric size to convert. Pair with \"unit\"." - added
Input schema / properties / value / minimumAdded value: +0 - changed
Input schema / requiredPrevious value: -[ - "operation", - "value", - "unit" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Echo of the requested operation.", + "type": "string" + }, + "result": { + "description": "Operation-specific payload.", + "properties": { + "binary": { + "description": "convert: size in B/KiB/MiB/GiB/TiB/PiB/EiB (numbers).", + "type": "object" + }, + "bits": { + "description": "convert: total bits as a string.", + "type": "string" + }, + "bytes": { + "description": "convert/compare: byte count as a string (BigInt-safe).", + "type": "string" + }, + "bytesPrecise": { + "description": "convert: exact byte count as a string.", + "type": "string" + }, + "decimal": { + "description": "convert: size in B/KB/MB/GB/TB/PB/EB (numbers).", + "type": "object" + }, + "humanBinary": { + "description": "convert: best-fit binary string, e.g. 1.4 GiB.", + "type": "string" + }, + "humanDecimal": { + "description": "convert/compare: best-fit decimal string, e.g. 1.5 GB.", + "type": "string" + }, + "humanDuration": { + "description": "transferTime: human duration, e.g. 1m 04s.", + "type": "string" + }, + "input": { + "description": "convert: the echoed value and unit.", + "type": "object" + }, + "items": { + "description": "storageFit: whole items that fit as a string; compare instead returns an array of index/label/bytes/humanDecimal/percentOfMax.", + "type": "string" + }, + "remainderBytes": { + "description": "storageFit: leftover bytes after the fit, as a string.", + "type": "string" + }, + "seconds": { + "description": "transferTime: transfer time in seconds.", + "type": "number" + }, + "size": { + "description": "transferTime: value, unit and bytes of the data.", + "type": "object" + }, + "speed": { + "description": "transferTime: value, unit and bytesPerSecond of the rate.", + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on a 200; errors return 400/500 with an \"error\" string.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
file_mime_type_lookup7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / extension / descriptionAdded value: +"File extension for lookupByExtension. A leading dot and case are ignored (pdf, .PDF and PDF are equivalent). Required only for lookupByExtension." - added
Input schema / properties / mimeTypeAdded value: +{ + "description": "Media type for lookupByMimeType, matched case-insensitively (for example application/pdf). Required only for lookupByMimeType.", + "type": "string" +} - added
Input schema / properties / operation / descriptionAdded value: +"Which lookup to run. lookupByExtension requires extension; lookupByMimeType requires mimeType; listAll takes neither." - added
Input schema / properties / operation / enumAdded value: +[ + "lookupByExtension", + "lookupByMimeType", + "listAll" +] - removed
Input schema / requiredRemoved value: -[ - "operation", - "extension" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation that was run, echoed back.", + "type": "string" + }, + "result": { + "description": "Operation-specific payload. lookupByExtension returns extension/mimeTypes/primary/description; lookupByMimeType returns mimeType/extensions/description/category/rfc; listAll returns entries.", + "properties": { + "category": { + "description": "Top-level IANA category (text, image, video, audio, application, font, model, multipart) or null (lookupByMimeType).", + "type": [ + "string", + "null" + ] + }, + "description": { + "description": "Human-readable description of the format, or null when unknown.", + "type": [ + "string", + "null" + ] + }, + "entries": { + "description": "Full curated table, one object per media type (listAll).", + "items": { + "properties": { + "category": { + "description": "Top-level IANA category.", + "type": "string" + }, + "description": { + "description": "Format description.", + "type": "string" + }, + "extensions": { + "description": "Extensions for this media type.", + "items": { + "description": "A file extension.", + "type": "string" + }, + "type": "array" + }, + "mimeType": { + "description": "The media type.", + "type": "string" + }, + "rfc": { + "description": "Defining RFC or null.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "extension": { + "description": "Normalized extension echoed back (lookupByExtension).", + "type": "string" + }, + "extensions": { + "description": "File extensions registered for the media type (lookupByMimeType).", + "items": { + "description": "A registered file extension.", + "type": "string" + }, + "type": "array" + }, + "mimeType": { + "description": "Normalized media type echoed back (lookupByMimeType).", + "type": "string" + }, + "mimeTypes": { + "description": "All media types registered for the extension, primary first (lookupByExtension).", + "items": { + "description": "A registered media type.", + "type": "string" + }, + "type": "array" + }, + "primary": { + "description": "First or preferred media type for the extension, or null if unknown (lookupByExtension).", + "type": [ + "string", + "null" + ] + }, + "rfc": { + "description": "Defining RFC for the media type, or null when none (lookupByMimeType).", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "success": { + "description": "True when the lookup succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
format_json3 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "indent": { + "default": "2", + "description": "Indentation for format: a space count as a string (for example 2 or 4), or the word tab. Ignored by minify, validate, and analyze.", + "type": "string" + }, + "input": { + "description": "Alias for json; used only when json is absent.", + "type": "string" + }, + "json": { + "description": "The JSON document to process. Alias input is also accepted. Blank input returns isValid false with empty output.", + "type": "string" + }, + "operation": { + "default": "format", + "description": "Action to perform. format pretty-prints, minify strips whitespace, validate only checks syntax (empty output), analyze returns structure statistics.", + "enum": [ + "format", + "minify", + "validate", + "analyze" + ], + "type": "string" + }, + "sortKeys": { + "default": false, + "description": "When true, sort object keys alphabetically (recursively) before formatting. Applies to format only.", + "type": "boolean" + } +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Structure statistics computed from the parsed JSON.", + "properties": { + "arrays": { + "description": "Number of array nodes.", + "type": "integer" + }, + "dataTypes": { + "description": "Counts of each value type (string, number, boolean, null, array, object).", + "type": "object" + }, + "largestArray": { + "description": "Element count of the largest array.", + "type": "integer" + }, + "maxDepth": { + "description": "Deepest nesting level reached.", + "type": "integer" + }, + "objects": { + "description": "Number of object nodes.", + "type": "integer" + }, + "totalKeys": { + "description": "Total object keys across the document.", + "type": "integer" + } + }, + "type": "object" + }, + "error": { + "description": "Parse error message when isValid is false, otherwise null.", + "type": [ + "string", + "null" + ] + }, + "isValid": { + "description": "Whether the input parsed as valid JSON.", + "type": "boolean" + }, + "jsonPaths": { + "description": "Per-node path and type entries describing the document structure.", + "items": { + "properties": { + "path": { + "description": "Dotted or bracketed path to the node.", + "type": "string" + }, + "type": { + "description": "Node type label (for example string, object with key count, array with length).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "output": { + "description": "Processed result: pretty JSON, minified JSON, an analysis report, or empty for validate and blank input.", + "type": "string" + }, + "validation": { + "description": "Validity plus size metrics for the submitted text.", + "properties": { + "error": { + "description": "Parse error message, otherwise null.", + "type": [ + "string", + "null" + ] + }, + "isValid": { + "description": "Whether the input parsed successfully.", + "type": "boolean" + }, + "lines": { + "description": "Newline-delimited line count of the submitted text.", + "type": "integer" + }, + "size": { + "description": "Character length of the submitted text.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
format_json_visualizer4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / inputAdded value: +{ + "description": "Alias for json (used when json is omitted).", + "type": "string" +} - added
Input schema / properties / json / descriptionAdded value: +"JSON document to parse and analyze, as a raw string. Blank input returns isValid:false with empty statistics; malformed input returns isValid:false with the parser error. The alias \"input\" is also accepted." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Parser error message when invalid; empty string otherwise.", + "type": "string" + }, + "isValid": { + "description": "True when the input parsed as well-formed JSON.", + "type": "boolean" + }, + "nodeCount": { + "description": "Total number of nodes (every value, including container nodes) in the parsed tree.", + "type": "integer" + }, + "parsed": { + "description": "The parsed JSON value (object, array, or scalar); null when invalid or blank." + }, + "statistics": { + "description": "Structural tallies; null when input is invalid or blank.", + "nullable": true, + "properties": { + "arrays": { + "description": "Number of array nodes.", + "type": "integer" + }, + "booleans": { + "description": "Number of boolean values.", + "type": "integer" + }, + "maxDepth": { + "description": "Maximum nesting depth (root = 0).", + "type": "integer" + }, + "nulls": { + "description": "Number of null values.", + "type": "integer" + }, + "numbers": { + "description": "Number of numeric values.", + "type": "integer" + }, + "objects": { + "description": "Number of object nodes.", + "type": "integer" + }, + "strings": { + "description": "Number of string values.", + "type": "integer" + }, + "totalKeys": { + "description": "Count of object keys across the whole tree.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
linux_bash_script_generator30 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / args / descriptionAdded value: +"Command-line options to parse. Each becomes an UPPER_SNAKE variable plus a case branch; required string/file/int args are validated after parsing." - added
Input schema / properties / args / items / additionalPropertiesAdded value: +false - added
Input schema / properties / args / items / properties / defaultAdded value: +{ + "description": "Initial value used when the flag is absent.", + "type": "string" +} - added
Input schema / properties / args / items / properties / descriptionAdded value: +{ + "description": "Help text shown in the generated usage block.", + "type": "string" +} - added
Input schema / properties / args / items / properties / long / descriptionAdded value: +"Long flag name without the dashes, e.g. verbose for --verbose." - added
Input schema / properties / args / items / properties / name / descriptionAdded value: +"Argument identifier; sanitised to an UPPER_SNAKE shell variable. Blank entries are dropped." - added
Input schema / properties / args / items / properties / required / defaultAdded value: +false - added
Input schema / properties / args / items / properties / required / descriptionAdded value: +"Enforce presence after parsing (ignored for bool)." - added
Input schema / properties / args / items / properties / short / descriptionAdded value: +"Single-character short flag without the dash, e.g. v for -v. Non-single-char values are skipped with a warning." - added
Input schema / properties / args / items / properties / type / defaultAdded value: +"string" - added
Input schema / properties / args / items / properties / type / descriptionAdded value: +"Value type. bool is a presence flag (no value, defaults false); others consume the next token." - added
Input schema / properties / args / items / properties / type / enumAdded value: +[ + "string", + "int", + "bool", + "file" +] - changed
Input schema / properties / args / items / requiredPrevious value: -[ - "name", - "short", - "long", - "type", - "required" -]New value: +[ + "name" +] - added
Input schema / properties / blocks / descriptionAdded value: +"Reusable hardening/utility sections to include, emitted in a fixed safe order regardless of array order." - added
Input schema / properties / blocks / items / additionalPropertiesAdded value: +false - added
Input schema / properties / blocks / items / properties / configAdded value: +{ + "description": "Per-block settings: check-deps deps default curl/jq; log-setup logFile; usage-function text; retry-loop max default 5; parallel concurrency default 4; lock-file lockFile; check-internet host default 8.8.8.8; custom name and content.", + "type": "object" +} - added
Input schema / properties / blocks / items / properties / type / descriptionAdded value: +"Which block to emit. Unknown types are skipped with a warning." - added
Input schema / properties / blocks / items / properties / type / enumAdded value: +[ + "check-root", + "check-deps", + "log-setup", + "tmpdir", + "usage-function", + "retry-loop", + "parallel", + "lock-file", + "trap-cleanup", + "check-internet", + "custom" +] - added
Input schema / properties / customBodyAdded value: +{ + "description": "Free-form shell appended as the main script body. Scanned for bash-only syntax when shebang is /bin/sh.", + "type": "string" +} - added
Input schema / properties / descriptionAdded value: +{ + "description": "Optional multi-line description placed in the header comment.", + "type": "string" +} - added
Input schema / properties / name / descriptionAdded value: +"Optional script name placed in the header comment." - added
Input schema / properties / operationAdded value: +{ + "default": "generate", + "description": "generate builds a script from the options below; presets ignores them and returns the 11 built-in templates.", + "enum": [ + "generate", + "presets" + ], + "type": "string" +} - added
Input schema / properties / shebang / defaultAdded value: +"#!/bin/bash" - added
Input schema / properties / shebang / descriptionAdded value: +"Interpreter line. Anything else falls back to bash. Choosing /bin/sh downgrades strict mode to set -eu and warns on bash-only blocks." - added
Input schema / properties / shebang / enumAdded value: +[ + "#!/bin/bash", + "#!/bin/sh", + "#!/usr/bin/env bash", + "#!/bin/zsh" +] - added
Input schema / properties / strictMode / defaultAdded value: +true - added
Input schema / properties / strictMode / descriptionAdded value: +"Emit strict-mode safety flags (set -euo pipefail and IFS). Disabling adds warnings about silent failures." - removed
Input schema / requiredRemoved value: -[ - "shebang", - "strictMode", - "name", - "args", - "blocks" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation performed (generate or presets).", + "type": "string" + }, + "result": { + "description": "For generate: the script payload. For presets: a presets array of templates.", + "properties": { + "explanation": { + "description": "Per-section breakdown of what each emitted part does.", + "items": { + "properties": { + "meaning": { + "description": "Plain-English description of that section.", + "type": "string" + }, + "section": { + "description": "Section label (e.g. Shebang, strict mode, trap-cleanup).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "script": { + "description": "The complete generated shell script text.", + "type": "string" + }, + "warnings": { + "description": "Human-readable lint/compatibility warnings (e.g. sh vs bash mismatches, missing trap-cleanup).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
linux_chmod15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / explanation / defaultAdded value: +true - added
Input schema / properties / explanation / descriptionAdded value: +"When true, includes the per-class breakdown and security_notes in each result." - added
Input schema / properties / path / defaultAdded value: +"/path/to/file" - added
Input schema / properties / path / descriptionAdded value: +"Target path interpolated verbatim into the command; not validated or accessed." - added
Input schema / properties / path / examplesAdded value: +[ + "/var/www/html" +] - added
Input schema / properties / permissions / defaultAdded value: +[ + "755" +] - added
Input schema / properties / permissions / descriptionAdded value: +"One or more permission specs, each processed independently. Each is octal (3 or 4 digits, 0-7 per digit; a 4th leading digit is special bits) or symbolic ([ugoa][+-=][rwxXstugo]). Invalid entries return a per-result error." - added
Input schema / properties / permissions / examplesAdded value: +[ + [ + "755", + "644", + "u+x" + ] +] - added
Input schema / properties / recursive / defaultAdded value: +false - added
Input schema / properties / recursive / descriptionAdded value: +"When true, adds the -R flag (chmod -R) to recurse into directories." - added
Input schema / properties / symbolic / defaultAdded value: +false - added
Input schema / properties / symbolic / descriptionAdded value: +"Hint that input is symbolic notation. Format is auto-detected regardless; this only influences UI/output framing." - changed
Input schema / requiredPrevious value: -[ - "permissions", - "recursive", - "path", - "symbolic", - "explanation" -]New value: +[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "results": { + "description": "One entry per input permission, in order.", + "items": { + "properties": { + "breakdown": { + "description": "Present when explanation=true. For octal: an Owner/Group/Others (and Special for 4-digit) map of value/permissions/description. For symbolic: who/operation/permissions/description.", + "type": "object" + }, + "command": { + "description": "The assembled command, e.g. \"chmod -R 755 /path/to/file\".", + "type": "string" + }, + "error": { + "description": "Present instead of command when the spec is neither valid octal nor symbolic.", + "type": "string" + }, + "is_octal": { + "description": "True if the spec parsed as octal notation.", + "type": "boolean" + }, + "is_symbolic": { + "description": "True if the spec parsed as symbolic notation.", + "type": "boolean" + }, + "permission": { + "description": "The trimmed permission spec, echoed back.", + "type": "string" + }, + "security_notes": { + "description": "Present when explanation=true. Advisories with type (warning/danger/success) and message.", + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "success": { + "description": "Always true on a 200 response.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
linux_cron4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "command": { + "default": "/path/to/script.sh", + "description": "Command appended verbatim after the expression to form the crontab line; not validated or executed.", + "type": "string" + }, + "dayOfMonth": { + "default": "*", + "description": "Day-of-month field (1-31). Accepts *, lists, ranges, steps.", + "type": "string" + }, + "dayOfWeek": { + "default": "*", + "description": "Day-of-week field (0-6, 0=Sunday). Accepts *, lists, ranges; numbers are named in the explanation.", + "type": "string" + }, + "generateExamples": { + "default": true, + "description": "When true, includes the curated examples array of common cron schedules.", + "type": "boolean" + }, + "hour": { + "default": "*", + "description": "Hour field (0-23). Accepts *, lists, ranges, steps (*/6).", + "type": "string" + }, + "minute": { + "default": "*", + "description": "Minute field (0-59). Accepts *, lists (0,30), ranges (0-29), steps (*/5).", + "type": "string" + }, + "month": { + "default": "*", + "description": "Month field (1-12). Accepts *, lists, ranges; numbers are named in the explanation.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "command": { + "description": "The command echoed back as used in cronLine.", + "type": "string" + }, + "cronLine": { + "description": "Full crontab line: the 5-field expression followed by the command.", + "type": "string" + }, + "error": { + "description": "Present instead of the result fields when generation fails (HTTP 400).", + "type": "string" + }, + "examples": { + "description": "Present when generateExamples is not false. Common cron schedules.", + "items": { + "type": "object" + }, + "type": "array" + }, + "explanation": { + "description": "Plain-English breakdown of each field plus a combined summary sentence.", + "properties": { + "dayOfMonth": { + "description": "Human-readable day-of-month description.", + "type": "string" + }, + "dayOfWeek": { + "description": "Human-readable day-of-week description (empty when *).", + "type": "string" + }, + "hour": { + "description": "Human-readable hour description.", + "type": "string" + }, + "minute": { + "description": "Human-readable minute description.", + "type": "string" + }, + "month": { + "description": "Human-readable month description.", + "type": "string" + }, + "summary": { + "description": "One-sentence summary of the whole schedule.", + "type": "string" + } + }, + "type": "object" + }, + "expression": { + "description": "The assembled 5-field cron expression, e.g. \"*/5 * * * *\".", + "type": "string" + }, + "nextRuns": { + "description": "Placeholder only — contains a note and the expression; actual next-run times are NOT computed (use time_cron_parser for real firing times).", + "properties": { + "expression": { + "description": "The cron expression echoed back.", + "type": "string" + }, + "note": { + "description": "Static notice that next runs are not calculated here.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on a 200 response.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
linux_disk_usage_calculator25 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / bytesAdded value: +{ + "default": 0, + "description": "humanize: byte count to format. Required for the humanize operation.", + "type": "integer" +} - added
Input schema / properties / input / descriptionAdded value: +"Structured input object for raidCalculator, partitionPlanner, and findCommand. May be supplied as this nested object or as top-level fields alongside operation." - added
Input schema / properties / input / properties / diskCount / descriptionAdded value: +"raidCalculator: number of disks in the array; floored to an integer and must meet the level minimum." - added
Input schema / properties / input / properties / diskCount / minimumAdded value: +2 - added
Input schema / properties / input / properties / diskSizeBytes / descriptionAdded value: +"raidCalculator: capacity of one disk in bytes; must be positive." - added
Input schema / properties / input / properties / diskSizeBytes / minimumAdded value: +1 - changed
Input schema / properties / input / properties / diskSizeBytes / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / input / properties / level / descriptionAdded value: +"raidCalculator: RAID/RAIDZ level. Minimum disk count is enforced per level (raid0/raid1 at least 2, raid5/raidz1 at least 3, raid6/raid10/raidz2 at least 4, raidz3 at least 5)." - added
Input schema / properties / input / properties / level / enumAdded value: +[ + "raid0", + "raid1", + "raid5", + "raid6", + "raid10", + "raidz1", + "raidz2", + "raidz3" +] - added
Input schema / properties / input / properties / maxSizeAdded value: +{ + "description": "findCommand: upper size bound (find -size -). Same suffix rules as minSize.", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / input / properties / minSizeAdded value: +{ + "description": "findCommand: lower size bound (find -size +). Accepts c/k/M/G/T suffix; bare numbers default to MiB (M).", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / input / properties / mtimeDaysAdded value: +{ + "description": "findCommand: -mtime filter. Positive = modified within N days; negative = older than N days; 0 = last 24 hours.", + "type": "integer" +} - added
Input schema / properties / input / properties / nameAdded value: +{ + "description": "findCommand: filename glob for -name; shell-escaped.", + "type": "string" +} - added
Input schema / properties / input / properties / partitionsAdded value: +{ + "description": "partitionPlanner: partition specs. Each sized by percent, bytes/sizeBytes, percentOrBytes, or remaining:true; optional name, mountPoint, fileSystem (default ext4).", + "items": { + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / input / properties / pathAdded value: +{ + "default": ".", + "description": "findCommand: starting directory for the find command. Shell-escaped.", + "type": "string" +} - added
Input schema / properties / input / properties / totalBytesAdded value: +{ + "description": "partitionPlanner: total disk size in bytes to divide; must be positive.", + "minimum": 1, + "type": "number" +} - added
Input schema / properties / input / properties / typeAdded value: +{ + "description": "findCommand: restrict to regular files (f) or directories (d).", + "enum": [ + "f", + "d" + ], + "type": "string" +} - removed
Input schema / properties / input / requiredRemoved value: -[ - "level", - "diskCount", - "diskSizeBytes" -] - added
Input schema / properties / operation / descriptionAdded value: +"Selects the computation. Determines which other fields are read." - added
Input schema / properties / operation / enumAdded value: +[ + "parseDu", + "parseDf", + "raidCalculator", + "partitionPlanner", + "findCommand", + "humanize" +] - added
Input schema / properties / systemAdded value: +{ + "default": "iec", + "description": "humanize: unit system. iec uses 1024 (KiB/MiB/GiB); si uses 1000 (KB/MB/GB).", + "enum": [ + "iec", + "si" + ], + "type": "string" +} - added
Input schema / properties / textAdded value: +{ + "description": "Raw du or df command output to parse. Required for parseDu and parseDf; ignored otherwise. Auto-detects human (du -h) vs raw-byte columns.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "input" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Echoes the requested operation.", + "type": "string" + }, + "result": { + "description": "Operation-specific output.", + "properties": { + "command": { + "description": "findCommand: the assembled, shell-escaped find command string.", + "type": "string" + }, + "entries": { + "description": "parseDu: parsed du rows, each with size (bytes), sizeHuman, path, depth.", + "items": { + "type": "object" + }, + "type": "array" + }, + "explanation": { + "description": "findCommand: plain-English breakdown of each command clause.", + "items": { + "type": "string" + }, + "type": "array" + }, + "faultTolerance": { + "description": "raidCalculator: number of disk failures the array survives.", + "type": "integer" + }, + "filesystems": { + "description": "parseDf: each with filesystem, sizeBytes, usedBytes, availableBytes, usePercent, mountPoint.", + "items": { + "type": "object" + }, + "type": "array" + }, + "leftoverBytes": { + "description": "partitionPlanner: unallocated bytes after planning.", + "type": "integer" + }, + "output": { + "description": "humanize: the formatted size string (e.g. 4.00 GiB).", + "type": "string" + }, + "partitions": { + "description": "partitionPlanner: each with name, sizeBytes, percent, mountPoint, fileSystem.", + "items": { + "type": "object" + }, + "type": "array" + }, + "redundancyOverhead": { + "description": "raidCalculator: raw bytes consumed by redundancy (total raw minus usable).", + "type": "integer" + }, + "totalBytes": { + "description": "parseDu / partitionPlanner: total bytes.", + "type": "integer" + }, + "usableBytes": { + "description": "raidCalculator: usable array capacity in bytes.", + "type": "integer" + }, + "warnings": { + "description": "Advisory messages (skipped lines, RAID redundancy/URE caveats, over-allocation).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "True when the operation completed.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
linux_env_variable_manager20 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / input / additionalPropertiesAdded value: +false - added
Input schema / properties / input / descriptionAdded value: +"format only. The variable list plus target format to render." - added
Input schema / properties / input / properties / format / descriptionAdded value: +"Target output format." - added
Input schema / properties / input / properties / format / enumAdded value: +[ + "env", + "shell-export", + "docker-compose", + "docker-compose-list", + "k8s-configmap", + "k8s-secret", + "github-actions", + "json", + "yaml" +] - added
Input schema / properties / input / properties / name / descriptionAdded value: +"k8s-configmap/k8s-secret only. metadata.name of the generated resource." - added
Input schema / properties / input / properties / namespace / descriptionAdded value: +"k8s-configmap/k8s-secret only. metadata.namespace of the generated resource." - added
Input schema / properties / input / properties / variables / descriptionAdded value: +"Variables to emit, in order." - added
Input schema / properties / input / properties / variables / items / additionalPropertiesAdded value: +false - added
Input schema / properties / input / properties / variables / items / properties / commentAdded value: +{ + "description": "Optional inline comment for the variable.", + "type": "string" +} - added
Input schema / properties / input / properties / variables / items / properties / key / descriptionAdded value: +"Variable name, e.g. DATABASE_URL." - added
Input schema / properties / input / properties / variables / items / properties / secretAdded value: +{ + "default": false, + "description": "If true, routed to a k8s Secret (base64 data); hint-only for other formats.", + "type": "boolean" +} - added
Input schema / properties / input / properties / variables / items / properties / value / descriptionAdded value: +"Variable value (unquoted)." - changed
Input schema / properties / input / requiredPrevious value: -[ - "variables", - "format", - "name", - "namespace" -]New value: +[ + "variables", + "format" +] - added
Input schema / properties / operation / defaultAdded value: +"parse" - added
Input schema / properties / operation / descriptionAdded value: +"Mode. \"parse\" and \"audit\" read the \"text\" field; \"format\" reads the \"input\" object; \"presets\" ignores all other fields and returns the static preset list." - added
Input schema / properties / operation / enumAdded value: +[ + "parse", + "format", + "audit", + "presets" +] - added
Input schema / properties / textAdded value: +{ + "description": "parse/audit only. Raw .env file body (\"KEY=value\" lines, \"#\" comments, optional \"export \" prefix, single/double quotes, multi-line double-quoted values).", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "input" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation that was executed, echoed back.", + "type": "string" + }, + "result": { + "description": "Operation-specific payload. \"parse\" returns variables (each key/value/quote/comment/lineNumber) and warnings[]; \"format\" returns output (the rendered snippet string) and warnings[]; \"audit\" returns findings[] (each key/severity/issue/suggestion); \"presets\" returns presets[] (each id/name/description/variables).", + "type": "object" + }, + "success": { + "description": "Always true on a 2xx response.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
linux_iptables_rule_generator37 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / allowEstablished / defaultAdded value: +false - added
Input schema / properties / allowEstablished / descriptionAdded value: +"Prepend an INPUT rule accepting ESTABLISHED and RELATED connections via conntrack." - added
Input schema / properties / allowLoopback / defaultAdded value: +false - added
Input schema / properties / allowLoopback / descriptionAdded value: +"Prepend an INPUT rule accepting all traffic on the loopback interface." - added
Input schema / properties / defaults / additionalPropertiesAdded value: +false - added
Input schema / properties / defaults / descriptionAdded value: +"Default chain policies applied when generating (defaults: input ACCEPT, forward DROP, output ACCEPT)." - added
Input schema / properties / defaults / properties / forward / defaultAdded value: +"DROP" - added
Input schema / properties / defaults / properties / forward / descriptionAdded value: +"Default policy for the FORWARD chain." - added
Input schema / properties / defaults / properties / forward / enumAdded value: +[ + "ACCEPT", + "DROP", + "REJECT" +] - added
Input schema / properties / defaults / properties / input / defaultAdded value: +"ACCEPT" - added
Input schema / properties / defaults / properties / input / descriptionAdded value: +"Default policy for the INPUT chain." - added
Input schema / properties / defaults / properties / input / enumAdded value: +[ + "ACCEPT", + "DROP", + "REJECT" +] - added
Input schema / properties / defaults / properties / output / defaultAdded value: +"ACCEPT" - added
Input schema / properties / defaults / properties / output / descriptionAdded value: +"Default policy for the OUTPUT chain." - added
Input schema / properties / defaults / properties / output / enumAdded value: +[ + "ACCEPT", + "DROP", + "REJECT" +] - removed
Input schema / properties / defaults / requiredRemoved value: -[ - "input", - "forward", - "output" -] - added
Input schema / properties / logDropsAdded value: +{ + "default": false, + "description": "Append a rate-limited LOG rule on INPUT before the default policy applies.", + "type": "boolean" +} - added
Input schema / properties / operationAdded value: +{ + "default": "generate", + "description": "generate builds firewall scripts from the input fields below; presets ignores all other fields and returns the 9 built-in templates.", + "enum": [ + "generate", + "presets" + ], + "type": "string" +} - added
Input schema / properties / rules / descriptionAdded value: +"Ordered firewall rules. Each rule maps to one iptables -A line (and an nftables equivalent). Invalid rows are silently skipped." - added
Input schema / properties / rules / items / additionalPropertiesAdded value: +false - added
Input schema / properties / rules / items / properties / action / descriptionAdded value: +"Jump target for matched packets. SNAT and DNAT need natTarget; MASQUERADE needs an interface." - added
Input schema / properties / rules / items / properties / action / enumAdded value: +[ + "ACCEPT", + "DROP", + "REJECT", + "LOG", + "SNAT", + "DNAT", + "MASQUERADE" +] - added
Input schema / properties / rules / items / properties / chain / descriptionAdded value: +"Target chain. PREROUTING and POSTROUTING route into the nat table." - added
Input schema / properties / rules / items / properties / chain / enumAdded value: +[ + "INPUT", + "OUTPUT", + "FORWARD", + "PREROUTING", + "POSTROUTING" +] - added
Input schema / properties / rules / items / properties / destinationAdded value: +{ + "description": "Destination IPv4/IPv6 address or CIDR. An invalid value produces a warning.", + "type": "string" +} - added
Input schema / properties / rules / items / properties / destinationPort / descriptionAdded value: +"Destination port: single, range, or comma list." - added
Input schema / properties / rules / items / properties / interfaceAdded value: +{ + "description": "Network interface. Bound with -i on INPUT/FORWARD/PREROUTING and -o on OUTPUT/POSTROUTING.", + "type": "string" +} - added
Input schema / properties / rules / items / properties / natTargetAdded value: +{ + "description": "Rewrite target for DNAT (host and port) or SNAT (source address).", + "type": "string" +} - added
Input schema / properties / rules / items / properties / protocol / descriptionAdded value: +"Layer-4 protocol match. Omit or use all to match any protocol." - added
Input schema / properties / rules / items / properties / protocol / enumAdded value: +[ + "tcp", + "udp", + "icmp", + "all" +] - added
Input schema / properties / rules / items / properties / ruleComment / descriptionAdded value: +"Free-text note emitted as an iptables comment match and an nftables comment." - added
Input schema / properties / rules / items / properties / sourceAdded value: +{ + "description": "Source IPv4/IPv6 address or CIDR (such as 10.0.0.0/8). An invalid value produces a warning, not an error.", + "type": "string" +} - added
Input schema / properties / rules / items / properties / sourcePortAdded value: +{ + "description": "Source port: single (80), range (1000 colon 2000), or comma list (80 then 443). A list emits an -m multiport match.", + "type": "string" +} - changed
Input schema / properties / rules / items / requiredPrevious value: -[ - "chain", - "protocol", - "destinationPort", - "action", - "ruleComment" -]New value: +[ + "chain", + "action" +] - removed
Input schema / requiredRemoved value: -[ - "defaults", - "allowLoopback", - "allowEstablished", - "rules" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation performed (generate or presets).", + "type": "string" + }, + "result": { + "description": "For generate: the produced scripts. For presets: a presets array of named templates.", + "properties": { + "explanation": { + "description": "Per-line breakdown pairing each emitted rule with a plain-English meaning.", + "items": { + "properties": { + "meaning": { + "description": "Plain-English description of what the line does.", + "type": "string" + }, + "rule": { + "description": "The emitted iptables line.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "files": { + "description": "Suggested target file name and install path for each generated script.", + "items": { + "properties": { + "name": { + "description": "Suggested file name (rules.v4 or nft.conf).", + "type": "string" + }, + "path": { + "description": "Conventional install path for the script.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "iptables": { + "description": "Complete iptables-restore script (filter table, plus nat table when NAT rules exist).", + "type": "string" + }, + "nftables": { + "description": "Equivalent nftables script (table inet filter, plus table ip nat when NAT rules exist).", + "type": "string" + }, + "warnings": { + "description": "Human-readable lockout and validation warnings (invalid IP, SNAT in wrong chain, SSH open to the world, and similar).", + "items": { + "description": "A warning message.", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
linux_linux_command_builder10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / fields / additionalPropertiesAdded value: +true - added
Input schema / properties / fields / descriptionAdded value: +"Per-tool option map whose accepted keys depend on the chosen tool (for example find uses path, namePattern, size, mtime, fileType, executor; rsync uses src, dst, archive, delete; tar uses operation, compression, output). Call operation tools to discover the exact field names for each command. Omitted or blank fields are skipped; unknown keys are ignored." - removed
Input schema / properties / fields / propertiesRemoved value: -{ - "fileType": { - "type": "string" - }, - "mtime": { - "type": "string" - }, - "path": { - "type": "string" - }, - "size": { - "type": "string" - } -} - removed
Input schema / properties / fields / requiredRemoved value: -[ - "path", - "size", - "mtime", - "fileType" -] - added
Input schema / properties / operationAdded value: +{ + "default": "build", + "description": "build assembles a command from tool plus fields; tools lists every supported command and its sub-form fields; presets lists curated ready-made field sets. Defaults to build.", + "enum": [ + "build", + "tools", + "presets" + ], + "type": "string" +} - added
Input schema / properties / tool / descriptionAdded value: +"Which Linux command to build (required only when operation is build). Unknown values return HTTP 400." - added
Input schema / properties / tool / enumAdded value: +[ + "find", + "grep", + "sed", + "awk", + "rsync", + "tar", + "curl", + "ssh", + "scp", + "ffmpeg", + "imagemagick" +] - removed
Input schema / requiredRemoved value: -[ - "tool", - "fields" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation that was performed (build, tools, or presets).", + "type": "string" + }, + "result": { + "description": "Operation payload. For build it holds command, explanation, warnings, and files; for tools/presets it wraps the respective catalogue array.", + "properties": { + "command": { + "description": "The assembled, shell-quoted command line (build only).", + "type": "string" + }, + "explanation": { + "description": "Ordered per-flag breakdown of the built command (build only).", + "items": { + "properties": { + "flag": { + "description": "The flag or token, for example -name.", + "type": "string" + }, + "meaning": { + "description": "What that flag or token does.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "files": { + "description": "Paths the command reads or writes and their role (build only).", + "items": { + "properties": { + "description": { + "description": "How the command uses this path.", + "type": "string" + }, + "name": { + "description": "The file or path referenced.", + "type": "string" + }, + "role": { + "description": "Whether the path is read, written, or both.", + "enum": [ + "input", + "output", + "in-out" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "presets": { + "description": "Curated preset catalogue (only when operation is presets).", + "items": { + "description": "A preset: id, label, description, tool, fields.", + "type": "object" + }, + "type": "array" + }, + "tools": { + "description": "Command catalogue (only when operation is tools).", + "items": { + "description": "A tool definition: id, label, description, fields, presets.", + "type": "object" + }, + "type": "array" + }, + "warnings": { + "description": "Human-readable safety warnings for destructive or risky options (build only).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Always true when the request succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
linux_log_parser17 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / aggregateAdded value: +{ + "additionalProperties": false, + "description": "Optional nested object form of the aggregate settings; when present it supersedes the top-level by, metric, and field fields.", + "properties": { + "by": { + "description": "Entry field name to group on.", + "type": "string" + }, + "field": { + "description": "Numeric field aggregated when metric is sum, avg, min, or max.", + "type": "string" + }, + "metric": { + "description": "Aggregation metric to apply.", + "enum": [ + "count", + "sum", + "avg", + "min", + "max" + ], + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / byAdded value: +{ + "description": "Entry field name to group on for the aggregate operation (for example ip, status, or uri). An empty value yields no groups.", + "type": "string" +} - added
Input schema / properties / customPatternAdded value: +{ + "description": "JavaScript regular expression applied per line when format is custom. Named capture groups become field names; otherwise groups are named group1, group2 and so on. Used only when operation is parse with format custom.", + "type": "string" +} - added
Input schema / properties / entriesAdded value: +{ + "description": "Array of already-parsed entry objects (the parse result entries). Required for the filter, aggregate, and convert operations; non-object items are ignored.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / expressionAdded value: +{ + "description": "Filter mini-language for the filter operation. Each clause is a field plus a comparison operator plus a value; combine clauses with the word AND surrounded by spaces. Supported operators are equals, not-equals, regex-match, regex-not-match, greater-than, less-than, greater-or-equal, and less-or-equal. Regex operators are case-insensitive. An empty expression returns all entries.", + "type": "string" +} - added
Input schema / properties / fieldAdded value: +{ + "description": "Numeric entry field aggregated by sum, avg, min, or max in the aggregate operation (for example size). Ignored when metric is count.", + "type": "string" +} - added
Input schema / properties / format / defaultAdded value: +"auto" - added
Input schema / properties / format / descriptionAdded value: +"Log format for the parse operation. auto scores every built-in parser and picks the best match. custom applies customPattern. Used only when operation is parse." - added
Input schema / properties / format / enumAdded value: +[ + "auto", + "apache-common", + "apache-combined", + "nginx-access", + "syslog-3164", + "syslog-5424", + "jsonl", + "systemd-journal-export", + "custom" +] - added
Input schema / properties / metricAdded value: +{ + "default": "count", + "description": "Aggregation metric for the aggregate operation. count tallies entries per group; sum, avg, min, and max are computed over the numeric field values.", + "enum": [ + "count", + "sum", + "avg", + "min", + "max" + ], + "type": "string" +} - added
Input schema / properties / operation / defaultAdded value: +"parse" - added
Input schema / properties / operation / descriptionAdded value: +"Pipeline stage to run. parse turns raw log text into entries (default). filter narrows entries with an expression. aggregate groups entries into a metric. convert serialises entries to a chosen format. presets lists built-in analysis recipes and ignores all other fields." - added
Input schema / properties / operation / enumAdded value: +[ + "parse", + "filter", + "aggregate", + "convert", + "presets" +] - added
Input schema / properties / text / descriptionAdded value: +"Raw log text to parse, one record per line (parse operation). Capped at 5 MB; larger input is truncated with a warning. Required for the parse operation." - removed
Input schema / requiredRemoved value: -[ - "text", - "format", - "operation" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Echo of the operation that was run.", + "type": "string" + }, + "result": { + "description": "Operation payload. For parse: entries, fieldNames, format, warnings. For filter: result (array of matching entries). For aggregate: groups, metric, by, field. For convert: result (the serialised string). For presets: presets (array of recipe objects).", + "properties": { + "by": { + "description": "Field grouped on (aggregate operation).", + "type": "string" + }, + "entries": { + "description": "Parsed entry objects (parse operation). Each is a flat map of field name to value.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "field": { + "description": "Numeric field aggregated, when applicable (aggregate operation).", + "type": "string" + }, + "fieldNames": { + "description": "Distinct field names across the parsed entries, in first-seen order (parse operation).", + "items": { + "type": "string" + }, + "type": "array" + }, + "format": { + "description": "The format actually used to parse, after auto-detection (parse operation).", + "type": "string" + }, + "groups": { + "description": "Aggregation buckets sorted by value descending then key ascending (aggregate operation).", + "items": { + "properties": { + "key": { + "description": "Group key (the stringified value of the by field).", + "type": "string" + }, + "value": { + "description": "Computed metric for the group.", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "metric": { + "description": "Aggregation metric applied (aggregate operation).", + "type": "string" + }, + "presets": { + "description": "Built-in analysis recipes (presets operation), each with id, name, description, and optional filter and aggregate.", + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "result": { + "description": "Array of matching entries (filter) or the serialised output string (convert)." + }, + "warnings": { + "description": "Non-fatal messages such as no-match notices or the 5 MB truncation notice.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "True when the operation completed without error.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
linux_package_manager_commands14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / action / descriptionAdded value: +"translate only. The package operation to render for each target manager. Required when operation is \"translate\"." - added
Input schema / properties / action / enumAdded value: +[ + "install", + "remove", + "update", + "upgrade", + "search", + "list-installed", + "list-files", + "info", + "autoremove", + "clean", + "add-repo", + "pin-version", + "history", + "check-updates" +] - added
Input schema / properties / from / descriptionAdded value: +"translate only, optional. The source package manager you are translating from; recorded in the output notes for context only." - added
Input schema / properties / from / enumAdded value: +[ + "apt", + "dnf", + "pacman", + "apk", + "zypper", + "pkg", + "brew", + "snap", + "flatpak", + "nix" +] - added
Input schema / properties / operation / defaultAdded value: +"translate" - added
Input schema / properties / operation / descriptionAdded value: +"Query mode. \"translate\" needs action (and usually packages); \"crossReferenceTable\", \"packageNameMap\" and \"presets\" ignore the other fields and return their full static dataset." - added
Input schema / properties / operation / enumAdded value: +[ + "translate", + "crossReferenceTable", + "packageNameMap", + "presets" +] - added
Input schema / properties / packages / descriptionAdded value: +"translate only. Package name(s) substituted into the {pkgs} placeholder. A single whitespace-separated string is also accepted. Optional; install/remove/search-style actions warn and emit a <package> placeholder if omitted." - added
Input schema / properties / packages / examplesAdded value: +[ + [ + "nginx" + ] +] - added
Input schema / properties / to / descriptionAdded value: +"translate only, optional. Target package managers to render commands for, each one of apt/dnf/pacman/apk/zypper/pkg/brew/snap/flatpak/nix. Empty or omitted renders all 9." - added
Input schema / properties / to / examplesAdded value: +[ + [ + "apt", + "dnf", + "pacman" + ] +] - changed
Input schema / requiredPrevious value: -[ - "operation", - "action", - "packages", - "from", - "to" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation that was executed, echoed back.", + "type": "string" + }, + "result": { + "description": "Operation-specific payload. \"translate\" returns action, packages (array), from (string or null), to (array of manager ids), commands (object keyed by manager with command, optional alternatives array, optional notes), plus warnings (array) and notes (array). \"crossReferenceTable\" returns actions (array), managers (array) and cells (action to manager to command + optional notes). \"packageNameMap\" returns an array of canonical/description/names where names maps each manager to its package name (empty if none). \"presets\" returns an array of id/label/description/action/packages.", + "type": "object" + }, + "success": { + "description": "Whether the request succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
linux_process_signal_reference17 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / category / defaultAdded value: +"all" - added
Input schema / properties / category / descriptionAdded value: +"lookup only. Restricts results to one behaviour bucket. all returns every signal." - added
Input schema / properties / category / enumAdded value: +[ + "all", + "termination", + "stop", + "ignore", + "core" +] - added
Input schema / properties / nameAdded value: +{ + "description": "byName only. Signal name with or without the SIG prefix, case-insensitive (e.g. SIGTERM, term).", + "examples": [ + "SIGTERM" + ], + "type": "string" +} - added
Input schema / properties / numberAdded value: +{ + "description": "byNumber only. Signal number to resolve on the chosen platform (e.g. 9 for SIGKILL on Linux).", + "examples": [ + 9 + ], + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / operation / defaultAdded value: +"lookup" - added
Input schema / properties / operation / descriptionAdded value: +"Query mode. \"lookup\" filters the full table (uses query/category/platform); \"byName\" returns one signal (uses name); \"byNumber\" returns one signal (uses number/platform); \"categories\" lists category buckets (ignores other fields)." - added
Input schema / properties / operation / enumAdded value: +[ + "lookup", + "byName", + "byNumber", + "categories" +] - added
Input schema / properties / platform / defaultAdded value: +"linux" - added
Input schema / properties / platform / descriptionAdded value: +"lookup/byNumber. Selects per-platform signal numbers, which differ across architectures (e.g. SIGUSR1 is 10 on Linux, 30 on macOS/FreeBSD)." - added
Input schema / properties / platform / enumAdded value: +[ + "linux", + "macos", + "freebsd", + "posix" +] - added
Input schema / properties / query / defaultAdded value: +"" - added
Input schema / properties / query / descriptionAdded value: +"lookup only. Free-text filter matched against signal name, short name, number, description, default action and senders. A digit-only value matches the signal number exactly; a full SIG name matches that signal only. Empty returns all." - added
Input schema / properties / query / examplesAdded value: +[ + "SIGKILL" +] - removed
Input schema / requiredRemoved value: -[ - "operation", - "query", - "platform", - "category" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation that was executed, echoed back.", + "type": "string" + }, + "result": { + "description": "Operation-specific payload. lookup returns signals (array of signal entries) and total (integer); byName/byNumber return a single signal entry; categories returns a categories array of id/label/description. A signal entry has name, number, default (default kernel action), description, sender (array), traps, examples (kill and trap shell snippets), and optional notes.", + "type": "object" + }, + "success": { + "description": "Whether the lookup succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
linux_ssh_config_generator9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / inputAdded value: +{ + "additionalProperties": false, + "description": "Required when operation=generate. May also be supplied bare (its fields at the top level alongside operation).", + "properties": { + "clientHosts": { + "description": "Client Host blocks for ~/.ssh/config. Used when mode is \"client\" or \"both\". Entries with neither alias nor hostname are dropped.", + "items": { + "additionalProperties": false, + "properties": { + "alias": { + "description": "Host alias matched on the ssh command line; defaults to hostname if omitted.", + "type": "string" + }, + "controlMaster": { + "description": "Connection multiplexing master.", + "enum": [ + "auto", + "no", + "yes" + ], + "type": "string" + }, + "controlPath": { + "description": "ControlPath socket for multiplexed connections, e.g. ~/.ssh/cm-%r@%h:%p.", + "type": "string" + }, + "controlPersist": { + "description": "ControlPersist duration after last client disconnects, e.g. 10m.", + "type": "string" + }, + "forwardAgent": { + "description": "ForwardAgent — warns when true (agent-hijack risk).", + "type": "boolean" + }, + "hostname": { + "description": "Real DNS name or IP to connect to (HostName); defaults to alias if omitted.", + "type": "string" + }, + "identitiesOnly": { + "description": "IdentitiesOnly yes — use only this key, ignore agent keys.", + "type": "boolean" + }, + "identityFile": { + "description": "Private key path (IdentityFile), e.g. ~/.ssh/id_ed25519.", + "type": "string" + }, + "localForward": { + "description": "LocalForward entries, each \"localPort remoteHost:remotePort\".", + "items": { + "type": "string" + }, + "type": "array" + }, + "port": { + "description": "Remote TCP port (Port directive); default 22.", + "maximum": 65535, + "minimum": 1, + "type": "integer" + }, + "proxyJump": { + "description": "ProxyJump bastion/jump-host chain (user@host:port).", + "type": "string" + }, + "remoteForward": { + "description": "RemoteForward entries, each \"remotePort localHost:localPort\".", + "items": { + "type": "string" + }, + "type": "array" + }, + "strictHostKeyChecking": { + "description": "Host-key policy; \"no\" warns (MITM risk).", + "enum": [ + "yes", + "no", + "ask", + "accept-new" + ], + "type": "string" + }, + "user": { + "description": "Default login username (User directive).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "mode": { + "description": "Which side(s) to emit. \"client\" fills clientConfig from clientHosts; \"server\" fills serverConfig from serverSettings; \"both\" emits both.", + "enum": [ + "client", + "server", + "both" + ], + "type": "string" + }, + "serverSettings": { + "additionalProperties": false, + "description": "sshd_config daemon directives. Used when mode is \"server\" or \"both\".", + "properties": { + "allowAgentForwarding": { + "description": "AllowAgentForwarding; true warns.", + "type": "boolean" + }, + "allowGroups": { + "description": "AllowGroups login whitelist.", + "items": { + "type": "string" + }, + "type": "array" + }, + "allowTcpForwarding": { + "description": "AllowTcpForwarding toggle.", + "type": "boolean" + }, + "allowUsers": { + "description": "AllowUsers login whitelist.", + "items": { + "type": "string" + }, + "type": "array" + }, + "ciphers": { + "description": "Comma-separated Ciphers; weak/CBC/arcfour tokens warn.", + "type": "string" + }, + "clientAliveCountMax": { + "description": "ClientAliveCountMax unanswered probes before disconnect.", + "minimum": 0, + "type": "integer" + }, + "clientAliveInterval": { + "description": "ClientAliveInterval keepalive seconds.", + "minimum": 0, + "type": "integer" + }, + "denyUsers": { + "description": "DenyUsers login blacklist.", + "items": { + "type": "string" + }, + "type": "array" + }, + "hostKeyAlgorithms": { + "description": "Comma-separated HostKeyAlgorithms; ssh-rsa/ssh-dss warn.", + "type": "string" + }, + "kexAlgorithms": { + "description": "Comma-separated KexAlgorithms; SHA-1 and NIST-curve tokens warn.", + "type": "string" + }, + "listenAddress": { + "description": "ListenAddress bind addresses.", + "items": { + "type": "string" + }, + "type": "array" + }, + "macs": { + "description": "Comma-separated MACs; MD5/SHA1 tokens warn.", + "type": "string" + }, + "maxAuthTries": { + "description": "MaxAuthTries per connection; high values warn.", + "minimum": 0, + "type": "integer" + }, + "maxSessions": { + "description": "MaxSessions concurrent sessions per connection.", + "minimum": 0, + "type": "integer" + }, + "passwordAuthentication": { + "description": "PasswordAuthentication; true warns.", + "type": "boolean" + }, + "permitRootLogin": { + "description": "PermitRootLogin; \"yes\" warns.", + "enum": [ + "yes", + "no", + "without-password", + "forced-commands-only", + "prohibit-password" + ], + "type": "string" + }, + "port": { + "description": "sshd listen Port; warns when 22.", + "maximum": 65535, + "minimum": 1, + "type": "integer" + }, + "pubkeyAuthentication": { + "description": "PubkeyAuthentication; false warns.", + "type": "boolean" + }, + "x11Forwarding": { + "description": "X11Forwarding; true warns.", + "type": "boolean" + } + }, + "type": "object" + } + }, + "required": [ + "mode" + ], + "type": "object" +} - removed
Input schema / properties / modeRemoved value: -{ - "type": "string" -} - added
Input schema / properties / operation / defaultAdded value: +"generate" - added
Input schema / properties / operation / descriptionAdded value: +"Mode selector. \"generate\" builds config from \"input\"; \"presets\" ignores \"input\" and returns example requests." - added
Input schema / properties / operation / enumAdded value: +[ + "generate", + "presets" +] - removed
Input schema / properties / serverSettingsRemoved value: -{ - "properties": { - "passwordAuthentication": { - "type": "boolean" - }, - "permitRootLogin": { - "type": "string" - }, - "port": { - "type": "integer" - }, - "pubkeyAuthentication": { - "type": "boolean" - } - }, - "required": [ - "port", - "permitRootLogin", - "passwordAuthentication", - "pubkeyAuthentication" - ], - "type": "object" -} - changed
Input schema / requiredPrevious value: -[ - "operation", - "mode", - "serverSettings" -]New value: +[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation echoed back (generate or presets).", + "type": "string" + }, + "result": { + "description": "For generate, the generated config and analysis. For presets, a \"presets\" array of example requests.", + "properties": { + "clientConfig": { + "description": "Generated ~/.ssh/config text; empty when mode is \"server\".", + "type": "string" + }, + "explanation": { + "description": "Per-directive explanations actually emitted.", + "items": { + "properties": { + "directive": { + "description": "SSH directive name.", + "type": "string" + }, + "meaning": { + "description": "Plain-language description of the directive.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "presets": { + "description": "Present when operation=presets; each is an example request with id, name, description, input.", + "items": { + "type": "object" + }, + "type": "array" + }, + "serverConfig": { + "description": "Generated /etc/ssh/sshd_config text; empty when mode is \"client\".", + "type": "string" + }, + "warnings": { + "description": "Security advisories for weak or risky directives.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on a 200 response.", + "type": "boolean" + } + }, + "type": "object" +}
- Removed
linux_systemd - Changed
linux_systemd_unit_generator19 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / description / descriptionAdded value: +"Human-readable unit summary; emitted as Description= in [Unit]." - added
Input schema / properties / filenameAdded value: +{ + "description": "Output unit filename. Defaults to the slugified description plus the unitType extension (e.g. my-unit.service).", + "type": "string" +} - added
Input schema / properties / install / descriptionAdded value: +"[Install] directives. Keys: WantedBy (e.g. multi-user.target), RequiredBy, Alias, Also, DefaultInstance. Omitting it warns the unit cannot be enabled." - removed
Input schema / properties / install / propertiesRemoved value: -{ - "WantedBy": { - "items": { - "type": "string" - }, - "type": "array" - } -} - removed
Input schema / properties / install / requiredRemoved value: -[ - "WantedBy" -] - added
Input schema / properties / mountAdded value: +{ + "description": "[Mount] directives (unitType=mount). Keys: What (source, required), Where (absolute mount point, required), Type, Options, SloppyOptions, LazyUnmount, ForceUnmount, DirectoryMode, TimeoutSec.", + "type": "object" +} - added
Input schema / properties / operationAdded value: +{ + "default": "generate", + "description": "\"generate\" builds a unit from the fields below; \"presets\" ignores them and returns example inputs.", + "enum": [ + "generate", + "presets" + ], + "type": "string" +} - added
Input schema / properties / pathAdded value: +{ + "description": "[Path] directives (unitType=path). Keys: PathExists, PathExistsGlob, PathChanged, PathModified, DirectoryNotEmpty, MakeDirectory, Unit (unit to activate on trigger).", + "type": "object" +} - added
Input schema / properties / service / descriptionAdded value: +"[Service] directives (unitType=service). Common keys: Type, ExecStart (absolute path), Restart, RestartSec, User, Group, WorkingDirectory, Environment, plus sandboxing (PrivateTmp, ProtectSystem, ProtectHome, NoNewPrivileges) and limits." - removed
Input schema / properties / service / propertiesRemoved value: -{ - "ExecStart": { - "type": "string" - }, - "Restart": { - "type": "string" - }, - "Type": { - "type": "string" - }, - "User": { - "type": "string" - } -} - removed
Input schema / properties / service / requiredRemoved value: -[ - "Type", - "ExecStart", - "User", - "Restart" -] - added
Input schema / properties / socketAdded value: +{ + "description": "[Socket] directives (unitType=socket). Keys: ListenStream, ListenDatagram and other Listen* directives, Accept, SocketUser, SocketGroup, SocketMode, ReusePort, NoDelay, FileDescriptorName, MaxConnections.", + "type": "object" +} - added
Input schema / properties / timerAdded value: +{ + "description": "[Timer] directives (unitType=timer). Keys: OnCalendar, OnBootSec, OnStartupSec, OnUnitActiveSec, OnUnitInactiveSec, OnActiveSec, AccuracySec, RandomizedDelaySec, Persistent, WakeSystem, RemainAfterElapse, Unit.", + "type": "object" +} - added
Input schema / properties / unitAdded value: +{ + "description": "[Unit] directives keyed by directive name. Supports After, Before, Requires, Wants, Requisite, BindsTo, PartOf, Conflicts, OnFailure, Documentation, DefaultDependencies.", + "type": "object" +} - added
Input schema / properties / unitType / descriptionAdded value: +"Required for generate. Selects which body section is emitted and the file extension. Case-insensitive." - added
Input schema / properties / unitType / enumAdded value: +[ + "service", + "timer", + "socket", + "mount", + "path", + "target" +] - changed
Input schema / requiredPrevious value: -[ - "unitType", - "description", - "service", - "install" -]New value: +[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Echoes the requested operation (generate or presets).", + "type": "string" + }, + "result": { + "description": "For generate, the fields below. For presets, an object with a \"presets\" array of example requests.", + "properties": { + "explanation": { + "description": "Per-directive man-page explanations for directives present in the unit.", + "items": { + "properties": { + "directive": { + "description": "The directive name.", + "type": "string" + }, + "meaning": { + "description": "One-line explanation of the directive.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "filename": { + "description": "The unit filename, supplied or derived.", + "type": "string" + }, + "files": { + "description": "Companion files to create (the unit itself, plus the paired .service for timers/sockets).", + "items": { + "properties": { + "description": { + "description": "What this file is for.", + "type": "string" + }, + "name": { + "description": "Filename to create.", + "type": "string" + }, + "path": { + "description": "Absolute target path, e.g. /etc/systemd/system/<name>.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "unit": { + "description": "The full generated unit file text, ready to save.", + "type": "string" + }, + "warnings": { + "description": "Non-fatal advisories (missing ExecStart, no trigger, weak hardening); the unit is still returned.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on a 200 response.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
linux_user_group_manager11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / actionAdded value: +{ + "default": "generate", + "description": "Which operation to run. generate builds command lines from input; parsePasswd/parseGroup parse pasted file text; audit cross-checks both files; presets returns the curated input presets.", + "enum": [ + "generate", + "parsePasswd", + "parseGroup", + "audit", + "presets" + ], + "type": "string" +} - removed
Input schema / properties / distroRemoved value: -{ - "type": "string" -} - added
Input schema / properties / groupAdded value: +{ + "description": "/etc/group content for the audit action.", + "type": "string" +} - added
Input schema / properties / inputAdded value: +{ + "additionalProperties": false, + "description": "Used only when action is generate. The account specification to build commands from.", + "properties": { + "distro": { + "default": "debian", + "description": "Target OS family. freebsd emits pw(8) commands; the others emit the standard shadow-utils commands. Unknown values fall back to debian.", + "enum": [ + "debian", + "rhel", + "arch", + "alpine", + "freebsd" + ], + "type": "string" + }, + "group": { + "additionalProperties": false, + "description": "Group fields (used by the group-oriented operations).", + "properties": { + "gid": { + "description": "Numeric GID passed to -g. Values below 1000 trigger a system-group warning.", + "minimum": 0, + "type": "integer" + }, + "members": { + "description": "Initial member usernames (each gets a usermod -aG follow-up on Linux). Accepts an array or comma-separated string.", + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "Group name. Validated against the same POSIX pattern as usernames.", + "type": "string" + }, + "systemAccount": { + "default": false, + "description": "Add -r to groupadd to allocate a system-range GID.", + "type": "boolean" + } + }, + "type": "object" + }, + "operation": { + "description": "The account task to generate commands for. Required for the generate action.", + "enum": [ + "create-user", + "modify-user", + "delete-user", + "create-group", + "modify-group", + "delete-group", + "set-password", + "lock-user", + "unlock-user" + ], + "type": "string" + }, + "password": { + "description": "Optional cleartext password for set-password / create-user; piped via chpasswd (or pw -h 0). A warning is always added about command-line password exposure.", + "type": "string" + }, + "user": { + "additionalProperties": false, + "description": "User account fields (used by the user-oriented operations).", + "properties": { + "comment": { + "description": "GECOS / full-name comment passed to -c.", + "type": "string" + }, + "createHome": { + "default": true, + "description": "Add -m to create the home directory on create-user (ignored for system accounts).", + "type": "boolean" + }, + "expiry": { + "description": "Account expiry date passed to -e (YYYY-MM-DD).", + "type": "string" + }, + "gid": { + "description": "Primary group ID or name passed to -g.", + "minimum": 0, + "type": "integer" + }, + "home": { + "description": "Home directory path passed to -d.", + "type": "string" + }, + "name": { + "description": "Login name. Validated against the POSIX pattern (lowercase letter or underscore first, then lowercase letters/digits/underscores/hyphens, max 32 chars).", + "type": "string" + }, + "passwordExpireDays": { + "description": "Maximum password age in days; emits a follow-up chage -M command.", + "minimum": 0, + "type": "integer" + }, + "removeHome": { + "default": false, + "description": "Add -r to userdel so delete-user also removes the home directory and mail spool.", + "type": "boolean" + }, + "shell": { + "description": "Login shell passed to -s. Shells outside the common /etc/shells set raise a warning.", + "type": "string" + }, + "supplementaryGroups": { + "description": "Supplementary groups for -G (append via -aG on modify). Accepts an array of names or a comma-separated string.", + "items": { + "type": "string" + }, + "type": "array" + }, + "systemAccount": { + "default": false, + "description": "Add -r to allocate a system-range UID/GID with no home/ageing.", + "type": "boolean" + }, + "uid": { + "description": "Numeric UID. Values below 1000 trigger a system-account warning; 0 triggers a root-imposter warning.", + "minimum": 0, + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +} - removed
Input schema / properties / operationRemoved value: -{ - "type": "string" -} - added
Input schema / properties / passwdAdded value: +{ + "description": "/etc/passwd content for the audit action.", + "type": "string" +} - added
Input schema / properties / textAdded value: +{ + "description": "Pasted /etc/passwd (action parsePasswd) or /etc/group (action parseGroup) content, one record per colon-separated line.", + "type": "string" +} - removed
Input schema / properties / userRemoved value: -{ - "properties": { - "comment": { - "type": "string" - }, - "createHome": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "shell": { - "type": "string" - }, - "supplementaryGroups": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "name", - "shell", - "supplementaryGroups", - "createHome", - "comment" - ], - "type": "object" -} - removed
Input schema / requiredRemoved value: -[ - "operation", - "distro", - "user" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "action": { + "description": "The action that was executed.", + "type": "string" + }, + "result": { + "description": "Action-specific payload. generate returns commands/warnings/explanation; parsePasswd returns users; parseGroup returns groups; audit returns findings; presets returns presets.", + "properties": { + "commands": { + "description": "Generated command lines (generate action).", + "items": { + "properties": { + "command": { + "description": "The shell command text to run manually.", + "type": "string" + }, + "explanation": { + "description": "What the command does and which files it touches.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "explanation": { + "description": "Overall explanation notes for the generate result.", + "type": "string" + }, + "findings": { + "description": "Audit findings (audit action).", + "items": { + "properties": { + "issue": { + "description": "The detected problem.", + "type": "string" + }, + "severity": { + "description": "Severity of the finding.", + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + "suggestion": { + "description": "How to remediate it.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "groups": { + "description": "Parsed /etc/group rows (parseGroup action).", + "items": { + "properties": { + "gid": { + "description": "Group ID.", + "type": "integer" + }, + "members": { + "description": "Supplementary member usernames.", + "items": { + "description": "A member username.", + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "Group name.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "presets": { + "description": "Curated input presets (presets action).", + "items": { + "properties": { + "description": { + "description": "What the preset does.", + "type": "string" + }, + "id": { + "description": "Preset identifier.", + "type": "string" + }, + "input": { + "description": "The generate input the preset fills in.", + "type": "object" + }, + "name": { + "description": "Human-readable preset name.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "users": { + "description": "Parsed /etc/passwd rows (parsePasswd action).", + "items": { + "properties": { + "gecos": { + "description": "GECOS comment field.", + "type": "string" + }, + "gid": { + "description": "Primary group ID.", + "type": "integer" + }, + "home": { + "description": "Home directory.", + "type": "string" + }, + "name": { + "description": "Login name.", + "type": "string" + }, + "shell": { + "description": "Login shell.", + "type": "string" + }, + "uid": { + "description": "User ID.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "warnings": { + "description": "Safety warnings for the generated commands.", + "items": { + "description": "A single warning message.", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
linux_web_server_config_generator45 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / documentRootAdded value: +{ + "default": "/var/www/html", + "description": "Filesystem path served as the web root (DocumentRoot / root).", + "type": "string" +} - added
Input schema / properties / errorPagesAdded value: +{ + "additionalProperties": { + "description": "Path served for this HTTP status code.", + "type": "string" + }, + "description": "Map of HTTP status code (as key) to a custom error-page path.", + "type": "object" +} - added
Input schema / properties / gzip / defaultAdded value: +false - added
Input schema / properties / gzip / descriptionAdded value: +"Emit gzip / compression directives for text responses." - added
Input schema / properties / httpPortAdded value: +{ + "default": 80, + "description": "Plain-HTTP listen port.", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / httpsPortAdded value: +{ + "default": 443, + "description": "HTTPS listen port (used only when ssl.enabled is true).", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / loggingAdded value: +{ + "additionalProperties": false, + "description": "Access / error log settings.", + "properties": { + "accessLog": { + "description": "Access-log file path.", + "type": "string" + }, + "errorLog": { + "description": "Error-log file path.", + "type": "string" + }, + "format": { + "description": "Log format name or string.", + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / operation / defaultAdded value: +"generate" - added
Input schema / properties / operation / descriptionAdded value: +"Mode: generate builds the config text (requires serverName); presets returns the curated starter list and ignores all other fields." - added
Input schema / properties / operation / enumAdded value: +[ + "generate", + "presets" +] - added
Input schema / properties / phpAdded value: +{ + "additionalProperties": false, + "description": "PHP-FPM FastCGI settings.", + "properties": { + "enabled": { + "default": false, + "description": "Dispatch .php files to PHP-FPM via FastCGI.", + "type": "boolean" + }, + "fpmSocket": { + "description": "PHP-FPM socket or address (defaults to /run/php/php-fpm.sock in output when blank).", + "type": "string" + }, + "version": { + "description": "PHP version label used in generated comments.", + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / reverseProxy / additionalPropertiesAdded value: +false - added
Input schema / properties / reverseProxy / descriptionAdded value: +"Reverse-proxy / upstream settings." - added
Input schema / properties / reverseProxy / properties / enabled / defaultAdded value: +false - added
Input schema / properties / reverseProxy / properties / enabled / descriptionAdded value: +"Forward requests to an upstream backend." - added
Input schema / properties / reverseProxy / properties / preserveHostHeader / defaultAdded value: +false - added
Input schema / properties / reverseProxy / properties / preserveHostHeader / descriptionAdded value: +"Pass the original Host header to the upstream." - added
Input schema / properties / reverseProxy / properties / upstreamHost / descriptionAdded value: +"Upstream backend host (defaults to 127.0.0.1 in output when blank)." - added
Input schema / properties / reverseProxy / properties / upstreamPort / descriptionAdded value: +"Upstream backend port." - added
Input schema / properties / reverseProxy / properties / upstreamPort / minimumAdded value: +1 - added
Input schema / properties / reverseProxy / properties / websocketAdded value: +{ + "default": false, + "description": "Add WebSocket upgrade headers to the proxy.", + "type": "boolean" +} - removed
Input schema / properties / reverseProxy / requiredRemoved value: -[ - "enabled", - "upstreamHost", - "upstreamPort", - "preserveHostHeader" -] - added
Input schema / properties / securityAdded value: +{ + "additionalProperties": false, + "description": "Security-header and server-token settings.", + "properties": { + "headers": { + "additionalProperties": false, + "description": "Response security headers to emit (blank values are omitted).", + "properties": { + "csp": { + "description": "Content-Security-Policy value.", + "type": "string" + }, + "permissionsPolicy": { + "description": "Permissions-Policy value.", + "type": "string" + }, + "referrerPolicy": { + "description": "Referrer-Policy value.", + "type": "string" + }, + "xContentTypeOptions": { + "default": false, + "description": "Emit X-Content-Type-Options nosniff.", + "type": "boolean" + }, + "xFrameOptions": { + "description": "X-Frame-Options value (for example SAMEORIGIN).", + "type": "string" + } + }, + "type": "object" + }, + "hideServerHeader": { + "default": false, + "description": "Suppress the server version token where supported.", + "type": "boolean" + } + }, + "type": "object" +} - added
Input schema / properties / serverAliasesAdded value: +{ + "description": "Extra hostnames (ServerAlias / additional server_name entries). Blank entries are dropped.", + "items": { + "description": "An additional hostname served by this block.", + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / serverName / descriptionAdded value: +"Primary hostname for the virtual host or server block (for example example.com). Required when operation is generate; max 253 chars; underscore is accepted as the nginx default-server placeholder." - added
Input schema / properties / ssl / additionalPropertiesAdded value: +false - added
Input schema / properties / ssl / descriptionAdded value: +"TLS settings." - added
Input schema / properties / ssl / properties / certPath / descriptionAdded value: +"Path to the TLS certificate (chain) file." - added
Input schema / properties / ssl / properties / enabled / defaultAdded value: +false - added
Input schema / properties / ssl / properties / enabled / descriptionAdded value: +"Add an HTTPS listener and TLS directives." - added
Input schema / properties / ssl / properties / hsts / defaultAdded value: +false - added
Input schema / properties / ssl / properties / hsts / descriptionAdded value: +"Emit a Strict-Transport-Security header." - added
Input schema / properties / ssl / properties / hstsAge / defaultAdded value: +31536000 - added
Input schema / properties / ssl / properties / hstsAge / descriptionAdded value: +"HSTS max-age in seconds." - added
Input schema / properties / ssl / properties / hstsAge / minimumAdded value: +1 - added
Input schema / properties / ssl / properties / keyPath / descriptionAdded value: +"Path to the TLS private key file." - added
Input schema / properties / ssl / properties / redirectHttp / defaultAdded value: +false - added
Input schema / properties / ssl / properties / redirectHttp / descriptionAdded value: +"Add a plain-HTTP block that 301-redirects to HTTPS." - added
Input schema / properties / ssl / properties / tlsVersions / descriptionAdded value: +"Allowed TLS protocol versions; defaults to a modern set when empty." - added
Input schema / properties / ssl / properties / tlsVersions / items / descriptionAdded value: +"A TLS protocol version to allow (for example TLSv1.2)." - removed
Input schema / properties / ssl / requiredRemoved value: -[ - "enabled", - "certPath", - "keyPath", - "redirectHttp", - "hsts", - "hstsAge", - "tlsVersions" -] - added
Input schema / properties / staticAdded value: +{ + "additionalProperties": false, + "description": "Static-file serving settings.", + "properties": { + "enabled": { + "default": false, + "description": "Emit static-asset handling directives.", + "type": "boolean" + }, + "expires": { + "description": "Cache expiry for static assets (for example 30d).", + "type": "string" + }, + "indexes": { + "description": "Index document filenames.", + "items": { + "description": "An index filename (for example index.html).", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +} - removed
Input schema / requiredRemoved value: -[ - "operation", - "serverName", - "ssl", - "reverseProxy", - "gzip" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation performed (generate or presets).", + "type": "string" + }, + "result": { + "description": "For generate: the three configs plus warnings and explanation. For presets: a presets array of starter configurations.", + "properties": { + "apache": { + "description": "Apache 2.4 VirtualHost configuration text.", + "type": "string" + }, + "caddy": { + "description": "Caddy 2 Caddyfile configuration text.", + "type": "string" + }, + "explanation": { + "description": "Per-section human-readable explanation of the generated config.", + "items": { + "properties": { + "meaning": { + "description": "Plain-language description of what that section does.", + "type": "string" + }, + "section": { + "description": "Name of the config section being explained.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "nginx": { + "description": "nginx server block configuration text.", + "type": "string" + }, + "warnings": { + "description": "Configuration warnings (for example weak TLS, missing cert paths).", + "items": { + "description": "A non-fatal advisory about the chosen settings.", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_bitwise_calculator21 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / a / descriptionAdded value: +"First operand (or the value to shift). String or number in base aBase; optional 0x/0b/0o prefix must match aBase. Negative only allowed when signed is true. Not used when operation=parse." - added
Input schema / properties / aBase / defaultAdded value: +10 - added
Input schema / properties / aBase / descriptionAdded value: +"Radix used to read operand a. 2=binary, 8=octal, 10=decimal, 16=hex." - added
Input schema / properties / aBase / enumAdded value: +[ + 2, + 8, + 10, + 16 +] - added
Input schema / properties / b / descriptionAdded value: +"Second operand for and/or/xor/nand/nor, or the shift count (0 to width-1) for shl/shr/ushr, in base bBase. Omit for not and parse." - added
Input schema / properties / bBase / defaultAdded value: +10 - added
Input schema / properties / bBase / descriptionAdded value: +"Radix used to read operand b / the shift count." - added
Input schema / properties / bBase / enumAdded value: +[ + 2, + 8, + 10, + 16 +] - added
Input schema / properties / fromBaseAdded value: +{ + "description": "operation=parse only: radix of value. Required when operation=parse.", + "enum": [ + 2, + 8, + 10, + 16 + ], + "type": "integer" +} - added
Input schema / properties / operation / defaultAdded value: +"and" - added
Input schema / properties / operation / descriptionAdded value: +"Bitwise op to run. and/or/xor/nand/nor need a and b; not is unary (a only); shl/shr/ushr shift a left or right by b bits (shr is arithmetic when signed, ushr is logical). Use parse to convert value into every base instead." - added
Input schema / properties / operation / enumAdded value: +[ + "and", + "or", + "xor", + "not", + "nand", + "nor", + "shl", + "shr", + "ushr", + "parse" +] - added
Input schema / properties / signed / defaultAdded value: +false - added
Input schema / properties / signed / descriptionAdded value: +"Interpret values as two's-complement signed (allows negative input and arithmetic shr) when true; unsigned when false." - added
Input schema / properties / valueAdded value: +{ + "description": "operation=parse only: the value to convert into all four bases, read using fromBase.", + "type": "string" +} - added
Input schema / properties / width / defaultAdded value: +32 - added
Input schema / properties / width / descriptionAdded value: +"Integer bit width. Operands are masked to this width; shift counts must be less than it." - added
Input schema / properties / width / enumAdded value: +[ + 32, + 64 +] - changed
Input schema / requiredPrevious value: -[ - "operation", - "a", - "b", - "aBase", - "bBase", - "width", - "signed" -]New value: +[ + "operation", + "a" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Echoes the requested operation (and/or/.../parse).", + "type": "string" + }, + "result": { + "description": "Bitwise op returns a/b/operation/width/signed plus a nested result with binary/octal/decimal/hex. operation=parse returns value/fromBase/width/signed/decimal/binary/octal/hex.", + "properties": { + "a": { + "description": "Operand a in decimal (signed-aware) after width masking.", + "type": "string" + }, + "b": { + "description": "Operand b in decimal, the shift count, or null for unary not.", + "type": [ + "string", + "null" + ] + }, + "binary": { + "description": "operation=parse: value in binary, 0b-prefixed.", + "type": "string" + }, + "decimal": { + "description": "operation=parse: value in decimal.", + "type": "string" + }, + "fromBase": { + "description": "operation=parse: radix the value was read in.", + "type": "integer" + }, + "hex": { + "description": "operation=parse: value in uppercase hex, 0x-prefixed.", + "type": "string" + }, + "octal": { + "description": "operation=parse: value in octal, 0o-prefixed.", + "type": "string" + }, + "operation": { + "description": "Normalised bitwise op applied.", + "type": "string" + }, + "result": { + "description": "The computed value rendered in four bases.", + "properties": { + "binary": { + "description": "Result in binary, 0b-prefixed.", + "type": "string" + }, + "decimal": { + "description": "Result in decimal (signed-aware).", + "type": "string" + }, + "hex": { + "description": "Result in uppercase hex, 0x-prefixed.", + "type": "string" + }, + "octal": { + "description": "Result in octal, 0o-prefixed.", + "type": "string" + } + }, + "type": "object" + }, + "signed": { + "description": "Whether values were interpreted as signed.", + "type": "boolean" + }, + "value": { + "description": "operation=parse: the input value as supplied.", + "type": "string" + }, + "width": { + "description": "Bit width used (32 or 64).", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "True when the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_bmi_calculator15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / aAdded value: +{ + "additionalProperties": false, + "description": "First body for the compare operation: an object of unitSystem, weight, and height. Required only when operation is compare.", + "properties": { + "height": { + "description": "Height in cm (metric) or inches (imperial).", + "minimum": 0, + "type": "number" + }, + "unitSystem": { + "description": "Unit system for this body weight and height.", + "enum": [ + "metric", + "imperial" + ], + "type": "string" + }, + "weight": { + "description": "Weight in kg (metric) or lb (imperial).", + "minimum": 0, + "type": "number" + } + }, + "type": "object" +} - added
Input schema / properties / bAdded value: +{ + "additionalProperties": false, + "description": "Second body for the compare operation, same shape as a. Required only when operation is compare.", + "properties": { + "height": { + "description": "Height in cm (metric) or inches (imperial).", + "minimum": 0, + "type": "number" + }, + "unitSystem": { + "description": "Unit system for this body weight and height.", + "enum": [ + "metric", + "imperial" + ], + "type": "string" + }, + "weight": { + "description": "Weight in kg (metric) or lb (imperial).", + "minimum": 0, + "type": "number" + } + }, + "type": "object" +} - added
Input schema / properties / height / descriptionAdded value: +"Body height. In metric it is centimetres (max 300); in imperial it is total inches (max 120), or pass an object with feet and inches keys. Must be greater than zero. Required for compute and target-weight." - added
Input schema / properties / height / minimumAdded value: +0 - added
Input schema / properties / operation / descriptionAdded value: +"Which calculation to run: compute for BMI from weight plus height, target-weight to reverse a target BMI into the weight needed at a height, or compare to diff two bodies supplied as a and b." - added
Input schema / properties / operation / enumAdded value: +[ + "compute", + "target-weight", + "compare" +] - added
Input schema / properties / targetBmiAdded value: +{ + "description": "Desired BMI to solve the matching weight for at the given height. Required only when operation is target-weight.", + "maximum": 100, + "minimum": 10, + "type": "number" +} - added
Input schema / properties / unitSystem / descriptionAdded value: +"Unit system for weight and height. Metric reads weight in kg and height in cm; imperial reads weight in lb and height in inches (or feet plus inches). Required for compute and target-weight." - added
Input schema / properties / unitSystem / enumAdded value: +[ + "metric", + "imperial" +] - added
Input schema / properties / weight / descriptionAdded value: +"Body weight. In metric it is kilograms (max 1000); in imperial it is pounds (max 2200). Must be greater than zero. Required for compute." - added
Input schema / properties / weight / minimumAdded value: +0 - changed
Input schema / properties / weight / typePrevious value: -"integer"New value: +"number" - changed
Input schema / requiredPrevious value: -[ - "operation", - "unitSystem", - "weight", - "height" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Result payload. Shape depends on the operation; the compute fields are listed here.", + "properties": { + "bmi": { + "description": "Body Mass Index, rounded to 2 decimals.", + "type": "number" + }, + "category": { + "description": "Human-readable WHO category label, for example Normal weight or Obese class I.", + "type": "string" + }, + "categoryCode": { + "description": "Machine code for the category (severe_thin, moderate_thin, mild_thin, normal, overweight, obese_i, obese_ii, obese_iii).", + "type": "string" + }, + "healthyWeightRange": { + "description": "Weight band that maps to a normal BMI (18.5 to 24.9) at this height.", + "properties": { + "maxKg": { + "description": "Upper healthy weight bound in kilograms.", + "type": "number" + }, + "maxLb": { + "description": "Upper healthy weight bound in pounds.", + "type": "number" + }, + "minKg": { + "description": "Lower healthy weight bound in kilograms.", + "type": "number" + }, + "minLb": { + "description": "Lower healthy weight bound in pounds.", + "type": "number" + } + }, + "type": "object" + }, + "heightIn": { + "description": "Normalized height in inches, rounded to 2 decimals.", + "type": "number" + }, + "heightM": { + "description": "Normalized height in metres, rounded to 2 decimals.", + "type": "number" + }, + "interpretation": { + "description": "Plain-language interpretation of the BMI and category, with the underlying range.", + "type": "string" + }, + "unitSystem": { + "description": "Unit system used for the inputs (metric or imperial).", + "type": "string" + }, + "weightKg": { + "description": "Normalized weight in kilograms, rounded to 1 decimal.", + "type": "number" + }, + "weightLb": { + "description": "Normalized weight in pounds, rounded to 1 decimal.", + "type": "number" + } + }, + "type": "object" + }, + "operation": { + "description": "The operation that was executed, echoed back.", + "type": "string" + } + }, + "type": "object" +}
- Changed
math_compound_interest_calculator33 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / annualRatePercent / descriptionAdded value: +"Nominal annual interest rate as a percent (e.g. 5 means 5%/yr). 0 to 100." - added
Input schema / properties / annualRatePercent / examplesAdded value: +[ + 5 +] - added
Input schema / properties / annualRatePercent / maximumAdded value: +100 - added
Input schema / properties / annualRatePercent / minimumAdded value: +0 - changed
Input schema / properties / annualRatePercent / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / compoundingsPerYear / descriptionAdded value: +"Compounding frequency per year (n): 1=annual, 2=semi-annual, 4=quarterly, 12=monthly, 365=daily. Must be exactly one of these values." - added
Input schema / properties / compoundingsPerYear / enumAdded value: +[ + 1, + 2, + 4, + 12, + 365 +] - added
Input schema / properties / compoundingsPerYear / examplesAdded value: +[ + 12 +] - added
Input schema / properties / contributionTiming / defaultAdded value: +"end" - added
Input schema / properties / contributionTiming / descriptionAdded value: +"Whether each contribution is applied at the start (annuity-due) or end (ordinary annuity) of the period. Only relevant when monthlyContribution > 0." - added
Input schema / properties / contributionTiming / enumAdded value: +[ + "start", + "end" +] - added
Input schema / properties / monthlyContribution / defaultAdded value: +0 - added
Input schema / properties / monthlyContribution / descriptionAdded value: +"Optional recurring monthly contribution. Converted to a per-compounding-period amount (monthlyContribution × 12 / compoundingsPerYear) so the same annual dollar flow applies at any frequency. 0 to 1,000,000,000." - added
Input schema / properties / monthlyContribution / examplesAdded value: +[ + 200 +] - added
Input schema / properties / monthlyContribution / maximumAdded value: +1000000000 - added
Input schema / properties / monthlyContribution / minimumAdded value: +0 - changed
Input schema / properties / monthlyContribution / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / operation / defaultAdded value: +"compute" - added
Input schema / properties / operation / descriptionAdded value: +"\"compute\" returns a per-year breakdown (one row per year); \"schedule\" returns the full per-period schedule (one row per compounding period). Both return the same final totals." - added
Input schema / properties / operation / enumAdded value: +[ + "compute", + "schedule" +] - added
Input schema / properties / principal / descriptionAdded value: +"Starting lump-sum amount (P). 0 to 1,000,000,000,000." - added
Input schema / properties / principal / examplesAdded value: +[ + 10000 +] - added
Input schema / properties / principal / maximumAdded value: +1000000000000 - added
Input schema / properties / principal / minimumAdded value: +0 - changed
Input schema / properties / principal / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / years / descriptionAdded value: +"Investment horizon in years (t). Greater than 0, up to 100; may be fractional." - added
Input schema / properties / years / examplesAdded value: +[ + 10 +] - added
Input schema / properties / years / exclusiveMinimumAdded value: +0 - added
Input schema / properties / years / maximumAdded value: +100 - changed
Input schema / properties / years / typePrevious value: -"integer"New value: +"number" - changed
Input schema / requiredPrevious value: -[ - "operation", - "principal", - "annualRatePercent", - "years", - "compoundingsPerYear", - "monthlyContribution", - "contributionTiming" -]New value: +[ + "principal", + "annualRatePercent", + "years", + "compoundingsPerYear" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Echoes the operation that was run.", + "enum": [ + "compute", + "schedule" + ], + "type": "string" + }, + "result": { + "description": "Computed totals plus a breakdown (compute) or schedule (schedule) array.", + "properties": { + "breakdown": { + "description": "Per-year summary. Present when operation=compute.", + "items": { + "properties": { + "balance": { + "description": "Balance at the end of this year.", + "type": "number" + }, + "contributionsToDate": { + "description": "Cumulative contributions made through this year.", + "type": "number" + }, + "interestEarned": { + "description": "Cumulative interest earned through this year.", + "type": "number" + }, + "year": { + "description": "1-based year index.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "finalAmount": { + "description": "Final balance after the full term, rounded to 2 decimals.", + "type": "number" + }, + "schedule": { + "description": "Per-compounding-period rows. Present when operation=schedule.", + "items": { + "properties": { + "balance": { + "description": "Balance at the end of this period.", + "type": "number" + }, + "contribution": { + "description": "Total contribution applied in this period.", + "type": "number" + }, + "interest": { + "description": "Interest earned in this period.", + "type": "number" + }, + "period": { + "description": "1-based period index (1 .. years × compoundingsPerYear).", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "totalContributions": { + "description": "Sum of all recurring contributions over the term, rounded to 2 decimals.", + "type": "number" + }, + "totalInterest": { + "description": "Total interest earned over the term, rounded to 2 decimals.", + "type": "number" + } + }, + "type": "object" + }, + "success": { + "description": "True when the calculation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_currency_converter_convert11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / amount / defaultAdded value: +1 - added
Input schema / properties / amount / descriptionAdded value: +"Amount in the source currency to convert. Must be a finite number; defaults to 1 when omitted." - added
Input schema / properties / amount / minimumAdded value: +0 - changed
Input schema / properties / amount / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / from / descriptionAdded value: +"Source ISO 4217 currency code (3 letters, case-insensitive). Must be one of the 31 supported codes." - added
Input schema / properties / from / enumAdded value: +[ + "USD", + "EUR", + "GBP", + "JPY", + "CHF", + "CAD", + "AUD", + "NZD", + "CNY", + "HKD", + "SGD", + "INR", + "ZAR", + "BRL", + "MXN", + "SEK", + "NOK", + "DKK", + "PLN", + "TRY", + "KRW", + "RUB", + "THB", + "IDR", + "MYR", + "PHP", + "CZK", + "HUF", + "ILS", + "AED", + "SAR" +] - added
Input schema / properties / to / descriptionAdded value: +"Target ISO 4217 currency code (3 letters, case-insensitive). Same 31-code enum as from; equal from/to returns a rate of 1." - added
Input schema / properties / to / enumAdded value: +[ + "USD", + "EUR", + "GBP", + "JPY", + "CHF", + "CAD", + "AUD", + "NZD", + "CNY", + "HKD", + "SGD", + "INR", + "ZAR", + "BRL", + "MXN", + "SEK", + "NOK", + "DKK", + "PLN", + "TRY", + "KRW", + "RUB", + "THB", + "IDR", + "MYR", + "PHP", + "CZK", + "HUF", + "ILS", + "AED", + "SAR" +] - changed
Input schema / requiredPrevious value: -[ - "from", - "to", - "amount" -]New value: +[ + "from", + "to" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "properties": { + "amount": { + "description": "Input amount in the source currency as supplied.", + "type": "number" + }, + "from": { + "description": "Normalised source ISO 4217 code.", + "type": "string" + }, + "rate": { + "description": "Conversion rate: 1 unit of from equals this many units of to.", + "type": "number" + }, + "rate_date": { + "description": "EOD date of the rate used, as YYYY-MM-DD.", + "format": "date", + "type": "string" + }, + "rate_inverse": { + "description": "Inverse rate: 1 unit of to equals this many units of from.", + "type": "number" + }, + "result": { + "description": "Converted amount in the target currency (amount times rate).", + "type": "number" + }, + "to": { + "description": "Normalised target ISO 4217 code.", + "type": "string" + }, + "via": { + "description": "How the rate was resolved.", + "enum": [ + "direct", + "triangulation:USD", + "identity" + ], + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "True when the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_currency_converter_history9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / amountRemoved value: -{ - "type": "integer" -} - added
Input schema / properties / daysAdded value: +{ + "default": 90, + "description": "Length of the trailing window in calendar days back from today. Must be between 7 and 1825 (about 5 years); defaults to 90 when omitted.", + "maximum": 1825, + "minimum": 7, + "type": "integer" +} - added
Input schema / properties / from / descriptionAdded value: +"Base ISO 4217 currency code (3 letters, case-insensitive). Must be one of the 31 supported codes." - added
Input schema / properties / from / enumAdded value: +[ + "USD", + "EUR", + "GBP", + "JPY", + "CHF", + "CAD", + "AUD", + "NZD", + "CNY", + "HKD", + "SGD", + "INR", + "ZAR", + "BRL", + "MXN", + "SEK", + "NOK", + "DKK", + "PLN", + "TRY", + "KRW", + "RUB", + "THB", + "IDR", + "MYR", + "PHP", + "CZK", + "HUF", + "ILS", + "AED", + "SAR" +] - added
Input schema / properties / to / descriptionAdded value: +"Quote ISO 4217 currency code (3 letters, case-insensitive). Same 31-code enum as from; equal from/to returns a flat series of 1." - added
Input schema / properties / to / enumAdded value: +[ + "USD", + "EUR", + "GBP", + "JPY", + "CHF", + "CAD", + "AUD", + "NZD", + "CNY", + "HKD", + "SGD", + "INR", + "ZAR", + "BRL", + "MXN", + "SEK", + "NOK", + "DKK", + "PLN", + "TRY", + "KRW", + "RUB", + "THB", + "IDR", + "MYR", + "PHP", + "CZK", + "HUF", + "ILS", + "AED", + "SAR" +] - changed
Input schema / requiredPrevious value: -[ - "from", - "to", - "amount" -]New value: +[ + "from", + "to" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "properties": { + "from": { + "description": "Normalised base ISO 4217 code.", + "type": "string" + }, + "from_date": { + "description": "Window start date (today minus days), as YYYY-MM-DD.", + "format": "date", + "type": "string" + }, + "series": { + "description": "Daily EOD candles ordered oldest to newest; may be shorter than the requested window because forex markets close on weekends and holidays.", + "items": { + "properties": { + "close": { + "description": "Closing rate for the day.", + "type": "number" + }, + "date": { + "description": "Candle date as YYYY-MM-DD.", + "format": "date", + "type": "string" + }, + "high": { + "description": "Highest rate for the day.", + "type": "number" + }, + "low": { + "description": "Lowest rate for the day.", + "type": "number" + }, + "open": { + "description": "Opening rate (1 unit of from in to) for the day.", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "to": { + "description": "Normalised quote ISO 4217 code.", + "type": "string" + }, + "to_date": { + "description": "Window end date (today), as YYYY-MM-DD.", + "format": "date", + "type": "string" + }, + "via": { + "description": "How the series was resolved.", + "enum": [ + "direct", + "triangulation:USD", + "identity" + ], + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "True when the series was retrieved.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_factorial_calculator7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / n / descriptionAdded value: +"Non-negative integer 0 to 10000, as a number or decimal-digit string. For permutations and combinations this is the set size." - changed
Input schema / properties / n / typePrevious value: -"integer"New value: +[ + "integer", + "string" +] - added
Input schema / properties / operation / descriptionAdded value: +"Which calculation to perform. permutations and combinations additionally require r." - added
Input schema / properties / operation / enumAdded value: +[ + "factorial", + "doubleFactorial", + "permutations", + "combinations" +] - added
Input schema / properties / rAdded value: +{ + "description": "Selection size for permutations and combinations: integer 0 to n. Required for those operations, ignored otherwise.", + "type": [ + "integer", + "string" + ] +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation that was performed.", + "type": "string" + }, + "result": { + "description": "The computed value and its shape.", + "properties": { + "digitCount": { + "description": "Number of decimal digits in result.", + "type": "integer" + }, + "leadingDigits": { + "description": "First 30 digits followed by an ellipsis marker, present only when digitCount exceeds 100.", + "type": "string" + }, + "n": { + "description": "Parsed n input.", + "type": "integer" + }, + "r": { + "description": "Parsed r input (permutations and combinations only).", + "type": "integer" + }, + "result": { + "description": "Exact value as a base-10 decimal string.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "True when the calculation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_fibonacci_generator12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / count / descriptionAdded value: +"Number of terms to emit (operation sequence only). Required for sequence; must be 1 to 2000." - added
Input schema / properties / count / maximumAdded value: +2000 - added
Input schema / properties / count / minimumAdded value: +1 - added
Input schema / properties / fromAdded value: +{ + "description": "Inclusive lower value bound (operation range only). Required for range; non-negative and not greater than to.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / nAdded value: +{ + "description": "Index for operation nth (0 to 50000), or the value to test for operation isFibonacci (non-negative; very large values may be passed as a numeric string). Required for nth and isFibonacci.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / operation / descriptionAdded value: +"Which computation to run. sequence lists count terms from start; nth returns the single nth term; isFibonacci tests membership of n; range lists Fibs between from and to." - added
Input schema / properties / operation / enumAdded value: +[ + "sequence", + "nth", + "isFibonacci", + "range" +] - added
Input schema / properties / startAdded value: +{ + "default": 0, + "description": "Zero-based index of the first term emitted (operation sequence only). Optional; defaults to 0; must be 0 to 50000.", + "maximum": 50000, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / toAdded value: +{ + "description": "Inclusive upper value bound (operation range only). Required for range; non-negative and at most 10 to the power 200.", + "minimum": 0, + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "count" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message when success is false (HTTP 400).", + "type": "string" + }, + "result": { + "description": "Operation-specific payload. Fields below are the union across all operations; only the fields for the chosen operation are present.", + "properties": { + "allFit": { + "description": "sequence: true when every value fits in a JS safe integer.", + "type": "boolean" + }, + "bigInt": { + "description": "sequence/nth: true when any value exceeds Number.MAX_SAFE_INTEGER.", + "type": "boolean" + }, + "count": { + "description": "sequence/range: number of values returned.", + "type": "integer" + }, + "digits": { + "description": "nth: number of decimal digits in value.", + "type": "integer" + }, + "from": { + "description": "range: inclusive lower bound echoed back as a decimal string.", + "type": "string" + }, + "index": { + "description": "isFibonacci: Fibonacci index of n when it is a member.", + "type": "integer" + }, + "isFibonacci": { + "description": "isFibonacci: whether n is a Fibonacci number.", + "type": "boolean" + }, + "n": { + "description": "nth/isFibonacci: the index (nth) or tested value (isFibonacci) echoed back.", + "type": "string" + }, + "nearest": { + "description": "isFibonacci: nearest lower and upper Fibonacci neighbours when n is not a member.", + "properties": { + "lower": { + "description": "Largest Fibonacci at or below n (index and value), or null when none exists.", + "type": [ + "object", + "null" + ] + }, + "upper": { + "description": "Smallest Fibonacci above n (index and value).", + "type": "object" + } + }, + "type": "object" + }, + "start": { + "description": "sequence: zero-based index of the first emitted term.", + "type": "integer" + }, + "to": { + "description": "range: inclusive upper bound echoed back as a decimal string.", + "type": "string" + }, + "value": { + "description": "nth: the nth Fibonacci term as a decimal string.", + "type": "string" + }, + "values": { + "description": "sequence/range: Fibonacci values as base-10 decimal strings.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the computation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_fuel_consumption_calculator19 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / consumptionAdded value: +{ + "description": "tripCost only: the vehicle fuel economy, expressed in consumptionUnit. Must be greater than zero.", + "exclusiveMinimum": 0, + "type": "number" +} - added
Input schema / properties / consumptionUnitAdded value: +{ + "description": "tripCost only: unit of the consumption figure. Same four enum values as fromUnit.", + "enum": [ + "mpg_us", + "mpg_uk", + "l_per_100km", + "km_per_l" + ], + "type": "string" +} - added
Input schema / properties / distanceAdded value: +{ + "description": "tripCost only: trip distance, expressed in distanceUnit.", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / distanceUnitAdded value: +{ + "description": "tripCost only: unit of distance. km=kilometres, mi=miles.", + "enum": [ + "km", + "mi" + ], + "type": "string" +} - added
Input schema / properties / fromUnit / descriptionAdded value: +"convertConsumption only: unit of the input value. mpg_us=miles per US gallon, mpg_uk=miles per Imperial gallon, l_per_100km=litres per 100km, km_per_l=kilometres per litre." - added
Input schema / properties / fromUnit / enumAdded value: +[ + "mpg_us", + "mpg_uk", + "l_per_100km", + "km_per_l" +] - added
Input schema / properties / operation / defaultAdded value: +"convertConsumption" - added
Input schema / properties / operation / descriptionAdded value: +"\"convertConsumption\" converts one economy value between units (needs value, fromUnit, toUnit). \"tripCost\" estimates trip fuel and cost (needs distance, distanceUnit, consumption, consumptionUnit, pricePerUnit, priceUnit)." - added
Input schema / properties / operation / enumAdded value: +[ + "convertConsumption", + "tripCost" +] - added
Input schema / properties / pricePerUnitAdded value: +{ + "description": "tripCost only: fuel price per volume unit, expressed in priceUnit currency and volume.", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / priceUnitAdded value: +{ + "description": "tripCost only: currency + volume the price refers to. Determines the output currency (USD/EUR/GBP) and the volume (US gallon, UK gallon, or litre) pricePerUnit is multiplied by.", + "enum": [ + "usd_per_gal_us", + "usd_per_gal_uk", + "usd_per_l", + "eur_per_l", + "gbp_per_l", + "gbp_per_gal_uk" + ], + "type": "string" +} - added
Input schema / properties / toUnit / descriptionAdded value: +"convertConsumption only: unit to convert the value into. Same four enum values as fromUnit." - added
Input schema / properties / toUnit / enumAdded value: +[ + "mpg_us", + "mpg_uk", + "l_per_100km", + "km_per_l" +] - added
Input schema / properties / value / descriptionAdded value: +"convertConsumption only: the fuel-economy value to convert, expressed in fromUnit. Must be greater than zero for mpg_us, mpg_uk, and km_per_l." - added
Input schema / properties / value / minimumAdded value: +0 - changed
Input schema / properties / value / typePrevious value: -"integer"New value: +"number" - changed
Input schema / requiredPrevious value: -[ - "operation", - "value", - "fromUnit", - "toUnit" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "convertConsumption returns fromUnit/toUnit/fromValue/toValue/formattedFrom/formattedTo. tripCost returns distance/consumption/fuelNeeded/totalCost/pricePerUnit/currency and formatted strings.", + "properties": { + "consumption": { + "description": "tripCost: fuel economy in its original unit.", + "type": "number" + }, + "costFormatted": { + "description": "tripCost: total cost with currency, e.g. \"$48 USD\".", + "type": "string" + }, + "currency": { + "description": "tripCost: ISO 4217 currency of totalCost, derived from priceUnit.", + "enum": [ + "USD", + "EUR", + "GBP" + ], + "type": "string" + }, + "distance": { + "description": "tripCost: trip distance in its original unit.", + "type": "number" + }, + "distanceFormatted": { + "description": "tripCost: distance with unit, e.g. \"400 km\".", + "type": "string" + }, + "formattedFrom": { + "description": "convertConsumption: input value with unit symbol, e.g. \"30 mpg (US)\".", + "type": "string" + }, + "formattedTo": { + "description": "convertConsumption: converted value with unit symbol.", + "type": "string" + }, + "fromUnit": { + "description": "convertConsumption: source economy unit.", + "type": "string" + }, + "fromValue": { + "description": "convertConsumption: input value as supplied.", + "type": "number" + }, + "fuelFormatted": { + "description": "tripCost: fuel needed with unit, e.g. \"32 L\".", + "type": "string" + }, + "fuelNeeded": { + "description": "tripCost: fuel required for the trip, in litres.", + "type": "number" + }, + "pricePerUnit": { + "description": "tripCost: fuel price per unit as supplied.", + "type": "number" + }, + "toUnit": { + "description": "convertConsumption: target economy unit.", + "type": "string" + }, + "toValue": { + "description": "convertConsumption: converted value in toUnit.", + "type": "number" + }, + "totalCost": { + "description": "tripCost: total fuel cost in the price unit currency.", + "type": "number" + } + }, + "type": "object" + }, + "operation": { + "description": "Echoes the operation that was run (defaults to convertConsumption when omitted).", + "enum": [ + "convertConsumption", + "tripCost" + ], + "type": "string" + } + }, + "type": "object" +}
- Changed
math_gcd_lcm_calculator9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / nAdded value: +{ + "description": "Required for factorize: a single integer from 2 to 10^12 (1000000000000) to prime-factorize.", + "maximum": 1000000000000, + "minimum": 2, + "type": "integer" +} - added
Input schema / properties / numbers / descriptionAdded value: +"Required for gcd/lcm: 2 to 32 integers. GCD rejects an all-zero list; LCM rejects any zero. String digits like \"12\" are accepted and coerced." - added
Input schema / properties / numbers / maxItemsAdded value: +32 - added
Input schema / properties / numbers / minItemsAdded value: +2 - added
Input schema / properties / operation / descriptionAdded value: +"Which computation to run: gcd or lcm (require numbers) or factorize (requires n)." - added
Input schema / properties / operation / enumAdded value: +[ + "gcd", + "lcm", + "factorize" +] - changed
Input schema / requiredPrevious value: -[ - "operation", - "numbers" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Present only on failure: the validation/computation error message.", + "type": "string" + }, + "result": { + "description": "Operation output. gcd/lcm/factorize each populate different fields.", + "properties": { + "bigInt": { + "description": "lcm only: true when the LCM exceeded 2^53-1 and is returned as a string.", + "type": "boolean" + }, + "factors": { + "description": "factorize: prime-power factors in ascending prime order.", + "items": { + "properties": { + "exponent": { + "description": "Its multiplicity.", + "type": "integer" + }, + "prime": { + "description": "A prime factor.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "gcd": { + "description": "gcd: the greatest common divisor. lcm: also the overall GCD. Integer, or a decimal string when it exceeds 2^53-1." + }, + "lcm": { + "description": "lcm: the least common multiple - an integer, or a decimal string when it exceeds 2^53-1." + }, + "n": { + "description": "factorize: the integer that was factored.", + "type": "integer" + }, + "numbers": { + "description": "gcd/lcm: the normalized input integers, echoed back.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "pretty": { + "description": "factorize: human-readable factorization, e.g. 2^2 x 3 x 5.", + "type": "string" + }, + "steps": { + "description": "gcd: Euclidean steps {a,b,q,r}. lcm: pairwise steps {a,b,gcd,lcm} (values may be strings when large).", + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the computation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_loan_calculator21 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / annualRatePercent / descriptionAdded value: +"Annual nominal interest rate as a percent (for example 6.5 means 6.5 percent per year). Range 0 to 100; 0 gives a zero-rate loan." - added
Input schema / properties / annualRatePercent / maximumAdded value: +100 - added
Input schema / properties / annualRatePercent / minimumAdded value: +0 - added
Input schema / properties / extraMonthlyPayment / defaultAdded value: +0 - added
Input schema / properties / extraMonthlyPayment / descriptionAdded value: +"Optional extra principal paid each month to shorten the term. At least 0 and not greater than principal. Defaults to 0." - added
Input schema / properties / extraMonthlyPayment / minimumAdded value: +0 - changed
Input schema / properties / extraMonthlyPayment / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / operation / descriptionAdded value: +"Output mode: compute returns the summary plus a per-year breakdown; schedule also returns every monthly row. Defaults to compute." - added
Input schema / properties / operation / enumAdded value: +[ + "compute", + "schedule" +] - added
Input schema / properties / principal / descriptionAdded value: +"Loan amount borrowed, in currency units. Must be greater than 0 and at most 1000000000000." - added
Input schema / properties / principal / maximumAdded value: +1000000000000 - added
Input schema / properties / principal / minimumAdded value: +0 - changed
Input schema / properties / principal / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / startDateIsoAdded value: +{ + "description": "Optional first-payment date as an ISO date string (for example 2026-06-01) used to label schedule rows. Defaults to today (UTC).", + "type": "string" +} - added
Input schema / properties / termYears / descriptionAdded value: +"Loan term in years; multiplied by 12 to derive the month count. Must be greater than 0 and at most 100." - added
Input schema / properties / termYears / maximumAdded value: +100 - added
Input schema / properties / termYears / minimumAdded value: +0 - changed
Input schema / properties / termYears / typePrevious value: -"integer"New value: +"number" - changed
Input schema / requiredPrevious value: -[ - "operation", - "principal", - "annualRatePercent", - "termYears", - "extraMonthlyPayment" -]New value: +[ + "principal", + "annualRatePercent", + "termYears" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation performed (compute or schedule).", + "type": "string" + }, + "result": { + "description": "The computed loan figures.", + "properties": { + "monthlyPayment": { + "description": "Base level monthly payment rounded to 2 decimals (principal divided by months when the rate is 0).", + "type": "number" + }, + "payoffDateIso": { + "description": "ISO date of the final payment, derived from startDateIso plus payoffMonths.", + "type": "string" + }, + "payoffMonths": { + "description": "Number of months until the balance reaches zero (fewer than the contractual term when extra payments apply).", + "type": "integer" + }, + "schedule": { + "description": "Full month-by-month amortization rows. Present when operation is schedule.", + "items": { + "properties": { + "balance": { + "description": "Remaining balance after this payment, rounded to 2 decimals.", + "type": "number" + }, + "dateIso": { + "description": "ISO date of this payment.", + "type": "string" + }, + "extraPaid": { + "description": "Extra principal paid this month beyond the scheduled amount, rounded to 2 decimals.", + "type": "number" + }, + "interestPaid": { + "description": "Interest portion paid this month, rounded to 2 decimals.", + "type": "number" + }, + "month": { + "description": "Payment number, starting at 1.", + "type": "integer" + }, + "principalPaid": { + "description": "Principal portion paid this month, rounded to 2 decimals.", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "summary": { + "description": "Per-year roll-up of the schedule. Present when operation is compute.", + "properties": { + "byYear": { + "description": "One entry per calendar year touched by the schedule.", + "items": { + "properties": { + "balance": { + "description": "Remaining balance at the end of the year, rounded to 2 decimals.", + "type": "number" + }, + "interestPaid": { + "description": "Interest paid during the year, rounded to 2 decimals.", + "type": "number" + }, + "principalPaid": { + "description": "Principal paid during the year, rounded to 2 decimals.", + "type": "number" + }, + "year": { + "description": "Calendar year of the grouped payments.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "totalInterest": { + "description": "Sum of all interest paid over the life of the loan, rounded to 2 decimals.", + "type": "number" + }, + "totalPaid": { + "description": "Total of principal plus interest paid, rounded to 2 decimals.", + "type": "number" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the calculation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_matrix_calculator12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / a / descriptionAdded value: +"First operand matrix for add, subtract, multiply. Array of rows; each row an array of finite numbers. Max 8 rows and 8 columns; must be rectangular." - changed
Input schema / properties / a / items / items / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / b / descriptionAdded value: +"Second operand matrix for add, subtract, multiply. For add/subtract must match the dimensions of a; for multiply rows(b) must equal cols(a)." - changed
Input schema / properties / b / items / items / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / matrixAdded value: +{ + "description": "Single operand matrix for scalarMultiply, transpose, determinant, inverse. Array of rows of finite numbers, max 8x8. determinant and inverse require it to be square.", + "items": { + "items": { + "type": "number" + }, + "type": "array" + }, + "type": "array" +} - added
Input schema / properties / operation / descriptionAdded value: +"Operation to perform. add/subtract/multiply use a and b; scalarMultiply uses matrix and scalar; transpose/determinant/inverse use matrix; identity uses size." - added
Input schema / properties / operation / enumAdded value: +[ + "add", + "subtract", + "multiply", + "scalarMultiply", + "transpose", + "determinant", + "inverse", + "identity" +] - added
Input schema / properties / scalarAdded value: +{ + "description": "Finite scalar multiplier used only by scalarMultiply.", + "type": "number" +} - added
Input schema / properties / sizeAdded value: +{ + "description": "Dimension n of the identity matrix to build (n x n). Used only by identity.", + "maximum": 8, + "minimum": 1, + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "a", - "b" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation that was performed, echoed back.", + "type": "string" + }, + "result": { + "description": "For determinant a single number; for all other operations the resulting matrix as an array of rows of numbers.", + "oneOf": [ + { + "type": "number" + }, + { + "items": { + "items": { + "type": "number" + }, + "type": "array" + }, + "type": "array" + } + ] + }, + "success": { + "description": "True when the calculation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_number_to_words8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / language / defaultAdded value: +"en" - added
Input schema / properties / language / descriptionAdded value: +"Output language: en for English short scale, es for Spanish long scale. Defaults to en." - added
Input schema / properties / language / enumAdded value: +[ + "en", + "es" +] - added
Input schema / properties / value / descriptionAdded value: +"Integer to spell out, as a digits-only string (optional leading minus) or a whole number. Use a string for values beyond JS-safe integer range. Magnitude must be below 10^36; non-integers and floats are rejected." - changed
Input schema / properties / value / typePrevious value: -"string"New value: +[ + "string", + "integer" +] - changed
Input schema / requiredPrevious value: -[ - "value", - "language" -]New value: +[ + "value" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "description": "The converted number and its word form.", + "properties": { + "language": { + "description": "Language actually used (en or es).", + "type": "string" + }, + "value": { + "description": "Normalized integer string (leading zeros stripped, sign preserved) that was converted.", + "type": "string" + }, + "words": { + "description": "The number spelled out in the chosen language.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "True when the conversion succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_percentage_calculator13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / fromAdded value: +{ + "description": "percentChange only: the starting value. Must be finite and non-zero (division by zero rejected).", + "type": "number" +} - added
Input schema / properties / operation / descriptionAdded value: +"Which calculation to run. Determines the other required fields: whatPercent needs value+total; percentOf needs percent+value; increase/decrease/addPercent need value+percent; percentChange needs from+to; reversePercent needs result+percent; partWhole needs percent+value." - added
Input schema / properties / operation / enumAdded value: +[ + "whatPercent", + "percentOf", + "increase", + "decrease", + "percentChange", + "addPercent", + "reversePercent", + "partWhole" +] - added
Input schema / properties / percent / descriptionAdded value: +"A percentage figure (e.g. 15 for 15 percent). Used by percentOf, increase/decrease/addPercent, reversePercent, and partWhole. Must be finite; for partWhole must be non-zero; for reversePercent must not equal -100." - changed
Input schema / properties / percent / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / resultAdded value: +{ + "description": "reversePercent only: the post-percent figure to work backward from. Must be finite.", + "type": "number" +} - added
Input schema / properties / toAdded value: +{ + "description": "percentChange only: the ending value. Must be finite.", + "type": "number" +} - added
Input schema / properties / totalAdded value: +{ + "description": "whatPercent only: the whole that value is measured against. Must be finite and non-zero (division by zero rejected).", + "type": "number" +} - added
Input schema / properties / value / descriptionAdded value: +"The base number. Used by whatPercent (the part), percentOf (the amount), increase/decrease/addPercent (the original), and partWhole (the known part). Must be finite." - changed
Input schema / properties / value / typePrevious value: -"integer"New value: +"number" - changed
Input schema / requiredPrevious value: -[ - "operation", - "percent", - "value" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation that was run, echoed back.", + "type": "string" + }, + "result": { + "description": "Operation-specific output. percent fields rounded to 4 decimals; value/amount fields to 6.", + "properties": { + "change": { + "description": "increase/decrease/addPercent/percentChange: the absolute amount added or removed.", + "type": "number" + }, + "direction": { + "description": "percentChange: sign of the change.", + "enum": [ + "increase", + "decrease", + "unchanged" + ], + "type": "string" + }, + "from": { + "description": "percentChange: the starting value, echoed.", + "type": "number" + }, + "original": { + "description": "increase/decrease/addPercent: the starting value; reversePercent: the recovered pre-percent value.", + "type": "number" + }, + "part": { + "description": "partWhole: the known part, echoed.", + "type": "number" + }, + "percent": { + "description": "The percentage figure (computed for whatPercent/percentChange; echoed otherwise).", + "type": "number" + }, + "percentChange": { + "description": "percentChange: the percent difference from the start to the end value.", + "type": "number" + }, + "result": { + "description": "percentOf/increase/decrease/addPercent/reversePercent: the computed amount.", + "type": "number" + }, + "to": { + "description": "percentChange: the ending value, echoed.", + "type": "number" + }, + "total": { + "description": "whatPercent: the input total, echoed.", + "type": "number" + }, + "value": { + "description": "whatPercent/percentOf: the input value, echoed.", + "type": "number" + }, + "whole": { + "description": "partWhole: the computed whole.", + "type": "number" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on a successful calculation.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_prime_number_checker10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / directionAdded value: +{ + "description": "Required for nextPrevPrime: next finds the smallest prime greater than n, prev the largest prime less than n (null if none exists).", + "enum": [ + "next", + "prev" + ], + "type": "string" +} - added
Input schema / properties / fromAdded value: +{ + "description": "Inclusive lower bound for listPrimes. Non-negative integer.", + "type": [ + "integer", + "string" + ] +} - added
Input schema / properties / n / descriptionAdded value: +"Target integer for check and nextPrevPrime. Must be a non-negative base-10 integer; pass values above 2^53 as a numeric string. Hard upper bound 2^64." - changed
Input schema / properties / n / typePrevious value: -"integer"New value: +[ + "integer", + "string" +] - added
Input schema / properties / operation / descriptionAdded value: +"Which computation to run: check tests one integer (needs n); listPrimes enumerates primes between from and to; nextPrevPrime finds the adjacent prime to n in a given direction." - added
Input schema / properties / operation / enumAdded value: +[ + "check", + "listPrimes", + "nextPrevPrime" +] - added
Input schema / properties / toAdded value: +{ + "description": "Inclusive upper bound for listPrimes. Non-negative integer; must be at least from, at most 10^8, and span (to minus from) at most 100000.", + "type": [ + "integer", + "string" + ] +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "n" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Present only on failure; the validation message.", + "type": "string" + }, + "result": { + "description": "Operation-specific payload.", + "properties": { + "count": { + "description": "Number of primes found (listPrimes only).", + "type": "integer" + }, + "direction": { + "description": "Search direction echoed (nextPrevPrime only).", + "enum": [ + "next", + "prev" + ], + "type": "string" + }, + "factors": { + "description": "Prime factorization for composite n up to 10^12, else null (check only).", + "items": { + "properties": { + "exponent": { + "description": "Its multiplicity.", + "type": "integer" + }, + "prime": { + "description": "A prime factor.", + "type": "integer" + } + }, + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "from": { + "description": "Effective lower bound (listPrimes only).", + "type": "integer" + }, + "isPrime": { + "description": "True if n is prime (check only).", + "type": "boolean" + }, + "method": { + "description": "Algorithm used (check only).", + "enum": [ + "small-trial-division", + "trial-division", + "miller-rabin-deterministic" + ], + "type": "string" + }, + "n": { + "description": "Echo of the input integer (check/nextPrevPrime).", + "type": [ + "integer", + "string" + ] + }, + "nextPrime": { + "description": "Smallest prime greater than n (check only).", + "type": [ + "integer", + "string", + "null" + ] + }, + "previousPrime": { + "description": "Largest prime less than n, or null if none (check only).", + "type": [ + "integer", + "string", + "null" + ] + }, + "prime": { + "description": "The adjacent prime, or null if none (nextPrevPrime only).", + "type": [ + "integer", + "string", + "null" + ] + }, + "primes": { + "description": "Primes in the range (listPrimes only).", + "items": { + "type": "integer" + }, + "type": "array" + }, + "reason": { + "description": "Human-readable explanation of the primality verdict (check only).", + "type": "string" + }, + "to": { + "description": "Effective upper bound (listPrimes only).", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_quadratic_solver14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / a / descriptionAdded value: +"Quadratic (x^2) coefficient for solve and evaluate. May be 0, in which case the equation is treated as linear or degenerate. Required for solve and evaluate." - changed
Input schema / properties / a / typePrevious value: -"integer"New value: +[ + "number", + "null" +] - added
Input schema / properties / b / descriptionAdded value: +"Linear (x) coefficient for solve and evaluate. Required for solve and evaluate." - changed
Input schema / properties / b / typePrevious value: -"integer"New value: +[ + "number", + "null" +] - added
Input schema / properties / c / descriptionAdded value: +"Constant term for solve and evaluate. Required for solve and evaluate." - changed
Input schema / properties / c / typePrevious value: -"integer"New value: +[ + "number", + "null" +] - added
Input schema / properties / operation / descriptionAdded value: +"Mode to run. solve needs a, b, c. evaluate needs a, b, c, x. fromRoots needs r1, r2." - added
Input schema / properties / operation / enumAdded value: +[ + "solve", + "evaluate", + "fromRoots" +] - added
Input schema / properties / r1Added value: +{ + "description": "First root of the quadratic to construct. Required for the fromRoots operation only.", + "type": [ + "number", + "null" + ] +} - added
Input schema / properties / r2Added value: +{ + "description": "Second root of the quadratic to construct. Required for the fromRoots operation only.", + "type": [ + "number", + "null" + ] +} - added
Input schema / properties / xAdded value: +{ + "description": "Point at which to evaluate f(x) = ax^2 + bx + c. Required for the evaluate operation only.", + "type": [ + "number", + "null" + ] +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "a", - "b", - "c" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation performed (solve, evaluate, or fromRoots).", + "type": "string" + }, + "result": { + "description": "Operation output. solve fields listed here; evaluate returns a, b, c, x, y, vertex, axis; fromRoots returns a, b, c, equation.", + "properties": { + "a": { + "description": "Rounded x^2 coefficient echoed back.", + "type": "number" + }, + "axisOfSymmetry": { + "description": "Axis of symmetry x = -b/(2a), or null when not a genuine quadratic.", + "type": [ + "number", + "null" + ] + }, + "b": { + "description": "Rounded x coefficient echoed back.", + "type": "number" + }, + "c": { + "description": "Rounded constant term echoed back.", + "type": "number" + }, + "discriminant": { + "description": "b^2 - 4ac, rounded to 10 decimals.", + "type": "number" + }, + "discriminantSign": { + "description": "Sign of the discriminant.", + "enum": [ + "positive", + "zero", + "negative" + ], + "type": "string" + }, + "equation": { + "description": "The cleaned equation string, for example x^2 - 3x + 2 = 0.", + "type": "string" + }, + "factored": { + "description": "Factored form when both roots are rational, else null.", + "type": [ + "string", + "null" + ] + }, + "isDegenerate": { + "description": "True when a = 0 and b = 0 (no or infinite solutions).", + "type": "boolean" + }, + "isLinear": { + "description": "True when a = 0 and b is non-zero (single linear root).", + "type": "boolean" + }, + "productOfRoots": { + "description": "Vieta product c/a, or null when not a genuine quadratic.", + "type": [ + "number", + "null" + ] + }, + "rootCount": { + "description": "Number of distinct roots, or the string infinite for the 0 = 0 case.", + "type": [ + "integer", + "string" + ] + }, + "roots": { + "description": "Roots as objects with real, imag, and a display repr. Empty when there are zero or infinite solutions.", + "items": { + "properties": { + "imag": { + "description": "Imaginary part of the root (0 for real roots).", + "type": "number" + }, + "real": { + "description": "Real part of the root.", + "type": "number" + }, + "repr": { + "description": "Display string for the root.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "sumOfRoots": { + "description": "Vieta sum -b/a, or null when not a genuine quadratic.", + "type": [ + "number", + "null" + ] + }, + "vertex": { + "description": "Parabola vertex with x and y, or null for linear/degenerate cases.", + "properties": { + "x": { + "description": "Vertex x-coordinate.", + "type": "number" + }, + "y": { + "description": "Vertex y-coordinate.", + "type": "number" + } + }, + "type": [ + "object", + "null" + ] + } + }, + "type": "object" + }, + "success": { + "description": "Whether the calculation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_random_number_generator17 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / count / defaultAdded value: +1 - added
Input schema / properties / count / descriptionAdded value: +"How many values to generate (integer/float/boolean/uuid/hex/bytes)." - added
Input schema / properties / count / maximumAdded value: +1000 - added
Input schema / properties / count / minimumAdded value: +1 - added
Input schema / properties / inclusive / descriptionAdded value: +"Whether max is included in the range. Integer default true; float default false. Ignored by other operations." - added
Input schema / properties / lengthAdded value: +{ + "description": "Output length per value — hex character count, or raw byte count for bytes (base64 is longer). Required for hex/bytes.", + "maximum": 1024, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / max / descriptionAdded value: +"Upper bound (required for integer/float; must be strictly greater than min)." - changed
Input schema / properties / max / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / min / descriptionAdded value: +"Lower bound (required for integer/float; must be strictly less than max). Integers must be whole numbers." - changed
Input schema / properties / min / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / operation / descriptionAdded value: +"Value family to generate. Determines which other fields are required." - added
Input schema / properties / operation / enumAdded value: +[ + "integer", + "float", + "boolean", + "uuid", + "hex", + "bytes" +] - added
Input schema / properties / seedAdded value: +{ + "description": "Optional seed string for deterministic xoshiro128** output (reproducible, NOT cryptographically secure). Omit for CSPRNG. Max 1024 characters.", + "maxLength": 1024, + "type": "string" +} - added
Input schema / properties / versionAdded value: +{ + "default": "v4", + "description": "UUID layout, used only when operation is uuid. v4 is fully random; v7 is timestamp-ordered (RFC 9562).", + "enum": [ + "v4", + "v7" + ], + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "min", - "max", - "count", - "inclusive" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "description": "Number of values returned (length of values).", + "type": "integer" + }, + "error": { + "description": "Present only on failure (HTTP 400) with the validation message; omitted on success.", + "type": "string" + }, + "operation": { + "description": "The operation that was executed (echoed from the request).", + "type": "string" + }, + "success": { + "description": "True when generation succeeded.", + "type": "boolean" + }, + "values": { + "description": "Generated values: numbers for integer/float, booleans for boolean, or strings for uuid/hex/bytes (base64).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
math_ratio_calculator15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / aAdded value: +{ + "description": "First proportion term (solveProportion only). Provide exactly three of a, b, c, d, each greater than zero, and omit the one to solve for.", + "type": "number" +} - added
Input schema / properties / anchorAdded value: +{ + "additionalProperties": false, + "description": "Anchor for the scale operation (required for scale, ignored otherwise): pin one part to a target value and scale the rest.", + "properties": { + "index": { + "description": "Zero-based index of the part to anchor; must be within the parts array.", + "minimum": 0, + "type": "integer" + }, + "value": { + "description": "Target value the anchored part should become; the scale factor is value divided by the original part.", + "type": "number" + } + }, + "type": "object" +} - added
Input schema / properties / bAdded value: +{ + "description": "Second proportion term (solveProportion only). Provide exactly three of a, b, c, d and omit the one to solve for.", + "type": "number" +} - added
Input schema / properties / cAdded value: +{ + "description": "Third proportion term (solveProportion only). Provide exactly three of a, b, c, d and omit the one to solve for.", + "type": "number" +} - added
Input schema / properties / dAdded value: +{ + "description": "Fourth proportion term (solveProportion only). Provide exactly three of a, b, c, d and omit the one to solve for.", + "type": "number" +} - added
Input schema / properties / operation / descriptionAdded value: +"Mode selector. simplify, scale, split, and percentage read the parts array; solveProportion reads a, b, c, d instead." - added
Input schema / properties / operation / enumAdded value: +[ + "simplify", + "solveProportion", + "scale", + "split", + "percentage" +] - added
Input schema / properties / parts / descriptionAdded value: +"Ratio terms for simplify, scale, split, and percentage (ignored by solveProportion). 2 to 8 finite numbers greater than zero; numeric strings are coerced. simplify additionally requires every value to be a positive integer." - changed
Input schema / properties / parts / items / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / parts / maxItemsAdded value: +8 - added
Input schema / properties / parts / minItemsAdded value: +2 - added
Input schema / properties / totalAdded value: +{ + "description": "Total to distribute across parts for the split operation (required for split, ignored otherwise). Each rounded allocation is proportional to its part.", + "type": "number" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "parts" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Present only on failure (HTTP 400/500) with the validation message; omitted on success.", + "type": "string" + }, + "operation": { + "description": "The operation that was executed (echoed from the request).", + "type": "string" + }, + "result": { + "description": "Operation-specific output. simplify returns input, simplified, gcd. solveProportion returns a, b, c, d, unknown, equation. scale returns input, scaled, anchor (index, value), factor. split returns total, parts, allocations, rounded, rounding. percentage returns parts, percentages, total.", + "properties": { + "a": { + "description": "Resolved first proportion term (solveProportion).", + "type": "number" + }, + "allocations": { + "description": "Exact unrounded proportional allocations of the total (split).", + "items": { + "type": "number" + }, + "type": "array" + }, + "anchor": { + "description": "The anchor that was applied (scale).", + "properties": { + "index": { + "description": "Zero-based index of the anchored part.", + "type": "integer" + }, + "value": { + "description": "Target value the anchored part was set to.", + "type": "number" + } + }, + "type": "object" + }, + "b": { + "description": "Resolved second proportion term (solveProportion).", + "type": "number" + }, + "c": { + "description": "Resolved third proportion term (solveProportion).", + "type": "number" + }, + "d": { + "description": "Resolved fourth proportion term (solveProportion).", + "type": "number" + }, + "equation": { + "description": "The solved proportion rendered as a over b equals c over d (solveProportion).", + "type": "string" + }, + "factor": { + "description": "Multiplier applied to every part (scale).", + "type": "number" + }, + "gcd": { + "description": "Greatest common divisor of the input parts (simplify).", + "type": "integer" + }, + "input": { + "description": "Validated input parts (simplify and scale).", + "items": { + "type": "number" + }, + "type": "array" + }, + "parts": { + "description": "Validated input parts (split and percentage).", + "items": { + "type": "number" + }, + "type": "array" + }, + "percentages": { + "description": "Each part as a percent of the whole (percentage).", + "items": { + "type": "number" + }, + "type": "array" + }, + "rounded": { + "description": "Integer allocations via largest-remainder rounding (split).", + "items": { + "type": "integer" + }, + "type": "array" + }, + "rounding": { + "description": "Rounding mode applied to the split allocations (always rounded).", + "type": "string" + }, + "scaled": { + "description": "Parts after applying the scale factor (scale).", + "items": { + "type": "number" + }, + "type": "array" + }, + "simplified": { + "description": "Parts reduced by their GCD (simplify).", + "items": { + "type": "number" + }, + "type": "array" + }, + "total": { + "description": "Echoed total (split) or sum of parts (percentage).", + "type": "number" + }, + "unknown": { + "description": "Which term was solved for, one of a, b, c, or d (solveProportion).", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "True when the calculation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_running_pace_converter18 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / exponentAdded value: +{ + "default": 1.06, + "description": "predict: Riegel fatigue exponent in the range above 0 up to 2. Defaults to 1.06.", + "maximum": 2, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / fromUnit / descriptionAdded value: +"convert: unit of value. Pace units are min_per_km and min_per_mi; speed units are km_per_h and mph." - added
Input schema / properties / fromUnit / enumAdded value: +[ + "min_per_km", + "min_per_mi", + "km_per_h", + "mph" +] - added
Input schema / properties / knownDistanceAdded value: +{ + "description": "predict: a distance alias (km, mi, 5K, 10K, half_marathon, marathon) or an object with a positive km number." +} - added
Input schema / properties / knownTimeAdded value: +{ + "description": "predict: the achieved time as HH:MM:SS or MM:SS (a number of seconds is also accepted). Must be greater than 0.", + "type": "string" +} - added
Input schema / properties / operation / defaultAdded value: +"convert" - added
Input schema / properties / operation / descriptionAdded value: +"Mode selector. convert needs value, fromUnit, toUnit. splits needs pace, paceUnit. predict needs knownDistance, knownTime, targetDistance (exponent optional). Defaults to convert when omitted." - added
Input schema / properties / operation / enumAdded value: +[ + "convert", + "splits", + "predict" +] - added
Input schema / properties / paceAdded value: +{ + "description": "splits: sustained pace as decimal minutes per unit (5.5 is 5 minutes 30 seconds). Must be greater than 0.", + "type": "number" +} - added
Input schema / properties / paceUnitAdded value: +{ + "description": "splits: unit the pace is expressed in.", + "enum": [ + "min_per_km", + "min_per_mi" + ], + "type": "string" +} - added
Input schema / properties / targetDistanceAdded value: +{ + "description": "predict: distance to predict, same accepted forms as knownDistance." +} - added
Input schema / properties / toUnit / descriptionAdded value: +"convert: unit to convert value into." - added
Input schema / properties / toUnit / enumAdded value: +[ + "min_per_km", + "min_per_mi", + "km_per_h", + "mph" +] - added
Input schema / properties / value / descriptionAdded value: +"convert: the figure to convert. Must be greater than 0. A pace value is decimal minutes (5.5 is 5 minutes 30 seconds); a speed value is in the fromUnit." - changed
Input schema / properties / value / typePrevious value: -"integer"New value: +"number" - removed
Input schema / requiredRemoved value: -[ - "operation", - "value", - "fromUnit", - "toUnit" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Operation-specific result. convert returns fromUnit, toUnit, fromValue, toValue (numbers) plus formattedFrom, formattedTo (strings). splits returns pace, paceUnit plus a splits object keyed 5K/10K/half_marathon/marathon, each with time (string) and seconds (number). predict returns knownDistance, targetDistance (echo), knownTime, predictedTime (strings), predictedSeconds, exponent (numbers).", + "type": "object" + }, + "operation": { + "description": "Echo of the operation that ran (convert when omitted).", + "type": "string" + } + }, + "type": "object" +}
- Changed
math_scientific_calculator7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / angleMode / defaultAdded value: +"rad" - added
Input schema / properties / angleMode / descriptionAdded value: +"Angle unit for trig and inverse-trig functions: rad treats arguments as radians, deg as degrees. Aliases radians and degrees are accepted." - added
Input schema / properties / angleMode / enumAdded value: +[ + "rad", + "deg" +] - added
Input schema / properties / expression / descriptionAdded value: +"Math expression to evaluate (max 1000 characters). Supports plus, minus, times, divide, modulo, power operators, the mod keyword, parentheses, factorial via bang or factorial(), functions (sin cos tan asin acos atan atan2 ln log log2 exp sqrt cbrt abs floor ceil round max min), constants pi and e, and scientific notation such as 1.5e10. Must not be blank." - changed
Input schema / requiredPrevious value: -[ - "expression", - "angleMode" -]New value: +[ + "expression" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "description": "The evaluation payload.", + "properties": { + "angleMode": { + "description": "The angle mode actually applied during evaluation.", + "enum": [ + "rad", + "deg" + ], + "type": "string" + }, + "expression": { + "description": "The original expression string as submitted.", + "type": "string" + }, + "result": { + "description": "The computed numeric value, normalized to 15 significant digits to suppress floating-point noise.", + "type": "number" + }, + "rpn": { + "description": "The expression rewritten in reverse-polish (postfix) form, space-separated, with function calls annotated by arity such as max colon 2.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "True when the expression evaluated successfully.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_statistics_calculator11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operation / descriptionAdded value: +"Mode selector. describe and zScores each need the values array; correlation and linearRegression each need both x and y arrays." - added
Input schema / properties / operation / enumAdded value: +[ + "describe", + "zScores", + "correlation", + "linearRegression" +] - added
Input schema / properties / values / descriptionAdded value: +"Numeric dataset for describe and zScores (required for those, ignored otherwise). 1 to 100000 finite numbers; numeric strings are coerced. NaN and Infinity are rejected." - changed
Input schema / properties / values / items / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / values / maxItemsAdded value: +100000 - added
Input schema / properties / values / minItemsAdded value: +1 - added
Input schema / properties / xAdded value: +{ + "description": "First numeric dataset for correlation and linearRegression (the independent variable for regression). 2 to 100000 finite numbers; must be the same length as y.", + "items": { + "type": "number" + }, + "maxItems": 100000, + "minItems": 2, + "type": "array" +} - added
Input schema / properties / yAdded value: +{ + "description": "Second numeric dataset for correlation and linearRegression (the dependent variable for regression). 2 to 100000 finite numbers; must be the same length as x.", + "items": { + "type": "number" + }, + "maxItems": 100000, + "minItems": 2, + "type": "array" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "values" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Echo of the requested operation.", + "type": "string" + }, + "result": { + "description": "Operation-specific output (fields below are grouped by the operation that returns them).", + "properties": { + "coefficientOfVariation": { + "description": "describe: sample stddev divided by mean; null when mean is 0.", + "type": [ + "number", + "null" + ] + }, + "count": { + "description": "describe: number of values in the dataset.", + "type": "integer" + }, + "formula": { + "description": "linearRegression: human-readable model form, y equals m times x plus b.", + "type": "string" + }, + "geometricMean": { + "description": "describe: geometric mean; null unless every value is positive.", + "type": [ + "number", + "null" + ] + }, + "harmonicMean": { + "description": "describe: harmonic mean; null unless every value is positive.", + "type": [ + "number", + "null" + ] + }, + "intercept": { + "description": "linearRegression: y-intercept b of the best-fit line.", + "type": "number" + }, + "kurtosis": { + "description": "describe: excess kurtosis (normal distribution gives roughly 0).", + "type": "number" + }, + "max": { + "description": "describe: largest value.", + "type": "number" + }, + "mean": { + "description": "describe and zScores: arithmetic mean.", + "type": "number" + }, + "median": { + "description": "describe: middle value (Type-7).", + "type": "number" + }, + "min": { + "description": "describe: smallest value.", + "type": "number" + }, + "mode": { + "description": "describe: most frequent values; empty when all values are unique.", + "items": { + "type": "number" + }, + "type": "array" + }, + "n": { + "description": "correlation and linearRegression: number of paired points used.", + "type": "integer" + }, + "outliers": { + "description": "describe: values beyond 1.5 times the IQR fences.", + "items": { + "type": "number" + }, + "type": "array" + }, + "pearson": { + "description": "correlation: Pearson product-moment coefficient.", + "type": "number" + }, + "percentiles": { + "description": "describe: Type-7 percentiles at p10, p25, p50, p75, p90, p95, p99.", + "properties": { + "p10": { + "description": "10th percentile.", + "type": "number" + }, + "p25": { + "description": "25th percentile.", + "type": "number" + }, + "p50": { + "description": "50th percentile.", + "type": "number" + }, + "p75": { + "description": "75th percentile.", + "type": "number" + }, + "p90": { + "description": "90th percentile.", + "type": "number" + }, + "p95": { + "description": "95th percentile.", + "type": "number" + }, + "p99": { + "description": "99th percentile.", + "type": "number" + } + }, + "type": "object" + }, + "quartiles": { + "description": "describe: q1, q2 (median), q3, and iqr (q3 minus q1).", + "properties": { + "iqr": { + "description": "Interquartile range (q3 minus q1).", + "type": "number" + }, + "q1": { + "description": "25th percentile.", + "type": "number" + }, + "q2": { + "description": "50th percentile (median).", + "type": "number" + }, + "q3": { + "description": "75th percentile.", + "type": "number" + } + }, + "type": "object" + }, + "rSquared": { + "description": "linearRegression: coefficient of determination (R squared).", + "type": "number" + }, + "range": { + "description": "describe: max minus min.", + "type": "number" + }, + "rootMeanSquare": { + "description": "describe: quadratic mean (RMS).", + "type": "number" + }, + "skewness": { + "description": "describe: Fisher-Pearson skewness.", + "type": "number" + }, + "slope": { + "description": "linearRegression: slope m of the best-fit line.", + "type": "number" + }, + "spearman": { + "description": "correlation: Spearman rank correlation coefficient.", + "type": "number" + }, + "stdDevPopulation": { + "description": "describe and zScores: population standard deviation (sigma).", + "type": "number" + }, + "stdDevSample": { + "description": "describe: sample standard deviation (s).", + "type": "number" + }, + "sum": { + "description": "describe: sum of all values.", + "type": "number" + }, + "values": { + "description": "zScores: the normalised input dataset.", + "items": { + "type": "number" + }, + "type": "array" + }, + "variancePopulation": { + "description": "describe: population variance (sigma squared).", + "type": "number" + }, + "varianceSample": { + "description": "describe: sample variance (s squared).", + "type": "number" + }, + "zScores": { + "description": "zScores: standardised score per value, (value minus mean) divided by population stddev.", + "items": { + "type": "number" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on a 200 response.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
math_unit_converter10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / category / descriptionAdded value: +"Physical-quantity category. Required for convert and listUnits. Both fromUnit and toUnit must be valid ids within this category." - added
Input schema / properties / category / enumAdded value: +[ + "length", + "mass", + "volume", + "area", + "energy", + "power", + "pressure", + "temperature", + "speed" +] - added
Input schema / properties / fromUnit / descriptionAdded value: +"Source unit id within category. Required for convert. Examples: length m/cm/km/in/ft/mi; mass kg/g/lb/oz; volume L/mL/gal_us; area m2/acre/ha; energy J/kWh/BTU; power W/kW/hp_metric; pressure Pa/bar/psi; temperature K/C/F/Ra; speed m_s/km_h/mph/knot. Call listUnits to enumerate a category." - added
Input schema / properties / operationAdded value: +{ + "default": "convert", + "description": "Action to run. convert requires category, fromUnit, toUnit, value. listUnits requires category. listCategories needs no other field.", + "enum": [ + "convert", + "listCategories", + "listUnits" + ], + "type": "string" +} - added
Input schema / properties / toUnit / descriptionAdded value: +"Target unit id within the same category. Required for convert. Same id set as fromUnit; call listUnits to enumerate valid ids for a category." - added
Input schema / properties / value / descriptionAdded value: +"Numeric quantity to convert, expressed in fromUnit. Required for convert. Accepts a JSON number or a numeric string (integer, decimal, or scientific notation); must be finite." - changed
Input schema / properties / value / typePrevious value: -"integer"New value: +[ + "number", + "string" +] - removed
Input schema / requiredRemoved value: -[ - "category", - "fromUnit", - "toUnit", - "value" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Operation payload. For convert: an object with category/fromUnit/toUnit/fromValue/toValue/formattedFrom/formattedTo. For listCategories: an array of category name strings. For listUnits: an array of unit objects with id, name, symbol, and factor or formula.", + "properties": { + "category": { + "description": "Echoed category of the conversion.", + "type": "string" + }, + "formattedFrom": { + "description": "Input value with source unit symbol, e.g. 26.2 mi.", + "type": "string" + }, + "formattedTo": { + "description": "Converted value with target unit symbol, e.g. 42.1648 km.", + "type": "string" + }, + "fromUnit": { + "description": "Resolved source unit id.", + "type": "string" + }, + "fromValue": { + "description": "The input value as parsed.", + "type": "number" + }, + "toUnit": { + "description": "Resolved target unit id.", + "type": "string" + }, + "toValue": { + "description": "The converted value in toUnit (finite).", + "type": "number" + } + }, + "type": "object" + }, + "operation": { + "description": "The operation that was performed (convert, listCategories, or listUnits).", + "type": "string" + } + }, + "type": "object" +}
- Changed
network_asn_lookup7 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / includeGeolocationAdded value: +{ + "default": false, + "description": "When true, include a geolocation object (country, region, city, zip, timezone, coordinates).", + "type": "boolean" +} - added
Input schema / properties / includePrefixesAdded value: +{ + "default": false, + "description": "When true, request announced prefixes (not populated by the default ip-api.com source; needs a BGP data source/worker).", + "type": "boolean" +} - added
Input schema / properties / includeUpstreamsAdded value: +{ + "default": false, + "description": "When true, request upstream AS peers (not populated by the default ip-api.com source; needs a BGP data source/worker).", + "type": "boolean" +} - added
Input schema / properties / targetAdded value: +{ + "description": "IP address, domain name, or AS number to look up, for example 8.8.8.8, google.com, or AS15169.", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "target" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "asn": { + "description": "Autonomous System details, or null when none found.", + "properties": { + "country": { + "description": "Country name.", + "type": [ + "string", + "null" + ] + }, + "description": { + "description": "AS name or ISP description.", + "type": [ + "string", + "null" + ] + }, + "number": { + "description": "AS number, e.g. AS15169.", + "type": "string" + }, + "organization": { + "description": "Owning organization.", + "type": [ + "string", + "null" + ] + }, + "registry": { + "description": "Regional Internet Registry (e.g. ARIN, RIPE).", + "type": [ + "string", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "dataSource": { + "description": "Origin of the data, e.g. ip-api.com, Direct ASN input, or Private/Reserved IP.", + "type": "string" + }, + "geolocation": { + "description": "Present only when includeGeolocation is true; null otherwise.", + "properties": { + "city": { + "description": "City name.", + "type": [ + "string", + "null" + ] + }, + "coordinates": { + "description": "lat, lon string, or null.", + "type": [ + "string", + "null" + ] + }, + "country": { + "description": "Country name.", + "type": [ + "string", + "null" + ] + }, + "countryCode": { + "description": "ISO country code.", + "type": [ + "string", + "null" + ] + }, + "region": { + "description": "Region/state name.", + "type": [ + "string", + "null" + ] + }, + "timezone": { + "description": "IANA timezone.", + "type": [ + "string", + "null" + ] + }, + "zip": { + "description": "Postal code.", + "type": [ + "string", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "prefixes": { + "description": "Announced prefixes when includePrefixes is true (empty from the default source); null otherwise.", + "type": [ + "array", + "null" + ] + }, + "resolvedIp": { + "description": "IP the target resolved to (null for direct AS-number input).", + "type": [ + "string", + "null" + ] + }, + "success": { + "description": "True when the lookup completed.", + "type": "boolean" + }, + "target": { + "description": "The input target, echoed back.", + "type": "string" + }, + "timestamp": { + "description": "ISO-8601 response time.", + "format": "date-time", + "type": "string" + }, + "upstreams": { + "description": "Upstream AS peers when includeUpstreams is true (empty from the default source); null otherwise.", + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
network_bgp_route_lookup9 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / resolveASNNamesAdded value: +{ + "default": true, + "description": "Resolve AS numbers to organisation names in the asNames map.", + "type": "boolean" +} - added
Input schema / properties / routeServerAdded value: +{ + "default": "bgpview", + "description": "Routing data source. Only bgpview is implemented; route-views and ripe-ris fall back to BGPView.", + "enum": [ + "bgpview", + "route-views", + "ripe-ris" + ], + "type": "string" +} - added
Input schema / properties / showAlternativePathsAdded value: +{ + "default": true, + "description": "Include up to three upstream/alternative AS paths in the result.", + "type": "boolean" +} - added
Input schema / properties / showPathLatencyAdded value: +{ + "default": false, + "description": "Include estimated path-latency analysis (best-effort; latency is not measured).", + "type": "boolean" +} - added
Input schema / properties / showRouteAttributesAdded value: +{ + "default": true, + "description": "Include path-analysis attributes (hop count, geographic path, diversity).", + "type": "boolean" +} - added
Input schema / properties / targetAdded value: +{ + "description": "IPv4/IPv6 address or CIDR prefix to look up (e.g. 8.8.8.8 or 8.8.8.0/24). Required; validated as an IP or CIDR before any query.", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "target" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "alternativePaths": { + "description": "Up to three upstream AS paths (when showAlternativePaths is true).", + "items": { + "properties": { + "asPath": { + "description": "Upstream AS then origin AS.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "localPref": { + "description": "Local preference (null).", + "type": [ + "integer", + "null" + ] + }, + "nextHop": { + "description": "Next-hop IP (null).", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "error": { + "description": "Present only on failure (400/500): describes the error.", + "type": "string" + }, + "pathAnalysis": { + "description": "Path metrics (present when showRouteAttributes or showPathLatency is true).", + "properties": { + "estimatedLatency": { + "description": "Estimated latency (null; not measured).", + "type": [ + "number", + "null" + ] + }, + "geographicPath": { + "description": "Origin AS country code.", + "type": [ + "string", + "null" + ] + }, + "pathDiversity": { + "description": "Multiple paths available or Single path.", + "type": "string" + }, + "riskyHops": { + "description": "Routing-hygiene warnings (e.g. missing abuse contacts).", + "items": { + "type": "string" + }, + "type": "array" + }, + "totalHops": { + "description": "AS hop count of the primary path.", + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "primaryRoute": { + "description": "Best-matching route, or null if no route was found.", + "properties": { + "asNames": { + "description": "Map of AS number to organisation name (present when resolveASNNames is true).", + "type": "object" + }, + "asPath": { + "description": "Origin AS number(s) for the most specific prefix.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "communities": { + "description": "BGP communities (empty; not provided by source).", + "items": { + "type": "string" + }, + "type": "array" + }, + "localPref": { + "description": "Local preference (null; not provided by source).", + "type": [ + "integer", + "null" + ] + }, + "med": { + "description": "Multi-exit discriminator (null; not provided by source).", + "type": [ + "integer", + "null" + ] + }, + "nextHop": { + "description": "Next-hop IP (null; BGPView does not provide it).", + "type": [ + "string", + "null" + ] + }, + "origin": { + "description": "BGP origin attribute (defaults to IGP).", + "type": "string" + }, + "pathLength": { + "description": "Number of hops in the AS path.", + "type": "integer" + }, + "routeAge": { + "description": "Route age (null; not provided by source).", + "type": [ + "string", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "routeCount": { + "description": "Total routes found (primary plus alternatives).", + "type": "integer" + }, + "routeServer": { + "description": "Routing data source actually used.", + "type": "string" + } + }, + "type": "object" +}
- Changed
network_cidr_calculator4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / inputAdded value: +{ + "description": "One IPv4 network in CIDR form like 192.168.1.0/24 (prefix 0-32), or an IP and contiguous dotted-decimal mask separated by a space like 192.168.1.0 255.255.255.0. A bare IP with no slash or mask is treated as /32. Each octet must be 0-255.", + "maxLength": 35, + "minLength": 7, + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "input" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "calculations": { + "description": "Computed network details for the parsed block.", + "properties": { + "binary": { + "description": "Dotted-binary forms of the key masks and addresses.", + "properties": { + "network_address": { + "description": "Network address in dotted binary.", + "type": "string" + }, + "subnet_mask": { + "description": "Subnet mask in dotted binary.", + "type": "string" + }, + "wildcard_mask": { + "description": "Wildcard mask in dotted binary.", + "type": "string" + } + }, + "type": "object" + }, + "broadcast_address": { + "description": "Broadcast address of the block.", + "type": "string" + }, + "cidr_notation": { + "description": "Normalised network/prefix, e.g. 192.168.1.0/24.", + "type": "string" + }, + "first_host": { + "description": "First usable host (network + 1), or N/A when none.", + "type": "string" + }, + "input_ip": { + "description": "The IPv4 address parsed from the input (before masking).", + "type": "string" + }, + "is_link_local": { + "description": "Whether the network is in 169.254.0.0/16.", + "type": "boolean" + }, + "is_loopback": { + "description": "Whether the network is in 127.0.0.0/8.", + "type": "boolean" + }, + "is_multicast": { + "description": "Whether the network is in 224.0.0.0/4.", + "type": "boolean" + }, + "is_private": { + "description": "Whether the network is RFC 1918 private space.", + "type": "boolean" + }, + "last_host": { + "description": "Last usable host (broadcast - 1), or N/A when none.", + "type": "string" + }, + "network_address": { + "description": "Network (subnet) address.", + "type": "string" + }, + "network_class": { + "description": "Classful range label for the network (A through E).", + "type": "string" + }, + "prefix_length": { + "description": "CIDR prefix length, 0-32.", + "type": "integer" + }, + "subnet_mask": { + "description": "Dotted-decimal subnet mask for the prefix.", + "type": "string" + }, + "subnets": { + "description": "Sample equal-size child subnets (one prefix longer); empty for very large or very small blocks.", + "items": { + "properties": { + "broadcast": { + "description": "Child broadcast address.", + "type": "string" + }, + "cidr": { + "description": "Child subnet in network/prefix form.", + "type": "string" + }, + "hosts": { + "description": "Usable hosts in the child subnet.", + "type": "integer" + }, + "network": { + "description": "Child network address.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "summary": { + "description": "Human-readable sizing notes.", + "properties": { + "common_use": { + "description": "Typical real-world use of this prefix.", + "type": "string" + }, + "network_size": { + "description": "Network size category description.", + "type": "string" + }, + "subnet_type": { + "description": "Subnet-type label for the prefix.", + "type": "string" + } + }, + "type": "object" + }, + "total_addresses": { + "description": "Total addresses in the block (two to the power of the host bits).", + "type": "integer" + }, + "usable_hosts": { + "description": "Usable hosts (total minus 2, minimum 0).", + "type": "integer" + }, + "wildcard_mask": { + "description": "Inverse (wildcard) mask, e.g. 0.0.0.255.", + "type": "string" + } + }, + "type": "object" + }, + "input": { + "description": "The submitted network string, trimmed and echoed back.", + "type": "string" + }, + "success": { + "description": "Always true on a 200; error responses use HTTP 400.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
network_dmarc_record_checker8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / action / descriptionAdded value: +"Only lookup is supported; performs a live DNS TXT query for _dmarc.<domain>. Any other value is rejected." - added
Input schema / properties / domain / descriptionAdded value: +"Domain whose DMARC record to query (registrable domain or hostname, e.g. example.com); the tool prepends _dmarc. automatically. No protocol or path; max 253 chars." - removed
Input schema / properties / domain / exampleRemoved value: -"example.com" - added
Input schema / properties / domain / examplesAdded value: +[ + "example.com" +] - added
Input schema / properties / domain / formatAdded value: +"hostname" - added
Input schema / properties / domain / maxLengthAdded value: +253 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "DMARC lookup payload.", + "properties": { + "all_records": { + "description": "All matching DMARC TXT record strings returned by the query.", + "items": { + "type": "string" + }, + "type": "array" + }, + "dmarc_domain": { + "description": "The full _dmarc.<domain> hostname queried; present on the local-resolver path, omitted on the remote-worker path.", + "type": [ + "string", + "null" + ] + }, + "dmarc_record": { + "description": "The first DMARC TXT record found (starts with v=DMARC1), or null if none.", + "type": [ + "string", + "null" + ] + }, + "domain": { + "description": "The domain that was queried.", + "type": "string" + }, + "error": { + "description": "Error message when no DMARC record is found or the DNS lookup fails; null on success.", + "type": [ + "string", + "null" + ] + }, + "multiple_records": { + "description": "True when more than one DMARC record exists for the domain (a misconfiguration); present on the local-resolver path.", + "type": "boolean" + } + }, + "type": "object" + }, + "success": { + "description": "True when the request was processed; false on invalid input or server error.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
network_dns6 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / dnsServerAdded value: +{ + "default": "8.8.8.8", + "description": "Resolver IP used for the lookup. Defaults to Google Public DNS (8.8.8.8). Honored when a remote worker performs the query.", + "type": "string" +} - added
Input schema / properties / hostAdded value: +{ + "description": "Domain name or IP address to resolve (for example example.com or 8.8.8.8). Validated as a hostname or IP; must not be blank.", + "type": "string" +} - added
Input schema / properties / recordTypeAdded value: +{ + "default": "A", + "description": "DNS record type to query. Defaults to A (IPv4). PTR reverses an IPv4 host into in-addr.arpa form automatically.", + "enum": [ + "A", + "AAAA", + "MX", + "NS", + "TXT", + "CNAME", + "PTR", + "SOA" + ], + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "host" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "additional": { + "description": "Additional-section records, or null when not provided.", + "items": { + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "authority": { + "description": "Authority-section records, or null when not provided.", + "items": { + "type": "object" + }, + "type": [ + "array", + "null" + ] + }, + "dnsServer": { + "description": "The resolver IP used for the query.", + "type": "string" + }, + "host": { + "description": "The queried domain or IP, echoed back.", + "type": "string" + }, + "recordType": { + "description": "The record type that was queried.", + "type": "string" + }, + "records": { + "description": "Matched DNS records (empty when none exist or the query failed).", + "items": { + "properties": { + "details": { + "description": "Human-readable note about the record type.", + "type": "string" + }, + "name": { + "description": "Owner name of the record.", + "type": "string" + }, + "priority": { + "description": "Preference value (MX records only).", + "type": "integer" + }, + "ttl": { + "description": "Time-to-live in seconds.", + "type": "integer" + }, + "type": { + "description": "Record type of this entry (A, MX, and so on).", + "type": "string" + }, + "value": { + "description": "Record data (IP, target host, or text).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "success": { + "description": "Whether the lookup completed.", + "type": "boolean" + }, + "timestamp": { + "description": "ISO 8601 time the response was generated.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
network_dns_propagation5 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / domainAdded value: +{ + "description": "Domain name to check (for example example.com). Must be a valid hostname of one or more labels with a letter top-level domain.", + "maxLength": 253, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / record_typeAdded value: +{ + "default": "A", + "description": "DNS record type to query at each resolver. Defaults to A when omitted.", + "enum": [ + "A", + "AAAA", + "CNAME", + "MX", + "TXT", + "NS", + "SOA" + ], + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "domain" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "domain": { + "description": "The domain that was queried, echoed back.", + "type": "string" + }, + "record_type": { + "description": "The record type that was queried (defaults to A).", + "type": "string" + }, + "results": { + "description": "One entry per queried resolver.", + "items": { + "properties": { + "error": { + "description": "Error message for this resolver, or null on success.", + "type": [ + "string", + "null" + ] + }, + "records": { + "description": "Records returned by this resolver.", + "items": { + "type": "string" + }, + "type": "array" + }, + "response_time": { + "description": "Resolver response time in milliseconds.", + "type": "number" + }, + "server_ip": { + "description": "IP address of the resolver queried.", + "type": "string" + }, + "server_name": { + "description": "Human-readable resolver name (for example Google Primary).", + "type": "string" + }, + "status": { + "description": "Outcome for this resolver.", + "enum": [ + "success", + "no_records", + "error" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "success": { + "description": "Whether the check ran successfully.", + "type": "boolean" + }, + "summary": { + "description": "Aggregate propagation analysis across all resolvers.", + "properties": { + "average_response_time": { + "description": "Mean response time of successful resolvers in milliseconds.", + "type": "number" + }, + "failed_servers": { + "description": "Count of resolvers that returned no records or errored.", + "type": "integer" + }, + "is_consistent": { + "description": "Whether all returned records were identical across resolvers.", + "type": "boolean" + }, + "propagated_servers": { + "description": "Count of resolvers that returned records.", + "type": "integer" + }, + "propagation_percentage": { + "description": "Percentage of resolvers that returned records.", + "type": "number" + }, + "propagation_status": { + "description": "Overall propagation verdict.", + "enum": [ + "complete", + "mostly_propagated", + "partial", + "limited", + "not_propagated" + ], + "type": "string" + }, + "record_count": { + "description": "Number of distinct record values seen.", + "type": "integer" + }, + "total_servers": { + "description": "Number of resolvers queried.", + "type": "integer" + }, + "unique_records": { + "description": "Distinct record values seen across all resolvers.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "timestamp": { + "description": "Server timestamp when the check ran (Y-m-d H:i:s).", + "type": "string" + }, + "total_time": { + "description": "Sum of all per-resolver response times in milliseconds.", + "type": "number" + }, + "warnings": { + "description": "Human-readable advisories about incomplete or inconsistent propagation.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
network_ip_geolocation4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / ipAdded value: +{ + "description": "Public IPv4 or IPv6 address to locate. Must be a valid, non-private, non-reserved address.", + "examples": [ + "8.8.8.8" + ], + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "ip" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "accuracy": { + "description": "Static confidence estimates for each location tier.", + "properties": { + "city": { + "description": "City-level accuracy estimate.", + "type": "string" + }, + "coordinates": { + "description": "Coordinate precision estimate.", + "type": "string" + }, + "country": { + "description": "Country-level accuracy estimate.", + "type": "string" + }, + "note": { + "description": "Caveat about accuracy variance.", + "type": "string" + }, + "region": { + "description": "Region-level accuracy estimate.", + "type": "string" + } + }, + "type": "object" + }, + "data_sources": { + "description": "Provenance of each data category.", + "properties": { + "geolocation": { + "description": "Source of the geolocation data.", + "type": "string" + }, + "isp_info": { + "description": "Source of the ISP/owner data.", + "type": "string" + }, + "network_info": { + "description": "Source of the routing/network data.", + "type": "string" + } + }, + "type": "object" + }, + "ip": { + "description": "The IP address that was looked up, echoed back.", + "type": "string" + }, + "location": { + "description": "Geographic data for the IP.", + "properties": { + "city": { + "description": "City name.", + "type": [ + "string", + "null" + ] + }, + "continent": { + "description": "Continent name.", + "type": [ + "string", + "null" + ] + }, + "continent_code": { + "description": "Two-letter continent code.", + "type": [ + "string", + "null" + ] + }, + "country": { + "description": "Country name.", + "type": [ + "string", + "null" + ] + }, + "country_code": { + "description": "ISO 3166-1 alpha-2 country code.", + "type": [ + "string", + "null" + ] + }, + "currency": { + "description": "Local currency code.", + "type": [ + "string", + "null" + ] + }, + "district": { + "description": "District/neighborhood, when known.", + "type": [ + "string", + "null" + ] + }, + "latitude": { + "description": "Latitude in decimal degrees.", + "type": [ + "number", + "null" + ] + }, + "longitude": { + "description": "Longitude in decimal degrees.", + "type": [ + "number", + "null" + ] + }, + "region": { + "description": "Region/state name.", + "type": [ + "string", + "null" + ] + }, + "region_code": { + "description": "Region/state code.", + "type": [ + "string", + "null" + ] + }, + "timezone": { + "description": "IANA timezone name.", + "type": [ + "string", + "null" + ] + }, + "timezone_offset": { + "description": "UTC offset in seconds.", + "type": [ + "integer", + "null" + ] + }, + "zip": { + "description": "Postal/ZIP code.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "network": { + "description": "Network ownership and classification for the IP.", + "properties": { + "as_number": { + "description": "Autonomous System number (e.g. AS15169).", + "type": [ + "string", + "null" + ] + }, + "as_organization": { + "description": "Autonomous System organization name.", + "type": [ + "string", + "null" + ] + }, + "is_hosting": { + "description": "True if the IP belongs to a hosting/datacenter provider.", + "type": "boolean" + }, + "is_mobile": { + "description": "True if the IP is a mobile/cellular network.", + "type": "boolean" + }, + "is_proxy": { + "description": "True if the IP is a known proxy/VPN/Tor exit.", + "type": "boolean" + }, + "isp": { + "description": "Internet service provider name.", + "type": [ + "string", + "null" + ] + }, + "organization": { + "description": "Organization that owns the IP block.", + "type": [ + "string", + "null" + ] + }, + "reverse_dns": { + "description": "PTR/reverse-DNS hostname, when resolvable.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "success": { + "description": "True when the lookup succeeded.", + "type": "boolean" + }, + "timestamp": { + "description": "ISO 8601 timestamp of the response.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
network_ip_range_calculator13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / cidr / descriptionAdded value: +"CIDR block in address/prefix form, required for the cidr, check, and list operations. Prefix must be 0-32." - added
Input schema / properties / cidr / examplesAdded value: +[ + "192.168.1.0/24" +] - added
Input schema / properties / endIpAdded value: +{ + "description": "Last IPv4 address of the range, required for the range operation.", + "examples": [ + "192.168.1.50" + ], + "type": "string" +} - added
Input schema / properties / inputAdded value: +{ + "description": "Alias for cidr accepted only by the cidr operation; cidr takes precedence when both are present.", + "examples": [ + "10.0.0.0/8" + ], + "type": "string" +} - added
Input schema / properties / ipAdded value: +{ + "description": "IPv4 address to test for membership, required for the check operation.", + "examples": [ + "192.168.1.42" + ], + "type": "string" +} - added
Input schema / properties / limitAdded value: +{ + "default": 100, + "description": "Maximum number of addresses to enumerate for the list operation. Output is truncated to this many.", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / operation / defaultAdded value: +"cidr" - added
Input schema / properties / operation / descriptionAdded value: +"Which calculation to run. cidr expands a CIDR block; range summarises start/end IPs; check tests membership; list enumerates addresses." - added
Input schema / properties / operation / enumAdded value: +[ + "cidr", + "range", + "check", + "list" +] - added
Input schema / properties / startIpAdded value: +{ + "description": "First IPv4 address of the range, required for the range operation. Must be less than or equal to endIp.", + "examples": [ + "192.168.1.10" + ], + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "cidr" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message when success is false.", + "type": "string" + }, + "operation": { + "description": "The operation that was run, echoed back.", + "type": "string" + }, + "result": { + "description": "Operation-specific payload (object for cidr/range/list; the check operation instead returns a boolean here).", + "properties": { + "broadcastAddress": { + "description": "cidr: broadcast (last) address of the block.", + "type": "string" + }, + "endIp": { + "description": "range: last address, normalised.", + "type": "string" + }, + "firstUsableHost": { + "description": "cidr: first usable host, or null when none.", + "type": [ + "string", + "null" + ] + }, + "hostCount": { + "description": "cidr: count of usable hosts (0 for /31 and /32).", + "type": "integer" + }, + "ips": { + "description": "list: enumerated IPv4 addresses, capped by limit.", + "items": { + "type": "string" + }, + "type": "array" + }, + "isPrivate": { + "description": "cidr: true when the block is RFC 1918 private space.", + "type": "boolean" + }, + "lastUsableHost": { + "description": "cidr: last usable host, or null when none.", + "type": [ + "string", + "null" + ] + }, + "networkAddress": { + "description": "cidr: network (base) address of the block.", + "type": "string" + }, + "networkClass": { + "description": "cidr: classful network letter A-E.", + "type": "string" + }, + "prefix": { + "description": "cidr: prefix length 0-32.", + "type": "integer" + }, + "range": { + "description": "range: human-readable start to end string.", + "type": "string" + }, + "startIp": { + "description": "range: first address, normalised.", + "type": "string" + }, + "subnetMask": { + "description": "cidr: dotted-decimal subnet mask.", + "type": "string" + }, + "totalAddresses": { + "description": "cidr/range: total addresses including network and broadcast.", + "type": "integer" + }, + "totalGenerated": { + "description": "list: number of addresses returned.", + "type": "integer" + }, + "totalInRange": { + "description": "list: total addresses in the CIDR block.", + "type": "integer" + }, + "truncated": { + "description": "list: true when the block has more addresses than were returned.", + "type": "boolean" + }, + "wildcardMask": { + "description": "cidr: inverse (wildcard) mask.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "True when the calculation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
network_mx_record_lookup6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / action / descriptionAdded value: +"Operation to run; only \"lookup\" is supported." - added
Input schema / properties / domain / descriptionAdded value: +"Domain whose MX records to resolve, hostname only (no scheme or path), e.g. example.com." - removed
Input schema / properties / domain / exampleRemoved value: -"example.com" - added
Input schema / properties / domain / examplesAdded value: +[ + "example.com" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The MX result payload.", + "properties": { + "domain": { + "description": "The domain that was queried, echoed back.", + "type": "string" + }, + "error": { + "description": "Present/non-null when no records were found or the DNS lookup failed.", + "type": [ + "string", + "null" + ] + }, + "mx_records": { + "description": "MX records sorted ascending by priority; empty when none exist.", + "items": { + "properties": { + "class": { + "description": "DNS class, e.g. IN (local resolver path only).", + "type": "string" + }, + "exchange": { + "description": "Mail server hostname, trailing dot stripped.", + "type": "string" + }, + "host": { + "description": "Queried host (local resolver path only).", + "type": "string" + }, + "priority": { + "description": "MX preference value; lower is preferred.", + "type": "integer" + }, + "ttl": { + "description": "Record time-to-live in seconds (local resolver path only).", + "type": "integer" + }, + "type": { + "description": "Record type, always MX (local resolver path only).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "record_count": { + "description": "Number of MX records returned (local resolver path only).", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "True when the lookup completed (HTTP 400/500 with success false on error).", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
network_my_ip1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "as": { + "description": "Autonomous System number and name (such as AS15169 Google LLC).", + "type": [ + "string", + "null" + ] + }, + "city": { + "description": "City name.", + "type": [ + "string", + "null" + ] + }, + "country": { + "description": "Country name from ip-api.com (present only when the geo lookup succeeds).", + "type": [ + "string", + "null" + ] + }, + "countryCode": { + "description": "Two-letter ISO country code.", + "type": [ + "string", + "null" + ] + }, + "data_sources_info": { + "additionalProperties": true, + "description": "Explanations of how each data point is derived and approximate accuracy.", + "type": "object" + }, + "headers": { + "additionalProperties": true, + "description": "Echo of selected request headers including proxy-detection headers; each value is the header string or null when absent.", + "type": "object" + }, + "hosting": { + "description": "True if the IP belongs to a hosting or data-center range.", + "type": [ + "boolean", + "null" + ] + }, + "ip": { + "description": "The public IP address detected for the caller, or unknown if it could not be determined.", + "type": "string" + }, + "ip_analysis": { + "additionalProperties": true, + "description": "Per-header breakdown keyed by server variable (HTTP_X_FORWARDED_FOR and similar); each entry reports its value, a human description, and a present flag.", + "type": "object" + }, + "isp": { + "description": "Internet service provider name.", + "type": [ + "string", + "null" + ] + }, + "lat": { + "description": "Latitude of the approximate location.", + "type": [ + "number", + "null" + ] + }, + "lon": { + "description": "Longitude of the approximate location.", + "type": [ + "number", + "null" + ] + }, + "mobile": { + "description": "True if the IP is on a mobile carrier network.", + "type": [ + "boolean", + "null" + ] + }, + "org": { + "description": "Organization that owns the IP.", + "type": [ + "string", + "null" + ] + }, + "proxy": { + "description": "True if ip-api flags the IP as a proxy or VPN.", + "type": [ + "boolean", + "null" + ] + }, + "proxy_detection": { + "description": "Proxy/CDN analysis derived from forwarding headers.", + "properties": { + "all_detected_ips": { + "description": "Every valid IP found across all inspected headers.", + "items": { + "type": "string" + }, + "type": "array" + }, + "behind_proxy": { + "description": "True when a forwarded IP differs from the direct connection IP.", + "type": "boolean" + }, + "detected_via": { + "description": "Which header or source the chosen IP came from.", + "type": [ + "string", + "null" + ] + }, + "direct_connection_ip": { + "description": "IP the web server saw on the socket.", + "type": "string" + }, + "original_ip": { + "description": "Best client IP parsed from forwarding headers, if any.", + "type": [ + "string", + "null" + ] + }, + "proxy_ip": { + "description": "Direct connection IP treated as the proxy, when behind a proxy.", + "type": [ + "string", + "null" + ] + }, + "proxy_type": { + "description": "Inferred proxy class (such as Cloudflare CDN) when behind a proxy.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "region": { + "description": "Region or state name (ip-api regionName).", + "type": [ + "string", + "null" + ] + }, + "server_info": { + "additionalProperties": true, + "description": "Details about the responding server and connection (server IP/port, HTTPS, protocol, method).", + "type": "object" + }, + "source": { + "description": "How the IP was obtained; always server_detection.", + "type": "string" + }, + "timestamp": { + "description": "ISO 8601 time the response was generated.", + "format": "date-time", + "type": "string" + }, + "timezone": { + "description": "IANA timezone name for the location.", + "type": [ + "string", + "null" + ] + }, + "warning": { + "description": "Present only when the ip-api.com lookup failed; the geo fields are then omitted.", + "type": "string" + }, + "zip": { + "description": "Postal/ZIP code.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
network_ping4 fields changed- changed
Input schema / properties / packet / descriptionPrevious value: -"Number of ping packets to send when supported by the selected worker."New value: +"Number of ICMP echo packets to send on the remote-worker path; the reported time is the average across replies. Ignored by the HTTP fallback, which always issues one request." - changed
Input schema / properties / target / descriptionPrevious value: -"Hostname or IP address to ping, for example 8.8.8.8 or example.com."New value: +"Hostname or IPv4/IPv6 address to ping, e.g. 8.8.8.8 or example.com. No scheme or path. Private, reserved, and loopback addresses are rejected." - removed
Input schema / properties / target / examplesRemoved value: -[ - "8.8.8.8" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "bytes": { + "description": "Payload size in bytes (fixed 32). Present only on the HTTP simulation fallback path.", + "type": "integer" + }, + "host": { + "description": "Host that answered: the target hostname on the worker path, or the resolved public IP on the HTTP fallback path.", + "type": "string" + }, + "method": { + "description": "Which mechanism produced the result: remote_icmp for a real ICMP ping via a worker, or HTTP simulation for the HTTP reachability fallback.", + "enum": [ + "remote_icmp", + "HTTP simulation" + ], + "type": "string" + }, + "packet": { + "description": "Number of packets sent (worker path) or 1 (HTTP fallback).", + "type": "integer" + }, + "raw_output": { + "description": "Full raw text output of the system ping command. Present only on the remote_icmp worker path.", + "type": "string" + }, + "status_code": { + "description": "HTTP status code returned by the reachability probe. Present only on the HTTP simulation fallback path.", + "type": "integer" + }, + "success": { + "description": "True when the host responded (ICMP exit code 0, or a completed HTTP request).", + "type": "boolean" + }, + "target": { + "description": "The hostname or IP that was pinged, echoed from the request.", + "type": "string" + }, + "time": { + "description": "Round-trip time in milliseconds: average ICMP reply time on the worker path, or total HTTP response time on the fallback. Null when no reply was received.", + "type": [ + "number", + "null" + ] + }, + "timestamp": { + "description": "ISO 8601 timestamp of when the ping completed.", + "format": "date-time", + "type": "string" + }, + "ttl": { + "description": "Time To Live from the reply (parsed from ICMP on the worker path; defaulted to 64 on the HTTP fallback).", + "type": "integer" + } + }, + "type": "object" +}
- Changed
network_port_scan6 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / hostAdded value: +{ + "description": "Target hostname or IP address to scan. Must resolve to a publicly-routable address (private and reserved IPs are rejected).", + "type": "string" +} - added
Input schema / properties / portsAdded value: +{ + "default": "22,23,25,53,80,110,143,443,993,995", + "description": "Comma-separated ports and ranges (for example 80,443,8080 or 1-1024). Each port must be 1-65535; at most 100 distinct ports after expansion or the request is rejected.", + "type": "string" +} - added
Input schema / properties / timeoutAdded value: +{ + "default": 3, + "description": "Per-port TCP connect timeout in seconds. Values outside 1-30 are coerced to 3.", + "maximum": 30, + "minimum": 1, + "type": "integer" +} - added
Input schema / requiredAdded value: +[ + "host" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "host": { + "description": "The submitted target host, echoed back.", + "type": "string" + }, + "ports_scanned": { + "description": "Number of ports probed.", + "type": "integer" + }, + "results": { + "description": "One entry per scanned port.", + "items": { + "properties": { + "port": { + "description": "Port number probed.", + "type": "integer" + }, + "response_time": { + "description": "Connect attempt duration in milliseconds.", + "type": "number" + }, + "service": { + "description": "Detected service name for open ports (empty when not open or unknown).", + "type": "string" + }, + "status": { + "description": "Result: open, closed, or filtered.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "success": { + "description": "Whether the scan completed.", + "type": "boolean" + }, + "summary": { + "description": "Aggregate counts across all probed ports.", + "properties": { + "closed_ports": { + "description": "Count with status closed.", + "type": "integer" + }, + "filtered_ports": { + "description": "Count with status filtered.", + "type": "integer" + }, + "open_ports": { + "description": "Count with status open.", + "type": "integer" + }, + "total_ports": { + "description": "Total ports scanned.", + "type": "integer" + } + }, + "type": "object" + }, + "target_ip": { + "description": "The resolved publicly-routable IP the scan was pinned to.", + "type": "string" + }, + "timeout": { + "description": "Per-port timeout in seconds actually used.", + "type": "integer" + }, + "timestamp": { + "description": "ISO 8601 completion time.", + "format": "date-time", + "type": "string" + }, + "warnings": { + "description": "Advisory notices about logging, authorization, and rate limits.", + "items": { + "description": "A single advisory message.", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
network_proxy_list_more5 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": false, + "description": "The active list filters identifying which view to page. Must match the filters used for the initial page render so the unlock and offset align.", + "properties": { + "anonymity": { + "description": "Anonymity level to include. Omit for all levels.", + "enum": [ + "elite", + "anonymous", + "transparent" + ], + "type": "string" + }, + "country": { + "description": "Country slug or exact stored country name (e.g. \"united-states\"); invalid values are ignored.", + "type": "string" + }, + "https": { + "description": "Tri-state TLS filter: true = HTTPS-capable only, false = non-HTTPS only, omit = no filter.", + "type": "boolean" + }, + "protocol": { + "description": "Proxy protocol to include. Omit for all protocols.", + "enum": [ + "http", + "https", + "socks4", + "socks5" + ], + "type": "string" + }, + "sort": { + "default": "reliability", + "description": "Row ordering; defaults to reliability when omitted or invalid.", + "enum": [ + "reliability", + "speed", + "recent" + ], + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / tokenAdded value: +{ + "description": "reCAPTCHA v3 response token (action \"proxy_list_load_more\"). Required only on the first reveal of a filter view; may also be sent via the X-Captcha-Response header. Omit once the view is unlocked for the session.", + "type": "string" +} - added
Input schema / requiredAdded value: +[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "description": "Number of additional proxy rows included in html.", + "type": "integer" + }, + "done": { + "description": "Always true; all remaining rows (up to the 200 cap) are returned in one call, so there is nothing further to page.", + "type": "boolean" + }, + "html": { + "description": "Pre-rendered HTML table rows for the proxies beyond the initial 50, ready to append to the list.", + "type": "string" + }, + "success": { + "description": "True when rows were returned (false with a 403 status when captcha verification is required).", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
network_request_headers4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "worker_id": { + "description": "Optional registered healthy worker peer ID. Omit to use the default master-server behavior.", + "minimum": 1, + "type": "integer" + } +} - added
Input schema / requiredAdded value: +[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Parsed browser info, present/missing security headers, connection details, accepted_types/languages/encodings, and request_type.", + "type": "object" + }, + "headers": { + "additionalProperties": { + "type": "string" + }, + "description": "Incoming request headers, Title-Cased name to comma-joined value.", + "type": "object" + }, + "raw_headers": { + "description": "Raw request line plus header lines as a single CRLF-joined string.", + "type": "string" + }, + "request_info": { + "description": "Request metadata (method, scheme, host, port, path, query_string, protocol, remote_addr, remote_port, server_addr, server_port, server_software, request_time, request_uri, is_secure, is_xhr).", + "type": "object" + }, + "success": { + "description": "True when inspection completed.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
network_request_headers_post3 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / requiredAdded value: +[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Parsed browser info, present/missing security headers, connection details, accepted_types/languages/encodings, and request_type.", + "type": "object" + }, + "headers": { + "additionalProperties": { + "type": "string" + }, + "description": "Incoming request headers, Title-Cased name to comma-joined value.", + "type": "object" + }, + "raw_headers": { + "description": "Raw request line plus header lines as a single CRLF-joined string.", + "type": "string" + }, + "request_info": { + "description": "Request metadata (method, scheme, host, port, path, query_string, protocol, remote_addr, remote_port, server_addr, server_port, server_software, request_time, request_uri, is_secure, is_xhr).", + "type": "object" + }, + "success": { + "description": "True when inspection completed.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
network_reverse_dns5 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / dnsServerAdded value: +{ + "default": "8.8.8.8", + "description": "Optional resolver IP to query; defaults to 8.8.8.8.", + "type": "string" +} - added
Input schema / properties / ipAdded value: +{ + "description": "IPv4 or IPv6 address to resolve to a hostname; validated, no scheme/port/CIDR, e.g. 8.8.8.8 or 2001:4860:4860::8888.", + "examples": [ + "8.8.8.8" + ], + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "ip" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "dnsServer": { + "description": "The resolver IP that was used.", + "type": "string" + }, + "hostnames": { + "description": "Resolved hostnames; empty when the IP has no PTR record.", + "items": { + "properties": { + "name": { + "description": "Resolved hostname (PTR target).", + "type": "string" + }, + "source": { + "description": "Resolution method, gethostbyaddr or dns_get_record.", + "type": "string" + }, + "ttl": { + "description": "Record time-to-live in seconds; 3600 for gethostbyaddr results.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "ip": { + "description": "The IP address that was queried, echoed back.", + "type": "string" + }, + "ipType": { + "description": "IPv4 or IPv6, inferred from the input.", + "type": "string" + }, + "ptrQuery": { + "description": "The reverse-zone query issued, e.g. 8.8.8.8.in-addr.arpa or an ip6.arpa name.", + "type": "string" + }, + "success": { + "description": "True on the local resolver path when the lookup completed.", + "type": "boolean" + }, + "timestamp": { + "description": "ISO 8601 timestamp of the response.", + "type": "string" + } + }, + "type": "object" +}
- Changed
network_spf_record_checker6 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / actionAdded value: +{ + "default": "lookup", + "description": "lookup performs a live DNS TXT query for the domain; parse parses the supplied record string offline with no network call.", + "enum": [ + "lookup", + "parse" + ], + "type": "string" +} - added
Input schema / properties / domainAdded value: +{ + "description": "Domain to query for an SPF record (registrable domain or hostname, e.g. example.com); required for action=lookup, ignored for action=parse. No protocol or path.", + "examples": [ + "example.com" + ], + "format": "hostname", + "type": "string" +} - added
Input schema / properties / recordAdded value: +{ + "description": "Raw SPF record string to parse; required only when action=parse and must start with v=spf1.", + "examples": [ + "v=spf1 include:_spf.google.com ~all" + ], + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "domain" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Result payload; shape depends on action.", + "properties": { + "all_records": { + "description": "Every SPF record found for the domain (lookup action).", + "items": { + "type": "string" + }, + "type": "array" + }, + "domain": { + "description": "The queried domain (lookup action).", + "type": "string" + }, + "error": { + "description": "Lookup-level error (e.g. no TXT/SPF record), or null on success.", + "type": [ + "string", + "null" + ] + }, + "errors": { + "description": "Token parse errors (parse action).", + "items": { + "type": "string" + }, + "type": "array" + }, + "mechanisms": { + "description": "Parsed SPF mechanisms (parse action).", + "items": { + "properties": { + "description": { + "type": "string" + }, + "original": { + "type": "string" + }, + "qualifier": { + "type": "string" + }, + "qualifierDescription": { + "type": "string" + }, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "modifiers": { + "description": "Parsed SPF modifiers such as redirect/exp (parse action).", + "items": { + "properties": { + "description": { + "type": "string" + }, + "original": { + "type": "string" + }, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "multiple_records": { + "description": "True when more than one SPF record exists, which is invalid per RFC (lookup action).", + "type": "boolean" + }, + "spf_record": { + "description": "First SPF record found, or null when none exists (lookup action).", + "type": [ + "string", + "null" + ] + }, + "valid": { + "description": "True when the record parsed without token errors (parse action).", + "type": "boolean" + }, + "version": { + "description": "SPF version, always spf1 (parse action).", + "type": "string" + }, + "warnings": { + "description": "Non-fatal SPF advisories (deprecated ptr, too many DNS lookups, length over 255, misplaced all) (parse action).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "error": { + "description": "Human-readable error message when success is false; absent otherwise.", + "type": "string" + }, + "success": { + "description": "True when the request was processed; false on invalid input or DNS failure.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
network_ssl_certificate5 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / hostnameAdded value: +{ + "description": "Hostname to fetch the certificate from, no scheme or path, e.g. example.com. Must resolve to a public IP.", + "examples": [ + "example.com" + ], + "maxLength": 253, + "minLength": 1, + "pattern": "^[a-zA-Z0-9][a-zA-Z0-9\\-\\.]*[a-zA-Z0-9]$", + "type": "string" +} - added
Input schema / properties / portAdded value: +{ + "default": 443, + "description": "TLS port to connect to. Defaults to 443.", + "maximum": 65535, + "minimum": 1, + "type": "integer" +} - added
Input schema / requiredAdded value: +[ + "hostname" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "certificate": { + "description": "Parsed leaf certificate fields.", + "properties": { + "chain": { + "description": "Presented certificate chain, leaf to root.", + "items": { + "properties": { + "issuer": { + "description": "Chain cert issuer DN fields.", + "type": "object" + }, + "serial_number": { + "description": "Chain cert serial number.", + "type": "string" + }, + "signature_algorithm": { + "description": "Chain cert signature algorithm.", + "type": "string" + }, + "subject": { + "description": "Chain cert subject DN fields.", + "type": "object" + }, + "valid_from": { + "description": "Chain cert not-before, Y-m-d H:i:s.", + "type": "string" + }, + "valid_to": { + "description": "Chain cert not-after, Y-m-d H:i:s.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "connection_time": { + "description": "TLS connect time in milliseconds.", + "type": "number" + }, + "extensions": { + "description": "Parsed X.509 extensions, including subject_alt_names, key_usage, extended_key_usage, basic_constraints.", + "type": "object" + }, + "fingerprints": { + "description": "Uppercase certificate fingerprints.", + "properties": { + "md5": { + "description": "MD5 fingerprint.", + "type": "string" + }, + "sha1": { + "description": "SHA-1 fingerprint.", + "type": "string" + }, + "sha256": { + "description": "SHA-256 fingerprint.", + "type": "string" + } + }, + "type": "object" + }, + "issuer": { + "description": "Issuer DN fields.", + "type": "object" + }, + "pem": { + "description": "PEM-encoded leaf certificate.", + "type": "string" + }, + "public_key": { + "description": "Public key details.", + "properties": { + "algorithm": { + "description": "OpenSSL key type constant.", + "type": "integer" + }, + "bits": { + "description": "Key size in bits.", + "type": "integer" + }, + "key": { + "description": "PEM-encoded public key.", + "type": "string" + } + }, + "type": "object" + }, + "serial_number": { + "description": "Certificate serial number.", + "type": "string" + }, + "signature_algorithm": { + "description": "Signature algorithm short name, e.g. RSA-SHA256.", + "type": "string" + }, + "subject": { + "description": "Subject DN fields (common_name, organization, country, etc.).", + "type": "object" + }, + "valid_from": { + "description": "Not-before date, Y-m-d H:i:s.", + "type": "string" + }, + "valid_from_timestamp": { + "description": "Not-before as a Unix timestamp.", + "type": "integer" + }, + "valid_to": { + "description": "Not-after date, Y-m-d H:i:s.", + "type": "string" + }, + "valid_to_timestamp": { + "description": "Not-after as a Unix timestamp.", + "type": "integer" + }, + "version": { + "description": "X.509 version number.", + "type": "integer" + } + }, + "type": "object" + }, + "error": { + "description": "Present when success is false — the validation or connection failure reason.", + "type": "string" + }, + "hostname": { + "description": "The hostname that was queried, echoed back.", + "type": "string" + }, + "port": { + "description": "The TLS port that was connected to.", + "type": "integer" + }, + "resolved_ip": { + "description": "The public IP the TLS socket was pinned to.", + "type": "string" + }, + "security_analysis": { + "description": "Heuristic grading of key exchange, cipher strength, protocol support, and certificate transparency.", + "properties": { + "certificate_transparency": { + "description": "Whether SCT/CT markers were detected.", + "type": "object" + }, + "cipher_strength": { + "description": "Signature algorithm strength and grade.", + "type": "object" + }, + "key_exchange": { + "description": "Key algorithm, size, strength, and grade.", + "type": "object" + }, + "overall_grade": { + "description": "Overall letter grade, e.g. A+.", + "type": "string" + }, + "protocol_support": { + "description": "Assumed TLS/SSL protocol support flags.", + "type": "object" + }, + "recommendations": { + "description": "Suggested hardening actions.", + "items": { + "type": "string" + }, + "type": "array" + }, + "security_features": { + "description": "Detected positive security features.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "True when the certificate was fetched and parsed.", + "type": "boolean" + }, + "timestamp": { + "description": "Server-side inspection time, Y-m-d H:i:s.", + "type": "string" + }, + "tls_verified": { + "description": "Always false — peer verification is intentionally disabled so invalid certs can still be inspected. Not a trust decision.", + "type": "boolean" + }, + "validation": { + "description": "Expiry and weakness checks on the leaf certificate.", + "properties": { + "days_since_issued": { + "description": "Days since the not-before date.", + "type": "integer" + }, + "days_until_expiry": { + "description": "Days remaining until expiry (negative if expired).", + "type": "integer" + }, + "errors": { + "description": "Fatal issues (expired, not yet valid, MD5).", + "items": { + "type": "string" + }, + "type": "array" + }, + "expiry_status": { + "description": "Bucketed expiry urgency.", + "enum": [ + "valid", + "notice", + "warning", + "critical", + "expired" + ], + "type": "string" + }, + "is_expired": { + "description": "True when past not-after.", + "type": "boolean" + }, + "is_not_yet_valid": { + "description": "True when before not-before.", + "type": "boolean" + }, + "is_valid": { + "description": "True when now is within the validity window.", + "type": "boolean" + }, + "total_validity_days": { + "description": "Total validity period in days.", + "type": "integer" + }, + "warnings": { + "description": "Non-fatal issues (near expiry, weak key, SHA-1).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
network_subnet_calculator7 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / cidrInputAdded value: +{ + "description": "CIDR block in IP/prefix form, e.g. 192.168.1.0/24. Prefix must be 0-32 and the IP a valid dotted-decimal IPv4 address. Used when inputFormat is cidr.", + "type": "string" +} - added
Input schema / properties / inputAdded value: +{ + "description": "Alias for cidrInput accepted for backward compatibility; used only when cidrInput is absent.", + "type": "string" +} - added
Input schema / properties / inputFormatAdded value: +{ + "default": "cidr", + "description": "Input mode. cidr reads cidrInput; mask reads ipInput plus subnetMask. Defaults to cidr.", + "enum": [ + "cidr", + "mask" + ], + "type": "string" +} - added
Input schema / properties / ipInputAdded value: +{ + "description": "Dotted-decimal IPv4 address (each octet 0-255), e.g. 10.0.0.5. Used when inputFormat is mask.", + "type": "string" +} - added
Input schema / properties / subnetMaskAdded value: +{ + "description": "Dotted-decimal subnet mask (contiguous, e.g. 255.255.255.0) paired with ipInput when inputFormat is mask. Converted internally to a CIDR prefix.", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message when success is false.", + "type": "string" + }, + "result": { + "description": "Computed subnet details. Optional fields are omitted when valid is false.", + "properties": { + "binaryMask": { + "description": "Subnet mask in dotted binary.", + "type": "string" + }, + "broadcastAddress": { + "description": "Broadcast address of the subnet.", + "type": "string" + }, + "cidr": { + "description": "CIDR prefix length, 0-32.", + "type": "integer" + }, + "firstHost": { + "description": "First usable host address (network + 1).", + "type": "string" + }, + "hostBits": { + "description": "Number of host bits (32 - cidr).", + "type": "integer" + }, + "isPrivate": { + "description": "Whether the network address falls in RFC 1918 private space.", + "type": "boolean" + }, + "lastHost": { + "description": "Last usable host address (broadcast - 1).", + "type": "string" + }, + "networkAddress": { + "description": "Network (subnet) address, e.g. 192.168.1.0.", + "type": "string" + }, + "networkBits": { + "description": "Number of network bits (equals cidr).", + "type": "integer" + }, + "networkClass": { + "description": "Classful network letter: A, B, C, D (Multicast), or E (Reserved).", + "type": "string" + }, + "subnetMask": { + "description": "Dotted-decimal subnet mask for the prefix.", + "type": "string" + }, + "subnetsFromClass": { + "description": "Subnet count relative to the default classful prefix, thousands-formatted.", + "type": "string" + }, + "totalHosts": { + "description": "Total addresses in the block (2^host-bits), thousands-formatted.", + "type": "string" + }, + "usableHosts": { + "description": "Usable hosts (total - 2, min 0), thousands-formatted.", + "type": "string" + }, + "valid": { + "description": "Whether the input parsed into a usable network.", + "type": "boolean" + }, + "wildcardMask": { + "description": "Inverse (wildcard) mask, e.g. 0.0.0.255.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request was processed without error.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
network_tcp_udp_port_reference18 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / category / defaultAdded value: +"all" - added
Input schema / properties / category / descriptionAdded value: +"Restrict to one service category, or all for every category." - added
Input schema / properties / category / enumAdded value: +[ + "all", + "web", + "email", + "file", + "database", + "security", + "game", + "other" +] - added
Input schema / properties / limit / defaultAdded value: +50 - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of records returned in displayedPorts. Non-positive or non-numeric values fall back to 50. Does not cap total or ports." - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / protocol / defaultAdded value: +"all" - added
Input schema / properties / protocol / descriptionAdded value: +"Restrict results to one transport protocol. all returns both TCP and UDP. Case-insensitive." - added
Input schema / properties / protocol / enumAdded value: +[ + "all", + "tcp", + "udp" +] - added
Input schema / properties / range / defaultAdded value: +"all" - added
Input schema / properties / range / descriptionAdded value: +"Restrict by port range: well-known 0-1023, registered 1024-49151, dynamic 49152-65535, or all." - added
Input schema / properties / range / enumAdded value: +[ + "all", + "well-known", + "registered", + "dynamic" +] - added
Input schema / properties / search / defaultAdded value: +"" - added
Input schema / properties / search / descriptionAdded value: +"Free-text query matched against port number, service name, description, and category (case-insensitive substring). The special form \"tcp:443\" or \"udp:53\" matches one exact protocol+port. Empty string returns all ports (subject to the other filters)." - added
Input schema / properties / search / examplesAdded value: +[ + "https", + "tcp:22" +] - changed
Input schema / requiredPrevious value: -[ - "search", - "protocol", - "range", - "category", - "limit" -]New value: +[ + "search" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "category": { + "description": "Category filter that was applied.", + "type": "string" + }, + "displayedPorts": { + "description": "First limit records of ports, for paginated display.", + "items": { + "type": "object" + }, + "type": "array" + }, + "error": { + "description": "Error message when success is false.", + "type": "string" + }, + "ports": { + "description": "All matching port records, sorted by port number then protocol.", + "items": { + "properties": { + "category": { + "description": "Service category (web, email, file, database, security, game, other).", + "type": "string" + }, + "description": { + "description": "Human-readable description of the service.", + "type": "string" + }, + "port": { + "description": "Port number 0-65535.", + "type": "integer" + }, + "protocol": { + "description": "Transport protocol, TCP or UDP.", + "type": "string" + }, + "security": { + "description": "Optional security note (present only for some ports, e.g. \"Insecure - use SSH instead\").", + "type": "string" + }, + "service": { + "description": "Service or application name (e.g. SSH, HTTPS).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "protocol": { + "description": "Normalised (lowercased) protocol filter that was applied.", + "type": "string" + }, + "range": { + "description": "Range filter that was applied.", + "type": "string" + }, + "search": { + "description": "Normalised (trimmed) search query that was applied.", + "type": "string" + }, + "stats": { + "description": "Aggregate counts over the matched ports.", + "properties": { + "dynamic": { + "description": "Matched ports in 49152-65535.", + "type": "integer" + }, + "registered": { + "description": "Matched ports in 1024-49151.", + "type": "integer" + }, + "tcp": { + "description": "Number of matched TCP records.", + "type": "integer" + }, + "udp": { + "description": "Number of matched UDP records.", + "type": "integer" + }, + "wellKnown": { + "description": "Matched ports in 0-1023.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "True when the lookup succeeded.", + "type": "boolean" + }, + "total": { + "description": "Total number of port records matching the filters (before the limit slice).", + "type": "integer" + } + }, + "type": "object" +}
- Changed
network_traceroute_stream9 fields changed- added
Input schema / properties / maxHops / descriptionAdded value: +"Maximum TTL / hop count before giving up (traceroute -m). The worker clamps it to 1-64." - added
Input schema / properties / maxHops / maximumAdded value: +64 - added
Input schema / properties / maxHops / minimumAdded value: +1 - added
Input schema / properties / packetSize / descriptionAdded value: +"Probe packet size in bytes reported in the start event; the local fallback and worker traceroute do not apply it." - added
Input schema / properties / target / descriptionAdded value: +"Destination hostname or IP address to trace (validated; private, loopback, and reserved ranges are blocked)." - added
Input schema / properties / target / examplesAdded value: +[ + "example.com" +] - added
Input schema / properties / timeout / descriptionAdded value: +"Per-hop probe wait in seconds (traceroute -w). The worker clamps it to 1-15." - added
Input schema / properties / timeout / maximumAdded value: +15 - added
Input schema / properties / timeout / minimumAdded value: +1
- Changed
network_website_status_checker4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / urlAdded value: +{ + "description": "Absolute URL to check, including scheme, e.g. https://example.com. Must be a valid public URL; redirects to private or reserved hosts are blocked.", + "examples": [ + "https://example.com" + ], + "format": "uri", + "minLength": 1, + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "url" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Status result fields.", + "properties": { + "accessible": { + "description": "True when the final status is 2xx or 3xx (site is up).", + "type": "boolean" + }, + "error": { + "description": "Transport or HTTP error message, null on success.", + "type": [ + "string", + "null" + ] + }, + "final_url": { + "description": "URL reached after following redirects.", + "type": "string" + }, + "headers": { + "description": "Final response headers, lowercased name to value.", + "type": "object" + }, + "redirect_chain": { + "description": "Each hop followed, in order.", + "items": { + "properties": { + "headers": { + "description": "Response headers at this hop.", + "type": "object" + }, + "status": { + "description": "HTTP status returned at this hop.", + "type": "integer" + }, + "url": { + "description": "URL of this hop.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "redirect_count": { + "description": "Number of redirects followed.", + "type": "integer" + }, + "response_time_ms": { + "description": "Total time to complete the check, in milliseconds.", + "type": "number" + }, + "status_code": { + "description": "Final HTTP status code; null if the request failed.", + "type": [ + "integer", + "null" + ] + }, + "timestamp": { + "description": "Server-side check time, Y-m-d H:i:s.", + "type": "string" + }, + "tls_verified": { + "description": "Always true; TLS peer verification stays enabled.", + "type": "boolean" + }, + "url": { + "description": "The URL that was requested, echoed back.", + "type": "string" + } + }, + "type": "object" + }, + "error": { + "description": "Error message present only when success is false.", + "type": [ + "string", + "null" + ] + }, + "success": { + "description": "True when the check completed.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
network_whois3 fields changed- changed
Input schema / properties / host / descriptionPrevious value: -"Domain name or public IP address to query, for example youtube.com or 8.8.8.8."New value: +"Domain name or public IP address to look up, for example youtube.com or 8.8.8.8. Private, reserved, and loopback hosts are rejected; the value is validated and capped at 255 bytes." - removed
Input schema / properties / host / examplesRemoved value: -[ - "youtube.com" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "host": { + "description": "The domain name or IP address that was queried.", + "type": "string" + }, + "parsed": { + "additionalProperties": true, + "description": "Lowercased key/value map of every parsed WHOIS field, plus a common_fields sub-object normalizing domain_name, registrar, creation_date, expiration_date, name_servers, and status.", + "type": "object" + }, + "raw_output": { + "description": "Full unparsed WHOIS response text exactly as returned by the upstream server.", + "type": "string" + }, + "server": { + "description": "WHOIS server that answered the query, for example whois.verisign-grs.com or whois.arin.net.", + "type": "string" + }, + "timestamp": { + "description": "ISO 8601 timestamp of when the lookup completed.", + "format": "date-time", + "type": "string" + } + }, + "type": "object" +}
- Changed
networking_ipv4_to_ipv66 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / inputAdded value: +{ + "description": "Deprecated alias for ipv4, used only when ipv4 is omitted; same dotted-decimal format.", + "format": "ipv4", + "type": "string" +} - added
Input schema / properties / ipv4 / descriptionAdded value: +"The IPv4 address to convert, in dotted-decimal notation with four octets 0-255 and no CIDR suffix." - added
Input schema / properties / ipv4 / examplesAdded value: +[ + "8.8.8.8" +] - added
Input schema / properties / ipv4 / formatAdded value: +"ipv4" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message present only when success is false (e.g. invalid IPv4 address format).", + "type": "string" + }, + "result": { + "description": "Conversion output, present only when success is true.", + "properties": { + "binary": { + "description": "The four octets as dot-separated 8-bit binary strings.", + "type": "string" + }, + "hexadecimal": { + "description": "The four octets packed as eight contiguous hex digits.", + "type": "string" + }, + "info": { + "description": "Classification of the input IPv4 address.", + "properties": { + "addressClass": { + "description": "Classful network letter (A, B, C, D (Multicast), or E (Reserved)).", + "type": "string" + }, + "description": { + "description": "Human-readable description of the address type.", + "type": "string" + }, + "isLoopback": { + "description": "True if the address is in 127.0.0.0/8.", + "type": "boolean" + }, + "isPrivate": { + "description": "True if the address is in an RFC 1918 private range.", + "type": "boolean" + }, + "type": { + "description": "Address type such as Public, Private (RFC 1918), Loopback, Link-Local (APIPA), Multicast, or Reserved.", + "type": "string" + } + }, + "type": "object" + }, + "ipv4Compatible": { + "description": "Compressed deprecated IPv4-compatible IPv6 address.", + "type": "string" + }, + "ipv4CompatibleExpanded": { + "description": "Fully expanded IPv4-compatible address with all eight zero-padded hextets.", + "type": "string" + }, + "ipv4Mapped": { + "description": "Compressed IPv4-mapped IPv6 address, e.g. ::ffff:0808:0808.", + "type": "string" + }, + "ipv4MappedDotted": { + "description": "IPv4-mapped address keeping the original dotted-decimal suffix, e.g. ::ffff:8.8.8.8.", + "type": "string" + }, + "ipv4MappedExpanded": { + "description": "Fully expanded IPv4-mapped address with all eight zero-padded hextets.", + "type": "string" + }, + "originalIPv4": { + "description": "The trimmed IPv4 address that was converted.", + "type": "string" + }, + "sixToFour": { + "description": "6to4 prefix (2002:hhhh:hhhh::/48) for public addresses; null for private or loopback input.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "success": { + "description": "True when the address was valid and converted; false on invalid input.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
networking_mac_address_generator14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / countAdded value: +{ + "default": 1, + "description": "generate only: how many random MACs to return.", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / formatAdded value: +{ + "default": "colon", + "description": "Output notation for generate and format operations.", + "enum": [ + "colon", + "dash", + "dot", + "cisco", + "none" + ], + "type": "string" +} - added
Input schema / properties / locallyAdministeredAdded value: +{ + "default": true, + "description": "generate only: set the locally-administered bit on generated MACs.", + "type": "boolean" +} - added
Input schema / properties / mac / descriptionAdded value: +"analyze/format only: the MAC to process; 12 hex digits, separators (: - .) ignored." - added
Input schema / properties / operation / defaultAdded value: +"generate" - added
Input schema / properties / operation / descriptionAdded value: +"Which action to perform. Defaults to generate." - added
Input schema / properties / operation / enumAdded value: +[ + "generate", + "analyze", + "format", + "use_case", + "vendor_oui" +] - added
Input schema / properties / ouiAdded value: +{ + "description": "vendor_oui only: 6 hex-digit OUI prefix to prepend to random NIC bytes.", + "type": "string" +} - added
Input schema / properties / unicastAdded value: +{ + "default": true, + "description": "generate only: force the unicast (LSB of first octet = 0) bit.", + "type": "boolean" +} - added
Input schema / properties / universallyAdministeredAdded value: +{ + "default": false, + "description": "generate only: clear the locally-administered bit (ignored if locallyAdministered is true).", + "type": "boolean" +} - added
Input schema / properties / useCaseAdded value: +{ + "default": "virtual_machine", + "description": "use_case only: scenario preset selecting the admin/cast bits.", + "enum": [ + "virtual_machine", + "test_device", + "multicast", + "random_universal" + ], + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "mac" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Present only when success is false; the failure reason.", + "type": "string" + }, + "operation": { + "description": "The operation that was executed.", + "type": "string" + }, + "result": { + "description": "Operation-specific payload. generate -> array of { mac, formatted, analysis }; analyze -> an analysis object; format -> { input, output, allFormats }; use_case -> { mac, formatted, useCase, description, analysis }; vendor_oui -> the generated 12-hex-digit MAC string." + }, + "success": { + "description": "True when the operation completed.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
networking_mtu_size_calculator18 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / encapsulations / descriptionAdded value: +"Tunnel/encapsulation layers to subtract, each contributing its RFC byte size. Unknown ids are rejected." - added
Input schema / properties / encapsulations / items / enumAdded value: +[ + "pppoe", + "vlan", + "qinq", + "wireguard", + "ipsec-esp-aes", + "ipsec-esp-aes-gcm", + "gre", + "l2tp", + "ipip" +] - added
Input schema / properties / ipVersion / defaultAdded value: +"4" - added
Input schema / properties / ipVersion / descriptionAdded value: +"IP version selecting the L3 header size (IPv4 20 bytes or IPv6 40 bytes)." - added
Input schema / properties / ipVersion / enumAdded value: +[ + "4", + "6" +] - added
Input schema / properties / linkMtu / defaultAdded value: +1500 - added
Input schema / properties / linkMtu / descriptionAdded value: +"Underlying link MTU in bytes (required for compute and pathMtuDiscovery; ignored for presets). Must be 576 (RFC 791 minimum) to 9216 (jumbo ceiling)." - added
Input schema / properties / linkMtu / maximumAdded value: +9216 - added
Input schema / properties / linkMtu / minimumAdded value: +576 - added
Input schema / properties / operation / defaultAdded value: +"compute" - added
Input schema / properties / operation / descriptionAdded value: +"Which computation to run. compute returns the MTU/MSS breakdown; presets returns curated stacks and ignores all other fields; pathMtuDiscovery returns a probe table." - added
Input schema / properties / operation / enumAdded value: +[ + "compute", + "presets", + "pathMtuDiscovery" +] - added
Input schema / properties / transport / defaultAdded value: +"tcp" - added
Input schema / properties / transport / descriptionAdded value: +"Transport layer selecting the L4 header size (TCP 20, UDP 8, none 0). MSS is only returned when tcp." - added
Input schema / properties / transport / enumAdded value: +[ + "tcp", + "udp", + "none" +] - changed
Input schema / requiredPrevious value: -[ - "operation", - "linkMtu", - "ipVersion", - "transport", - "encapsulations" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message when success is false (HTTP 400/500).", + "type": "string" + }, + "operation": { + "description": "The operation performed (compute, presets, or pathMtuDiscovery).", + "type": "string" + }, + "result": { + "description": "Operation output. For compute, an object as described below; for presets and pathMtuDiscovery, an array of entries.", + "properties": { + "breakdown": { + "description": "Per-layer byte contributions making up the overhead.", + "items": { + "properties": { + "bytes": { + "description": "Byte size contributed by this layer.", + "type": "integer" + }, + "layer": { + "description": "Human-readable layer name (e.g. 802.1Q VLAN or IPv4 header).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "encapsulations": { + "description": "The normalized encapsulation ids that were applied.", + "items": { + "description": "An encapsulation id.", + "type": "string" + }, + "type": "array" + }, + "ipVersion": { + "description": "The IP version used (4 or 6).", + "type": "string" + }, + "linkMtu": { + "description": "The link MTU that was supplied (compute).", + "type": "integer" + }, + "mss": { + "description": "TCP maximum segment size (inner MTU minus IP and TCP headers); null unless transport is tcp.", + "type": [ + "integer", + "null" + ] + }, + "mtu": { + "description": "Inner MTU after encapsulation overhead is removed.", + "type": "integer" + }, + "overhead": { + "description": "Total non-payload bytes (encapsulations plus IP plus L4).", + "type": "integer" + }, + "payload": { + "description": "Usable application payload bytes (inner MTU minus IP and L4 headers).", + "type": "integer" + }, + "transport": { + "description": "The transport used (tcp, udp, or none).", + "type": "string" + }, + "warnings": { + "description": "Advisory messages (e.g. MSS below 536 or WireGuard inner-MTU guidance or jumbo-frame support).", + "items": { + "description": "A warning message.", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
networking_network_latency_calculator14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / fromUnitAdded value: +{ + "default": "ms", + "description": "convert mode - source time unit.", + "enum": [ + "ns", + "us", + "ms", + "s" + ], + "type": "string" +} - added
Input schema / properties / inputAdded value: +{ + "description": "Alias for 'latencies' (analyze mode) if that key is absent.", + "oneOf": [ + { + "type": "string" + }, + { + "items": { + "type": "number" + }, + "type": "array" + } + ] +} - added
Input schema / properties / latencies / descriptionAdded value: +"analyze mode: latency samples in milliseconds, either a number array or a comma/whitespace-separated string. Non-finite or negative values are counted as invalid." - removed
Input schema / properties / latencies / itemsRemoved value: -{ - "type": "integer" -} - added
Input schema / properties / latencies / oneOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "number" + }, + "type": "array" + } +] - removed
Input schema / properties / latencies / typeRemoved value: -"array" - added
Input schema / properties / operation / defaultAdded value: +"analyze" - added
Input schema / properties / operation / descriptionAdded value: +"Which computation to run." - added
Input schema / properties / operation / enumAdded value: +[ + "analyze", + "convert", + "benchmarks" +] - added
Input schema / properties / toUnitAdded value: +{ + "default": "ms", + "description": "convert mode - target time unit.", + "enum": [ + "ns", + "us", + "ms", + "s" + ], + "type": "string" +} - added
Input schema / properties / valueAdded value: +{ + "default": 0, + "description": "convert mode - the latency value to rescale.", + "minimum": 0, + "type": "number" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "latencies" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Present only when success is false.", + "type": "string" + }, + "operation": { + "enum": [ + "analyze", + "convert", + "benchmarks" + ], + "type": "string" + }, + "result": { + "description": "analyze returns an object with statistics/performance/applications/distance; convert returns a number in the target unit; benchmarks returns reference tables.", + "oneOf": [ + { + "type": "number" + }, + { + "type": "object" + } + ] + }, + "success": { + "type": "boolean" + } + }, + "type": "object" +}
- Changed
networking_wake_on_lan15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / broadcast / defaultAdded value: +"255.255.255.255" - added
Input schema / properties / broadcast / descriptionAdded value: +"Broadcast IPv4 address the wake commands target; ignored by the packet and analyze operations." - added
Input schema / properties / broadcast / examplesAdded value: +[ + "192.168.1.255" +] - added
Input schema / properties / mac / descriptionAdded value: +"Target adapter MAC address; accepts colon, dash, dot, or bare 12-hex-digit formats." - added
Input schema / properties / mac / examplesAdded value: +[ + "00:1B:63:84:45:E6" +] - added
Input schema / properties / operation / defaultAdded value: +"generate" - added
Input schema / properties / operation / descriptionAdded value: +"Which output to build: generate=all, packet=magic-packet bytes only, commands=per-platform wake commands, validate=setup check, analyze=MAC suitability." - added
Input schema / properties / operation / enumAdded value: +[ + "generate", + "packet", + "commands", + "validate", + "analyze" +] - added
Input schema / properties / port / defaultAdded value: +9 - added
Input schema / properties / port / descriptionAdded value: +"UDP port for the wake commands (7 Echo or 9 Discard are standard); used by commands, validate, and generate." - added
Input schema / properties / port / maximumAdded value: +65535 - added
Input schema / properties / port / minimumAdded value: +1 - changed
Input schema / requiredPrevious value: -[ - "operation", - "mac", - "broadcast", - "port" -]New value: +[ + "mac" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Failure message (e.g. Invalid MAC address format); present only when success is false.", + "type": "string" + }, + "operation": { + "description": "The operation that was run, echoed back.", + "type": "string" + }, + "result": { + "description": "Operation-dependent payload. packet returns the magic-packet bytes (targetMAC, formattedMAC, packetHex, packetLength, synchronizationBytes, macRepetitions 16, totalSize 102, packetStructure). commands returns targetMAC, broadcastAddress, port, and per-platform commands. validate returns isValid, errors, warnings, setupTips, networkInfo. analyze returns mac, isUnicast, isLocallyAdministered, wolCompatible, notes, warnings. generate returns magicPacket, commands, validation, and macAnalysis combined.", + "type": "object" + }, + "success": { + "description": "Whether the build succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
osint_barcode_generator22 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / barcodeTypeAdded value: +{ + "description": "Alias for type; used when type is absent.", + "enum": [ + "upc", + "ean13", + "code128", + "code39", + "itf14", + "codabar" + ], + "type": "string" +} - added
Input schema / properties / data / descriptionAdded value: +"Value to encode; format depends on type (e.g. 12 digits for upc, 13 for ean13, alphanumeric for code128). Trimmed before validation. (inputData is accepted as an alias.)" - added
Input schema / properties / inputDataAdded value: +{ + "description": "Alias for data; used when data is absent.", + "type": "string" +} - added
Input schema / properties / settings / additionalPropertiesAdded value: +false - added
Input schema / properties / settings / descriptionAdded value: +"Rendering options applied to the serviceUrl; invalid values fall back to the listed default." - added
Input schema / properties / settings / properties / addQuietZone / defaultAdded value: +true - added
Input schema / properties / settings / properties / addQuietZone / descriptionAdded value: +"Include the mandatory blank margin around the barcode." - added
Input schema / properties / settings / properties / height / defaultAdded value: +80 - added
Input schema / properties / settings / properties / height / descriptionAdded value: +"Barcode height in pixels (mapped to the renderer height scale)." - added
Input schema / properties / settings / properties / height / enumAdded value: +[ + 50, + 80, + 120, + 150 +] - added
Input schema / properties / settings / properties / showText / defaultAdded value: +true - added
Input schema / properties / settings / properties / showText / descriptionAdded value: +"Print the human-readable text below the barcode." - added
Input schema / properties / settings / properties / width / defaultAdded value: +2 - added
Input schema / properties / settings / properties / width / descriptionAdded value: +"Module scale factor for the rendered bars." - added
Input schema / properties / settings / properties / width / enumAdded value: +[ + 1, + 2, + 3, + 4 +] - removed
Input schema / properties / settings / requiredRemoved value: -[ - "width", - "height", - "showText", - "addQuietZone" -] - added
Input schema / properties / type / defaultAdded value: +"code128" - added
Input schema / properties / type / descriptionAdded value: +"Barcode symbology. Unknown values fall back to code128. (barcodeType is accepted as an alias.)" - added
Input schema / properties / type / enumAdded value: +[ + "upc", + "ean13", + "code128", + "code39", + "itf14", + "codabar" +] - changed
Input schema / requiredPrevious value: -[ - "type", - "data", - "settings" -]New value: +[ + "data" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Present only on failure; reason the payload could not be built.", + "type": "string" + }, + "result": { + "description": "Barcode payload, validation, and render details.", + "properties": { + "bcid": { + "description": "bwip-js barcode identifier for the renderer (e.g. upca, ean13).", + "type": "string" + }, + "checksumInfo": { + "description": "Check-digit/check-character scheme for this type.", + "type": "string" + }, + "data": { + "description": "The trimmed input value that was validated.", + "type": "string" + }, + "formatDescription": { + "description": "What the symbology is used for.", + "type": "string" + }, + "formatHelp": { + "description": "HTML requirements/help snippet for this type.", + "type": "string" + }, + "formatInfo": { + "description": "Short allowed-character/length summary.", + "type": "string" + }, + "heightScale": { + "description": "Renderer height-scale value derived from settings.height.", + "type": "integer" + }, + "industryUsage": { + "description": "Typical industries that use this symbology.", + "type": "string" + }, + "inputLabel": { + "description": "UI label describing the expected input for this type.", + "type": "string" + }, + "maxLength": { + "description": "Maximum allowed input length for this type.", + "type": "integer" + }, + "placeholder": { + "description": "Example value for this type.", + "type": "string" + }, + "serviceUrl": { + "description": "bwipjs-api.metafloor.com image URL a client fetches to render the barcode; empty string when data is missing or invalid.", + "type": "string" + }, + "settings": { + "description": "The normalized rendering settings actually applied.", + "properties": { + "addQuietZone": { + "description": "Whether a quiet-zone margin is included.", + "type": "boolean" + }, + "height": { + "description": "Applied height in pixels.", + "type": "integer" + }, + "showText": { + "description": "Whether human-readable text is shown.", + "type": "boolean" + }, + "width": { + "description": "Applied module scale (1-4).", + "type": "integer" + } + }, + "type": "object" + }, + "type": { + "description": "Normalized symbology (upc, ean13, code128, code39, itf14, codabar).", + "type": "string" + }, + "typeDisplay": { + "description": "Human-readable symbology name (e.g. UPC-A, Code 128).", + "type": "string" + }, + "valid": { + "description": "Whether data is a valid value for type.", + "type": "boolean" + }, + "validationMessage": { + "description": "Human-readable validation outcome.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the payload was built.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
osint_bic_swift_validate5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / bic_swift_codeAdded value: +{ + "description": "Alias for code, accepted when code is not supplied. If both are present, code takes precedence.", + "type": "string" +} - added
Input schema / properties / code / descriptionAdded value: +"BIC/SWIFT code to validate (8 or 11 characters). Case-insensitive and spaces/punctuation are stripped before validation. Must not be blank." - removed
Input schema / requiredRemoved value: -[ - "code" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Human-readable failure reason, present only when success is false.", + "type": "string" + }, + "result": { + "description": "Validation result, present only when success is true.", + "properties": { + "code": { + "description": "The normalised (uppercased, stripped) BIC/SWIFT code.", + "type": "string" + }, + "details": { + "description": "Human-readable decoding of the location and branch segments.", + "properties": { + "branch": { + "description": "Branch description (specific branch code, head office, or implied head office).", + "type": "string" + }, + "country": { + "description": "Full country name resolved from the country code.", + "type": "string" + }, + "isTest": { + "description": "Present and true only when character 7 is 0, marking a test (non-production) BIC.", + "type": "boolean" + }, + "locationType": { + "description": "Meaning of character 7 (primary office, passive participant, reverse billing, or test BIC).", + "type": "string" + }, + "messageType": { + "description": "Meaning of character 8 (FIN routing capability).", + "type": "string" + } + }, + "type": "object" + }, + "formatted": { + "description": "The code regrouped with spaces between bank, country, location, and branch segments.", + "type": "string" + }, + "length": { + "description": "Character length of the normalised code (8 or 11).", + "type": "integer" + }, + "structure": { + "description": "The four positional segments of the BIC/SWIFT code.", + "properties": { + "bankCode": { + "description": "Characters 1-4: institution/bank code.", + "type": "string" + }, + "branchCode": { + "description": "Characters 9-11 for 11-char codes, otherwise the literal XXX (Head Office) marker.", + "type": "string" + }, + "countryCode": { + "description": "Characters 5-6: ISO 3166-1 alpha-2 country code.", + "type": "string" + }, + "locationCode": { + "description": "Characters 7-8: location/status code.", + "type": "string" + } + }, + "type": "object" + }, + "valid": { + "description": "Always true within result; structural validation passed.", + "type": "boolean" + } + }, + "type": "object" + }, + "success": { + "description": "True when the code was validated; false when the input was missing or rejected as malformed.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
osint_credit_card_validator3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / card_number / descriptionAdded value: +"Card number to validate. Spaces, dashes, and other non-digit characters are stripped before checking. Must contain at least one digit; typically 13 to 19 digits." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message when success is false; otherwise absent.", + "type": [ + "string", + "null" + ] + }, + "result": { + "description": "Validation detail (present when success is true).", + "properties": { + "analysis": { + "description": "Network, category, and region of the detected card type; empty object when unrecognised.", + "type": "object" + }, + "card_type": { + "description": "Detected network name, or null if no prefix matched.", + "type": [ + "string", + "null" + ] + }, + "cleaned": { + "description": "The input reduced to digits only.", + "type": "string" + }, + "formatted": { + "description": "The number grouped per the network format (4-4-4-4, Amex 4-6-5, Diners 4-6-4).", + "type": [ + "string", + "null" + ] + }, + "input": { + "description": "The submitted value, trimmed.", + "type": "string" + }, + "issuer": { + "description": "Issuing organisation for the detected network, or null.", + "type": [ + "string", + "null" + ] + }, + "length": { + "description": "Number of digits in the cleaned number.", + "type": "integer" + }, + "luhn_valid": { + "description": "Whether the Luhn checksum alone passes.", + "type": "boolean" + }, + "security_features": { + "description": "Keyed map describing Luhn checksum, IIN range, card-type validation, and CVV/CID location.", + "type": "object" + }, + "valid": { + "description": "True only when the Luhn check passes, the length is 13 to 19, and a card type is recognised.", + "type": "boolean" + }, + "warnings": { + "description": "Advisory messages, for example an out-of-range length for the detected network.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request was processed (false when the input has no digits).", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
osint_domain_age3 fields changed- changed
Input schema / properties / domain / descriptionPrevious value: -"Domain name to check, without a URL path, for example youtube.com."New value: +"Domain name to check, without a URL path, for example youtube.com. A leading http:// or https:// scheme, a trailing path, and a :port are stripped before lookup; the host must be a valid dotted domain." - removed
Input schema / properties / domain / examplesRemoved value: -[ - "youtube.com" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "description": "Parsed domain-age report.", + "properties": { + "age_formatted": { + "description": "Human-readable age, e.g. 5 years, 2 months or 12 days.", + "type": [ + "string", + "null" + ] + }, + "age_in_days": { + "description": "Whole days between registration_date and now; null if no registration date.", + "type": [ + "integer", + "null" + ] + }, + "analysis": { + "description": "Derived trust/expiry/registration notes.", + "items": { + "properties": { + "category": { + "description": "Note category, e.g. Domain Age, Domain Status, Registration, Privacy, DNS.", + "type": "string" + }, + "message": { + "description": "Human-readable explanation of the note.", + "type": "string" + }, + "type": { + "description": "Severity: success, info, warning, or error.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "domain": { + "description": "Normalized domain that was queried (lowercased, scheme/path/port stripped).", + "type": "string" + }, + "error": { + "description": "Present only when the WHOIS lookup threw; the exception message.", + "type": "string" + }, + "expiration_date": { + "description": "Expiration date promoted to top level, Y-m-d H:i:s.", + "type": [ + "string", + "null" + ] + }, + "name_servers": { + "description": "Authoritative name servers promoted to top level.", + "items": { + "type": "string" + }, + "type": "array" + }, + "privacy_protected": { + "description": "True if privacy protection was detected; null if unknown.", + "type": [ + "boolean", + "null" + ] + }, + "raw_whois": { + "description": "Raw WHOIS text returned by the upstream server/API.", + "type": [ + "string", + "null" + ] + }, + "registrar": { + "description": "Registrar name promoted to top level.", + "type": [ + "string", + "null" + ] + }, + "registration_date": { + "description": "Registration date promoted to top level, Y-m-d H:i:s.", + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "Domain status: the string unknown before parsing, otherwise the array of WHOIS status codes.", + "type": [ + "string", + "array" + ] + }, + "whois_data": { + "description": "Structured fields parsed out of the raw WHOIS text; null if parsing produced nothing.", + "properties": { + "contact_info": { + "description": "Registrant/admin/tech/billing contact lines keyed by WHOIS field name.", + "type": "object" + }, + "dnssec": { + "description": "DNSSEC status from WHOIS, e.g. unsigned.", + "type": [ + "string", + "null" + ] + }, + "expiration_date": { + "description": "Expiry/renewal date, normalized to Y-m-d H:i:s.", + "type": [ + "string", + "null" + ] + }, + "name_servers": { + "description": "Authoritative name servers listed in WHOIS.", + "items": { + "type": "string" + }, + "type": "array" + }, + "privacy_protected": { + "description": "True if a privacy/proxy/WhoisGuard service was detected.", + "type": "boolean" + }, + "registrar": { + "description": "Registrar name from the WHOIS record.", + "type": [ + "string", + "null" + ] + }, + "registration_date": { + "description": "Creation/registration date, normalized to Y-m-d H:i:s.", + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "Domain status codes, e.g. clientTransferProhibited.", + "items": { + "type": "string" + }, + "type": "array" + }, + "updated_date": { + "description": "Last-updated date, normalized to Y-m-d H:i:s.", + "type": [ + "string", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + } + }, + "type": "object" + }, + "success": { + "description": "True when the request was processed (the WHOIS lookup itself may still have partially failed; check result.error).", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
osint_ean_upc_validator8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / code / descriptionAdded value: +"The barcode number to process. Non-digit characters are stripped. For validate: 8, 12, or 13 digits (an 8-digit code starting with 0 is treated as UPC-E). For generate: the body without its check digit (7 digits for EAN-8, 11 for UPC-A, 12 for EAN-13)." - added
Input schema / properties / code / examplesAdded value: +[ + "4006381333931" +] - added
Input schema / properties / mode / defaultAdded value: +"validate" - added
Input schema / properties / mode / descriptionAdded value: +"validate verifies the full code's check digit; generate computes the check digit for a partial code." - added
Input schema / properties / mode / enumAdded value: +[ + "validate", + "generate" +] - changed
Input schema / requiredPrevious value: -[ - "code", - "mode" -]New value: +[ + "code" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "input": { + "description": "The raw code string as received.", + "type": "string" + }, + "mode": { + "description": "The mode used (validate or generate).", + "type": "string" + }, + "result": { + "description": "Validation result (mode validate) or generated check-digit result (mode generate).", + "properties": { + "calculatedCheckDigit": { + "description": "Check digit computed from the GS1 weighted-mod-10 algorithm.", + "type": "integer" + }, + "checkDigit": { + "description": "Generate mode: the computed check digit (0-9).", + "type": "integer" + }, + "code": { + "description": "The cleaned digit string that was processed.", + "type": "string" + }, + "completeCode": { + "description": "Generate mode: partialCode concatenated with checkDigit.", + "type": "string" + }, + "convertedUPCA": { + "description": "UPC-E only: the equivalent expanded 12-digit UPC-A.", + "type": "string" + }, + "country": { + "description": "EAN-13 only: GS1 prefix country/region label with the 3-digit prefix.", + "type": "string" + }, + "error": { + "description": "Error/checksum-mismatch message, or null when valid.", + "type": [ + "string", + "null" + ] + }, + "manufacturer": { + "description": "EAN-13/UPC-A: the manufacturer segment of the code.", + "type": "string" + }, + "partialCode": { + "description": "Generate mode: the input body without a check digit.", + "type": "string" + }, + "product": { + "description": "EAN-13/UPC-A: the product segment of the code.", + "type": "string" + }, + "providedCheckDigit": { + "description": "Validate mode: the check digit taken from the input code.", + "type": "integer" + }, + "type": { + "description": "Detected/used format: EAN-13, EAN-8, UPC-A, UPC-E, or Unknown.", + "type": "string" + }, + "valid": { + "description": "Validate mode: whether the provided check digit matches.", + "type": "boolean" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request was processed.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
osint_email_headers3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / headers / descriptionAdded value: +"Raw email header text, one \"Header-Name: value\" per line with leading-whitespace folded continuation lines supported. Header names are matched case-insensitively. Must not be blank. Paste the full headers from \"Show original\"/\"View source\"." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Full parsed analysis. Absent when success is false (error string returned instead).", + "properties": { + "attachments": { + "properties": { + "boundary": { + "description": "MIME multipart boundary, or null.", + "type": [ + "string", + "null" + ] + }, + "content_type": { + "description": "Raw Content-Type value, or null.", + "type": [ + "string", + "null" + ] + }, + "has_attachments": { + "description": "True when Content-Type is multipart.", + "type": "boolean" + }, + "parts": { + "description": "Reserved; currently always empty.", + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "authentication": { + "description": "SPF/DKIM/DMARC results extracted from Authentication-Results header(s).", + "properties": { + "authentication_results": { + "description": "All parsed Authentication-Results entries (each with raw plus any spf/dkim/dmarc).", + "items": { + "type": "object" + }, + "type": "array" + }, + "dkim": { + "description": "DKIM result object {result, details} or null.", + "type": [ + "object", + "null" + ] + }, + "dmarc": { + "description": "DMARC result object {result, details} or null.", + "type": [ + "object", + "null" + ] + }, + "issues": { + "description": "Warnings for any auth method whose result is not pass ({type, message}).", + "items": { + "type": "object" + }, + "type": "array" + }, + "spf": { + "description": "SPF result object {result, details} or null if not present.", + "type": [ + "object", + "null" + ] + } + }, + "type": "object" + }, + "basic_info": { + "description": "From/To/Subject/Date/Message-ID plus, when parseable, sender_name, sender_email, parsed_date (UTC) and unix timestamp. Missing fields are the string \"Not found\".", + "type": "object" + }, + "headers": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "description": "Parsed header map: lowercase header name to array of string values (a header may appear more than once).", + "type": "object" + }, + "routing": { + "description": "Delivery path from Received headers.", + "properties": { + "delivery_time": { + "description": "Seconds between first and last hop timestamp, or null if not computable.", + "type": [ + "integer", + "null" + ] + }, + "delivery_time_formatted": { + "description": "Human-readable delivery duration (present only when delivery_time is set).", + "type": "string" + }, + "path": { + "description": "Each Received hop parsed into from/by/with/id/for/timestamp/formatted_date/raw (each null when absent).", + "items": { + "type": "object" + }, + "type": "array" + }, + "received_headers": { + "description": "Raw Received header strings, reversed into chronological (oldest-first) order.", + "items": { + "type": "string" + }, + "type": "array" + }, + "total_hops": { + "description": "Count of Received headers found.", + "type": "integer" + } + }, + "type": "object" + }, + "security": { + "description": "Transport security extracted from Received headers.", + "properties": { + "cipher_suite": { + "description": "Cipher from a (cipher=...) token, or null.", + "type": [ + "string", + "null" + ] + }, + "recommendations": { + "description": "Security recommendations (may be empty).", + "items": { + "type": "string" + }, + "type": "array" + }, + "security_issues": { + "description": "Warnings, e.g. missing Authentication-Results header.", + "items": { + "type": "object" + }, + "type": "array" + }, + "tls_version": { + "description": "TLS version from a (version=...) token, or null.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "spam_indicators": { + "properties": { + "indicators": { + "description": "Heuristic flags ({type, message}), e.g. From/Reply-To mismatch or bulk-mail markers.", + "items": { + "type": "object" + }, + "type": "array" + }, + "risk_level": { + "description": "Spam risk derived from the score.", + "enum": [ + "low", + "medium", + "high" + ], + "type": "string" + }, + "score": { + "description": "Numeric value parsed from X-Spam-Score (0 if absent/unparseable).", + "type": "number" + } + }, + "type": "object" + }, + "summary": { + "properties": { + "authentication_status": { + "description": "Overall auth grade from pass ratio.", + "enum": [ + "unknown", + "poor", + "moderate", + "good", + "excellent" + ], + "type": "string" + }, + "recommendations": { + "description": "Top-level recommendations (may be empty).", + "items": { + "type": "string" + }, + "type": "array" + }, + "routing_hops": { + "description": "Number of Received hops.", + "type": "integer" + }, + "security_level": { + "description": "Overall security level (unknown by default).", + "type": "string" + }, + "total_headers": { + "description": "Total header values parsed.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "error": { + "description": "Error message; present only when success is false (blank input or parser failure).", + "type": "string" + }, + "success": { + "description": "Whether the headers were parsed successfully.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
osint_exif_data1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Metadata analysis of the uploaded image.", + "properties": { + "camera_info": { + "description": "Camera make/model/software and capture settings, or null when no camera fields are present.", + "properties": { + "make": { + "description": "Camera manufacturer (EXIF Make).", + "type": "string" + }, + "model": { + "description": "Camera model (EXIF Model).", + "type": "string" + }, + "settings": { + "description": "Capture settings when present.", + "properties": { + "aperture": { + "description": "Aperture, e.g. f/2.8.", + "type": "string" + }, + "exposure_time": { + "description": "Exposure time as stored in EXIF.", + "type": "string" + }, + "focal_length": { + "description": "Focal length as stored in EXIF.", + "type": "string" + }, + "iso": { + "description": "ISO speed, e.g. ISO 100.", + "type": "string" + } + }, + "type": "object" + }, + "software": { + "description": "Capturing/editing software (EXIF Software).", + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "exif_data": { + "additionalProperties": true, + "description": "Map of human-readable EXIF field names (e.g. Camera Make, Camera Model, Date Taken, F-Number, ISO Speed, Focal Length, Orientation, Software) to values. Date and Exposure Time/Focal Length fields expand to objects with raw/formatted sub-fields. Empty object when no EXIF is found.", + "type": "object" + }, + "file_info": { + "description": "Basic file facts.", + "properties": { + "mime_type": { + "description": "Detected MIME type.", + "type": "string" + }, + "name": { + "description": "Original client filename of the upload.", + "type": "string" + }, + "size": { + "description": "File size in bytes.", + "type": "integer" + }, + "size_formatted": { + "description": "Human-readable size, e.g. 2.31 MB.", + "type": "string" + }, + "supported": { + "description": "True only for image/jpeg or image/tiff (formats that can carry EXIF).", + "type": "boolean" + } + }, + "type": "object" + }, + "gps_data": { + "description": "GPS location, or null when the image has no GPS tags.", + "properties": { + "altitude": { + "description": "Altitude, or null when absent.", + "properties": { + "feet": { + "description": "Altitude in feet.", + "type": "number" + }, + "meters": { + "description": "Altitude in metres.", + "type": "number" + }, + "reference": { + "description": "Above sea level or Below sea level.", + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "has_location": { + "description": "True when latitude or longitude was resolved.", + "type": "boolean" + }, + "latitude": { + "description": "Decimal degrees latitude (negative for South), 6 dp.", + "type": [ + "number", + "null" + ] + }, + "longitude": { + "description": "Decimal degrees longitude (negative for West), 6 dp.", + "type": [ + "number", + "null" + ] + }, + "raw_data": { + "additionalProperties": true, + "description": "Raw EXIF GPS tag array as returned by the parser.", + "type": "object" + } + }, + "type": [ + "object", + "null" + ] + }, + "privacy_concerns": { + "description": "Privacy findings (GPS location, artist/author, copyright, serial number, software).", + "items": { + "properties": { + "category": { + "description": "Finding category, e.g. Location Privacy.", + "type": "string" + }, + "message": { + "description": "Human-readable explanation.", + "type": "string" + }, + "type": { + "description": "Severity: warning or info.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "recommendations": { + "description": "Plain-text scrubbing/sharing recommendations.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "True when the image was accepted and parsed; false on missing file or parse error (with an error message).", + "type": "boolean" + } + }, + "type": "object" +}
- Removed
osint_hash_lookup - Changed
osint_iban_validator5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / iban / descriptionAdded value: +"Single-IBAN alias for ibans, accepted for convenience. Used only when ibans is absent." - added
Input schema / properties / ibansAdded value: +{ + "description": "One or more IBANs to validate. Separate multiple entries with newlines; spaces within an IBAN are ignored and letters are uppercased. Takes precedence over iban when both are sent.", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "iban" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "results": { + "description": "One entry per non-blank input IBAN, in submission order.", + "items": { + "properties": { + "accountNumber": { + "description": "Account number parsed from the BBAN, or the whole BBAN if the layout is unknown.", + "type": "string" + }, + "bankCode": { + "description": "Bank identifier parsed from the BBAN where the country layout is known.", + "type": "string" + }, + "bban": { + "description": "Basic Bank Account Number (everything after the check digits).", + "type": "string" + }, + "branchCode": { + "description": "Branch/sort identifier where the country layout defines one, else empty.", + "type": "string" + }, + "checkDigits": { + "description": "The two check digits (characters 3 and 4).", + "type": "string" + }, + "country": { + "description": "Two-letter ISO country code from the first two characters.", + "type": "string" + }, + "countryName": { + "description": "Full country name for the code, or empty if unsupported.", + "type": "string" + }, + "errors": { + "description": "Validation failure messages; empty when valid is true.", + "items": { + "type": "string" + }, + "type": "array" + }, + "expectedLength": { + "description": "Required length for the country, or 0 if the country is unsupported.", + "type": "integer" + }, + "formatted": { + "description": "Normalized IBAN regrouped into space-separated blocks of four.", + "type": "string" + }, + "input": { + "description": "The IBAN exactly as submitted.", + "type": "string" + }, + "length": { + "description": "Character count of the normalized IBAN.", + "type": "integer" + }, + "normalized": { + "description": "Input with whitespace removed and uppercased.", + "type": "string" + }, + "valid": { + "description": "True only if format, country, length, and mod-97 check digits all pass.", + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + }, + "success": { + "description": "Whether the request was processed (true even when some IBANs are invalid).", + "type": "boolean" + }, + "summary": { + "description": "Aggregate counts across all results.", + "properties": { + "countries": { + "description": "Sorted unique country names seen across valid-format inputs.", + "items": { + "type": "string" + }, + "type": "array" + }, + "invalid": { + "description": "Count of invalid IBANs.", + "type": "integer" + }, + "total": { + "description": "Number of IBANs processed.", + "type": "integer" + }, + "valid": { + "description": "Count of valid IBANs.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
osint_isbn_validator4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "isbns": { + "description": "ISBN strings to validate. Hyphens and spaces are stripped; each must clean to 10 or 13 digits. Non-string entries are ignored.", + "examples": [ + [ + "9780306406157", + "0306406152" + ] + ], + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "options": { + "additionalProperties": false, + "description": "Optional flags toggling extra output (camelCase or snake_case keys accepted).", + "properties": { + "addHyphenation": { + "default": false, + "description": "Add a hyphenated ISBN-13 to the conversion block.", + "type": "boolean" + }, + "includeFormatConversion": { + "default": true, + "description": "Include ISBN-10<->ISBN-13 conversion and barcode in each result.", + "type": "boolean" + }, + "showCheckDigitCalculation": { + "default": false, + "description": "Include the weighted-sum formula, expected, and actual check digit.", + "type": "boolean" + } + }, + "type": "object" + } +} - added
Input schema / requiredAdded value: +[ + "isbns" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "results": { + "description": "One entry per validatable input ISBN.", + "items": { + "properties": { + "analysis": { + "description": "Present when valid; check digit, EAN prefix, and registration group.", + "properties": { + "check_digit": { + "description": "The check digit character.", + "type": "string" + }, + "check_digit_valid": { + "description": "Whether the check digit recomputes correctly.", + "type": "boolean" + }, + "clean_isbn": { + "description": "ISBN with separators removed.", + "type": "string" + }, + "ean_prefix": { + "description": "ISBN-13 only: 978 or 979.", + "type": "string" + }, + "group_identifier": { + "description": "Registration group digits.", + "type": "string" + }, + "group_name": { + "description": "Language/region for the group.", + "type": "string" + } + }, + "type": "object" + }, + "calculation": { + "additionalProperties": { + "type": "string" + }, + "description": "Check-digit steps when showCheckDigitCalculation is set.", + "type": "object" + }, + "conversion": { + "additionalProperties": { + "type": "string" + }, + "description": "ISBN-10/ISBN-13/barcode forms (and hyphenated if requested).", + "type": "object" + }, + "input": { + "description": "The original ISBN string as received.", + "type": "string" + }, + "timestamp": { + "description": "Unix epoch seconds when validated.", + "type": "integer" + }, + "type": { + "description": "Detected type: isbn-10, isbn-13, or isbn-unknown.", + "type": [ + "string", + "null" + ] + }, + "valid": { + "description": "Whether the check digit and format are valid.", + "type": "boolean" + }, + "warnings": { + "description": "Format errors or deprecation notices.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "statistics": { + "description": "Batch totals across all results.", + "properties": { + "invalid": { + "description": "Count of invalid ISBNs.", + "type": "integer" + }, + "success_rate": { + "description": "Percent valid (0-100, two decimals).", + "type": "number" + }, + "total": { + "description": "Number of results.", + "type": "integer" + }, + "valid": { + "description": "Count of valid ISBNs.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request was processed.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
osint_mac_vendor_lookup4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "mac_address": { + "description": "MAC address to look up. Accepts 12 hex digits with any or no separator (colon, hyphen, dot); case-insensitive. Must contain exactly 12 hex characters (6 bytes) after separators are stripped.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "mac_address" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Present only when success is false; human-readable reason (blank or malformed MAC).", + "type": [ + "string", + "null" + ] + }, + "result": { + "description": "Lookup result; present when success is true.", + "properties": { + "analysis": { + "description": "Structural facts derived from the address bits.", + "properties": { + "likely_virtual": { + "description": "Present when the vendor matches a known VM platform (VMware, VirtualBox, Parallels, Microsoft).", + "type": "boolean" + }, + "locally_administered": { + "description": "True if the U/L bit is set (software-assigned LAA) vs hardware UAA.", + "type": "boolean" + }, + "notes": { + "description": "Plain-language explanatory notes about the address.", + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "description": "Frame addressing class from the I/G bit and broadcast check.", + "enum": [ + "unicast", + "multicast", + "broadcast" + ], + "type": "string" + } + }, + "type": "object" + }, + "details": { + "description": "Vendor record when matched; an empty array when unmatched.", + "properties": { + "address": { + "description": "Registrant address when available, else null.", + "type": [ + "string", + "null" + ] + }, + "country": { + "description": "ISO country code of the registrant, else null.", + "type": [ + "string", + "null" + ] + }, + "organization": { + "description": "Registered organization name.", + "type": "string" + }, + "registry": { + "description": "Issuing registry; defaults to IEEE Registration Authority.", + "type": "string" + } + }, + "type": "object" + }, + "input": { + "description": "The raw MAC string as submitted.", + "type": "string" + }, + "normalized": { + "description": "Canonical upper-case colon form, e.g. 00:0C:29:AB:CD:EF.", + "type": "string" + }, + "oui": { + "description": "Upper-case 6-hex-digit OUI prefix (first 3 bytes).", + "type": "string" + }, + "vendor": { + "description": "Matched organization name, or null when the OUI is absent from the bundled table.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "success": { + "description": "True when the lookup completed; false on invalid input.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
osint_phone_validator6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / country_code / defaultAdded value: +"" - added
Input schema / properties / country_code / descriptionAdded value: +"Optional ISO country hint (for example US, GB, DE) used to pick the country when the number has no leading calling code. Empty string means auto-detect from the digits." - added
Input schema / properties / phone_number / descriptionAdded value: +"Phone number to validate; may include a leading plus, spaces, dashes, or parentheses (all stripped to digits). Provide E.164 form (country code first) for reliable country detection. Must not be blank." - changed
Input schema / requiredPrevious value: -[ - "phone_number", - "country_code" -]New value: +[ + "phone_number" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Human-readable failure reason; present only when success is false.", + "type": "string" + }, + "result": { + "description": "Validation detail, present only when success is true.", + "properties": { + "analysis": { + "description": "Structural breakdown such as calling_code, national_number, total_length, area_code, and notes.", + "type": "object" + }, + "carrier_info": { + "description": "Heuristic carrier/network notes from the calling code (no live lookup); null when no country matched.", + "properties": { + "carrier": { + "description": "Carrier name, or Unknown (not network-resolved).", + "type": "string" + }, + "network_type": { + "description": "Network class such as Mobile or Toll-free, or Unknown.", + "type": "string" + }, + "notes": { + "description": "Free-text carrier notes.", + "items": { + "type": "string" + }, + "type": "array" + }, + "ported": { + "description": "Portability status; always null (not checked).", + "type": [ + "boolean", + "null" + ] + } + }, + "type": [ + "object", + "null" + ] + }, + "cleaned": { + "description": "The input reduced to digits and an optional leading plus.", + "type": "string" + }, + "country_info": { + "description": "Detected country, or null when no calling code matched.", + "properties": { + "calling_code": { + "description": "International calling code without the plus.", + "type": "string" + }, + "country": { + "description": "Country or region name.", + "type": "string" + }, + "format_pattern": { + "description": "Canonical display pattern for the country.", + "type": "string" + }, + "iso_code": { + "description": "ISO code or slash-joined codes (for example US/CA).", + "type": "string" + }, + "max_length": { + "description": "Maximum national-number length.", + "type": "integer" + }, + "min_length": { + "description": "Minimum national-number length.", + "type": "integer" + }, + "national_number": { + "description": "Digits after the calling code.", + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "formats": { + "additionalProperties": { + "type": "string" + }, + "description": "Rendered formats. For a recognised country: e164, international, national, rfc3966. For an unrecognised number: raw plus formatted or possible_international.", + "type": "object" + }, + "input": { + "description": "The submitted number, trimmed and echoed back.", + "type": "string" + }, + "timezone_info": { + "description": "Timezone hints for the country, or null when unknown.", + "properties": { + "note": { + "description": "Human-readable timezone note.", + "type": "string" + }, + "zones": { + "description": "Timezone abbreviations.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": [ + "object", + "null" + ] + }, + "type": { + "description": "Number type: geographic, mobile, toll_free, premium_rate, special_service, or unknown.", + "type": "string" + }, + "valid": { + "description": "True when the digit count is within the ITU-T E.164 range (7 to 15 digits).", + "type": "boolean" + }, + "warnings": { + "description": "Validation warnings such as too-short or too-long digit counts.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether validation ran; false with an error string on blank or failed input.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
osint_qr_code_generator36 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / inputs / additionalPropertiesAdded value: +false - added
Input schema / properties / inputs / descriptionAdded value: +"Per-type fields; only the object matching type is read." - added
Input schema / properties / inputs / properties / contactAdded value: +{ + "additionalProperties": false, + "description": "vCard 3.0 fields (type=contact).", + "properties": { + "email": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "organization": { + "type": "string" + }, + "phone": { + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / inputs / properties / emailAdded value: +{ + "additionalProperties": false, + "description": "Email draft (type=email), encoded as mailto:<address>?subject=&body=.", + "properties": { + "address": { + "type": "string" + }, + "body": { + "type": "string" + }, + "subject": { + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / inputs / properties / smsAdded value: +{ + "additionalProperties": false, + "description": "SMS draft (type=sms), encoded as sms:<phone>?body=<message>.", + "properties": { + "message": { + "type": "string" + }, + "phone": { + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / inputs / properties / textAdded value: +{ + "description": "Raw text, used when type=text.", + "type": "string" +} - added
Input schema / properties / inputs / properties / urlAdded value: +{ + "description": "URL, used when type=url.", + "type": "string" +} - added
Input schema / properties / inputs / properties / wifi / additionalPropertiesAdded value: +false - added
Input schema / properties / inputs / properties / wifi / descriptionAdded value: +"WiFi join data (type=wifi), encoded as WIFI:T:<security>;S:<ssid>;P:<password>;;." - added
Input schema / properties / inputs / properties / wifi / properties / password / descriptionAdded value: +"Network password." - added
Input schema / properties / inputs / properties / wifi / properties / security / descriptionAdded value: +"Auth type, e.g. WPA, WEP, or nopass." - added
Input schema / properties / inputs / properties / wifi / properties / ssid / descriptionAdded value: +"Network name." - removed
Input schema / properties / inputs / properties / wifi / requiredRemoved value: -[ - "ssid", - "password", - "security" -] - removed
Input schema / properties / inputs / requiredRemoved value: -[ - "wifi" -] - added
Input schema / properties / qrTypeAdded value: +{ + "description": "Alias for type; used when type is absent.", + "enum": [ + "text", + "url", + "wifi", + "contact", + "sms", + "email" + ], + "type": "string" +} - added
Input schema / properties / settings / additionalPropertiesAdded value: +false - added
Input schema / properties / settings / descriptionAdded value: +"Rendering options applied to the serviceUrl." - added
Input schema / properties / settings / properties / backgroundColor / defaultAdded value: +"#ffffff" - added
Input schema / properties / settings / properties / backgroundColor / descriptionAdded value: +"Background color as #rrggbb; invalid input falls back to #ffffff." - added
Input schema / properties / settings / properties / backgroundColor / patternAdded value: +"^#[0-9a-fA-F]{6}$" - added
Input schema / properties / settings / properties / errorCorrection / defaultAdded value: +"M" - added
Input schema / properties / settings / properties / errorCorrection / descriptionAdded value: +"Error-correction level: L 7%, M 15%, Q 25%, H 30% damage tolerance." - added
Input schema / properties / settings / properties / errorCorrection / enumAdded value: +[ + "L", + "M", + "Q", + "H" +] - added
Input schema / properties / settings / properties / foregroundColor / defaultAdded value: +"#000000" - added
Input schema / properties / settings / properties / foregroundColor / descriptionAdded value: +"Module color as #rrggbb; invalid input falls back to #000000." - added
Input schema / properties / settings / properties / foregroundColor / patternAdded value: +"^#[0-9a-fA-F]{6}$" - added
Input schema / properties / settings / properties / size / defaultAdded value: +300 - added
Input schema / properties / settings / properties / size / descriptionAdded value: +"Square pixel size; other values fall back to 300." - added
Input schema / properties / settings / properties / size / enumAdded value: +[ + 200, + 300, + 400, + 500 +] - removed
Input schema / properties / settings / requiredRemoved value: -[ - "size", - "errorCorrection", - "foregroundColor", - "backgroundColor" -] - added
Input schema / properties / type / defaultAdded value: +"text" - added
Input schema / properties / type / descriptionAdded value: +"Payload type to encode. Unknown values fall back to text. (qrType is accepted as an alias.)" - added
Input schema / properties / type / enumAdded value: +[ + "text", + "url", + "wifi", + "contact", + "sms", + "email" +] - changed
Input schema / requiredPrevious value: -[ - "type", - "inputs", - "settings" -]New value: +[ + "type" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "properties": { + "content": { + "description": "The encoded string that the QR will contain.", + "type": "string" + }, + "contentLength": { + "description": "Character length of content.", + "type": "integer" + }, + "errorCorrectionDisplay": { + "description": "Verbose error-correction label with damage tolerance.", + "type": "string" + }, + "inputLabel": { + "description": "UI label for the input, e.g. \"Website URL\".", + "type": "string" + }, + "serviceUrl": { + "description": "api.qrserver.com URL that renders the QR PNG; empty string when content is blank.", + "type": "string" + }, + "settings": { + "description": "Normalized settings actually applied.", + "properties": { + "backgroundColor": { + "description": "Applied background color (#rrggbb).", + "type": "string" + }, + "errorCorrection": { + "description": "Applied level (L, M, Q, H).", + "type": "string" + }, + "foregroundColor": { + "description": "Applied module color (#rrggbb).", + "type": "string" + }, + "size": { + "description": "Square pixel size.", + "type": "integer" + } + }, + "type": "object" + }, + "sizeDisplay": { + "description": "Size as \"<n>x<n> pixels\".", + "type": "string" + }, + "type": { + "description": "Resolved payload type (text, url, wifi, contact, sms, email).", + "type": "string" + }, + "typeDisplay": { + "description": "Human label for the type, e.g. \"Contact Card (vCard)\".", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "True when the payload was built.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
osint_vin_decoder4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "options": { + "additionalProperties": false, + "description": "Optional decoding flags.", + "properties": { + "detailed_breakdown": { + "default": false, + "description": "When true, adds the per-segment breakdown object (WMI, VDS, check digit, year, plant, serial).", + "type": "boolean" + }, + "include_manufacturer_info": { + "default": true, + "description": "When true, populates the info object (manufacturer, country, modelYear, vehicleType, assemblyPlant).", + "type": "boolean" + }, + "validate_check_digit": { + "default": true, + "description": "When true, recomputes the position-9 check digit and adds a warning if it fails.", + "type": "boolean" + } + }, + "type": "object" + }, + "vins": { + "description": "VINs to decode. Each is uppercased/trimmed; non-strings and entries not matching 17 chars of A-H,J-N,P-R,Z,0-9 are dropped before decoding.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + } +} - added
Input schema / requiredAdded value: +[ + "vins" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "note": { + "description": "Fixed disclosure that decoding is local validation plus deterministic lookup tables.", + "type": "string" + }, + "processing_info": { + "description": "Echo of the resolved option flags (validate_check_digit, include_manufacturer_info, detailed_breakdown).", + "type": "object" + }, + "results": { + "description": "One entry per accepted VIN.", + "items": { + "properties": { + "breakdown": { + "description": "Per-segment breakdown; empty unless detailed_breakdown is true.", + "type": "object" + }, + "info": { + "description": "Decoded fields: manufacturer, country, modelYear, vehicleType, assemblyPlant. Empty when include_manufacturer_info is false.", + "type": "object" + }, + "timestamp": { + "description": "Unix epoch seconds when decoded.", + "type": "integer" + }, + "valid": { + "description": "Whether the VIN passed format validation.", + "type": "boolean" + }, + "vin": { + "description": "Normalized (uppercased, trimmed) VIN.", + "type": "string" + }, + "warnings": { + "description": "Decode warnings (e.g. failed check digit, ambiguous year, unknown manufacturer).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "success": { + "description": "True when at least one valid VIN was decoded.", + "type": "boolean" + }, + "summary": { + "description": "Batch counts.", + "properties": { + "invalid_vins": { + "description": "Count that failed validation.", + "type": "integer" + }, + "total_vins": { + "description": "Number of accepted VINs.", + "type": "integer" + }, + "valid_vins": { + "description": "Count that passed validation.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
security_api_key_generator12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / byteCountAdded value: +{ + "description": "Raw random-byte count for byte-based formats (base64, base64url). Takes precedence over length when both are given.", + "maximum": 4096, + "minimum": 8, + "type": "integer" +} - added
Input schema / properties / countAdded value: +{ + "default": 10, + "description": "How many keys to produce for generateMany (each is independently random). Ignored by generate and presets.", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / format / descriptionAdded value: +"Required for generate and generateMany. Output encoding or shape. bearer is a fixed 256-bit base64url token; uuid-v4 is a 36-char RFC 4122 UUID; both ignore length and byteCount." - added
Input schema / properties / format / enumAdded value: +[ + "hex", + "base64", + "base64url", + "alphanumeric", + "alphanumeric-upper", + "alphanumeric-lower", + "urlsafe", + "uuid-v4", + "bearer" +] - added
Input schema / properties / lengthAdded value: +{ + "default": 32, + "description": "Character count for character-based formats (hex, alphanumeric variants, urlsafe). Ignored by uuid-v4 and bearer.", + "maximum": 4096, + "minimum": 8, + "type": "integer" +} - added
Input schema / properties / operation / descriptionAdded value: +"Action to run: generate yields one key; generateMany yields up to count keys; presets lists the curated issuer-shaped presets (needs no other field)." - added
Input schema / properties / operation / enumAdded value: +[ + "generate", + "generateMany", + "presets" +] - added
Input schema / properties / prefixAdded value: +{ + "description": "Optional literal text prepended to the key body (for example sk_live_).", + "maxLength": 256, + "type": "string" +} - added
Input schema / properties / separatorAdded value: +{ + "description": "Optional literal text inserted between prefix and body (only used when both prefix and body are non-empty).", + "maxLength": 256, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "format" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation that was run.", + "type": "string" + }, + "result": { + "description": "For generate, a single key object (key, alphabet, byteCount, bitsOfEntropy, format, prefix, separator); for generateMany, an array of such objects; for presets, an object with a presets array.", + "properties": { + "alphabet": { + "description": "The character set used for the body. generate only.", + "type": "string" + }, + "bitsOfEntropy": { + "description": "Estimated entropy of the key in bits. generate only.", + "type": "integer" + }, + "byteCount": { + "description": "Number of random bytes consumed. generate only.", + "type": "integer" + }, + "format": { + "description": "The resolved output format. generate only.", + "type": "string" + }, + "key": { + "description": "The generated API key string including any prefix and separator. generate only.", + "type": "string" + }, + "prefix": { + "description": "The prefix applied (empty string if none). generate only.", + "type": "string" + }, + "separator": { + "description": "The separator applied (empty string if none). generate only.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on a 200 response.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
security_csp_generator10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operation / descriptionAdded value: +"Mode: build serializes a directives map into a header (requires policy); parse splits a header string into directives (requires value); analyze audits either input for weaknesses (requires value or policy)." - added
Input schema / properties / operation / enumAdded value: +[ + "build", + "parse", + "analyze" +] - added
Input schema / properties / policy / additionalPropertiesAdded value: +true - added
Input schema / properties / policy / descriptionAdded value: +"CSP directives map keyed by directive name (default-src, script-src, style-src, img-src, connect-src, frame-ancestors, base-uri, form-action, object-src, and so on). Each value is an array of source tokens (such as self, unsafe-inline, https: or a nonce/hash) or a single space-separated string. Boolean directives like upgrade-insecure-requests take an empty array or true. Required for build; accepted by analyze." - removed
Input schema / properties / policy / propertiesRemoved value: -{ - "default-src": { - "items": { - "type": "string" - }, - "type": "array" - }, - "script-src": { - "items": { - "type": "string" - }, - "type": "array" - } -} - removed
Input schema / properties / policy / requiredRemoved value: -[ - "default-src", - "script-src" -] - added
Input schema / properties / valueAdded value: +{ + "description": "An existing CSP header value to parse or analyze, for example default-src self then script-src self. Required for parse; accepted by analyze.", + "type": [ + "string", + "null" + ] +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "policy" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation performed (build, parse, or analyze).", + "type": "string" + }, + "result": { + "description": "Operation output. build returns header/value/directives/warnings/htmlMetaTag; parse returns value/directives/warnings; analyze returns warnings only.", + "properties": { + "directives": { + "additionalProperties": true, + "description": "Normalized directives map; each key maps to an array of source-token strings (build and parse).", + "type": "object" + }, + "header": { + "description": "Header name, always Content-Security-Policy (build only).", + "type": "string" + }, + "htmlMetaTag": { + "description": "Equivalent HTML meta http-equiv tag with the value HTML-escaped (build only).", + "type": "string" + }, + "value": { + "description": "Serialized CSP header value with directives in stable order (build and parse).", + "type": "string" + }, + "warnings": { + "description": "Severity-ranked findings for missing or dangerous directives (all operations).", + "items": { + "properties": { + "directive": { + "description": "Directive the finding applies to.", + "type": "string" + }, + "message": { + "description": "What is wrong or risky.", + "type": "string" + }, + "recommendation": { + "description": "Suggested fix; may be absent.", + "type": "string" + }, + "severity": { + "description": "One of critical, high, medium, low, or info.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "True when the operation completed without error.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
security_htaccess_generator21 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / allowIpsAdded value: +{ + "description": "IPv4/IPv6 addresses or CIDR ranges to allow; when set alone, everyone else is denied.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / brotliAdded value: +{ + "default": false, + "description": "Emit a mod_brotli compression block (typically 15-25% smaller than gzip).", + "type": "boolean" +} - added
Input schema / properties / cacheHeadersAdded value: +{ + "additionalProperties": false, + "description": "mod_expires + mod_headers cache lifetimes. Omit or use 0 to skip a tier.", + "properties": { + "htmlMinutes": { + "description": "Cache lifetime in minutes for text/html. Over 10080 (1 week) warns.", + "minimum": 1, + "type": "integer" + }, + "staticDays": { + "description": "Cache lifetime in days for static assets (images/CSS/JS/fonts). Over 365 warns.", + "minimum": 1, + "type": "integer" + } + }, + "type": "object" +} - added
Input schema / properties / customRulesAdded value: +{ + "description": "Free-form Apache directives appended verbatim at the end of the file.", + "type": "string" +} - added
Input schema / properties / denyIpsAdded value: +{ + "description": "IPv4/IPv6 addresses or CIDR ranges to block (Deny from). Invalid entries still emit but raise a warning.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / directoryListingAdded value: +{ + "default": "leave-alone", + "description": "Autoindex: disabled emits Options -Indexes, enabled emits Options +Indexes, leave-alone emits nothing.", + "enum": [ + "enabled", + "disabled", + "leave-alone" + ], + "type": "string" +} - added
Input schema / properties / errorPagesAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "description": "Map of HTTP status code (400-599, as string key) to ErrorDocument path, e.g. 404 to /404.html.", + "type": "object" +} - added
Input schema / properties / forceHttps / defaultAdded value: +false - added
Input schema / properties / forceHttps / descriptionAdded value: +"Emit a mod_rewrite block that 301-redirects every HTTP request to HTTPS." - added
Input schema / properties / gzip / defaultAdded value: +false - added
Input schema / properties / gzip / descriptionAdded value: +"Emit a mod_deflate GZIP AddOutputFilterByType block for text/JS/CSS/JSON." - added
Input schema / properties / hotlinkProtectionAdded value: +{ + "additionalProperties": false, + "description": "Referer-based image hotlink protection via mod_rewrite.", + "properties": { + "allowedDomains": { + "description": "Domains whose Referer is permitted; empty list warns (would block all cross-origin images).", + "items": { + "type": "string" + }, + "type": "array" + }, + "enabled": { + "default": false, + "description": "Turn on hotlink protection.", + "type": "boolean" + }, + "replacement": { + "description": "Optional replacement image URL for blocked requests; blank returns 403 (Forbidden).", + "type": "string" + } + }, + "required": [ + "enabled" + ], + "type": "object" +} - added
Input schema / properties / operationAdded value: +{ + "default": "generate", + "description": "\"generate\" builds .htaccess text from the options below; \"presets\" ignores all options and returns the curated preset list.", + "enum": [ + "generate", + "presets" + ], + "type": "string" +} - added
Input schema / properties / redirectsAdded value: +{ + "description": "mod_alias path-prefix redirects. Empty from/to, self-redirects, and homepage catches raise warnings.", + "items": { + "additionalProperties": false, + "properties": { + "from": { + "description": "Source path prefix, e.g. /old.", + "type": "string" + }, + "to": { + "description": "Destination URL or path, e.g. /new.", + "type": "string" + }, + "type": { + "default": "301", + "description": "HTTP redirect status code; unknown values fall back to 301 with a warning.", + "enum": [ + "301", + "302", + "303", + "307", + "308" + ], + "type": "string" + } + }, + "required": [ + "from", + "to" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / rewritesAdded value: +{ + "description": "Custom mod_rewrite rules. Pattern is regex-compiled for a warning check (Apache uses PCRE).", + "items": { + "additionalProperties": false, + "properties": { + "flags": { + "description": "PCRE flags without brackets, e.g. R=301 and L.", + "items": { + "type": "string" + }, + "type": "array" + }, + "pattern": { + "description": "RewriteRule match pattern, e.g. ^old/(.*)$.", + "type": "string" + }, + "target": { + "description": "RewriteRule substitution target, e.g. /new/$1.", + "type": "string" + } + }, + "required": [ + "pattern", + "target" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / wwwMode / defaultAdded value: +"leave-alone" - added
Input schema / properties / wwwMode / descriptionAdded value: +"Canonical host: force the www subdomain, force the bare apex, or emit no host-canonicalisation rule." - added
Input schema / properties / wwwMode / enumAdded value: +[ + "force-www", + "force-non-www", + "leave-alone" +] - changed
Input schema / requiredPrevious value: -[ - "forceHttps", - "wwwMode", - "gzip" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation performed (generate or presets).", + "type": "string" + }, + "result": { + "description": "For operation=generate: the generated file and metadata. For operation=presets: a presets array.", + "properties": { + "htaccess": { + "description": "The complete assembled .htaccess file text (generate only).", + "type": "string" + }, + "presets": { + "description": "Curated presets (presets only).", + "items": { + "properties": { + "description": { + "description": "What the preset configures.", + "type": "string" + }, + "id": { + "description": "Preset id, e.g. wordpress-security.", + "type": "string" + }, + "input": { + "description": "The generator input object the preset applies.", + "type": "object" + }, + "name": { + "description": "Human-readable preset name.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "sections": { + "description": "Per-feature breakdown of the emitted blocks (generate only).", + "items": { + "properties": { + "content": { + "description": "The raw directive text for that section.", + "type": "string" + }, + "description": { + "description": "What the section does.", + "type": "string" + }, + "name": { + "description": "Section id, e.g. force-https, gzip.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "warnings": { + "description": "Human-readable validation/safety warnings (invalid IPs, risky redirects, aggressive cache, etc.).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
security_jwt_generator_validator10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / inputAdded value: +{ + "additionalProperties": true, + "description": "Operation payload for assembleClaims (claim fields) or signHmac (token parts).", + "properties": { + "alg": { + "description": "HMAC algorithm for signHmac when no header.alg is given (default HS256). Asymmetric algorithms are rejected server-side.", + "enum": [ + "HS256", + "HS384", + "HS512" + ], + "type": "string" + }, + "aud": { + "description": "Audience claim (assembleClaims).", + "type": "string" + }, + "customClaims": { + "description": "Extra claims merged last (assembleClaims); JSON object or JSON object string. Never overrides a standard claim already set.", + "type": [ + "object", + "string" + ] + }, + "exp": { + "description": "Expiry (assembleClaims): treated as seconds-from-iat when 1000000000 or less, else absolute epoch.", + "type": [ + "integer", + "string" + ] + }, + "header": { + "description": "JOSE header for signHmac; alg here wins over the top-level alg. typ defaults to JWT.", + "type": "object" + }, + "iat": { + "description": "Issued-at (assembleClaims); defaults to now (or epoch 0 if now absent).", + "type": [ + "integer", + "string" + ] + }, + "iss": { + "description": "Issuer claim (assembleClaims).", + "type": "string" + }, + "jti": { + "description": "Token ID claim (assembleClaims).", + "type": "string" + }, + "nbf": { + "description": "Not-before (assembleClaims): delta-from-iat when 1000000000 or less, else absolute epoch.", + "type": [ + "integer", + "string" + ] + }, + "now": { + "description": "Current epoch seconds used to resolve iat and exp/nbf deltas (assembleClaims).", + "type": "integer" + }, + "payload": { + "description": "Claim set object to sign (signHmac). Required for signHmac.", + "type": "object" + }, + "secret": { + "description": "HMAC secret (UTF-8) for signHmac. Required for signHmac.", + "type": "string" + }, + "sub": { + "description": "Subject claim (assembleClaims).", + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / nowAdded value: +{ + "description": "Current time in epoch seconds for exp/nbf/iat checks on decode. Omit to compare against epoch 0 (relative-time strings only).", + "type": [ + "integer", + "null" + ] +} - added
Input schema / properties / operation / descriptionAdded value: +"Action to run. decode: parse a token (no signature check). validate: verify an HMAC signature plus claim validity. signHmac: mint an HMAC-signed token. assembleClaims: build a claim payload. presets: list curated claim-set presets. standardClaims: list RFC 7519 registered-claim docs." - added
Input schema / properties / operation / enumAdded value: +[ + "decode", + "validate", + "signHmac", + "assembleClaims", + "presets", + "standardClaims" +] - added
Input schema / properties / optionsAdded value: +{ + "additionalProperties": false, + "description": "Claim-check settings for validate (ignored for other operations).", + "properties": { + "expectedAudience": { + "description": "If set, aud must equal or contain this.", + "type": "string" + }, + "expectedIssuer": { + "description": "If set, iss must equal this exactly.", + "type": "string" + }, + "leeway": { + "default": 0, + "description": "Clock-skew tolerance in seconds applied to exp/nbf.", + "minimum": 0, + "type": "integer" + }, + "now": { + "description": "Current time in epoch seconds for exp/nbf/iat checks.", + "type": "integer" + } + }, + "type": "object" +} - added
Input schema / properties / secretAdded value: +{ + "description": "Shared HMAC secret (UTF-8) used by validate to recompute the signature. Required for HMAC validation; ignored otherwise.", + "type": "string" +} - added
Input schema / properties / token / descriptionAdded value: +"Compact JWS string (header.payload.signature). Required for decode and validate; ignored otherwise." - changed
Input schema / requiredPrevious value: -[ - "operation", - "token" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation that was executed.", + "type": "string" + }, + "result": { + "description": "Operation-specific output. decode: {header,payload,signature,raw,claims,warnings,error}. validate: {valid,errors,header,payload,signatureValid,claimsValid}. signHmac: {token,header,payload}. assembleClaims: {claims,warnings}. presets: {presets[]}. standardClaims: {claims[]}.", + "properties": { + "claims": { + "description": "decode/assembleClaims: the parsed or built claim object (iss/sub/aud/exp/nbf/iat/jti plus a custom map; exp/nbf/iat expand to epoch/iso/relative on decode). standardClaims: an array of registered-claim doc objects.", + "type": [ + "object", + "array" + ] + }, + "claimsValid": { + "description": "True if all non-signature claim checks passed (validate).", + "type": "boolean" + }, + "error": { + "description": "Always null on success (decode).", + "type": [ + "string", + "null" + ] + }, + "errors": { + "description": "Signature and claim failures (validate).", + "items": { + "type": "string" + }, + "type": "array" + }, + "header": { + "description": "Decoded JOSE header (decode/validate/signHmac).", + "type": "object" + }, + "payload": { + "description": "Decoded or signed claim set (decode/validate/signHmac).", + "type": "object" + }, + "presets": { + "description": "Curated claim-set presets (presets operation), each with id, name, description, header, payload.", + "items": { + "type": "object" + }, + "type": "array" + }, + "raw": { + "description": "The three base64url segments as received (decode).", + "properties": { + "header": { + "description": "base64url header segment.", + "type": "string" + }, + "payload": { + "description": "base64url payload segment.", + "type": "string" + }, + "signature": { + "description": "base64url signature segment.", + "type": "string" + } + }, + "type": "object" + }, + "signature": { + "description": "Raw base64url signature segment (decode).", + "type": "string" + }, + "signatureValid": { + "description": "HMAC signature result; null for asymmetric algorithms not verified server-side (validate).", + "type": [ + "boolean", + "null" + ] + }, + "token": { + "description": "The signed compact JWS (signHmac).", + "type": "string" + }, + "valid": { + "description": "True only if the signature verified AND no claim errors (validate).", + "type": "boolean" + }, + "warnings": { + "description": "Advisory notes, e.g. alg none or expired token (decode/assembleClaims).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on a 2xx response.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
security_openssl_command_builder10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / category / descriptionAdded value: +"Which openssl command to build (required when operation is build). keygen=private key, csr=signing request, self-signed=key+cert, sign=detached signature, encrypt=symmetric enc, hash=file digest, pkcs12=PFX bundle, inspect=read cert/key/CSR, connect=s_client probe, random=rand bytes, verify=chain check, s-server=test TLS server." - added
Input schema / properties / category / enumAdded value: +[ + "keygen", + "csr", + "self-signed", + "sign", + "encrypt", + "hash", + "pkcs12", + "inspect", + "connect", + "random", + "verify", + "s-server" +] - added
Input schema / properties / fields / additionalPropertiesAdded value: +true - added
Input schema / properties / fields / descriptionAdded value: +"Per-category options; every key is optional and falls back to a sensible default. keygen/self-signed: algorithm (rsa-2048/rsa-3072/rsa-4096/ec/ed25519/ed448, default rsa-4096), curve (prime256v1/secp384r1/secp521r1/secp256k1), encryptKey/noEncrypt, cipher, outFile/keyOut/certOut, days (default 365). csr/self-signed subject DN: country, state, locality, organization, organizationalUnit, commonName, emailAddress; sans. csr/self-signed/sign/hash: digest (sha256/sha384/sha512/sha1/md5, default sha256), keyFile, inFile, sigFile. encrypt: mode (encrypt/decrypt), base64, pbkdf2 (default true), iter (default 100000), password. pkcs12: certFile, caFile, alias, password. inspect: what (cert/csr/key/p12), inFile. connect/s-server: host, sni, starttls, tlsVersion, ciphers, port (default 443 connect / 4433 s-server), showCerts/www. random: length (default 32), format (base64/hex), outFile." - removed
Input schema / properties / fields / propertiesRemoved value: -{ - "algorithm": { - "type": "string" - }, - "outFile": { - "type": "string" - } -} - removed
Input schema / properties / fields / requiredRemoved value: -[ - "algorithm", - "outFile" -] - added
Input schema / properties / operationAdded value: +{ + "default": "build", + "description": "API action: build assembles a command from category+fields; categories returns the form-field catalogue; presets returns curated example field sets. Defaults to build.", + "enum": [ + "build", + "categories", + "presets" + ], + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "category", - "fields" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation echoed back (build, categories, or presets).", + "type": "string" + }, + "result": { + "description": "Operation payload. For build this is the command object below; for categories/presets it wraps a categories/presets array of form definitions.", + "properties": { + "command": { + "description": "The assembled, shell-quoted openssl command line, ready to copy and run manually.", + "type": "string" + }, + "explanation": { + "description": "Ordered per-flag explanations of the generated command.", + "items": { + "properties": { + "flag": { + "description": "The openssl subcommand or flag (e.g. -newkey rsa:4096).", + "type": "string" + }, + "meaning": { + "description": "Plain-language description of what the flag does.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "files": { + "description": "Each file the command reads or writes.", + "items": { + "properties": { + "description": { + "description": "What the file contains or is used for.", + "type": "string" + }, + "name": { + "description": "File path used in the command.", + "type": "string" + }, + "role": { + "description": "Whether the file is read, written, or both.", + "enum": [ + "input", + "output", + "in-out" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "warnings": { + "description": "Advisories about weak, deprecated, or insecure choices (e.g. MD5, RSA below 2048, missing SAN, plaintext key).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
security_password_policy_generator28 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / input / additionalPropertiesAdded value: +false - added
Input schema / properties / input / descriptionAdded value: +"Policy constraints (required when operation is generate; ignored for presets)." - added
Input schema / properties / input / properties / customRulesAdded value: +{ + "description": "Free-form extra rules appended to the policy document.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / input / properties / disallowCommonPasswords / defaultAdded value: +true - added
Input schema / properties / input / properties / disallowCommonPasswords / descriptionAdded value: +"Mention common-password-list screening in the policy (defaults to true unless set false)." - added
Input schema / properties / input / properties / disallowDictionaryAdded value: +{ + "description": "Mention dictionary-word screening in the policy.", + "type": "boolean" +} - added
Input schema / properties / input / properties / disallowedSubstringsAdded value: +{ + "description": "Substrings that must not appear in the password (case-insensitive).", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / input / properties / lockoutDurationAdded value: +{ + "description": "Lockout duration in minutes after the threshold is reached.", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / input / properties / lockoutThresholdAdded value: +{ + "description": "Failed-attempt count before account lockout.", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / input / properties / maxLengthAdded value: +{ + "description": "Maximum password length; applied only when greater than or equal to minLength.", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / input / properties / maxRepeatedCharsAdded value: +{ + "description": "Reject runs of the same character longer than N (such as aaa).", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / input / properties / mfaRequired / descriptionAdded value: +"State that multi-factor authentication is required." - added
Input schema / properties / input / properties / minLength / descriptionAdded value: +"Minimum password length; required positive integer. Below 12 emits a NIST warning, below 8 a hard-fail warning." - added
Input schema / properties / input / properties / minLength / minimumAdded value: +1 - added
Input schema / properties / input / properties / requireDigit / descriptionAdded value: +"Require at least one 0-9 digit." - added
Input schema / properties / input / properties / requireLowercase / descriptionAdded value: +"Require at least one lowercase a-z character." - added
Input schema / properties / input / properties / requireSymbol / descriptionAdded value: +"Require at least one symbol from the symbol set." - added
Input schema / properties / input / properties / requireUppercase / descriptionAdded value: +"Require at least one uppercase A-Z character." - added
Input schema / properties / input / properties / rotationDaysAdded value: +{ + "description": "Mandatory rotation interval in days; 0 or omitted means no rotation.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / input / properties / sessionTimeoutAdded value: +{ + "description": "Authenticated-session inactivity timeout in minutes.", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / input / properties / symbolSetAdded value: +{ + "description": "Override the symbol set used by the regex and JS validator. Defaults to a standard punctuation set.", + "type": "string" +} - changed
Input schema / properties / input / requiredPrevious value: -[ - "minLength", - "requireUppercase", - "requireLowercase", - "requireDigit", - "requireSymbol", - "disallowCommonPasswords", - "mfaRequired" -]New value: +[ + "minLength" +] - added
Input schema / properties / operation / defaultAdded value: +"generate" - added
Input schema / properties / operation / descriptionAdded value: +"generate builds a policy from the input object; presets ignores input and returns the 8 built-in compliance baselines." - added
Input schema / properties / operation / enumAdded value: +[ + "generate", + "presets" +] - changed
Input schema / requiredPrevious value: -[ - "operation", - "input" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation performed (generate or presets).", + "type": "string" + }, + "result": { + "description": "For generate, the policy artifacts; for presets, a presets array.", + "properties": { + "configSnippets": { + "description": "Platform-specific validator snippets.", + "properties": { + "activeDirectory": { + "description": "Active Directory fine-grained password policy snippet.", + "type": "string" + }, + "htpasswd": { + "description": "Apache htpasswd guidance snippet.", + "type": "string" + }, + "javascript": { + "description": "JavaScript validatePassword function.", + "type": "string" + }, + "k8sValidator": { + "description": "Kubernetes admission validator snippet.", + "type": "string" + }, + "nginx": { + "description": "nginx or Lua validation snippet.", + "type": "string" + }, + "python": { + "description": "Python validation function.", + "type": "string" + } + }, + "type": "object" + }, + "entropy": { + "description": "Worst-case (uniform) entropy estimate for the minimum-length password.", + "properties": { + "breakdownByClass": { + "description": "Per-character-class alphabet sizes contributing to entropy.", + "items": { + "description": "A character-class contribution entry.", + "type": "object" + }, + "type": "array" + }, + "classification": { + "description": "Bucket: weak, adequate, strong, or overkill.", + "type": "string" + }, + "minEntropyBits": { + "description": "Worst-case entropy in bits at minLength.", + "type": "number" + } + }, + "type": "object" + }, + "html": { + "description": "The same policy rendered to HTML.", + "type": "string" + }, + "jsonSchema": { + "description": "A JSON Schema fragment validating a password string.", + "type": "object" + }, + "markdown": { + "description": "The password policy as a Markdown document.", + "type": "string" + }, + "presets": { + "description": "For operation presets: the 8 built-in baseline definitions (id, name, description, input).", + "items": { + "description": "A built-in compliance baseline.", + "type": "object" + }, + "type": "array" + }, + "regex": { + "description": "A single regular expression enforcing the constraints.", + "type": "string" + }, + "warnings": { + "description": "Compliance and security warnings about the chosen constraints.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
security_proxy_parse6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / optionsRemoved value: -{ - "properties": { - "concurrency": { - "type": "integer" - }, - "retryAttempts": { - "type": "integer" - } - }, - "required": [ - "concurrency", - "retryAttempts" - ], - "type": "object" -} - added
Input schema / properties / proxies / descriptionAdded value: +"Newline-separated proxy list. Each non-empty line must match [protocol://][user:pass@]host:port (protocol defaults to http; port 1-65535). Blank lines and lines starting with # are skipped." - added
Input schema / properties / proxies / examplesAdded value: +[ + "http://1.2.3.4:8080\nuser:pass@5.6.7.8:1080" +] - changed
Input schema / requiredPrevious value: -[ - "proxies", - "options" -]New value: +[ + "proxies" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Parsed output payload.", + "properties": { + "error_count": { + "description": "Number of entries in parse_errors.", + "type": "integer" + }, + "parse_errors": { + "description": "One entry per line that failed to parse.", + "items": { + "properties": { + "error": { + "description": "Reason, e.g. \"Invalid proxy format\".", + "type": "string" + }, + "line": { + "description": "1-based line number of the bad entry.", + "type": "integer" + }, + "text": { + "description": "The offending trimmed line text.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "total_lines": { + "description": "Total lines in the input, including blanks and comments.", + "type": "integer" + }, + "valid_count": { + "description": "Number of entries in valid_proxies.", + "type": "integer" + }, + "valid_proxies": { + "description": "Successfully parsed proxies, in input order.", + "items": { + "properties": { + "host": { + "description": "Proxy host or IP.", + "type": "string" + }, + "line_number": { + "description": "1-based line number in the input.", + "type": "integer" + }, + "original": { + "description": "The trimmed source line, as supplied.", + "type": "string" + }, + "password": { + "description": "Auth password if present, else null.", + "type": [ + "string", + "null" + ] + }, + "port": { + "description": "Proxy port (1-65535).", + "type": "integer" + }, + "protocol": { + "description": "Scheme parsed from the line, or \"http\" when omitted.", + "type": "string" + }, + "username": { + "description": "Auth username if present, else null.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on a 200 response.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
security_proxy_test16 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / options / additionalPropertiesAdded value: +false - added
Input schema / properties / options / descriptionAdded value: +"Optional test settings." - added
Input schema / properties / options / properties / concurrency / defaultAdded value: +5 - added
Input schema / properties / options / properties / concurrency / descriptionAdded value: +"Number of proxies tested per chunk. Optional integer 1-20; defaults to 5." - added
Input schema / properties / options / properties / concurrency / maximumAdded value: +20 - added
Input schema / properties / options / properties / concurrency / minimumAdded value: +1 - added
Input schema / properties / options / properties / originalIpAdded value: +{ + "description": "Your real public IP, used to score anonymity and detect IP leakage. Optional; defaults to the server-detected outbound IP.", + "format": "ipv4", + "type": "string" +} - added
Input schema / properties / options / properties / retryAttempts / defaultAdded value: +2 - added
Input schema / properties / options / properties / retryAttempts / descriptionAdded value: +"Reserved retry budget per proxy. Optional integer 0-5; defaults to 2." - added
Input schema / properties / options / properties / retryAttempts / maximumAdded value: +5 - added
Input schema / properties / options / properties / retryAttempts / minimumAdded value: +0 - removed
Input schema / properties / options / requiredRemoved value: -[ - "concurrency", - "retryAttempts" -] - added
Input schema / properties / proxies / descriptionAdded value: +"Newline-separated proxy list. Each non-empty line must match protocol://user:pass@host:port (protocol defaults to http; port 1-65535; auth optional). Blank lines and lines starting with # are skipped. Lines that fail to parse are dropped; a 400 is returned only if no valid proxy remains." - changed
Input schema / requiredPrevious value: -[ - "proxies", - "options" -]New value: +[ + "proxies" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Aggregated batch output.", + "properties": { + "results": { + "description": "One full test record per proxy (same shape as security_proxy_test_single data).", + "items": { + "properties": { + "anonymity": { + "description": "Anonymity level inferred from forwarded headers and IP leakage.", + "enum": [ + "elite", + "anonymous", + "transparent", + "unknown" + ], + "type": "string" + }, + "errors": { + "description": "Error messages collected during testing.", + "items": { + "type": "string" + }, + "type": "array" + }, + "headers": { + "description": "Response headers seen through the proxy.", + "type": "object" + }, + "ip_leak": { + "description": "True if the original IP leaked through the proxy.", + "type": "boolean" + }, + "location": { + "description": "Geolocation of the proxy host, or null.", + "type": [ + "object", + "null" + ] + }, + "outgoing_ip": { + "description": "Public IP the proxy presents to targets. Present when status is working.", + "type": [ + "string", + "null" + ] + }, + "proxy": { + "description": "The parsed proxy that was tested.", + "type": "object" + }, + "speed": { + "description": "HTTP response time in milliseconds, or null if the proxy failed.", + "type": [ + "number", + "null" + ] + }, + "ssl_support": { + "description": "True if an HTTPS request through the proxy succeeded.", + "type": "boolean" + }, + "status": { + "description": "Whether a connection through the proxy succeeded.", + "enum": [ + "working", + "failed" + ], + "type": "string" + }, + "test_details": { + "description": "Raw per-stage diagnostics (http, https, ip_detection).", + "type": "object" + }, + "tested_at": { + "description": "Server timestamp of the test (Y-m-d H:i:s).", + "type": "string" + }, + "total_test_time": { + "description": "Total test duration in milliseconds.", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "statistics": { + "description": "Roll-up across all tested proxies.", + "properties": { + "anonymous": { + "description": "Count rated anonymous.", + "type": "integer" + }, + "average_speed": { + "description": "Mean response time (ms) of working proxies.", + "type": "number" + }, + "countries": { + "description": "Map of country name to proxy count.", + "type": "object" + }, + "elite": { + "description": "Count rated elite anonymity.", + "type": "integer" + }, + "failed": { + "description": "Count with status failed.", + "type": "integer" + }, + "fastest": { + "description": "Lowest response time (ms), or null.", + "type": [ + "number", + "null" + ] + }, + "slowest": { + "description": "Highest response time (ms), or null.", + "type": [ + "number", + "null" + ] + }, + "ssl_support": { + "description": "Count supporting HTTPS.", + "type": "integer" + }, + "total": { + "description": "Number of proxies tested.", + "type": "integer" + }, + "transparent": { + "description": "Count rated transparent.", + "type": "integer" + }, + "working": { + "description": "Count with status working.", + "type": "integer" + } + }, + "type": "object" + }, + "tested_at": { + "description": "Server timestamp of the batch (Y-m-d H:i:s).", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on a 200 response.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
security_proxy_test_single7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / optionsRemoved value: -{ - "properties": { - "concurrency": { - "type": "integer" - }, - "retryAttempts": { - "type": "integer" - } - }, - "required": [ - "concurrency", - "retryAttempts" - ], - "type": "object" -} - added
Input schema / properties / originalIpAdded value: +{ + "description": "Your real public IP, used to score anonymity and detect IP leakage. Optional; defaults to the server-detected client IP when omitted.", + "format": "ipv4", + "type": "string" +} - removed
Input schema / properties / proxiesRemoved value: -{ - "type": "string" -} - added
Input schema / properties / proxyAdded value: +{ + "additionalProperties": false, + "description": "The single proxy to test, as a structured record (run security_proxy_parse to produce this shape from a raw line).", + "properties": { + "host": { + "description": "Proxy hostname or IP address. Required, non-empty.", + "type": "string" + }, + "password": { + "description": "Optional password for proxies that require authentication.", + "type": "string" + }, + "port": { + "description": "Proxy TCP port. Required integer in the range 1-65535.", + "maximum": 65535, + "minimum": 1, + "type": "integer" + }, + "protocol": { + "description": "Proxy protocol. Optional; defaults to http when omitted.", + "enum": [ + "http", + "https", + "socks4", + "socks5" + ], + "type": "string" + }, + "username": { + "description": "Optional username for proxies that require authentication.", + "type": "string" + } + }, + "required": [ + "host", + "port" + ], + "type": "object" +} - changed
Input schema / requiredPrevious value: -[ - "proxies", - "options" -]New value: +[ + "proxy" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Per-proxy test outcome.", + "properties": { + "anonymity": { + "description": "Anonymity level inferred from forwarded headers and IP leakage.", + "enum": [ + "elite", + "anonymous", + "transparent", + "unknown" + ], + "type": "string" + }, + "errors": { + "description": "Error messages collected during testing.", + "items": { + "type": "string" + }, + "type": "array" + }, + "headers": { + "description": "Response headers seen through the proxy.", + "type": "object" + }, + "ip_leak": { + "description": "True if the original IP leaked through the proxy.", + "type": "boolean" + }, + "location": { + "description": "Geolocation of the proxy host, or null.", + "type": [ + "object", + "null" + ] + }, + "outgoing_ip": { + "description": "Public IP the proxy presents to targets. Present when status is working.", + "type": [ + "string", + "null" + ] + }, + "proxy": { + "description": "The parsed proxy that was tested (host, port, optional protocol/username/password).", + "type": "object" + }, + "speed": { + "description": "HTTP response time in milliseconds, or null if the proxy failed.", + "type": [ + "number", + "null" + ] + }, + "ssl_support": { + "description": "True if an HTTPS request through the proxy succeeded.", + "type": "boolean" + }, + "status": { + "description": "Whether a connection through the proxy succeeded.", + "enum": [ + "working", + "failed" + ], + "type": "string" + }, + "test_details": { + "description": "Raw per-stage diagnostics (http, https, ip_detection).", + "type": "object" + }, + "tested_at": { + "description": "Server timestamp of the test (Y-m-d H:i:s).", + "type": "string" + }, + "total_test_time": { + "description": "Total test duration in milliseconds.", + "type": "number" + } + }, + "type": "object" + }, + "success": { + "description": "True when the test ran (a failed proxy connection still returns success true with status failed).", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
security_proxy_test_stream14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / options / additionalPropertiesAdded value: +false - added
Input schema / properties / options / descriptionAdded value: +"Optional test settings." - added
Input schema / properties / options / properties / concurrency / descriptionAdded value: +"Accepted and validated (1-20) but not applied by this streaming endpoint, which tests sequentially; used by security_proxy_test." - added
Input schema / properties / options / properties / concurrency / maximumAdded value: +20 - added
Input schema / properties / options / properties / concurrency / minimumAdded value: +1 - added
Input schema / properties / options / properties / originalIpAdded value: +{ + "description": "Your real public IP, used to score anonymity and detect IP leakage. Defaults to the server-detected client IP if omitted.", + "format": "ipv4", + "type": "string" +} - added
Input schema / properties / options / properties / retryAttempts / descriptionAdded value: +"Accepted and validated (0-5) but not applied by this streaming endpoint; used by security_proxy_test." - added
Input schema / properties / options / properties / retryAttempts / maximumAdded value: +5 - added
Input schema / properties / options / properties / retryAttempts / minimumAdded value: +0 - removed
Input schema / properties / options / requiredRemoved value: -[ - "concurrency", - "retryAttempts" -] - added
Input schema / properties / proxies / descriptionAdded value: +"Newline-separated proxy list. Each non-empty line must match [protocol://][user:pass@]host:port (protocol defaults to http; port 1-65535). Blank lines and lines starting with # are skipped. Lines that fail to parse are dropped before testing." - added
Input schema / properties / proxies / examplesAdded value: +[ + "http://1.2.3.4:8080\nsocks5://user:pass@5.6.7.8:1080" +] - changed
Input schema / requiredPrevious value: -[ - "proxies", - "options" -]New value: +[ + "proxies" +]
- Changed
security_robots_txt_generator19 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / input / additionalPropertiesAdded value: +false - added
Input schema / properties / input / descriptionAdded value: +"Robots.txt definition for operation \"generate\". Requires a non-empty \"groups\" array." - added
Input schema / properties / input / properties / commentAdded value: +{ + "description": "Optional comment block prepended as '#' lines.", + "type": "string" +} - added
Input schema / properties / input / properties / groups / descriptionAdded value: +"Rule groups; each must be an object. A group with no user-agents defaults to '*'." - added
Input schema / properties / input / properties / groups / items / properties / allow / descriptionAdded value: +"Allow paths starting with '/' or '*'; a missing leading slash is auto-prefixed and warned." - added
Input schema / properties / input / properties / groups / items / properties / crawlDelayAdded value: +{ + "description": "Optional non-negative crawl-delay seconds; emitted with a portability warning (Google ignores it).", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / input / properties / groups / items / properties / disallow / descriptionAdded value: +"Disallow paths; an empty string means \"allow everything\" per RFC 9309." - added
Input schema / properties / input / properties / groups / items / properties / userAgents / descriptionAdded value: +"User-agent tokens for the group (e.g. Googlebot, '*'); empty defaults to '*'." - removed
Input schema / properties / input / properties / groups / items / requiredRemoved value: -[ - "userAgents", - "allow", - "disallow" -] - added
Input schema / properties / input / properties / groups / minItemsAdded value: +1 - added
Input schema / properties / input / properties / hostAdded value: +{ + "description": "Optional non-standard Host directive (legacy Yandex).", + "type": "string" +} - added
Input schema / properties / input / properties / sitemaps / descriptionAdded value: +"Optional absolute sitemap URLs; non-absolute values are kept but warned." - changed
Input schema / properties / input / requiredPrevious value: -[ - "groups", - "sitemaps" -]New value: +[ + "groups" +] - added
Input schema / properties / operation / descriptionAdded value: +"Mode to run. 'generate' needs \"input\"; 'parse' needs \"text\"; 'presets' and 'commonUserAgents' take no other fields." - added
Input schema / properties / operation / enumAdded value: +[ + "generate", + "parse", + "presets", + "commonUserAgents" +] - added
Input schema / properties / textAdded value: +{ + "description": "Existing robots.txt text to parse for operation \"parse\".", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "input" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Echo of the operation performed.", + "type": "string" + }, + "result": { + "description": "Payload for the chosen operation. For \"generate\": robotsTxt/warnings/lineCount. For \"parse\": groups/sitemaps/host/comment. For \"presets\" and \"commonUserAgents\" this is instead a JSON array.", + "properties": { + "comment": { + "description": "\"parse\": leading comment block if present.", + "type": "string" + }, + "groups": { + "description": "\"parse\": reconstructed rule groups.", + "items": { + "type": "object" + }, + "type": "array" + }, + "host": { + "description": "\"parse\": Host directive value if present.", + "type": "string" + }, + "lineCount": { + "description": "\"generate\": number of emitted lines.", + "type": "integer" + }, + "robotsTxt": { + "description": "\"generate\": the serialized robots.txt text.", + "type": "string" + }, + "sitemaps": { + "description": "\"parse\": absolute sitemap URLs found.", + "items": { + "type": "string" + }, + "type": "array" + }, + "warnings": { + "description": "\"generate\": severity-tagged validation notes; empty when clean.", + "items": { + "properties": { + "location": { + "description": "Where the warning applies (group/sitemaps/overall).", + "type": "string" + }, + "message": { + "description": "Human-readable warning text.", + "type": "string" + }, + "severity": { + "description": "Warning severity.", + "enum": [ + "info", + "low", + "medium", + "high" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "True when the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
security_totp_qr_generator24 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / account / descriptionAdded value: +"buildUri only. Account label shown in the app (e.g. alice@example.com). Required for buildUri." - added
Input schema / properties / algorithm / defaultAdded value: +"SHA1" - added
Input schema / properties / algorithm / descriptionAdded value: +"buildUri only. HMAC hash. Most apps (notably Google Authenticator) assume SHA1; non-default values trigger a compatibility warning." - added
Input schema / properties / algorithm / enumAdded value: +[ + "SHA1", + "SHA256", + "SHA512" +] - added
Input schema / properties / byteCountAdded value: +{ + "default": 20, + "description": "generateSecret only. Raw random bytes before base32 encoding. RFC 6238 recommends 20 (160 bits) for SHA1.", + "maximum": 128, + "minimum": 10, + "type": "integer" +} - added
Input schema / properties / counterAdded value: +{ + "default": 0, + "description": "buildUri with type hotp only. Initial HOTP counter (RFC 4226). Ignored for totp.", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / digits / defaultAdded value: +6 - added
Input schema / properties / digits / descriptionAdded value: +"buildUri only. Number of code digits. Most apps assume 6." - added
Input schema / properties / digits / enumAdded value: +[ + 6, + 7, + 8 +] - added
Input schema / properties / issuer / descriptionAdded value: +"buildUri only. Organisation/service name shown in the authenticator app (e.g. GitHub). Optional but recommended; omitting it triggers a warning." - added
Input schema / properties / operation / descriptionAdded value: +"Action to perform: buildUri (assemble an otpauth URI from supplied fields), generateSecret (return a fresh random base32 secret), or parseUri (decode an existing otpauth URI)." - added
Input schema / properties / operation / enumAdded value: +[ + "buildUri", + "generateSecret", + "parseUri" +] - added
Input schema / properties / period / defaultAdded value: +30 - added
Input schema / properties / period / descriptionAdded value: +"buildUri with type totp only. Time step in seconds (RFC 6238). Ignored for hotp." - added
Input schema / properties / period / maximumAdded value: +600 - added
Input schema / properties / period / minimumAdded value: +1 - added
Input schema / properties / secret / descriptionAdded value: +"buildUri only. Base32-encoded shared secret (RFC 4648 alphabet A-Z 2-7); whitespace stripped and upper-cased. Required for buildUri. Non-base32 input still builds but is flagged in warnings." - added
Input schema / properties / type / defaultAdded value: +"totp" - added
Input schema / properties / type / descriptionAdded value: +"buildUri only. otpauth scheme: time-based (totp) or counter-based (hotp). Determines whether period or counter applies." - added
Input schema / properties / type / enumAdded value: +[ + "totp", + "hotp" +] - added
Input schema / properties / uriAdded value: +{ + "description": "parseUri only. An existing otpauth:// URI to decode into component fields.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "type", - "issuer", - "account", - "secret", - "algorithm", - "digits", - "period" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Present only on failure: human-readable validation/runtime message.", + "type": "string" + }, + "operation": { + "description": "The operation that was executed (buildUri, generateSecret, or parseUri).", + "type": "string" + }, + "result": { + "description": "Operation payload. buildUri returns uri/type/issuer/account/secret/algorithm/digits/period/counter/warnings. parseUri returns the same fields minus uri and warnings. generateSecret returns secret/byteCount/bits.", + "properties": { + "account": { + "description": "buildUri/parseUri: account label.", + "type": "string" + }, + "algorithm": { + "description": "buildUri/parseUri: HMAC algorithm (SHA1/SHA256/SHA512).", + "type": "string" + }, + "bits": { + "description": "generateSecret: secret strength in bits (byteCount times 8).", + "type": "integer" + }, + "byteCount": { + "description": "generateSecret: number of random bytes generated.", + "type": "integer" + }, + "counter": { + "description": "buildUri/parseUri: HOTP counter, or null for TOTP.", + "type": [ + "integer", + "null" + ] + }, + "digits": { + "description": "buildUri/parseUri: number of code digits.", + "type": "integer" + }, + "issuer": { + "description": "buildUri/parseUri: organisation/service name.", + "type": "string" + }, + "period": { + "description": "buildUri/parseUri: TOTP time step in seconds, or null for HOTP.", + "type": [ + "integer", + "null" + ] + }, + "secret": { + "description": "buildUri/parseUri/generateSecret: base32 shared secret.", + "type": "string" + }, + "type": { + "description": "buildUri/parseUri: totp or hotp.", + "type": "string" + }, + "uri": { + "description": "buildUri: the assembled otpauth:// URI to encode as a QR image.", + "type": "string" + }, + "warnings": { + "description": "buildUri only: app-compatibility advisories (weak secret, missing issuer, non-default algorithm/digits/period).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
seo_hreflang_generator14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / codeAdded value: +{ + "description": "Single BCP 47 tag to validate for operation \"validateCode\" (required for that operation), e.g. zh-Hant-TW.", + "type": "string" +} - added
Input schema / properties / entries / descriptionAdded value: +"Language-variant entries for operation \"generate\" (required, min 1 valid entry). Entries missing hreflang or href are skipped with a warning." - added
Input schema / properties / entries / items / properties / href / descriptionAdded value: +"Absolute URL of this language variant; relative URLs warn (search engines ignore them)." - added
Input schema / properties / entries / items / properties / hreflang / descriptionAdded value: +"BCP 47 tag (language[-script][-region]) or x-default, e.g. en, en-US, zh-Hans-CN. Case-normalized; unknown codes warn." - added
Input schema / properties / format / defaultAdded value: +"html" - added
Input schema / properties / format / descriptionAdded value: +"Output serialization for operation \"generate\". html = <link> tags; sitemap = <xhtml:link> tags; http-header = RFC 8288 Link: lines. Defaults to html." - added
Input schema / properties / format / enumAdded value: +[ + "html", + "sitemap", + "http-header" +] - added
Input schema / properties / includeXDefault / defaultAdded value: +false - added
Input schema / properties / includeXDefault / descriptionAdded value: +"When true, append an x-default entry (using xDefaultHref or the first entry's href) unless one is already present." - added
Input schema / properties / operationAdded value: +{ + "default": "generate", + "description": "\"generate\" builds hreflang tags from \"entries\"; \"validateCode\" checks one \"code\"; \"commonCodes\" lists the curated catalogue. Defaults to generate.", + "enum": [ + "generate", + "validateCode", + "commonCodes" + ], + "type": "string" +} - added
Input schema / properties / xDefaultHref / descriptionAdded value: +"Absolute URL for the appended x-default entry when includeXDefault is true; ignored otherwise. Non-absolute values warn." - changed
Input schema / requiredPrevious value: -[ - "entries", - "format", - "includeXDefault", - "xDefaultHref" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Echo of the operation performed (generate, validateCode, or commonCodes).", + "type": "string" + }, + "result": { + "description": "Operation-specific payload.", + "properties": { + "error": { + "description": "validateCode: human-readable reason when valid is false.", + "type": "string" + }, + "html": { + "description": "generate: <link> tags, or RFC 8288 Link: lines when format=http-header.", + "type": "string" + }, + "normalized": { + "description": "validateCode: canonical casing (lang lowercase, Script Titlecase, REGION uppercase).", + "type": "string" + }, + "parts": { + "description": "validateCode: parsed subtags (present when valid).", + "properties": { + "language": { + "description": "ISO 639-1 language subtag.", + "type": "string" + }, + "region": { + "description": "ISO 3166-1 alpha-2 region subtag, when present.", + "type": "string" + }, + "script": { + "description": "ISO 15924 script subtag, when present.", + "type": "string" + } + }, + "type": "object" + }, + "sitemap": { + "description": "generate: <xhtml:link> tags with a leading xmlns:xhtml hint comment.", + "type": "string" + }, + "valid": { + "description": "validateCode: whether the code is a well-formed, known BCP 47 hreflang tag.", + "type": "boolean" + }, + "warnings": { + "description": "generate: validation/advisory notes (bad codes, relative URLs, duplicates, missing x-default, reciprocity); empty when clean.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "True when the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
seo_keyword_density_checker20 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / minLength / defaultAdded value: +3 - added
Input schema / properties / minLength / descriptionAdded value: +"Minimum token character length to include in rankings; shorter tokens are dropped. Clamped to 1-10." - added
Input schema / properties / minLength / maximumAdded value: +10 - added
Input schema / properties / minLength / minimumAdded value: +1 - added
Input schema / properties / mode / defaultAdded value: +"plain" - added
Input schema / properties / mode / descriptionAdded value: +"Input format. plain analyzes text verbatim; html strips script/style/comments/tags and decodes entities before analysis. Unrecognized values fall back to plain." - added
Input schema / properties / mode / enumAdded value: +[ + "plain", + "html" +] - added
Input schema / properties / operationAdded value: +{ + "default": "analyze", + "description": "Operation to run. Only analyze is supported.", + "enum": [ + "analyze" + ], + "type": "string" +} - added
Input schema / properties / stopwords / defaultAdded value: +"en" - added
Input schema / properties / stopwords / descriptionAdded value: +"Stopword filter for the unigram ranking and (when active) n-grams. en/english uses the built-in English list; none/off/empty disables filtering; an array of strings supplies a custom case-insensitive list. Any other string defaults to the English list." - added
Input schema / properties / stopwords / itemsAdded value: +{ + "type": "string" +} - changed
Input schema / properties / stopwords / typePrevious value: -"string"New value: +[ + "array", + "string" +] - added
Input schema / properties / text / descriptionAdded value: +"Content to analyze: UTF-8 plain text, or an HTML document when mode is html. Must not be blank. Hard cap roughly 5 MB." - added
Input schema / properties / topN / defaultAdded value: +20 - added
Input schema / properties / topN / descriptionAdded value: +"Maximum number of entries returned in each of the unigram, bigram, and trigram tables. Clamped to 1-100." - added
Input schema / properties / topN / maximumAdded value: +100 - added
Input schema / properties / topN / minimumAdded value: +1 - changed
Input schema / requiredPrevious value: -[ - "text", - "mode", - "stopwords", - "minLength", - "topN" -]New value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation performed (analyze).", + "type": "string" + }, + "result": { + "description": "The keyword density analysis.", + "properties": { + "bigrams": { + "description": "Top two-word phrases by frequency, up to topN. Same item shape as unigrams.", + "items": { + "properties": { + "count": { + "description": "Number of occurrences.", + "type": "integer" + }, + "density": { + "description": "Occurrences as a percentage of the density base (rounded to 2 dp).", + "type": "number" + }, + "word": { + "description": "The two-word phrase.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "stats": { + "description": "Document-level statistics for the cleaned text.", + "properties": { + "avgCharsPerWord": { + "description": "Mean characters per token (rounded to 2 dp).", + "type": "number" + }, + "avgWordsPerSentence": { + "description": "Mean tokens per sentence (rounded to 2 dp).", + "type": "number" + }, + "charCount": { + "description": "Total characters in the cleaned text.", + "type": "integer" + }, + "charCountNoSpaces": { + "description": "Characters excluding spaces, tabs, and newlines.", + "type": "integer" + }, + "lexicalDiversity": { + "description": "Unique words divided by total words (0-1, rounded to 4 dp).", + "type": "number" + }, + "paragraphCount": { + "description": "Paragraphs (split on blank lines).", + "type": "integer" + }, + "sentenceCount": { + "description": "Sentences (split on terminal . ! ? punctuation).", + "type": "integer" + }, + "uniqueWords": { + "description": "Count of distinct tokens.", + "type": "integer" + }, + "wordCount": { + "description": "Total tokens (words) found.", + "type": "integer" + } + }, + "type": "object" + }, + "trigrams": { + "description": "Top three-word phrases by frequency, up to topN. Same item shape as unigrams.", + "items": { + "properties": { + "count": { + "description": "Number of occurrences.", + "type": "integer" + }, + "density": { + "description": "Occurrences as a percentage of the density base (rounded to 2 dp).", + "type": "number" + }, + "word": { + "description": "The three-word phrase.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "unigrams": { + "description": "Top single words by frequency (after stopword/minLength filtering), up to topN.", + "items": { + "properties": { + "count": { + "description": "Number of occurrences.", + "type": "integer" + }, + "density": { + "description": "Occurrences as a percentage of filtered tokens (rounded to 2 dp).", + "type": "number" + }, + "word": { + "description": "The word or phrase.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "warnings": { + "description": "Over-optimization and quality notices (e.g. density too high, text too short, repetitive phrases).", + "items": { + "properties": { + "message": { + "description": "Human-readable explanation.", + "type": "string" + }, + "severity": { + "description": "Warning severity.", + "enum": [ + "critical", + "high", + "medium", + "low", + "info" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the analysis succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
seo_meta_tag_generator33 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / authorAdded value: +{ + "description": "Author name for the author meta tag and JSON-LD author Person.", + "type": "string" +} - added
Input schema / properties / canonical / descriptionAdded value: +"Absolute canonical URL for rel=canonical and the og:url fallback. Should include scheme (https://); a missing or relative value adds a warning." - added
Input schema / properties / charsetAdded value: +{ + "default": "UTF-8", + "description": "Character set for the charset meta tag. Defaults to UTF-8 when blank.", + "type": "string" +} - added
Input schema / properties / description / descriptionAdded value: +"Meta description for the description tag, og:description, and twitter:description fallback. Required for the generate operation; blank is rejected. Warns over 160 chars (Google SERP truncation)." - added
Input schema / properties / jsonLd / defaultAdded value: +false - added
Input schema / properties / jsonLd / descriptionAdded value: +"When true, append an inline schema.org WebPage JSON-LD script built from the supplied fields." - added
Input schema / properties / keywordsAdded value: +{ + "description": "Keyword strings joined into one keywords meta tag (blank entries dropped).", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / langAdded value: +{ + "description": "BCP 47 language code emitted as an http-equiv content-language meta and JSON-LD inLanguage.", + "type": "string" +} - added
Input schema / properties / og / additionalPropertiesAdded value: +false - added
Input schema / properties / og / descriptionAdded value: +"Open Graph overrides. og:title and og:description fall back to title/description; og:url falls back to canonical; og:type defaults to website." - added
Input schema / properties / og / properties / descriptionAdded value: +{ + "description": "og:description override (defaults to the meta description).", + "type": "string" +} - added
Input schema / properties / og / properties / image / descriptionAdded value: +"Absolute og:image URL; a relative value adds a warning." - added
Input schema / properties / og / properties / siteNameAdded value: +{ + "description": "og:site_name value.", + "type": "string" +} - added
Input schema / properties / og / properties / titleAdded value: +{ + "description": "og:title override (defaults to the page title).", + "type": "string" +} - added
Input schema / properties / og / properties / type / descriptionAdded value: +"og:type such as website, article, or product; defaults to website and warns on unknown values." - added
Input schema / properties / og / properties / urlAdded value: +{ + "description": "og:url override (defaults to canonical).", + "type": "string" +} - removed
Input schema / properties / og / requiredRemoved value: -[ - "image", - "type" -] - added
Input schema / properties / operationAdded value: +{ + "default": "generate", + "description": "Action to run. generate assembles meta tags from the fields; presets ignores all other fields and returns four example input sets.", + "enum": [ + "generate", + "presets" + ], + "type": "string" +} - added
Input schema / properties / publisherAdded value: +{ + "description": "Publisher name for the publisher meta tag and JSON-LD publisher Organization.", + "type": "string" +} - added
Input schema / properties / robots / descriptionAdded value: +"Comma-separated robots directives (for example index, follow). Tokens are lower-cased and validated against the Google robots vocabulary." - added
Input schema / properties / themeColorAdded value: +{ + "description": "Browser theme-color, a CSS hex or rgb/hsl color. An unrecognized value adds a warning.", + "type": "string" +} - added
Input schema / properties / title / descriptionAdded value: +"Page title for the title tag, og:title, and twitter:title fallback. Required for the generate operation; blank is rejected. Warns over 60 chars (Google SERP truncation)." - added
Input schema / properties / twitter / additionalPropertiesAdded value: +false - added
Input schema / properties / twitter / descriptionAdded value: +"Twitter Card overrides. card auto-selects summary_large_image when an image is present, else summary; twitter:image falls back to og:image." - added
Input schema / properties / twitter / properties / card / descriptionAdded value: +"twitter:card type (summary, summary_large_image, app, or player); unknown values add a warning." - added
Input schema / properties / twitter / properties / creatorAdded value: +{ + "description": "twitter:creator handle; should start with an at-sign.", + "type": "string" +} - added
Input schema / properties / twitter / properties / imageAdded value: +{ + "description": "twitter:image URL (defaults to og:image).", + "type": "string" +} - added
Input schema / properties / twitter / properties / site / descriptionAdded value: +"twitter:site handle; should start with an at-sign." - removed
Input schema / properties / twitter / requiredRemoved value: -[ - "card", - "site" -] - added
Input schema / properties / viewportAdded value: +{ + "description": "Viewport meta content (for example width=device-width, initial-scale=1). Omitted from output when blank.", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "title", - "description", - "canonical", - "robots", - "og", - "twitter", - "jsonLd" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation performed (generate or presets).", + "type": "string" + }, + "result": { + "description": "For generate: the assembled tags, warnings, and lengths. For presets: a presets array of example field-sets.", + "properties": { + "html": { + "description": "The assembled head HTML block, two-space indented, ready to paste inside head.", + "type": "string" + }, + "lengths": { + "description": "Character counts for the key fields.", + "properties": { + "description": { + "description": "Character length of the meta description.", + "type": "integer" + }, + "ogDescription": { + "description": "Character length of the effective og:description.", + "type": "integer" + }, + "ogTitle": { + "description": "Character length of the effective og:title.", + "type": "integer" + }, + "title": { + "description": "Character length of the title.", + "type": "integer" + } + }, + "type": "object" + }, + "warnings": { + "description": "Human-readable advisories about truncation, missing canonical/image, invalid tokens, and handle formatting.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
seo_open_graph_generator20 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / article / descriptionAdded value: +"Read only when type is article. Fields author, publishedTime, modifiedTime, expirationTime, section (strings) and tag (string array)." - removed
Input schema / properties / article / propertiesRemoved value: -{ - "author": { - "type": "string" - }, - "publishedTime": { - "type": "string" - } -} - removed
Input schema / properties / article / requiredRemoved value: -[ - "author", - "publishedTime" -] - added
Input schema / properties / bookAdded value: +{ + "description": "Read only when type is book. Fields author, isbn, releaseDate (strings) and tag (string array).", + "type": "object" +} - added
Input schema / properties / description / descriptionAdded value: +"og:description text. Required for generate. Warns when over 65 chars (Facebook truncates the share card)." - added
Input schema / properties / image / descriptionAdded value: +"og:image URL. Should be an absolute https URL at 1200x630 (1.91 to 1); relative URLs raise a warning." - added
Input schema / properties / localeAdded value: +{ + "description": "og:locale IETF BCP 47 tag such as en_US or pt-BR. Underscore or hyphen accepted; off-pattern values raise a warning.", + "type": "string" +} - added
Input schema / properties / musicAdded value: +{ + "description": "Read only when type starts with music. Fields duration, album, musician (strings).", + "type": "object" +} - added
Input schema / properties / operationAdded value: +{ + "default": "generate", + "description": "generate assembles the meta block (title and description required); presets returns four example input records and ignores all other fields.", + "enum": [ + "generate", + "presets" + ], + "type": "string" +} - added
Input schema / properties / profileAdded value: +{ + "description": "Read only when type is profile. Fields firstName, lastName, username, gender (strings).", + "type": "object" +} - added
Input schema / properties / siteNameAdded value: +{ + "description": "og:site_name brand label. Optional; emitted only when non-empty.", + "type": "string" +} - added
Input schema / properties / title / descriptionAdded value: +"og:title text. Required for generate. Warns when over 60 chars (Facebook truncates the share card)." - added
Input schema / properties / type / defaultAdded value: +"website" - added
Input schema / properties / type / descriptionAdded value: +"og:type. Unknown values still emit but warn and behave as website. Selects which vertical sub-namespace is read." - added
Input schema / properties / type / enumAdded value: +[ + "website", + "article", + "book", + "profile", + "music.song", + "music.album", + "music.playlist", + "music.radio_station", + "video.movie", + "video.episode", + "video.tv_show", + "video.other", + "product" +] - added
Input schema / properties / url / descriptionAdded value: +"og:url canonical permanent URL of the page. Should be absolute with scheme; non-absolute raises a warning." - added
Input schema / properties / videoAdded value: +{ + "description": "Read only when type starts with video. Fields actor, director, writer, duration, releaseDate, series (strings) and tag (string array).", + "type": "object" +} - removed
Input schema / requiredRemoved value: -[ - "title", - "description", - "image", - "url", - "type", - "article" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Echo of the requested operation (generate or presets).", + "type": "string" + }, + "result": { + "description": "For generate: html (the assembled meta-tag block string), warnings (array of advisory strings), and preview (object with title, description, image, siteName, host derived from og url). For presets: a presets array of example input records.", + "type": "object" + }, + "success": { + "description": "True when the operation completed.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
seo_schema_org_generator10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / fields / additionalPropertiesAdded value: +true - added
Input schema / properties / fields / descriptionAdded value: +"Flat record keyed by the chosen type field names (e.g. headline, author, datePublished for Article). Strings, arrays, or nested objects (person with name/url; offer with price/priceCurrency; address; rating; questions; steps; breadcrumbs). Empty values are dropped. Run operation schemas for the per-type field list." - removed
Input schema / properties / fields / propertiesRemoved value: -{ - "author": { - "properties": { - "name": { - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "datePublished": { - "type": "string" - }, - "headline": { - "type": "string" - } -} - removed
Input schema / properties / fields / requiredRemoved value: -[ - "headline", - "author", - "datePublished" -] - added
Input schema / properties / operationAdded value: +{ + "default": "generate", + "description": "generate builds JSON-LD from type + fields; schemas ignores other inputs and returns the field spec for every supported type.", + "enum": [ + "generate", + "schemas" + ], + "type": "string" +} - added
Input schema / properties / type / descriptionAdded value: +"schema.org type to generate. Required when operation is generate; unknown values are rejected." - added
Input schema / properties / type / enumAdded value: +[ + "Article", + "BlogPosting", + "NewsArticle", + "Product", + "LocalBusiness", + "Organization", + "Person", + "Event", + "Recipe", + "FAQPage", + "BreadcrumbList", + "VideoObject", + "Review", + "Course", + "JobPosting", + "HowTo", + "SoftwareApplication" +] - removed
Input schema / requiredRemoved value: -[ - "type", - "fields" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation performed (generate or schemas).", + "type": "string" + }, + "result": { + "description": "For generate: the structured-data payload. For schemas: a schemas array catalog of supported types.", + "properties": { + "html": { + "description": "Ready-to-paste application/ld+json script tag wrapping the JSON-LD.", + "type": "string" + }, + "jsonLd": { + "description": "The schema.org JSON-LD object (@context, @type, and the shaped fields).", + "type": "object" + }, + "jsonLdPretty": { + "description": "Pretty-printed JSON-LD string (2-space indent, unescaped slashes/unicode).", + "type": "string" + }, + "schemas": { + "description": "Only on operation schemas: metadata (id, label, description, required/recommended/optional field specs) for each supported type.", + "items": { + "type": "object" + }, + "type": "array" + }, + "warnings": { + "description": "Human-readable notices for missing required or recommended fields (empty when complete).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the request succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
seo_sitemap_generator17 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / operationAdded value: +{ + "default": "generate", + "description": "\"generate\" builds a <urlset> from \"urls\"; \"generateIndex\" builds a <sitemapindex> from \"sitemaps\". Defaults to generate.", + "enum": [ + "generate", + "generateIndex" + ], + "type": "string" +} - added
Input schema / properties / prettyPrint / defaultAdded value: +true - added
Input schema / properties / prettyPrint / descriptionAdded value: +"When true, indents and newline-separates the XML; false emits a single minified line." - added
Input schema / properties / sitemapsAdded value: +{ + "description": "Child-sitemap entries for operation \"generateIndex\" (required for that operation, min 1 valid entry).", + "items": { + "properties": { + "lastmod": { + "description": "Optional ISO 8601 last-modified date; invalid values warn.", + "type": "string" + }, + "loc": { + "description": "Absolute URL of a child sitemap file.", + "type": "string" + } + }, + "required": [ + "loc" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / urls / descriptionAdded value: +"URL entries for operation \"generate\" (required, min 1 valid entry). Entries missing loc are skipped with a warning." - added
Input schema / properties / urls / items / properties / alternatesAdded value: +{ + "description": "Optional hreflang alternates; triggers the xhtml namespace on <urlset>.", + "items": { + "properties": { + "href": { + "description": "Absolute URL of the alternate-language page.", + "type": "string" + }, + "hreflang": { + "description": "BCP 47 language/region code, e.g. en-US.", + "type": "string" + } + }, + "required": [ + "hreflang", + "href" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / urls / items / properties / changefreq / descriptionAdded value: +"Optional change-frequency hint; other values warn and are dropped." - added
Input schema / properties / urls / items / properties / changefreq / enumAdded value: +[ + "always", + "hourly", + "daily", + "weekly", + "monthly", + "yearly", + "never" +] - added
Input schema / properties / urls / items / properties / lastmod / descriptionAdded value: +"Optional ISO 8601 date or datetime (e.g. 2024-05-27 or 2024-05-27T13:45:00Z); invalid values warn." - added
Input schema / properties / urls / items / properties / loc / descriptionAdded value: +"Absolute URL. Max 2048 chars (over-length warns, not rejected)." - added
Input schema / properties / urls / items / properties / priority / descriptionAdded value: +"Optional crawl priority 0.0-1.0, serialized to one decimal; out-of-range warns and is dropped." - added
Input schema / properties / urls / items / properties / priority / maximumAdded value: +1 - added
Input schema / properties / urls / items / properties / priority / minimumAdded value: +0 - changed
Input schema / properties / urls / items / requiredPrevious value: -[ - "loc", - "lastmod", - "changefreq", - "priority" -]New value: +[ + "loc" +] - changed
Input schema / requiredPrevious value: -[ - "urls", - "prettyPrint" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "Echo of the operation performed (generate or generateIndex).", + "type": "string" + }, + "result": { + "description": "Generation payload for the chosen operation.", + "properties": { + "byteSize": { + "description": "UTF-8 byte size of the XML as a crawler sees it on disk.", + "type": "integer" + }, + "sitemapCount": { + "description": "Number of <sitemap> entries emitted (generateIndex operation).", + "type": "integer" + }, + "urlCount": { + "description": "Number of <url> entries emitted (generate operation).", + "type": "integer" + }, + "warnings": { + "description": "Per-entry validation notes and protocol-limit breaches; empty when clean.", + "items": { + "type": "string" + }, + "type": "array" + }, + "xml": { + "description": "The serialized sitemap XML document.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "True when generation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
seo_title_description_length_checker11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / brand / descriptionAdded value: +"Optional brand name. If supplied and it gets truncated out of the visible title, a suggestion advises moving it to the front." - added
Input schema / properties / brandSuffix / descriptionAdded value: +"Optional trailing brand suffix (for example a pipe then Acme). If the title ends with it, the tool flags how many chars it consumes." - added
Input schema / properties / description / descriptionAdded value: +"The meta description text to check. Required and must not be blank. Max 10000 characters." - added
Input schema / properties / device / defaultAdded value: +"desktop" - added
Input schema / properties / device / descriptionAdded value: +"Which SERP layout to measure against. Mobile uses narrower pixel limits. Any value other than mobile is treated as desktop." - added
Input schema / properties / device / enumAdded value: +[ + "desktop", + "mobile" +] - added
Input schema / properties / operationAdded value: +{ + "default": "analyze", + "description": "Operation to run. Only analyze is supported; omit to default to it.", + "enum": [ + "analyze" + ], + "type": "string" +} - added
Input schema / properties / title / descriptionAdded value: +"The HTML title tag text to check. Required and must not be blank. Max 10000 characters." - changed
Input schema / requiredPrevious value: -[ - "title", - "description", - "brand", - "brandSuffix", - "device" -]New value: +[ + "title", + "description" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "operation": { + "description": "The operation performed (always analyze).", + "type": "string" + }, + "result": { + "description": "The analysis payload.", + "properties": { + "description": { + "description": "Length/pixel analysis for the description field (same shape as title).", + "properties": { + "charLength": { + "description": "Character count of the description.", + "type": "integer" + }, + "pixelLimit": { + "description": "Google display pixel limit for this field and device.", + "type": "integer" + }, + "pixelWidth": { + "description": "Estimated rendered width in pixels.", + "type": "integer" + }, + "score": { + "description": "A 0-100 quality score for this field.", + "type": "integer" + }, + "text": { + "description": "The submitted description text.", + "type": "string" + }, + "truncated": { + "description": "Whether the text exceeds the pixel limit.", + "type": "boolean" + }, + "truncatedText": { + "description": "Visible portion before truncation (no ellipsis).", + "type": "string" + }, + "truncatedTextWithEllipsis": { + "description": "Visible portion with a trailing ellipsis if truncated.", + "type": "string" + }, + "truncationPoint": { + "description": "Character index where Google likely cuts the snippet.", + "type": "integer" + }, + "warnings": { + "description": "Field-specific warnings.", + "items": { + "properties": { + "message": { + "description": "Human-readable warning text.", + "type": "string" + }, + "severity": { + "description": "Warning severity (critical, high, medium, low, or info).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "withinLimits": { + "description": "Whether the text fits recommended length and is not truncated.", + "type": "boolean" + }, + "wordCount": { + "description": "Whitespace-delimited word count.", + "type": "integer" + } + }, + "type": "object" + }, + "device": { + "description": "The SERP layout analyzed (desktop or mobile).", + "type": "string" + }, + "suggestions": { + "description": "Cross-field improvement suggestions.", + "items": { + "properties": { + "field": { + "description": "Target field (title, description, or general).", + "type": "string" + }, + "message": { + "description": "Human-readable suggestion text.", + "type": "string" + }, + "severity": { + "description": "Suggestion severity (critical, high, medium, low, or info).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "title": { + "description": "Length/pixel analysis for the title field.", + "properties": { + "charLength": { + "description": "Character count of the title.", + "type": "integer" + }, + "pixelLimit": { + "description": "Google display pixel limit for this field and device.", + "type": "integer" + }, + "pixelWidth": { + "description": "Estimated rendered width in pixels.", + "type": "integer" + }, + "score": { + "description": "A 0-100 quality score for this field.", + "type": "integer" + }, + "text": { + "description": "The submitted title text.", + "type": "string" + }, + "truncated": { + "description": "Whether the text exceeds the pixel limit.", + "type": "boolean" + }, + "truncatedText": { + "description": "Visible portion before truncation (no ellipsis).", + "type": "string" + }, + "truncatedTextWithEllipsis": { + "description": "Visible portion with a trailing ellipsis if truncated.", + "type": "string" + }, + "truncationPoint": { + "description": "Character index where Google likely cuts the snippet.", + "type": "integer" + }, + "warnings": { + "description": "Field-specific warnings.", + "items": { + "properties": { + "message": { + "description": "Human-readable warning text.", + "type": "string" + }, + "severity": { + "description": "Warning severity (critical, high, medium, low, or info).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "withinLimits": { + "description": "Whether the text fits recommended length and is not truncated.", + "type": "boolean" + }, + "wordCount": { + "description": "Whitespace-delimited word count.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the analysis succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_add_line_numbers4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "customFormat": { + "default": "{line}: {text}", + "description": "Template used when format is custom; {line} is replaced by the number and {text} by the line content.", + "type": "string" + }, + "format": { + "default": "simple", + "description": "Output style. simple and padded emit \"<number>: <line>\"; padded zero-pads the number; custom uses the customFormat template.", + "enum": [ + "simple", + "padded", + "custom" + ], + "type": "string" + }, + "increment": { + "default": 1, + "description": "Amount added per numbered line. Values below 1 are clamped to 1.", + "minimum": 1, + "type": "integer" + }, + "padding": { + "default": 0, + "description": "Zero-pad width when format is padded; falls back to 3 when 0. Ignored for other formats.", + "maximum": 20, + "minimum": 0, + "type": "integer" + }, + "skipEmptyLines": { + "default": false, + "description": "When true, blank/whitespace-only lines are kept as-is, not numbered, and counted as skipped.", + "type": "boolean" + }, + "startNumber": { + "default": 1, + "description": "First line number. Values below 1 are clamped to 1.", + "minimum": 1, + "type": "integer" + }, + "text": { + "description": "Multi-line text to number; split on newline (\\n).", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "The effective settings applied after clamping/normalization.", + "properties": { + "customFormat": { + "description": "Effective custom template.", + "type": "string" + }, + "format": { + "description": "Effective format.", + "type": "string" + }, + "increment": { + "description": "Effective increment.", + "type": "integer" + }, + "padding": { + "description": "Effective pad width.", + "type": "integer" + }, + "skipEmptyLines": { + "description": "Effective skip-empty-lines flag.", + "type": "boolean" + }, + "startNumber": { + "description": "Effective starting number.", + "type": "integer" + } + }, + "type": "object" + }, + "result": { + "description": "The numbered text.", + "type": "string" + }, + "stats": { + "description": "Counts for the input and output plus numbering summary.", + "properties": { + "numbering": { + "properties": { + "finalNumber": { + "description": "Last number assigned.", + "type": "integer" + }, + "format": { + "description": "Effective format used.", + "type": "string" + }, + "increment": { + "description": "Effective increment.", + "type": "integer" + }, + "startNumber": { + "description": "Effective starting number.", + "type": "integer" + } + }, + "type": "object" + }, + "original": { + "properties": { + "characters": { + "description": "Byte length of the input.", + "type": "integer" + }, + "emptyLines": { + "description": "Blank/whitespace-only line count of the input.", + "type": "integer" + }, + "lines": { + "description": "Line count of the input.", + "type": "integer" + }, + "words": { + "description": "Alphabetic word count of the input.", + "type": "integer" + } + }, + "type": "object" + }, + "result": { + "properties": { + "characters": { + "description": "Byte length of the result.", + "type": "integer" + }, + "lines": { + "description": "Line count of the result.", + "type": "integer" + }, + "numberedLines": { + "description": "Number of lines that received a number.", + "type": "integer" + }, + "skippedLines": { + "description": "Number of blank lines skipped when skipEmptyLines is true.", + "type": "integer" + }, + "words": { + "description": "Alphabetic word count of the result.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on success.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_add_prefix_suffix4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "prefix": { + "default": "", + "description": "String prepended to each target element. Empty string adds no prefix.", + "type": "string" + }, + "skipEmpty": { + "default": true, + "description": "When true, blank lines or words are left untouched. Ignored for the characters target.", + "type": "boolean" + }, + "suffix": { + "default": "", + "description": "String appended to each target element. Empty string adds no suffix.", + "type": "string" + }, + "targetType": { + "default": "lines", + "description": "Granularity of the affix. lines wraps each newline-separated line, words wraps each whitespace-separated word (whitespace preserved), characters wraps each character. Any other value returns the text unchanged.", + "enum": [ + "lines", + "words", + "characters" + ], + "type": "string" + }, + "text": { + "description": "Text to transform. Must not be blank; a blank value returns a 400 error.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "The effective options after defaults were applied.", + "properties": { + "prefix": { + "description": "The prefix that was used.", + "type": "string" + }, + "skipEmpty": { + "description": "Whether empty elements were skipped.", + "type": "boolean" + }, + "suffix": { + "description": "The suffix that was used.", + "type": "string" + }, + "targetType": { + "description": "The target granularity that was used.", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "description": "The transformed text with prefixes and/or suffixes applied.", + "type": "string" + }, + "stats": { + "description": "Before and after counts plus a record of what changed.", + "properties": { + "changes": { + "description": "Summary of which affixes and options were applied.", + "properties": { + "prefix_added": { + "description": "Whether a non-empty prefix was applied.", + "type": "boolean" + }, + "skip_empty": { + "description": "Whether empty elements were skipped.", + "type": "boolean" + }, + "suffix_added": { + "description": "Whether a non-empty suffix was applied.", + "type": "boolean" + }, + "target_type": { + "description": "The granularity that was applied.", + "type": "string" + } + }, + "type": "object" + }, + "original": { + "description": "Counts for the input text.", + "properties": { + "characters": { + "description": "Character count of the input (same as length).", + "type": "integer" + }, + "length": { + "description": "Total character count of the input.", + "type": "integer" + }, + "lines": { + "description": "Newline-separated line count of the input.", + "type": "integer" + }, + "words": { + "description": "Whitespace-separated word count of the input.", + "type": "integer" + } + }, + "type": "object" + }, + "result": { + "description": "Counts for the transformed output.", + "properties": { + "characters": { + "description": "Character count of the output (same as length).", + "type": "integer" + }, + "length": { + "description": "Total character count of the output.", + "type": "integer" + }, + "lines": { + "description": "Newline-separated line count of the output.", + "type": "integer" + }, + "words": { + "description": "Whitespace-separated word count of the output.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the transformation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_anagram_generator4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "caseSensitive": { + "default": false, + "description": "When false the cleaned text is lowercased before permuting; when true case is preserved.", + "type": "boolean" + }, + "includeOriginal": { + "default": false, + "description": "When true the original (unshuffled) arrangement may appear in results; when false it is excluded.", + "type": "boolean" + }, + "maxResults": { + "default": 50, + "description": "Maximum number of anagrams to return. Clamped into 1-1000.", + "maximum": 1000, + "minimum": 1, + "type": "integer" + }, + "minLength": { + "default": 3, + "description": "Minimum length an anagram must have to be included; also the minimum cleaned-text length (shorter input is rejected with 400). Clamped into 1-50.", + "maximum": 50, + "minimum": 1, + "type": "integer" + }, + "sortBy": { + "default": "alphabetical", + "description": "Ordering of the returned anagrams. length sorts longest-first; any other value sorts alphabetically.", + "enum": [ + "alphabetical", + "length" + ], + "type": "string" + }, + "text": { + "description": "Source text to rearrange; cleaned to letters/digits before permuting. Required and non-empty.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "The effective parameters after clamping/normalization.", + "properties": { + "caseSensitive": { + "description": "Effective case-sensitivity flag.", + "type": "boolean" + }, + "includeOriginal": { + "description": "Effective include-original flag.", + "type": "boolean" + }, + "maxResults": { + "description": "Effective maximum result count.", + "type": "integer" + }, + "minLength": { + "description": "Effective minimum length.", + "type": "integer" + }, + "sortBy": { + "description": "Effective sort order.", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "description": "Anagram results and derived statistics.", + "properties": { + "anagrams": { + "description": "The generated anagrams after filtering and sorting.", + "items": { + "properties": { + "anagram": { + "description": "One letter rearrangement of the cleaned text.", + "type": "string" + }, + "isOriginal": { + "description": "True if this arrangement equals the original cleaned text.", + "type": "boolean" + }, + "length": { + "description": "Character length of this anagram.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "characterFrequency": { + "additionalProperties": { + "type": "integer" + }, + "description": "Map of each cleaned-text character to its occurrence count, ordered by descending frequency.", + "type": "object" + }, + "statistics": { + "description": "Summary counts for the input and the generated set.", + "properties": { + "averageLength": { + "description": "Mean length of the returned anagrams, rounded to one decimal.", + "type": "number" + }, + "charactersRemoved": { + "description": "Number of characters stripped during cleaning.", + "type": "integer" + }, + "cleanedLength": { + "description": "Character length of the cleaned text.", + "type": "integer" + }, + "cleanedText": { + "description": "Input after removing non-letter/digit characters and case-folding.", + "type": "string" + }, + "originalLength": { + "description": "Character length of the raw input.", + "type": "integer" + }, + "originalText": { + "description": "The raw input text as supplied.", + "type": "string" + }, + "totalAnagrams": { + "description": "Number of anagrams returned.", + "type": "integer" + }, + "uniqueLetters": { + "description": "Count of distinct characters in the cleaned text.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on success.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_ascii_table4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "extended": { + "default": false, + "description": "When true, include extended ASCII (128-255); otherwise only 0-127.", + "type": "boolean" + }, + "format": { + "default": "standard", + "description": "Output detail: standard omits HTML entities; html adds an html_entity field per row.", + "enum": [ + "standard", + "html" + ], + "type": "string" + } +} - added
Input schema / requiredAdded value: +[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "meta": { + "properties": { + "extended": { + "description": "Whether extended ASCII was included.", + "type": "boolean" + }, + "extendedRange": { + "description": "128-255 when extended, else null.", + "type": [ + "string", + "null" + ] + }, + "format": { + "description": "Echoed format (standard or html).", + "type": "string" + }, + "standardRange": { + "description": "Always 0-127.", + "type": "string" + }, + "totalCharacters": { + "description": "Row count (128 standard, 256 extended).", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on success.", + "type": "boolean" + }, + "table": { + "description": "One entry per character code in range.", + "items": { + "properties": { + "binary": { + "description": "Eight-bit binary value.", + "type": "string" + }, + "category": { + "description": "One of control, space, digit, uppercase, lowercase, punctuation, extended, other.", + "type": "string" + }, + "char": { + "description": "Printable glyph, or control-code mnemonic (e.g. NUL, TAB) for non-printables.", + "type": "string" + }, + "decimal": { + "description": "Decimal code point (0-255).", + "type": "integer" + }, + "description": { + "description": "Human description (e.g. Line feed, Printable character).", + "type": "string" + }, + "hex": { + "description": "Two-digit uppercase hexadecimal value.", + "type": "string" + }, + "html_entity": { + "description": "HTML entity or null; present only when format is html.", + "type": [ + "string", + "null" + ] + }, + "octal": { + "description": "Three-digit octal value.", + "type": "string" + }, + "printable": { + "description": "True for codes 32-126.", + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
text_ascii_table_post8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / extended / defaultAdded value: +false - added
Input schema / properties / extended / descriptionAdded value: +"When true, include extended ASCII (128-255); otherwise only 0-127." - added
Input schema / properties / format / defaultAdded value: +"standard" - added
Input schema / properties / format / descriptionAdded value: +"Output detail: standard omits HTML entities; html adds an html_entity field per row." - added
Input schema / properties / format / enumAdded value: +[ + "standard", + "html" +] - changed
Input schema / requiredPrevious value: -[ - "format", - "extended" -]New value: +[] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "meta": { + "properties": { + "extended": { + "description": "Whether extended ASCII was included.", + "type": "boolean" + }, + "extendedRange": { + "description": "128-255 when extended, else null.", + "type": [ + "string", + "null" + ] + }, + "format": { + "description": "Echoed format (standard or html).", + "type": "string" + }, + "standardRange": { + "description": "Always 0-127.", + "type": "string" + }, + "totalCharacters": { + "description": "Row count (128 standard, 256 extended).", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on success.", + "type": "boolean" + }, + "table": { + "description": "One entry per character code in range.", + "items": { + "properties": { + "binary": { + "description": "Eight-bit binary value.", + "type": "string" + }, + "category": { + "description": "One of control, space, digit, uppercase, lowercase, punctuation, extended, other.", + "type": "string" + }, + "char": { + "description": "Printable glyph, or control-code mnemonic (e.g. NUL, TAB) for non-printables.", + "type": "string" + }, + "decimal": { + "description": "Decimal code point (0-255).", + "type": "integer" + }, + "description": { + "description": "Human description (e.g. Line feed, Printable character).", + "type": "string" + }, + "hex": { + "description": "Two-digit uppercase hexadecimal value.", + "type": "string" + }, + "html_entity": { + "description": "HTML entity or null; present only when format is html.", + "type": [ + "string", + "null" + ] + }, + "octal": { + "description": "Three-digit octal value.", + "type": "string" + }, + "printable": { + "description": "True for codes 32-126.", + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
text_ascii_text4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "font": { + "default": "block", + "description": "Font face. block is 6 rows tall using hash characters; small is 3 rows tall using Unicode block glyphs. Unknown values fall back to block.", + "enum": [ + "block", + "small" + ], + "type": "string" + }, + "text": { + "description": "Text to render as a banner. Required and non-blank; maximum 50 characters. Uppercased before rendering.", + "maxLength": 50, + "type": "string" + }, + "width": { + "default": 80, + "description": "Reported target line width in characters; clamped to the range 20-200. Echoed in options and does not wrap or truncate the banner.", + "maximum": 200, + "minimum": 20, + "type": "integer" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "Effective options after defaults and clamping.", + "properties": { + "font": { + "description": "The font actually used after fallback.", + "type": "string" + }, + "supportedFonts": { + "description": "Font names the generator supports.", + "items": { + "type": "string" + }, + "type": "array" + }, + "width": { + "description": "The clamped width value.", + "type": "integer" + } + }, + "type": "object" + }, + "result": { + "description": "The rendered ASCII banner as newline-joined rows.", + "type": "string" + }, + "stats": { + "description": "Size metrics for the input and the rendered banner.", + "properties": { + "original": { + "description": "Metrics for the submitted text.", + "properties": { + "characters": { + "description": "Byte length of the submitted text (same as length).", + "type": "integer" + }, + "length": { + "description": "Byte length of the submitted text.", + "type": "integer" + }, + "text": { + "description": "The submitted text, echoed back.", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "description": "Metrics for the rendered banner.", + "properties": { + "height": { + "description": "Number of output rows (same as lines).", + "type": "integer" + }, + "lines": { + "description": "Number of output rows.", + "type": "integer" + }, + "maxWidth": { + "description": "Byte length of the widest output row.", + "type": "integer" + }, + "totalCharacters": { + "description": "Total byte length of the rendered banner.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Whether generation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_bash_escaper10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / mode / defaultAdded value: +"single" - added
Input schema / properties / mode / descriptionAdded value: +"Bash quoting style. single='...' literal (safest); double=\"...\" preserves $ and ` interpolation while escaping \\ \" $ `; backslash prefixes each metacharacter with a backslash and adds no quotes; ansi-c=$'...' uses C-style and octal escapes for control characters." - added
Input schema / properties / mode / enumAdded value: +[ + "single", + "double", + "backslash", + "ansi-c" +] - added
Input schema / properties / reverse / defaultAdded value: +false - added
Input schema / properties / reverse / descriptionAdded value: +"When false (default) escape the text; when true reverse the chosen mode to recover the original string." - added
Input schema / properties / text / descriptionAdded value: +"The text to escape, or the already-escaped text to unescape when reverse is true. An empty string is allowed." - added
Input schema / properties / text / examplesAdded value: +[ + "it's a $TEST" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "mode", - "reverse" -]New value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "input": { + "description": "The original text, echoed back.", + "type": "string" + }, + "inputLength": { + "description": "Character length of the input text.", + "type": "integer" + }, + "mode": { + "description": "The effective quoting mode used (single, double, backslash, or ansi-c).", + "type": "string" + }, + "outputLength": { + "description": "Character length of the result string.", + "type": "integer" + }, + "result": { + "description": "The escaped or unescaped output string.", + "type": "string" + }, + "reverse": { + "description": "Whether the request unescaped (true) or escaped (false).", + "type": "boolean" + }, + "success": { + "description": "True when the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_case_converter4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "caseType": { + "default": "upper", + "description": "Which case style to apply. Unknown values return the text unchanged.", + "enum": [ + "upper", + "lower", + "title", + "sentence", + "capitalize", + "camelCase", + "PascalCase", + "snake_case", + "SCREAMING_SNAKE_CASE", + "kebab-case", + "SCREAMING-KEBAB-CASE", + "dot.case", + "path/case", + "alternating", + "reverse" + ], + "type": "string" + }, + "text": { + "description": "The text to convert. May be empty, which returns an empty result.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "caseType": { + "description": "The case style that was applied, echoed back.", + "type": "string" + }, + "result": { + "description": "The case-converted output text.", + "type": "string" + }, + "stats": { + "description": "Text statistics for the original and converted text.", + "properties": { + "converted": { + "description": "Statistics for the converted output text.", + "properties": { + "characters": { + "description": "Unicode code point count.", + "type": "integer" + }, + "length": { + "description": "Byte length (UTF-8 encoded).", + "type": "integer" + }, + "lines": { + "description": "Number of newline-separated lines.", + "type": "integer" + }, + "words": { + "description": "Count of alphabetic word runs.", + "type": "integer" + } + }, + "type": "object" + }, + "original": { + "description": "Statistics for the original input text.", + "properties": { + "characters": { + "description": "Unicode code point count.", + "type": "integer" + }, + "length": { + "description": "Byte length (UTF-8 encoded).", + "type": "integer" + }, + "lines": { + "description": "Number of newline-separated lines.", + "type": "integer" + }, + "words": { + "description": "Count of alphabetic word runs.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on a 200 response.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_counter3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / text / descriptionAdded value: +"The text to count. May be empty; an empty string yields zero counts. Counting is Unicode code-point based; lines split on newlines, sentences split on runs of . ! ?, paragraphs split on blank lines." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "readingTime": { + "description": "Estimated reading time strings (e.g. 30 sec, 2 min).", + "properties": { + "silent": { + "description": "Silent reading time at 225 wpm.", + "type": "string" + }, + "slow": { + "description": "Slow reading time at 100 wpm.", + "type": "string" + }, + "speaking": { + "description": "Speaking time at 150 wpm.", + "type": "string" + } + }, + "type": "object" + }, + "stats": { + "description": "Core counts and averages.", + "properties": { + "avgCharsPerWord": { + "description": "Mean non-space characters per word, rounded to 1 decimal; 0 when no words.", + "type": "number" + }, + "avgWordsPerSentence": { + "description": "Mean words per sentence, rounded to 1 decimal; 0 when no sentences.", + "type": "number" + }, + "characters": { + "description": "Total character count including whitespace.", + "type": "integer" + }, + "charactersNoSpaces": { + "description": "Character count excluding all whitespace.", + "type": "integer" + }, + "lines": { + "description": "Line count (split on newlines); 0 for empty input.", + "type": "integer" + }, + "paragraphs": { + "description": "Non-empty paragraph count (blocks split on blank lines).", + "type": "integer" + }, + "sentences": { + "description": "Sentence count (split on . ! ? runs).", + "type": "integer" + }, + "words": { + "description": "Word count (whitespace-separated tokens).", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "True when counting succeeded.", + "type": "boolean" + }, + "topCharacters": { + "additionalProperties": { + "type": "integer" + }, + "description": "Map of the up-to-10 most frequent a-z/space characters to their counts. Empty object when the text has 10 or fewer words.", + "type": "object" + } + }, + "type": "object" +}
- Changed
text_diff4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "diffType": { + "default": "unified", + "description": "Output shape of the diff segments; any other value falls back to unified.", + "enum": [ + "unified", + "side-by-side", + "inline" + ], + "type": "string" + }, + "ignoreCase": { + "default": false, + "description": "Lowercase both texts before comparing so case differences are not reported.", + "type": "boolean" + }, + "ignoreWhitespace": { + "default": false, + "description": "Trim and collapse runs of whitespace before comparing so spacing differences are not reported.", + "type": "boolean" + }, + "text1": { + "default": "", + "description": "First (original/left) text; compared line by line against text2.", + "type": "string" + }, + "text2": { + "default": "", + "description": "Second (modified/right) text; differences are reported relative to text1.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text1", + "text2" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "diff": { + "description": "Ordered diff segments; field set varies by diffType (unified adds prefix/lineNumber/text, side-by-side adds line1/line2/text1/text2, inline adds text).", + "items": { + "type": "object" + }, + "type": "array" + }, + "stats": { + "description": "Size metrics for each input and a change tally.", + "properties": { + "changes": { + "description": "Tally of differing lines.", + "properties": { + "added": { + "description": "Lines present only in text2.", + "type": "integer" + }, + "modified": { + "description": "Always 0 (reserved; segments are added/removed/equal only).", + "type": "integer" + }, + "removed": { + "description": "Lines present only in text1.", + "type": "integer" + } + }, + "type": "object" + }, + "text1": { + "description": "Metrics for text1.", + "properties": { + "characters": { + "description": "Character length of text1.", + "type": "integer" + }, + "lines": { + "description": "Line count of text1.", + "type": "integer" + }, + "words": { + "description": "Word count of text1.", + "type": "integer" + } + }, + "type": "object" + }, + "text2": { + "description": "Metrics for text2.", + "properties": { + "characters": { + "description": "Character length of text2.", + "type": "integer" + }, + "lines": { + "description": "Line count of text2.", + "type": "integer" + }, + "words": { + "description": "Word count of text2.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on success.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_duplicate_line_remover3 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "caseSensitive": { + "default": false, + "description": "When true, lines differing only in letter case are kept as distinct; when false (default), comparison is case-insensitive.", + "type": "boolean" + }, + "keepEmptyLines": { + "default": false, + "description": "When true, blank lines are preserved and deduplicated; when false (default), all empty lines are dropped.", + "type": "boolean" + }, + "sortResults": { + "default": false, + "description": "When true, surviving unique lines are sorted alphabetically (case-aware per caseSensitive); when false (default), original order is preserved.", + "type": "boolean" + }, + "text": { + "description": "Multi-line text to deduplicate, split on newline. Blank input returns empty output with zeroed stats.", + "type": "string" + }, + "trimWhitespace": { + "default": true, + "description": "When true (default), leading/trailing whitespace is stripped before comparing and in output; when false, whitespace is significant.", + "type": "boolean" + } +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "duplicateAnalysis": { + "description": "Up to 10 most-repeated lines, sorted by descending count.", + "items": { + "properties": { + "count": { + "description": "How many times this line appeared in the input.", + "type": "integer" + }, + "line": { + "description": "The repeated line text (as displayed after trimming).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "options": { + "description": "The effective options after defaults were applied.", + "properties": { + "caseSensitive": { + "description": "Effective caseSensitive value.", + "type": "boolean" + }, + "keepEmptyLines": { + "description": "Effective keepEmptyLines value.", + "type": "boolean" + }, + "sortResults": { + "description": "Effective sortResults value.", + "type": "boolean" + }, + "trimWhitespace": { + "description": "Effective trimWhitespace value.", + "type": "boolean" + } + }, + "type": "object" + }, + "result": { + "description": "The deduplicated text, unique lines joined by newline.", + "type": "string" + }, + "stats": { + "description": "Before/after line counts and reduction metric.", + "properties": { + "duplicatesRemoved": { + "description": "Count of lines removed (originalLines minus uniqueLines).", + "type": "integer" + }, + "originalLines": { + "description": "Number of lines in the input before deduplication.", + "type": "integer" + }, + "reductionPercentage": { + "description": "Percentage of lines removed, rounded to a whole number.", + "type": "integer" + }, + "uniqueLines": { + "description": "Number of unique lines kept in the output.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether deduplication succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_duplicate_word_remover4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "caseSensitive": { + "default": false, + "description": "When true, Cat and cat are treated as different words; when false, comparison is case-insensitive.", + "type": "boolean" + }, + "outputFormat": { + "default": "spaces", + "description": "How to join the unique words in the output: spaces joins with single spaces, lines joins with newlines, commas joins with a comma and space.", + "enum": [ + "spaces", + "lines", + "commas" + ], + "type": "string" + }, + "removePunctuation": { + "default": true, + "description": "When true, punctuation is stripped before comparing words so cat. and cat match.", + "type": "boolean" + }, + "sortResults": { + "default": false, + "description": "When true, the surviving unique words are sorted alphabetically; when false, original order is preserved.", + "type": "boolean" + }, + "text": { + "description": "The text to deduplicate. Split into words on any run of whitespace.", + "examples": [ + "the cat the dog the cat" + ], + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "duplicateAnalysis": { + "description": "Up to 15 most-repeated words, sorted by count descending.", + "items": { + "properties": { + "count": { + "description": "How many times the word occurred in the input.", + "type": "integer" + }, + "word": { + "description": "The repeated word as it first appeared.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "options": { + "description": "The effective options applied (caseSensitive, removePunctuation, sortResults, outputFormat).", + "type": "object" + }, + "result": { + "description": "The deduplicated output text joined per outputFormat.", + "type": "string" + }, + "stats": { + "description": "Before/after word counts.", + "properties": { + "duplicatesRemoved": { + "description": "Number of duplicate words removed.", + "type": "integer" + }, + "originalWords": { + "description": "Number of words in the input.", + "type": "integer" + }, + "reductionPercentage": { + "description": "Percent of words removed, rounded to a whole number.", + "type": "integer" + }, + "uniqueWords": { + "description": "Number of words kept after deduplication.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether deduplication succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_extract_emails19 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / contextLength / defaultAdded value: +30 - added
Input schema / properties / contextLength / descriptionAdded value: +"Characters of context to capture on each side of a match when includeContext is true (clamped to the 10-200 range)." - added
Input schema / properties / contextLength / maximumAdded value: +200 - added
Input schema / properties / contextLength / minimumAdded value: +10 - added
Input schema / properties / extractDomains / defaultAdded value: +false - added
Input schema / properties / extractDomains / descriptionAdded value: +"Also return a deduplicated list of the domains that appear in the matched addresses." - added
Input schema / properties / extractionMode / defaultAdded value: +"standard" - added
Input schema / properties / extractionMode / descriptionAdded value: +"Regex strictness. standard is a balanced pattern, strict requires well-formed local and domain parts, permissive matches the widest RFC-style character set." - added
Input schema / properties / extractionMode / enumAdded value: +[ + "standard", + "strict", + "permissive" +] - added
Input schema / properties / includeContext / defaultAdded value: +false - added
Input schema / properties / includeContext / descriptionAdded value: +"Include a snippet of surrounding text around each match in the context field." - added
Input schema / properties / removeDuplicates / defaultAdded value: +true - added
Input schema / properties / removeDuplicates / descriptionAdded value: +"Collapse repeated addresses (case-insensitive) so each email appears once." - added
Input schema / properties / sortResults / defaultAdded value: +false - added
Input schema / properties / sortResults / descriptionAdded value: +"Sort the returned emails (and domains) alphabetically instead of by position of first appearance." - added
Input schema / properties / text / descriptionAdded value: +"Source text to scan for email addresses. Must not be blank." - changed
Input schema / requiredPrevious value: -[ - "text", - "extractionMode", - "removeDuplicates", - "sortResults", - "includeContext", - "contextLength", - "extractDomains" -]New value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "domains": { + "description": "Deduplicated domain list (present only when extractDomains is true and matches exist).", + "items": { + "type": "string" + }, + "type": "array" + }, + "emails": { + "description": "The matched email addresses, lowercased.", + "items": { + "properties": { + "context": { + "description": "Surrounding text snippet (empty unless includeContext is true).", + "type": "string" + }, + "domain": { + "description": "Domain part after the at-sign.", + "type": "string" + }, + "email": { + "description": "The matched address, lowercased.", + "type": "string" + }, + "line": { + "description": "One-based line number where the match occurs.", + "type": "integer" + }, + "position": { + "description": "Zero-based character offset of the match in the source text.", + "type": "integer" + }, + "tld": { + "description": "Top-level domain of the address.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "options": { + "description": "The effective options after defaults were applied.", + "properties": { + "contextLength": { + "description": "Context window size used.", + "type": "integer" + }, + "extractDomains": { + "description": "Whether the domain list was returned.", + "type": "boolean" + }, + "extractionMode": { + "description": "Matching mode used.", + "type": "string" + }, + "includeContext": { + "description": "Whether context snippets were captured.", + "type": "boolean" + }, + "removeDuplicates": { + "description": "Whether duplicates were collapsed.", + "type": "boolean" + }, + "sortResults": { + "description": "Whether results were sorted alphabetically.", + "type": "boolean" + } + }, + "type": "object" + }, + "stats": { + "description": "Statistics about the source text and the extraction.", + "properties": { + "extraction": { + "description": "Match tallies and per-domain breakdowns.", + "properties": { + "domainStats": { + "description": "Map of domain to occurrence count, sorted by count.", + "type": "object" + }, + "duplicatesRemoved": { + "description": "Count of matches dropped as duplicates.", + "type": "integer" + }, + "extractionMode": { + "description": "The matching mode that was applied.", + "type": "string" + }, + "topLevelDomains": { + "description": "Map of TLD to occurrence count, sorted by count.", + "type": "object" + }, + "totalFound": { + "description": "Total matches before deduplication.", + "type": "integer" + }, + "uniqueEmails": { + "description": "Distinct addresses returned.", + "type": "integer" + } + }, + "type": "object" + }, + "original": { + "description": "Metrics for the submitted text.", + "properties": { + "characters": { + "description": "Character count of the source text.", + "type": "integer" + }, + "lines": { + "description": "Line count of the source text.", + "type": "integer" + }, + "text": { + "description": "The submitted text, echoed back.", + "type": "string" + }, + "words": { + "description": "Alphabetic word count of the source text.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Whether extraction succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_extract_urls20 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / contextLength / defaultAdded value: +30 - added
Input schema / properties / contextLength / descriptionAdded value: +"Characters of context on each side when includeContext is true. Clamped to 10-200." - added
Input schema / properties / contextLength / maximumAdded value: +200 - added
Input schema / properties / contextLength / minimumAdded value: +10 - added
Input schema / properties / customSchemes / defaultAdded value: +"" - added
Input schema / properties / customSchemes / descriptionAdded value: +"Comma-separated scheme list (e.g. \"myapp,custom\") used only when extractionMode is custom. Required and non-empty in that mode." - added
Input schema / properties / extractionMode / defaultAdded value: +"all" - added
Input schema / properties / extractionMode / descriptionAdded value: +"Which schemes to match. all = http/https/ftp plus many app schemes and bare www. links; http = http or https; https = https only; ftp = ftp or ftps; custom = use customSchemes." - added
Input schema / properties / extractionMode / enumAdded value: +[ + "all", + "http", + "https", + "ftp", + "custom" +] - added
Input schema / properties / includeContext / defaultAdded value: +false - added
Input schema / properties / includeContext / descriptionAdded value: +"Include surrounding text around each match." - added
Input schema / properties / removeDuplicates / defaultAdded value: +true - added
Input schema / properties / removeDuplicates / descriptionAdded value: +"Drop case-insensitive duplicate URLs from the results." - added
Input schema / properties / sortResults / defaultAdded value: +false - added
Input schema / properties / sortResults / descriptionAdded value: +"Sort results alphabetically by URL." - added
Input schema / properties / text / descriptionAdded value: +"Source text to scan for URLs. Required and non-empty." - added
Input schema / properties / text / minLengthAdded value: +1 - changed
Input schema / requiredPrevious value: -[ - "text", - "extractionMode", - "customSchemes", - "removeDuplicates", - "sortResults", - "includeContext", - "contextLength" -]New value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message when success is false.", + "type": [ + "string", + "null" + ] + }, + "options": { + "description": "Resolved options actually applied.", + "properties": { + "contextLength": { + "description": "Context length applied.", + "type": "integer" + }, + "customSchemes": { + "description": "Custom schemes applied.", + "type": "string" + }, + "extractionMode": { + "description": "Mode applied.", + "type": "string" + }, + "includeContext": { + "description": "Context inclusion applied.", + "type": "boolean" + }, + "removeDuplicates": { + "description": "Dedupe applied.", + "type": "boolean" + }, + "sortResults": { + "description": "Sort applied.", + "type": "boolean" + } + }, + "type": "object" + }, + "stats": { + "description": "Original-text metrics and extraction summary.", + "properties": { + "extraction": { + "properties": { + "duplicatesRemoved": { + "description": "totalFound minus uniqueUrls.", + "type": "integer" + }, + "extractionMode": { + "description": "The mode used.", + "type": "string" + }, + "schemes": { + "additionalProperties": { + "type": "integer" + }, + "description": "Per-scheme match counts.", + "type": "object" + }, + "totalFound": { + "description": "URLs matched before dedupe.", + "type": "integer" + }, + "uniqueUrls": { + "description": "URLs after dedupe.", + "type": "integer" + } + }, + "type": "object" + }, + "original": { + "properties": { + "characters": { + "description": "Character count of input.", + "type": "integer" + }, + "lines": { + "description": "Line count of input.", + "type": "integer" + }, + "text": { + "description": "The input text.", + "type": "string" + }, + "words": { + "description": "Alphabetic word count of input.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "True when extraction succeeded.", + "type": "boolean" + }, + "urls": { + "description": "Matched URLs, after dedupe/sort.", + "items": { + "properties": { + "context": { + "description": "Surrounding text, empty when includeContext is false.", + "type": "string" + }, + "line": { + "description": "One-based line number of the match.", + "type": "integer" + }, + "position": { + "description": "Zero-based character offset of the match.", + "type": "integer" + }, + "scheme": { + "description": "Lowercased scheme, or \"unknown\".", + "type": "string" + }, + "url": { + "description": "The matched URL string.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
text_find_replace4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "caseSensitive": { + "default": false, + "description": "When false (default), matching ignores letter case. When true, case must match exactly.", + "type": "boolean" + }, + "findText": { + "description": "Substring or regex pattern to find. Must not be empty (empty returns HTTP 400). Interpreted as a regular expression when useRegex is true.", + "type": "string" + }, + "replaceAll": { + "default": true, + "description": "When true (default), replaces every match. When false, replaces only the first match.", + "type": "boolean" + }, + "replaceText": { + "default": "", + "description": "Replacement string substituted for each match. Defaults to empty (which deletes matches).", + "type": "string" + }, + "text": { + "description": "Source text to search within. Must not be empty (empty returns HTTP 400).", + "type": "string" + }, + "useRegex": { + "default": false, + "description": "When true, findText is treated as a JavaScript regular expression. An invalid pattern returns HTTP 400.", + "type": "boolean" + } +} - added
Input schema / requiredAdded value: +[ + "text", + "findText" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "Echo of the normalized options applied.", + "properties": { + "caseSensitive": { + "description": "Whether matching was case-sensitive.", + "type": "boolean" + }, + "findText": { + "description": "The find pattern used.", + "type": "string" + }, + "replaceAll": { + "description": "Whether all matches were replaced.", + "type": "boolean" + }, + "replaceText": { + "description": "The replacement string used.", + "type": "string" + }, + "useRegex": { + "description": "Whether findText was treated as regex.", + "type": "boolean" + } + }, + "type": "object" + }, + "result": { + "description": "The rewritten text after replacements.", + "type": "string" + }, + "stats": { + "description": "Before/after text metrics and match accounting.", + "properties": { + "matches": { + "description": "Match accounting for the operation.", + "properties": { + "found": { + "description": "Total matches found for findText.", + "type": "integer" + }, + "remaining": { + "description": "Matches left unreplaced (found minus replaced).", + "type": "integer" + }, + "replaced": { + "description": "Number of matches actually replaced.", + "type": "integer" + } + }, + "type": "object" + }, + "original": { + "description": "Statistics for the input text.", + "properties": { + "characters": { + "description": "Unicode code-point count of the original text.", + "type": "integer" + }, + "length": { + "description": "UTF-8 byte length of the original text.", + "type": "integer" + }, + "lines": { + "description": "Newline-separated line count of the original text.", + "type": "integer" + }, + "text": { + "description": "The original text.", + "type": "string" + }, + "words": { + "description": "Count of alphabetic word runs in the original text.", + "type": "integer" + } + }, + "type": "object" + }, + "result": { + "description": "Statistics for the rewritten text.", + "properties": { + "characters": { + "description": "Unicode code-point count of the rewritten text.", + "type": "integer" + }, + "length": { + "description": "UTF-8 byte length of the rewritten text.", + "type": "integer" + }, + "lines": { + "description": "Newline-separated line count of the rewritten text.", + "type": "integer" + }, + "text": { + "description": "The rewritten text.", + "type": "string" + }, + "words": { + "description": "Count of alphabetic word runs in the rewritten text.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "True when the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_line_counter8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / showLineNumbers / defaultAdded value: +false - added
Input schema / properties / showLineNumbers / descriptionAdded value: +"When true, numberedText prepends a right-padded line number (e.g. \" 1: line\") to each line; otherwise numberedText echoes the input unchanged." - added
Input schema / properties / skipBlankLines / defaultAdded value: +false - added
Input schema / properties / skipBlankLines / descriptionAdded value: +"When true (and showLineNumbers is true), blank/whitespace-only lines are emitted verbatim and not assigned a number. Does not affect the stats counts." - added
Input schema / properties / text / descriptionAdded value: +"Text to analyze; split into lines on newline. Empty input yields zeroed stats." - changed
Input schema / requiredPrevious value: -[ - "text", - "showLineNumbers", - "skipBlankLines" -]New value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "lengthDistribution": { + "description": "Line-length buckets (0-20, 21-50, 51-80, 81-120, 120+); empty buckets omitted.", + "items": { + "properties": { + "count": { + "description": "Lines whose length falls in this bucket.", + "type": "integer" + }, + "percentage": { + "description": "Bucket share of all lines, rounded to whole percent.", + "type": "integer" + }, + "range": { + "description": "Bucket label, e.g. 0-20.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "numberedText": { + "description": "Input with line numbers prepended when showLineNumbers is true; otherwise the input verbatim. Empty for empty input.", + "type": "string" + }, + "options": { + "description": "Echo of the effective request options.", + "properties": { + "showLineNumbers": { + "description": "Effective showLineNumbers value.", + "type": "boolean" + }, + "skipBlankLines": { + "description": "Effective skipBlankLines value.", + "type": "boolean" + } + }, + "type": "object" + }, + "stats": { + "description": "Line metrics for the input.", + "properties": { + "avgLineLength": { + "description": "Mean line length, rounded to one decimal.", + "type": "number" + }, + "blankLines": { + "description": "Blank or whitespace-only lines (totalLines minus nonEmptyLines).", + "type": "integer" + }, + "longestLineNumber": { + "description": "1-based line number of the longest line.", + "type": "integer" + }, + "maxLineLength": { + "description": "Character length of the longest line.", + "type": "integer" + }, + "minLineLength": { + "description": "Character length of the shortest line.", + "type": "integer" + }, + "nonEmptyLines": { + "description": "Lines with at least one non-whitespace character.", + "type": "integer" + }, + "shortestLineNumber": { + "description": "1-based line number of the shortest line.", + "type": "integer" + }, + "totalLines": { + "description": "Total number of lines (input split on newline).", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on success.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_lorem_ipsum15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / count / defaultAdded value: +5 - added
Input schema / properties / count / descriptionAdded value: +"How many units (words, sentences, paragraphs, or list items) to produce. Clamped to 1-1000." - added
Input schema / properties / count / maximumAdded value: +1000 - added
Input schema / properties / count / minimumAdded value: +1 - added
Input schema / properties / format / defaultAdded value: +"plain" - added
Input schema / properties / format / descriptionAdded value: +"Output format. html wraps paragraphs in p tags and lists in ul/li; anything other than html yields plain text." - added
Input schema / properties / format / enumAdded value: +[ + "plain", + "html" +] - added
Input schema / properties / startWithLorem / defaultAdded value: +true - added
Input schema / properties / startWithLorem / descriptionAdded value: +"Begin the output with the canonical Lorem ipsum dolor sit amet opening. Any value other than false is treated as true." - added
Input schema / properties / type / defaultAdded value: +"paragraphs" - added
Input schema / properties / type / descriptionAdded value: +"Unit of text to generate. Invalid values fall back to paragraphs." - added
Input schema / properties / type / enumAdded value: +[ + "words", + "sentences", + "paragraphs", + "lists" +] - removed
Input schema / requiredRemoved value: -[ - "type", - "count", - "startWithLorem", - "format" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "description": "The generated lorem ipsum text (plain or HTML per the format parameter).", + "type": "string" + }, + "stats": { + "description": "Counts for the generated text. Always includes words, characters, charactersNoSpaces; plus paragraphs (type=paragraphs), sentences (type=sentences), or items (type=lists).", + "properties": { + "characters": { + "description": "Total character count (HTML tags stripped first).", + "type": "integer" + }, + "charactersNoSpaces": { + "description": "Character count excluding spaces.", + "type": "integer" + }, + "items": { + "description": "List item count (present only when type=lists).", + "type": "integer" + }, + "paragraphs": { + "description": "Paragraph count (present only when type=paragraphs).", + "type": "integer" + }, + "sentences": { + "description": "Sentence count (present only when type=sentences).", + "type": "integer" + }, + "words": { + "description": "Number of words in the output.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "True when generation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_lorem_ipsum_variations15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / count / defaultAdded value: +3 - added
Input schema / properties / count / descriptionAdded value: +"How many words/sentences/paragraphs to generate; clamped to 1-50." - added
Input schema / properties / count / maximumAdded value: +50 - added
Input schema / properties / count / minimumAdded value: +1 - added
Input schema / properties / format / defaultAdded value: +"paragraphs" - added
Input schema / properties / format / descriptionAdded value: +"Output unit. Unrecognised values fall back to paragraphs." - added
Input schema / properties / format / enumAdded value: +[ + "words", + "sentences", + "paragraphs" +] - added
Input schema / properties / startWithTraditional / defaultAdded value: +false - added
Input schema / properties / startWithTraditional / descriptionAdded value: +"When true, begin output with the canonical \"Lorem ipsum dolor sit amet...\" line (consuming part of count)." - added
Input schema / properties / type / defaultAdded value: +"lorem" - added
Input schema / properties / type / descriptionAdded value: +"Vocabulary theme for the placeholder text." - added
Input schema / properties / type / enumAdded value: +[ + "lorem", + "bacon", + "cupcake", + "pirate", + "shakespeare", + "tech", + "medical" +] - removed
Input schema / requiredRemoved value: -[ - "type", - "format", - "count", - "startWithTraditional" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "Echoed effective options plus the list of available themes.", + "properties": { + "availableTypes": { + "description": "All selectable vocabulary themes.", + "items": { + "type": "string" + }, + "type": "array" + }, + "count": { + "description": "Clamped count used.", + "type": "integer" + }, + "format": { + "description": "Resolved output unit.", + "type": "string" + }, + "startWithTraditional": { + "description": "Whether the traditional opener was prepended.", + "type": "boolean" + }, + "type": { + "description": "Resolved vocabulary theme.", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "description": "The generated placeholder text.", + "type": "string" + }, + "stats": { + "description": "Text and generation statistics.", + "properties": { + "generation": { + "description": "Resolved generation settings.", + "properties": { + "format": { + "description": "Resolved output unit.", + "type": "string" + }, + "requestedCount": { + "description": "Clamped count used.", + "type": "integer" + }, + "startWithTraditional": { + "description": "Whether the traditional opener was prepended.", + "type": "boolean" + }, + "type": { + "description": "Resolved vocabulary theme.", + "type": "string" + }, + "vocabularySize": { + "description": "Number of words in the chosen vocabulary.", + "type": "integer" + } + }, + "type": "object" + }, + "text": { + "description": "Counts derived from the generated text.", + "properties": { + "characters": { + "description": "Total character count.", + "type": "integer" + }, + "charactersWithSpaces": { + "description": "Character count including spaces.", + "type": "integer" + }, + "charactersWithoutSpaces": { + "description": "Character count excluding spaces.", + "type": "integer" + }, + "paragraphs": { + "description": "Number of paragraphs (blank-line separated).", + "type": "integer" + }, + "sentences": { + "description": "Count of sentence-ending punctuation.", + "type": "integer" + }, + "words": { + "description": "Number of word tokens.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "True when generation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_palindrome_checker4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "analyzeWords": { + "default": true, + "description": "When true (default) each whitespace-separated word is also tested individually and reported under wordAnalysis; when false only the whole-string verdict is computed.", + "type": "boolean" + }, + "caseSensitive": { + "default": false, + "description": "When true, uppercase and lowercase letters are treated as distinct; when false (default) the comparison is case-insensitive.", + "type": "boolean" + }, + "ignorePunctuation": { + "default": true, + "description": "When true (default) punctuation and symbols (anything that is not a letter, digit, or space) are stripped before comparison; when false they must mirror.", + "type": "boolean" + }, + "ignoreSpaces": { + "default": true, + "description": "When true (default) all whitespace is stripped before comparison, so spaced phrases can still qualify; when false spaces must mirror.", + "type": "boolean" + }, + "text": { + "description": "Text to test for palindrome (must not be blank). Whitespace, case, and punctuation are handled per the options below.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "nonPalindromicWords": { + "description": "Subset of wordAnalysis whose entries are not palindromes.", + "items": { + "description": "A word-analysis entry (same shape as wordAnalysis items).", + "type": "object" + }, + "type": "array" + }, + "options": { + "description": "The effective options after defaults were applied.", + "properties": { + "analyzeWords": { + "description": "Effective analyze-words setting.", + "type": "boolean" + }, + "caseSensitive": { + "description": "Effective case-sensitivity setting.", + "type": "boolean" + }, + "ignorePunctuation": { + "description": "Effective ignore-punctuation setting.", + "type": "boolean" + }, + "ignoreSpaces": { + "description": "Effective ignore-spaces setting.", + "type": "boolean" + } + }, + "type": "object" + }, + "palindromicWords": { + "description": "Subset of wordAnalysis whose entries are palindromes.", + "items": { + "description": "A word-analysis entry (same shape as wordAnalysis items).", + "type": "object" + }, + "type": "array" + }, + "result": { + "description": "Whole-string palindrome verdict and the strings it was derived from.", + "properties": { + "centerInfo": { + "description": "Center of the palindrome when isPalindrome is true, otherwise null.", + "properties": { + "character": { + "description": "The center character for a single center.", + "type": "string" + }, + "characters": { + "description": "The two center characters for a double center.", + "type": "string" + }, + "position": { + "description": "Zero-based index of the center character for a single center.", + "type": "integer" + }, + "positions": { + "description": "The two zero-based center indices for a double center.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "type": { + "description": "Either single (odd length, one center char) or double (even length, two center chars).", + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "isPalindrome": { + "description": "True when the processed text equals its reverse.", + "type": "boolean" + }, + "originalText": { + "description": "The submitted text, echoed back unmodified.", + "type": "string" + }, + "processedText": { + "description": "The text after applying the case/space/punctuation options.", + "type": "string" + }, + "reversedText": { + "description": "The processed text reversed character by character.", + "type": "string" + } + }, + "type": "object" + }, + "statistics": { + "description": "Aggregate counts over the input and the per-word analysis.", + "properties": { + "charactersIgnored": { + "description": "Characters removed by the options (originalLength minus processedLength).", + "type": "integer" + }, + "longestPalindromicWord": { + "description": "Length of the longest palindromic word, or 0 if none.", + "type": "integer" + }, + "nonPalindromicWords": { + "description": "Count of words that are not palindromes.", + "type": "integer" + }, + "originalLength": { + "description": "Character length of the original text.", + "type": "integer" + }, + "palindromicWords": { + "description": "Count of words that are palindromes.", + "type": "integer" + }, + "processedLength": { + "description": "Character length of the processed text.", + "type": "integer" + }, + "shortestPalindromicWord": { + "description": "Length of the shortest palindromic word, or 0 if none.", + "type": "integer" + }, + "totalWords": { + "description": "Number of words analyzed.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the check succeeded.", + "type": "boolean" + }, + "wordAnalysis": { + "description": "Per-word results, present only when analyzeWords is true.", + "items": { + "properties": { + "isPalindrome": { + "description": "Whether this single word is a palindrome.", + "type": "boolean" + }, + "length": { + "description": "Character length of the processed word.", + "type": "integer" + }, + "original": { + "description": "The word as it appeared in the input.", + "type": "string" + }, + "processed": { + "description": "The word after applying case/punctuation options.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
text_remove_duplicate_characters4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "caseSensitive": { + "default": true, + "description": "When true, A and a count as different characters; when false, comparison is case-insensitive.", + "type": "boolean" + }, + "firstOccurrence": { + "default": true, + "description": "When true, the first occurrence of each character is kept; when false, the last occurrence is kept.", + "type": "boolean" + }, + "preserveWhitespace": { + "default": true, + "description": "When true, every whitespace character is kept and never treated as a duplicate; when false, whitespace is deduplicated like any other character.", + "type": "boolean" + }, + "text": { + "description": "The text to deduplicate at the character level. Must not be blank.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "The effective options applied (caseSensitive, preserveWhitespace, firstOccurrence).", + "type": "object" + }, + "result": { + "description": "The deduplicated output text.", + "type": "string" + }, + "stats": { + "description": "Before/after character statistics.", + "properties": { + "duplicatesList": { + "description": "Up to 20 removed duplicate characters with their positions.", + "items": { + "properties": { + "char": { + "description": "The duplicate character that was removed.", + "type": "string" + }, + "firstPosition": { + "description": "Zero-based index of the kept occurrence of that character.", + "type": "integer" + }, + "position": { + "description": "Zero-based index of the duplicate in the input.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "duplicatesRemoved": { + "description": "Number of characters removed.", + "type": "integer" + }, + "original": { + "description": "Statistics for the input text.", + "properties": { + "characters": { + "description": "Number of characters in the input.", + "type": "integer" + }, + "length": { + "description": "Character length of the input.", + "type": "integer" + }, + "uniqueChars": { + "description": "Number of distinct characters in the input.", + "type": "integer" + } + }, + "type": "object" + }, + "percentageReduction": { + "description": "Percent of characters removed, rounded to two decimals.", + "type": "number" + }, + "result": { + "description": "Statistics for the deduplicated output.", + "properties": { + "characters": { + "description": "Number of characters in the output.", + "type": "integer" + }, + "length": { + "description": "Character length of the output.", + "type": "integer" + }, + "uniqueChars": { + "description": "Number of distinct characters in the output.", + "type": "integer" + } + }, + "type": "object" + }, + "totalDuplicates": { + "description": "Total number of duplicate characters found (may exceed the 20 listed).", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether deduplication succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_remove_line_numbers4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "customPattern": { + "default": "", + "description": "Regex used only when detectionMode is pattern; accepts a bare body or /body/flags form. Capture group 1 or 2 is kept as the cleaned line. Invalid regex returns HTTP 400.", + "type": "string" + }, + "detectionMode": { + "default": "auto", + "description": "How numbers are found. auto detects the dominant style from a 10-line sample; pattern uses customPattern; manual strips leading digits followed by a separator.", + "enum": [ + "auto", + "pattern", + "manual" + ], + "type": "string" + }, + "removeAll": { + "default": true, + "description": "Reserved flag accepted for forward compatibility; does not change current output.", + "type": "boolean" + }, + "text": { + "description": "Multi-line text to clean; split on newline (\\n). Empty input is rejected with HTTP 400.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "The effective settings applied.", + "properties": { + "customPattern": { + "description": "Effective custom regex (empty unless pattern mode).", + "type": "string" + }, + "detectionMode": { + "description": "Effective detection mode.", + "type": "string" + }, + "removeAll": { + "description": "Effective removeAll flag.", + "type": "boolean" + } + }, + "type": "object" + }, + "result": { + "description": "The text with line numbers removed.", + "type": "string" + }, + "stats": { + "description": "Counts for the input and output plus detection summary.", + "properties": { + "detection": { + "properties": { + "confidence": { + "description": "Percentage of sampled lines matching the chosen pattern.", + "type": "number" + }, + "mode": { + "description": "Detection mode actually used.", + "type": "string" + }, + "pattern": { + "description": "Human-readable description of the matched pattern.", + "type": "string" + } + }, + "type": "object" + }, + "original": { + "properties": { + "characters": { + "description": "Byte length of the input.", + "type": "integer" + }, + "lines": { + "description": "Line count of the input.", + "type": "integer" + }, + "words": { + "description": "Alphabetic word count of the input.", + "type": "integer" + } + }, + "type": "object" + }, + "result": { + "properties": { + "characters": { + "description": "Byte length of the result.", + "type": "integer" + }, + "lines": { + "description": "Line count of the result.", + "type": "integer" + }, + "processedLines": { + "description": "Number of lines that had a number removed.", + "type": "integer" + }, + "unchangedLines": { + "description": "Number of lines left unchanged.", + "type": "integer" + }, + "words": { + "description": "Alphabetic word count of the result.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on success.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_reverse_text4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "preserveFormatting": { + "default": false, + "description": "When true with characters or words mode, reverse within each line instead of across the whole text (ignored for lines, sentences, paragraphs).", + "type": "boolean" + }, + "reverseType": { + "default": "characters", + "description": "Granularity of reversal (defaults to characters when omitted or unknown).", + "enum": [ + "characters", + "words", + "lines", + "sentences", + "paragraphs" + ], + "type": "string" + }, + "text": { + "description": "Input text to reverse. Must not be blank.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "The effective options applied.", + "properties": { + "preserveFormatting": { + "description": "Whether per-line preservation was applied.", + "type": "boolean" + }, + "reverseType": { + "description": "The reversal granularity used.", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "description": "The reversed text.", + "type": "string" + }, + "stats": { + "description": "Text statistics computed before and after reversal.", + "properties": { + "original": { + "description": "Statistics for the input text.", + "properties": { + "characters": { + "description": "UTF-8 byte length of the input text.", + "type": "integer" + }, + "length": { + "description": "Count of Unicode code points in the input text.", + "type": "integer" + }, + "lines": { + "description": "Count of newline-separated lines.", + "type": "integer" + }, + "paragraphs": { + "description": "Count of blank-line-separated paragraphs.", + "type": "integer" + }, + "sentences": { + "description": "Count of sentence-terminator runs.", + "type": "integer" + }, + "words": { + "description": "Count of alphabetic word runs.", + "type": "integer" + } + }, + "type": "object" + }, + "result": { + "description": "Statistics for the reversed text (same fields as original).", + "properties": { + "characters": { + "description": "UTF-8 byte length of the reversed text.", + "type": "integer" + }, + "length": { + "description": "Count of Unicode code points in the reversed text.", + "type": "integer" + }, + "lines": { + "description": "Count of newline-separated lines.", + "type": "integer" + }, + "paragraphs": { + "description": "Count of blank-line-separated paragraphs.", + "type": "integer" + }, + "sentences": { + "description": "Count of sentence-terminator runs.", + "type": "integer" + }, + "words": { + "description": "Count of alphabetic word runs.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the reversal succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_sort_lines4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "caseSensitive": { + "default": false, + "description": "When true, alphabetical sort and dedupe are case-sensitive; when false they fold case.", + "type": "boolean" + }, + "removeDuplicates": { + "default": false, + "description": "Remove duplicate lines (keeping first occurrence) before sorting.", + "type": "boolean" + }, + "removeEmpty": { + "default": false, + "description": "Drop blank or whitespace-only lines before sorting.", + "type": "boolean" + }, + "sortOrder": { + "default": "asc", + "description": "Direction for alphabetical/numeric/length/date; ignored by random and reverse.", + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + "sortType": { + "default": "alphabetical", + "description": "Sort key. random shuffles; reverse inverts input order and ignores sortOrder.", + "enum": [ + "alphabetical", + "numeric", + "length", + "date", + "random", + "reverse" + ], + "type": "string" + }, + "text": { + "description": "Newline-separated text to sort; each line is one element.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "The effective settings applied.", + "properties": { + "caseSensitive": { + "description": "Whether comparison was case-sensitive.", + "type": "boolean" + }, + "removeDuplicates": { + "description": "Whether duplicates were removed.", + "type": "boolean" + }, + "removeEmpty": { + "description": "Whether blank lines were dropped.", + "type": "boolean" + }, + "sortOrder": { + "description": "Direction used.", + "type": "string" + }, + "sortType": { + "description": "Sort key used.", + "type": "string" + } + }, + "type": "object" + }, + "result": { + "description": "The sorted lines joined by newlines.", + "type": "string" + }, + "stats": { + "description": "Line metrics before and after processing.", + "properties": { + "original": { + "description": "Stats for the input text.", + "properties": { + "characters": { + "description": "Byte length of input.", + "type": "integer" + }, + "emptyLines": { + "description": "Blank or whitespace-only input lines.", + "type": "integer" + }, + "lines": { + "description": "Total input line count.", + "type": "integer" + }, + "words": { + "description": "Count of alphabetic word tokens in input.", + "type": "integer" + } + }, + "type": "object" + }, + "result": { + "description": "Stats for the sorted output.", + "properties": { + "characters": { + "description": "Byte length of output.", + "type": "integer" + }, + "emptyLines": { + "description": "Blank lines remaining in output.", + "type": "integer" + }, + "lines": { + "description": "Output line count after dedupe/empty removal.", + "type": "integer" + }, + "words": { + "description": "Count of alphabetic word tokens in output.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on success.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_string_escape10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / format / descriptionAdded value: +"Target syntax. sql doubles single quotes; csv RFC-4180 quoting; shell backslash-escapes metachars; regex escapes metachars; php escapes backslash and quote; ldap RFC-4515 hex escapes; xml_attr entity-escapes; c_string C/C++ literal escapes." - added
Input schema / properties / format / enumAdded value: +[ + "sql", + "csv", + "shell", + "regex", + "php", + "ldap", + "xml_attr", + "c_string" +] - added
Input schema / properties / operation / defaultAdded value: +"escape" - added
Input schema / properties / operation / descriptionAdded value: +"Whether to escape (default) or reverse-unescape the text for the chosen format." - added
Input schema / properties / operation / enumAdded value: +[ + "escape", + "unescape" +] - added
Input schema / properties / text / descriptionAdded value: +"The string to escape or unescape. Required, non-empty." - added
Input schema / properties / text / examplesAdded value: +[ + "O'Reilly" +] - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "format" -]New value: +[ + "text", + "format" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Heuristic analysis of the input text.", + "properties": { + "detected_escapes": { + "description": "Escape patterns detected in the input.", + "items": { + "type": "string" + }, + "type": "array" + }, + "length": { + "description": "Byte length of the input.", + "type": "integer" + }, + "needs_escaping": { + "description": "Formats the text likely needs escaping for.", + "items": { + "type": "string" + }, + "type": "array" + }, + "recommendations": { + "description": "Suggested escaping actions.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "available_formats": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of format id to display label for all supported formats.", + "type": "object" + }, + "format": { + "description": "The format used.", + "type": "string" + }, + "format_info": { + "description": "Metadata for the chosen format.", + "properties": { + "description": { + "description": "What the format escapes.", + "type": "string" + }, + "example": { + "description": "Before/after example.", + "type": "string" + }, + "name": { + "description": "Human-readable format name.", + "type": "string" + }, + "pattern": { + "description": "Example substitution pattern.", + "type": "string" + } + }, + "type": "object" + }, + "input": { + "description": "The original text, echoed back.", + "type": "string" + }, + "operation": { + "description": "The operation performed (escape or unescape).", + "type": "string" + }, + "result": { + "description": "The escaped or unescaped output string.", + "type": "string" + }, + "success": { + "description": "Whether the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_text_column21 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / alignment / defaultAdded value: +"left" - added
Input schema / properties / alignment / descriptionAdded value: +"Padding direction for the align operation." - added
Input schema / properties / alignment / enumAdded value: +[ + "left", + "right", + "center" +] - added
Input schema / properties / columnNumber / defaultAdded value: +1 - added
Input schema / properties / columnNumber / descriptionAdded value: +"1-based column index used by the extract operation; clamped to a minimum of 1." - added
Input schema / properties / columnNumber / minimumAdded value: +1 - added
Input schema / properties / delimiter / defaultAdded value: +" " - added
Input schema / properties / delimiter / descriptionAdded value: +"Field separator splitting each line into columns; must be non-empty." - added
Input schema / properties / fillChar / defaultAdded value: +" " - added
Input schema / properties / fillChar / descriptionAdded value: +"Single character used to pad columns during align; first character is used, empty falls back to a space." - added
Input schema / properties / operation / defaultAdded value: +"extract" - added
Input schema / properties / operation / descriptionAdded value: +"Column operation to perform." - added
Input schema / properties / operation / enumAdded value: +[ + "extract", + "align", + "split" +] - added
Input schema / properties / text / descriptionAdded value: +"Multi-line delimited input; each line is split on the delimiter into columns." - added
Input schema / properties / width / defaultAdded value: +20 - added
Input schema / properties / width / descriptionAdded value: +"Target column width in characters for the align operation; clamped to 1-200." - added
Input schema / properties / width / maximumAdded value: +200 - added
Input schema / properties / width / minimumAdded value: +1 - changed
Input schema / requiredPrevious value: -[ - "text", - "operation", - "columnNumber", - "delimiter", - "alignment", - "width", - "fillChar" -]New value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "Echo of the resolved (normalized) request parameters.", + "properties": { + "alignment": { + "description": "Resolved alignment.", + "type": "string" + }, + "columnNumber": { + "description": "Resolved 1-based column index.", + "type": "integer" + }, + "delimiter": { + "description": "Resolved delimiter.", + "type": "string" + }, + "fillChar": { + "description": "Resolved fill character.", + "type": "string" + }, + "operation": { + "description": "Operation performed.", + "type": "string" + }, + "width": { + "description": "Resolved column width.", + "type": "integer" + } + }, + "type": "object" + }, + "result": { + "description": "Processed text: extracted column list, aligned table, or analysis report.", + "type": "string" + }, + "stats": { + "description": "Before/after metrics plus operation-specific counters.", + "properties": { + "operation": { + "description": "Operation-specific counters (e.g. extractedCount, maxColumns, processedLines, extractionRate).", + "type": "object" + }, + "original": { + "description": "Statistics for the input text.", + "properties": { + "averageWordsPerLine": { + "description": "Mean words per line.", + "type": "number" + }, + "characters": { + "description": "Character count.", + "type": "integer" + }, + "lines": { + "description": "Line count.", + "type": "integer" + }, + "words": { + "description": "Alphabetic word count.", + "type": "integer" + } + }, + "type": "object" + }, + "result": { + "description": "Statistics for the output text (same fields as original).", + "properties": { + "averageWordsPerLine": { + "description": "Mean words per line.", + "type": "number" + }, + "characters": { + "description": "Character count.", + "type": "integer" + }, + "lines": { + "description": "Line count.", + "type": "integer" + }, + "words": { + "description": "Alphabetic word count.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "True when the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_text_joiner4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "addPrefix": { + "default": "", + "description": "String prepended to every element after trim/sort.", + "type": "string" + }, + "addSuffix": { + "default": "", + "description": "String appended to every element after trim/sort.", + "type": "string" + }, + "elements": { + "description": "Items to join: an array of strings, or a single string that is split on newlines (blank lines dropped).", + "examples": [ + [ + "apple", + "banana", + "cherry" + ] + ], + "oneOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } + ] + }, + "format": { + "default": "text", + "description": "Output structure. text joins with separator; others emit CSV row, JSON array, HTML/XML list, numbered/bulleted/quoted lines, or a SQL VALUES tuple.", + "enum": [ + "text", + "csv", + "json", + "html-list", + "xml", + "numbered", + "bulleted", + "quoted", + "sql-values" + ], + "type": "string" + }, + "removeEmpty": { + "default": true, + "description": "Drop elements that are empty or whitespace-only before joining.", + "type": "boolean" + }, + "separator": { + "default": "\n", + "description": "String inserted between elements (ignored by csv/json/xml/html-list/sql-values formats, which use their own delimiters).", + "type": "string" + }, + "sort": { + "default": false, + "description": "Lexicographically sort elements before joining.", + "type": "boolean" + }, + "sortDirection": { + "default": "asc", + "description": "Sort order when sort is true.", + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + "trimElements": { + "default": false, + "description": "Trim leading/trailing whitespace from each element.", + "type": "boolean" + }, + "unique": { + "default": false, + "description": "Remove duplicate elements, keeping first occurrence.", + "type": "boolean" + } +} - added
Input schema / requiredAdded value: +[ + "elements" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "description": "The joined output string in the chosen format.", + "type": "string" + }, + "settings": { + "description": "Effective options applied: separator, format, removeEmpty, trimElements, addPrefix, addSuffix, sort, sortDirection, unique.", + "type": "object" + }, + "stats": { + "description": "Metrics over the processed elements.", + "properties": { + "averageLength": { + "description": "Mean element length (2 dp).", + "type": "number" + }, + "emptyElements": { + "description": "Count of empty/whitespace elements remaining.", + "type": "integer" + }, + "longestElement": { + "description": "Length of longest element.", + "type": "integer" + }, + "separatorLength": { + "description": "Character length of the separator.", + "type": "integer" + }, + "shortestElement": { + "description": "Length of shortest element.", + "type": "integer" + }, + "totalElements": { + "description": "Number of elements joined.", + "type": "integer" + }, + "totalLength": { + "description": "Character length of result.", + "type": "integer" + }, + "uniqueElements": { + "description": "Count of distinct elements.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on success.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_text_obfuscator4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "intensity": { + "default": "medium", + "description": "How aggressively characters are substituted. Ignored by the \"reverse\" type. \"heavy\" (and \"medium\" for some types) chooses among multiple replacements at random.", + "enum": [ + "light", + "medium", + "heavy" + ], + "type": "string" + }, + "obfuscationType": { + "default": "leetspeak", + "description": "Technique to apply. \"leetspeak\" swaps letters for digits/symbols; \"unicode\" uses Greek/Cyrillic look-alikes; \"homoglyphs\" uses confusable characters; \"reverse\" reverses order; \"random\" injects random characters. Unknown values return the text unchanged.", + "enum": [ + "leetspeak", + "unicode", + "homoglyphs", + "reverse", + "random" + ], + "type": "string" + }, + "preserveCase": { + "default": true, + "description": "Keep the original upper/lower case of substituted letters.", + "type": "boolean" + }, + "preserveSpacing": { + "default": true, + "description": "Keep spaces between words. When false, \"reverse\" reverses the whole string and \"random\" may also alter spaces.", + "type": "boolean" + }, + "text": { + "description": "The input text to obfuscate. Required and non-empty.", + "examples": [ + "hello world" + ], + "minLength": 1, + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "comparison": { + "description": "Side-by-side original and obfuscated text.", + "properties": { + "obfuscated": { + "description": "The obfuscated text.", + "type": "string" + }, + "original": { + "description": "The original input text.", + "type": "string" + } + }, + "type": "object" + }, + "options": { + "description": "The effective options used for the run.", + "properties": { + "intensity": { + "description": "Intensity used.", + "type": "string" + }, + "obfuscationType": { + "description": "Technique applied.", + "type": "string" + }, + "preserveCase": { + "description": "Whether letter case was preserved.", + "type": "boolean" + }, + "preserveSpacing": { + "description": "Whether spacing was preserved.", + "type": "boolean" + } + }, + "type": "object" + }, + "result": { + "description": "The obfuscated text.", + "type": "string" + }, + "statistics": { + "description": "Metrics describing the transformation.", + "properties": { + "changePercentage": { + "description": "charactersChanged as a percent of originalLength.", + "type": "number" + }, + "charactersChanged": { + "description": "Number of positions whose character changed.", + "type": "integer" + }, + "intensity": { + "description": "The intensity used, echoed back.", + "type": "string" + }, + "obfuscatedLength": { + "description": "Byte length of the obfuscated text (UTF-8).", + "type": "integer" + }, + "obfuscationType": { + "description": "The technique applied, echoed back.", + "type": "string" + }, + "originalLength": { + "description": "Byte length of the input text (UTF-8).", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether obfuscation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_text_randomizer4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "preserveFormatting": { + "default": false, + "description": "When true, keeps line breaks and whitespace positions; only affects the words and characters modes.", + "type": "boolean" + }, + "randomizeType": { + "default": "lines", + "description": "What unit to shuffle. Unrecognized values return the input text unchanged.", + "enum": [ + "words", + "lines", + "characters", + "sentences", + "paragraphs" + ], + "type": "string" + }, + "seed": { + "default": null, + "description": "Optional integer seed for a reproducible shuffle. Omit or null for true randomness via Math.random.", + "type": [ + "integer", + "null" + ] + }, + "text": { + "description": "The text to randomize. Must not be blank (an empty value returns a 400 error).", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "The effective options after defaults were applied.", + "properties": { + "preserveFormatting": { + "description": "Whether formatting was preserved.", + "type": "boolean" + }, + "randomizeType": { + "description": "The mode used.", + "type": "string" + }, + "seed": { + "description": "The integer seed used, or null for unseeded randomness.", + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + }, + "result": { + "description": "The randomized output text.", + "type": "string" + }, + "stats": { + "description": "Before/after metrics and per-mode randomization counts.", + "properties": { + "original": { + "description": "Statistics for the input text.", + "properties": { + "characters": { + "description": "UTF-8 byte length.", + "type": "integer" + }, + "lines": { + "description": "Newline-delimited line count.", + "type": "integer" + }, + "paragraphs": { + "description": "Count of blank-line-separated paragraphs.", + "type": "integer" + }, + "sentences": { + "description": "Count of sentence-terminator runs.", + "type": "integer" + }, + "text": { + "description": "The original input text.", + "type": "string" + }, + "words": { + "description": "Count of alphabetic word runs.", + "type": "integer" + } + }, + "type": "object" + }, + "randomization": { + "description": "Per-mode counters (keys vary by randomizeType, e.g. linesRandomized, wordsRandomized, charactersRandomized).", + "type": "object" + }, + "result": { + "description": "Statistics for the randomized output text (same fields as original).", + "properties": { + "characters": { + "description": "UTF-8 byte length.", + "type": "integer" + }, + "lines": { + "description": "Newline-delimited line count.", + "type": "integer" + }, + "paragraphs": { + "description": "Count of blank-line-separated paragraphs.", + "type": "integer" + }, + "sentences": { + "description": "Count of sentence-terminator runs.", + "type": "integer" + }, + "text": { + "description": "The randomized output text.", + "type": "string" + }, + "words": { + "description": "Count of alphabetic word runs.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Whether randomization succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_text_splitter4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "delimiter": { + "default": ",", + "description": "Literal delimiter used only when splitType is delimiter; an empty string returns the text unsplit.", + "type": "string" + }, + "maxSplits": { + "default": 0, + "description": "Maximum number of splits for delimiter/regex modes; 0 means no limit. Ignored for lines/words/characters.", + "minimum": 0, + "type": "integer" + }, + "regex": { + "default": "", + "description": "Pattern used only when splitType is regex; accepts a bare pattern or PHP-style /pattern/flags; an empty string returns the text unsplit.", + "type": "string" + }, + "removeEmpty": { + "default": true, + "description": "Drop empty parts after splitting (for characters mode, also drops spaces).", + "type": "boolean" + }, + "splitType": { + "default": "lines", + "description": "Split method. lines splits on newlines; words on whitespace runs; characters into single chars; delimiter on the literal delimiter value; regex on the regex pattern.", + "enum": [ + "lines", + "words", + "characters", + "delimiter", + "regex" + ], + "type": "string" + }, + "text": { + "description": "The text to split. Required and must be non-empty; a blank value returns a 400 error.", + "type": "string" + }, + "trimElements": { + "default": true, + "description": "Trim leading/trailing whitespace from each part (ignored for characters mode).", + "type": "boolean" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "The effective options echoed in camelCase.", + "properties": { + "delimiter": { + "description": "Delimiter used.", + "type": "string" + }, + "maxSplits": { + "description": "Split cap applied.", + "type": "integer" + }, + "regex": { + "description": "Regex pattern used.", + "type": "string" + }, + "removeEmpty": { + "description": "Whether empty parts were dropped.", + "type": "boolean" + }, + "splitType": { + "description": "Split method used.", + "type": "string" + }, + "trimElements": { + "description": "Whether parts were trimmed.", + "type": "boolean" + } + }, + "type": "object" + }, + "result": { + "description": "The resulting parts after splitting and applying remove-empty/trim options.", + "items": { + "type": "string" + }, + "type": "array" + }, + "stats": { + "description": "Metrics for the original text and the result.", + "properties": { + "original": { + "description": "Metrics of the input text before splitting.", + "properties": { + "characters": { + "description": "Character count of the input (same as length).", + "type": "integer" + }, + "length": { + "description": "Character count of the input.", + "type": "integer" + }, + "lines": { + "description": "Newline-delimited line count of the input.", + "type": "integer" + }, + "words": { + "description": "Count of alphabetic word runs in the input.", + "type": "integer" + } + }, + "type": "object" + }, + "result": { + "description": "Metrics of the produced parts.", + "properties": { + "avg_length": { + "description": "Mean part length, rounded to one decimal.", + "type": "number" + }, + "elements": { + "description": "Number of parts produced.", + "type": "integer" + }, + "max_length": { + "description": "Longest part length.", + "type": "integer" + }, + "min_length": { + "description": "Shortest part length.", + "type": "integer" + }, + "total_length": { + "description": "Sum of the character lengths of all parts.", + "type": "integer" + } + }, + "type": "object" + }, + "settings": { + "description": "The effective split settings (snake_case).", + "properties": { + "delimiter": { + "description": "Delimiter used.", + "type": "string" + }, + "max_splits": { + "description": "Split cap applied (0 = none).", + "type": "integer" + }, + "regex": { + "description": "Regex pattern used.", + "type": "string" + }, + "remove_empty": { + "description": "Whether empty parts were dropped.", + "type": "boolean" + }, + "split_type": { + "description": "Split method used.", + "type": "string" + }, + "trim_elements": { + "description": "Whether parts were trimmed.", + "type": "boolean" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Always true on success.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_text_statistics4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "includeReadability": { + "default": true, + "description": "When true, include the statistics.readability block (Flesch, Gunning Fog, Coleman-Liau, ARI). Set false to skip the readability computation.", + "type": "boolean" + }, + "includeSentiment": { + "default": false, + "description": "Reserved flag echoed back under options.includeSentiment; no sentiment block is produced.", + "type": "boolean" + }, + "text": { + "description": "The text to analyze. Must be non-empty; a blank value returns a 400 error.", + "examples": [ + "The quick brown fox jumps over the lazy dog." + ], + "minLength": 1, + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "Echoed request options.", + "properties": { + "includeReadability": { + "description": "Effective readability flag used.", + "type": "boolean" + }, + "includeSentiment": { + "description": "Effective sentiment flag (echo only).", + "type": "boolean" + }, + "textLength": { + "description": "UTF-8 length of the analyzed text.", + "type": "integer" + } + }, + "type": "object" + }, + "statistics": { + "description": "Nested metrics grouped by category.", + "properties": { + "advanced": { + "description": "Averages, lexical diversity, most-common words, longest/shortest word, word-length distribution.", + "type": "object" + }, + "basic": { + "description": "Core counts.", + "properties": { + "characters": { + "description": "Total UTF-8 character count.", + "type": "integer" + }, + "charactersWithoutSpaces": { + "description": "Characters excluding spaces.", + "type": "integer" + }, + "charactersWithoutWhitespace": { + "description": "Characters excluding all whitespace.", + "type": "integer" + }, + "lines": { + "description": "Total line count.", + "type": "integer" + }, + "nonEmptyLines": { + "description": "Lines with non-whitespace content.", + "type": "integer" + }, + "paragraphs": { + "description": "Non-empty paragraph count.", + "type": "integer" + }, + "sentences": { + "description": "Sentence count (split on . ! ?).", + "type": "integer" + }, + "uniqueWords": { + "description": "Distinct lowercased words.", + "type": "integer" + }, + "words": { + "description": "Word count (A-Za-z runs).", + "type": "integer" + } + }, + "type": "object" + }, + "characters": { + "description": "Per-class counts (letters, digits, spaces, punctuation, uppercase, lowercase, special) and most-common characters.", + "type": "object" + }, + "readability": { + "description": "Present only when includeReadability is true. Flesch Reading Ease, Flesch-Kincaid grade, Gunning Fog, Coleman-Liau, Automated Readability, plus interpretation. Score fields are null when the text has no words/sentences.", + "type": "object" + }, + "time": { + "description": "Reading and speaking time estimates at multiple WPM speeds (minutes, formatted, wpm).", + "type": "object" + }, + "words": { + "description": "Word totals, average/shortest/longest length, and length-category buckets.", + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "True when analysis succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_text_trimmer16 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / customCharacters / defaultAdded value: +"" - added
Input schema / properties / customCharacters / descriptionAdded value: +"Extra characters to trim, added to the whitespace set. If set and trimWhitespace is false, only these characters are trimmed." - added
Input schema / properties / preserveIndentation / defaultAdded value: +false - added
Input schema / properties / preserveIndentation / descriptionAdded value: +"Keep leading indentation; for both/left trim types only trailing whitespace is affected." - added
Input schema / properties / text / descriptionAdded value: +"The text to trim. Processed line by line, split on newlines." - added
Input schema / properties / text / examplesAdded value: +[ + " hello world " +] - added
Input schema / properties / trimEmptyLines / defaultAdded value: +false - added
Input schema / properties / trimEmptyLines / descriptionAdded value: +"Also drop lines that are empty or whitespace-only." - added
Input schema / properties / trimType / defaultAdded value: +"both" - added
Input schema / properties / trimType / descriptionAdded value: +"Where to trim on each line. both trims both ends (right-only when preserveIndentation is true); left/leading trims the start; right/trailing trims the end; all removes every occurrence of the trim characters anywhere in the line." - added
Input schema / properties / trimType / enumAdded value: +[ + "both", + "left", + "leading", + "right", + "trailing", + "all" +] - added
Input schema / properties / trimWhitespace / defaultAdded value: +true - added
Input schema / properties / trimWhitespace / descriptionAdded value: +"Include standard whitespace (space, tab, newline, CR, null, vtab) in the trim set." - changed
Input schema / requiredPrevious value: -[ - "text", - "trimType", - "trimWhitespace", - "trimEmptyLines", - "customCharacters", - "preserveIndentation" -]New value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "Echo of the effective options used.", + "properties": { + "customCharacters": { + "type": "string" + }, + "preserveIndentation": { + "type": "boolean" + }, + "trimEmptyLines": { + "type": "boolean" + }, + "trimType": { + "type": "string" + }, + "trimWhitespace": { + "type": "boolean" + } + }, + "type": "object" + }, + "result": { + "description": "The trimmed output text.", + "type": "string" + }, + "stats": { + "description": "Before/after statistics and change counts.", + "properties": { + "changes": { + "properties": { + "charactersRemoved": { + "description": "Total characters removed.", + "type": "integer" + }, + "emptyLinesRemoved": { + "description": "Blank/whitespace-only lines removed.", + "type": "integer" + }, + "linesRemoved": { + "description": "Number of lines removed (via trimEmptyLines).", + "type": "integer" + }, + "spacesRemoved": { + "description": "Whitespace/trim characters removed.", + "type": "integer" + } + }, + "type": "object" + }, + "original": { + "description": "Stats for the input text: text, lines, characters, words, emptyLines, leadingSpaces, trailingSpaces.", + "type": "object" + }, + "result": { + "description": "Stats for the trimmed text: text, lines, characters, words, emptyLines, leadingSpaces, trailingSpaces.", + "type": "object" + } + }, + "type": "object" + }, + "success": { + "description": "Whether trimming succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
text_word_frequency4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "caseSensitive": { + "default": false, + "description": "When true, treat differing letter case as distinct words; when false, lowercase every word before counting.", + "type": "boolean" + }, + "ignoreCommonWords": { + "default": false, + "description": "When true, exclude a built-in list of about 80 common English stop words (the, and, of, to, and similar) from the results.", + "type": "boolean" + }, + "maxResults": { + "default": 100, + "description": "Maximum number of word rows to return after sorting.", + "minimum": 1, + "type": "integer" + }, + "minWordLength": { + "default": 1, + "description": "Minimum character length a word must have to be counted; values above 1 filter out shorter words.", + "minimum": 1, + "type": "integer" + }, + "sortOrder": { + "default": "frequency", + "description": "Result ordering: frequency sorts most-frequent first; alphabetical sorts words A to Z.", + "enum": [ + "frequency", + "alphabetical" + ], + "type": "string" + }, + "text": { + "description": "Text to analyze. Words are extracted as runs of letters and digits; punctuation is treated as a separator. Must not be blank.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "text" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "options": { + "description": "The effective request options after defaults were applied.", + "properties": { + "caseSensitive": { + "description": "Whether case was preserved when counting.", + "type": "boolean" + }, + "ignoreCommonWords": { + "description": "Whether common stop words were excluded.", + "type": "boolean" + }, + "maxResults": { + "description": "Row cap that was applied.", + "type": "integer" + }, + "minWordLength": { + "description": "Minimum word length that was applied.", + "type": "integer" + }, + "sortOrder": { + "description": "Ordering that was applied (frequency or alphabetical).", + "type": "string" + } + }, + "type": "object" + }, + "results": { + "description": "Ranked word rows, ordered per sortOrder and capped at maxResults.", + "items": { + "properties": { + "frequency": { + "description": "Number of times the word occurs in the processed text.", + "type": "integer" + }, + "percentage": { + "description": "Word frequency as a percentage of total processed words, rounded to 2 decimals.", + "type": "number" + }, + "rank": { + "description": "Position of the word in the sorted results, starting at 1.", + "type": "integer" + }, + "word": { + "description": "The counted word (lowercased unless caseSensitive is true).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "statistics": { + "description": "Aggregate metrics for the processed text.", + "properties": { + "averageFrequency": { + "description": "Mean frequency per unique word, rounded to 2 decimals.", + "type": "number" + }, + "leastFrequent": { + "description": "Lowest single-word frequency among the returned results.", + "type": "integer" + }, + "lexicalDiversity": { + "description": "Unique words divided by total processed words, rounded to 4 decimals.", + "type": "number" + }, + "mostFrequent": { + "description": "Highest single-word frequency among the returned results.", + "type": "integer" + }, + "totalOriginalWords": { + "description": "Count of letter-only words in the raw input before filtering.", + "type": "integer" + }, + "totalWordsProcessed": { + "description": "Count of words remaining after case, length, and stop-word filtering.", + "type": "integer" + }, + "uniqueWords": { + "description": "Number of distinct words in the returned results.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "Whether the analysis succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
time_age_calculator23 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / asOfDayAdded value: +{ + "description": "Reference day 1-31 for compute. Omit all asOf* to use today (UTC).", + "maximum": 31, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / asOfMonthAdded value: +{ + "description": "Reference month 1-12 for compute. Omit all asOf* to use today (UTC).", + "maximum": 12, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / asOfYearAdded value: +{ + "description": "Reference year for compute. Omit all asOf* to use today (UTC).", + "maximum": 9999, + "minimum": -9999, + "type": "integer" +} - added
Input schema / properties / birthDay / descriptionAdded value: +"Birth day 1-31; must be a real calendar date. Required when operation is compute." - added
Input schema / properties / birthDay / maximumAdded value: +31 - added
Input schema / properties / birthDay / minimumAdded value: +1 - added
Input schema / properties / birthMonth / descriptionAdded value: +"Birth month 1-12. Required when operation is compute." - added
Input schema / properties / birthMonth / maximumAdded value: +12 - added
Input schema / properties / birthMonth / minimumAdded value: +1 - added
Input schema / properties / birthYear / descriptionAdded value: +"Birth year (proleptic Gregorian). Required when operation is compute." - added
Input schema / properties / birthYear / maximumAdded value: +9999 - added
Input schema / properties / birthYear / minimumAdded value: +-9999 - added
Input schema / properties / fromDayAdded value: +{ + "description": "Start day 1-31. Required when operation is yearsBetween.", + "maximum": 31, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / fromMonthAdded value: +{ + "description": "Start month 1-12. Required when operation is yearsBetween.", + "maximum": 12, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / fromYearAdded value: +{ + "description": "Start year. Required when operation is yearsBetween.", + "maximum": 9999, + "minimum": -9999, + "type": "integer" +} - added
Input schema / properties / operation / descriptionAdded value: +"\"compute\": age/elapsed time from a birth date (needs birthYear/Month/Day; optional asOf*). \"yearsBetween\": span between two dates (needs from* and to*)." - added
Input schema / properties / operation / enumAdded value: +[ + "compute", + "yearsBetween" +] - added
Input schema / properties / toDayAdded value: +{ + "description": "End day 1-31. Required when operation is yearsBetween.", + "maximum": 31, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / toMonthAdded value: +{ + "description": "End month 1-12. Required when operation is yearsBetween.", + "maximum": 12, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / toYearAdded value: +{ + "description": "End year. Required when operation is yearsBetween.", + "maximum": 9999, + "minimum": -9999, + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "birthYear", - "birthMonth", - "birthDay" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Result payload; shape depends on operation.", + "properties": { + "asOf": { + "description": "Reference date as year/month/day/isoDate (compute only).", + "type": "object" + }, + "birth": { + "description": "Birth date as year/month/day/isoDate (compute only).", + "type": "object" + }, + "bornOnDayOfWeek": { + "description": "Weekday name the birth date fell on (compute only).", + "type": "string" + }, + "days": { + "description": "Remaining days after months.", + "type": "integer" + }, + "from": { + "description": "Start date as year/month/day/isoDate (yearsBetween only).", + "type": "object" + }, + "months": { + "description": "Remaining whole months after years (0-11).", + "type": "integer" + }, + "nextBirthday": { + "description": "Upcoming birthday info (compute only): isoDate, daysUntil, dayOfWeek.", + "type": "object" + }, + "to": { + "description": "End date as year/month/day/isoDate (yearsBetween only).", + "type": "object" + }, + "totalDays": { + "description": "Total elapsed days between the two dates.", + "type": "integer" + }, + "totalHours": { + "description": "Total elapsed hours (compute only).", + "type": "integer" + }, + "totalMinutes": { + "description": "Total elapsed minutes (compute only).", + "type": "integer" + }, + "totalMonths": { + "description": "Total elapsed whole months (compute only).", + "type": "integer" + }, + "totalSeconds": { + "description": "Total elapsed seconds (compute only).", + "type": "integer" + }, + "totalWeeks": { + "description": "Total whole weeks elapsed (compute only).", + "type": "integer" + }, + "years": { + "description": "Whole years in the calendar breakdown.", + "type": "integer" + }, + "zodiacChinese": { + "description": "Decorative chinese zodiac animal by Gregorian year (compute only).", + "type": "string" + }, + "zodiacWestern": { + "description": "Decorative western tropical zodiac sign (compute only).", + "type": "string" + } + }, + "type": "object" + }, + "operation": { + "description": "The operation that was run, echoed back (compute or yearsBetween).", + "type": "string" + } + }, + "type": "object" +}
- Changed
time_cron_parser7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / countAdded value: +{ + "default": 5, + "description": "nextRuns only: how many upcoming firing times to return.", + "maximum": 50, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / expression / descriptionAdded value: +"Cron expression to parse. Five fields (minute hour dayOfMonth month dayOfWeek) or six with a leading seconds column. Must not be blank." - added
Input schema / properties / fromIsoAdded value: +{ + "description": "nextRuns only: ISO 8601 start instant to search forward from. Defaults to the current time when omitted.", + "format": "date-time", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / operation / descriptionAdded value: +"Which action to run: describe for the field breakdown plus English summary, nextRuns for upcoming UTC firing times." - added
Input schema / properties / operation / enumAdded value: +[ + "describe", + "nextRuns" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Operation-specific result. describe returns expression/normalized/description/isStandardForm/fields; nextRuns returns expression/fromIso/count/runs.", + "properties": { + "count": { + "description": "nextRuns: number of firing times returned.", + "type": "integer" + }, + "description": { + "description": "describe: plain-English summary of the schedule.", + "type": "string" + }, + "expression": { + "description": "The trimmed cron expression that was parsed.", + "type": "string" + }, + "fields": { + "description": "describe: per-field raw token and expanded integer values (seconds present only for 6-field input).", + "type": "object" + }, + "fromIso": { + "description": "nextRuns: the resolved UTC start instant as an ISO 8601 Z timestamp.", + "type": "string" + }, + "isStandardForm": { + "description": "describe: true for a 5-field expression, false when a seconds column is present.", + "type": "boolean" + }, + "normalized": { + "description": "describe: the space-normalized expression.", + "type": "string" + }, + "runs": { + "description": "nextRuns: upcoming firing times as ISO 8601 Z timestamps.", + "items": { + "description": "An upcoming firing time as an ISO 8601 Z timestamp.", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "operation": { + "description": "The operation that was run (describe or nextRuns).", + "type": "string" + } + }, + "type": "object" +}
- Changed
time_date_calculator29 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / day / descriptionAdded value: +"Base date day of month; must be a real calendar day for the given year/month." - added
Input schema / properties / day / maximumAdded value: +31 - added
Input schema / properties / day / minimumAdded value: +1 - added
Input schema / properties / days / descriptionAdded value: +"Days to shift. For add/subtract, a calendar-day component in -1000..1000 (default 0); for addBusinessDays, a signed weekday-only count in -100000..100000 (negative walks backward). For add/subtract, at least one of years/months/weeks/days must be non-zero." - added
Input schema / properties / days / maximumAdded value: +100000 - added
Input schema / properties / days / minimumAdded value: +-100000 - added
Input schema / properties / month / descriptionAdded value: +"Base date month, 1 (January) to 12 (December)." - added
Input schema / properties / month / maximumAdded value: +12 - added
Input schema / properties / month / minimumAdded value: +1 - added
Input schema / properties / months / defaultAdded value: +0 - added
Input schema / properties / months / descriptionAdded value: +"Months to add (add/subtract only; ignored for addBusinessDays)." - added
Input schema / properties / months / maximumAdded value: +1000 - added
Input schema / properties / months / minimumAdded value: +-1000 - added
Input schema / properties / operation / descriptionAdded value: +"Which calculation to run: \"add\" or \"subtract\" a calendar duration, or \"addBusinessDays\" to shift by weekday-only days." - added
Input schema / properties / operation / enumAdded value: +[ + "add", + "subtract", + "addBusinessDays" +] - added
Input schema / properties / weeks / defaultAdded value: +0 - added
Input schema / properties / weeks / descriptionAdded value: +"Weeks to add (add/subtract only; ignored for addBusinessDays)." - added
Input schema / properties / weeks / maximumAdded value: +1000 - added
Input schema / properties / weeks / minimumAdded value: +-1000 - added
Input schema / properties / year / descriptionAdded value: +"Base date year (proleptic Gregorian)." - added
Input schema / properties / year / maximumAdded value: +9999 - added
Input schema / properties / year / minimumAdded value: +-9999 - added
Input schema / properties / years / defaultAdded value: +0 - added
Input schema / properties / years / descriptionAdded value: +"Years to add (add/subtract only; ignored for addBusinessDays)." - added
Input schema / properties / years / maximumAdded value: +1000 - added
Input schema / properties / years / minimumAdded value: +-1000 - changed
Input schema / requiredPrevious value: -[ - "operation", - "year", - "month", - "day", - "years", - "months", - "weeks", - "days" -]New value: +[ + "operation", + "year", + "month", + "day" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Result payload. Always includes base and result; add/subtract add totalDaysAdded and breakdown, addBusinessDays adds daysAdded, weekendsSkipped, and totalCalendarDaysShifted.", + "properties": { + "base": { + "description": "The supplied base date.", + "properties": { + "day": { + "description": "Base date day of month.", + "type": "integer" + }, + "dayOfWeek": { + "description": "Base date weekday name, Sunday-Saturday.", + "type": "string" + }, + "isoDate": { + "description": "Base date as YYYY-MM-DD (UTC).", + "type": "string" + }, + "month": { + "description": "Base date month, 1-12.", + "type": "integer" + }, + "year": { + "description": "Base date year.", + "type": "integer" + } + }, + "type": "object" + }, + "breakdown": { + "description": "add/subtract only: the input duration as given.", + "properties": { + "days": { + "description": "Days component as supplied.", + "type": "integer" + }, + "months": { + "description": "Months component as supplied.", + "type": "integer" + }, + "weeks": { + "description": "Weeks component as supplied.", + "type": "integer" + }, + "years": { + "description": "Years component as supplied.", + "type": "integer" + } + }, + "type": "object" + }, + "daysAdded": { + "description": "addBusinessDays only: signed business-day count as supplied.", + "type": "integer" + }, + "result": { + "description": "The resulting date after the shift.", + "properties": { + "day": { + "description": "Result day of month.", + "type": "integer" + }, + "dayOfWeek": { + "description": "Result weekday name, Sunday-Saturday.", + "type": "string" + }, + "isoDate": { + "description": "Result date as YYYY-MM-DD (UTC).", + "type": "string" + }, + "month": { + "description": "Result month, 1-12.", + "type": "integer" + }, + "year": { + "description": "Result year.", + "type": "integer" + } + }, + "type": "object" + }, + "totalCalendarDaysShifted": { + "description": "addBusinessDays only: total calendar days walked (business days plus weekends skipped).", + "type": "integer" + }, + "totalDaysAdded": { + "description": "add/subtract only: signed (result - base) in whole days.", + "type": "integer" + }, + "weekendsSkipped": { + "description": "addBusinessDays only: number of weekend days walked over.", + "type": "integer" + } + }, + "type": "object" + }, + "operation": { + "description": "Echo of the requested operation (add, subtract, or addBusinessDays).", + "type": "string" + } + }, + "type": "object" +}
- Changed
time_date_difference27 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / dayAdded value: +{ + "description": "Base-date day 1-31; must be a real calendar date. Required when operation is addDuration or subtractDuration.", + "maximum": 31, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / durationAdded value: +{ + "additionalProperties": false, + "description": "Signed duration to apply. Required when operation is addDuration or subtractDuration. Each component defaults to 0 and may be negative.", + "properties": { + "days": { + "default": 0, + "description": "Whole days to add/subtract (signed).", + "type": "integer" + }, + "months": { + "default": 0, + "description": "Whole months to add/subtract, month-clamped (signed).", + "type": "integer" + }, + "weeks": { + "default": 0, + "description": "Whole weeks (each 7 days) to add/subtract (signed).", + "type": "integer" + }, + "years": { + "default": 0, + "description": "Whole years to add/subtract (signed).", + "type": "integer" + } + }, + "type": "object" +} - added
Input schema / properties / fromDay / descriptionAdded value: +"Start-date day 1-31; must be a real calendar date. Required when operation is diff." - added
Input schema / properties / fromDay / maximumAdded value: +31 - added
Input schema / properties / fromDay / minimumAdded value: +1 - added
Input schema / properties / fromMonth / descriptionAdded value: +"Start-date month 1-12. Required when operation is diff." - added
Input schema / properties / fromMonth / maximumAdded value: +12 - added
Input schema / properties / fromMonth / minimumAdded value: +1 - added
Input schema / properties / fromYear / descriptionAdded value: +"Start-date year (proleptic Gregorian). Required when operation is diff." - added
Input schema / properties / fromYear / maximumAdded value: +9999 - added
Input schema / properties / fromYear / minimumAdded value: +-9999 - added
Input schema / properties / monthAdded value: +{ + "description": "Base-date month 1-12. Required when operation is addDuration or subtractDuration.", + "maximum": 12, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / operation / descriptionAdded value: +"\"diff\": gap between two dates (needs from* and to*). \"addDuration\"/\"subtractDuration\": apply duration to a base date (needs year/month/day and duration)." - added
Input schema / properties / operation / enumAdded value: +[ + "diff", + "addDuration", + "subtractDuration" +] - added
Input schema / properties / toDay / descriptionAdded value: +"End-date day 1-31. Required when operation is diff." - added
Input schema / properties / toDay / maximumAdded value: +31 - added
Input schema / properties / toDay / minimumAdded value: +1 - added
Input schema / properties / toMonth / descriptionAdded value: +"End-date month 1-12. Required when operation is diff." - added
Input schema / properties / toMonth / maximumAdded value: +12 - added
Input schema / properties / toMonth / minimumAdded value: +1 - added
Input schema / properties / toYear / descriptionAdded value: +"End-date year. Required when operation is diff." - added
Input schema / properties / toYear / maximumAdded value: +9999 - added
Input schema / properties / toYear / minimumAdded value: +-9999 - added
Input schema / properties / yearAdded value: +{ + "description": "Base-date year. Required when operation is addDuration or subtractDuration.", + "maximum": 9999, + "minimum": -9999, + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "fromYear", - "fromMonth", - "fromDay", - "toYear", - "toMonth", - "toDay" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Result payload; shape depends on operation.", + "properties": { + "absolute": { + "description": "Absolute-magnitude totals over the interval (diff only).", + "properties": { + "businessDays": { + "description": "Mon-Fri days inclusive between the dates; no holiday exclusion.", + "type": "integer" + }, + "totalDays": { + "description": "Total whole days between the two dates.", + "type": "integer" + }, + "totalHours": { + "description": "Total hours (totalDays * 24).", + "type": "integer" + }, + "totalMinutes": { + "description": "Total minutes.", + "type": "integer" + }, + "totalSeconds": { + "description": "Total seconds.", + "type": "integer" + }, + "totalWeeks": { + "description": "Total whole weeks (floor of totalDays/7).", + "type": "integer" + }, + "weeksAndDays": { + "description": "Weeks plus remainder days as weeks and days fields.", + "type": "object" + } + }, + "type": "object" + }, + "calendar": { + "description": "Non-negative calendar gap (diff only).", + "properties": { + "days": { + "description": "Remaining days after months.", + "type": "integer" + }, + "months": { + "description": "Remaining whole months after years (0-11).", + "type": "integer" + }, + "years": { + "description": "Whole years in the calendar gap.", + "type": "integer" + } + }, + "type": "object" + }, + "day": { + "description": "Resulting day of month (addDuration/subtractDuration only).", + "type": "integer" + }, + "dayOfWeek": { + "description": "Resulting weekday name (addDuration/subtractDuration only).", + "type": "string" + }, + "direction": { + "description": "Orientation of the two dates: forward (from<to), backward (from>to), or same (diff only).", + "enum": [ + "forward", + "backward", + "same" + ], + "type": "string" + }, + "from": { + "description": "Start date as year/month/day/isoDate/dayOfWeek (diff only).", + "type": "object" + }, + "isoDate": { + "description": "Resulting date as YYYY-MM-DD (addDuration/subtractDuration only).", + "type": "string" + }, + "month": { + "description": "Resulting month 1-12 (addDuration/subtractDuration only).", + "type": "integer" + }, + "to": { + "description": "End date as year/month/day/isoDate/dayOfWeek (diff only).", + "type": "object" + }, + "year": { + "description": "Resulting year (addDuration/subtractDuration only).", + "type": "integer" + } + }, + "type": "object" + }, + "operation": { + "description": "The operation that was run, echoed back (diff, addDuration, or subtractDuration).", + "type": "string" + } + }, + "type": "object" +}
- Changed
time_day_of_week21 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / countAdded value: +{ + "description": "Scan mode only. Non-zero signed count of same-weekday occurrences; positive scans forward, negative backward.", + "maximum": 366, + "minimum": -366, + "type": "integer" +} - added
Input schema / properties / day / descriptionAdded value: +"Day of month (weekday and scan modes); must be a real day for that month." - added
Input schema / properties / day / maximumAdded value: +31 - added
Input schema / properties / day / minimumAdded value: +1 - added
Input schema / properties / fromDayAdded value: +{ + "description": "Distance mode only. Day of month of the start date.", + "maximum": 31, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / fromMonthAdded value: +{ + "description": "Distance mode only. Month of the start date, 1 to 12.", + "maximum": 12, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / fromYearAdded value: +{ + "description": "Distance mode only. Year of the start date.", + "maximum": 9999, + "minimum": -9999, + "type": "integer" +} - added
Input schema / properties / month / descriptionAdded value: +"Month of the date (weekday and scan modes), 1 to 12." - added
Input schema / properties / month / maximumAdded value: +12 - added
Input schema / properties / month / minimumAdded value: +1 - added
Input schema / properties / operation / descriptionAdded value: +"Mode: weekday returns the weekday for one date; scan lists N recurring weekday dates; distance measures the gap between two dates." - added
Input schema / properties / operation / enumAdded value: +[ + "weekday", + "scan", + "distance" +] - added
Input schema / properties / toDayAdded value: +{ + "description": "Distance mode only. Day of month of the end date.", + "maximum": 31, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / toMonthAdded value: +{ + "description": "Distance mode only. Month of the end date, 1 to 12.", + "maximum": 12, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / toYearAdded value: +{ + "description": "Distance mode only. Year of the end date.", + "maximum": 9999, + "minimum": -9999, + "type": "integer" +} - added
Input schema / properties / year / descriptionAdded value: +"Year of the date (weekday and scan modes). BCE allowed via 0 and negative values." - added
Input schema / properties / year / maximumAdded value: +9999 - added
Input schema / properties / year / minimumAdded value: +-9999 - changed
Input schema / requiredPrevious value: -[ - "operation", - "year", - "month", - "day" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Result payload; fields depend on the operation. Weekday fields shown below; scan adds from/dayOfWeek/count/occurrences, distance adds from/to/days/weeks/weekRemainder/sameWeekday.", + "properties": { + "count": { + "description": "Echoed signed occurrence count (scan mode).", + "type": "integer" + }, + "day": { + "description": "Echoed day (weekday mode).", + "type": "integer" + }, + "dayIndex": { + "description": "Weekday index, 0 = Sunday to 6 = Saturday (weekday mode).", + "type": "integer" + }, + "dayIndexISO": { + "description": "ISO weekday, 1 = Monday to 7 = Sunday (weekday mode).", + "type": "integer" + }, + "dayOfWeek": { + "description": "Weekday name, Sunday through Saturday.", + "type": "string" + }, + "dayOfYear": { + "description": "Ordinal day within the year, 1 to 366 (weekday mode).", + "type": "integer" + }, + "days": { + "description": "Signed calendar distance in days (distance mode).", + "type": "integer" + }, + "daysInMonth": { + "description": "Number of days in that month (weekday mode).", + "type": "integer" + }, + "from": { + "description": "Start date as ISO 8601 (scan and distance modes).", + "type": "string" + }, + "isWeekend": { + "description": "True when the date falls on Saturday or Sunday (weekday mode).", + "type": "boolean" + }, + "isoDate": { + "description": "The date as a sign-preserving ISO 8601 string (weekday mode).", + "type": "string" + }, + "month": { + "description": "Echoed month (weekday mode).", + "type": "integer" + }, + "occurrences": { + "description": "Same-weekday dates as ISO 8601 strings, chronologically ordered (scan mode).", + "items": { + "description": "An occurrence date in ISO 8601 format.", + "type": "string" + }, + "type": "array" + }, + "sameWeekday": { + "description": "True when both dates fall on the same weekday (distance mode).", + "type": "boolean" + }, + "to": { + "description": "End date as ISO 8601 (distance mode).", + "type": "string" + }, + "weekNumber": { + "description": "ISO 8601 week number (weekday mode).", + "type": "integer" + }, + "weekRemainder": { + "description": "Leftover days after whole weeks, so days equals weeks times 7 plus weekRemainder (distance mode).", + "type": "integer" + }, + "weeks": { + "description": "Whole weeks within the distance, truncated toward zero (distance mode).", + "type": "integer" + }, + "year": { + "description": "Echoed year (weekday mode).", + "type": "integer" + } + }, + "type": "object" + }, + "operation": { + "description": "The operation that was performed (weekday, scan, or distance).", + "type": "string" + } + }, + "type": "object" +}
- Changed
time_iso_8601_formatter12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / baseAdded value: +{ + "description": "Base date or datetime for 'add' (ISO 8601). Must be a date or datetime, not a duration or interval.", + "type": "string" +} - added
Input schema / properties / durationAdded value: +{ + "description": "ISO 8601 duration to add for 'add' (e.g. P1M, PT1H30M, -P10D). Leading minus subtracts.", + "type": "string" +} - added
Input schema / properties / input / descriptionAdded value: +"Operation payload. For 'parse' an ISO 8601 string (e.g. 2026-05-26T14:30:00+02:00, 2026-W22-2, P1Y2M3DT4H5M6S, or start/end). For 'format' a unix-milliseconds number or an object with year, month, day and optional hour/minute/second/ millisecond/offsetMinutes (or unixMs). For 'duration' an ISO duration string, a seconds number, or a duration object. Unused by 'add' and 'now'." - added
Input schema / properties / input / oneOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "object" + } +] - removed
Input schema / properties / input / typeRemoved value: -"string" - added
Input schema / properties / operation / defaultAdded value: +"parse" - added
Input schema / properties / operation / descriptionAdded value: +"Mode to run. 'parse' decodes an ISO string; 'format' renders to an ISO style; 'duration' normalises an ISO duration; 'add' adds a duration to a base instant; 'now' returns the current UTC instant (ignores all other fields)." - added
Input schema / properties / operation / enumAdded value: +[ + "parse", + "format", + "duration", + "add", + "now" +] - added
Input schema / properties / styleAdded value: +{ + "default": "extended", + "description": "Output style for 'format' only. 'rfc3339' forces a trailing Z when no offset is given.", + "enum": [ + "extended", + "basic", + "date-only", + "time-only", + "rfc3339", + "ordinal", + "week-date" + ], + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "input" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Error message when success is false.", + "type": "string" + }, + "operation": { + "description": "The operation that was run (echoed back).", + "type": "string" + }, + "result": { + "description": "Operation-specific output. parse returns input, kind (date/time/datetime/duration/interval/recurring), and optional date/time/offset/epochMs/utc/duration/ seconds/start/end fields. format returns iso. duration returns iso, human, seconds. add returns iso, utc. now returns isoUtc, isoLocalLike, epochMs.", + "properties": { + "epochMs": { + "description": "Unix milliseconds when resolvable (parse, now).", + "type": [ + "number", + "null" + ] + }, + "human": { + "description": "Human-readable duration (duration).", + "type": "string" + }, + "iso": { + "description": "Rendered ISO 8601 string (format, add).", + "type": "string" + }, + "isoUtc": { + "description": "Current UTC ISO string (now).", + "type": "string" + }, + "kind": { + "description": "Parsed value category (parse).", + "enum": [ + "date", + "time", + "datetime", + "duration", + "interval", + "recurring" + ], + "type": "string" + }, + "seconds": { + "description": "Total seconds for a duration or interval.", + "type": "number" + }, + "utc": { + "description": "UTC ISO string when an offset is known (add, parsed datetime).", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "success": { + "description": "True when the operation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
time_leap_year_checker12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / countAdded value: +{ + "description": "How many leap years to return (operation next only); integer from 1 to 50.", + "maximum": 50, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / fromAdded value: +{ + "description": "Inclusive start year of the scan (operation range only). Must be less than or equal to to.", + "maximum": 9999, + "minimum": -9999, + "type": "integer" +} - added
Input schema / properties / operation / descriptionAdded value: +"Which calculation to run: check tests one year, range lists leap years between from and to, next returns the next count leap years from startYear." - added
Input schema / properties / operation / enumAdded value: +[ + "check", + "range", + "next" +] - added
Input schema / properties / startYearAdded value: +{ + "description": "First year considered when collecting upcoming leap years (operation next only); the start year itself is included if it is a leap year.", + "maximum": 9999, + "minimum": -9999, + "type": "integer" +} - added
Input schema / properties / toAdded value: +{ + "description": "Inclusive end year of the scan (operation range only). Must be greater than or equal to from.", + "maximum": 9999, + "minimum": -9999, + "type": "integer" +} - added
Input schema / properties / year / descriptionAdded value: +"Year to test (operation check only). Required for check; integer from -9999 to 9999, negative for BCE." - added
Input schema / properties / year / maximumAdded value: +9999 - added
Input schema / properties / year / minimumAdded value: +-9999 - removed
Input schema / requiredRemoved value: -[ - "operation", - "year" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Operation-specific result payload.", + "properties": { + "count": { + "description": "range only: number of leap years found; next only: number requested.", + "type": "integer" + }, + "from": { + "description": "range only: inclusive start year of the scan.", + "type": "integer" + }, + "isLeap": { + "description": "check only: true if year is a leap year.", + "type": "boolean" + }, + "leapYears": { + "description": "range only: every leap year in the inclusive range, ascending.", + "items": { + "type": "integer" + }, + "type": "array" + }, + "reason": { + "description": "check only: which Gregorian divisibility rule decided the result.", + "type": "string" + }, + "startYear": { + "description": "next only: the start year used for the search.", + "type": "integer" + }, + "to": { + "description": "range only: inclusive end year of the scan.", + "type": "integer" + }, + "year": { + "description": "check only: the year that was tested.", + "type": "integer" + }, + "years": { + "description": "next only: the next leap years at or after startYear, ascending.", + "items": { + "type": "integer" + }, + "type": "array" + } + }, + "type": "object" + }, + "operation": { + "description": "The operation that was run (check, range, or next).", + "type": "string" + } + }, + "type": "object" +}
- Changed
time_time_duration23 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / aAdded value: +{ + "additionalProperties": false, + "description": "Minuend duration. Required when operation is subtract.", + "properties": { + "hours": { + "default": 0, + "description": "Hours component of a.", + "type": "number" + }, + "minutes": { + "default": 0, + "description": "Minutes component of a.", + "type": "number" + }, + "seconds": { + "default": 0, + "description": "Seconds component of a.", + "type": "number" + } + }, + "type": "object" +} - added
Input schema / properties / bAdded value: +{ + "additionalProperties": false, + "description": "Subtrahend duration. Required when operation is subtract.", + "properties": { + "hours": { + "default": 0, + "description": "Hours component of b.", + "type": "number" + }, + "minutes": { + "default": 0, + "description": "Minutes component of b.", + "type": "number" + }, + "seconds": { + "default": 0, + "description": "Seconds component of b.", + "type": "number" + } + }, + "type": "object" +} - added
Input schema / properties / crossesMidnightAdded value: +{ + "default": false, + "description": "For between only: when true and end<=start, add 24h to end so the span wraps past midnight.", + "type": "boolean" +} - added
Input schema / properties / divisorAdded value: +{ + "description": "Finite non-zero divisor. Required when operation is divide; must not be 0.", + "type": "number" +} - added
Input schema / properties / durationAdded value: +{ + "additionalProperties": false, + "description": "Duration operand for multiply/divide; if omitted the top-level hours/minutes/seconds are used instead.", + "properties": { + "hours": { + "default": 0, + "description": "Hours component (signed, may be fractional).", + "type": "number" + }, + "minutes": { + "default": 0, + "description": "Minutes component (signed).", + "type": "number" + }, + "seconds": { + "default": 0, + "description": "Seconds component (signed, may be fractional).", + "type": "number" + } + }, + "type": "object" +} - added
Input schema / properties / endAdded value: +{ + "additionalProperties": false, + "description": "End clock time. Required when operation is between.", + "properties": { + "hour": { + "default": 0, + "description": "Hour of day 0-23.", + "maximum": 23, + "minimum": 0, + "type": "integer" + }, + "minute": { + "default": 0, + "description": "Minute 0-59.", + "maximum": 59, + "minimum": 0, + "type": "integer" + }, + "second": { + "default": 0, + "description": "Second 0 to under 60; may be fractional.", + "maximum": 59.999999, + "minimum": 0, + "type": "number" + } + }, + "type": "object" +} - added
Input schema / properties / factorAdded value: +{ + "description": "Finite multiplier. Required when operation is multiply; may be negative or fractional.", + "type": "number" +} - added
Input schema / properties / hours / defaultAdded value: +0 - added
Input schema / properties / hours / descriptionAdded value: +"Hours component for compute/multiply/divide (used when duration object is omitted). Defaults to 0; may be fractional or negative." - changed
Input schema / properties / hours / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / itemsAdded value: +{ + "description": "Durations to sum. Required when operation is add; 2-100 entries.", + "items": { + "additionalProperties": false, + "properties": { + "hours": { + "default": 0, + "description": "Hours component of this duration.", + "type": "number" + }, + "minutes": { + "default": 0, + "description": "Minutes component of this duration.", + "type": "number" + }, + "seconds": { + "default": 0, + "description": "Seconds component of this duration.", + "type": "number" + } + }, + "type": "object" + }, + "maxItems": 100, + "minItems": 2, + "type": "array" +} - added
Input schema / properties / minutes / defaultAdded value: +0 - added
Input schema / properties / minutes / descriptionAdded value: +"Minutes component for compute/multiply/divide (used when duration object is omitted). Defaults to 0." - changed
Input schema / properties / minutes / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / operation / descriptionAdded value: +"\"compute\": normalize one duration (hours/minutes/seconds). \"add\": sum items. \"subtract\": a-b. \"multiply\": duration*factor. \"divide\": duration/divisor. \"between\": end-start of two clock times." - added
Input schema / properties / operation / enumAdded value: +[ + "compute", + "add", + "subtract", + "multiply", + "divide", + "between" +] - added
Input schema / properties / seconds / defaultAdded value: +0 - added
Input schema / properties / seconds / descriptionAdded value: +"Seconds component for compute/multiply/divide (used when duration object is omitted). Defaults to 0; may be fractional." - changed
Input schema / properties / seconds / typePrevious value: -"integer"New value: +"number" - added
Input schema / properties / startAdded value: +{ + "additionalProperties": false, + "description": "Start clock time. Required when operation is between.", + "properties": { + "hour": { + "default": 0, + "description": "Hour of day 0-23.", + "maximum": 23, + "minimum": 0, + "type": "integer" + }, + "minute": { + "default": 0, + "description": "Minute 0-59.", + "maximum": 59, + "minimum": 0, + "type": "integer" + }, + "second": { + "default": 0, + "description": "Second 0 to under 60; may be fractional.", + "maximum": 59.999999, + "minimum": 0, + "type": "number" + } + }, + "type": "object" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "hours", - "minutes", - "seconds" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Normalized duration result.", + "properties": { + "hhmmss": { + "description": "HH:MM:SS string from the unsigned magnitude; hours may exceed 99; prefixed with - when negative.", + "type": "string" + }, + "hms": { + "description": "Human-readable d/h/m/s form, sign-prefixed when negative.", + "type": "string" + }, + "iso8601": { + "description": "ISO 8601 duration PT[H][M][S]; PT0S for zero; prefixed with - when negative.", + "type": "string" + }, + "negative": { + "description": "True when the duration is less than zero.", + "type": "boolean" + }, + "normalized": { + "description": "Signed component breakdown of the duration.", + "properties": { + "days": { + "description": "Whole days (signed if duration is negative).", + "type": "integer" + }, + "hours": { + "description": "Whole hours after days (signed).", + "type": "integer" + }, + "minutes": { + "description": "Whole minutes after hours (signed).", + "type": "integer" + }, + "seconds": { + "description": "Seconds after minutes; may be fractional (signed).", + "type": "number" + } + }, + "type": "object" + }, + "totalDays": { + "description": "Whole duration in days (totalSeconds/86400).", + "type": "number" + }, + "totalHours": { + "description": "Whole duration in hours (totalSeconds/3600).", + "type": "number" + }, + "totalMinutes": { + "description": "Whole duration in minutes (totalSeconds/60).", + "type": "number" + }, + "totalSeconds": { + "description": "Whole duration in seconds (signed; may be fractional).", + "type": "number" + } + }, + "type": "object" + }, + "operation": { + "description": "The operation that was run, echoed back.", + "type": "string" + } + }, + "type": "object" +}
- Changed
time_timezone_converter27 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / day / descriptionAdded value: +"Wall-clock day 1-31; must be a real calendar date. Required for convert and compare." - added
Input schema / properties / day / maximumAdded value: +31 - added
Input schema / properties / day / minimumAdded value: +1 - added
Input schema / properties / fromTz / descriptionAdded value: +"Source IANA time zone name such as America/New_York. Required for convert." - added
Input schema / properties / hour / defaultAdded value: +0 - added
Input schema / properties / hour / descriptionAdded value: +"Wall-clock hour 0-23. Optional, defaults to 0." - added
Input schema / properties / hour / maximumAdded value: +23 - added
Input schema / properties / hour / minimumAdded value: +0 - added
Input schema / properties / minute / defaultAdded value: +0 - added
Input schema / properties / minute / descriptionAdded value: +"Wall-clock minute 0-59. Optional, defaults to 0." - added
Input schema / properties / minute / maximumAdded value: +59 - added
Input schema / properties / minute / minimumAdded value: +0 - added
Input schema / properties / month / descriptionAdded value: +"Wall-clock month 1-12. Required for convert and compare." - added
Input schema / properties / month / maximumAdded value: +12 - added
Input schema / properties / month / minimumAdded value: +1 - added
Input schema / properties / operation / descriptionAdded value: +"Mode to run. 'convert' converts one wall clock from fromTz to toTz. 'compare' renders the same instant across targetTzs. 'listSupportedTimezones' returns the curated IANA list and ignores all other fields." - added
Input schema / properties / operation / enumAdded value: +[ + "convert", + "compare", + "listSupportedTimezones" +] - added
Input schema / properties / secondAdded value: +{ + "default": 0, + "description": "Wall-clock second 0-59. Optional, defaults to 0.", + "maximum": 59, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / sourceTzAdded value: +{ + "description": "Source IANA time zone for the wall clock. Required for compare.", + "type": "string" +} - added
Input schema / properties / targetTzsAdded value: +{ + "description": "IANA time zone names to render the instant in, 1-12 entries. Required for compare.", + "items": { + "type": "string" + }, + "maxItems": 12, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / toTz / descriptionAdded value: +"Target IANA time zone name such as Europe/London. Required for convert." - added
Input schema / properties / year / descriptionAdded value: +"Wall-clock year 1900-2100. Required for convert and compare." - added
Input schema / properties / year / maximumAdded value: +2100 - added
Input schema / properties / year / minimumAdded value: +1900 - changed
Input schema / requiredPrevious value: -[ - "operation", - "year", - "month", - "day", - "hour", - "minute", - "fromTz", - "toTz" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Result payload; shape depends on operation (object for convert/compare, string array for listSupportedTimezones).", + "properties": { + "hoursDifference": { + "description": "Signed hours the target leads the source, target minus source (convert only).", + "type": "number" + }, + "results": { + "description": "One rendering per requested target zone (compare only).", + "items": { + "properties": { + "abbreviation": { + "description": "Zone abbreviation at this instant.", + "type": "string" + }, + "hoursDifference": { + "description": "Signed hours this zone leads the source.", + "type": "number" + }, + "isDst": { + "description": "True when daylight saving is in effect.", + "type": "boolean" + }, + "isoLocal": { + "description": "Wall-clock datetime in this zone, no offset suffix.", + "type": "string" + }, + "offset": { + "description": "UTC offset as +HH:MM or -HH:MM.", + "type": "string" + }, + "tz": { + "description": "IANA time zone name.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "source": { + "description": "Source zone rendering (convert and compare).", + "properties": { + "abbreviation": { + "description": "Zone abbreviation at this instant such as EDT or BST.", + "type": "string" + }, + "isDst": { + "description": "True when daylight saving is in effect at this instant.", + "type": "boolean" + }, + "isoLocal": { + "description": "Wall-clock datetime in this zone, no offset suffix.", + "type": "string" + }, + "offset": { + "description": "UTC offset as +HH:MM or -HH:MM.", + "type": "string" + }, + "tz": { + "description": "IANA time zone name.", + "type": "string" + } + }, + "type": "object" + }, + "target": { + "description": "Target zone rendering (convert only); same fields as source.", + "type": "object" + }, + "utcIso": { + "description": "The shared UTC instant as an ISO 8601 string ending in Z (convert and compare).", + "type": "string" + } + }, + "type": "object" + }, + "operation": { + "description": "The operation that was run, echoed back.", + "type": "string" + } + }, + "type": "object" +}
- Changed
time_week_number16 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / day / descriptionAdded value: +"Day 1-31; must be a real calendar date. Required when operation is fromDate." - added
Input schema / properties / day / maximumAdded value: +31 - added
Input schema / properties / day / minimumAdded value: +1 - added
Input schema / properties / month / descriptionAdded value: +"Month 1-12. Required when operation is fromDate." - added
Input schema / properties / month / maximumAdded value: +12 - added
Input schema / properties / month / minimumAdded value: +1 - added
Input schema / properties / operation / descriptionAdded value: +"\"fromDate\": week numbers for a date (needs year/month/day). \"toDate\": start/end dates of a week (needs scheme/year/week). \"weeksInYear\": week count for a scheme+year (needs scheme/year). \"weekRange\": every date in a week (needs scheme/year/week)." - added
Input schema / properties / operation / enumAdded value: +[ + "fromDate", + "toDate", + "weeksInYear", + "weekRange" +] - added
Input schema / properties / schemeAdded value: +{ + "default": "iso", + "description": "Week-numbering scheme. Required for toDate, weeksInYear, and weekRange; ignored by fromDate (which returns all four). iso = ISO 8601 Monday-start; us = Sunday-start week 1 holds Jan 1; simple = Jan 1-7 is week 1; epi = MMWR/CDC.", + "enum": [ + "iso", + "us", + "simple", + "epi" + ], + "type": "string" +} - added
Input schema / properties / weekAdded value: +{ + "description": "Week number 1-54; must not exceed the scheme/year week count. Required when operation is toDate or weekRange.", + "maximum": 54, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / year / descriptionAdded value: +"Calendar year in the proleptic Gregorian calendar. Required for every operation." - added
Input schema / properties / year / maximumAdded value: +9999 - added
Input schema / properties / year / minimumAdded value: +-9999 - changed
Input schema / requiredPrevious value: -[ - "operation", - "year", - "month", - "day" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Result payload; shape depends on operation.", + "properties": { + "date": { + "description": "Input date as YYYY-MM-DD (fromDate only).", + "type": "string" + }, + "dayOfWeekIso": { + "description": "ISO weekday of the date, Monday=1 to Sunday=7 (fromDate only).", + "type": "integer" + }, + "days": { + "description": "Every date in the week as YYYY-MM-DD strings (weekRange only).", + "items": { + "type": "string" + }, + "type": "array" + }, + "end": { + "description": "Week end date as YYYY-MM-DD (toDate and weekRange only).", + "type": "string" + }, + "epi": { + "description": "MMWR/epi week and week-year as week and year fields (fromDate only).", + "type": "object" + }, + "isLeapWeekYearIso": { + "description": "True when the ISO week-year is a 53-week long year (fromDate only).", + "type": "boolean" + }, + "iso": { + "description": "ISO 8601 week and week-year as week and year fields (fromDate only).", + "type": "object" + }, + "isoDate": { + "description": "Week start date as YYYY-MM-DD (toDate only).", + "type": "string" + }, + "scheme": { + "description": "Scheme echoed back for toDate, weeksInYear, and weekRange.", + "type": "string" + }, + "simple": { + "description": "Simple-scheme week and year as week and year fields (fromDate only).", + "type": "object" + }, + "start": { + "description": "Week start date as YYYY-MM-DD (weekRange only).", + "type": "string" + }, + "us": { + "description": "US-scheme week and week-year as week and year fields (fromDate only).", + "type": "object" + }, + "week": { + "description": "Week number echoed back (toDate and weekRange only).", + "type": "integer" + }, + "weeks": { + "description": "Total weeks in the scheme/year, 52, 53, or 54 (weeksInYear only).", + "type": "integer" + }, + "year": { + "description": "Year echoed back for toDate, weeksInYear, and weekRange.", + "type": "integer" + } + }, + "type": "object" + }, + "operation": { + "description": "The operation that was run, echoed back (fromDate, toDate, weeksInYear, or weekRange).", + "type": "string" + } + }, + "type": "object" +}
- Changed
time_working_days_calculator31 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / dayAdded value: +{ + "description": "Base-date day 1-31; must be a real calendar date. Required when operation is addWorkingDays.", + "maximum": 31, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / daysAdded value: +{ + "description": "Signed number of working days to add (positive) or subtract (negative); 0 returns the base date. Required when operation is addWorkingDays.", + "maximum": 100000, + "minimum": -100000, + "type": "integer" +} - added
Input schema / properties / fromDay / descriptionAdded value: +"Start-date day 1-31; must be a real calendar date. Required when operation is countBetween." - added
Input schema / properties / fromDay / maximumAdded value: +31 - added
Input schema / properties / fromDay / minimumAdded value: +1 - added
Input schema / properties / fromMonth / descriptionAdded value: +"Start-date month 1-12. Required when operation is countBetween." - added
Input schema / properties / fromMonth / maximumAdded value: +12 - added
Input schema / properties / fromMonth / minimumAdded value: +1 - added
Input schema / properties / fromYear / descriptionAdded value: +"Start-date year (proleptic Gregorian). Required when operation is countBetween." - added
Input schema / properties / fromYear / maximumAdded value: +9999 - added
Input schema / properties / fromYear / minimumAdded value: +-9999 - added
Input schema / properties / holidays / descriptionAdded value: +"Optional dates to treat as non-working days, in addition to weekends. Duplicates are deduped; each must be a real calendar date." - added
Input schema / properties / holidays / items / descriptionAdded value: +"Holiday date as YYYY-MM-DD." - added
Input schema / properties / holidays / items / formatAdded value: +"date" - added
Input schema / properties / holidays / maxItemsAdded value: +1000 - added
Input schema / properties / monthAdded value: +{ + "description": "Base-date month 1-12. Required when operation is addWorkingDays.", + "maximum": 12, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / operation / descriptionAdded value: +"\"countBetween\": count working days between two dates (needs from* and to*). \"addWorkingDays\": shift a base date by working days (needs year/month/day and days)." - added
Input schema / properties / operation / enumAdded value: +[ + "countBetween", + "addWorkingDays" +] - added
Input schema / properties / toDay / descriptionAdded value: +"End-date day 1-31. Required when operation is countBetween." - added
Input schema / properties / toDay / maximumAdded value: +31 - added
Input schema / properties / toDay / minimumAdded value: +1 - added
Input schema / properties / toMonth / descriptionAdded value: +"End-date month 1-12. Required when operation is countBetween." - added
Input schema / properties / toMonth / maximumAdded value: +12 - added
Input schema / properties / toMonth / minimumAdded value: +1 - added
Input schema / properties / toYear / descriptionAdded value: +"End-date year; must be on or after the from date. Required when operation is countBetween." - added
Input schema / properties / toYear / maximumAdded value: +9999 - added
Input schema / properties / toYear / minimumAdded value: +-9999 - added
Input schema / properties / yearAdded value: +{ + "description": "Base-date year. Required when operation is addWorkingDays.", + "maximum": 9999, + "minimum": -9999, + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "operation", - "fromYear", - "fromMonth", - "fromDay", - "toYear", - "toMonth", - "toDay", - "holidays" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Result payload; shape depends on operation.", + "properties": { + "base": { + "description": "Base date as year/month/day/isoDate/dayOfWeek (addWorkingDays only).", + "type": "object" + }, + "daysAdded": { + "description": "Signed working-days input, echoed back (addWorkingDays only).", + "type": "integer" + }, + "from": { + "description": "Start date as year/month/day/isoDate/dayOfWeek (countBetween only).", + "type": "object" + }, + "holidayDaysCounted": { + "description": "Weekday holidays in range that reduced the working count (countBetween only).", + "type": "integer" + }, + "holidaysInRange": { + "description": "Listed holidays (YYYY-MM-DD) that fell in the range (countBetween only).", + "items": { + "type": "string" + }, + "type": "array" + }, + "holidaysSkipped": { + "description": "Listed holidays stepped over (addWorkingDays only).", + "type": "integer" + }, + "result": { + "description": "Resulting date as year/month/day/isoDate/dayOfWeek (addWorkingDays only).", + "type": "object" + }, + "to": { + "description": "End date as year/month/day/isoDate/dayOfWeek (countBetween only).", + "type": "object" + }, + "totalCalendarDays": { + "description": "Inclusive calendar-day count in the range (countBetween only).", + "type": "integer" + }, + "totalCalendarDaysShifted": { + "description": "Absolute calendar-day shift from base to result (addWorkingDays only).", + "type": "integer" + }, + "weekendDays": { + "description": "Saturday+Sunday days in the range (countBetween only).", + "type": "integer" + }, + "weekendsSkipped": { + "description": "Saturday+Sunday days stepped over (addWorkingDays only).", + "type": "integer" + }, + "workingDays": { + "description": "Working days = total - weekend - holidayDaysCounted (countBetween only).", + "type": "integer" + } + }, + "type": "object" + }, + "operation": { + "description": "The operation that was run, echoed back (countBetween or addWorkingDays).", + "type": "string" + } + }, + "type": "object" +}
- Changed
time_world_clock10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / iso / descriptionAdded value: +"Optional ISO 8601 instant to render. When omitted or empty the server current time is used, making the result non-idempotent. Supply it to pin a fixed instant." - added
Input schema / properties / iso / formatAdded value: +"date-time" - added
Input schema / properties / operation / descriptionAdded value: +"Mode to run. 'snapshot' renders the instant across the 'tzs' zones. 'listSupportedTimezones' returns the curated IANA list and ignores all other fields." - added
Input schema / properties / operation / enumAdded value: +[ + "snapshot", + "listSupportedTimezones" +] - added
Input schema / properties / tzs / descriptionAdded value: +"IANA time zone names to render, 1-12 entries such as America/New_York or Asia/Tokyo. Required for snapshot." - added
Input schema / properties / tzs / maxItemsAdded value: +12 - added
Input schema / properties / tzs / minItemsAdded value: +1 - changed
Input schema / requiredPrevious value: -[ - "operation", - "iso", - "tzs" -]New value: +[ + "operation" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "Result payload; an object for snapshot, a string array for listSupportedTimezones.", + "properties": { + "iso": { + "description": "The rendered instant as an ISO 8601 string ending in Z (snapshot only).", + "type": "string" + }, + "results": { + "description": "One rendering per requested zone (snapshot only).", + "items": { + "properties": { + "abbreviation": { + "description": "Zone abbreviation at this instant such as EST or JST.", + "type": "string" + }, + "isDst": { + "description": "True when daylight saving is in effect at this instant.", + "type": "boolean" + }, + "isoLocal": { + "description": "Wall-clock datetime in this zone, no offset suffix.", + "type": "string" + }, + "offset": { + "description": "UTC offset as +HH:MM or -HH:MM.", + "type": "string" + }, + "tz": { + "description": "IANA time zone name.", + "type": "string" + }, + "weekday": { + "description": "Full weekday name at this instant such as Monday.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "tzs": { + "description": "The resolved IANA zone names that were rendered (snapshot only).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "operation": { + "description": "The operation that was run, echoed back.", + "type": "string" + } + }, + "type": "object" +}
- Changed
web_dev_html_to_markdown14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / html / descriptionAdded value: +"The HTML source to convert. Required and must be non-empty, or a 400 is returned." - added
Input schema / properties / html / examplesAdded value: +[ + "<h1>Title</h1><p>Hello <b>world</b></p>" +] - added
Input schema / properties / options / additionalPropertiesAdded value: +false - added
Input schema / properties / options / descriptionAdded value: +"Reserved options. Currently accepted but ignored; output is identical whether or not they are set." - added
Input schema / properties / options / properties / includeStats / defaultAdded value: +true - added
Input schema / properties / options / properties / includeStats / descriptionAdded value: +"Reserved; the stats object is always returned regardless of this flag." - added
Input schema / properties / options / properties / preserveWhitespace / defaultAdded value: +false - added
Input schema / properties / options / properties / preserveWhitespace / descriptionAdded value: +"Reserved; whitespace is always collapsed regardless of this flag." - added
Input schema / properties / options / properties / removeComments / defaultAdded value: +true - added
Input schema / properties / options / properties / removeComments / descriptionAdded value: +"Reserved; HTML comments are stripped with all other tags regardless of this flag." - removed
Input schema / properties / options / requiredRemoved value: -[ - "includeStats", - "preserveWhitespace", - "removeComments" -] - changed
Input schema / requiredPrevious value: -[ - "html", - "options" -]New value: +[ + "html" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "cleaned_html": { + "description": "The input HTML with runs of whitespace collapsed and trimmed.", + "type": "string" + }, + "markdown": { + "description": "The converted Markdown output.", + "type": "string" + }, + "stats": { + "description": "Counts derived from the input HTML and resulting Markdown.", + "properties": { + "code_blocks_converted": { + "description": "Inline and fenced code spans produced.", + "type": "integer" + }, + "headers_converted": { + "description": "Markdown headings produced.", + "type": "integer" + }, + "html_length": { + "description": "Character length of the input HTML.", + "type": "integer" + }, + "html_tags_removed": { + "description": "Number of HTML tags found in the input.", + "type": "integer" + }, + "images_converted": { + "description": "Markdown images produced.", + "type": "integer" + }, + "links_converted": { + "description": "Markdown links produced.", + "type": "integer" + }, + "lists_converted": { + "description": "Markdown list items produced.", + "type": "integer" + }, + "markdown_length": { + "description": "Character length of the output Markdown.", + "type": "integer" + }, + "markdown_lines": { + "description": "Line count of the output Markdown.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
web_dev_markdown_to_html14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / markdown / descriptionAdded value: +"The Markdown source to convert. Required and must be non-empty, or a 400 is returned." - added
Input schema / properties / markdown / examplesAdded value: +[ + "# Title\\n\\nHello **world**" +] - added
Input schema / properties / options / additionalPropertiesAdded value: +false - added
Input schema / properties / options / descriptionAdded value: +"Reserved options. Currently accepted but ignored; output is identical whether or not they are set." - added
Input schema / properties / options / properties / includeStats / defaultAdded value: +true - added
Input schema / properties / options / properties / includeStats / descriptionAdded value: +"Reserved; the stats object is always returned regardless of this flag." - added
Input schema / properties / options / properties / prettify / defaultAdded value: +false - added
Input schema / properties / options / properties / prettify / descriptionAdded value: +"Reserved; output formatting is unaffected by this flag." - added
Input schema / properties / options / properties / sanitize / defaultAdded value: +false - added
Input schema / properties / options / properties / sanitize / descriptionAdded value: +"Reserved; the sanitised copy is always returned as preview_safe regardless of this flag." - removed
Input schema / properties / options / requiredRemoved value: -[ - "includeStats", - "prettify", - "sanitize" -] - changed
Input schema / requiredPrevious value: -[ - "markdown", - "options" -]New value: +[ + "markdown" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "html": { + "description": "The rendered HTML output.", + "type": "string" + }, + "preview_safe": { + "description": "Copy of the HTML with tags outside an allow-list stripped, safe for preview.", + "type": "string" + }, + "stats": { + "description": "Counts derived from the input Markdown and resulting HTML.", + "properties": { + "code_blocks": { + "description": "Fenced code blocks produced.", + "type": "integer" + }, + "headers": { + "description": "Heading tags produced.", + "type": "integer" + }, + "html_length": { + "description": "Character length of the output HTML.", + "type": "integer" + }, + "html_tags": { + "description": "Number of HTML tags produced.", + "type": "integer" + }, + "images": { + "description": "Image tags produced.", + "type": "integer" + }, + "links": { + "description": "Anchor tags produced.", + "type": "integer" + }, + "lists": { + "description": "List container tags produced.", + "type": "integer" + }, + "markdown_length": { + "description": "Character length of the input Markdown.", + "type": "integer" + }, + "markdown_lines": { + "description": "Line count of the input Markdown.", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
webdev_base64_image_encoder4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "fileData": { + "description": "The image as base64. A bare base64 payload or a full data:<mime>;base64,<...> URI is accepted; the prefix and whitespace are stripped. Must decode to a PNG, JPEG, GIF, or WebP; invalid or non-image data returns HTTP 400.", + "type": "string" + }, + "fileName": { + "description": "Base name used in the generated snippets (CSS class, img alt, JS variable). Non-alphanumeric characters become hyphens. Defaults to image.", + "type": "string" + }, + "fileType": { + "description": "MIME type to write into the data URI, e.g. image/png. Defaults to the MIME detected from the file header.", + "type": "string" + }, + "format": { + "description": "Snippet preference echoed back in options. Defaults to inline.", + "type": "string" + }, + "includeDataUri": { + "description": "Include the full data-URI output entry. Defaults to true.", + "type": "boolean" + }, + "includeMimeType": { + "description": "Retained in the echoed options. Defaults to true.", + "type": "boolean" + } +} - added
Input schema / requiredAdded value: +[ + "fileData" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "base64Data": { + "description": "Normalized raw base64 (no data-URI prefix, no whitespace).", + "type": "string" + }, + "base64Size": { + "description": "Length of the base64 string in characters.", + "type": "number" + }, + "detectedMimeType": { + "description": "MIME type sniffed from the file header (image/png, image/jpeg, image/gif, image/webp).", + "type": "string" + }, + "error": { + "description": "Present instead of the above when input is invalid or not a supported image.", + "type": "string" + }, + "imageHeight": { + "description": "Image height in pixels, read from the header.", + "type": "number" + }, + "imageWidth": { + "description": "Image width in pixels, read from the header.", + "type": "number" + }, + "options": { + "description": "Echoed request options: includeDataUri, includeMimeType, format.", + "type": "object" + }, + "originalFileName": { + "description": "Sanitized base name used in the snippets.", + "type": "string" + }, + "originalSize": { + "description": "Decoded image size in bytes.", + "type": "number" + }, + "outputs": { + "description": "Keyed code snippets (base64, dataUri, css, cssComplete, htmlImg, htmlInline, javascript, json); each value has title, description, and content strings.", + "type": "object" + } + }, + "type": "object" +}
- Changed
webdev_border_radius_generator4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "borderRadius": { + "additionalProperties": false, + "description": "Per-corner radii in pixels; at least one corner is required (empty object returns HTTP 400). Missing corners default to 0.", + "properties": { + "bottomLeft": { + "default": 0, + "description": "Bottom-left corner radius in pixels.", + "minimum": 0, + "type": "number" + }, + "bottomRight": { + "default": 0, + "description": "Bottom-right corner radius in pixels.", + "minimum": 0, + "type": "number" + }, + "topLeft": { + "default": 0, + "description": "Top-left corner radius in pixels.", + "minimum": 0, + "type": "number" + }, + "topRight": { + "default": 0, + "description": "Top-right corner radius in pixels.", + "minimum": 0, + "type": "number" + } + }, + "type": "object" + }, + "previewSettings": { + "additionalProperties": false, + "description": "Optional styling for the returned HTML preview snippet only; does not affect the generated CSS.", + "properties": { + "backgroundColor": { + "default": "#ffffff", + "description": "Preview box fill color (CSS color).", + "type": "string" + }, + "borderColor": { + "default": "#e5e7eb", + "description": "Preview box border color (CSS color).", + "type": "string" + }, + "borderWidth": { + "default": 2, + "description": "Preview box border width in pixels.", + "minimum": 0, + "type": "number" + }, + "containerBackground": { + "default": "#f9fafb", + "description": "Preview container background color (CSS color).", + "type": "string" + }, + "height": { + "default": 150, + "description": "Preview box height in pixels.", + "minimum": 0, + "type": "number" + }, + "width": { + "default": 200, + "description": "Preview box width in pixels.", + "minimum": 0, + "type": "number" + } + }, + "type": "object" + } +} - added
Input schema / requiredAdded value: +[ + "borderRadius" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "borderRadius": { + "description": "The corner values echoed back from the request.", + "type": "object" + }, + "css": { + "description": "The optimised border-radius declaration, e.g. \"border-radius: 8px;\".", + "type": "string" + }, + "isUniform": { + "description": "True when all four corners share the same radius.", + "type": "boolean" + }, + "previewHtml": { + "description": "Self-contained HTML snippet rendering a preview box with the generated radius.", + "type": "string" + }, + "usageExamples": { + "additionalProperties": { + "properties": { + "code": { + "description": "The ready-to-paste code for this snippet.", + "type": "string" + }, + "title": { + "description": "Human-readable label for the snippet.", + "type": "string" + } + }, + "type": "object" + }, + "description": "Keyed copy-ready snippets (css, inline, sass, tailwind, individual); each has a title and code string.", + "type": "object" + } + }, + "type": "object" +}
- Changed
webdev_box_shadow_generator4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "previewSettings": { + "additionalProperties": false, + "description": "Optional sizing and colors for the generated preview HTML only; does not affect the CSS declaration.", + "properties": { + "backgroundColor": { + "description": "Preview element background color. Defaults to white.", + "type": "string" + }, + "containerBackground": { + "description": "Preview container background color. Defaults to light grey.", + "type": "string" + }, + "height": { + "description": "Preview element height in px. Defaults to 150.", + "type": "number" + }, + "width": { + "description": "Preview element width in px. Defaults to 200.", + "type": "number" + } + }, + "type": "object" + }, + "shadows": { + "description": "One or more shadow layers, joined left-to-right into one box-shadow declaration. At least one layer is required (empty returns HTTP 400).", + "items": { + "additionalProperties": false, + "properties": { + "blurRadius": { + "description": "Blur radius in px; larger is softer. Defaults to 0.", + "type": "number" + }, + "color": { + "description": "Shadow color as 3 or 6 digit hex or an rgb or rgba value. Defaults to a half-opacity black.", + "type": "string" + }, + "inset": { + "description": "Render the shadow inside the box (inset keyword) instead of outside. Defaults to false.", + "type": "boolean" + }, + "offsetX": { + "description": "Horizontal offset in px (positive moves right). Defaults to 0.", + "type": "number" + }, + "offsetY": { + "description": "Vertical offset in px (positive moves down). Defaults to 0.", + "type": "number" + }, + "opacity": { + "description": "Layer alpha from 0 to 1; when below 1 it is folded into color as rgba. Defaults to 1.", + "type": "number" + }, + "spreadRadius": { + "description": "Spread radius in px; positive grows the shadow. Defaults to 0.", + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + } +} - added
Input schema / requiredAdded value: +[ + "shadows" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "css": { + "description": "The combined box-shadow CSS declaration joining all layers, ready to paste into a stylesheet.", + "type": "string" + }, + "previewHtml": { + "description": "Self-contained HTML snippet rendering the shadow on a sample element.", + "type": "string" + }, + "shadowCount": { + "description": "Number of shadow layers in the declaration.", + "type": "integer" + }, + "shadows": { + "description": "The echoed shadow layers after normalization.", + "items": { + "description": "A single normalized shadow layer.", + "type": "object" + }, + "type": "array" + }, + "usageExamples": { + "description": "Keyed copy-ready snippets (css, inline, sass, tailwind); each value has title and code strings.", + "type": "object" + } + }, + "type": "object" +}
- Changed
webdev_code_formatter22 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / action / defaultAdded value: +"format" - added
Input schema / properties / action / descriptionAdded value: +"format = readable indentation; minify = strip whitespace (and comments unless preserved). Any value other than \"minify\" is treated as format." - added
Input schema / properties / action / enumAdded value: +[ + "format", + "minify" +] - added
Input schema / properties / code / descriptionAdded value: +"Source code to process (alias: input). Must be non-empty." - added
Input schema / properties / code / examplesAdded value: +[ + "body{color:red;margin:0;}" +] - added
Input schema / properties / language / defaultAdded value: +"html" - added
Input schema / properties / language / descriptionAdded value: +"Source dialect. Unknown values fall back to html." - added
Input schema / properties / language / enumAdded value: +[ + "html", + "css", + "javascript" +] - added
Input schema / properties / options / additionalPropertiesAdded value: +false - added
Input schema / properties / options / descriptionAdded value: +"Formatting/minifying options." - added
Input schema / properties / options / properties / indentSize / defaultAdded value: +"4" - added
Input schema / properties / options / properties / indentSize / descriptionAdded value: +"Spaces per indent level (format only); the string \"tab\" uses a tab character." - added
Input schema / properties / options / properties / indentSize / examplesAdded value: +[ + "4", + "tab" +] - changed
Input schema / properties / options / properties / indentSize / typePrevious value: -"string"New value: +[ + "string", + "integer" +] - added
Input schema / properties / options / properties / maxLineLength / defaultAdded value: +100 - added
Input schema / properties / options / properties / maxLineLength / descriptionAdded value: +"Advisory max line length (accepted but does not hard-wrap output)." - added
Input schema / properties / options / properties / preserveComments / defaultAdded value: +true - added
Input schema / properties / options / properties / preserveComments / descriptionAdded value: +"Keep comments when minifying. Ignored when action is format." - removed
Input schema / properties / options / requiredRemoved value: -[ - "indentSize", - "maxLineLength", - "preserveComments" -] - changed
Input schema / requiredPrevious value: -[ - "code", - "language", - "action", - "options" -]New value: +[ + "code" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "action": { + "description": "Action actually applied.", + "enum": [ + "format", + "minify" + ], + "type": "string" + }, + "input": { + "description": "The original code, echoed back.", + "type": "string" + }, + "language": { + "description": "Language actually used (post-fallback).", + "enum": [ + "html", + "css", + "javascript" + ], + "type": "string" + }, + "output": { + "description": "The formatted or minified result.", + "type": "string" + }, + "statistics": { + "description": "Size and line metrics comparing input to output.", + "properties": { + "compressionRatio": { + "description": "Percent size reduction for minify; null when action is format.", + "type": [ + "integer", + "null" + ] + }, + "originalLines": { + "description": "Newline-split line count of the input.", + "type": "integer" + }, + "originalSize": { + "description": "Input length in characters.", + "type": "integer" + }, + "processedLines": { + "description": "Newline-split line count of the output.", + "type": "integer" + }, + "processedSize": { + "description": "Output length in characters.", + "type": "integer" + }, + "sizeDifference": { + "description": "processedSize minus originalSize (negative when smaller).", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
webdev_color_palette11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / baseColor / defaultAdded value: +"#3498db" - added
Input schema / properties / baseColor / descriptionAdded value: +"Seed color as a 3- or 6-digit hex string (formats #RGB or #RRGGBB). Defaults to #3498db." - added
Input schema / properties / colorCount / defaultAdded value: +5 - added
Input schema / properties / colorCount / descriptionAdded value: +"Total number of colors to return, including the base color. Must be an integer from 2 to 12." - added
Input schema / properties / colorCount / maximumAdded value: +12 - added
Input schema / properties / colorCount / minimumAdded value: +2 - added
Input schema / properties / paletteType / descriptionAdded value: +"Color-theory scheme that determines how the other colors are derived from baseColor. Required; an unrecognized value is rejected with HTTP 400." - added
Input schema / properties / paletteType / enumAdded value: +[ + "complementary", + "analogous", + "triadic", + "tetradic", + "monochromatic", + "random" +] - changed
Input schema / requiredPrevious value: -[ - "baseColor", - "paletteType", - "colorCount" -]New value: +[ + "paletteType" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "baseColor": { + "description": "Normalized lowercase 6-digit base hex color used.", + "type": "string" + }, + "colorCount": { + "description": "Number of colors returned.", + "type": "integer" + }, + "colors": { + "description": "The generated colors in scheme order; the first is the base color.", + "items": { + "properties": { + "contrast": { + "description": "WCAG contrast ratio of this color against a white background.", + "type": "number" + }, + "hex": { + "description": "Color as a 6-digit hex string.", + "type": "string" + }, + "hsl": { + "description": "Color in HSL (hue degrees, saturation and lightness percent).", + "properties": { + "h": { + "description": "Hue in degrees (0-360).", + "type": "number" + }, + "l": { + "description": "Lightness as a percentage (0-100).", + "type": "number" + }, + "s": { + "description": "Saturation as a percentage (0-100).", + "type": "number" + } + }, + "type": "object" + }, + "isBase": { + "description": "True only for the original base color (first entry).", + "type": "boolean" + }, + "isLight": { + "description": "True when relative luminance exceeds 0.5.", + "type": "boolean" + }, + "name": { + "description": "Nearest named color, or Custom when none is close.", + "type": "string" + }, + "rgb": { + "description": "Color in RGB channels (0-255).", + "properties": { + "b": { + "description": "Blue channel (0-255).", + "type": "integer" + }, + "g": { + "description": "Green channel (0-255).", + "type": "integer" + }, + "r": { + "description": "Red channel (0-255).", + "type": "integer" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "type": "array" + }, + "paletteType": { + "description": "The scheme applied to derive the palette.", + "type": "string" + } + }, + "type": "object" +}
- Changed
webdev_css_beautifier4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "css": { + "description": "The CSS source to beautify. Must be non-empty.", + "examples": [ + "body{color:red;margin:0}" + ], + "type": "string" + }, + "indentSize": { + "default": 2, + "description": "Spaces per indent level; ignored when indentType is \"tabs\".", + "minimum": 1, + "type": "integer" + }, + "indentType": { + "default": "spaces", + "description": "Indent with spaces or a tab character.", + "enum": [ + "spaces", + "tabs" + ], + "type": "string" + }, + "insertFinalNewline": { + "default": true, + "description": "Ensure the output ends with a trailing newline.", + "type": "boolean" + }, + "newlineAfterRule": { + "default": true, + "description": "Put the opening brace and closing brace on their own lines.", + "type": "boolean" + }, + "newlineBeforeProperty": { + "default": true, + "description": "Indent each declaration on its own line.", + "type": "boolean" + }, + "newlineBeforeRule": { + "default": true, + "description": "Insert a blank line before each selector and comment block.", + "type": "boolean" + }, + "preserveComments": { + "default": true, + "description": "Keep CSS comments; when false they are dropped.", + "type": "boolean" + }, + "sortProperties": { + "default": false, + "description": "Sort declarations alphabetically within each rule.", + "type": "boolean" + }, + "spaceAfterColon": { + "default": true, + "description": "Add a space after the colon in each declaration.", + "type": "boolean" + }, + "spaceBeforeBrace": { + "default": true, + "description": "Add a space between the selector and the opening brace.", + "type": "boolean" + } +} - added
Input schema / requiredAdded value: +[ + "css" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "beautified": { + "description": "The formatted, re-indented CSS.", + "type": "string" + }, + "beautifiedSize": { + "description": "Beautified CSS length in characters.", + "type": "integer" + }, + "changePercentage": { + "description": "Percent size change relative to the original (2-decimal rounded).", + "type": "number" + }, + "options": { + "description": "The normalized options actually applied (defaults filled in).", + "properties": { + "indentSize": { + "description": "Spaces per indent level applied.", + "type": "integer" + }, + "indentType": { + "description": "Indent character family applied.", + "enum": [ + "spaces", + "tabs" + ], + "type": "string" + }, + "insertFinalNewline": { + "description": "Final-newline setting applied.", + "type": "boolean" + }, + "newlineAfterRule": { + "description": "Brace-on-own-line setting applied.", + "type": "boolean" + }, + "newlineBeforeProperty": { + "description": "Declaration-on-own-line setting applied.", + "type": "boolean" + }, + "newlineBeforeRule": { + "description": "Blank-line-before-rule setting applied.", + "type": "boolean" + }, + "preserveComments": { + "description": "Comment-preservation setting applied.", + "type": "boolean" + }, + "sortProperties": { + "description": "Property-sort setting applied.", + "type": "boolean" + }, + "spaceAfterColon": { + "description": "Space-after-colon setting applied.", + "type": "boolean" + }, + "spaceBeforeBrace": { + "description": "Space-before-brace setting applied.", + "type": "boolean" + } + }, + "type": "object" + }, + "original": { + "description": "The original CSS, trimmed and echoed back.", + "type": "string" + }, + "originalSize": { + "description": "Original CSS length in characters.", + "type": "integer" + }, + "sizeChange": { + "description": "beautifiedSize minus originalSize (negative when smaller).", + "type": "integer" + } + }, + "type": "object" +}
- Changed
webdev_css_filter_generator4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "filters": { + "description": "Ordered filter functions to combine; at least one is required (empty returns HTTP 400).", + "items": { + "additionalProperties": false, + "properties": { + "blurRadius": { + "default": 0, + "description": "drop-shadow blur radius in px (default 0).", + "type": "number" + }, + "color": { + "default": "#000000", + "description": "drop-shadow color in any CSS notation (default #000000).", + "type": "string" + }, + "offsetX": { + "default": 0, + "description": "drop-shadow horizontal offset in px (default 0).", + "type": "number" + }, + "offsetY": { + "default": 0, + "description": "drop-shadow vertical offset in px (default 0).", + "type": "number" + }, + "type": { + "description": "Filter function name.", + "enum": [ + "blur", + "brightness", + "contrast", + "grayscale", + "hue-rotate", + "invert", + "opacity", + "saturate", + "sepia", + "drop-shadow" + ], + "type": "string" + }, + "value": { + "default": 0, + "description": "Numeric amount for non-drop-shadow filters. px for blur; deg for hue-rotate; percent for brightness/contrast/grayscale/invert/opacity/ saturate/sepia. Defaults to 0 and identity values are skipped.", + "type": "number" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" + }, + "previewSettings": { + "additionalProperties": false, + "description": "Optional dimensions/colors for the returned HTML preview snippet.", + "properties": { + "backgroundColor": { + "default": "#ffffff", + "description": "Preview element background (box/text types).", + "type": "string" + }, + "borderColor": { + "default": "#e5e7eb", + "description": "Preview element border color.", + "type": "string" + }, + "borderWidth": { + "default": 2, + "description": "Preview element border width in px.", + "type": "number" + }, + "containerBackground": { + "default": "#f9fafb", + "description": "Outer preview container background.", + "type": "string" + }, + "height": { + "default": 150, + "description": "Preview box height in px.", + "type": "number" + }, + "previewType": { + "default": "box", + "description": "Preview surface to render the filter on.", + "enum": [ + "box", + "text", + "image" + ], + "type": "string" + }, + "width": { + "default": 200, + "description": "Preview box width in px.", + "type": "number" + } + }, + "type": "object" + } +} - added
Input schema / requiredAdded value: +[ + "filters" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "css": { + "description": "CSS filter declaration, e.g. 'filter: blur(4px);' or 'filter: none;'.", + "type": "string" + }, + "filterCount": { + "description": "Number of filters supplied.", + "type": "integer" + }, + "filters": { + "description": "Echoed normalized filter list.", + "items": { + "type": "object" + }, + "type": "array" + }, + "hasDropShadow": { + "description": "True if any filter is drop-shadow.", + "type": "boolean" + }, + "previewHtml": { + "description": "Self-contained HTML snippet rendering the filter on the chosen preview surface.", + "type": "string" + }, + "usageExamples": { + "additionalProperties": { + "properties": { + "code": { + "description": "Snippet body.", + "type": "string" + }, + "title": { + "description": "Snippet label.", + "type": "string" + } + }, + "type": "object" + }, + "description": "Copy-ready snippets keyed by css/inline/sass/tailwind/image/backdrop, each with title and code.", + "type": "object" + } + }, + "type": "object" +}
- Changed
webdev_css_gradient_generator4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "angle": { + "default": 90, + "description": "Angle in degrees. Used as the linear-gradient angle when direction is custom, and as the conic-gradient starting angle (from Ndeg). Ignored otherwise.", + "maximum": 360, + "minimum": 0, + "type": "number" + }, + "colors": { + "description": "Ordered color stops; at least one is required (empty returns HTTP 400).", + "items": { + "additionalProperties": false, + "properties": { + "color": { + "description": "Stop color in any CSS notation (hex, rgb(), hsl(), or color name). Defaults to #000000 if omitted.", + "examples": [ + "#22d3ee" + ], + "type": "string" + }, + "position": { + "description": "Optional stop position as a percentage (0-100); omitted positions let the browser distribute the stop.", + "maximum": 100, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "color" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" + }, + "direction": { + "default": "to right", + "description": "For linear, a named/keyword direction such as 'to right' or 'to bottom left'; pass 'custom' (or a value ending in deg) to drive the gradient by the angle field instead. For radial, 'circle' selects a circular shape and any other value yields an ellipse. Ignored for conic.", + "type": "string" + }, + "repeating": { + "default": false, + "description": "When true, emit the repeating-* gradient variant (repeating-linear/radial/conic-gradient).", + "type": "boolean" + }, + "type": { + "default": "linear", + "description": "Gradient function to generate.", + "enum": [ + "linear", + "radial", + "conic" + ], + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "colors" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "angle": { + "description": "Echoed angle in degrees.", + "type": "number" + }, + "colors": { + "description": "Echoed color stops, each an object with color and optional position.", + "items": { + "type": "object" + }, + "type": "array" + }, + "css": { + "description": "Full CSS declaration, e.g. background: linear-gradient(to right, #22d3ee 0%, #a3e635 100%);", + "type": "string" + }, + "direction": { + "description": "Echoed direction/shape value.", + "type": "string" + }, + "previewHtml": { + "description": "A self-contained div HTML snippet with the gradient applied inline, for live preview.", + "type": "string" + }, + "repeating": { + "description": "Echoed repeating flag.", + "type": "boolean" + }, + "type": { + "description": "Echoed gradient type (linear, radial, or conic).", + "type": "string" + }, + "usageExamples": { + "description": "Copy-ready snippets keyed by format (css, inline, sass, tailwind), each with a title and code.", + "properties": { + "css": { + "description": "CSS class snippet (title + code).", + "type": "object" + }, + "inline": { + "description": "Inline style snippet (title + code).", + "type": "object" + }, + "sass": { + "description": "SCSS/SASS snippet (title + code).", + "type": "object" + }, + "tailwind": { + "description": "Tailwind custom-gradient snippet (title + code).", + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
webdev_css_minifier4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "compressColors": { + "default": true, + "description": "Shorten 6-digit hex colors to 3 digits and replace common color names with shorter hex values.", + "type": "boolean" + }, + "compressUnits": { + "default": true, + "description": "Drop leading zeros and remove units from zero values (for example 0px becomes 0).", + "type": "boolean" + }, + "css": { + "description": "CSS source to minify. Must not be blank; an empty value returns a 400 error.", + "type": "string" + }, + "optimizeSelectors": { + "default": false, + "description": "Tighten universal-selector combinators (for example a star then child combinator becomes just the child combinator).", + "type": "boolean" + }, + "preserveImportant": { + "default": true, + "description": "Keep !important declarations intact during minification.", + "type": "boolean" + }, + "removeComments": { + "default": true, + "description": "Strip CSS comment blocks.", + "type": "boolean" + }, + "removeWhitespace": { + "default": true, + "description": "Collapse whitespace and remove space around braces, colons, semicolons, and combinators.", + "type": "boolean" + } +} - added
Input schema / requiredAdded value: +[ + "css" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "compressionRatio": { + "description": "Percentage size reduction, rounded to two decimals (0 when input is empty).", + "type": "number" + }, + "minified": { + "description": "The minified CSS output.", + "type": "string" + }, + "minifiedSize": { + "description": "Length of the minified CSS in characters.", + "type": "integer" + }, + "options": { + "description": "The effective options after defaults were applied.", + "properties": { + "compressColors": { + "description": "Whether colors were compressed.", + "type": "boolean" + }, + "compressUnits": { + "description": "Whether units were compressed.", + "type": "boolean" + }, + "optimizeSelectors": { + "description": "Whether selector combinators were optimized.", + "type": "boolean" + }, + "preserveImportant": { + "description": "Whether !important was preserved.", + "type": "boolean" + }, + "removeComments": { + "description": "Whether comments were stripped.", + "type": "boolean" + }, + "removeWhitespace": { + "description": "Whether whitespace was collapsed.", + "type": "boolean" + } + }, + "type": "object" + }, + "original": { + "description": "The submitted CSS, echoed back.", + "type": "string" + }, + "originalSize": { + "description": "Length of the original CSS in characters.", + "type": "integer" + }, + "savings": { + "description": "Characters saved (originalSize minus minifiedSize).", + "type": "integer" + } + }, + "type": "object" +}
- Changed
webdev_csv_to_json4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "csv": { + "description": "CSV text to convert. Must be non-empty.", + "examples": [ + "name,age\\nAda,36" + ], + "type": "string" + }, + "delimiter": { + "default": ",", + "description": "Field separator. Empty string falls back to comma.", + "type": "string" + }, + "enclosure": { + "default": "\"", + "description": "Quote character wrapping fields that contain delimiters or newlines.", + "type": "string" + }, + "escape": { + "default": "\"", + "description": "Character that escapes an enclosure character inside a quoted field.", + "type": "string" + }, + "hasHeader": { + "default": true, + "description": "Treat the first row as column names; when false, object keys become Column1, Column2, etc.", + "type": "boolean" + }, + "outputFormat": { + "default": "object", + "description": "object = array of keyed records; array = array of value arrays. Alias: format. Unknown values fall back to object.", + "enum": [ + "object", + "array" + ], + "type": "string" + }, + "prettyPrint": { + "default": true, + "description": "Indent the JSON string with 2 spaces; false produces compact JSON.", + "type": "boolean" + }, + "skipEmptyRows": { + "default": true, + "description": "Drop rows that are blank or all-empty after parsing.", + "type": "boolean" + }, + "trimFields": { + "default": false, + "description": "Strip leading/trailing whitespace from every field and header.", + "type": "boolean" + } +} - added
Input schema / requiredAdded value: +[ + "csv" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "errors": { + "description": "Fatal parse error messages (non-field-mismatch); empty on success.", + "items": { + "type": "string" + }, + "type": "array" + }, + "isValid": { + "description": "True when no fatal parse errors occurred.", + "type": "boolean" + }, + "json": { + "description": "The converted JSON as a string (indented when prettyPrint is true).", + "type": "string" + }, + "original": { + "description": "The original CSV input, echoed back.", + "type": "string" + }, + "stats": { + "description": "Conversion metrics.", + "properties": { + "columns": { + "description": "Column count of the first record.", + "type": "integer" + }, + "emptyRows": { + "description": "Count of blank rows skipped.", + "type": "integer" + }, + "headers": { + "description": "Resolved column/header names.", + "items": { + "type": "string" + }, + "type": "array" + }, + "invalidRows": { + "description": "Count of fatal-error rows.", + "type": "integer" + }, + "jsonSize": { + "description": "JSON output length in characters.", + "type": "integer" + }, + "originalSize": { + "description": "CSV input length in characters.", + "type": "integer" + }, + "rows": { + "description": "Number of data records produced.", + "type": "integer" + } + }, + "type": "object" + }, + "warnings": { + "description": "Per-row column-count mismatch messages.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
webdev_data_uri_generator3 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "encoding": { + "default": "utf-8", + "description": "Charset label used when includeCharset is true (text mode). Defaults to utf-8.", + "type": "string" + }, + "fileData": { + "description": "File bytes as base64 (file mode). A bare base64 payload or a full data:<mime>;base64,<...> URI is accepted; the prefix is stripped. Required and non-empty when inputMethod is file; empty or invalid base64 returns HTTP 400.", + "type": "string" + }, + "fileName": { + "default": "file", + "description": "File name used for extension-based MIME detection and in generated examples (file mode). Defaults to file.", + "type": "string" + }, + "fileType": { + "default": "application/octet-stream", + "description": "Provided MIME type for the file (file mode); may be overridden by detected type. Defaults to application/octet-stream.", + "type": "string" + }, + "generateExamples": { + "default": true, + "description": "Include ready-to-paste embed code examples in the response. Defaults to true.", + "type": "boolean" + }, + "includeCharset": { + "default": false, + "description": "When true (text mode), also emit charset-tagged base64 and URL-encoded variations. Defaults to false.", + "type": "boolean" + }, + "inputMethod": { + "default": "file", + "description": "Which source to encode. text uses textInput; file uses fileData. Defaults to file.", + "enum": [ + "text", + "file" + ], + "type": "string" + }, + "mimeType": { + "default": "text/plain", + "description": "MIME type written into the text-mode data URI, e.g. text/plain, text/html, text/css, image/svg+xml. Defaults to text/plain.", + "type": "string" + }, + "optimizeSize": { + "default": false, + "description": "Echoed back in options; size is always compared across variations. Defaults to false.", + "type": "boolean" + }, + "textInput": { + "description": "Raw text/markup to encode (text mode). Required and non-empty when inputMethod is text; empty returns HTTP 400.", + "type": "string" + } +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Breakdown of the data URI: mimeType, isBase64Encoded, hasCharset, parameters, isImage, isText, suitableFor (file mode), or inputLength, variationCount, mostEfficient, savings, recommendations (text mode).", + "type": "object" + }, + "dataUri": { + "description": "The generated base64 data URI (file mode).", + "type": "string" + }, + "dataUriSize": { + "description": "Character length of the generated data URI (file mode).", + "type": "integer" + }, + "detectedMimeType": { + "description": "MIME type sniffed from content/extension, or null if undetermined (file mode).", + "type": [ + "string", + "null" + ] + }, + "encoding": { + "description": "Charset label used (text mode).", + "type": "string" + }, + "examples": { + "description": "Keyed embed snippets (HTML img, CSS background, iframe, link, script, JavaScript, JSON, download anchor) when generateExamples is true.", + "type": "object" + }, + "inputMethod": { + "description": "Echoes which mode produced the result: text or file.", + "type": "string" + }, + "isOptimized": { + "description": "True when optimizedDataUri differs from dataUri (file mode).", + "type": "boolean" + }, + "mimeType": { + "description": "MIME type used in the data URI (text mode; also nested in analysis).", + "type": "string" + }, + "optimizedDataUri": { + "description": "Data URI rebuilt with the detected MIME type when it differs (file mode).", + "type": "string" + }, + "originalFileName": { + "description": "Echo of fileName (file mode).", + "type": "string" + }, + "originalSize": { + "description": "Decoded payload size in bytes (file mode).", + "type": "integer" + }, + "providedMimeType": { + "description": "The fileType supplied by the caller (file mode).", + "type": "string" + }, + "recommended": { + "description": "The shortest variation data URI (text mode).", + "type": "string" + }, + "sizeOverhead": { + "description": "Percentage size increase of the data URI over the raw bytes (file mode).", + "type": "number" + }, + "textInput": { + "description": "Echo of the input string (text mode only).", + "type": "string" + }, + "textLength": { + "description": "UTF-8 byte length of the input text (text mode).", + "type": "integer" + }, + "variations": { + "description": "Text mode: data URIs keyed by encoding - base64, urlencoded, and (when includeCharset) base64_charset, urlencoded_charset.", + "type": "object" + } + }, + "type": "object" +}
- Changed
webdev_favicon_generator25 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / backgroundColor / descriptionAdded value: +"Icon background as a 3- or 6-digit hex color (for example 4338ca). Ignored when transparentBackground is true. Defaults to 4338ca." - added
Input schema / properties / emojiContentAdded value: +{ + "description": "Single emoji drawn when faviconType is emoji. Defaults to a rocket glyph.", + "type": "string" +} - added
Input schema / properties / faviconType / defaultAdded value: +"initials" - added
Input schema / properties / faviconType / descriptionAdded value: +"Source of the icon glyph. text/initials draw textContent (initials force upper-case), emoji draws emojiContent, upload rasterizes imageDataUrl. Invalid values fall back to initials." - added
Input schema / properties / faviconType / enumAdded value: +[ + "text", + "emoji", + "initials", + "upload" +] - added
Input schema / properties / fontFamily / defaultAdded value: +"Arial, sans-serif" - added
Input schema / properties / fontFamily / descriptionAdded value: +"CSS font stack hint for text glyphs; unrecognized values fall back to Arial." - added
Input schema / properties / fontFamily / enumAdded value: +[ + "Arial, sans-serif", + "Georgia, serif", + "'Courier New', monospace", + "Verdana, sans-serif", + "Impact, sans-serif", + "'Trebuchet MS', sans-serif", + "Tahoma, sans-serif" +] - added
Input schema / properties / imageDataUrlAdded value: +{ + "description": "Source artwork for faviconType upload as a base64 data URI (png, jpeg, gif, webp, or svg+xml; SVG needs Imagick). Required for the upload type; max 4 MB decoded.", + "type": "string" +} - added
Input schema / properties / imageFitAdded value: +{ + "default": "contain", + "description": "How an uploaded image is scaled into the square canvas.", + "enum": [ + "contain", + "cover", + "stretch" + ], + "type": "string" +} - added
Input schema / properties / paddingAdded value: +{ + "default": 0, + "description": "Inner padding as a fraction of icon size (clamped 0 to 0.4).", + "maximum": 0.4, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / shape / defaultAdded value: +"rounded" - added
Input schema / properties / shape / descriptionAdded value: +"Icon outline shape. Non-square shapes mask the corners to transparency." - added
Input schema / properties / shape / enumAdded value: +[ + "square", + "rounded", + "circle" +] - added
Input schema / properties / siteName / descriptionAdded value: +"Application name written into site.webmanifest. Falls back to tabTitle then Your Website." - added
Input schema / properties / sizes / descriptionAdded value: +"Pixel sizes of PNG icons to emit (deduped and sorted). Out-of-range values are dropped. Defaults to 16, 32, 48, 64, 180, 192, 512. 16/32/48 always feed the .ico, 180 the apple-touch-icon, 192/512 the manifest." - added
Input schema / properties / sizes / items / enumAdded value: +[ + 16, + 24, + 32, + 48, + 64, + 96, + 128, + 180, + 192, + 256, + 384, + 512 +] - added
Input schema / properties / tabTitleAdded value: +{ + "description": "Page title used in the generated preview HTML; also the manifest name fallback. Defaults to Your Website.", + "type": "string" +} - added
Input schema / properties / textColor / descriptionAdded value: +"Glyph color as a 3- or 6-digit hex color. Defaults to ffffff." - added
Input schema / properties / textContent / descriptionAdded value: +"Text or initials drawn when faviconType is text or initials. Truncated to 8 characters; font shrinks as length grows. Defaults to AB." - added
Input schema / properties / themeColor / descriptionAdded value: +"theme-color meta and manifest theme as a 6-digit hex color. Defaults to backgroundColor." - added
Input schema / properties / transparentBackgroundAdded value: +{ + "default": false, + "description": "When true, omit the background fill and keep the canvas transparent.", + "type": "boolean" +} - removed
Input schema / requiredRemoved value: -[ - "faviconType", - "textContent", - "backgroundColor", - "textColor", - "shape", - "fontFamily", - "siteName", - "themeColor", - "sizes" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "description": "The generated bundle.", + "properties": { + "files": { + "description": "Map of output filename to base64-encoded bytes (favicon PNG set, apple-touch-icon.png, favicon.ico, site.webmanifest, index.html preview).", + "type": "object" + }, + "htmlCode": { + "description": "Ready-to-paste HTML link and meta tags referencing the bundle.", + "type": "string" + }, + "manifestJson": { + "description": "Pretty-printed site.webmanifest JSON contents.", + "type": "string" + }, + "metadata": { + "description": "Resolved settings after defaults and normalization (type, content, colors, shape, fontFamily, tabTitle, sizes, imageFit, transparentBackground, padding, siteName, themeColor, hasImage, htmlCode, manifestJson).", + "type": "object" + }, + "zip": { + "description": "Base64-encoded ZIP archive of every generated file.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "Whether generation succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
webdev_graphql_formatter4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "compactMode": { + "default": false, + "description": "Minify: keep comma-separated items on one line instead of one per line.", + "type": "boolean" + }, + "format": { + "default": true, + "description": "When true, reindent the document; when false, return the input unchanged.", + "type": "boolean" + }, + "graphql": { + "description": "The GraphQL document to format. Must not be blank.", + "type": "string" + }, + "indentSize": { + "default": 2, + "description": "Number of spaces per indent level (used only when indentType is spaces).", + "type": "integer" + }, + "indentType": { + "default": "spaces", + "description": "Indent with spaces (honouring indentSize) or with a single tab per level.", + "enum": [ + "spaces", + "tabs" + ], + "type": "string" + }, + "removeComments": { + "default": false, + "description": "Strip GraphQL hash (number-sign) comments before formatting.", + "type": "boolean" + }, + "sortArguments": { + "default": false, + "description": "Accepted for forward compatibility; field arguments are not reordered in the current implementation.", + "type": "boolean" + } +} - added
Input schema / requiredAdded value: +[ + "graphql" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "errors": { + "description": "Bracket-balance errors found during validation.", + "items": { + "type": "string" + }, + "type": "array" + }, + "formatted": { + "description": "The reindented (or minified) GraphQL document.", + "type": "string" + }, + "isValid": { + "description": "True when braces, parentheses, and brackets are all balanced.", + "type": "boolean" + }, + "original": { + "description": "The submitted GraphQL document, echoed back.", + "type": "string" + }, + "stats": { + "description": "Size and content metrics for the document.", + "properties": { + "directives": { + "description": "Distinct directive names used, without the at-sign prefix.", + "items": { + "type": "string" + }, + "type": "array" + }, + "fields": { + "description": "Count of selection-set fields detected.", + "type": "integer" + }, + "formattedSize": { + "description": "Character length of the formatted output.", + "type": "integer" + }, + "lines": { + "description": "Line count of the original document.", + "type": "integer" + }, + "operations": { + "description": "Count of query/mutation/subscription operations.", + "type": "integer" + }, + "originalSize": { + "description": "Character length of the original document.", + "type": "integer" + }, + "types": { + "description": "Distinct GraphQL keywords present (query, type, enum, and similar).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "warnings": { + "description": "Non-fatal notes (for example, no operations or type definitions detected).", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
webdev_hex_color4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / input / descriptionAdded value: +"The color to parse, in any supported notation: a hex value (#RGB, #RRGGBB, or 0xRRGGBB), rgb()/rgba(), a bare r,g,b triple, hsl(), or a CSS color name (red, blue, teal, etc.). Whitespace and case are ignored. Invalid input returns HTTP 400." - added
Input schema / properties / input / examplesAdded value: +[ + "#22d3ee" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Perceptual and WCAG accessibility analysis of the color.", + "properties": { + "accessibility": { + "description": "WCAG verdict, e.g. Good (AA) - Suitable for normal text.", + "type": "string" + }, + "brightness": { + "description": "Perceived brightness percent, 0-100.", + "type": "number" + }, + "contrastBlack": { + "description": "WCAG contrast ratio against black (1-21).", + "type": "number" + }, + "contrastWhite": { + "description": "WCAG contrast ratio against white (1-21).", + "type": "number" + }, + "dominantChannel": { + "description": "Dominant RGB channel: R, G, or B.", + "type": "string" + }, + "suggestedTextColor": { + "description": "Recommended overlay text colour, e.g. Black (#000000).", + "type": "string" + }, + "temperature": { + "description": "Warm/Cool/Neutral classification from hue.", + "type": "string" + } + }, + "type": "object" + }, + "color": { + "description": "The color expressed in all supported formats.", + "properties": { + "cmyk": { + "description": "Cyan c, magenta m, yellow y, key k channels, 0-100 percent.", + "type": "object" + }, + "hex": { + "description": "Uppercase #RRGGBB hex string.", + "type": "string" + }, + "hsl": { + "description": "Hue h 0-360, saturation s and lightness l 0-100 percent.", + "type": "object" + }, + "hsv": { + "description": "Hue h 0-360, saturation s and value v 0-100 percent.", + "type": "object" + }, + "rgb": { + "description": "Red, green, blue channels r/g/b, 0-255.", + "type": "object" + } + }, + "type": "object" + }, + "input": { + "description": "The input color string, echoed back.", + "type": "string" + }, + "palettes": { + "description": "Generated harmony palettes, each an array of #RRGGBB hex strings.", + "properties": { + "analogous": { + "description": "Five hues at +/-30 deg steps around the input.", + "items": { + "type": "string" + }, + "type": "array" + }, + "complementary": { + "description": "Input plus hues around its 180 deg complement.", + "items": { + "type": "string" + }, + "type": "array" + }, + "monochromatic": { + "description": "Seven lightness variants of the input hue.", + "items": { + "type": "string" + }, + "type": "array" + }, + "triadic": { + "description": "Three hues 120 deg apart.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "success": { + "description": "Whether parsing succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
webdev_hex_viewer3 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "displayOptions": { + "additionalProperties": false, + "description": "Optional rendering settings for the hex dump.", + "properties": { + "bytesPerRow": { + "default": 16, + "description": "Bytes shown per row; other values fall back to 16.", + "enum": [ + 8, + 16, + 32 + ], + "type": "integer" + }, + "colorCode": { + "default": true, + "description": "Wrap each hex byte in a colored span by byte class (null, control, printable, high).", + "type": "boolean" + }, + "groupBytes": { + "default": false, + "description": "Space hex bytes in pairs rather than after every byte.", + "type": "boolean" + }, + "showASCII": { + "default": true, + "description": "Append the printable-ASCII gutter (non-printable bytes shown as a dot).", + "type": "boolean" + }, + "showAddresses": { + "default": true, + "description": "Include the leading 8-digit hex offset column.", + "type": "boolean" + } + }, + "type": "object" + }, + "inputData": { + "description": "The data to dump, interpreted according to inputMethod. Blank input yields an empty dump.", + "type": "string" + }, + "inputMethod": { + "default": "text", + "description": "How inputData is decoded into bytes: text (UTF-8 encode), hex (paired hex digits, even length required), or base64.", + "enum": [ + "text", + "hex", + "base64" + ], + "type": "string" + } +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "byteDistribution": { + "description": "Byte-frequency table sorted by descending count (empty when no input).", + "items": { + "properties": { + "byte": { + "description": "The byte value (0-255).", + "type": "integer" + }, + "char": { + "description": "Printable character, or a dot when non-printable.", + "type": "string" + }, + "count": { + "description": "Occurrences of that byte.", + "type": "integer" + } + }, + "type": "object" + }, + "type": "array" + }, + "bytes": { + "description": "The decoded byte values as integers (0-255).", + "items": { + "description": "A single byte value.", + "type": "integer" + }, + "type": "array" + }, + "fileTypeHint": { + "description": "Best-guess data type from magic bytes/entropy, or Unknown.", + "type": "string" + }, + "hexDump": { + "description": "The rendered multi-line hex dump (empty when no input).", + "type": "string" + }, + "statistics": { + "description": "Per-byte counts and Shannon entropy, or null when input is empty.", + "properties": { + "controlBytes": { + "description": "Count of control bytes below 32.", + "type": "integer" + }, + "entropy": { + "description": "Shannon entropy in bits per byte.", + "type": "number" + }, + "highBytes": { + "description": "Count of bytes 127 and above.", + "type": "integer" + }, + "nullBytes": { + "description": "Count of 0x00 bytes.", + "type": "integer" + }, + "printableBytes": { + "description": "Count of printable ASCII bytes (32-126).", + "type": "integer" + }, + "totalBytes": { + "description": "Total number of bytes.", + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "success": { + "description": "Whether processing succeeded.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
webdev_html_entity_reference9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / category / descriptionAdded value: +"Restrict results to one category. Blank returns every category." - added
Input schema / properties / category / enumAdded value: +[ + "", + "punctuation", + "math", + "currency", + "arrows", + "accents", + "greek", + "misc" +] - added
Input schema / properties / itemsPerPageAdded value: +{ + "default": 50, + "description": "Number of entities returned per page (clamped to a minimum of 1).", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / pageAdded value: +{ + "default": 1, + "description": "Page number for pagination over the filtered results (clamped to a minimum of 1).", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / query / defaultAdded value: +"" - added
Input schema / properties / query / descriptionAdded value: +"Case-insensitive substring matched against each entity name, glyph, description, decimal code, and hex code. Blank returns all entities (subject to the category filter)." - removed
Input schema / requiredRemoved value: -[ - "query", - "category" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "category": { + "description": "The trimmed category filter that was applied (empty when unfiltered).", + "type": "string" + }, + "commonEntities": { + "description": "Fixed quick-reference list of the eight most common entities (lt, gt, amp, quot, nbsp, copy, reg, trade), independent of the query.", + "items": { + "properties": { + "category": { + "description": "Category the entity belongs to.", + "type": "string" + }, + "char": { + "description": "The rendered character glyph.", + "type": "string" + }, + "decimal": { + "description": "Decimal code point as a string.", + "type": "string" + }, + "description": { + "description": "Plain-English description of the character.", + "type": "string" + }, + "hex": { + "description": "Hexadecimal code point as a string.", + "type": "string" + }, + "name": { + "description": "Entity name without ampersand or semicolon.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "entities": { + "description": "The matching entities for the requested page.", + "items": { + "properties": { + "category": { + "description": "Category the entity belongs to (one of punctuation, math, currency, arrows, accents, greek, misc).", + "type": "string" + }, + "char": { + "description": "The rendered character glyph for the entity.", + "type": "string" + }, + "decimal": { + "description": "Decimal numeric code point as a string (for example 169).", + "type": "string" + }, + "description": { + "description": "Plain-English description of the character.", + "type": "string" + }, + "hex": { + "description": "Hexadecimal code point as a string without prefix (for example A9).", + "type": "string" + }, + "name": { + "description": "Entity name without the surrounding ampersand and semicolon (for example copy).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "itemsPerPage": { + "description": "The page size that was applied.", + "type": "integer" + }, + "page": { + "description": "The page number returned.", + "type": "integer" + }, + "query": { + "description": "The trimmed search query that was applied.", + "type": "string" + }, + "success": { + "description": "Whether the lookup succeeded.", + "type": "boolean" + }, + "total": { + "description": "Total number of entities matching the query and category before pagination.", + "type": "integer" + }, + "totalPages": { + "description": "Total page count for the current filter and page size.", + "type": "integer" + } + }, + "type": "object" +}
- Changed
webdev_html_minifier4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "collapseInlineTagWhitespace": { + "default": true, + "description": "Collapse whitespace around inline tags (span, a, strong, b, i, em, small, code, etc.).", + "type": "boolean" + }, + "html": { + "description": "HTML markup to minify. Must be a non-empty string.", + "type": "string" + }, + "minifyInlineCSS": { + "default": true, + "description": "Minify CSS inside style attributes (strip comments and collapse whitespace).", + "type": "boolean" + }, + "minifyInlineJS": { + "default": true, + "description": "Minify JavaScript inside script blocks (strip comments and collapse whitespace).", + "type": "boolean" + }, + "preserveLineBreaks": { + "default": false, + "description": "Accepted for compatibility; reported back in options but does not currently alter output.", + "type": "boolean" + }, + "removeComments": { + "default": true, + "description": "Strip HTML comments. Conditional comments are always preserved.", + "type": "boolean" + }, + "removeEmptyElements": { + "default": false, + "description": "Remove elements whose content is empty or whitespace-only.", + "type": "boolean" + }, + "removeOptionalTags": { + "default": false, + "description": "Remove optional closing tags such as the paragraph close before a block-container end and the list-item close before a list end.", + "type": "boolean" + }, + "removeQuotes": { + "default": false, + "description": "Drop quotes around attribute values that are safe to unquote (alphanumerics, hyphen, underscore).", + "type": "boolean" + }, + "removeWhitespace": { + "default": true, + "description": "Collapse runs of whitespace, trim, and remove whitespace between tags.", + "type": "boolean" + } +} - added
Input schema / requiredAdded value: +[ + "html" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "compressionRatio": { + "description": "Percent size reduction, rounded to 2 decimals; 0 when input is empty.", + "type": "number" + }, + "minified": { + "description": "The minified HTML output.", + "type": "string" + }, + "minifiedSize": { + "description": "Minified length in characters.", + "type": "integer" + }, + "options": { + "description": "The fully-resolved option set actually applied (every toggle with its effective boolean).", + "type": "object" + }, + "original": { + "description": "The original HTML, echoed back.", + "type": "string" + }, + "originalSize": { + "description": "Original length in characters.", + "type": "integer" + }, + "savings": { + "description": "originalSize minus minifiedSize (bytes removed).", + "type": "integer" + } + }, + "type": "object" +}
- Changed
webdev_http_status_reference13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / category / defaultAdded value: +"all" - added
Input schema / properties / category / descriptionAdded value: +"Restrict results to one status class; \"all\" returns every category." - added
Input schema / properties / category / enumAdded value: +[ + "all", + "1xx", + "2xx", + "3xx", + "4xx", + "5xx" +] - added
Input schema / properties / codeAdded value: +{ + "default": null, + "description": "Specific status code to highlight as selectedCode; defaults to 200 when omitted. Does not filter the codes list.", + "examples": [ + 404 + ], + "type": [ + "integer", + "null" + ] +} - added
Input schema / properties / includeExamples / defaultAdded value: +true - added
Input schema / properties / includeExamples / descriptionAdded value: +"Accepted for compatibility; example/useCases fields are always present in each code object." - added
Input schema / properties / queryAdded value: +{ + "description": "Alias for search; used when search is absent.", + "type": "string" +} - added
Input schema / properties / search / defaultAdded value: +"" - added
Input schema / properties / search / descriptionAdded value: +"Case-insensitive text filter matched against code, name, description, and use cases (e.g. \"redirect\", \"auth\"). Alias: query." - added
Input schema / properties / search / examplesAdded value: +[ + "not found" +] - removed
Input schema / requiredRemoved value: -[ - "category", - "search", - "includeExamples" -] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "category": { + "description": "The category filter that was applied (all if none).", + "type": "string" + }, + "codes": { + "description": "Matching status codes, ascending by number.", + "items": { + "properties": { + "code": { + "description": "The numeric status code, e.g. 404.", + "type": "integer" + }, + "description": { + "description": "What the status means.", + "type": "string" + }, + "example": { + "description": "A sample request/response illustrating the code.", + "type": "string" + }, + "frequency": { + "description": "How often it occurs in practice (Very Common, Common, Novelty); absent for rare codes.", + "type": "string" + }, + "name": { + "description": "Reason phrase, e.g. Not Found.", + "type": "string" + }, + "rfc": { + "description": "Defining RFC, e.g. RFC 7231.", + "type": "string" + }, + "useCases": { + "description": "Typical scenarios that return this code.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + }, + "commonCodes": { + "description": "Up to eight of the most frequently encountered codes (same object shape as codes).", + "items": { + "type": "object" + }, + "type": "array" + }, + "search": { + "description": "The search text that was applied, echoed back.", + "type": "string" + }, + "selectedCode": { + "description": "The single highlighted code object (same shape as a codes entry); null if the requested code is unknown.", + "type": [ + "object", + "null" + ] + }, + "stats": { + "additionalProperties": { + "type": "integer" + }, + "description": "Count of codes per category, keyed 1xx..5xx.", + "type": "object" + }, + "success": { + "description": "Always true on a successful lookup.", + "type": "boolean" + }, + "total": { + "description": "Total number of status codes in the reference dataset (unfiltered).", + "type": "integer" + } + }, + "type": "object" +}
- Changed
webdev_javascript_beautifier24 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / code / descriptionAdded value: +"The JavaScript source to beautify (also accepted as \"input\")." - added
Input schema / properties / code / examplesAdded value: +[ + "function f(){return 1;}" +] - added
Input schema / properties / options / additionalPropertiesAdded value: +false - added
Input schema / properties / options / descriptionAdded value: +"Formatting options. Omit for defaults." - added
Input schema / properties / options / properties / braceStyle / defaultAdded value: +"collapse" - added
Input schema / properties / options / properties / braceStyle / descriptionAdded value: +"Brace placement: collapse keeps the open brace on the same line; expand moves it to its own line." - added
Input schema / properties / options / properties / braceStyle / enumAdded value: +[ + "collapse", + "expand", + "end-expand" +] - added
Input schema / properties / options / properties / indentSize / defaultAdded value: +4 - added
Input schema / properties / options / properties / indentSize / descriptionAdded value: +"Spaces per indent level (ignored when indentType is \"tab\")." - added
Input schema / properties / options / properties / indentSize / minimumAdded value: +1 - added
Input schema / properties / options / properties / indentType / defaultAdded value: +"space" - added
Input schema / properties / options / properties / indentType / descriptionAdded value: +"Indent with spaces or a tab character." - added
Input schema / properties / options / properties / indentType / enumAdded value: +[ + "space", + "tab" +] - added
Input schema / properties / options / properties / jslintHappyAdded value: +{ + "default": false, + "description": "Apply JSLint-friendly spacing conventions.", + "type": "boolean" +} - added
Input schema / properties / options / properties / maxLineWidth / defaultAdded value: +80 - added
Input schema / properties / options / properties / maxLineWidth / descriptionAdded value: +"Target maximum line width hint." - added
Input schema / properties / options / properties / maxLineWidth / minimumAdded value: +0 - added
Input schema / properties / options / properties / preserveNewlines / defaultAdded value: +true - added
Input schema / properties / options / properties / preserveNewlines / descriptionAdded value: +"Keep existing blank lines between statements." - added
Input schema / properties / options / properties / spaceInParenAdded value: +{ + "default": false, + "description": "Add spaces inside parentheses.", + "type": "boolean" +} - removed
Input schema / properties / options / requiredRemoved value: -[ - "indentType", - "indentSize", - "preserveNewlines", - "braceStyle", - "maxLineWidth" -] - changed
Input schema / requiredPrevious value: -[ - "code", - "options" -]New value: +[ + "code" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "formattedCode": { + "description": "The beautified, re-indented JavaScript.", + "type": "string" + }, + "stats": { + "description": "Token counts derived from the formatted code.", + "properties": { + "comments": { + "description": "Line and block comments counted.", + "type": "integer" + }, + "functions": { + "description": "Named function declarations counted.", + "type": "integer" + }, + "keywords": { + "description": "Reserved-word keyword occurrences counted.", + "type": "integer" + }, + "operators": { + "description": "Operator occurrences counted.", + "type": "integer" + }, + "strings": { + "description": "String literals counted.", + "type": "integer" + }, + "variables": { + "description": "var/let/const declarations counted.", + "type": "integer" + } + }, + "type": "object" + }, + "validationErrors": { + "description": "Heuristic syntax warnings (missing semicolons, unmatched quotes/braces); empty when none.", + "items": { + "properties": { + "column": { + "description": "1-based column of the issue.", + "type": "integer" + }, + "line": { + "description": "1-based line number of the issue.", + "type": "integer" + }, + "message": { + "description": "Human-readable warning text.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
webdev_js_minifier4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "code": { + "description": "JavaScript source to minify. Required and non-empty (the alias input is also accepted).", + "type": "string" + }, + "level": { + "default": "standard", + "description": "Minification preset. basic does whitespace and comment stripping only; standard adds variable mangling; aggressive also removes unused code. Unknown values fall back to standard.", + "enum": [ + "basic", + "standard", + "aggressive" + ], + "type": "string" + }, + "mangleVariables": { + "description": "Rename local variables to short names. Defaults to true unless level is basic.", + "type": "boolean" + }, + "removeComments": { + "default": true, + "description": "Strip block and line comments.", + "type": "boolean" + }, + "removeConsole": { + "default": false, + "description": "Remove console log, info, warn, error, and debug calls.", + "type": "boolean" + }, + "removeDebugger": { + "default": true, + "description": "Remove debugger statements.", + "type": "boolean" + }, + "removeUnusedCode": { + "description": "Drop empty functions and dead code after return. Defaults to true only when level is aggressive.", + "type": "boolean" + } +} - added
Input schema / requiredAdded value: +[ + "code" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "input": { + "description": "Original JavaScript source.", + "type": "string" + }, + "level": { + "description": "Effective level applied (basic, standard, or aggressive).", + "type": "string" + }, + "optimizationReport": { + "description": "Per-step entries, each with a type (success, info, or warning) and a message string.", + "items": { + "description": "An optimization step record.", + "type": "object" + }, + "type": "array" + }, + "options": { + "description": "Resolved boolean flags actually applied (removeComments, removeConsole, removeDebugger, mangleVariables, removeUnusedCode).", + "type": "object" + }, + "output": { + "description": "Minified JavaScript.", + "type": "string" + }, + "statistics": { + "description": "Size metrics: originalSize, minifiedSize, originalLines, minifiedLines, bytesSaved, and compressionRatio percent.", + "type": "object" + } + }, + "type": "object" +}
- Changed
webdev_js_obfuscator19 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / code / descriptionAdded value: +"JavaScript source to obfuscate (alias: input). Must be non-empty after trimming or the call returns HTTP 400." - added
Input schema / properties / code / examplesAdded value: +[ + "function greet(name){console.log(\"hi \"+name);}" +] - added
Input schema / properties / options / additionalPropertiesAdded value: +false - added
Input schema / properties / options / descriptionAdded value: +"Per-technique toggles overriding the strength preset." - added
Input schema / properties / options / properties / compactCode / defaultAdded value: +true - added
Input schema / properties / options / properties / compactCode / descriptionAdded value: +"Collapse whitespace and tighten punctuation into a single line." - added
Input schema / properties / options / properties / controlFlowFlattening / descriptionAdded value: +"Rewrite simple if-blocks into switch statements. Default true only when strength is heavy, else false; ignored when strength is light." - added
Input schema / properties / options / properties / deadCodeInjection / descriptionAdded value: +"Insert junk statements on every third line. Default true only when strength is heavy, else false; applied only when strength is heavy." - added
Input schema / properties / options / properties / encodeStrings / defaultAdded value: +true - added
Input schema / properties / options / properties / encodeStrings / descriptionAdded value: +"Replace string literals longer than 2 chars with atob()-decoded Base64." - added
Input schema / properties / options / properties / mangleNames / defaultAdded value: +true - added
Input schema / properties / options / properties / mangleNames / descriptionAdded value: +"Rename user variables/functions longer than 2 chars (skips reserved words) to short identifiers." - removed
Input schema / properties / options / requiredRemoved value: -[ - "mangleNames", - "encodeStrings", - "controlFlowFlattening", - "deadCodeInjection", - "compactCode" -] - added
Input schema / properties / strength / defaultAdded value: +"medium" - added
Input schema / properties / strength / descriptionAdded value: +"Preset intensity. light skips control-flow flattening; medium adds it; heavy also enables dead-code injection. Unknown values fall back to medium. Individual options override the preset defaults." - added
Input schema / properties / strength / enumAdded value: +[ + "light", + "medium", + "heavy" +] - changed
Input schema / requiredPrevious value: -[ - "code", - "strength", - "options" -]New value: +[ + "code" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "input": { + "description": "The original JavaScript exactly as submitted.", + "type": "string" + }, + "options": { + "description": "The fully-resolved boolean toggles actually applied (defaults merged with overrides).", + "properties": { + "compactCode": { + "type": "boolean" + }, + "controlFlowFlattening": { + "type": "boolean" + }, + "deadCodeInjection": { + "type": "boolean" + }, + "encodeStrings": { + "type": "boolean" + }, + "mangleNames": { + "type": "boolean" + } + }, + "type": "object" + }, + "output": { + "description": "The obfuscated JavaScript.", + "type": "string" + }, + "statistics": { + "description": "Before/after metrics.", + "properties": { + "obfuscatedLines": { + "description": "Line count of the output.", + "type": "integer" + }, + "obfuscatedSize": { + "description": "Character count of the output.", + "type": "integer" + }, + "originalLines": { + "description": "Line count of the input.", + "type": "integer" + }, + "originalSize": { + "description": "Character count of the input.", + "type": "integer" + }, + "stringsEncoded": { + "description": "Number of string literals encoded.", + "type": "integer" + }, + "variablesRenamed": { + "description": "Number of identifiers mangled.", + "type": "integer" + } + }, + "type": "object" + }, + "strength": { + "description": "The effective strength preset applied.", + "enum": [ + "light", + "medium", + "heavy" + ], + "type": "string" + } + }, + "type": "object" +}
- Changed
webdev_json_schema_generator4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "additionalProperties": { + "default": false, + "description": "Sets additionalProperties on every generated object schema; false forbids unlisted keys.", + "type": "boolean" + }, + "description": { + "default": "Schema generated from JSON data", + "description": "Value placed in the generated schema top-level description field.", + "type": "string" + }, + "detectFormats": { + "default": true, + "description": "Detect string format (email, date-time, uri, uuid, ipv4, ipv6) from sample values.", + "type": "boolean" + }, + "includeExamples": { + "default": true, + "description": "Add an examples array carrying each sampled value to the generated schemas.", + "type": "boolean" + }, + "json": { + "description": "Sample JSON document to infer the schema from, as a string of raw JSON (also accepted as input).", + "examples": [ + "{\"id\":1,\"email\":\"a@b.com\",\"tags\":[\"x\"]}" + ], + "type": "string" + }, + "requireAll": { + "default": false, + "description": "List every key in required; when false only non-null keys are required.", + "type": "boolean" + }, + "title": { + "default": "Generated Schema", + "description": "Value placed in the generated schema top-level title field.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "json" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "errors": { + "description": "Parse/validation errors; empty on success.", + "items": { + "properties": { + "id": { + "description": "Sequential error id.", + "type": "integer" + }, + "line": { + "description": "1-based line of the parse error when derivable, else null.", + "type": [ + "integer", + "null" + ] + }, + "message": { + "description": "Human-readable error message.", + "type": "string" + }, + "type": { + "description": "Error category, e.g. Parse Error or Empty Input.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "isValid": { + "description": "Whether the input parsed as JSON and a schema was produced.", + "type": "boolean" + }, + "schema": { + "description": "The inferred JSON Schema as an object (Draft-07), or null when the input is empty or invalid.", + "type": [ + "object", + "null" + ] + }, + "schemaJson": { + "description": "The inferred schema serialized as a 2-space-indented JSON string (empty string on failure).", + "type": "string" + }, + "stats": { + "description": "Shape statistics computed from the generated schema.", + "properties": { + "arrays": { + "description": "Count of array schemas.", + "type": "integer" + }, + "nestedObjects": { + "description": "Count of nested object schemas (excludes the root).", + "type": "integer" + }, + "requiredProperties": { + "description": "Count of required properties across the schema.", + "type": "integer" + }, + "totalProperties": { + "description": "Count of object properties across the schema.", + "type": "integer" + }, + "typeDistribution": { + "additionalProperties": { + "type": "integer" + }, + "description": "Map of JSON type name to occurrence count.", + "type": "object" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
webdev_json_to_csv4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "booleanFormat": { + "default": "true/false", + "description": "How boolean values are rendered in cells.", + "enum": [ + "true/false", + "1/0", + "yes/no" + ], + "type": "string" + }, + "delimiter": { + "default": ",", + "description": "Field separator between columns (for example a comma, a tab, or a pipe).", + "type": "string" + }, + "enclosure": { + "default": "\"", + "description": "Quote character wrapped around fields that contain the delimiter, the quote character, or a newline. Empty string disables quoting.", + "type": "string" + }, + "escape": { + "default": "\"", + "description": "Character used to escape the enclosure inside a quoted field (defaults to doubling the quote, RFC 4180 style).", + "type": "string" + }, + "flattenObjects": { + "default": false, + "description": "Expand nested objects into dotted-path columns (parent.child). When false, nested objects are JSON-stringified into a single cell.", + "type": "boolean" + }, + "includeHeaders": { + "default": true, + "description": "Emit a header row of column names as the first line.", + "type": "boolean" + }, + "json": { + "description": "JSON text to convert. Best results with an array of flat objects; a single object becomes one row, and non-object array items are wrapped as index/value pairs. Must not be blank.", + "type": "string" + }, + "nullValue": { + "default": "", + "description": "Text substituted for JSON null, undefined, or non-finite numbers.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "json" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "csv": { + "description": "The generated CSV text (empty string on failure).", + "type": "string" + }, + "errors": { + "description": "Fatal parse or conversion messages (empty when isValid is true).", + "items": { + "type": "string" + }, + "type": "array" + }, + "isValid": { + "description": "Whether the JSON parsed and converted successfully.", + "type": "boolean" + }, + "original": { + "description": "The submitted JSON text, echoed back.", + "type": "string" + }, + "stats": { + "description": "Size and shape metrics for the conversion.", + "properties": { + "arrayItems": { + "description": "Number of items in the top-level JSON array (0 if input was not an array).", + "type": "integer" + }, + "columns": { + "description": "Number of distinct columns discovered.", + "type": "integer" + }, + "csvSize": { + "description": "Character length of the output CSV.", + "type": "integer" + }, + "headers": { + "description": "Ordered list of column names in output order.", + "items": { + "type": "string" + }, + "type": "array" + }, + "objectItems": { + "description": "Number of plain-object items found among the input rows.", + "type": "integer" + }, + "originalSize": { + "description": "Character length of the input JSON.", + "type": "integer" + }, + "rows": { + "description": "Total CSV line count, including the header row when includeHeaders is true.", + "type": "integer" + } + }, + "type": "object" + }, + "warnings": { + "description": "Non-fatal notices, such as nested objects being JSON-stringified.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
webdev_json_to_typescript4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "exportInterfaces": { + "default": true, + "description": "Prefix each interface and type with the export keyword.", + "type": "boolean" + }, + "json": { + "description": "JSON text to convert into TypeScript. Accepts an object, array, or primitive. Must not be blank. The legacy alias input is also accepted.", + "type": "string" + }, + "namingStyle": { + "default": "PascalCase", + "description": "Casing applied to generated interface names.", + "enum": [ + "PascalCase", + "camelCase", + "snake_case" + ], + "type": "string" + }, + "optional": { + "default": false, + "description": "Mark every property optional with a trailing question mark (null or undefined values are always optional regardless).", + "type": "boolean" + }, + "readonly": { + "default": false, + "description": "Prefix every property with the readonly modifier.", + "type": "boolean" + }, + "rootInterfaceName": { + "default": "RootInterface", + "description": "Name for the top-level interface or type. Non-alphanumeric characters are stripped.", + "type": "string" + }, + "strictNullChecks": { + "default": true, + "description": "Emit the null type for JSON null values; when false, null becomes any.", + "type": "boolean" + } +} - added
Input schema / requiredAdded value: +[ + "json" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analysis": { + "description": "Per-property type breakdown (empty on failure).", + "items": { + "properties": { + "description": { + "description": "Human note about the value (for example ISO date string or item count).", + "type": "string" + }, + "id": { + "description": "Zero-based index of the analysed property.", + "type": "integer" + }, + "property": { + "description": "Dotted path to the property within the JSON.", + "type": "string" + }, + "type": { + "description": "Inferred TypeScript type for the property.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "errors": { + "description": "Parse or empty-input errors (empty when isValid is true).", + "items": { + "properties": { + "id": { + "description": "Error identifier.", + "type": "integer" + }, + "line": { + "description": "One-based source line of the parse error, or null when unknown.", + "type": [ + "integer", + "null" + ] + }, + "message": { + "description": "Human-readable error message.", + "type": "string" + }, + "type": { + "description": "Error category (for example Parse Error or Empty Input).", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "interfaces": { + "description": "The generated TypeScript interface or type source (empty string on failure).", + "type": "string" + }, + "isValid": { + "description": "Whether the JSON parsed and generated successfully.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
webdev_openapi_viewer6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / formatRemoved value: -{ - "type": "string" -} - added
Input schema / properties / specification / descriptionAdded value: +"Raw OpenAPI/Swagger document as text (aliases: spec, input). Parsed as JSON first, then as simple YAML if that fails. Must be non-empty and contain an \"openapi\" or \"swagger\" field plus an \"info\" object, or the request is rejected." - added
Input schema / properties / specification / examplesAdded value: +[ + "{\"openapi\":\"3.0.0\",\"info\":{\"title\":\"X\",\"version\":\"1\"},\"paths\":{}}" +] - changed
Input schema / requiredPrevious value: -[ - "specification", - "format" -]New value: +[ + "specification" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "endpointCount": { + "description": "Total number of HTTP operations (get/post/put/delete/patch/options/head) across all paths.", + "type": "integer" + }, + "schemas": { + "description": "Component schemas (OpenAPI components.schemas) or Swagger definitions; empty object if none.", + "type": "object" + }, + "spec": { + "description": "The normalized specification object parsed from the input.", + "type": "object" + }, + "version": { + "description": "Detected version label, e.g. \"OpenAPI 3.0.0\", \"Swagger 2.0\", or \"Unknown\".", + "type": "string" + } + }, + "type": "object" +}
- Changed
webdev_regex_tester19 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / flags / additionalPropertiesAdded value: +false - added
Input schema / properties / flags / descriptionAdded value: +"Optional regex flag toggles assembled into a flag string. Omitted flags use their defaults." - added
Input schema / properties / flags / properties / dotAll / defaultAdded value: +false - added
Input schema / properties / flags / properties / dotAll / descriptionAdded value: +"s flag: dot matches newline characters." - added
Input schema / properties / flags / properties / global / defaultAdded value: +true - added
Input schema / properties / flags / properties / global / descriptionAdded value: +"g flag: find all matches rather than only the first." - added
Input schema / properties / flags / properties / ignoreCase / defaultAdded value: +false - added
Input schema / properties / flags / properties / ignoreCase / descriptionAdded value: +"i flag: case-insensitive matching." - added
Input schema / properties / flags / properties / multiline / defaultAdded value: +false - added
Input schema / properties / flags / properties / multiline / descriptionAdded value: +"m flag: anchors caret and dollar match at line boundaries." - removed
Input schema / properties / flags / requiredRemoved value: -[ - "global", - "ignoreCase", - "multiline", - "dotAll" -] - added
Input schema / properties / pattern / descriptionAdded value: +"The regular expression body without slashes or inline flags (for example a digit-class pattern). Must not be blank; an invalid pattern returns an error field instead of throwing." - added
Input schema / properties / replacement / defaultAdded value: +"" - added
Input schema / properties / replacement / descriptionAdded value: +"Optional replacement string for a find-and-replace preview (supports dollar-1 and named backreferences). When blank, replaceResult is empty. Also accepted under the legacy key replacePattern." - added
Input schema / properties / testStringAdded value: +{ + "description": "The sample text the pattern is run against. Must not be blank. Also accepted under the legacy key text.", + "type": "string" +} - removed
Input schema / properties / textRemoved value: -{ - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "pattern", - "text", - "flags", - "replacement" -]New value: +[ + "pattern", + "testString" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "error": { + "description": "Null on success; an invalid-regex-pattern message when compilation failed.", + "type": [ + "string", + "null" + ] + }, + "flagOptions": { + "description": "The effective flag toggles after defaults were applied.", + "properties": { + "dotAll": { + "description": "Whether the s flag was applied.", + "type": "boolean" + }, + "global": { + "description": "Whether the g flag was applied.", + "type": "boolean" + }, + "ignoreCase": { + "description": "Whether the i flag was applied.", + "type": "boolean" + }, + "multiline": { + "description": "Whether the m flag was applied.", + "type": "boolean" + } + }, + "type": "object" + }, + "flags": { + "description": "The resolved flag string built from the flags object (for example gi).", + "type": "string" + }, + "matches": { + "description": "One entry per match (or a single entry when global is false).", + "items": { + "properties": { + "captures": { + "description": "Captured group values in order; a group that did not participate is null.", + "items": { + "description": "A single captured group value, or null.", + "type": [ + "string", + "null" + ] + }, + "type": "array" + }, + "end": { + "description": "Zero-based offset one past the end of the match.", + "type": "integer" + }, + "index": { + "description": "Zero-based start offset of the match in the text.", + "type": "integer" + }, + "text": { + "description": "The full matched substring.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "pattern": { + "description": "The submitted regex pattern, echoed back.", + "type": "string" + }, + "patternAnalysis": { + "description": "Structural summary of the pattern, or null when the pattern or text was empty.", + "properties": { + "captureGroups": { + "description": "Count of unescaped capture groups detected.", + "type": "integer" + }, + "flags": { + "description": "The resolved flag string.", + "type": "string" + }, + "hasAnchors": { + "description": "Whether the pattern contains an anchor (caret or dollar).", + "type": "boolean" + }, + "hasCharClasses": { + "description": "Whether the pattern contains a character class.", + "type": "boolean" + }, + "hasQuantifiers": { + "description": "Whether the pattern contains a quantifier (star, plus, question mark, or brace).", + "type": "boolean" + }, + "length": { + "description": "Character length of the pattern.", + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] + }, + "replaceResult": { + "description": "The text after applying replacement, or empty when no replacement was given.", + "type": "string" + }, + "replacement": { + "description": "The submitted replacement string, echoed back.", + "type": "string" + }, + "success": { + "description": "True when the pattern compiled and ran without error.", + "type": "boolean" + }, + "text": { + "description": "The submitted test string, echoed back.", + "type": "string" + } + }, + "type": "object" +}
- Changed
webdev_sass_compiler13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / includePathsAdded value: +{ + "description": "Accepted and echoed for compatibility but ignored by the compiler (load paths are disabled for security, so remote or host @import lookups never run).", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / outputStyle / defaultAdded value: +"expanded" - added
Input schema / properties / outputStyle / descriptionAdded value: +"CSS formatting style forwarded to Dart Sass via the style flag. expanded is human-readable; compressed is minified." - added
Input schema / properties / outputStyle / enumAdded value: +[ + "expanded", + "compressed", + "compact", + "nested" +] - added
Input schema / properties / sass / descriptionAdded value: +"SCSS or SASS source code to compile. Must not be blank; an empty value is rejected." - added
Input schema / properties / sourceMap / defaultAdded value: +false - added
Input schema / properties / sourceMap / descriptionAdded value: +"When true, generate a source map and return its JSON in the sourceMap field." - added
Input schema / properties / syntax / defaultAdded value: +"scss" - added
Input schema / properties / syntax / descriptionAdded value: +"Source syntax: scss for brace-and-semicolon SCSS, sass for the indented SASS syntax. Sets the temp file extension passed to the compiler." - added
Input schema / properties / syntax / enumAdded value: +[ + "scss", + "sass" +] - changed
Input schema / requiredPrevious value: -[ - "sass", - "syntax", - "outputStyle", - "sourceMap" -]New value: +[ + "sass" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "compiled": { + "description": "The compiled CSS output.", + "type": "string" + }, + "compiledSize": { + "description": "Character length of the compiled CSS.", + "type": "integer" + }, + "compressionRatio": { + "description": "Size change as a percentage of the original length.", + "type": "number" + }, + "error": { + "description": "Present only on failure (HTTP 400/500): a cleaned compilation error message.", + "type": "string" + }, + "hasSourceMap": { + "description": "Whether a source map is present in this response.", + "type": "boolean" + }, + "original": { + "description": "The submitted SCSS/SASS source, echoed back.", + "type": "string" + }, + "originalSize": { + "description": "Character length of the original source.", + "type": "integer" + }, + "outputStyle": { + "description": "The output style applied (expanded, compressed, compact, or nested).", + "type": "string" + }, + "sourceMap": { + "description": "Source map JSON when sourceMap was requested and produced, otherwise null.", + "type": [ + "string", + "null" + ] + }, + "syntax": { + "description": "The source syntax used (scss or sass).", + "type": "string" + } + }, + "type": "object" +}
- Changed
webdev_sql_formatter4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "addSemicolon": { + "default": false, + "description": "Append a trailing semicolon when the statement does not already end with one.", + "type": "boolean" + }, + "compactMode": { + "default": false, + "description": "Collapse the SELECT field list onto a single line instead of one column per line.", + "type": "boolean" + }, + "format": { + "default": true, + "description": "When true, reindent via the sql-formatter engine; when false, only apply keyword casing.", + "type": "boolean" + }, + "indentSize": { + "default": 2, + "description": "Number of spaces per indent level (used only when indentType is spaces).", + "type": "integer" + }, + "indentType": { + "default": "spaces", + "description": "Indent with spaces (honouring indentSize) or with a single tab per level.", + "enum": [ + "spaces", + "tabs" + ], + "type": "string" + }, + "removeComments": { + "default": false, + "description": "Strip block (slash-star) and line (double-dash) comments before formatting.", + "type": "boolean" + }, + "sql": { + "description": "The SQL statement or script to format. Must not be blank.", + "type": "string" + }, + "uppercase": { + "default": true, + "description": "Upper-case SQL keywords (SELECT, FROM, WHERE); when false, preserve original casing.", + "type": "boolean" + } +} - added
Input schema / requiredAdded value: +[ + "sql" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "formatted": { + "description": "The reindented or recased SQL output.", + "type": "string" + }, + "original": { + "description": "The submitted SQL, echoed back.", + "type": "string" + }, + "stats": { + "description": "Size and content metrics for the statement.", + "properties": { + "formattedSize": { + "description": "Character length of the formatted SQL.", + "type": "integer" + }, + "keywords": { + "description": "Count of recognised SQL keywords in the formatted output.", + "type": "integer" + }, + "lines": { + "description": "Line count of the formatted output.", + "type": "integer" + }, + "originalSize": { + "description": "Character length of the original SQL.", + "type": "integer" + }, + "tables": { + "description": "Distinct table names referenced after FROM, JOIN, UPDATE, or INTO.", + "items": { + "description": "A referenced table name.", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" +}
- Changed
webdev_svg_optimizer4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "options": { + "additionalProperties": false, + "description": "Optional toggles; each optimization defaults to enabled unless explicitly set to false.", + "properties": { + "minimizeWhitespace": { + "default": true, + "description": "Collapse whitespace while preserving text element content.", + "type": "boolean" + }, + "numberPrecision": { + "default": 2, + "description": "Decimal places kept when roundNumbers is enabled.", + "type": "integer" + }, + "optimizeColors": { + "default": true, + "description": "Shorten 6-digit hex to 3-digit and map named colors to hex.", + "type": "boolean" + }, + "removeComments": { + "default": true, + "description": "Remove XML comment blocks.", + "type": "boolean" + }, + "removeDefaultAttributes": { + "default": true, + "description": "Drop attributes set to their SVG default (such as opacity 1 or stroke-width 1).", + "type": "boolean" + }, + "removeDoctype": { + "default": true, + "description": "Remove DOCTYPE declarations.", + "type": "boolean" + }, + "removeEmptyElements": { + "default": true, + "description": "Remove elements with no content.", + "type": "boolean" + }, + "removeEmptyText": { + "default": true, + "description": "Remove empty text elements.", + "type": "boolean" + }, + "removeUnnecessaryGroups": { + "default": true, + "description": "Unwrap redundant or identity-transform g groups.", + "type": "boolean" + }, + "removeXmlDeclaration": { + "default": true, + "description": "Strip a leading XML declaration.", + "type": "boolean" + }, + "roundNumbers": { + "default": true, + "description": "Round long decimal coordinate values.", + "type": "boolean" + } + }, + "type": "object" + }, + "svg": { + "description": "Raw SVG markup to optimize. Must contain a valid svg root element or the request is rejected.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "svg" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "bytesSaved": { + "description": "Characters removed (original minus optimized).", + "type": "integer" + }, + "compressionRatio": { + "description": "Percent size reduction relative to the original.", + "type": "number" + }, + "optimizationsApplied": { + "description": "Human-readable labels for each optimization performed.", + "items": { + "description": "An applied optimization label.", + "type": "string" + }, + "type": "array" + }, + "optimizedSize": { + "description": "Character length of the optimized SVG.", + "type": "integer" + }, + "optimizedSvg": { + "description": "The optimized SVG markup string.", + "type": "string" + }, + "originalSize": { + "description": "Character length of the input SVG.", + "type": "integer" + }, + "previewDataUrl": { + "description": "Base64 data URL of the optimized SVG for preview.", + "type": "string" + } + }, + "type": "object" +}
- Changed
webdev_typescript_playground14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / code / descriptionAdded value: +"TypeScript source to transpile (alias: typescript). Must be non-empty." - added
Input schema / properties / code / examplesAdded value: +[ + "const greeting: string = \"hi\";" +] - added
Input schema / properties / module / defaultAdded value: +"CommonJS" - added
Input schema / properties / module / descriptionAdded value: +"Module system label echoed back in compilerOptions; does not alter output." - added
Input schema / properties / noImplicitAny / defaultAdded value: +true - added
Input schema / properties / noImplicitAny / descriptionAdded value: +"When true, flags function parameters with no type annotation as implicit-any diagnostics." - added
Input schema / properties / strict / defaultAdded value: +true - added
Input schema / properties / strict / descriptionAdded value: +"Strict-mode flag echoed back in compilerOptions; does not change checks." - added
Input schema / properties / target / defaultAdded value: +"ES2017" - added
Input schema / properties / target / descriptionAdded value: +"ECMAScript target. Only \"ES5\" triggers downleveling (const/let to var, arrows to functions, template literals to concatenation); any other value emits as-is." - added
Input schema / properties / target / examplesAdded value: +[ + "ES5", + "ES2017" +] - changed
Input schema / requiredPrevious value: -[ - "code", - "target", - "module", - "strict", - "noImplicitAny" -]New value: +[ + "code" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "compiledJs": { + "description": "The transpiled JavaScript output.", + "type": "string" + }, + "compilerOptions": { + "description": "The normalized options actually applied.", + "properties": { + "module": { + "description": "Resolved module system label.", + "type": "string" + }, + "noImplicitAny": { + "description": "Resolved implicit-any flag.", + "type": "boolean" + }, + "strict": { + "description": "Resolved strict flag.", + "type": "boolean" + }, + "target": { + "description": "Resolved ECMAScript target.", + "type": "string" + } + }, + "type": "object" + }, + "errors": { + "description": "Detected type/syntax diagnostics; empty when none.", + "items": { + "properties": { + "id": { + "description": "Zero-based index of the diagnostic.", + "type": "integer" + }, + "line": { + "description": "1-based source line number.", + "type": "integer" + }, + "message": { + "description": "Human-readable diagnostic message.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "success": { + "description": "True when no diagnostics were found (errors is empty).", + "type": "boolean" + }, + "typeInfo": { + "description": "Extracted typed symbols (variables and functions).", + "items": { + "properties": { + "id": { + "description": "Zero-based index of the symbol.", + "type": "integer" + }, + "symbol": { + "description": "Declared identifier name.", + "type": "string" + }, + "type": { + "description": "Declared type, or function for function declarations.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
webdev_user_agent5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / userAgent / descriptionAdded value: +"The User-Agent string to parse, e.g. a browser or bot UA header value. Required; an empty/blank value returns HTTP 400." - added
Input schema / properties / userAgent / examplesAdded value: +[ + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" +] - added
Input schema / properties / userAgent / minLengthAdded value: +1 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "botPurpose": { + "description": "Inferred bot purpose (Web Indexing, Content Preview, Site Monitoring, Data Fetching, Content Access) when isBot, else null.", + "type": [ + "string", + "null" + ] + }, + "botType": { + "description": "Bot category (Search Engine, Social Media, Messaging, Command Line Tool, Programming Language, Unknown Bot) when isBot, else null.", + "type": [ + "string", + "null" + ] + }, + "commonCrawler": { + "description": "True for a known search crawler (googlebot, bingbot, slurp, duckduckbot, baiduspider, yandexbot).", + "type": "boolean" + }, + "headlessBrowser": { + "description": "True when the UA indicates headless/PhantomJS/Selenium automation.", + "type": "boolean" + }, + "isBot": { + "description": "True when the UA matches a known bot/crawler/HTTP-client keyword.", + "type": "boolean" + }, + "parsed": { + "description": "Structured breakdown of the User-Agent string.", + "properties": { + "browser": { + "description": "Detected browser name/version/major; fields null when unknown.", + "type": "object" + }, + "cpu": { + "description": "CPU architecture (x64, x86, ARM) or null.", + "type": "object" + }, + "device": { + "description": "Device type/vendor/model (desktop, mobile, tablet).", + "type": "object" + }, + "engine": { + "description": "Rendering engine name/version (WebKit, Gecko, Trident); null when unknown.", + "type": "object" + }, + "features": { + "description": "Detected capability flags as name/value pairs.", + "items": { + "type": "object" + }, + "type": "array" + }, + "os": { + "description": "Operating system name/version; null when unknown.", + "type": "object" + }, + "raw": { + "description": "The trimmed input User-Agent string, echoed back.", + "type": "string" + } + }, + "type": "object" + }, + "success": { + "description": "Whether parsing succeeded.", + "type": "boolean" + }, + "suspicious": { + "description": "True for scripted/scraper UAs (python/curl/wget/bot/crawl/scrape) excluding googlebot/bingbot.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
webdev_webhook_tester12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / body / descriptionAdded value: +"Raw request body sent only with POST/PUT/PATCH. Max 131072 bytes (128 KiB)." - added
Input schema / properties / headers / additionalPropertiesAdded value: +{ + "type": "string" +} - added
Input schema / properties / headers / descriptionAdded value: +"Custom request headers as a name to value map (max 32). Host, content-length, connection, transfer-encoding, expect, and upgrade are blocked; CR/LF stripped from values." - removed
Input schema / properties / headers / propertiesRemoved value: -{ - "Content-Type": { - "type": "string" - } -} - removed
Input schema / properties / headers / requiredRemoved value: -[ - "Content-Type" -] - added
Input schema / properties / method / defaultAdded value: +"POST" - added
Input schema / properties / method / descriptionAdded value: +"HTTP method to use. Defaults to POST. Body is only sent for POST, PUT, and PATCH." - added
Input schema / properties / method / enumAdded value: +[ + "GET", + "POST", + "PUT", + "PATCH", + "DELETE" +] - added
Input schema / properties / url / descriptionAdded value: +"Absolute http(s) webhook URL to send the request to. Must resolve to a public IP; localhost, .local, private, and reserved ranges are rejected." - changed
Input schema / requiredPrevious value: -[ - "url", - "method", - "headers", - "body" -]New value: +[ + "url" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "properties": { + "body": { + "description": "Raw response body returned by the target.", + "type": "string" + }, + "contentType": { + "description": "Response content-type header, or unknown.", + "type": "string" + }, + "duration": { + "description": "Round-trip time in milliseconds.", + "type": "integer" + }, + "headers": { + "additionalProperties": { + "type": "string" + }, + "description": "Lower-cased response header name to value map.", + "type": "object" + }, + "method": { + "description": "The HTTP method that was used.", + "type": "string" + }, + "serverSide": { + "description": "Always true; the request was performed server-side, not from the browser.", + "type": "boolean" + }, + "size": { + "description": "Response body size in bytes.", + "type": "integer" + }, + "status": { + "description": "HTTP status code returned by the target.", + "type": "integer" + }, + "statusText": { + "description": "Reason phrase for the status code (may be empty).", + "type": "string" + }, + "target": { + "description": "The URL that was requested.", + "type": "string" + } + }, + "type": "object" + }, + "meta": { + "properties": { + "executionTimeMs": { + "description": "Total server-side execution time in milliseconds.", + "type": "integer" + } + }, + "type": "object" + }, + "success": { + "description": "True when the outbound request completed and a response was captured.", + "type": "boolean" + } + }, + "type": "object" +}
- Changed
webdev_xml_formatter4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "addDeclaration": { + "default": false, + "description": "Prepend an XML declaration (version 1.0, UTF-8) when one is absent.", + "type": "boolean" + }, + "format": { + "default": true, + "description": "Pretty-print with indentation when true; emit compact single-line XML when false.", + "type": "boolean" + }, + "indentSize": { + "default": 2, + "description": "Number of spaces per indent level (ignored when indentType is tabs).", + "type": "integer" + }, + "indentType": { + "default": "spaces", + "description": "Whether each indent level is spaces or a tab character.", + "enum": [ + "spaces", + "tabs" + ], + "type": "string" + }, + "preserveWhitespace": { + "default": false, + "description": "Keep original text whitespace when true; trim element text when false.", + "type": "boolean" + }, + "removeComments": { + "default": false, + "description": "Strip XML comments from the output when true.", + "type": "boolean" + }, + "sortAttributes": { + "default": false, + "description": "Sort the attributes of each element alphabetically by name when true.", + "type": "boolean" + }, + "validate": { + "default": true, + "description": "Check well-formedness and report mismatched or unclosed tags as errors.", + "type": "boolean" + }, + "xml": { + "description": "The XML document to format or validate. Must not be blank.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "xml" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "errors": { + "description": "Parse error messages (empty when valid).", + "items": { + "description": "A parse error message.", + "type": "string" + }, + "type": "array" + }, + "formatted": { + "description": "The formatted XML, or the original input when parsing failed.", + "type": "string" + }, + "isValid": { + "description": "Whether the XML parsed as well-formed.", + "type": "boolean" + }, + "original": { + "description": "The submitted XML, echoed back.", + "type": "string" + }, + "stats": { + "description": "Node counts and size metrics for the document.", + "properties": { + "attributes": { + "description": "Total attributes across all elements.", + "type": "integer" + }, + "comments": { + "description": "Number of XML comments found.", + "type": "integer" + }, + "elements": { + "description": "Number of XML elements parsed.", + "type": "integer" + }, + "formattedSize": { + "description": "Character length of the formatted output.", + "type": "integer" + }, + "originalSize": { + "description": "Character length of the input XML.", + "type": "integer" + }, + "textNodes": { + "description": "Number of non-empty text nodes.", + "type": "integer" + } + }, + "type": "object" + }, + "warnings": { + "description": "Non-fatal warnings.", + "items": { + "description": "A warning message.", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
webdev_xml_to_json4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "attributePrefix": { + "default": "@", + "description": "Prefix prepended to attribute names so they do not collide with child element keys.", + "type": "string" + }, + "booleanConversion": { + "default": true, + "description": "Coerce the literal text true and false into JSON booleans when true; keep them as strings when false.", + "type": "boolean" + }, + "ignoreNamespaces": { + "default": false, + "description": "Strip namespace prefixes from element and attribute names (for example soap:Body becomes Body) when true.", + "type": "boolean" + }, + "numericConversion": { + "default": true, + "description": "Coerce numeric-looking text values into JSON numbers when true; keep them as strings when false.", + "type": "boolean" + }, + "preserveAttributes": { + "default": true, + "description": "Include element attributes in the output (each key prefixed by attributePrefix) when true; drop all attributes when false.", + "type": "boolean" + }, + "prettyPrint": { + "default": true, + "description": "Indent the JSON output with two spaces when true; emit compact single-line JSON when false.", + "type": "boolean" + }, + "removeEmptyNodes": { + "default": false, + "description": "Omit elements whose converted value is empty (empty string, empty object, or null) when true.", + "type": "boolean" + }, + "textNodeName": { + "default": "_text", + "description": "Key used to hold an element text value when that element also has attributes or child elements.", + "type": "string" + }, + "xml": { + "description": "The XML document to convert. Must be non-blank and have a single root element. Mismatched or unclosed tags produce an isValid false result with an error message.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "xml" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "data": { + "description": "The parsed JSON value as a structured object (null when parsing failed).", + "type": "object" + }, + "errors": { + "description": "Parse or validation error messages (empty when isValid is true).", + "items": { + "type": "string" + }, + "type": "array" + }, + "isValid": { + "description": "True when the XML parsed successfully and JSON was produced.", + "type": "boolean" + }, + "json": { + "description": "The JSON output as a string (indented or compact per prettyPrint).", + "type": "string" + }, + "original": { + "description": "The submitted XML, echoed back.", + "type": "string" + }, + "stats": { + "description": "Counts and metrics describing the converted document.", + "properties": { + "attributes": { + "description": "Number of attributes parsed.", + "type": "integer" + }, + "depth": { + "description": "Maximum nesting depth of the JSON data.", + "type": "integer" + }, + "elements": { + "description": "Number of XML elements parsed.", + "type": "integer" + }, + "jsonSize": { + "description": "Character length of the JSON output string.", + "type": "integer" + }, + "namespaces": { + "description": "Map of declared namespace prefixes to their URIs.", + "type": "object" + }, + "originalSize": { + "description": "Character length of the input XML.", + "type": "integer" + }, + "rootElement": { + "description": "Name of the root element (namespace-stripped when ignoreNamespaces is true).", + "type": "string" + }, + "textNodes": { + "description": "Number of non-empty text nodes parsed.", + "type": "integer" + } + }, + "type": "object" + }, + "warnings": { + "description": "Non-fatal warning messages.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
webdev_yaml_formatter4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / propertiesAdded value: +{ + "addDocumentSeparator": { + "default": false, + "description": "Wrap output with a leading start marker and a trailing end marker.", + "type": "boolean" + }, + "arrayStyle": { + "default": "block", + "description": "Sequence rendering: block (one item per line) or inline (flow style).", + "enum": [ + "block", + "inline" + ], + "type": "string" + }, + "convertToJson": { + "default": false, + "description": "Also emit the data as 2-space-indented JSON in the json field.", + "type": "boolean" + }, + "format": { + "default": true, + "description": "Re-serialize (pretty-print) the parsed data; when false the original text is returned unchanged.", + "type": "boolean" + }, + "indentSize": { + "default": 2, + "description": "Spaces per indent level for the formatted output (UI offers 2, 4, or 8).", + "type": "integer" + }, + "objectStyle": { + "default": "block", + "description": "Mapping rendering: block (one key per line) or inline (flow style).", + "enum": [ + "block", + "inline" + ], + "type": "string" + }, + "removeComments": { + "default": false, + "description": "Drop lines that are YAML comments from the formatted output.", + "type": "boolean" + }, + "sortKeys": { + "default": false, + "description": "Recursively sort mapping keys alphabetically before output.", + "type": "boolean" + }, + "validate": { + "default": true, + "description": "Parse the input to determine validity and collect warnings.", + "type": "boolean" + }, + "yaml": { + "description": "YAML document to process. Must not be blank.", + "type": "string" + } +} - added
Input schema / requiredAdded value: +[ + "yaml" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "errors": { + "description": "Parse error messages (empty when valid).", + "items": { + "description": "A parse error message.", + "type": "string" + }, + "type": "array" + }, + "formatted": { + "description": "The formatted YAML (or original text when format is false or parsing failed).", + "type": "string" + }, + "isValid": { + "description": "Whether the input parsed as valid YAML.", + "type": "boolean" + }, + "json": { + "description": "Equivalent JSON when convertToJson is true, otherwise an empty string.", + "type": "string" + }, + "original": { + "description": "The submitted YAML, echoed back.", + "type": "string" + }, + "stats": { + "description": "Structure and size metrics for the document.", + "properties": { + "arrays": { + "description": "Count of sequences or arrays.", + "type": "integer" + }, + "comments": { + "description": "Count of comment lines.", + "type": "integer" + }, + "formattedSize": { + "description": "Character length of the formatted output.", + "type": "integer" + }, + "keys": { + "description": "Total mapping keys.", + "type": "integer" + }, + "lines": { + "description": "Line count of the original input.", + "type": "integer" + }, + "objects": { + "description": "Count of mappings or objects.", + "type": "integer" + }, + "originalSize": { + "description": "Character length of the original input.", + "type": "integer" + }, + "scalars": { + "description": "Count of scalar values.", + "type": "integer" + } + }, + "type": "object" + }, + "warnings": { + "description": "Non-fatal lint warnings with line numbers (mixed indentation, trailing whitespace).", + "items": { + "description": "A warning message.", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
264 tool updates
v0.1.0- First observed
conversion_base_converter - First observed
conversion_bcd - First observed
conversion_binary_decimal - First observed
conversion_braille - First observed
conversion_color_code - First observed
conversion_decimal_hex - First observed
conversion_emoji - First observed
conversion_gray_code - First observed
conversion_hamming_code - First observed
conversion_ieee754_float - First observed
conversion_morse - First observed
conversion_number_base - First observed
conversion_octal_text - First observed
conversion_parity_bit - First observed
conversion_roman_numerals - First observed
conversion_string_number - First observed
convert_timestamp - First observed
crypto_argon2 - First observed
crypto_argon2_verify - First observed
crypto_bcrypt - First observed
crypto_bcrypt_verify - First observed
crypto_blake2 - First observed
crypto_blake3 - First observed
crypto_checksum - First observed
crypto_hash - First observed
crypto_hash_cracker - First observed
crypto_hash_identifier - First observed
crypto_hmac - First observed
crypto_keccak_generator - First observed
crypto_mysql_password_generator - First observed
crypto_ntlm - First observed
crypto_password_generator - First observed
crypto_password_generator_passphrase - First observed
crypto_password_generator_pin - First observed
crypto_password_strength - First observed
crypto_password_strength_bulk - First observed
crypto_pbkdf2 - First observed
crypto_pbkdf2_verify - First observed
crypto_postgresql_password_generator - First observed
crypto_ripemd - First observed
crypto_scrypt - First observed
crypto_scrypt_verify - First observed
crypto_sha3_generator - First observed
crypto_uuid - First observed
crypto_whirlpool - First observed
data_data_anonymizer - First observed
data_data_faker - First observed
data_json_path_evaluator - First observed
data_json_schema_validator - First observed
data_mock_api_generator - First observed
data_random_data_generator - First observed
data_sample_data_generator - First observed
data_table_generator - First observed
data_uuid_validator - First observed
describe_tool - First observed
encoding_decoding_ascii85 - First observed
encoding_decoding_atbash - First observed
encoding_decoding_baconian - First observed
encoding_decoding_base64 - First observed
encoding_decoding_base91 - First observed
encoding_decoding_basex - First observed
encoding_decoding_binary_text - First observed
encoding_decoding_binhex - First observed
encoding_decoding_bubble_babble - First observed
encoding_decoding_caesar - First observed
encoding_decoding_hex_ascii - First observed
encoding_decoding_html_entities - First observed
encoding_decoding_jwt - First observed
encoding_decoding_punycode - First observed
encoding_decoding_quoted_printable - First observed
encoding_decoding_railfence - First observed
encoding_decoding_rot - First observed
encoding_decoding_rot13 - First observed
encoding_decoding_string_escape - First observed
encoding_decoding_unicode - First observed
encoding_decoding_url - First observed
encoding_decoding_uuencode - First observed
encoding_decoding_vigenere - First observed
encoding_decoding_xxencode - First observed
file_file_size_calculator - First observed
file_mime_type_lookup - First observed
format_json - First observed
format_json_visualizer - First observed
linux_bash_script_generator - First observed
linux_chmod - First observed
linux_cron - First observed
linux_disk_usage_calculator - First observed
linux_env_variable_manager - First observed
linux_iptables_rule_generator - First observed
linux_linux_command_builder - First observed
linux_log_parser - First observed
linux_package_manager_commands - First observed
linux_process_signal_reference - First observed
linux_ssh_config_generator - First observed
linux_systemd - First observed
linux_systemd_unit_generator - First observed
linux_user_group_manager - First observed
linux_web_server_config_generator - First observed
math_bitwise_calculator - First observed
math_bmi_calculator - First observed
math_compound_interest_calculator - First observed
math_currency_converter_convert - First observed
math_currency_converter_history - First observed
math_factorial_calculator - First observed
math_fibonacci_generator - First observed
math_fuel_consumption_calculator - First observed
math_gcd_lcm_calculator - First observed
math_loan_calculator - First observed
math_matrix_calculator - First observed
math_number_to_words - First observed
math_percentage_calculator - First observed
math_prime_number_checker - First observed
math_quadratic_solver - First observed
math_random_number_generator - First observed
math_ratio_calculator - First observed
math_running_pace_converter - First observed
math_scientific_calculator - First observed
math_statistics_calculator - First observed
math_unit_converter - First observed
network_asn_lookup - First observed
network_bgp_route_lookup - First observed
network_cidr_calculator - First observed
network_dmarc_record_checker - First observed
network_dns - First observed
network_dns_propagation - First observed
network_ip_geolocation - First observed
network_ip_range_calculator - First observed
network_mx_record_lookup - First observed
network_my_ip - First observed
network_ping - First observed
network_port_scan - First observed
network_proxy_list_more - First observed
network_request_headers - First observed
network_request_headers_post - First observed
network_reverse_dns - First observed
network_spf_record_checker - First observed
network_ssl_certificate - First observed
network_subnet_calculator - First observed
network_tcp_udp_port_reference - First observed
network_traceroute_stream - First observed
network_website_status_checker - First observed
network_whois - First observed
networking_ipv4_to_ipv6 - First observed
networking_mac_address_generator - First observed
networking_mtu_size_calculator - First observed
networking_network_latency_calculator - First observed
networking_wake_on_lan - First observed
osint_barcode_generator - First observed
osint_barcode_scanner - First observed
osint_bic_swift_validate - First observed
osint_credit_card_validator - First observed
osint_domain_age - First observed
osint_ean_upc_validator - First observed
osint_email_headers - First observed
osint_exif_data - First observed
osint_hash_lookup - First observed
osint_iban_validator - First observed
osint_isbn_validator - First observed
osint_mac_vendor_lookup - First observed
osint_phone_validator - First observed
osint_qr_code_generator - First observed
osint_vin_decoder - First observed
report_bug - First observed
search - First observed
security_api_key_generator - First observed
security_csp_generator - First observed
security_htaccess_generator - First observed
security_jwt_generator_validator - First observed
security_openssl_command_builder - First observed
security_password_policy_generator - First observed
security_proxy_parse - First observed
security_proxy_test - First observed
security_proxy_test_single - First observed
security_proxy_test_stream - First observed
security_robots_txt_generator - First observed
security_totp_qr_generator - First observed
seo_hreflang_generator - First observed
seo_keyword_density_checker - First observed
seo_meta_tag_generator - First observed
seo_open_graph_generator - First observed
seo_schema_org_generator - First observed
seo_sitemap_generator - First observed
seo_title_description_length_checker - First observed
text_add_line_numbers - First observed
text_add_prefix_suffix - First observed
text_anagram_generator - First observed
text_ascii_table - First observed
text_ascii_table_post - First observed
text_ascii_text - First observed
text_bash_escaper - First observed
text_case_converter - First observed
text_counter - First observed
text_diff - First observed
text_duplicate_line_remover - First observed
text_duplicate_word_remover - First observed
text_extract_emails - First observed
text_extract_urls - First observed
text_find_replace - First observed
text_line_counter - First observed
text_lorem_ipsum - First observed
text_lorem_ipsum_variations - First observed
text_palindrome_checker - First observed
text_remove_duplicate_characters - First observed
text_remove_line_numbers - First observed
text_reverse_text - First observed
text_sort_lines - First observed
text_string_escape - First observed
text_text_column - First observed
text_text_joiner - First observed
text_text_obfuscator - First observed
text_text_randomizer - First observed
text_text_splitter - First observed
text_text_statistics - First observed
text_text_trimmer - First observed
text_word_frequency - First observed
time_age_calculator - First observed
time_cron_parser - First observed
time_date_calculator - First observed
time_date_difference - First observed
time_day_of_week - First observed
time_iso_8601_formatter - First observed
time_leap_year_checker - First observed
time_time_duration - First observed
time_timezone_converter - First observed
time_week_number - First observed
time_working_days_calculator - First observed
time_world_clock - First observed
web_dev_html_to_markdown - First observed
web_dev_markdown_to_html - First observed
webdev_base64_image_encoder - First observed
webdev_border_radius_generator - First observed
webdev_box_shadow_generator - First observed
webdev_code_formatter - First observed
webdev_color_palette - First observed
webdev_css_beautifier - First observed
webdev_css_filter_generator - First observed
webdev_css_gradient_generator - First observed
webdev_css_minifier - First observed
webdev_csv_to_json - First observed
webdev_data_uri_generator - First observed
webdev_favicon_generator - First observed
webdev_graphql_formatter - First observed
webdev_hex_color - First observed
webdev_hex_viewer - First observed
webdev_html_entity_reference - First observed
webdev_html_minifier - First observed
webdev_http_status_reference - First observed
webdev_javascript_beautifier - First observed
webdev_js_minifier - First observed
webdev_js_obfuscator - First observed
webdev_json_schema_generator - First observed
webdev_json_to_csv - First observed
webdev_json_to_typescript - First observed
webdev_openapi_viewer - First observed
webdev_regex_tester - First observed
webdev_sass_compiler - First observed
webdev_sql_formatter - First observed
webdev_svg_optimizer - First observed
webdev_typescript_playground - First observed
webdev_user_agent - First observed
webdev_webhook_tester - First observed
webdev_xml_formatter - First observed
webdev_xml_to_json - First observed
webdev_yaml_formatter
TDQS
Scored across 262 tools
Tools are organized under clear category prefixes (conversion_, crypto_, data_, encoding_, etc.) with specific resource/action names, so most are distinct. However, there are exact duplicates like text_ascii_table and text_ascii_table_post, network_request_headers and network_request_headers_post, and text_string_escape is noted as 'functionally identical' to encoding_decoding_string_escape, creating confusion in a few spots. Some pairs like text_text_splitter vs text_text_joiner are clearly inverse, and conversion tools are well cross-referenced.
Names follow a consistent category_verb_noun pattern (e.g., crypto_sha3_generator, network_dns, osint_iban_validator, webdev_json_to_csv). There are some deviations like convert_timestamp (missing category prefix), search, describe_tool, report_bug, and text_counter which don't follow the category_ prefix pattern. Also some verbs vary (e.g., _generator vs _calculator vs _checker vs _validator) but these are semantically meaningful and consistent within domains.
262 tools is an extreme number for an MCP server and far exceeds the typical well-scoped range. Even for a broad 'cyber tools catalogue' aggregator, this mass of tools will be overwhelming for an agent to navigate and select from effectively. The server appears to be a proxy for an entire website rather than a focused MCP surface.
For the apparent domain (a catalogue of online cyber utilities), the surface is remarkably complete: search, describe, hash, encoding, network, OSINT, text, and webdev tools cover most common workflows. Obvious gaps include no way to list/filter the catalogue programmatically (only keyword search), no tool for decoding/verifying barcodes (osint_barcode_scanner exists but is a text-only description with no API details), and some duplicate POST variants. The report_bug tool covers feedback.
Maintenance
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseAqualityDmaintenanceA simple Model Context Protocol server that generates timestamp-based UUIDs (v7) when called by an LLM, providing chronologically sortable unique identifiers with no input parameters needed.123 npm1MIT
- AlicenseAqualityDmaintenanceEnables comprehensive DNS operations including lookups for various record types, reverse DNS queries, batch processing, and DNS resolution tracing. Supports multiple DNS servers with configurable caching and robust error handling.416 npm2MIT
- AlicenseBqualityCmaintenanceEnables comprehensive IP address intelligence and geolocation lookups through IPInfo's API. Provides 25+ tools for IP geolocation, ASN information, privacy detection, WHOIS lookups, and network analysis with strongly-typed responses.231MIT
- FlicenseNot gradedqualityBmaintenanceAn MCP server that exposes over 20 standard penetration testing utilities, such as Nmap, SQLMap, and OWASP ZAP, as callable tools for AI agents. It enables natural language control over complex security workflows for automated and interactive penetration testing.97-