S3eidat Tools MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@S3eidat Tools MCPMerge these three PDFs, compress the result, and add page numbers."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
S3eidat Tools MCP
The free, private S3eidat Tools as tools your AI assistant can use. PDF, images, text, developer chores, calculators, QR codes and document makers, served by a local MCP server. It runs on your own machine: your files are never uploaded anywhere, there is no account, no API key and no telemetry.
Works with Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, Codex, Gemini CLI and any other MCP client.
npx -y s3eidat-tools-mcpDocs site: https://s3eidat.github.io/s3eidat-tools-mcp/ · Tool reference: docs/tools.md · Skill: skills/
What you can ask
"Merge these three PDFs, compress the result and add page numbers."
"Turn every photo in ~/Desktop/receipts into one PDF."
"Resize this image to 1200 px wide as WebP and strip the GPS data."
"Format this JSON and convert it to YAML." · "What does this cron expression mean?"
"Monthly payment on a 250,000 loan at 5.2% over 25 years?" · "Prayer times in Amman tomorrow."
"Make a QR code for my Wi-Fi." · "Make an invoice PDF for these items."
Related MCP server: DJAI Tools MCP
Install
You need Node.js 20.19 or newer (22+ recommended). The first run downloads the package; later runs start instantly.
Claude Code
claude mcp add s3eidat -s user -- npx -y s3eidat-tools-mcpClaude Desktop
One click: download the .mcpb file for your computer from the
latest release and double-click it (or drag it into
Settings → Extensions). It includes everything, so you don't even need Node.js. You can pick an allowed folder and an
output folder in the extension's settings.
Or by hand: Settings → Developer → Edit Config, then add to claude_desktop_config.json and restart Claude:
{
"mcpServers": {
"s3eidat": {
"command": "npx",
"args": ["-y", "s3eidat-tools-mcp"]
}
}
}On Windows, if Claude can't find npx, use "command": "cmd" and "args": ["/c", "npx", "-y", "s3eidat-tools-mcp"].
Cursor
~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
{
"mcpServers": {
"s3eidat": { "command": "npx", "args": ["-y", "s3eidat-tools-mcp"] }
}
}VS Code (Copilot agent mode)
code --add-mcp '{"name":"s3eidat","command":"npx","args":["-y","s3eidat-tools-mcp"]}'or .vscode/mcp.json in a workspace:
{
"servers": {
"s3eidat": { "type": "stdio", "command": "npx", "args": ["-y", "s3eidat-tools-mcp"] }
}
}Windsurf
~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"s3eidat": { "command": "npx", "args": ["-y", "s3eidat-tools-mcp"] }
}
}Codex CLI
codex mcp add s3eidat -- npx -y s3eidat-tools-mcpGemini CLI
~/.gemini/settings.json:
{
"mcpServers": {
"s3eidat": { "command": "npx", "args": ["-y", "s3eidat-tools-mcp"] }
}
}Any other client (Streamable HTTP)
npx -y s3eidat-tools-mcp --http --port 8787Then point the client at http://127.0.0.1:8787/mcp. It only listens on your own machine unless you pass --host.
Hosted chat apps (ChatGPT, claude.ai) can only reach servers on the public internet; exposing this server there would
expose your files, so use a desktop/CLI client instead.
Options
Option | What it does |
| Only allow reading and writing files inside |
| Where outputs go when a tool call gives no |
| Largest input file in MB (default 200). |
| Only expose these groups: |
| Expose 3 small meta-tools ( |
| Only expose tools whose names start with these prefixes. |
| Also advertise each tool's output JSON Schema (results always include structured JSON either way). |
| Serve Streamable HTTP instead of stdio. |
| Print every tool and exit. |
Example: "args": ["-y", "s3eidat-tools-mcp", "--root", "/Users/me/Documents"].
Many tools, small context?
The full list is about 140 tools, roughly 65k tokens of tool definitions. Clients with tool search (Claude Code) handle
that well. If your client has a tool limit (Cursor, Windsurf) or you use a small model, either pick groups
(--groups pdf,image is about 17k tokens) or use --compact (about 600 tokens): the model then searches for a tool,
reads its inputs and runs it through three meta-tools.
{ "mcpServers": { "s3eidat": { "command": "npx", "args": ["-y", "s3eidat-tools-mcp", "--compact"] } } }How files work
Inputs take a local path (absolute,
~/…, or relative to--root) or base64 (raw,base64:…, or adata:URI).Outputs are written to the
outputyou give (a file path, or a folder ending in/), or to the output folder. Results return the path and small metadata, not big base64 blobs (setreturnBase64where offered if you need the bytes).Chain tools by passing one result's
pathto the next tool:pdf_from_images→pdf_compress→pdf_page_numbers.
Tools
162 tools. Full reference: docs/tools.md.
Group | Count | Tools |
17 |
| |
Images | 16 |
|
Text | 15 |
|
Developer: data formats | 15 |
|
Developer: utilities | 23 |
|
Calculators | 24 |
|
Everyday & security | 15 |
|
QR & barcodes | 4 |
|
Document makers | 7 |
|
For AI agents | 26 |
|
Every tool's description links the matching web tool on https://s3eidat.github.io for people who prefer a visual version.
The skill
skills/s3eidat-tools teaches an AI which tool fits which job, how to chain them and
when to send a person to the web tool instead. Install steps: skills/README.md.
Privacy
Everything runs locally in the Node process on your machine. The website ports make no network requests at all. A few
tools in the "For AI agents" group (such as fetching a web page as Markdown) do use the network; they are marked with
openWorldHint so your client can ask before running them. No analytics, no telemetry, no accounts.
Support
The tools are free. If they save you time, buy me a coffee ☕. Want an AI that reads your PDFs, writes and translates? Try s3eidatGPT.
Development
npm ci
npm test # builds, runs known-answer tests for every tool and an MCP round trip
npm run docs # regenerates docs/tools.md, docs/*.html, docs/llms.txt
npm run smoke # drives the built server over MCP stdio
npm run mcpb # builds a Claude Desktop extension for this platform into mcpb/out/
node dist/index.js --list
npx @modelcontextprotocol/inspector node dist/index.jsAdding a tool: one file in src/tools/<group>/…/<slug>.ts whose default export is defineTool({...}) from
src/registry.ts (the contract is documented at the top of that file). It is discovered
automatically. Add a known-answer test in test/. Releasing: RELEASING.md.
License
MIT © Omar (s3eidat)
Available Tools
162 toolsai_chartChart to SVG/PNGARead-onlyIdempotent
Render a chart to an SVG or PNG file, offline. Either give a simple description ({ type: bar|line|area|pie|scatter, data: rows, x, y, color?, title? }; y may be a list of fields for multi-series line/bar charts), or a full Vega-Lite (or Vega) spec in "spec" with the rows inline in data.values. Field types are inferred (numbers = quantitative, ISO dates = temporal, other = categories). Loading data or images from URLs or files is refused. Up to 50,000 rows. PNG is rasterised from the SVG at "scale" (default 2×).
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Field for the x axis (the category / slice label for pie). | |
| y | No | Numeric field for the y axis (slice size for pie). A list of fields draws one series per field. | |
| data | No | Rows for the simple chart, e.g. [{"month":"Jan","sales":12}]. | |
| spec | No | A full Vega-Lite spec (or Vega, if its $schema says so). Data must be inline (data.values). Use this or "type". | |
| type | No | Simple chart type. Use with data, x and y. | |
| color | No | Optional field that splits the data into coloured series. | |
| scale | No | PNG only: pixel density multiplier (2 = twice the SVG size, sharp on high-DPI screens). Default 2. | |
| title | No | ||
| width | No | Plot width in px (default 600; pie 360). | |
| format | No | Output format: svg (default) or png. | svg |
| height | No | Plot height in px (default 360). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| background | No | Background colour. Default white; "transparent" for none. | #ffffff |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/openWorld annotations, the description discloses offline operation, refusal to load data or images from URLs/files, a 50,000-row cap, and that PNG is rasterised from SVG at 'scale' (default 2×). These sandbox and size constraints are materially useful calling context the annotations don't carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the two input modes, then constraints and the PNG scale detail. It's dense but every clause (refusals, row cap, field inference) earns its place for a 14-parameter tool; the semicolon-heavy single paragraph slightly hurts scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 14 params, nested 'spec', and no output schema, the description covers both invocation paths and limits well. It doesn't state the return value explicitly (file path vs. base64), which matters without an output schema, keeping it just short of 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 already 93%, so the baseline is 3, but the description adds genuine meaning: type inference rules (numbers = quantitative, ISO dates = temporal, else categories) and that y may be a list of fields for multi-series charts. This complements the schema rather than repeating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Render a chart to an SVG or PNG file, offline') and immediately enumerates the two supported input modes. An agent can tell this apart from sibling tools like ai_diagram or image_svg_to_png without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the two mutually exclusive invocation paths (simple {type, data, x, y} vs. a full Vega-Lite/Vega 'spec') and notes field-type inference and what is refused. It stops short of naming a sibling alternative (e.g., ai_diagram for flowcharts), so it's clear context without exclusions across tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_chunk_textChunk text for RAGARead-onlyIdempotent
Split text, markdown or a text file into token-sized chunks for retrieval (RAG) and embeddings. Splits at markdown headings (ATX "#" headings, never inside code fences) and paragraphs first, then sentences (lines inside code blocks), and only cuts mid-sentence when a single sentence is longer than maxTokens. Consecutive chunks of the same section share about overlapTokens of text. Each chunk returns index, text, tokens, startChar/endChar (JavaScript string offsets, end exclusive, so text === source.slice(startChar, endChar) once CRLF line endings are normalised to \n) and the heading path it sits under. Tokens are counted with tiktoken (o200k_base by default; for Claude treat counts as estimates). Give "text" or "path" (file path or base64); give "output" to also write the chunks as JSONL (one JSON object per line).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a UTF-8 text/markdown file, as a local path or base64 (raw or a data: URI). | |
| text | No | The text (inline). | |
| output | No | Also write the chunks as JSONL to this file (or folder ending in "/"). | |
| encoding | No | Tokenizer: "o200k_base" (GPT-4o / o-series, default) or "cl100k_base" (GPT-4 / GPT-3.5 / text-embedding-3). | o200k_base |
| markdown | No | Treat "#" lines as section headings (default true). Set false for plain text. | |
| maxChunks | No | Most chunks to return inline (the JSONL file always has all). Default 2000. | |
| maxTokens | No | Largest chunk, in tokens. Default 500. | |
| includeText | No | Return each chunk's text inline. Default: true, or false when "output" is given. | |
| overlapTokens | No | Tokens repeated from the end of the previous chunk (same section only). Default 50. Must be below maxTokens. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly/idempotent/closed-world), and the description adds genuinely new behavior: heading-aware split order, never splitting inside code fences, mid-sentence cuts only when a sentence exceeds maxTokens, overlap only within the same section, and the caveat that Claude token counts are estimates. It also discloses the maxChunks inline cap vs. the JSONL file always containing all chunks.
Agents need to know what a tool does to the 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 front-loaded: purpose first, then split strategy, then return fields, then input modes. It is dense (a single long paragraph covering splitting, overlap, return fields, tokenizer, and I/O modes), which slightly hurts scannability but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description enumerates each returned field (index, text, tokens, startChar/endChar, heading path) and the JSONL side-effect, plus the tokenizer caveat. An agent has everything needed to predict inputs 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?
Schema coverage is 100%, so baseline is 3; the description goes beyond it by explaining overlap semantics ('same section only'), that endChar is exclusive with CRLF normalisation to \n, the tiktoken default and Claude caveat, and the includeText default flip when output 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?
States a specific verb+resource ('Split text, markdown or a text file into token-sized chunks') with an explicit purpose (RAG/embeddings). An agent can immediately distinguish this from siblings like ai_token_count or ai_pdf_to_markdown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear usage context is given: 'Give "text" or "path" ... give "output" to also write the chunks as JSONL', which tells the agent how to invoke for the desired result. It does not name alternatives or exclusions (e.g., when to prefer ai_token_count or a markdown converter first), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_create_pptxCreate a PowerPoint deckARead-onlyIdempotent
Build a 16:9 PowerPoint (.pptx) deck from a simple outline: an optional title slide, then slides with a title plus any of bullets (nested), a paragraph, an image (file path or base64), a table (first row = header; long tables continue on extra slides), a native editable chart (bar, line, pie) and speaker notes. Light or dark theme with clean, readable defaults; text plus a visual are laid out side by side. Arabic/Hebrew text is set right-to-left. Up to 300 slides. Opens in PowerPoint, Keynote, Google Slides and LibreOffice.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | light | |
| title | No | Deck title: adds a title slide and sets the file title. | |
| author | No | ||
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| slides | Yes | ||
| subtitle | No | Subtitle on the title slide. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. | |
| slideNumbers | No | Show slide numbers on content slides. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing hard limits (300 slides), layout rules (text plus visual side by side), RTL handling for Arabic/Hebrew, table overflow onto extra slides, and cross-application compatibility. It does not mention that a file is written to disk and where, though the `output` parameter partly covers that; readOnlyHint=true is slightly at odds with file creation but the tool is non-destructive in spirit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and artifact, then a dense but useful inventory of capabilities. The single long sentence is heavy but every clause carries information; only the compatibility sentence ('Opens in PowerPoint, Keynote...') is close to filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter generator with no output schema, the description never says what the tool returns (a file path? a status object?) or how errors surface. Behavior and content modeling are well covered, but the return contract is left entirely to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 63% schema coverage, the description adds real meaning: bullets may be nested, chart types are native and editable, table first row is a header, images come from path or base64. It does not touch `theme`, `slideNumbers`, or `returnBase64` semantics, so it adds value without fully compensating for the schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and artifact ('Build a 16:9 PowerPoint (.pptx) deck') and immediately distinguishes itself from the sibling ai_pptx_to_markdown by being the generator rather than the extractor. The enumeration of slide content types (bullets, paragraph, image, table, chart, notes) makes the 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 says it works 'from a simple outline', which implies when it fits, but never names a precondition or an alternative (e.g. when to prefer ai_diagram, or converting markdown first). No when-not-to-use guidance is given, leaving the agent to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_create_xlsxCreate an Excel workbook (.xlsx)ARead-onlyIdempotent
Build a real Excel .xlsx file from data: one or more sheets, each with optional column definitions (header, key, width, numFmt) and rows given as objects or arrays. Bold shaded header, frozen header row and filter buttons (both on by default), column widths fitted to the content, Excel number formats (raw codes like "#,##0.00" or aliases: integer, number, percent, currency, usd, eur, gbp, date, datetime, time, text), strings starting with "=" written as live formulas (=SUM(B2:B9), =B2*C2, cross-sheet refs), ISO date strings written as real dates, and an optional totals row (SUM/AVERAGE/COUNT/MIN/MAX formulas). Up to 50 sheets and 1,000,000 rows per sheet. Formulas are calculated by Excel when the file is opened. Writes to "output" (default "workbook.xlsx" in the output folder) and returns the path and a summary of each sheet.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Workbook title (file properties, and the default file name). | |
| author | No | Author in the file properties. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| sheets | Yes | ||
| parseDates | No | Write ISO date strings as Excel dates (default true). | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true, but the description explicitly says the tool writes an .xlsx file to output and returns the path. That is a direct contradiction of the read-only annotation, so behavioral transparency is scored 1 despite otherwise rich behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded and dense with useful details rather than filler. It packs many capabilities into a single paragraph, though it could be more scannable with separate sentences or bullets for formulas, formatting, and limits.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 the important call semantics: sheet structure, formatting defaults, formulas, date handling, limits, and return behavior. With no output schema, it usefully states that the result includes the path and a summary of each sheet.
Complex tools with many parameters or behaviors need more documentation. Simple 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 high at 83%, so the schema already documents most parameters. The description still adds meaningful semantics beyond the schema, including the 50-sheet and 1,000,000-row limits, formula handling, date conversion behavior, and totals-row calculation behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: building a real Excel .xlsx file from data. It clearly distinguishes this creation tool from the conversion/read sibling ai_xlsx_to_markdown and from ai_create_pptx by naming the exact output format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the tool's domain clear but never explicitly states when to use it versus alternatives or when not to use it. Usage is implied by the capabilities listed, such as creating workbooks with sheets, formulas, and totals, but no explicit routing guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_csv_profileProfile a table (CSV, JSON, XLSX)ARead-onlyIdempotent
Profile a table to understand and clean it before analysis: row and column counts, and per column the inferred type (integer, number, boolean, date, datetime, string), non-null and null counts, unique count, top 5 values, sample values, min/max/mean/median/stddev for numbers, min/max for ISO dates, min/max length for text, plus data-quality warnings (mixed types, leading/trailing spaces, mostly missing, constant columns, duplicate rows, ragged headers). Input: "file" (local path or base64 of CSV, TSV, JSON array, JSONL or .xlsx, first sheet or "sheet") or inline "csv" / "json". Empty cells, "null" and "NULL" count as missing. Runs locally; nothing is uploaded.
| Name | Required | Description | Default |
|---|---|---|---|
| csv | No | Or: CSV/TSV text inline (delimiter detected; first row is the header). | |
| file | No | A table file: local path (absolute, or relative to --root) or base64. CSV, TSV, JSON array, JSONL or .xlsx. | |
| json | No | Or: JSON inline: an array of objects (or of arrays, first one the header), as a value or as JSON/JSONL text. | |
| sheet | No | For .xlsx: the sheet name to read (default: the first sheet). | |
| format | No | Force the file format (default "auto": by extension, then by content). | auto |
| columns | No | Only profile these columns (default: all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, closed-world, idempotent profile, so the description's contribution is the local-execution guarantee ('nothing is uploaded') and the missing-value convention (empty cells, 'null', 'NULL' count as missing), both of which an agent needs. It stops short of describing cost, limits, or failure behavior for malformed input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the output inventory, then input modes, then a privacy note — a sensible ordering. The middle sentence is a dense parenthetical list of statistics and warning types, which is information-rich but reads as a run-on rather than structured bullets.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden of describing the return payload, and it does so exhaustively — counts, inferred types, per-type statistics, and warning categories. Combined with input-mode and missing-value semantics and annotation-covered safety, nothing an agent needs to decide or invoke correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3; the description adds value by explaining that 'file' accepts a local path or base64 across CSV/TSV/JSON/JSONL/XLSX, that 'sheet' applies to xlsx, and that 'csv'/'json' are inline alternatives. The only gap is that 'columns' and 'format' selection are not elaborated beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Profile a table') and enumerates the exact artifacts produced: row/column counts, inferred per-column types, null/unique counts, top values, numeric stats, date ranges, and data-quality warnings. An agent can distinguish this from siblings like csv_to_json or ai_json_schema_infer without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the use case ('to understand and clean it before analysis') and the data-quality warnings section implies adoption for cleaning workflows before transformation. It does not name alternatives or state when-not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_detect_languageDetect languageARead-onlyIdempotent
Detect the language of a text with franc-min (82 languages with 8M+ speakers, ISO 639-3 codes) and the writing systems it uses (Latin, Arabic, Cyrillic, Han/CJK, Hangul, Devanagari, Greek, Hebrew, Thai…). Returns the top 3 candidates with scores (1 = best match, relative to the others), English names and ISO 639-1 codes where they exist, plus a share per script. Texts under 20 characters are "too short": only the script is reported. Works best on a sentence or more of one language; for mixed text the dominant script wins; long texts are judged on their first 100,000 characters. Hebrew is not among the languages (script only). Give "text" or "path" (file path or base64).
| Name | Required | Description | Default |
|---|---|---|---|
| only | No | Restrict to these ISO 639-3 codes (e.g. ["arb","eng","fra"]). | |
| path | No | Or: a UTF-8 text/markdown file, as a local path or base64 (raw or a data: URI). | |
| text | No | The text (inline). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint, so the safety profile is covered; the description still adds substantial non-obvious behavior: top-3 candidate scoring semantics, the 20-character too-short threshold, dominant-script rule for mixed text, 100,000-character truncation, and the Hebrew exclusion. These are exactly the edge cases an agent would otherwise get wrong.
Agents need to know what a tool does to the 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-dense but front-loaded: core purpose and return format first, then caveats, then input contract. It is long-ish for one paragraph, yet nearly every clause carries a distinct constraint that is not restated elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden and does so thoroughly (top-3 with scores, names, ISO 639-1, per-script shares). Combined with the degradation rules and input contract, an agent has everything needed to call it and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple 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, but the description adds the one-of contract between 'text' and 'path' that the schema (0 required params, no oneOf) does not express, and clarifies the expected file type (UTF-8 text/markdown). 'only' is left to the schema, which documents it adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Detect the language of a text') and immediately names the engine and scope (franc-min, 82 languages, ISO 639-3) plus the secondary output (writing systems). It also spells out exactly what is returned, so an agent knows the tool's output shape from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real operating guidance: best on a sentence or more of one language, mixed text falls back to the dominant script, and short inputs (<20 chars) degrade to script-only. It also states the input contract ('Give "text" or "path"'). No alternatives are named, but no sibling performs language detection, so there is nothing to route against.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_diagramDiagram to SVG/PNGARead-onlyIdempotent
Draw a flowchart / graph diagram from a tiny text language and save it as SVG or PNG, laid out automatically (dagre). One statement per line: direction: LR (TB, LR, BT, RL), title: My flow, A [shape=diamond, label="Ready?", color=#fde68a] (shapes: box, round, diamond, circle, ellipse), edges A -> B: label, chains A -> B -> C, --> dashed, ==> thick, <-> both ends, -- no arrow; quote names with spaces ("Start here" -> A); \n in labels breaks lines; # starts a comment. Or pass JSON { nodes: [{id, label, shape, color}], edges: [{from, to, label, style, arrow}] } as "graph". Up to 500 nodes and 2000 edges. Labels use Helvetica/Arial metrics (Latin text is measured best).
| Name | Required | Description | Default |
|---|---|---|---|
| graph | No | The diagram as JSON instead of "source". | |
| scale | No | PNG only: pixel density multiplier (2 = twice the SVG size, sharp on high-DPI screens). Default 2. | |
| theme | No | light | |
| format | No | Output format: svg (default) or png. | svg |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| source | No | Diagram text in the DSL (or a JSON graph as text). | |
| direction | No | Override the layout direction: TB (top-bottom, default), LR, BT, RL. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/openWorld annotations, the description discloses the layout engine, hard limits (500 nodes, 2000 edges), the label-measurement caveat (Helvetica/Arial metrics, Latin text best), and that the default destination is a server output folder. The only notable silence is what the tool actually returns (path vs inline content), which the readOnlyHint does not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, then the DSL grammar and limits follow in a single dense run-on. Every clause carries information, but the packed semicolon syntax makes it harder to scan than a short bulleted grammar would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters, a nested object schema and no output schema, the description covers both input modes, size limits, layout behaviour, and destination defaults. The gap is the return contract (file path vs base64 payload) and the interplay of 'output' with 'returnBase64', which the agent must infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 88%, but the description adds real value by fully specifying the DSL accepted by 'source' (direction, title, node shapes, edge operators, quoting, comments, line breaks) and the JSON shape for 'graph'. It says nothing extra about theme, scale, or returnBase64 beyond their schema descriptions, so it stops just short of 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?
States a specific verb and resource ('Draw a flowchart / graph diagram'), the output artifacts (SVG or PNG), and the layout engine (dagre). An agent can distinguish this from ai_chart (data charts) and image_svg_to_png (rasterising existing SVG) without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through the input modes ('tiny text language ... Or pass JSON ... as "graph"') and the limits, but there is no explicit statement of when this tool should be chosen over siblings like ai_chart or image_svg_to_png, and no when-not guidance. The agent must infer suitability from the diagram/DSL framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_docx_to_markdownWord (.docx) to MarkdownARead-onlyIdempotent
Convert a Word .docx document to Markdown: headings (from Heading styles), bold/italic, lists, links, tables, footnotes. Images become placeholders like
unless embedImages is true (then data: URIs, which can be very large). Returns the number of conversion warnings (unrecognised styles and the like) and the first few messages. Old binary .doc files are not supported. Accepts a local path or base64. Inline Markdown is cut at maxChars (default 200k); "output" saves it to a file. Runs locally; nothing is uploaded.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The .docx document: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| output | No | Write the Markdown to this file (or folder ending in "/") and return its path instead of the inline text. | |
| maxChars | No | Cut the inline Markdown after this many characters, with a note (a file written with "output" is never cut). Default 200000. | |
| embedImages | No | Embed images as base64 data: URIs instead of placeholders. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations it discloses the practical traits that matter: images become placeholders unless embedImages is true (data: URIs, potentially very large), inline Markdown is truncated at maxChars while a written file is never cut, and nothing is uploaded. It also describes the return payload (warning count plus first few messages), which annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and format are front-loaded, then behavior details, then constraints; every sentence carries information. It is dense and packed into a few long sentences, which costs a bit of scannability but little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description covers return values, truncation caveats, image handling, file-vs-inline output, accepted input forms, and the unsupported .doc case. For a 4-parameter conversion tool that is everything an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description still adds real semantics by explaining the tradeoff behind embedImages (huge data: URIs) and the truncation behavior of maxChars, plus that a written output file escapes truncation. It slightly duplicates schema text ('default 200k') rather than adding further detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Convert a Word .docx document to Markdown') and enumerates the constructs handled (headings, bold/italic, lists, links, tables, footnotes). The .docx source format cleanly separates it from ai_pdf_to_markdown, ai_html_to_markdown, and ai_markdown_to_docx (the reverse direction).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete applicable context: accepts a local path or base64, old binary .doc is explicitly excluded, and 'output' saves to a file instead of inline text. It does not name sibling converters as alternatives, so the routing is implied by format rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_extract_entitiesExtract entitiesARead-onlyIdempotent
Pull structured items out of text or a text file, deduplicated with counts: emails, URLs, phone numbers (libphonenumber, validated, E.164 plus type/country; local numbers read with defaultRegion, default JO), dates (ISO, D/M/Y or M/D/Y, Y/M/D, English month names; normalised to YYYY-MM-DD; a date like 03/04/2024 is flagged ambiguous with the other reading), money ($, €, £, JOD/JD/د.أ, SAR/ر.س, AED/د.إ, KWD, EGP… and Arabic currency words, with amount and ISO currency), percentages, #hashtags, @mentions, IPv4/IPv6, IBANs (country length and mod-97 checked) and card-like numbers (only Luhn-valid ones with a known brand prefix, always masked: only the last 4 digits are shown, the full number is never returned). Arabic-Indic digits are understood. Regex-based, not NLP: no names, places or organisations. Give "text" or "path" (file path or base64).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a UTF-8 text/markdown file, as a local path or base64 (raw or a data: URI). | |
| text | No | The text (inline). | |
| types | No | Only these types (default all): emails, urls, phones, dates, money, percentages, hashtags, mentions, ipv4, ipv6, ibans, cards. | |
| maxPerType | No | Most unique items to return per type. Default 500. | |
| defaultRegion | No | Two-letter country for local phone numbers, regional currencies (dinar, riyal…) and D/M/Y vs M/D/Y. Default JO. | JO |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/idempotent annotations: results are deduplicated with counts, card-like numbers are only returned when Luhn-valid with a known brand and are always masked to the last 4 digits ('the full number is never returned'), IBANs get country-length and mod-97 checks, and ambiguous 03/04/2024 dates are flagged with the alternate reading. That is exactly the kind of privacy and validity context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and input options, and nearly every clause carries operational meaning. The long currency enumeration ('$, €, £, JOD/JD/د.أ, SAR/ر.س, AED/د.إ...') is the one place where detail could be compressed without losing agent-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, it does a good job describing the shape of results (per-type, deduplicated, counted, masked cards) and the date/phone normalization rules. It stops short of specifying the exact response envelope, so an agent still cannot predict the precise JSON 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%, so the baseline is 3. The description explains what defaultRegion actually changes (local phone parsing plus D/M/Y vs M/D/Y disambiguation) and that outputs are deduplicated, but it largely restates the schema's own parameter descriptions rather than adding new semantics for 'types' or 'maxPerType'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a concrete verb and resource ('Pull structured items out of text or a text file') and then enumerates exactly which entity classes are recognized, so an agent knows precisely what comes back. The closing 'Regex-based, not NLP: no names, places or organisations' draws a sharp boundary that separates it from true NER/OCR-style siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the input contract plainly ('Give "text" or "path" (file path or base64)') and rules out a whole use case up front with 'no names, places or organisations'. It does not name an alternative sibling (e.g. ai_ocr for images, text_social_count for social stats), so the when-to-use-differently guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_file_identifyIdentify a file typeARead-onlyIdempotent
Find out what a file really is from its content (magic bytes, via file-type: images, video, audio, archives, Office, PDF, fonts, executables… ~150 formats), not its name. Reports the detected type and MIME, whether the extension disagrees with the content, size, SHA-256, and for text files an encoding guess (UTF-8, UTF-8/16/32 with BOM, UTF-16 without BOM, ASCII, 8-bit legacy) plus a text kind (JSON, XML, SVG, HTML…). Accepts a file path or base64. Nothing is executed.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The file to identify: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| name | No | File name to compare the extension against (handy for base64 input). Default: the path's own name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: discloses the underlying library (file-type), the ~150-format coverage, that 'Nothing is executed', and the accepted input forms (path or base64). This is exactly the behavioral context annotations don't carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and packs useful detail into a few dense sentences with no filler. Slightly long due to the return-value enumeration, but each clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully compensates by enumerating the returned fields (detected type, MIME, mismatch flag, size, SHA-256, encoding and text-kind guess). An agent knows exactly what calling it yields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented. The description reinforces that a path or base64 is accepted and that the extension comparison happens, but adds little syntax or format detail beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb and resource ('Find out what a file really is from its content'), scopes it to magic-byte detection across ~150 formats, and explicitly contrasts it with name-based guessing. An agent can distinguish this from siblings like ai_media_info or hash_compute without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'from its content, not its name' framing implies when this is the right tool versus name-based inference, but it never names an alternative (e.g., ai_media_info) or states when NOT to use it. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_html_to_markdownHTML to MarkdownARead-onlyIdempotent
Convert HTML to clean Markdown for reading or feeding to a model: headings, lists, links, images, code blocks, GitHub-style tables and strikethrough. Give the HTML inline ("html") or as a file ("path": local path or base64). Optional "readable" keeps only the main article (Mozilla Readability, falls back to the whole body), "selector" converts only matching elements, "baseUrl" makes relative links absolute, "includeLinks": false drops link URLs and images. Scripts, styles and forms are removed. Inline Markdown is cut at maxChars (default 200k) with a note; give "output" to save the whole thing to a .md file. Runs locally; nothing is uploaded.
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | The HTML text. Give this or "path". | |
| path | No | An .html file instead of "html": local path or base64. | |
| output | No | Write the Markdown to this file (or folder ending in "/") and return its path instead of the inline text. | |
| baseUrl | No | URL the HTML came from, to make relative links and images absolute. | |
| maxChars | No | Cut the inline Markdown after this many characters, with a note (a file written with "output" is never cut). Default 200000. | |
| readable | No | Keep only the main content (article text), dropping navigation, ads and footers. | |
| selector | No | CSS selector: convert only the matching elements (e.g. "main", "article .post"). | |
| includeLinks | No | Keep links and images. False turns links into plain text and drops images. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and not open-world, but the description adds important behavior beyond them: scripts/styles/forms are removed, 'readable' falls back to the whole body, inline output is truncated at maxChars with a note, file output is never cut, and processing runs locally with nothing uploaded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one dense but well-structured paragraph that front-loads the purpose, then covers input modes, transformation options, truncation behavior, and privacy. Every sentence serves the caller; no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter conversion tool with no output schema, the description is complete enough: it explains input sources, output-file versus inline behavior, truncation, content filtering, link handling, and local execution. An agent has what it needs to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all eight parameters in detail. The description mostly restates those parameter meanings and adds only marginal semantics such as the Readability fallback; therefore the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: convert HTML to clean Markdown, with concrete output elements such as headings, lists, links, tables, and code blocks. It is immediately distinguishable from sibling conversion tools like ai_pdf_to_markdown and ai_docx_to_markdown by source format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context ('for reading or feeding to a model') and explains input modes (inline 'html' vs 'path'), plus when to use options like 'readable' and 'selector'. It does not explicitly compare against sibling conversion tools or state when not to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_image_diffCompare two imagesARead-onlyIdempotent
Compare two images pixel by pixel (pixelmatch, anti-aliasing aware) and write a diff PNG with changed pixels in red over a faded copy of the first image. Returns the number and percentage of different pixels. Images must be the same size unless resize is true (the second is stretched to the first's size). Reads PNG, JPEG, WebP, AVIF, GIF (first frame), TIFF and SVG; file path or base64; up to 50 MP. Good for visual regression checks.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | The first (reference) image: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| b | Yes | The second image: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| resize | No | Resize the second image to the first one's size when they differ (otherwise that is an error). | |
| includeAA | No | Count anti-aliased edge pixels as differences too. Default false. | |
| threshold | No | Colour difference tolerance 0..1; smaller is stricter. Default 0.1. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
On its own the description is unusually transparent: it discloses that a diff PNG is written with red-diff over a faded reference, that pixel count and percentage are returned, and that inputs must match in size unless resize is true. But it explicitly describes a filesystem write while annotations declare readOnlyHint=true and idempotentHint=true, which is a material inconsistency for an agent deciding whether this call has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph with essentially no waste and the core operation front-loaded; format and size limits follow in a logical order. Slightly run-on, packing formats, size limits and use case into a stream rather than separated cues.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly carries the return info (different-pixel count and percentage) and the artifact produced (diff PNG). A couple of details an agent might want are absent, such as the returned path of the diff file and error behavior when sizes mismatch, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real semantics beyond the schema: it explains that resize stretches the second image to the first's size, that anti-aliasing awareness is default behavior unless includeAA, and that inputs may be paths or base64 within a 50 MP cap. It does not cover threshold or output/returnBase64 behavior, so not 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?
States a specific verb and resource ('Compare two images pixel by pixel') and immediately names the underlying algorithm and output artifact (pixelmatch diff PNG). It is unambiguously distinct from siblings like text_diff, image_convert or image_resize.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence 'Good for visual regression checks' gives a concrete use case, and the size/resize constraint tells the agent when it can and cannot be called. It stops short of naming an alternative tool for non-visual comparisons, so a 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_json_schema_inferInfer a JSON Schema from samplesBRead-onlyIdempotent
Generate a JSON Schema (draft 2020-12) from one or more sample JSON values: types (integer vs number, mixed types as a type list), "null" added where a value can be null, required = keys present in every sample object, array items merged across all elements, string formats guessed when every sample matches (date-time, date, email, uri, uuid), and optional enums for small repeated string sets. Give "samples" (an array of sample values), or "text" (JSON, or JSONL = one sample per line), or "file" (path or base64 of a .json/.jsonl file). An array sample describes an array; to treat its elements as separate samples set eachItem. Pure local code; optionally writes the schema to "output".
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Or: a .json/.jsonl file (local path or base64). | |
| text | No | Or: JSON text (one sample) or JSONL (one sample per line). | |
| enums | No | Emit "enum" for string fields with few distinct values that repeat. Default false. | |
| title | No | Optional "title" for the schema. | |
| output | No | Optional: also write the schema as a .json file here. | |
| formats | No | Guess string formats (default true). | |
| samples | No | Sample values; each element is one sample. | |
| eachItem | No | If the only sample is an array, use its elements as the samples (schema of one record). Default false. | |
| required | No | List keys present in every sample as "required" (default true). | |
| maxEnumValues | No | Largest string set turned into an enum (default 8). | |
| additionalProperties | No | false adds additionalProperties: false to every object (strict). Default true (left open). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true, but the description says the tool can optionally write the schema to an output file. Writing a file is a side effect, directly contradicting the readOnlyHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is dense but front-loaded, starting with the core generation behavior and then covering inference rules. It earns most of its length, though it could be more clearly structured for an 11-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers input modes, inference behavior, and optional output for a complex tool with no output schema. It is nearly complete, but it does not explicitly state the exact return shape and includes the readOnly contradiction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the input schema. The description adds useful behavioral context around sample interpretation and eachItem, but most of the parameter semantics are already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: generate a JSON Schema from sample JSON values. It is clearly distinguishable from the sibling ai_json_schema_validate, which would validate rather than infer a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose: supply sample JSON and receive an inferred schema. However, the description never explicitly says when to choose this over ai_json_schema_validate or what inputs are unsuitable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_json_schema_validateValidate JSON against a JSON SchemaARead-onlyIdempotent
Validate JSON data against a JSON Schema with Ajv, reporting every error (allErrors) with its instancePath (JSON Pointer), schemaPath, keyword, message and params. Draft 2020-12 is used when the schema's $schema says 2020-12 (2019-09 likewise), otherwise draft-07 (draft-04/06 schemas are checked as draft-07). Formats checked: date, time, date-time, email, hostname, ipv4, ipv6, uri, uri-reference, uuid, regex, json-pointer (other formats are ignored and listed). Data: inline "data" (any JSON value), "dataText" (JSON text) or "dataFile" (path or base64). Schema: inline "schema" (object or JSON text) or "schemaFile". Remote $ref URLs are never fetched. Runs locally.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | The JSON value to validate, inline (a string here is validated as a string; use dataText for JSON text). | |
| schema | No | The JSON Schema inline: an object (or JSON text). | |
| dataFile | No | Or: a JSON file (local path or base64). | |
| dataText | No | Or: the data as JSON text. | |
| maxErrors | No | Most errors to return (default 100). | |
| schemaFile | No | Or: a JSON Schema file (local path or base64). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, openWorld=false), yet the description still adds substantial behavioral detail: allErrors reporting with instancePath/schemaPath/keyword/message/params, draft resolution rules ($schema-driven 2020-12/2019-09, else draft-07, with 04/06 coerced), which formats are actually checked versus ignored and listed, and that remote $ref URLs are never fetched because it runs locally.
Agents need to know what a tool does to the 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 error reporting, then draft handling, then formats, then input plumbing, then the no-remote-fetch guarantee. Dense but every clause carries non-obvious information; no filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes responsibility for describing the return payload (per-error fields) and caps behavior via maxErrors context. Draft support, format coverage, and the no-network guarantee fill in the remaining gaps an agent would otherwise have to guess at.
Complex tools with many parameters or behaviors need more documentation. Simple 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 already 100%, so baseline would be 3; the description earns above that by grouping the six parameters into data sources and schema sources and clarifying the edge case that an inline string in 'data' is validated as a string rather than parsed. maxErrors is left to the schema, which is acceptable given its explicit 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?
Opens with a specific verb+resource: 'Validate JSON data against a JSON Schema with Ajv', then narrows to what is reported. This is unambiguously distinct from the sibling ai_json_schema_infer (which produces schemas rather than checking data) even without naming it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit selection guidance among the alternative input modes — inline 'data' vs 'dataText' vs 'dataFile', and 'schema' vs 'schemaFile' — with the crucial caveat that a string passed as 'data' is validated as a string. It stops short of stating when to prefer this tool over sibling tools such as json_format or ai_json_schema_infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_markdown_to_docxMarkdown to Word (.docx)ARead-onlyIdempotent
Convert Markdown (GitHub flavoured) to a real Word .docx: headings H1-H6 (Word heading styles, so the navigation pane and table of contents work), paragraphs with bold, italic, strikethrough, inline code and clickable links, bullet and numbered lists (nested, numbering restarts per list, task-list checkboxes), tables (header row shaded, column alignment kept), blockquotes, fenced code blocks in a monospace font, horizontal rules, and a page break wherever a line says \newpage. Arabic/Hebrew paragraphs are laid out right-to-left automatically (rtl: "auto"). Images are not embedded (their alt text is shown); raw HTML tags are dropped. Options: title and author (document properties), font (default Calibri), fontSize. Give "markdown" inline or "path" to a .md file. Writes the .docx to "output" (default name from the title or first heading).
| Name | Required | Description | Default |
|---|---|---|---|
| rtl | No | Right-to-left paragraphs: "auto" (detect Arabic/Hebrew per paragraph), "on" or "off". | auto |
| font | No | Body font (default Calibri). | Calibri |
| path | No | Or: a Markdown file (local path or base64). | |
| title | No | Document title (file properties, and the default file name). | |
| author | No | Author shown in the file properties. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| fontSize | No | Body font size in points (default 11). | |
| markdown | No | The Markdown text inline. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is unusually rich about behavior — RTL auto-detection, default Calibri, default output name derived from the title/first heading, HTML dropped, images not embedded — far beyond what the annotations state. However, it explicitly says 'Writes the .docx to "output"', which conflicts with the declared readOnlyHint=true; an agent trusting the annotation could be misled about filesystem side effects. The description itself is not misleading, but the conflict with structured metadata caps this dimension.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core operation and scope are front-loaded in the first clause, followed by a dense but scannable feature inventory. It is long, and the feature list could be compressed, but essentially every clause carries information an agent cannot get from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero required parameters and no output schema, the description does the important work: it tells the agent that one of markdown/path must be supplied and explains where the file lands. It does not describe the tool's response payload (beyond the returnBase64 option), which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the nine parameters is already documented; the description only restates a few (title/author as document properties, font default Calibri, fontSize, rtl "auto"). It adds the useful default-file-name rule tied to title/first heading, but returnBase64 and the output path semantics are left entirely to 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?
Opens with a precise verb+resource+output ('Convert Markdown (GitHub flavoured) to a real Word .docx') and enumerates the exact constructs handled. It is trivially distinguishable from siblings such as ai_markdown_to_pdf and ai_docx_to_markdown, which go the other direction or to another format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the two accepted input modes ('Give "markdown" inline or "path" to a .md file') and the two non-conversions (images not embedded, raw HTML dropped), which lets an agent judge fitness. It never explicitly names when to prefer ai_markdown_to_pdf or ai_docx_to_markdown, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_markdown_to_pdfMarkdown to PDFBRead-onlyIdempotent
Turn Markdown (GitHub-flavoured) into a clean, paginated A4/Letter/A5 PDF: headings, paragraphs with word wrap, bold/italic/strikethrough, inline code, links (clickable), bullet / numbered / task lists (nested), tables (wrapped cells, header repeated on new pages), blockquotes, code blocks, horizontal rules, local images (relative to the Markdown file; remote images are never fetched and show as alt text), page breaks (\pagebreak, \newpage or ), page numbers, margins and title metadata. Text uses the built-in PDF fonts: Latin text only (English and Western European). Arabic, CJK and other scripts are not supported yet: such characters are replaced with "?" (or rejected with onUnsupportedChar: "error"); emoji are dropped; arrows and common symbols are transliterated. Give "markdown" inline or "path" to a .md file.
| Name | Required | Description | Default |
|---|---|---|---|
| font | No | Body font: sans (Helvetica) or serif (Times). Code is always Courier. | sans |
| path | No | A .md file: local path or base64. Relative image links resolve against its folder. | |
| paper | No | A4 | |
| title | No | PDF title metadata. Default: the first # / ## heading. | |
| author | No | ||
| margin | No | Page margin in mm. Default 20. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| fontSize | No | Body font size in pt. Default 10.5. | |
| markdown | No | Markdown text. Use this or "path". | |
| landscape | No | ||
| pageNumbers | No | Print "n / total" at the bottom of each page. Default true. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. | |
| onUnsupportedChar | No | What to do with characters the PDF fonts can't show: replace with "?" (default) or fail. | replace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true, but the description says the tool writes a result: the "output" parameter accepts "a file path, or a folder ending in '/'", with a default server output folder. Writing a PDF file modifies the environment, directly contradicting readOnlyHint=true. The rich feature and limitation disclosure otherwise adds useful context, but the annotation contradiction is serious.
Agents need to know what a tool does to the world before calling 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 and largely a single long feature list, but it is front-loaded with purpose and every clause describes relevant supported behavior or a limitation. For a 13-parameter conversion tool with no output schema, the length is defensible, though the run-on structure reduces 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?
The description thoroughly covers input Markdown features and limitations, but with no output schema it does not clearly state what the tool returns by default beyond the optional base64 behavior. It also leaves the write-to-file behavior in tension with the readOnlyHint annotation, so an agent lacks a fully coherent behavioral picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high at 77%, so the schema already documents most parameters. The description adds marginal clarity by saying "Give 'markdown' inline or 'path' to a .md file" and by explaining unsupported-character behavior, but it largely repeats parameter meaning already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Turn Markdown (GitHub-flavoured) into a clean, paginated A4/Letter/A5 PDF." It clearly identifies the output format and supported Markdown features, but it does not explicitly differentiate from sibling tools such as ai_markdown_to_docx or other PDF utilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource 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 implied usage by stating "Give 'markdown' inline or 'path' to a .md file" and lists important content limitations such as Latin-only text and remote images never being fetched. However, it does not say when to use this tool versus alternatives like ai_markdown_to_docx or other PDF tools, and it provides no explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_media_infoAudio/video metadataARead-onlyIdempotent
Read audio and video file metadata offline (music-metadata): container, codec, duration, bitrate, sample rate, bit depth, channels, lossless or not, tags (title, artist, album, year, genre, track…), embedded cover art, and per-track info (including video width/height for MP4/MKV/WebM). Formats: MP3, AAC/M4A/MP4/MOV, FLAC, WAV, AIFF, OGG/Opus/Vorbis, WebM/Matroska, WMA/ASF, APE, WavPack, DSD and more. File path (streamed, any size) or base64. Duration of VBR MP3s without a header is computed by scanning the file.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The audio or video file: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so safety is covered; the description adds genuine extra context: processing is offline, files are streamed so arbitrarily large inputs are fine, and VBR MP3s without a header require a full file scan (a real performance cost an agent should anticipate). That is exactly the kind of beyond-schema behavioral disclosure that earns a top score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose lead is front-loaded and the field/format enumerations are dense but each list item carries routing value. The final VBR sentence is a useful edge-case note. It is long for a one-parameter tool but not padded with filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description effectively enumerates the returned metadata fields (including per-track video dimensions), so an agent knows what it will get. Combined with 100% schema coverage and full annotation coverage, nothing needed to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter's description already documents absolute paths, paths relative to --root, and raw or data: URI base64. The description reinforces this ('File path (streamed, any size) or base64') and adds the streaming/any-size caveat, giving modest value beyond the schema rather than repeating it outright.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read audio and video file metadata offline') and immediately enumerates the exact fields returned (container, codec, duration, bitrate, tags, cover art), which makes it unmistakable next to siblings like pdf_metadata_read, image_exif_read, or ai_file_identify. The explicit format list further removes any ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the description notes the offline nature and the accepted input forms (path or base64), which tells an agent this is the right tool when an audio/video container is involved. However, it never states when NOT to use it or names an alternative (e.g., use pdf_metadata_read for PDFs, image_exif_read for images), so routing is left to inference from the format list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_ocrOCR (image or scanned PDF to text)ARead-onlyIdempotent
Read the text in an image (PNG, JPEG, WebP, TIFF incl. multi-page, GIF, AVIF) or a scanned PDF with Tesseract (tesseract.js), fully offline: the English and Arabic models ship with the server and nothing is downloaded or uploaded. Languages: "eng", "ara" or "eng+ara" (default). PDF pages are rendered at 200 dpi by default. Returns the text per page and the mean word confidence (0-100); give "output" to also write a .txt file. Limits: up to 200 pages per call, roughly 1-5 s per page; printed text works well, handwriting and very small or skewed text poorly. For PDFs that already have a text layer, pdf_to_text is faster and exact. Give "file" as a local path or base64.
| Name | Required | Description | Default |
|---|---|---|---|
| dpi | No | Render resolution for PDF pages. Default 200. | |
| psm | No | Page layout: "auto" (default), "block" (one uniform block), "line", "word", or "sparse" (scattered text). | auto |
| file | Yes | The image or PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| pages | No | PDF pages / TIFF frames, e.g. "1-3, 5" (default all). | |
| output | No | Also write the text to this .txt file (or folder ending in "/"). | |
| perPage | No | Also return the text of each page separately in "pages". Default false (the joined "text" has page separators). | |
| maxChars | No | Cut the inline text after this many characters (the file is never cut). | |
| languages | No | Languages to read. Default "eng+ara". | eng+ara |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/closed-world, but the description adds substantial context beyond them: fully offline operation with bundled eng/ara models, nothing downloaded or uploaded, PDF pages rendered at 200 dpi by default, and the fact that "output" writes a side-effect .txt file while inline text can be truncated by maxChars. It also discloses performance and accuracy characteristics, which annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Everything is front-loaded — capability, formats, then languages/dpi/returns, then limits and the sibling alternative — and almost every clause carries information. It is a dense single block rather than scannable sentences, which slightly hurts readability for an agent parsing quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema, the description still covers the return shape (text per page plus mean word confidence 0-100), the file-writing side effect, resource limits, and the closest alternative. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3; the description still adds value by restating the language set and default ("eng", "ara", "eng+ara"), the 200 dpi render default, and by clarifying that "file" accepts either a local path or base64 and that "output" writes a .txt file. The psm, pages, perPage, and maxChars parameters are left entirely to the schema, which keeps it just short of 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?
States a specific verb (read/extract text) and resource (image or scanned PDF) and names the engine (Tesseract/tesseract.js). It also enumerates supported formats and explicitly distinguishes itself from the pdf_to_text sibling, so an agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative and the condition that selects it: "For PDFs that already have a text layer, pdf_to_text is faster and exact." It also frames suitability (printed text works well, handwriting and small/skewed text poorly) and hard limits (200 pages, ~1-5 s/page), which is exactly the when-to-use/when-not guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_pdf_to_markdownPDF to MarkdownARead-onlyIdempotent
Convert a text PDF to structured Markdown: headings guessed from font size (text clearly larger than the body becomes #, ##, ###), paragraphs rebuilt from line spacing with hyphenated words mended, bullet and numbered lists kept, right-to-left lines in reading order. Optional page range ("1-5, 8") and page markers. Scanned PDFs without a text layer give empty pages (listed in pagesWithoutText; run OCR first). Tables and columns are read line by line. Accepts a local path or base64. Inline Markdown is cut at maxChars (default 200k); "output" saves it to a file.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| pages | No | Pages to convert, e.g. "1-3, 7" or "5-" (1-based). Default: all. | |
| output | No | Write the Markdown to this file (or folder ending in "/") and return its path instead of the inline text. | |
| maxChars | No | Cut the inline Markdown after this many characters, with a note (a file written with "output" is never cut). Default 200000. | |
| password | No | Password, if the PDF is protected. | |
| pageMarkers | No | Put "<!-- Page N -->" before each page and "---" between pages. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says the optional `output` parameter saves Markdown to a file, which is a write to the environment. This contradicts the annotation readOnlyHint=true, so the description and structured metadata conflict. Otherwise the behavioral detail about truncation, page markers, and empty pages is rich, but the contradiction takes precedence.
Agents need to know what a tool does to the world before calling 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 dense with useful specifics rather than filler. It is somewhat long for a single paragraph and includes minor repetition of schema details, but the length is justified by the tool's behavioral complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and six parameters, the description covers the key return behavior (inline Markdown or file path), truncation via maxChars, page filtering, page markers, and the scanned-PDF edge case including the pagesWithoutText signal. An agent has enough context to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is already documented in the schema. The description reinforces page ranges, page markers, maxChars truncation, and output-file behavior, but adds little semantic detail 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 states a specific verb and resource (convert a text PDF to structured Markdown) and immediately characterizes the output structure. It clearly distinguishes the tool from OCR by explaining that scanned PDFs without a text layer produce empty pages and should be OCR'd first.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context for text PDFs and explicitly redirects scanned PDFs to OCR first. It does not explicitly compare against sibling conversion tools such as pdf_to_text, so it falls short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_pptx_to_markdownPowerPoint (.pptx) to MarkdownARead-onlyIdempotent
Extract the text of a PowerPoint .pptx deck as Markdown: one "## Slide N: title" section per slide in presentation order, text boxes as paragraphs and bullet lists (with indent levels), tables as Markdown tables, and speaker notes as a quote under each slide. Images, charts and SmartArt text are not extracted. Old binary .ppt is not supported. Optional "slides" range (e.g. "1-5, 8"). Accepts a local path or base64. Inline Markdown is cut at maxChars (default 200k); "output" saves it to a file. Runs locally; nothing is uploaded.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The .pptx presentation: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| notes | No | Include speaker notes. Default true. | |
| output | No | Write the Markdown to this file (or folder ending in "/") and return its path instead of the inline text. | |
| slides | No | Slides to include, e.g. "1-3, 7" or "5-" (1-based). Default: all. | |
| maxChars | No | Cut the inline Markdown after this many characters, with a note (a file written with "output" is never cut). Default 200000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/idempotent annotations, the description adds genuinely new context: it runs locally and uploads nothing, extraction silently drops images/charts/SmartArt, and inline Markdown is truncated at maxChars while an output file is never cut. These are the exact surprises an agent would otherwise hit at runtime.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the primary action and output format, then progressively narrows to exclusions, parameter hints, and the local-processing note. Every clause carries distinct information with no restatement of the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the burden of describing the return value and does so concretely: slide headings, paragraphs, bullet indent levels, Markdown tables, and quoted speaker notes. Combined with exclusion and truncation notes, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters. The description still adds value by showing a concrete slides range ("1-5, 8"), restating the 200k maxChars default with the truncation consequence, and clarifying that "output" returns a path instead of text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause names a specific verb and resource ("Extract the text of a PowerPoint .pptx deck as Markdown") and immediately defines the output shape ("## Slide N: title" per slide). This cleanly distinguishes it from sibling converters like ai_docx_to_markdown, ai_pdf_to_markdown, and ai_xlsx_to_markdown by source format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description sets clear boundaries on what it handles: "Old binary .ppt is not supported" and images/charts/SmartArt are excluded. It doesn't explicitly name an alternative tool for those cases (e.g. ai_pdf_to_markdown for exported PDFs), so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_sql_querySQL query over tablesARead-onlyIdempotent
Run one read-only SQL SELECT (alasql dialect: JOIN, GROUP BY, HAVING, ORDER BY, LIMIT, UNION, WITH, subqueries, CASE, SUM/COUNT/AVG/MIN/MAX/MEDIAN/STDEV, string and date functions) over one or more tables. Each table is { name, file | csv | json }: a local path or base64 of a CSV, TSV, JSON array, JSONL or .xlsx (first sheet, or "sheet"), or inline CSV text / JSON rows. CSV cells are typed (numbers, true/false, empty → null; ISO dates stay ISO text, so they sort and compare correctly; YEAR()/MONTH() work on them). Only SELECT is allowed: INSERT/UPDATE/DELETE/DROP/CREATE/ALTER/ATTACH, SELECT INTO, file readers like FROM CSV(...), inline JavaScript and the -> operator are refused. Table names are case-sensitive; quote odd column names and reserved words (total, value, count, date…) as [My Column]. Returns columns and up to maxRows rows (default 500) with the total count; set "output" (.csv, .tsv, .json, .jsonl or .xlsx) to save every row to a file. Runs locally; nothing is uploaded.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | One SELECT statement, e.g. SELECT region, SUM(amount) AS revenue FROM sales GROUP BY region ORDER BY revenue DESC | |
| types | No | Type CSV cells (numbers, booleans, null). Default true; false keeps every CSV cell as text. | |
| output | No | Optional: save ALL result rows to this file; the type comes from the extension (.csv, .tsv, .json, .jsonl, .xlsx; default .csv). | |
| tables | Yes | The tables the query can read (1-20). | |
| maxRows | No | Rows to return inline (default 500). "total" always counts all rows. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses allowed SQL features, refused SQL operations, CSV typing behavior, case sensitivity, quoting rules, inline result limits, output-file behavior, and that processing is local. This gives the agent substantial behavioral context for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded with the core operation and then organized into dialect, table formats, restrictions, naming, and return behavior. It is appropriately sized for a complex tool, though the long parenthetical style is packed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 querying behavior, no output schema, and many input formats, the description is complete enough: it explains return values, row limits, output options, table input forms, and key restrictions. An agent can call it correctly without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds useful semantics: table names are case-sensitive, odd column names should be bracketed, CSV cells are typed, ISO dates remain sortable/comparable, and output saves every row. These details supplement 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 opens with a specific verb and resource: 'Run one read-only SQL SELECT ... over one or more tables.' It clearly defines scope and dialect, though it does not explicitly name sibling alternatives such as json_query or csv_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?
It gives clear usage context, including the read-only SELECT restriction and a detailed list of refused statements and operators. It does not explicitly compare against alternative tools, so it stops short of full when-to-use/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_text_similarityText similarity and near-duplicatesARead-onlyIdempotent
Compare two or more texts (or text files) for overlap. For every pair returns: Jaccard similarity of word shingles (k=3 words by default), a MinHash estimate of that Jaccard (128 hashes), and cosine similarity of word frequencies. Words are lower-cased, punctuation and Arabic diacritics ignored. Measures wording overlap, not meaning (no embeddings): paraphrases score low. Mode "pairs" (default) lists pairs sorted by the chosen metric; mode "dedupe" groups near-duplicates whose metric is at least "threshold" (default 0.8; groups are connected, so AB and BC put A, B, C together). Give "texts" (inline strings) and/or "paths" (file paths or base64). Up to 1000 texts.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "pairs" (similarity of each pair) or "dedupe" (groups of near-duplicates). | pairs |
| paths | No | Or/also: UTF-8 text files (local paths or base64). | |
| texts | No | Texts to compare (inline). | |
| labels | No | Optional names for the texts, in order (texts first, then paths). Default: "#1", "#2"… or the file name. | |
| metric | No | Metric used to sort pairs and to group duplicates. Default jaccard. | jaccard |
| maxPairs | No | Most pairs to return (highest first). Default 200. | |
| numHashes | No | MinHash signature length. Default 128 (error about ±0.09). | |
| threshold | No | Dedupe: pairs at or above this are duplicates. Default 0.8. | |
| shingleSize | No | Words per shingle (k). Default 3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover read-only/idempotent/local, but the description adds real behavioral detail: normalization rules (lowercased, punctuation and Arabic diacritics ignored), the fact that dedupe groups are connected components (A~B, B~C merge), the 1000-text cap, and the metric-selection effect on both sorting and grouping.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then algorithms, then semantics caveat, then mode/input mechanics. Dense but every sentence carries a distinct fact; no restatement of the title or name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 params, no required fields, and no output schema, the description still tells the agent what each pair returns and how results are ordered/grouped. An agent can pick a mode, choose a metric, and set a threshold correctly without further probing.
Complex tools with many parameters or behaviors need more documentation. Simple 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 goes further by tying 'threshold' to connected grouping semantics, noting shingle size k=3 as words per shingle, and clarifying that 'texts' and 'paths' can be combined. It does not explain 'labels' ordering or 'numHashes' accuracy tradeoff (that lives in the schema), so short of 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?
States a specific verb and resource ('Compare two or more texts for overlap') and immediately enumerates the three returned measures. The caveat 'Measures wording overlap, not meaning (no embeddings): paraphrases score low' distinguishes it from semantic/diff siblings without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains the two modes and when each applies ('pairs' default lists sorted pairs; 'dedupe' groups near-duplicates at or above threshold), plus how to supply input via 'texts' and/or 'paths'. It never names a competing sibling (e.g. text_diff) or says when not to use it, so no full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_token_countCount tokensARead-onlyIdempotent
Count LLM tokens in a text or text file with the OpenAI tiktoken tokenizers ("o200k_base", default, used by GPT-4o and the o-series; or "cl100k_base", used by GPT-4/3.5 and text-embedding-3). Also returns characters and words, and whether the text fits in common context windows (8k, 32k, 128k, 200k, 1M: e.g. "fits in 200k: yes"). Claude's tokenizer is not public, so for Claude the count is an estimate (typically within ~10-20%; Claude usually needs a little more), returned as a rough range. Runs locally, no API calls. Give "text" or "path" (file path or base64). Large texts (many MB) take a few seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a UTF-8 text/markdown file, as a local path or base64 (raw or a data: URI). | |
| text | No | The text (inline). | |
| encoding | No | Tokenizer: "o200k_base" (GPT-4o / o-series, default) or "cl100k_base" (GPT-4 / GPT-3.5 / text-embedding-3). | o200k_base |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that the tool is read-only, local, and idempotent. The description adds important behavior beyond that: no API calls, multi-second latency for large texts, approximate Claude token counts with a typical error range, and additional outputs such as characters, words, and context-window fit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then layers on encoding choice, Claude estimation caveats, local execution, input form, and large-text latency. Despite being dense, every sentence contributes operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains the return values: token count, characters, words, and context-window fit. It also covers estimation caveats for Claude and performance for large inputs, leaving little an agent needs to know before calling 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 already 100%, but the description adds useful clarifications: text and path are alternatives, path may be a local path or base64, and encoding maps to specific model families with a default. It mostly reinforces the schema rather than introducing extensive new 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 states a specific verb and resource: count LLM tokens in text or a text file, and names the tokenizer families used. It is clearly distinct from adjacent utilities such as text_word_count because it emphasizes LLM token counting, encoding choice, and context-window fit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: provide text or a path, choose o200k_base for GPT-4o/o-series and cl100k_base for GPT-4/3.5, and expect an estimate for Claude. It does not explicitly name alternatives or say when not to use this tool, so it falls short of the highest usage-guidance tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_web_fetchFetch a web page as MarkdownARead-onlyIdempotent
Fetch a web page (http/https) and return its readable content as clean Markdown, with title, byline, final URL after redirects and a word count. Uses Mozilla Readability to keep the main article (falls back to the whole page), or a CSS "selector" you give. Respects robots.txt (refuses pages disallowed for the s3eidat-tools-mcp user agent), only reads HTML and text responses, stops at 5 MB and 20 seconds, follows up to 5 redirects, and refuses private, local and loopback addresses unless allowPrivate is true. Does not run JavaScript, so pages that build their content in the browser may come back nearly empty. Inline Markdown is cut at maxChars (default 200k); "output" saves it to a file.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The page to fetch (http:// or https://). | |
| output | No | Write the Markdown to this file (or folder ending in "/") and return its path instead of the inline text. | |
| maxChars | No | Cut the inline Markdown after this many characters, with a note (a file written with "output" is never cut). Default 200000. | |
| readable | No | Keep only the main content (default true). False converts the whole page body. | |
| selector | No | CSS selector: convert only the matching elements instead of the Readability main content. | |
| allowPrivate | No | Allow private, local and loopback hosts (e.g. a dev server on localhost). Default false. | |
| includeLinks | No | Keep links (made absolute) and images. False turns links into plain text and drops images. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/openWorld/idempotent annotations with concrete operational limits: 5 MB and 20 second caps, up to 5 redirects, SSRF protection on private/local/loopback addresses, robots.txt enforcement for the named user agent, and Readability-with-fallback behavior. It also discloses the key failure mode (JS-built pages yield near-empty output) and the truncation semantics of maxChars.
Agents need to know what a tool does to the 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 and output shape, then a dense but purposeful run of constraints — every clause carries an operational fact. It is a single long paragraph rather than a scannable structure, which costs a point, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter open-world fetch tool with no output schema, the description covers return shape (title, byline, final URL, word count, inline Markdown), truncation, redirects, timeouts, size limits, and safety refusals. An agent has everything needed to call it correctly and anticipate failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema, including defaults for maxChars, readable, and allowPrivate. The description reinforces selector, maxChars, output, and allowPrivate but adds no syntax or format detail beyond what the schema states; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first clause names a specific verb and resource — fetch a web page over http/https and return its readable content as Markdown — and enumerates the returned fields. It is clearly distinguishable from file-oriented siblings like ai_html_to_markdown, which operate on HTML you already have rather than fetching a live URL.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit operating conditions and exclusions: no JavaScript execution so browser-rendered pages may come back empty, robots.txt refusals, non-HTML responses rejected, and allowPrivate needed for localhost. It doesn't name a sibling tool to use instead when a page is JS-rendered, so an agent gets clear context but no explicit alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_xlsx_to_markdownExcel (.xlsx/.csv) to Markdown tablesARead-onlyIdempotent
Turn an Excel .xlsx workbook (or a .csv/.tsv file) into Markdown tables, one "## sheet" section per sheet, or only the sheet you name. The first used row is the table header; empty rows and columns around the data are dropped. Formulas show their cached result (as last saved by Excel), dates are ISO (2026-10-30, or 2026-10-30T14:05:00), merged cells show their value once, hyperlinks become Markdown links. Each sheet shows at most maxRows data rows (default 200) and says how many were left out. Old binary .xls is not supported. Accepts a local path or base64. Runs locally.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The .xlsx or .csv file: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| sheet | No | Only this sheet: its name, or its 1-based position (e.g. "2"). Default: every sheet. | |
| format | No | Input format. "auto" tells .xlsx (a ZIP) from CSV by its bytes. | auto |
| output | No | Write the Markdown to this file (or folder ending in "/") and return its path instead of the inline text. | |
| maxRows | No | Data rows to show per sheet (after the header). Default 200. | |
| maxChars | No | Cut the inline Markdown after this many characters, with a note (a file written with "output" is never cut). Default 200000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld=false/idempotent, and the description still adds substantial behavior: header taken from first used row, empty rows/columns trimmed, formulas show cached results, ISO dates, merged cells collapsed, hyperlinks converted. It also discloses truncation semantics (maxRows with a count of omitted rows, maxChars note) and that file output is never cut — details not derivable from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core conversion and the sheet-section output shape, then behavior details in a compact run-on list. Dense but nearly every clause carries distinct information; the only mild padding is the pair of example date formats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 six parameters, no output schema, and multiple accepted input forms, the description covers what the return looks like ('## sheet' sections, inline Markdown vs written file path), how truncation is signaled, and format detection — enough for an agent to call it correctly first try.
Complex tools with many parameters or behaviors need more documentation. Simple 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 earns above that by explaining the maxRows default of 200 and how truncated rows are reported, plus that an 'output' file is never truncated by maxChars — an interaction between two params the schema does not spell out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: turn an .xlsx/.csv/.tsv file into Markdown tables, one '## sheet' section per sheet. That immediately separates it from the other converters (ai_pdf_to_markdown, ai_docx_to_markdown, ai_pptx_to_markdown, csv_to_json) without the agent needing to compare 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?
It gives useful boundaries (old binary .xls not supported, local path or base64, sheet selection) but never says when to pick this over siblings like ai_csv_profile or csv_to_json, nor any prerequisites. Usage is inferable from the format constraint rather than explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_zipZIP create / extract / listA
Work with ZIP archives locally. action "create": zip files and folders (given as paths; folders keep their own name as the top folder, symlinks are skipped) into one .zip. action "extract": unpack a .zip (path or base64) into the "output" folder; entries with "..", absolute paths or drive letters are refused (zip-slip protection), existing files are kept unless overwrite is true. action "list": entry names with sizes, no extraction. Limits: total uncompressed size 500 MB and 10000 files by default (maxTotalMB / maxFiles). Encrypted ZIPs are not supported.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | extract / list: the ZIP archive, a local path or base64. | |
| files | No | create: files and folders to add (local paths). | |
| level | No | create: compression level 0 (store) to 9 (smallest). Default 6. | |
| action | Yes | ||
| output | No | create: the .zip path (or a folder ending in "/"). extract: the folder to extract into. Default: the server output folder. | |
| maxFiles | No | Cap on the number of entries. Default 10000. | |
| overwrite | No | extract: replace files that already exist in the output folder. Default false (they are skipped). | |
| maxTotalMB | No | Cap on the total uncompressed size, MB. Default 500. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only flagging readOnly=false, openWorld=false, idempotent=false, the description supplies the meaningful behavior: symlinks skipped, folder names preserved as top-level folder, zip-slip refusals for '..'/absolute paths/drive letters, existing files kept unless overwrite=true, and no support for encrypted ZIPs. It also states hard limits (500 MB, 10000 entries) that the annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action taxonomy, then limits, then unsupported cases – a sensible order with no filler sentences. Density is high because of parenthetical clauses, but every clause (symlink skipping, zip-slip refusal, default caps) conveys non-obvious behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, multi-mode tool with no output schema, the description still covers each mode's inputs, default destinations, safety behavior, hard caps and an unsupported case. The 'list' mode's return shape ('entry names with sizes') is described, so nothing essential an agent needs before calling is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 88%, so the baseline is 3; the description earns above that by adding meaning the schema does not, notably that create paths are local paths whose folders keep their own name, that multi-part sizes are capped by maxTotalMB/maxFiles, and that extract's output defaults to the server output folder. It does not restate the level or overwrite semantics beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Work with ZIP archives locally') and then enumerates the three actions with concrete effects (zip, unpack, entry names with sizes). No sibling tool in the list touches archives, and the action breakdown makes the scope 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?
Each action carries an in-line statement of what it does and its constraints, which implicitly routes the agent between create/extract/list ('list: entry names with sizes, no extraction'). It does not name exclusions or prerequisites (e.g. when a caller should prefer a non-local upload path, or required filesystem access), so it falls short of explicitly stating when-not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
barcode_generateBarcode generatorARead-onlyIdempotent
Make 1D barcodes as SVG or PNG: Code 128 (any printable ASCII; digit runs packed with subset C automatically), EAN-13 (12 digits, check digit added; or 13, check digit verified), UPC-A (11 or 12 digits, same) and Code 39 (A-Z, 0-9, space, - . $ / + %, optional mod-43 check). Same encoders, quiet zones, guard bars and human-readable digits as the website. Give "value" for one barcode, or "values" (up to 1000) to write one file per value into a folder; invalid values are reported, not fatal. PNG text uses the system monospace font. Web version: https://s3eidat.github.io/barcode-gen/
| Name | Required | Description | Default |
|---|---|---|---|
| scale | No | PNG only: pixel scale (1×, 2× default, 4×…). | |
| value | No | The value to encode (one barcode). | |
| format | No | Output format (default svg). | svg |
| height | No | Bar height in px, 30-220 (default 80). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| values | No | Or: many values; each becomes its own file in the output folder. | |
| barWidth | No | Narrow bar (module) width in px, 1-6 (default 2). | |
| showText | No | Print the human-readable text/digits under the bars. | |
| symbology | No | Barcode type (default code128). | code128 |
| background | No | Background colour, hex. | #ffffff |
| foreground | No | Bar colour, hex. | #000000 |
| code39Check | No | Code 39 only: append the mod-43 check character. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and idempotentHint=true, yet the description says the tool will 'write one file per value into a folder' and lets the caller pick an 'output' path — a filesystem side effect that readOnlyHint denies. Beyond that mismatch the description is genuinely informative (check-digit handling, invalid values non-fatal, subset C packing, system monospace font for PNG text), but the write-vs-readOnly conflict is a real inconsistency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that is front-loaded with the output medium and symbologies, then moves to encoding rules and the value/values modes. Every clause carries information, though the run-on structure with semicolons makes it slightly harder to scan than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 13-parameter tool with no output schema and no annotations covering return shape, the description covers output destination (file path vs folder), the default temp output folder, and the optional base64 return. It does not explain the result payload (does it return written paths?), file naming for the "values" mode, or overwrite behavior — gaps an agent would care about for a batch-writing 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 the baseline is 3, but the description adds meaning the schema does not: EAN-13 accepts 12 digits and appends the check digit or 13 and verifies it, UPC-A works the same way, Code 128 takes printable ASCII with automatic subset C packing, Code 39 has a fixed charset plus optional mod-43, and value/values are alternative modes. Only the presentation parameters (scale, barWidth, height, colors) are left entirely to 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?
Opens with a specific verb+resource ('Make 1D barcodes as SVG or PNG') and then enumerates the four supported symbologies, immediately distinguishing it from qr_generate and the image_* siblings. An agent can tell exactly what this produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the two operating modes: supply "value" for a single barcode, or "values" (up to 1000) to write one file per value into a folder, plus the note that invalid values are reported rather than fatal. It stops short of naming a sibling alternative (e.g. qr_generate) or stating when-not to use it, so it does not reach a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
base64_decodeBase64 decodeARead-onlyIdempotent
Decode Base64 (standard or URL-safe, padding optional, whitespace and data: URI prefix allowed). Valid UTF-8 text is returned inline; binary data (or anything when "output" is given) is written to a file whose extension comes from the detected type (PNG, JPEG, GIF, WebP, BMP, PDF, ZIP, gzip, MP3, Ogg, MP4, WOFF2, SVG, JSON). Web version: https://s3eidat.github.io/base64-kit/
| Name | Required | Description | Default |
|---|---|---|---|
| base64 | Yes | The Base64 text to decode (may be a data: URI). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| fileName | No | Base name for the written file (extension follows the detected type). Default "decoded". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations by disclosing the real side effect: binary results are written to disk with a detected extension, with a default temp output folder. Worth noting the mild tension with readOnlyHint=true, since file creation is a side effect, but the description discloses it rather than hiding it, so no real contradiction. It omits error behavior for invalid input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the decode scope, then the all-important output-destination rule, so the reader gets the decision-relevant facts first. The second sentence is long because of the detected-type list, which is justified but slightly bloats the entry.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: inline UTF-8 text versus a written file whose extension reveals the detected type. Only gap is failure behavior on malformed Base64 and whether existing files at the target path are overwritten.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented, and the description's default-folder and extension-detection notes largely mirror the schema's "output" and "fileName" text. Baseline 3 applies; the description adds behavior around the parameters rather than new meaning within them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Decode Base64") with the scope of variants spelled out: standard or URL-safe, optional padding, whitespace and data: URI prefix accepted. An agent can distinguish this from base64_encode and image_from_base64 without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operating context: text decodes inline, binary (or anything with an explicit "output") goes to a file. It does not name alternatives, and the nearest overlapping sibling, image_from_base64, is never mentioned, so an agent must infer which one to pick when the payload is an image.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
base64_encodeBase64 encodeARead-onlyIdempotent
Encode text (as UTF-8) or a file (path or base64) to Base64. Options: URL-safe alphabet (- and _, no padding), wrap at 76 columns (MIME), or a data: URI for files (MIME type detected from magic bytes). Results over 1 MB, or when "output" is given, are written to a text file instead of returned inline. Web version: https://s3eidat.github.io/base64-kit/
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Or: a file to encode: local path or base64 data. | |
| text | No | Text to encode (UTF-8). | |
| wrap | No | Insert a line break every 76 characters (MIME style). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| dataUri | No | Return a data: URI (data:<mime>;base64,…) instead of bare Base64. | |
| urlSafe | No | Use the URL-safe alphabet (- and _) and drop "=" padding. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true, but the description states that results over 1 MB or when "output" is given are written to a text file. Writing files is a mutating side effect and directly contradicts the read-only annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded, and covers the main behavior in one dense paragraph. The external web-version link is not essential for invocation and slightly weakens 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?
With no output schema, the description usefully explains that output is returned inline or written to a file, including the 1 MB threshold. It does not clarify precedence if both text and file are supplied, which is a minor completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented, but the description adds useful semantics beyond the schema: the 1 MB inline/file-output threshold and MIME type detection from magic bytes for data URIs. Some option descriptions merely restate schema text, so it stops short of 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 gives a specific verb and resource: encode text (UTF-8) or a file to Base64. It clearly distinguishes the operation from the sibling base64_decode and from image-only base64 helpers by naming text and file-path inputs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains when the option flags apply: URL-safe alphabet, MIME wrapping, data URI output, and file output. It does not explicitly compare against alternatives such as base64_decode or image_to_base64, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
base_convertNumber base convertARead-onlyIdempotent
Convert a whole number of any size (BigInt) between bases 2–36: binary, octal, decimal, hex, base 36 or any other. Input base can be auto-detected from 0x / 0b / 0o prefixes; spaces, _ and , separators are ignored; negatives OK. Also shows bit length and the two's complement view (signed/unsigned value, hex, bits) at 8/16/32/64 bits, and whether it fits. Fractions are not supported (same as the website). Web version: https://s3eidat.github.io/base-convert/
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Output bases. Default [2, 8, 10, 16, 36]. | |
| from | No | Input base 2–36, or "auto" (prefix, else decimal). | auto |
| group | No | Group digits like the website (binary/hex by 4, octal by 3, decimal with commas). | |
| value | Yes | The number, e.g. "0xC0FFEE", "-0b101", "1_000_000", "zz" (with from=36). | |
| width | No | Bit width for the two's complement view. | |
| uppercase | No | Upper-case letters for bases above 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and closed-world behavior, so the description adds useful context about input auto-detection, ignored separators, negative handling, and the additional bit-length/two's-complement output. It does not discuss error behavior for malformed inputs, but the added behavioral detail is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main purpose and key constraints are front-loaded in one dense paragraph. It is appropriately sized for the tool's complexity, though the run-on structure and the website URL are slightly less essential than the core behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does a good job summarizing the return surface: primary base conversions plus bit length and two's-complement details at 8/16/32/64 bits. It could be more explicit about the exact output shape, but it is complete enough for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds that values are arbitrary-size BigInts and reiterates prefix/separator handling, but most parameter meaning is already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: convert a whole number of any size between bases 2–36. It includes scope detail (BigInt, binary/octal/decimal/hex/base 36) and the extra two's-complement view, so an agent can distinguish it from unrelated calculator or byte-conversion siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use: whole numbers only, auto-detection from 0x/0b/0o prefixes, ignored separators, and negatives allowed. It also explicitly excludes fractions, though it does not name a sibling alternative such as calc_fraction, so it falls short of full when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bytes_convertText ⇄ UTF-8 bytesARead-onlyIdempotent
Turn text into its UTF-8 bytes (hex, binary or decimal), or bytes back into text. Byte input is lenient: "48 65", "4865", "0x48,0x69", "01001000 01101001", "72 105". Invalid UTF-8 is reported and shown with � replacements. Web version: https://s3eidat.github.io/base-convert/
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Text to turn into bytes. | |
| bytes | No | Or: bytes to turn into text, in the chosen format. | |
| format | No | Byte format. Default hex. | hex |
| uppercase | No | Upper-case hex digits. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, closed-world behavior, so the safety profile is covered. The description adds genuinely useful context the annotations cannot: lenient byte parsing and the fact that invalid UTF-8 is reported with U+FFFD replacements rather than erroring, which directly affects how an agent interprets results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose first, then the lenient-input caveat, then the edge-case behavior, with the reference URL last. Every sentence carries information an agent could act on, and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries return-value disclosure and does so partially: it says invalid UTF-8 is shown with replacements but does not state the overall return shape (e.g., that a string is returned in the chosen format). For a simple two-way conversion tool this is close to 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 the baseline is 3. The description goes beyond the schema by giving concrete accepted byte-input examples ('48 65', '0x48,0x69', '01001000 01101001'), clarifying that the bytes parameter tolerates mixed notation — semantics the schema does not convey. The uppercase parameter is only covered by the schema, keeping it just below 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?
States a specific verb and resource ('turn text into its UTF-8 bytes ... or bytes back into text') and enumerates the supported output formats. An agent can distinguish it from siblings like base64_encode/decode or base_convert because the description is explicitly about UTF-8 byte representation in hex/bin/dec.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The bidirectional framing ('or bytes back into text') makes the two usage paths clear, and the lenient-input sentence tells the agent this tool accepts many byte input shapes. It does not, however, name when to prefer base64_encode or hash_compute over this tool, so the sibling routing is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_ageAge calculatorARead-onlyIdempotent
Exact age in years, months and days from a date of birth (on today or any "on" date), with totals in months, weeks, days and hours, the weekday of birth, Hijri (Umm al-Qura) birth date and Hijri age, next birthday (Feb 29 birthdays fall on Feb 28 in common years), star sign, Chinese zodiac, the next 1,000-day milestone, and optionally the age gap to a second person. Dates are ISO YYYY-MM-DD. Web version: https://s3eidat.github.io/age-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| onDate | No | Work out the age on this date (YYYY-MM-DD). Default: today. | |
| birthDate | Yes | Date of birth, YYYY-MM-DD. | |
| otherName | No | Name of the second person (default "They"). | |
| otherBirthDate | No | Optional second person's date of birth, to compare. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and closed-world, so the safety profile is covered. Beyond that, the description discloses a genuine edge case ('Feb 29 birthdays fall on Feb 28 in common years'), the Hijri calendar convention (Umm al-Qura), the accepted date format, and the default display name for the second person. It stops short of saying what happens with invalid or future dates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the opening clause and the rest is a dense but informative feature inventory. The single sentence is long and list-heavy, but since there is no output schema, most of the enumeration earns its place; a short break after the primary purpose would help.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 four parameters, no output schema, and no nested structures, the description does the heavy lifting by telling the caller what the result contains as well as what it takes to call it. Only error behavior for malformed or impossible dates is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This 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 applies. The description adds only light context beyond the schema, restating the ISO YYYY-MM-DD format and that the second person is optional; the onDate 'today' default and otherName's 'They' default 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 gives a specific verb and resource ('Exact age in years, months and days from a date of birth') and then precisely enumerates the scope: totals, weekday, Hijri date and age, next birthday, star sign, Chinese zodiac, 1,000-day milestone, and optional second-person gap. That is far more specific than a generic 'compute' statement. It never names the overlapping siblings calc_date_diff or calc_hijri, so the caller must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'from a date of birth' and by the schema default that onDate falls back to today, plus the note that the age gap to a second person is optional. There is no explicit when-to-use/when-not guidance and no pointer to alternatives such as calc_date_diff for day counts or calc_hijri for pure Hijri conversion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_bmiBMI calculatorARead-onlyIdempotent
Body mass index with the WHO adult category, the healthy weight range for your height (BMI 18.5–24.9), BMI Prime, optional waist-to-height ratio, and for adults (18–120, with age) BMR by Mifflin-St Jeor plus daily calories to maintain or lose ~0.5 kg (1 lb) a week at five activity levels. Metric (cm, kg) or imperial (ft + in, lb). Height 50–272 cm, weight 10–650 kg. Not medical advice; children need percentile charts. Web version: https://s3eidat.github.io/bmi-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Age in years (adults 18+ get BMR and calories). | |
| sex | No | Sex, for BMR (m or f). | m |
| units | No | metric: cm and kg; imperial: ft + in and lb. | metric |
| waist | No | Optional waist size in cm (metric) or inches (imperial). | |
| weight | No | Weight in kg (metric) or lb (imperial). | |
| heightCm | No | Height in cm (metric). | |
| heightFt | No | Height, feet part (imperial). | |
| heightIn | No | Height, inches part (imperial). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, so the safety profile is covered; the description adds real value on top with validity bounds (height 50–272 cm, weight 10–650 kg, age 18–120 for BMR), conditional behavior (BMR only when age is supplied and is adult), and a liability caveat. No return envelope detail, but the computed outputs are enumerated, so nothing important is hidden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: capability list first, then unit systems, then validity bounds, then disclaimers — a sensible order. It is long for an MCP description, though nearly every clause carries information an agent cannot get from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter all-optional tool with no output schema, the description covers outputs, units, ranges, and the adult-only restriction well. The one real gap is that required-for-success inputs (weight plus a height in the matching unit) and the behavior when heightCm is given under imperial units are never stated.
Complex tools with many parameters or behaviors need more documentation. Simple 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 the unit-system contract (metric cm/kg vs imperial ft+in/lb) and the numeric domain limits that the schema lacks. It does not explicitly restate which of the 8 optional parameters are actually needed for a valid call (height + weight), leaving that to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific resource and immediately enumerates the concrete outputs (WHO category, healthy weight range, BMI Prime, waist-to-height ratio, BMR, maintenance/loss calories), so an agent knows exactly what it gets back. It is clearly distinguished from the surrounding calc_* family (calc_age, calc_unit_convert, calc_stats) which do not compute body metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditions: adults 18–120 with age get BMR/calories, children need percentile charts instead (a clear when-not), and there's a 'not medical advice' scope caveat. It also states the supported input ranges. It stops short of naming a sibling alternative, but no sibling actually overlaps this function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_cash_countCash counterARead-onlyIdempotent
Count a cash drawer by denomination with exact integer maths (no float errors): JOD (3 decimals, fils), USD, EUR, SAR, AED, GBP, KWD, EGP, or a custom currency (your own note and coin values, 0/2/3 decimals). Give how many of each note/coin (by value like 50 or 0.25, by label like "50 JD" or "¼ dinar"); returns per-denomination amounts, the total, notes and coins counted, and over/short against an expected amount. list=true shows the denominations of a currency. Web version: https://s3eidat.github.io/cash-counter/
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | Just list the denominations. | |
| note | No | Optional note for the summary (e.g. "Evening shift"). | |
| counts | No | What you counted. | |
| custom | No | CUSTOM currency definition. | |
| currency | No | Currency preset, or CUSTOM. | JOD |
| expected | No | Expected total, to show over/short. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, closed-world behavior, so the safety profile is covered. The description adds real substance beyond that: exact integer arithmetic with no float error, currency-specific decimal rules (JOD 3 decimals/fils, custom 0/2/3), and the return contents including over/short against an expected amount — meaningful for a tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and technique, then input forms, then return values, then the list mode — a logical order with little waste. It is one very long compound sentence plus a trailing web URL that adds no value to an agent, which keeps it short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with a nested counts array, six optional parameters and no output schema, the description covers input formats, currency/precision handling, the list mode and the returned totals/over-short. It is silent on edge behavior — e.g. an invalid denomination for a currency, mixed note/coin disambiguation beyond the schema's kind field, or what an empty counts array 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%, so the baseline is 3 and the schema already documents every field. The description still adds usable semantics: denominations may be given by value (50, 0.25) or by label ('50 JD', '¼ dinar'), and it explains what 'expected' produces (over/short) rather than just restating the field name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Count a cash drawer by denomination') plus the defining technique ('exact integer maths, no float errors'), which separates it from generic calculators like calc_expression or calc_split_bill. It also enumerates supported currencies and the custom-currency option, so an agent knows exactly what domain this covers before opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is clear: give counts per denomination, and set list=true to discover a currency's denominations first — a sensible discovery-then-count flow. It does not explicitly rule out alternatives (e.g. when to prefer calc_expression for a plain arithmetic total, or calc_split_bill for splitting), so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_compound_interestCompound interest / savings growthARead-onlyIdempotent
Project savings with compound interest: an initial deposit plus monthly contributions (at the start or end of each month), a nominal annual rate compounded yearly, half-yearly, quarterly, monthly, daily or continuously, optionally adjusted for inflation ("today's money"). Returns final balance, total deposits, interest earned and a year-by-year table. Rate -50–100 %, 1 month to 100 years. Web version: https://s3eidat.github.io/compound-interest/
| Name | Required | Description | Default |
|---|---|---|---|
| table | No | Include the year-by-year table. | |
| years | Yes | Duration in years (fractions allowed, e.g. 1.5; at least one month). | |
| timing | No | Contributions at the end (ordinary annuity) or start (annuity due) of each month. | end |
| initial | No | Initial deposit (default 0). | |
| monthly | No | Monthly contribution (default 0). | |
| inflation | No | Optional yearly inflation in percent, to show the balance in today's money. | |
| annualRate | Yes | Nominal annual interest rate in percent, e.g. 7. | |
| compounding | No | How often interest compounds. | monthly |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is clear. The description adds useful behavioral context beyond annotations: it lists the return values (final balance, total deposits, interest earned, year-by-year table) and states domain constraints (rate –50–100%, 1 month to 100 years).
Agents need to know what a tool does to the world before calling 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 tool's purpose and remains dense with useful details. The first sentence is long but well-structured, and the subsequent sentences cover returns, constraints, and a web reference 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?
With 8 parameters, no output schema, and rich schema descriptions, the description adequately explains the calculation model, return values, and key constraints. It could be slightly more complete by noting edge cases or the effect of table=false, but it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameter documentation is already strong. The description adds semantic meaning beyond the schema: it clarifies contribution timing (start or end of month), the interpretation of inflation as "today's money," and rate/duration bounds, which help an agent reason about the calculation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ("Project savings") and clearly states the resource and mechanics (compound interest with initial deposit and monthly contributions). It distinguishes itself from siblings like calc_loan and calc_salary by focusing on savings growth with contributions and compounding options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool's use case (projecting savings with compound interest), but it does not explicitly state when to use this tool versus alternatives such as calc_loan or calc_discount. No exclusions or conditional guidance are provided, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_date_diffDate difference / add daysARead-onlyIdempotent
Two date jobs. difference: days between two dates (optionally counting the end day), as years/months/days, weeks, whole months, working days and weekend days for a chosen weekend (Fri–Sat default, Sat–Sun, Fri only, Sun only; public holidays are not counted). add: add or subtract days, business days, weeks, months or years to a date (month ends clamp: Jan 31 + 1 month = Feb 28/29). Results include the weekday and Umm al-Qura Hijri date. Dates are ISO YYYY-MM-DD; for Hijri ⇄ Gregorian conversion use calc_hijri. Web version: https://s3eidat.github.io/date-diff/
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | difference: end date YYYY-MM-DD (default today). | |
| date | No | add: the starting date YYYY-MM-DD (default today). | |
| mode | No | difference between two dates, or add/subtract an amount. | difference |
| unit | No | add: unit of amount. | days |
| start | No | difference: start date YYYY-MM-DD (default today). | |
| amount | No | add: how many units to add (use subtract to go back). | |
| weekend | No | Weekend days skipped by working-day counts. | fri-sat |
| subtract | No | add: go back in time instead. | |
| inclusive | No | difference: count the end date too. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, but the description adds behavior the annotations cannot: public holidays are not counted, weekend definitions are configurable, month-end arithmetic clamps (Jan 31 + 1 month = Feb 28/29), and results include weekday and Umm al-Qura Hijri date. These are exactly the edge cases an agent needs for correct invocation.
Agents need to know what a tool does to the 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 and dense: two mode definitions followed by cross-cutting rules. Some parenthetical lists (weekend variants) are run-on, but nearly every clause carries operational information, so there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no required parameters and no output schema, the description supplies defaults, output composition (weekday, Hijri date, multiple difference formats), edge-case arithmetic, and an alternative tool. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes further by explaining cross-parameter semantics such as the inclusive end-day option, default Fri–Sat weekend, and the clamping rule for month/year additions. It does not restate every parameter but adds real interpretive 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?
Opens with an explicit two-mode statement, then names each verb and resource: 'difference: days between two dates' and 'add: add or subtract days, business days, weeks, months or years'. It also names the sibling it is not (calc_hijri) and distinguishes the modes from each other, so an agent can pick the right tool without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditions for each mode and explicitly routes Hijri conversion to calc_hijri. It does not mention other plausible alternatives such as calc_due_date or calc_age, so the routing is good but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_discountDiscount / sale price calculatorARead-onlyIdempotent
Three shop maths jobs. sale: price after one or two stacked discounts (each a percent or a fixed amount) plus optional tax/VAT, with what you save and the effective total discount (stacked percents multiply). reverse: the discount % between an old and a new price. compare: which of two deals is cheaper per unit (price and amount of each). Money is rounded to the cent at each step like a till. Web version: https://s3eidat.github.io/discount-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| now | No | reverse: the new price. | |
| was | No | reverse: the old price. | |
| mode | No | Which calculator. | sale |
| unit | No | compare: the unit name (kg, L, item…). Default "unit". | |
| price | No | sale: original price. | |
| priceA | No | compare: price of deal A. | |
| priceB | No | compare: price of deal B. | |
| amountA | No | compare: amount of deal A (e.g. 0.5 for 500 g when unit is kg). | |
| amountB | No | compare: amount of deal B. | |
| discount | No | sale: first discount (percent by default). | |
| taxPercent | No | sale: optional tax / VAT percent added after the discounts. | |
| discountType | No | sale: first discount is a percent or a fixed amount. | percent |
| extraDiscount | No | sale: optional second discount applied after the first. | |
| extraDiscountType | No | sale: second discount type. | percent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, closed-world), so the description's real contribution is computational behavior: stacked percents multiply, tax/VAT is applied after discounts, and money is rounded to the cent at each step like a till. Those rules materially affect results and are not in the schema. Return shape is only loosely sketched ('what you save', 'effective total discount').
Agents need to know what a tool does to the 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 one-line summary followed by three compact mode clauses; nearly every phrase carries information. The trailing web-version URL is marginally useful context rather than tool-selection content, slightly diluting an otherwise tight description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 14 optional parameters and no output schema, the description does a good job mapping parameters to modes and hinting at returns (savings, effective total discount, cheaper-per-unit winner). It never gives an exact result shape for compare mode (e.g. per-unit prices for A and B), which is the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so per-parameter text is already handled (baseline 3). The description adds ordering semantics the schema cannot express: the second discount applies after the first, percents stack multiplicatively, and tax is added after discounts. The compare example ('0.5 for 500 g when unit is kg') also clarifies unit/amount relationship.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a concrete framing ('Three shop maths jobs') and then names each mode with a specific computation: sale price after stacked discounts plus tax, reverse discount percent between two prices, and per-unit deal comparison. An agent can tell exactly what this does and how it differs from generic siblings like calc_percentage or calc_split_bill.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each mode is prefixed with its purpose ('sale:', 'reverse:', 'compare:'), which effectively tells the agent which mode to pick for which question. There is no explicit when-not guidance or named alternative tool (e.g. vs calc_percentage), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_due_datePregnancy due dateARead-onlyIdempotent
Estimated pregnancy due date from the first day of the last period (Naegele's rule, adjusted for cycle length 20–45 days), the conception date, or an IVF embryo transfer date (day-3 or day-5 embryo). Also gives the estimated conception date, full-term date, how far along you are on a given day (weeks + days, trimester, days to go) and a dated timeline of common milestones (weeks 4–42), optionally with Hijri dates. Estimate only, not medical advice. Web version: https://s3eidat.github.io/due-date/
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | The date for that method, YYYY-MM-DD. | |
| hijri | No | Also give Umm al-Qura Hijri dates. | |
| today | No | Work out progress on this date, YYYY-MM-DD (default today). | |
| method | No | lmp = first day of last period; conception; ivf = embryo transfer date. | lmp |
| cycleLength | No | lmp: average cycle length in days (default 28). | |
| ivfEmbryoDay | No | ivf: embryo age at transfer, day 3 or day 5. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, so the safety profile is covered. The description adds valuable behavior beyond that: it lists what is returned (conception date, full-term date, weeks+days progress, trimester, days remaining, milestone timeline weeks 4–42, optional Hijri) and the disclaimer, though it stops short of describing response structure for the progress section.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: purpose first, then outputs, then the disclaimer and link. The enumerated output list is long but each item is informative; no filler 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?
With no output schema, the description fully carries the burden by enumerating every returned artifact and the optional Hijri expansion, plus a scope disclaimer. An agent can call this correctly without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes slightly beyond by naming Naegele's rule, the cycle-length range 20–45, and the day-3/day-5 embryo distinction, tying the parameters to their clinical meaning rather than just restating field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Estimated pregnancy due date') and enumerates the three accepted starting points (LMP, conception, IVF transfer), which clearly separates it from nearby siblings such as calc_age, calc_date_diff or calc_hijri.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains which input method to pick and notes 'Estimate only, not medical advice,' which sets the appropriate use context. It does not explicitly name alternatives or exclusions (e.g., use calc_date_diff for plain date arithmetic), so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_equationEquation solverARead-onlyIdempotent
Solve equations exactly with worked steps, like the website: linear a·x + b = c, quadratic a·x² + b·x + c = 0 (exact rational or surd roots like 1/2 + √5/2, complex roots), cubic a·x³ + b·x² + c·x + d = 0 (rational root test, else trigonometric/Cardano to 10 significant digits), and systems of 2 or 3 linear equations (Gauss–Jordan; no solution and infinitely many solutions are detected and parametrised). Coefficients may be integers, decimals, fractions ("3/4"), mixed numbers ("-1 1/2") or e-notation. Web version: https://s3eidat.github.io/equation-solver/
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Equation type. | |
| system | No | system: rows of the augmented matrix, 2 rows of [a, b, rhs] (x, y) or 3 rows of [a, b, c, rhs] (x, y, z). | |
| coefficients | No | linear: [a, b, c] for a·x + b = c; quadratic: [a, b, c]; cubic: [a, b, c, d]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Going well beyond readOnlyHint/idempotentHint, it discloses output behavior the agent could not otherwise predict: exact rational or surd roots, complex roots, 10-significant-digit fallback for cubics, Gauss–Jordan for systems, and detection plus parametrisation of no-solution/infinite-solution cases. Worked steps are also promised, which matters for how the result should be presented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence front-loads the verb and the equation types, with progressively finer detail after it. It is information-rich rather than padded, though the website link and the "like the website" phrasing consume space without helping tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so at a high level (exact roots, worked steps, precision, parametrised infinite solutions). It stops short of describing the actual response shape, so an agent knows what to expect conceptually but not structurally.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics: it maps each `type` value to the coefficient layout and spells out the accepted string encodings ("3/4", "-1 1/2", e-notation) that the schema only hints at with number|string. It does not explicitly restate the `system` augmented-matrix row shape, leaving that to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("solve") and resource ("equations") and then enumerates exactly which equation families are in scope: linear a·x + b = c, quadratic, cubic, and 2x2/3x3 linear systems. That enumeration cleanly separates it from siblings such as calc_expression (arithmetic evaluation) or calc_fraction, so an agent can route without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The supported-type list implicitly defines when to use it and the coefficient formats accepted ("integers, decimals, fractions, mixed numbers, e-notation") tell the agent what input is legal. It never names an alternative tool or states an explicit when-not condition (e.g. use calc_expression for plain arithmetic), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_expressionScientific calculatorARead-onlyIdempotent
Evaluate a maths expression safely with the website's own parser (never eval): + − × ÷ ^ (right-associative), implicit multiplication (2(3+4), 2x), postfix ! and %, √, brackets; functions sin cos tan sec csc cot (+ asin acos atan atan2) in degrees (default), radians or grads, sinh cosh tanh and inverses, sqrt cbrt root(x,n) abs exp ln log(x[,base]) log10 log2 floor ceil round sign min max mod nCr nPr fact gamma; constants pi π e tau phi; "ans" and your own variables. Results to 12 significant digits, plain or scientific notation. Web version: https://s3eidat.github.io/sci-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| ans | No | Value of "ans" (the previous answer). Default 0. | |
| angle | No | Angle unit for trig functions. | deg |
| format | No | Display: normal, or always scientific notation. | norm |
| variables | No | Variables to use, e.g. {"x": 2, "r": 5}. | |
| expression | Yes | The expression, e.g. "sin(30) + 2^3^2", "5!/(2!×3!)", "200×15%". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-open-world behavior. The description adds valuable traits beyond that: safe parsing with no eval, 12-significant-digit results, and plain/scientific output modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded, and the dense function/constant lists earn their place for a scientific calculator. Structure is weaker because most information is packed into one long semicolon-separated sentence, but there is little pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex expression evaluator with no output schema, the description is highly complete: it covers syntax, safety, angle units, variables, ans, precision, and output format. An agent has enough information to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds substantial meaning beyond the schema by documenting the expression language: operators, precedence, implicit multiplication, postfix operators, trig units, supported functions, constants, ans, and variables.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact action and resource: evaluate a maths expression safely with the site's own parser. It distinguishes itself from broader calculator siblings by specifying expression syntax, functions, constants, and precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'Evaluate a maths expression', but the description never states when to choose this over calc_equation, calc_percentage, or other calc siblings. There are no explicit exclusions or routing cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_fractionFraction calculatorARead-onlyIdempotent
Exact fraction maths with big integers (never rounded) and worked steps. calculate: an expression with fractions, mixed numbers ("1 1/2"), decimals and repeating decimals ("0.(3)"), + − × ÷ ^ and brackets (a/b binds tighter than ÷). decimal_to_fraction: "0.75", "0.1(6)" (brackets mark the repeating part), with close small-denominator approximations. fraction_to_decimal: exact decimal with the repeating block, and percent. compare: put two or more fractions in order. Web version: https://s3eidat.github.io/fraction-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | What to do. | calculate |
| input | Yes | calculate: "1 1/2 + 3/4 × 2/5"; decimal_to_fraction: "0.1(6)"; fraction_to_decimal: "5/7"; compare: "2/3, 3/5, 7/10". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false), so the bar is lower, but the description still adds real behavioral value: results are exact and never rounded, big integers are used, worked steps are returned, and approximations are small-denominator and flagged as such. It doesn't describe error handling for malformed expressions or the exact shape of the returned steps, and there is no output schema to cover that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that front-loads the core capability before mode-by-mode detail — nothing is buried. The trailing web-version URL is the only content that doesn't help an agent invoke the tool, and the mode list is somewhat compressed into one long sentence, but overall it 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?
For a two-parameter, enum-driven calculator with no output schema, the description covers what each mode does, the accepted input syntax, and roughly what comes back (exact value, steps, percent, ordered list). The only meaningful gaps are error behavior on invalid expressions and the concrete shape of the returned steps, which the absence of an output schema leaves undone.
Complex tools with many parameters or behaviors need more documentation. Simple 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 supplies per-mode input examples, so the baseline would be 3. The description earns an extra point by adding syntax rules the schema omits: operator set (+ − × ÷ ^, brackets), the precedence rule that a/b binds tighter than ÷, the convention that brackets mark the repeating part, and the input separator style 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?
Opens with a specific verb+resource framing ("Exact fraction maths with big integers... and worked steps") and then enumerates all four modes with concrete input examples. An agent can distinguish this from sibling calculators like calc_expression, calc_equation, or calc_percentage purely from the description, since fraction/mixed-number/repeating-decimal handling is called out 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 gives clear context for selecting each mode (calculate vs decimal_to_fraction vs fraction_to_decimal vs compare) with representative inputs. It stops short of naming alternatives — e.g. it never says when to prefer calc_expression for non-fraction arithmetic or calc_percentage for percent work — so routing against siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_fuel_costFuel cost of a tripARead-onlyIdempotent
Fuel needed and cost of a trip from distance (km or miles, optionally round trip), fuel price (per litre, US gallon or UK gallon) and consumption in L/100 km, km/L, mpg (US) or mpg (UK); split between people; cost per km/mile and per 100. Optionally compare a second car (its own consumption and, if different, fuel price). Also converts the consumption to the other units. Web version: https://s3eidat.github.io/fuel-cost/
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name of the car (default "Car A"). | |
| price | Yes | Fuel price per priceUnit. | |
| people | No | Split the cost between this many people. | |
| compare | No | Optional second car to compare. | |
| currency | No | Currency label for the text, e.g. "JD" or "$". | |
| distance | Yes | Trip distance (one way unless roundTrip). | |
| priceUnit | No | The price is per litre, US gallon or UK gallon. | L |
| roundTrip | No | Double the distance (there and back). | |
| consumption | Yes | Car consumption / economy, e.g. 7.5 (L/100 km) or 35 (mpg). | |
| distanceUnit | No | Distance unit. | km |
| consumptionUnit | No | l100 = L/100 km, kml = km/L, mpgus, mpguk. | l100 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and openWorldHint=false, so safety is covered. The description adds meaningful behavioral context: it splits cost between people, computes per-km/mile and per-100 costs, optionally compares a second car, and converts consumption units. It does not explain output formatting or rounding, but the added detail is substantial.
Agents need to know what a tool does to the world before calling 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 dense single sentence with semicolons, but it is front-loaded with the main purpose and covers the major optional features efficiently. The web-version link is extraneous but minor; no sentence is entirely wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with nested comparison options and no output schema, the description explains the core outputs (fuel needed, total cost, per-distance cost, per-100 cost, split cost, comparison results, unit conversion). It does not specify the output shape or rounding behavior, but it is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter including units and defaults. The description restates the key inputs and their relationships, adding a useful overview but little semantic detail beyond what the schema provides. Baseline 3 is appropriate when the schema carries the explanatory burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs and resources: it computes fuel needed and trip cost from distance, fuel price, and consumption, with optional splitting/comparison. This clearly distinguishes it from sibling calculators like calc_split_bill or calc_unit_convert, and an agent can identify its function immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it by listing supported scenarios (round trips, people splitting, second-car comparison, consumption conversion), but it never explicitly says when to choose this over alternatives like calc_split_bill or calc_unit_convert. Usage is clear enough from context but lacks explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_gpaGPA calculatorARead-onlyIdempotent
Credit-weighted semester GPA, cumulative GPA (with previous credits and GPA) and the average you need over the remaining credits to reach a target. Scales: 4.0 (A…F, no A+), 4.3 (A+ = 4.3), 5.0 (A+ 5, A 4.75, B+ 4.5 … F 1) with letter grades, or "percent" with numeric marks between a minimum and maximum (default 35–100). Courses with no credits or an invalid grade are skipped (and listed). Up to 40 courses. Web version: https://s3eidat.github.io/gpa-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| scale | No | Grading scale. | 4.0 |
| courses | Yes | This semester's courses. | |
| targetGpa | No | Target cumulative GPA. | |
| percentMax | No | percent scale: highest mark (default 100). | |
| percentMin | No | percent scale: lowest passing mark (default 35). | |
| previousGpa | No | GPA before this semester. | |
| previousCredits | No | Credits completed before this semester. | |
| remainingCredits | No | Credits still to take after this semester (for the target). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and closed-world, so safety is covered. The description adds real behavioral detail beyond that: courses missing credits or with invalid grades are skipped and listed in the result, the 40-course cap, and the default 35–100 percent window. Return shape is only loosely sketched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that leads with the three outputs before detailing scales and edge cases. Slightly packed, with the scale enumeration taking substantial space, but every sentence carries operative information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 params, a nested course array, and no output schema, the description must carry return-value context; it names the three computed figures and the skipped-course listing. Exact output field names are not given, which is the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description genuinely enriches the terse schema: it spells out what each scale means ('4.3 (A+ = 4.3)', '5.0 (A+ 5, A 4.75 … F 1)') and that percentMin/percentMax default to 35 and 100, which the schema does not state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause names specific verbs and resources: credit-weighted semester GPA, cumulative GPA, and the required average for a target. It immediately tells an agent the three distinct computations available, which no sibling calc_* tool offers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 implicitly defines the conditions for each mode: supply previousGpa/previousCredits for cumulative output, and targetGpa with remainingCredits for the target average. It also states input constraints (max 40 courses, percent scale needs min/max). No explicit 'do not use for X' exclusion is given, but no sibling competes directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_hijriHijri ⇄ Gregorian converterARead-onlyIdempotent
Convert between Gregorian and Hijri dates with the Umm al-Qura calendar (the same Intl calendar the website uses), both ways. Modes: to_hijri (a Gregorian date), to_gregorian (Hijri year, month 1–12, day), month (length of a Hijri month and its Gregorian start/end), age (age in Hijri and Gregorian years, next Hijri birthday). Results come in English and Arabic (Arabic-Indic digits by default; Gregorian month names in the Egyptian/Gulf or Levant style). Supported range 1300–1600 AH (1882–2174). Web version: https://s3eidat.github.io/hijri-converter/
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | to_hijri: Gregorian date YYYY-MM-DD (default today). | |
| mode | Yes | Which conversion. | |
| onDate | No | age: age on this Gregorian date (default today). | |
| hijriDay | No | to_gregorian: Hijri day 1–30. | |
| birthDate | No | age: Gregorian date of birth YYYY-MM-DD. | |
| hijriYear | No | to_gregorian / month: Hijri year (1300–1600). | |
| hijriMonth | No | to_gregorian / month: Hijri month 1–12 (1 = Muharram, 9 = Ramadan). | |
| arabicDigits | No | Use Arabic-Indic digits in the Arabic text. | |
| gregorianArabicMonths | No | Arabic Gregorian month names: intl (Egypt/Gulf style, January = Yanayir) or levant (Syria/Jordan style, January = Kanun al-Thani). | intl |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior: the supported 1300–1600 AH range and that output is bilingual with Arabic-Indic digits and regional Gregorian month styles. It says nothing about what happens for out-of-range or invalid dates, nor about the exact shape of returned results for a tool with four distinct modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then a compact mode enumeration and the constraints. Dense parentheticals earn their place as disambiguation, though the trailing web-version URL adds nothing an agent can act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of hinting at returns per mode (month length plus Gregorian start/end; Hijri and Gregorian ages plus next Hijri birthday; bilingual output). That is close to complete for a read-only converter; only exact field names/shapes and error behavior remain unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the per-mode parameter docs (date, hijriYear 1300–1600, hijriMonth 1–12 with Ramadan noted, birthDate, onDate) already carry the semantics. The description largely repeats that ground: the range 1300–1600 AH appears in the schema too, and the Arabic-Indic/Levant options duplicate the enum descriptions. Baseline 3 is right.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Convert between Gregorian and Hijri dates' with the Umm al-Qura calendar) and enumerates the four operating modes, so the agent knows exactly what the tool does. It does not, however, differentiate itself from nearby siblings such as calc_age or time_convert, even though it contains an 'age' mode that overlaps with calc_age.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mode list effectively tells the agent which inputs select which operation (to_hijri takes a Gregorian date, to_gregorian needs Hijri y/m/d, month reports a Hijri month's length and boundaries, age needs a birthDate). There are no explicit 'use this instead of X' exclusions or prerequisites, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_hoursWork hours / time cardARead-onlyIdempotent
Weekly time card: add shifts (start and end "HH:MM", unpaid break minutes; an end at or before the start is an overnight shift), up to 6 shifts a day. Totals per shift, per day and per week in h:mm and decimal hours; optional rounding of each shift to 5, 6 or 15 minutes; overtime over N hours a day and/or N regular hours a week (daily first, then weekly), paid at a multiplier (default 1.5); pay at an hourly rate. Web version: https://s3eidat.github.io/hours-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| shifts | Yes | The week's shifts. | |
| weekOf | No | Optional: any date in that week (YYYY-MM-DD) to date each day. | |
| currency | No | Currency label for the summary. | |
| weekStart | No | First day of the week (order of the days). | saturday |
| hourlyRate | No | Pay per regular hour. | |
| roundMinutes | No | Round each shift to the nearest 5, 6 or 15 minutes (0 = off). | |
| dailyOvertimeHours | No | Hours per day after which time is overtime (e.g. 8). | |
| overtimeMultiplier | No | Overtime pay multiplier. | |
| weeklyOvertimeHours | No | Regular hours per week after which time is overtime (e.g. 40). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the readOnly/idempotent annotations: an end time at or before the start is treated as an overnight shift, there is a cap of 6 shifts per day (the schema only caps totals at 42), and overtime is applied daily first and then weekly. These are non-obvious rules that change how the tool computes results, though no error handling or limits on the pay output are described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded block that leads with the core purpose and then layers in shift rules, rounding, overtime and pay without repetition. Despite the density, every clause carries a distinct rule; even the reference URL is a single trailing token.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the input rules and describes the outputs it produces (per-shift/day/week totals in h:mm and decimal, plus pay), which matters since there is no output schema. It leaves minor gaps such as invalid-time behavior and how currency interacts with pay, but nothing an agent needs to form a valid call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description goes further by explaining the interaction between dailyOvertimeHours and weeklyOvertimeHours (daily first, then weekly), the meaning of roundMinutes (5/6/15-minute shift rounding), and the default 1.5 multiplier. That interaction semantics is not obvious from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Weekly time card: add shifts... Totals per shift, per day and per week" gives a specific verb (compute/add shifts) and resource (weekly time card with pay), which an agent can distinguish from neighbors like calc_salary or doc_attendance_sheet by inference. It stops short of naming an alternative explicitly, so it is clear rather than sibling-differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The weekly-shift framing implies when the tool fits, but there is no explicit when-to-use or when-not guidance and no mention of alternatives (e.g. use calc_salary for a flat salary rather than shift-based hours). The agent must infer the selection condition from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_loanLoan / mortgage calculatorARead-onlyIdempotent
Monthly payment, total interest, total paid and payoff month for a fixed-rate loan or mortgage, with an optional extra monthly payment (shows interest saved and how much sooner it ends) and an amortization schedule by year or by month (or none). Maths is in whole cents like the website; the last payment absorbs the rounding so the balance ends at 0. Rate 0–100 %, term 1 month to 100 years. Web version: https://s3eidat.github.io/loan-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Loan term, in years (default) or months (see termUnit). | |
| amount | Yes | Loan amount (principal), e.g. 250000 or "250,000". | |
| schedule | No | Amortization table: per calendar year, per month, or omit it. | yearly |
| termUnit | No | Unit of "term". | years |
| annualRate | Yes | Annual interest rate in percent, e.g. 6.5. 0 is allowed. | |
| startMonth | No | First payment month "YYYY-MM". Default: next month. | |
| extraMonthly | No | Optional extra principal paid every month. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, closed-world), and the description adds genuinely new behavioral facts: arithmetic is in whole cents, the final payment absorbs rounding so the balance hits exactly 0, and extra monthly payments report interest saved and payoff acceleration. That is real determinism/output context beyond the structured hints, though nothing is said about input validation failures or edge behavior at rate 0.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence front-loads the return values, then packs the extra-payment and schedule behavior, constraints, and a reference URL. Every clause carries information, though the 'Maths is in whole cents like the website' phrasing is slightly chatty and the trailing link is decorative rather than operational.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With seven parameters, no output schema, and a computational tool, the description enumerates the return payload (payment, total interest, total paid, payoff month, interest saved, amortization schedule) and bounds the inputs. An agent has everything needed to call it and to know what comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns an increment by adding constraints the schema omits — the 0–100% rate band, the 1-month-to-100-year term band, and the fact that extraMonthly yields interest-saved/payoff-shortening output, and that schedule can be yearly, monthly, or none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the exact outputs (monthly payment, total interest, total paid, payoff month) for a fixed-rate loan or mortgage, plus the optional extras. A verb+resource+scope statement this specific lets an agent distinguish it from neighboring calculators like calc_compound_interest or calc_salary without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the domain ('fixed-rate loan or mortgage') and bounded by stated ranges (rate 0–100%, term 1 month to 100 years), but there is no explicit when-to-use/when-not-to-use guidance or named alternative. An agent must infer that this is the right tool when a loan amortization is wanted rather than, say, compounding.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_percentagePercentage calculatorARead-onlyIdempotent
Every percentage question the website answers: "X% of Y" (percent_of: percent, value), "X is what % of Y" (what_percent: part, whole), percent change from A to B (change: from, to), increase/decrease a value by X% (increase/decrease: value, percent), find the original before a X% increase/decrease (reverse_increase/reverse_decrease: value, percent), and profit margin vs markup (margin_markup: cost, price). Returns the number, a display string and the worked formula. Web version: https://s3eidat.github.io/percentage-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | change: the new value. | |
| cost | No | margin_markup: cost price. | |
| from | No | change: the old value. | |
| mode | Yes | Which question to answer (see the description for the fields each one uses). | |
| part | No | what_percent: the part X in "X is what % of Y". | |
| price | No | margin_markup: selling price. | |
| value | No | The value Y (percent_of: Y in "X% of Y"; increase/decrease: the starting value; reverse_*: the final value). | |
| whole | No | what_percent: the whole Y. | |
| percent | No | The percentage X (percent_of, increase, decrease, reverse_*). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds the otherwise-undocumented return contract (number, display string, worked formula) and a reference URL, which is real value since no output schema exists, though it says nothing about error handling for missing per-mode 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?
A single dense sentence front-loads the scope and then walks the modes in order; almost every clause earns its place. The trailing web URL is mildly incidental and the sentence is long, but nothing is padded or repetitive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, mode-driven calculator with no output schema, the description supplies the complete mode→field matrix plus the return shape. An agent has everything needed to construct a valid call for any mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every property already states which mode it belongs to, so the description's per-mode field mapping largely restates structured data. Baseline 3 applies; it adds readability but no semantics absent from 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 opens with a specific verb+resource ("Every percentage question the website answers") and then enumerates all eight calculation modes. An agent can tell instantly that this is a pure arithmetic helper, distinct from calc_expression or calc_discount, without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit routing rules: each mode is quoted with its natural-language question form and the exact field combination it consumes ("X% of Y" → percent_of: percent, value). Choosing the right mode and inputs is fully determined by the description text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_primesPrime number toolsARead-onlyIdempotent
Number theory with big integers, like the website. check: is a number prime (trial division, deterministic Miller-Rabin below 2^64, probabilistic above), its prime factorisation (Pollard rho), number of divisors, sum of divisors σ, Euler φ, the divisor list, previous/next prime and whether it is perfect; the number may be an expression like "2^61-1", "10!+1" or "1000003*1000033" (up to 400 digits). gcd_lcm: GCD and LCM of 2–50 numbers with Euclid's steps. range: list the primes between two numbers (below 10^15, at most 10,000,000 numbers per range). Web version: https://s3eidat.github.io/prime-tools/
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | range: end (inclusive), below 10^15. | |
| from | No | range: start (inclusive). | |
| mode | No | What to do. | check |
| limit | No | range: return at most this many primes in the list (the count is always exact). | |
| number | No | check: the number or expression, e.g. "600851475143" or "2^89-1". | |
| numbers | No | gcd_lcm: the whole numbers (2–50, expressions allowed). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, and the description adds meaningful behavioral context beyond that: deterministic Miller-Rabin below 2^64 but probabilistic above, Pollard rho for factorisation, and hard input limits. The probabilistic-result caveat is exactly the kind of correctness detail an agent needs and cannot get from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the overarching purpose and then structured by mode, and nearly every clause carries information. It is a dense single paragraph and the trailing website URL plus 'like the website' are marginal, but there is little true filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, three-mode tool with no output schema, the description covers the mode semantics and hard limits well. It does not describe the shape of returned results (e.g., factorisation format or how gcd steps are returned), which would matter without an output schema, so it falls short of a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics: check accepts expressions like '2^61-1' or '10!+1' up to 400 digits, gcd_lcm takes 2–50 numbers, and range is bounded below 10^15. It omits the 'limit' parameter's 100,000 cap and exact-count behavior, so not 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 names the resource ('number theory with big integers') and enumerates the three modes and exactly what each computes: primality, factorisation, divisor counts/sums, φ, prev/next prime, perfect, gcd/lcm, and prime ranges. This lets an agent distinguish it from siblings like calc_expression or calc_fraction without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mode list clearly implies when each mode applies, and it names constraints (400-digit expressions, ranges below 10^15, 2–50 numbers for gcd_lcm, max 10,000,000 numbers per range). It does not explicitly name alternatives or exclusions (e.g., use calc_expression for plain arithmetic), which is the one missing piece.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_romanRoman numeralsARead-onlyIdempotent
Convert numbers to Roman numerals (1–3,999 in standard form; up to 3,999,999 with a vinculum bar, which multiplies by 1,000) and Roman numerals back to numbers with strict validation that explains mistakes (IIII, IC, VV, non-standard forms like IIX…) and the symbol-by-symbol working. Also writes a date in Roman numerals (day/month/year order and separator of your choice, years 1–3999). Web version: https://s3eidat.github.io/roman-numerals/
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | date: YYYY-MM-DD. | |
| mode | Yes | to_roman (number → Roman), from_roman (Roman → number) or date. | |
| order | No | date: order of day, month, year. | dmy |
| roman | No | from_roman: the numeral, e.g. "MCMXCIV" (any case). | |
| number | No | to_roman: a whole number 1–3,999,999. | |
| separator | No | date: separator, e.g. " · ", ".", " - ", " / ". | · |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, so the description correctly focuses on capability semantics: strict validation that reports specific malformed forms (IIII, IC, VV, IIX) and returns symbol-by-symbol working, plus hard limits (1–3,999 standard, 3,999,999 with vinculum). The date mode's year bound of 1–3999 is useful extra context not in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph with the primary conversion described first, then date mode, then a link. The stacked parentheticals make it slightly heavy to scan, and the web-version URL is marginal for an agent, but nothing is genuinely 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?
With 6 parameters, no output schema, and full annotation coverage, the description adequately covers all three modes, input limits, and failure behavior. The one real gap is that with no output schema present, it never sketches the response shape (e.g., what the returned string or validation breakdown looks like).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description earns more by explaining the range semantics behind `number` (including the ×1,000 vinculum rule) and the date year bound, which the schema only implies. It does not explicitly tie each parameter name to its mode, but the schema descriptions already do that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource in both directions (numbers → Roman numerals and back), plus a third date-formatting capability. It is immediately distinguishable from neighbors like base_convert or text_number_to_words because it names the domain, the accepted range, and the vinculum extension.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each mode's job is spelled out in prose (convert to Roman, validate/parse back, format a date), so an agent can map intent to the correct `mode` value without guessing. It stops short of explicitly naming alternatives (e.g., base_convert for other numeral systems) or stating when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_salarySalary / pay period converterARead-onlyIdempotent
Convert pay between per hour, day, week, every 2 weeks, twice a month, month and year using your hours per week, days per week and weeks per year (defaults 40 / 5 / 52). Optional overtime (hours per week × multiplier, e.g. 1.25, 1.5, 2) and a raise given as a percent or as the new monthly pay. Amounts are rounded to 2 decimals. Web version: https://s3eidat.github.io/salary-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | The pay amount, e.g. 1200. | |
| period | No | The period "amount" is paid for. | month |
| currency | No | Optional ISO currency code for the text summary (e.g. USD, JOD). | |
| daysPerWeek | No | Working days per week (0–7, default 5). | |
| hoursPerWeek | No | Working hours per week (0–168, default 40). | |
| raisePercent | No | Optional raise in percent (gives the new pay). | |
| weeksPerYear | No | Paid weeks per year (0–53, default 52). | |
| newMonthlyPay | No | Or: the new monthly pay (gives the raise percent). | |
| overtimeHours | No | Optional overtime hours per week. | |
| overtimeMultiplier | No | Overtime rate multiplier (default 1.5). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, so the bar is lower; the description still adds real value by disclosing rounding to 2 decimals, default work-week assumptions, and how overtime and raise inputs behave. It stops short of describing the returned breakdown, which is the one behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and period list, then defaults, then optional overtime/raise. Dense but nearly every clause carries information; only the appended web URL is arguably disposable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 10-parameter calculator with no output schema, the description covers inputs well but never explains what comes back – whether all periods are returned, whether a text summary is produced (the currency param hints at one), or the shape of the result. That is a meaningful gap for an agent planning downstream 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, but the description adds meaning beyond the schema: it clarifies the overtime formula ('hours per week × multiplier'), gives concrete multiplier examples, and states that raise is given either as a percent or as new monthly pay, making the mutual exclusivity of raisePercent/newMonthlyPay explicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Convert pay between...') and enumerates every supported period (hour through year), so an agent immediately knows this is a pay-rate converter rather than a generic calculator like calc_hours or calc_percentage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the description explains the inputs drive the conversion and mentions defaults (40/5/52) and optional overtime/raise, but it never states when to prefer this over sibling tools (e.g. calc_hours, calc_loan) or any precondition/exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_sleepSleep cycle calculatorARead-only
Sleep in whole cycles so you wake in light sleep: given a wake-up time, the bedtimes for 6, 5, 4 or 3 cycles; given a bedtime (or "now"), the wake-up times. Defaults: 90-minute cycles (70–110) and 15 minutes to fall asleep (0–60). With mode "bed"/"now" it also lists nap alarms (20, 30, 60 min and one full cycle). 12- or 24-hour clock. Web version: https://s3eidat.github.io/sleep-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | wake: I must wake at "time"; bed: I go to bed at "time"; now: I go to bed now (server clock). | wake |
| time | No | "HH:MM" 24 h: the wake-up time (wake) or bedtime (bed). Default 07:00 / 23:00. | |
| clock | No | 12-hour (AM/PM) or 24-hour times in the output. | 12 |
| cycleMinutes | No | Length of one sleep cycle. | |
| fallAsleepMinutes | No | Minutes it takes you to fall asleep. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: it discloses what the response contains (bedtimes for 6/5/4/3 cycles, plus nap alarms at 20/30/60 min and one full cycle when mode is bed/now) and the configurable cycle/fall-asleep ranges, which is important because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph with the purpose front-loaded and no filler; every clause carries information (modes, defaults, output variants, clock format). It is run-on and could be split into two or three scannable sentences, which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by enumerating the bedtime/wake-time/nap-alarm lists and the clock format. Combined with the parameter defaults it is nearly complete; only minor details (timezone/server-clock assumptions for mode 'now') are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including the mode enum, HH:MM pattern, clock enum and both numeric ranges is already documented. The description restates the 90-minute and 15-minute defaults and adds the mode-dependent nap-alarm output, but supplies no new syntax or constraint information beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first clause names a specific verb and resource — compute sleep-cycle-aligned bedtimes or wake times — and states both directions of the calculation (wake time in → bedtimes out; bedtime in → wake times out). No sibling in the calculator family does this, so an agent can identify it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Given a wake-up time... given a bedtime (or 'now')" maps a user intent directly onto the mode choice, which is the main selection decision for this tool. It stops short of naming when not to use it (e.g. arbitrary duration math belongs in calc_hours/calc_date_diff), so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_split_billSplit a billARead-onlyIdempotent
Split a restaurant bill with tax/service and tip, in whole cents so the shares always add up exactly (left-over cents go to the largest remainders). simple: one bill split evenly between N people (1–100). items: list who had what; each item is split between the people who shared it (nobody listed = everyone), and tax and tip are shared in proportion. Tip can be on the subtotal or on subtotal + tax; each share can be rounded up to a step (e.g. 0.5 or 1). Returns a ready-to-send summary. Web version: https://s3eidat.github.io/split-bill/
| Name | Required | Description | Default |
|---|---|---|---|
| bill | No | simple: the bill subtotal (before tax and tip). | |
| mode | No | Even split, or itemised. | simple |
| items | No | items: what was ordered. | |
| people | No | simple: how many people (default 2). items: the names, e.g. ["Sara", "Omar", "Lina"]. | |
| currency | No | Currency, e.g. "JOD" (written after) or "$" (written before). | |
| tipOnTax | No | Calculate the tip on subtotal + tax. | |
| roundUpTo | No | Round each share up to a multiple of this (e.g. 0.5, 1, 5). 0 = exact. | |
| taxPercent | No | Tax / service charge percent. | |
| tipPercent | No | Tip percent (default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false), so this is extra credit territory, and the description delivers: it discloses the cent-allocation algorithm (left-over cents to largest remainders), that tax and tip are shared proportionally in items mode, that tip can be computed on subtotal or subtotal+tax, and that each share may be rounded up to a step. It doesn't mention validation failures (e.g. max 200 items, max 100 people) beyond the simple-mode range, keeping it out of the 5 tier.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behaviour (whole-cent allocation and the mode split) is front-loaded in the first two clauses, and the sentences are dense but all load-bearing. The trailing 'Web version:' URL is decorative rather than useful for an agent and is the only clear waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, entirely optional-parameter tool with no output schema, the description supplies what the schema can't: mode semantics, the cent-rounding guarantees, and a statement of the return value ('a ready-to-send summary'). Nothing an agent needs in order to call it correctly appears to be missing, though it doesn't cover default behaviour when `bill` is omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description earns one more by explaining cross-parameter interaction the schema can't: how `items` + `sharedBy` propagate into per-person splits and how tax and tip get apportioned proportionally across those shares. It also clarifies the roundUpTo/tipOnTax behaviour in prose rather than merely restating the field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: splitting a restaurant bill with tax/service and tip, computed in whole cents. It immediately distinguishes the two operating modes (simple even split vs. itemised) and states the guarantee (shares always add up exactly), which is enough for an agent to identify this tool against any sibling in the long calc_* family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the conditions that select each mode — 'simple: one bill split evenly between N people (1–100)' vs. 'items: list who had what' — and explains the default when nobody is listed for an item. It stops short of naming alternatives or exclusions, but no sibling tool competes for this job, so the routing guidance is effectively complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_statsDescriptive statisticsARead-onlyIdempotent
Descriptive statistics for a list of numbers: count, sum, mean, median, mode(s), min, max, range, sample and population variance and SD, standard error, coefficient of variation, quartiles (inclusive = Excel QUARTILE.INC, exclusive = QUARTILE.EXC, or Tukey median-of-halves), IQR, 1.5×IQR outlier fences and outliers, a frequency table (values, or Sturges bins when there are more than 20 distinct values) and z-scores. Paste numbers separated by spaces, commas, semicolons, | or new lines; headers and text are skipped and reported. Commas can be separators, thousands marks or decimal commas. Up to 1,000,000 numbers. Web version: https://s3eidat.github.io/stats-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | The numbers: a text blob (CSV column, list…) or an array of numbers. | |
| commas | No | In text: commas separate values (sep), are thousands marks (thou: 1,234), or decimal commas (dec: 1,5). | sep |
| zScores | No | Include a z-score for each value (first 1,000). | |
| frequency | No | Include the frequency table. | |
| quartileMethod | No | Quartile method. | inc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, closed-world), and the description adds genuinely new behavioral facts: a 1,000,000-number cap, that headers and text are skipped and reported, that z-scores are capped at the first 1,000 values, and how ambiguous commas are resolved. It does not mention error behavior or output shape, but the added constraints are substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the output inventory, which is justified because there is no output schema, and every clause (parsing rules, limits, quartile conventions) adds information. It is a single dense block with a trailing web-version URL that is arguably filler, so not quite a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the enumerated statistics serve as the return-value contract, and the input limits, parsing rules and header handling make invocation unambiguous. What remains unstated is failure behavior (e.g., what happens with zero valid numbers) and performance expectations near the 1M cap.
Complex tools with many parameters or behaviors need more documentation. Simple 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 already 100%, so baseline is 3; however the description adds meaning beyond the schema for two enum parameters — spelling out that quartile methods correspond to Excel QUARTILE.INC/EXC or Tukey median-of-halves, and explaining the three comma interpretations with examples. The zScores/frequency behavior is also clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Descriptive statistics for a list of numbers') and then enumerates the exact statistics produced, which clearly separates it from sibling calculators like calc_expression or calc_percentage that compute a single value. An agent can tell what it gets back without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'Paste numbers separated by spaces, commas, semicolons, | or new lines' and 'a text blob (CSV column, list…)' signal the intended input scenarios, but the description never says when to prefer this over alternatives such as ai_csv_profile or calc_expression, nor any exclusions. The context is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_unit_convertUnit converterARead-onlyIdempotent
Convert between units in 14 categories, the same table as the website: length, mass, temperature, volume, area (incl. dunam), speed, time, data (kB/MB vs KiB/MiB, bits), pressure, energy, power, angle, fuel economy (L/100km, km/L, mpg US/UK) and cooking (tsp, tbsp, cups, metric spoons). Give value + from + to (symbols like "km", "°F", "GiB" or names like "miles"; ASCII forms like "m2", "um" work), or a query like "5 km to mi". Set all=true for the value in every unit of the category, or list=true to see every category and unit. Web version: https://s3eidat.github.io/unit-convert/
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Unit to convert to (symbol or name). Optional when all=true. | |
| all | No | Also return the value in every unit of the category. | |
| from | No | Unit to convert from (symbol or name). | |
| list | No | Just list every category and its units. | |
| query | No | A whole question, e.g. "5 km to mi" or "72 f in c". | |
| value | No | The number to convert. | |
| category | No | Category, to pick the right unit when a symbol exists in two (e.g. "pt" in volume and cooking). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, idempotent, closed-world operation. The description adds useful behavioral detail about accepted symbol and ASCII forms, query syntax, and what all=true and list=true return.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loads the core purpose and packs in useful examples and modes without obvious filler. It could be slightly better structured than a single long paragraph, and the website link is optional rather than essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 seven-parameter, all-optional conversion tool with no output schema, the description covers the categories, input forms, disambiguation, and output modes sufficiently for correct invocation. Nothing critical about how to call the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is already 100%, the description adds substantial meaning beyond the schema: examples of symbols and names, ASCII forms like "m2" and "um", query strings like "5 km to mi", category disambiguation for symbols such as "pt", and the intended effects of all and list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: converting units across 14 named categories. It is much more specific than the title alone, though it does not explicitly differentiate itself from overlapping siblings such as time_convert, base_convert, or bytes_convert.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains the main invocation modes: value + from + to, a natural-language query, all=true for every unit in a category, and list=true for categories/units. It lacks explicit guidance on when to prefer this tool over related sibling converters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_zakatZakat calculatorARead-onlyIdempotent
Zakat on wealth: 2.5 % of net zakatable wealth (cash, bank, investments, trade goods, money owed to you, gold and silver, minus debts due now) when it reaches the nisab: the value of 85 g of pure gold (default) or 595 g of silver. Gold weight is converted to pure gold by karat (24/22/21/18). You give today's gold/silver price per gram in your currency: nothing is fetched from the network. An estimate only; consult a scholar. Web version: https://s3eidat.github.io/zakat-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| bank | No | Bank balances. | |
| cash | No | Cash in hand. | |
| debts | No | Debts you must pay now (deducted). | |
| currency | No | Currency label for the summary (e.g. JOD). | |
| goldGrams | No | Gold you own, in grams. | |
| goldKarat | No | Karat of that gold (default 21). | |
| nisabBasis | No | Which metal sets the nisab. | gold |
| tradeGoods | No | Value of goods held for sale. | |
| investments | No | Shares, funds and other investments. | |
| receivables | No | Money owed to you that you expect back. | |
| silverGrams | No | Silver you own, in grams. | |
| goldPricePerGram | No | Price of 1 g of pure (24k) gold. Needed for the gold nisab and to value gold. | |
| silverPricePerGram | No | Price of 1 g of silver. Needed for the silver nisab and to value silver. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, closed-world), and the description adds genuinely useful behavior: no network fetch (so price inputs are mandatory in practice), the karat conversion rule, and that the output is an estimate rather than a ruling. It stops short of saying what happens when required prices are omitted or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but every clause carries information — asset list, deduction, nisab, karat, price-input requirement, disclaimer. Front-loaded with the core formula. Minor deductions for being one unbroken block and for the trailing web-version URL, which does not help an agent invoke 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?
With 13 parameters and no output schema, the description should indicate what comes back (zakat due, nisab applied, whether the threshold was met) and how missing prices are handled. It covers inputs and domain rules well but leaves the return contract and error behavior unstated, which is a meaningful gap for a zero-required-parameter 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, but the description earns more: it explains the nisab thresholds (85 g pure gold default, or 595 g silver), how karat 24/22/21/18 converts gross grams to pure gold, and why goldPricePerGram/silverPricePerGram are required. That is real meaning beyond the per-field schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a precise verb-resource framing: 2.5% of net zakatable wealth, enumerating exactly which assets count (cash, bank, investments, trade goods, receivables, gold/silver) and which are deducted (debts due now). This is unmistakably distinct from every calc_* sibling, and an agent knows immediately what computation is being performed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States a critical usage constraint explicitly: the caller must supply today's gold/silver price per gram because 'nothing is fetched from the network' — this prevents an agent from calling it expecting live prices. It also frames the result as an estimate requiring scholarly consultation. It does not name when-not-to-use or an alternative tool, but no sibling overlaps this domain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chmod_calcchmod calculatorARead-onlyIdempotent
Convert Unix file permissions between octal (755, 0644, 4755), symbolic (rwxr-xr-x, ls -l style -rwsr-xr-x) and chmod clauses (u=rwx,g=rx,o=; relative ones like g+w or +x apply to "base"). Returns all forms, a plain-English description per owner/group/others, setuid/setgid/sticky meaning, safety warnings, and ready chmod commands. Web version: https://s3eidat.github.io/chmod-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Starting mode (octal) for relative clauses like "g+w". Default 000. | |
| file | No | File name for the example chmod commands (shell-quoted). | file |
| mode | Yes | Octal ("755", "0644", "2775"), symbolic ("rwxr-x---", "drwxrwxrwt") or clauses ("u=rw,go=r", "+x"). | |
| recursive | No | Add -R to the example commands. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/closed-world, and the description adds meaningful context: that it emits all forms, per-class plain-English descriptions, setuid/setgid/sticky semantics, safety warnings, and ready-to-run chmod commands. Only the exact output structure remains unspecified, which is minor given no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the conversion capability and then lists the deliverables. Every clause earns its place; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating what is returned (all forms, plain-English per-class descriptions, special-bit meanings, warnings, chmod commands). An agent knows exactly what to expect and what inputs to supply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented. The description reinforces that relative clauses like g+w or +x resolve against 'base', but this largely mirrors the schema's own wording rather than adding new meaning, so baseline 3 is right.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Convert) and resource (Unix file permissions) and enumerates the exact notations handled (octal, symbolic, chmod clauses). This clearly separates it from generic converters like base_convert or calc_unit_convert.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The accepted input forms are spelled out with examples, giving a clear picture of when this tool applies versus a generic calculator. It stops short of naming alternatives or stating exclusions, but for a self-contained calculator the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cron_explainCron explainARead-onlyIdempotent
Explain a standard 5-field cron expression (minute hour day-of-month month day-of-week; names like MON/JAN, ranges, lists, steps, ? and the @hourly/@daily/@weekly/@monthly/@yearly/@reboot macros) in plain English and list the next run times in an IANA timezone. Follows Vixie cron: when both day fields are restricted a day matches either one. Quartz 6/7-field and L/W/# syntax are rejected with a clear message; per-field errors are reported. Web version: https://s3eidat.github.io/cron-explain/
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Start searching after this instant (ISO 8601). Default: now. | |
| count | No | How many upcoming run times to list (0–100). Default 10. | |
| hour12 | No | Describe times on a 12-hour clock (9:00 AM) instead of 24-hour (09:00). | |
| timezone | No | IANA timezone the cron daemon runs in. Default: the server's (UTC). | |
| expression | Yes | The cron expression, e.g. "*/30 9-17 * * 1-5" or "@daily". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, and the description goes well beyond them: it discloses evaluation semantics ('when both day fields are restricted a day matches either one'), failure behavior (Quartz syntax rejected, per-field errors reported), and the timezone context of the returned run times. That is exactly the subtle behavior an agent cannot infer from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that is front-loaded with the core action and supported syntax before edge cases; almost every clause carries information. The trailing web-version URL is the only element that does not help an agent call the tool, and the long parenthetical syntax list is heavy but purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters, no output schema, and rich syntax rules, the description covers the gaps: it states both return components (plain-English explanation plus upcoming run times), the timezone basis for those times, and error behavior. Nothing an agent needs before invoking it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented. The description only implies the expression and timezone parameters and says nothing about 'from', 'count', or 'hour12' that the schema does not already say better. Baseline 3 for a schema-complete tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Explain a standard 5-field cron expression ... in plain English and list the next run times'), and enumerates the exact accepted syntax (names, ranges, lists, steps, ?, @-macros) while explicitly excluding Quartz 6/7-field and L/W/# syntax. An agent knows precisely what it gets and what it will not get, which is stronger differentiation than the sibling list (all unrelated calculators/converters) requires.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage envelope is clearly stated: standard 5-field Vixie cron only, Quartz extensions rejected with a clear message, IANA timezone context. It does not name an in-server alternative (none exists among siblings), and the external web-version link is a de facto alternative pointer rather than a routing rule. Clear context, but no explicit 'use this when / do not use when' framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_file_decryptDecrypt a file (.s3enc)ARead-onlyIdempotent
Decrypt an .s3enc file made by the S3eidat File Encrypt website or crypto_file_encrypt, verify every chunk, and write the original file back under its stored (sanitised) name. A wrong password, damage, truncation or reordering is reported and nothing is written. Web version: https://s3eidat.github.io/file-encrypt/
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The .s3enc file: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| output | No | Where to write the decrypted file: a file path, or a folder ending in "/" (keeps the stored name). Default: the server output folder. | |
| password | Yes | The password. Normalised to Unicode NFC first, like the website. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/openWorldHint/idempotentHint, so the bar is lower, and the description still adds real substance: per-chunk verification, fail-closed semantics ('nothing is written' on wrong password, damage, truncation or reordering), and output-name sanitisation. It does not state whether an existing destination file is overwritten or what permissions are needed; the write-to-disk behavior also sits somewhat awkwardly next to readOnlyHint=true, though the description is explicit enough that no agent is misled about the write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior, failure conditions and output naming are front-loaded in one dense sentence, with the compatibility URL as a short trailing reference. No filler, though the URL line is only marginally useful for invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden for return semantics and does so for the failure case (errors reported, nothing written) and partially for success (file written under stored name, optional base64 via parameter). It never states what the success result contains (e.g., path returned) or overwrite behavior, a small but real gap for a file-producing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (file, output, password, returnBase64) are already documented, setting the baseline at 3. The description adds only indirect meaning — that a wrong password is detected and reported — and says nothing extra about output-path resolution or base64 return limits beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Decrypt an .s3enc file'), names the exact producers of the input (the S3eidat website or crypto_file_encrypt), and names the output ('write the original file back under its stored (sanitised) name'). It is unmistakably distinct from crypto_text_decrypt and crypto_file_encrypt in the sibling 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?
It gives the precondition for use (the file must be .s3enc produced by the website or crypto_file_encrypt) and the counterpart that creates such files, which effectively routes the agent to crypto_file_encrypt for the inverse operation. It does not explicitly exclude or compare against crypto_text_decrypt or the other decrypt-adjacent tools, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_file_encryptEncrypt a file (.s3enc)ARead-only
Encrypt any file with a password into the website's .s3enc format: chunked AES-256-GCM, key from PBKDF2-SHA256 (600,000 rounds, random salt), original name/type/size stored encrypted inside, tamper/truncation/reorder-proof. Files made here open at https://s3eidat.github.io/file-encrypt/ and vice versa (crypto_file_decrypt). Whole file is processed in memory (size limit = server --max-mb). Web version: https://s3eidat.github.io/file-encrypt/
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The file to encrypt: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| name | No | File name to store inside (restored on decrypt). Default: the input file name. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| mimeType | No | MIME type to store. Default: guessed from the extension like a browser would ("" if unknown). | |
| password | Yes | The password. Normalised to Unicode NFC first, like the website. | |
| chunkSize | No | Chunk size in bytes (website: 4 MiB). | |
| iterations | No | PBKDF2 rounds (website: 600,000). | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description carries real behavioral content beyond the annotations: chunked AES-256-GCM, PBKDF2-SHA256 with 600,000 rounds and a random salt, encrypted metadata, and tamper/truncation/reorder resistance, plus the in-memory size limit. It is consistent with idempotentHint=false (random salt means output differs each call). One caveat: it says the result is written to an output path or the server output folder, which sits awkwardly with readOnlyHint=true — this looks like an annotation mis-setting rather than a description defect, but it can mislead an agent about side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the format and crypto details an agent needs, with the size constraint and compatibility note following. The website URL is stated twice (inline and at the end), which is the only clear waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, no-output-schema mutation-style tool, the description covers algorithm, memory ceiling, and cross-compatibility well. It does not describe the result payload (e.g. whether a path or base64 is returned, and what happens when returnBase64 is false), which is the main remaining gap given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description goes further by tying 'chunked' to chunkSize, '600,000 rounds' to iterations (and that this matches the website), and noting password NFC normalisation. It still does not discuss the output/returnBase64 interaction or default output naming beyond what the schema says, so it is additive rather than exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Encrypt') and resource ('any file'), plus the exact output format (.s3enc) and the crypto scheme. It explicitly names the counterpart (crypto_file_decrypt) and the web tool it is compatible with, so an agent can distinguish it from crypto_text_encrypt and the stego tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Use context is clear: encrypt a file so that it opens at the given website or via crypto_file_decrypt, with a stated constraint that the whole file is held in memory (server --max-mb). It does not spell out explicit exclusions (e.g. when to prefer crypto_text_encrypt or crypto_stego_hide), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_stego_hideHide a message in an imageARead-only
Hide a text message inside an image (LSB steganography in R, G, B; the picture looks the same) and save it as a lossless PNG, optionally encrypted with a password (AES-256-GCM, PBKDF2-SHA256 600,000). Same bit layout as the website, so the PNG reveals at https://s3eidat.github.io/stego-image/ or with crypto_stego_reveal. Capacity ≈ width×height×3/8 − 10 bytes (−44 more when encrypted). Transparency is filled with white. The result is read back and checked before returning. Sending it through apps that recompress images (JPEG, chat apps) destroys the message. Web version: https://s3eidat.github.io/stego-image/
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | The cover image (PNG, JPEG, WebP…): a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| message | Yes | The text to hide (UTF-8). | |
| password | No | Optional password to encrypt the message. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The prose discloses a lot that annotations can't carry: capacity formula, AES-256-GCM / PBKDF2-SHA256 600,000 parameterization, white fill for transparency, and a self-verification read-back. But the annotations declare readOnlyHint=true while the description and the 'output' parameter make clear the tool writes a new PNG file, which is an environment modification – a genuine conflict an agent could stumble on.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then caveats, which is the right order; nearly every sentence carries operational weight (capacity, encryption overhead, recompression risk). The 'https://s3eidat.github.io/stego-image/' URL appears twice and 'Web version' restates the earlier reveal hint, which is wasted 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?
No output schema exists, and the description covers the important return aspects (verified before returning, optionally base64, PNG-only) but never says what the result actually contains (path? size? capacity remaining?). For a 5-parameter mutation-style tool that is a small but real gap; everything else an agent needs to call it correctly 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 coverage is already 100%, but the description adds meaning the schema lacks: the capacity formula tying image dimensions to message size ('width×height×3/8 − 10 bytes', minus 44 when encrypted) and the constraint that the output must be lossless PNG. It doesn't clarify how 'output' folder vs. file paths or returnBase64 interact beyond what the schema says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Hide a text message inside an image') and immediately pins down the mechanism (LSB steganography in R, G, B) and output format (lossless PNG). The pairing with the named sibling crypto_stego_reveal and the website makes it unambiguous which tool does embedding vs. extraction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the concrete alternative for the inverse operation ('reveals ... or with crypto_stego_reveal') and states a hard usage constraint ('Sending it through apps that recompress images (JPEG, chat apps) destroys the message'). It doesn't contrast against crypto_file_encrypt / crypto_text_encrypt, which an agent might reasonably consider for 'hide a message', so the routing guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_stego_revealReveal a hidden messageARead-onlyIdempotent
Read a message hidden in a PNG by the S3eidat Stego Image website or crypto_stego_hide (decrypting it if a password was used). Reports when there is no message, e.g. because the image was recompressed (JPEG), resized or edited. Web version: https://s3eidat.github.io/stego-image/
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | The image with a hidden message (PNG): a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| password | No | Password, if the message is encrypted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context by noting password-based decryption and that no-message conditions are reported for recompressed, resized, or edited images.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, and the remaining sentences add only relevant context: password decryption, failure conditions, and the compatible website. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full schema coverage and annotations covering safety, the description supplies the missing context: compatibility, decryption behavior, and failure modes. No output schema exists, and the description sufficiently implies that the hidden message is returned when present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already well documented in structured data. The description only restates that a password may be used for decryption and does not add syntax or format details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Read) and resource (a message hidden in a PNG), and explicitly ties it to the corresponding hiding tool and website. An agent can distinguish it from crypto_stego_hide and other crypto tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly identifies the intended input class: PNGs produced by the S3eidat Stego Image website or crypto_stego_hide, with password supplied when encryption was used. It also explains common no-message conditions such as recompression, resizing, or editing, though it does not name a fallback tool for those cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_text_decryptDecrypt text (AES-256-GCM)ARead-onlyIdempotent
Decrypt an "S3E1.…" message made by the S3eidat Text Encrypt website or crypto_text_encrypt, with its password. Verifies integrity: a wrong password or any change to the text is reported, never garbage output. Accepts base64url and line breaks. Web version: https://s3eidat.github.io/text-encrypt/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a file containing it (e.g. encrypted.txt). | |
| output | No | Optional: also save the decrypted message to this file. | |
| password | Yes | The password. Normalised to Unicode NFC first, like the website. | |
| encrypted | No | The encrypted text, starting with S3E1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false. The description adds valuable behavioral detail: it verifies integrity and reports wrong passwords or tampering instead of returning garbage, and accepts base64url with line breaks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences front-load the core action, input source, integrity behavior, and input tolerances. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only decrypt tool with no output schema, the description covers the key contract: source format, password requirement, integrity verification, and acceptance of base64url/line breaks. It could mention the returned decrypted string more explicitly, but the error behavior 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?
Schema coverage is 100%, so the schema documents all four parameters. The description still adds meaning for the 'encrypted' parameter by explaining it accepts base64url and line breaks, beyond the schema's note that it starts with S3E1.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Decrypt') and resource ('S3E1.… message'), and names its counterpart crypto_text_encrypt. It also clarifies the source format and website, distinguishing it from crypto_file_decrypt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the input must come from the S3eidat Text Encrypt website or crypto_text_encrypt, and that a password is required. It does not explicitly exclude other tools or explore alternatives, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_text_encryptEncrypt text (AES-256-GCM)ARead-only
Encrypt a message with a password: AES-256-GCM, key from PBKDF2-SHA256 (600,000 rounds, random 16-byte salt, 12-byte IV), output as one "S3E1.…" base64 line. Exactly the website's format, so the result can be decrypted at https://s3eidat.github.io/text-encrypt/ or with crypto_text_decrypt. Each run gives a different output. Web version: https://s3eidat.github.io/text-encrypt/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a UTF-8 text file to encrypt. | |
| text | No | The message to encrypt. | |
| output | No | Optional: also save the encrypted line to this file (website "Save" gives encrypted.txt). | |
| password | Yes | The password. Normalised to Unicode NFC first, like the website. | |
| iterations | No | PBKDF2 rounds (website: 600,000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations with KDF details (PBKDF2-SHA256, 600k rounds, random salt/IV), the 'S3E1…' output format, and the non-determinism note ('Each run gives a different output') which aligns with idempotentHint=false. The only tension is that readOnlyHint=true while the optional output param can write a file — disclosed but arguably inconsistent with the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb and algorithm, and every clause adds real information (rounds, IV, format, interop). The website URL is repeated twice, a minor redundancy that keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers algorithm, key derivation, output format, non-determinism, and how to reverse the operation. With no output schema, the description fully specifies the returned 'S3E1.…' line, so an agent has everything needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each of the 5 params is already documented, and the description adds no syntax or format guidance beyond implying defaults. Baseline 3 is appropriate when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (encrypt a message with a password) and pins down the exact scheme (AES-256-GCM). It clearly distinguishes itself from the file sibling crypto_file_encrypt and names its inverse crypto_text_decrypt, so an agent can route without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the counterpart tool crypto_text_decrypt and the website as the decryption path, and explains the interoperability constraint. It doesn't spell out when to prefer it over crypto_file_encrypt (file vs. inline text), but the intent is clear from the resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
css_clampFluid CSS clamp()ARead-onlyIdempotent
Build a fluid typography/spacing value: CSS clamp() that grows linearly from a size at a small viewport to a size at a large viewport (sizes and viewports in px), expressed in rem or px. Also returns the computed size at sample viewport widths. Web version: https://s3eidat.github.io/css-units/
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | Output unit. Default rem. | rem |
| maxSize | No | Size in px at the large viewport. Default 32. | |
| minSize | No | Size in px at the small viewport. Default 16. | |
| maxViewport | No | Large viewport width in px. Default 1280. | |
| minViewport | No | Small viewport width in px. Default 320. | |
| rootFontSize | No | Root (html) font size in px, for rem. Default 16. | |
| sampleViewports | No | Viewport widths (px) to compute the resulting size at. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world, so safety is covered. The description adds genuinely new behavioral context: the output is a clamp() expression plus computed sizes at sample viewport widths, which matters because there is no output schema. It omits edge-case handling, such as what happens when minSize exceeds maxSize or the viewports are inverted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what is produced and followed by the return-value note. The trailing documentation URL is low-value for an agent that cannot browse and slightly dilutes an otherwise tight definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter, fully-defaulted, read-only generator with no output schema, the description covers the input model and gives a partial but useful account of the return value. A slightly fuller statement of the exact output shape would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter is self-documented with defaults, so the schema does the heavy lifting. The description only restates the units convention ('sizes and viewports in px') and the rem/px output choice, adding little beyond what the properties already declare; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Build') and a precise resource ('fluid typography/spacing value: CSS clamp()') plus the linear-growth model, so an agent knows exactly what comes out. It doesn't name or contrast with the near siblings css_units and css_format, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'typography/spacing value' and the viewport framing, but the description never says when to reach for this instead of css_units or css_format, or what preconditions apply (e.g. min < max, minViewport < maxViewport). The agent must infer the selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
css_formatCSS beautify / minifyARead-onlyIdempotent
Beautify CSS (one declaration per line, one selector per line, blank line between top-level rules, nested @media blocks) or minify it. Strings, url(...) and escapes are kept intact; calc() spacing is preserved. Optional comment removal (/*! … */ kept). Give "text" or a file "path". Web version: https://s3eidat.github.io/html-css-format/
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "beautify" (default) or "minify". | beautify |
| path | No | Or: a path to a CSS file (UTF-8; use this for big inputs). | |
| text | No | The CSS as inline text. | |
| indent | No | Indentation: 2, 4, "tab" (or any number of spaces 0-8). | 2 |
| output | No | Optional: also write the result to this file path (or folder ending in "/"). The result text is then left out of the reply. Results over 1,000,000 characters are always written to a file. | |
| removeComments | No | Drop comments (/*! … */ license comments are kept). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing preservation guarantees (strings, url(...), escapes, calc() spacing), the comment-removal behavior including that /*! ... */ license comments survive, and the 1,000,000-character threshold that forces file output. The one point of tension is that it describes writing results to a file while readOnlyHint=true, though that write is opt-in and does not alter the input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the two modes and their concrete output shapes, then packs behavioral guarantees into a tight clause. Dense but nearly every clause carries information; the trailing web-version URL is the only element that does not help an agent invoke 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?
With six all-optional parameters and no output schema, the description does the needed work: it explains both modes, how input is supplied, and that the result is inlined in the reply unless an output path is given. It omits error behavior for malformed CSS or missing files, which is the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so mode, indent, output, and removeComments semantics are already documented in structured fields; the description mostly mirrors rather than extends them. It does add the useful prompt that either text or path must be supplied, but no new detail on indent or output formatting rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (beautify/minify CSS) and immediately enumerates the concrete beautify output shape (one declaration per line, blank line between top-level rules, nested @media). It is clearly distinguishable from the neighboring css_clamp and css_units tools, which do not reformat source text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives actionable input routing ("Give 'text' or a file 'path'") and implies when to prefer the file path for large inputs, which the schema reinforces. It stops short of explicit exclusions or naming alternatives for cases like HTML or SQL formatting, so it is clear context without full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
css_unitsCSS unit converterARead-onlyIdempotent
Convert a CSS length between px, rem, em, %, pt, pc, in, cm, mm, vw, vh, vmin and vmax, using a root font size, parent font size and viewport size (defaults 16px / 16px / 1440×900). Uses the CSS definition of 96px per inch. Returns every unit, rounded to 4 decimals by default. Web version: https://s3eidat.github.io/css-units/
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | Unit of "value". Default px. | px |
| value | Yes | The length to convert, e.g. 24. | |
| decimals | No | Decimal places to round to. Default 4. | |
| rootFontSize | No | Root (html) font size in px, for rem. Default 16. | |
| viewportWidth | No | Viewport width in px, for vw/vmin/vmax. Default 1440. | |
| parentFontSize | No | Parent element font size in px, for em and %. Default 16. | |
| viewportHeight | No | Viewport height in px, for vh/vmin/vmax. Default 900. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this as a safe, idempotent, closed-world read, so the bar is lower; the description still adds the non-obvious conversion rule (96px per inch), the exact return shape ('returns every unit'), and default rounding to 4 decimals, which an agent cannot infer from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in a single dense sentence, followed by the unit-definition and return-format notes, with no filler; every clause (units, defaults, 96px/inch, rounding, web version) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 params, full schema coverage, and no output schema, the description is complete: it discloses defaults, conversion semantics, and the return behavior ('returns every unit, rounded to 4 decimals'), so an agent needs nothing more to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter's role and constraints; the description restates the default triple (16px/16px/1440×900) and mentions rounding but adds no syntax or edge-case detail the schema lacks, meriting the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description announces a precise verb and resource ('Convert a CSS length') and enumerates all supported units, making the tool unambiguously distinct from siblings like css_clamp (clamp generation) and calc_unit_convert (general-purpose 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?
It provides the contextual defaults (root font 16px, parent font 16px, viewport 1440×900) that implicitly tell an agent when the parameters matter, but it never states when to prefer this over calc_unit_convert or other conversion tools, and no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
csv_to_jsonCSV to JSONARead-onlyIdempotent
Convert CSV/TSV to JSON with an RFC 4180 parser (quoted fields, "" escapes, line breaks inside quotes, CR/LF/CRLF, BOM). Detects the delimiter (comma, semicolon, tab, pipe), uses the first row as headers (blank → column_N, duplicates → name_2), and can type values (numbers, true/false, null; long digit strings like IDs stay strings). Output: array of objects or array of arrays, pretty-printed. Give "text" or a file "path". Web version: https://s3eidat.github.io/csv-json/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a path to a CSV/TSV file (UTF-8; use this for big inputs). | |
| text | No | The CSV as inline text. | |
| shape | No | "objects" (one object per row) or "arrays" (rows as arrays). | objects |
| types | No | Turn numbers, true/false and empty/null into JSON types (default true). | |
| header | No | First row is a header (default true). | |
| output | No | Optional: also write the result to this file path (or folder ending in "/"). The result text is then left out of the reply. Results over 1,000,000 characters are always written to a file. | |
| delimiter | No | Delimiter: "auto" (detect), ",", ";", "tab" or "|". | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/local-only, so the description is not carrying the safety burden. It still adds real behavior detail beyond them: RFC 4180 handling, delimiter detection, header dedup naming (name_2), numeric typing with ID-string preservation, and a 1,000,000-character threshold that silently redirects output to a file. The one gap is that output-file overwrite behavior is only sketched in the schema, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that front-loads the core capability and parsing guarantees, with no filler sentences. It is information-rich but somewhat packed; the web-version URL at the end is mildly extraneous for an agent caller.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, zero-required tool with no output schema, the description covers input sourcing, delimiter/header/typing behavior, and the shape of the returned array. It is nearly complete, with only the file-overwrite/side-effect semantics of the 'output' parameter left to the schema text.
Complex tools with many parameters or behaviors need more documentation. Simple 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, but the description adds meaning the schema doesn't: blank headers become column_N, duplicate headers become name_2, long digit strings stay strings under typing, and 'objects' vs 'arrays' is framed as the output shape. This is genuine added semantics rather than restatement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Convert CSV/TSV to JSON') and immediately scopes the parser behavior, which cleanly separates it from the sibling json_to_csv. An agent can identify the direction of conversion and the supported input formats without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete input-mode guidance ('Give "text" or a file "path"') and notes the file path route is for big inputs. It does not explicitly contrast against json_to_csv or ai_csv_profile, so routing between siblings is left partly to inference, but the intended use context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
curl_to_codecURL to codeARead-onlyIdempotent
Convert a curl command (bash/zsh quoting incl. $'…', line continuations, "Copy as cURL" from browsers) into code for JavaScript fetch, axios, Python requests, PHP cURL, Go net/http or Node.js http/https: every target the website supports. Understands -X, -H, -d/--data-raw/--data-binary/--data-urlencode, --json, -F forms and files, -u, -b, -A, -e, -G, -I, -k, -L, -m, --connect-timeout, -x, -T, --compressed, --oauth2-bearer. Also returns the parsed request (secrets masked unless revealSecrets) and notes on what could not be converted. Only parses text; never sends the request. Web version: https://s3eidat.github.io/curl-convert/
| Name | Required | Description | Default |
|---|---|---|---|
| output | No | Optional: write the code to this file (single language only). | |
| command | Yes | The curl command, e.g. "curl -X POST https://api.example.com -H 'Content-Type: application/json' -d '{"a":1}'". | |
| language | No | Target: fetch (browser/Node fetch), axios, python (requests), php (cURL), go (net/http), node (http/https), or "all". | fetch |
| revealSecrets | No | Show Authorization/Cookie/API-key header values and the basic-auth password in the parsed summary (the code always contains them). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/openWorld=false, and the description is consistent with them, reinforcing that nothing is sent over the network. It adds real behavioral detail beyond annotations: the response includes the parsed request with secrets masked unless revealSecrets, plus 'notes on what could not be converted', so an agent knows partial conversions are possible rather than failing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb, resource, and target list before the dense flag enumeration and the safety note. The long flag sentence is informative but heavy; it could have been trimmed to categories without losing much, though every clause does carry content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: converted code, parsed request with masked secrets, and conversion notes. It does not spell out the response's field layout or what 'all' produces as a payload shape, leaving a small gap for a tool an agent will parse results from.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns an extra point by documenting the curl flag vocabulary the `command` parameter accepts (-X, -H, -d/--data-raw/--data-binary/--data-urlencode, --json, -F, -u, -b, -A, -e, -G, -I, -k, -L, -m, -x, -T, --compressed, --oauth2-bearer), which is meaning the schema's single example does not convey. It also clarifies that 'output' implies a single language only, matching the enum constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Convert a curl command ... into code') and enumerates the exact target languages (fetch, axios, python, php, go, node). No sibling tool in the list does this, so it is trivially distinguishable from formatting/encoding utilities like json_format or url_encode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear triggering context — bash/zsh quoting incl. $'…', line continuations, browser 'Copy as cURL' — and an explicit boundary: 'Only parses text; never sends the request', which steers agents away from ai_web_fetch for execution. It does not name an alternative tool explicitly, so it stops short of a full when/when-not routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_attendance_sheetAttendance sheet PDFARead-onlyIdempotent
Make a printable attendance / sign-in sheet PDF: names down the side, one column per date for a month (skipping chosen weekdays, e.g. Fri+Sat or Sat+Sun), a run of N sessions from a start date, or N blank columns; tick boxes or wide signature cells; row numbers, a total column, extra empty rows, title, group and teacher. Same page maths as the website: rows that don't fit continue on more pages, and too many date columns are split across pages with the same names. Also returns a blank register CSV. English labels, Latin text only for now. Web version: https://s3eidat.github.io/attendance-sheet/
| Name | Required | Description | Default |
|---|---|---|---|
| cell | No | box = tick boxes, sign = wide cells for signatures. | box |
| mode | No | month = every day of a month; sessions = N dates from a start date; blank = N unnamed columns. | month |
| skip | No | Weekdays to skip, 0 = Sunday … 6 = Saturday (default [0, 6] = weekends Sat+Sun; use [5, 6] for Fri+Sat). | |
| count | No | sessions/blank: number of columns. | |
| group | No | Class / group, shown under the title. | |
| month | No | month mode: YYYY-MM (default this month). | |
| names | Yes | Names, one per line (leading "1." numbering and anything after a tab are removed), or a list. | |
| paper | No | A4 | |
| start | No | sessions mode: first date YYYY-MM-DD (default today). | |
| title | No | Title (default "Attendance"). | |
| total | No | Total column. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| numbers | No | Row number column. | |
| teacher | No | Teacher, shown under the title. | |
| extraRows | No | Empty rows after the names. | |
| rowHeight | No | Row height in mm (default 8, or 13 for signature cells). | |
| orientation | No | landscape | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/idempotent annotations by disclosing the pagination behaviour (rows that don't fit continue on more pages, wide column sets split with names repeated), the secondary CSV output, and a real constraint ('English labels, Latin text only for now'). These are exactly the traits an agent cannot infer from 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?
Compact single paragraph that front-loads the core output and then layers on layout, pagination and caveats in order of importance. It is dense and runs long for one sentence-chain, but each clause adds usable information and nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter generator with no output schema, the description covers the output artifacts (PDF plus blank register CSV), pagination, and language limits, which is enough to invoke it correctly. Minor gaps remain around how the `output` path and `returnBase64` behave in practice, though the schema documents those individually.
Complex tools with many parameters or behaviors need more documentation. Simple 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 already 89%, so the baseline is 3, but the description adds cross-parameter meaning the schema cannot: what 'skipping chosen weekdays' means in practice (Fri+Sat vs Sat+Sun), how 'sign' widens cells, and that row numbers/total/extra rows are layout toggles. Combined-effect semantics push it just above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact: 'Make a printable attendance / sign-in sheet PDF', followed by the exact layout produced (names down the side, one column per date). This is clearly distinguishable from the other document siblings (doc_calendar, doc_labels, doc_invoice).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The three generation modes (a month of dates, N sessions from a start date, N blank columns) are laid out in the description, giving an agent a clear picture of when each shape applies. It stops short of naming an alternative tool or an explicit 'use X instead' exclusion, which keeps it at 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_business_cardsBusiness cards PDFARead-onlyIdempotent
Design business cards and get a print-ready PDF sheet: cards centred on A4 or Letter with crop marks (10 per sheet for 85 × 55 mm EU or 3.5 × 2 in US cards), plus a back side page mirrored for long-edge duplex printing. Four front templates (classic, band, centered, minimal), backs with your logo, a "scan to save my contact" vCard QR code, or blank; six colour themes or your own accent/paper/ink colours; optional logo and a vCard QR on the front. Also returns the vCard text. Print at 100% / actual size. Latin text only for now (the website also does an Arabic side). Web version: https://s3eidat.github.io/business-card/
| Name | Required | Description | Default |
|---|---|---|---|
| gap | No | Gap between cards in mm (0 = shared cut lines). | |
| ink | No | Override the text colour. | |
| back | No | Back side: logo/company on the accent colour, a contact QR code, or none. | logo |
| logo | No | Optional logo image: a PNG/JPEG/WebP/GIF/SVG file path or base64. Drawn as-is (keep it small). | |
| name | Yes | Your name. | |
| size | No | eu = 85 × 55 mm, us = 3.5 × 2 in. | eu |
| No | |||
| phone | No | ||
| sheet | No | Paper for the print sheet. | A4 |
| sides | No | Which pages to include (both = front page then mirrored back page). | both |
| theme | No | Colour preset (navy = navy & gold). | teal |
| title | No | Job title. | |
| accent | No | Override the accent colour. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| address | No | ||
| company | No | Company. | |
| qrFront | No | Also put the contact QR code on the front. | |
| tagline | No | Short line for the back. | |
| website | No | ||
| template | No | Front layout. | classic |
| paperColor | No | Override the card background colour. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent and closed-world status, but the description adds real value: the exact sheet layout (10 per sheet, A4/Letter), the mirrored back page for long-edge duplex, and the fact that vCard text is also returned. The Latin-only limitation is a disclosed behavioral constraint. Missing only return-format details like file names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core outcome and packed densely with useful specifics; every clause carries information. Slightly run-on and comma-chained, but no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 22-parameter generator with no output schema, the description covers the output artifact, duplex behavior, print scaling, content limitations and the vCard return value. The output-path default lives in the schema rather than the description, 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 82%, so the schema already carries most parameter meaning. The description enumerates the same option families (four templates, back variants, six themes, QR on front) without adding syntax or defaults beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: design business cards and produce a print-ready PDF sheet. Names concrete output artifacts (crop marks, mirrored duplex back page, vCard text) that make it unmistakable next to doc_labels, doc_resume or doc_invoice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives practical usage context (print at 100% / actual size, Latin text only for now, web version link for the Arabic case) and an implicit constraint on scope. It doesn't explicitly name a sibling tool or state when NOT to use it, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_calendarCalendar PDFARead-onlyIdempotent
Make a printable calendar PDF: a month grid (one page per month, several months in a row if you like) or a whole year on one page, A4 or Letter, landscape or portrait. Week starts on Saturday (default, like the website), Sunday or Monday; optional Hijri (Umm al-Qura) dates; events (one-off or yearly, 7 colours) shown in the day cells, or as coloured days plus a legend in the year view; optional title. English names by default; other Latin-script locales (fr, de, es, tr…) use their own month/day names. Web version: https://s3eidat.github.io/calendar-maker/
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | month = month grid pages, year = 12 months on one page. | month |
| year | No | Year (default: this year). | |
| hijri | No | Show Hijri (Umm al-Qura) dates. | |
| month | No | Month 1-12 (month view; default: this month). | |
| paper | No | A4 | |
| title | No | Optional title above the month name, e.g. "Family calendar". | |
| events | No | Events to show. | |
| locale | No | Language for month/day names (default en). Latin-script locales only. | en |
| months | No | Month view: how many consecutive months (one page each). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| weekStart | No | First day of the week: 6 = Saturday (default), 0 = Sunday, 1 = Monday. | |
| orientation | No | landscape | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral detail beyond that: default Saturday week start, optional Umm al-Qura Hijri dates, event rendering in cells or as colored days with a legend, and Latin-script-only locale support.
Agents need to know what a tool does to the world before calling 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 feature-dense, with little wasted text. It is a single long, semicolon-heavy paragraph rather than a structured list, which makes it slightly harder to scan but not 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 13-parameter generator with no output schema, the description covers the main option space well: paper size, orientation, month/year views, week start, locales, events, and output behavior. Minor gaps remain, such as overwrite behavior and error handling, but annotations already carry the safety and idempotency signals.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high at 85%, so the schema already carries most parameter meaning. The description reinforces important options like view, week start, events, locale, and Hijri dates, but mostly at the same level as the schema rather than adding new syntax or 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?
The description opens with a specific verb and artifact: "Make a printable calendar PDF." It then immediately distinguishes the two output shapes, month grid versus whole-year single page, so an agent can tell what the tool produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the intended use clear through feature context such as printable calendars, week starts, Hijri dates, and event display. However, it does not explicitly say when to choose this tool over related document or calculation siblings, nor does it state any when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_invoiceInvoice PDFARead-onlyIdempotent
Make a clean A4 invoice PDF: your business (logo, name, address, email, phone, tax ID), client, invoice number and dates, line items with quantity, unit price, per-line discount % and tax %, subtotal, discount, tax per rate and total, notes, payment terms, and an optional PAID stamp. Same maths as the website: every line is rounded to the currency's minor unit (2 decimals, 3 for JOD/KWD/BHD/OMR/TND…, 0 for JPY…) with half-up rounding; amounts formatted en-US style ($1,234.50, JOD 10.124). Long item lists continue on more pages. Returns the PDF path and the computed totals. Latin text only for now. Web version: https://s3eidat.github.io/invoice-maker/
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | The client (bill to): name, email, address. | |
| due | No | Due date, YYYY-MM-DD (optional). | |
| date | No | Issue date, YYYY-MM-DD (default today). | |
| from | No | Your business: name, email, phone, address, taxId. | |
| logo | No | Optional logo image: a PNG/JPEG/WebP/GIF/SVG file path or base64. Drawn as-is (keep it small). | |
| paid | No | Mark as paid (shows "Amount paid" and a PAID stamp). | |
| items | Yes | Line items: desc, qty, price, disc %, tax %. | |
| notes | No | Notes shown at the bottom. | |
| terms | No | Payment terms shown at the bottom. | |
| accent | No | Accent colour (hex). | #0e9f9a |
| number | No | Invoice number. | INV-0001 |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| currency | No | Currency code. | USD |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations by disclosing the rounding contract (half-up to the currency's minor unit, with named 3-decimal and 0-decimal currencies), formatting style, multi-page continuation for long item lists, Latin-only limitation, and the return payload (PDF path plus computed totals). It also implicitly discloses a filesystem write via the output parameter, which sits in mild tension with readOnlyHint but is conventional for a document generator that only creates a new artifact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the artifact, then the high-value details (math, pagination, Latin-only, return value). The long parenthetical field inventory is largely redundant with a fully-described schema and is the one clause that does not fully earn its space, but the rest is dense and useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, nested-object tool with no output schema, the description covers what the agent must know before calling: what gets rendered, how money is computed and formatted, that long lists paginate, the Latin-only restriction, and what comes back (path + totals). No output schema is needed given that return description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description earns an extra point by explaining computation semantics the schema does not — discount applied before tax, per-line rounding to the currency minor unit, en-US formatting with examples (JOD 10.124). It does not clarify logo path-vs-base64 handling or the 300-item ceiling, which remain schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact ("Make a clean A4 invoice PDF") and then enumerates exactly what the document contains — issuer block, client, invoice number/dates, line items, totals, notes, terms, PAID stamp. That level of specificity makes it unmistakable against siblings like doc_receipt or ai_markdown_to_pdf without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the field list and the closing "Latin text only for now" and web-version link hint at scope, but there is no explicit when-to-use/when-not-to-use statement and no named alternative (e.g. doc_receipt for receipts, ai_markdown_to_pdf for arbitrary PDFs). The web link is a reference, not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_labelsLabel sheets PDFARead-onlyIdempotent
Print address or product labels on standard sticker sheets as PDF: A4 21/24/14/40/65-up (L7160, L7159, L7163, L7654, L7651 sizes) or Letter 30/10/80-up (5160, 5163, 5167 sizes), or custom geometry in mm. Text modes: "list" (one label per block, blank line between labels), "csv" (rows filled into a template like "{Name}\n{Street}\n{City} {Postcode}", header row or {1},{2}…), or "same" (one text × count). Copies per label, start at a later position to reuse a part-used sheet, alignment, font, size, bold first line, border, shrink-to-fit and printer offset nudges. Print at 100% / actual size. Up to 3000 labels. Latin text only for now. Web version: https://s3eidat.github.io/label-maker/
| Name | Required | Description | Default |
|---|---|---|---|
| fit | No | Shrink text (in 0.5 pt steps, min 5 pt) until it fits the label. | |
| bold | No | Bold first line (e.g. the name). | |
| font | No | sans | |
| mode | No | list = blocks separated by a blank line; csv = rows + template; same = one text repeated. | list |
| path | No | Or: a text/CSV file path to read it from. | |
| text | No | The labels text (list blocks, CSV/TSV, or the single text). | |
| align | No | center | |
| count | No | same: how many labels. | |
| border | No | Draw a thin rounded border around each label. | |
| copies | No | list/csv: copies of each label. | |
| custom | No | preset "custom": paper, cols, rows, w, h, top, left, gx, gy (mm). | |
| header | No | csv: the first row holds column names. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| preset | No | Sheet: a4-21 (63.5×38.1), a4-24 (63.5×33.9), a4-14 (99.1×38.1), a4-40 (45.7×25.4), a4-65 (38.1×21.2), lt-30 (2⅝×1 in), lt-10 (4×2 in), lt-80 (1¾×½ in), or custom. | a4-21 |
| valign | No | middle | |
| offsetX | No | Printer nudge right (mm, negative = left). | |
| offsetY | No | Printer nudge down (mm, negative = up). | |
| padding | No | Inner padding in mm. | |
| startAt | No | Start at this label position on the first sheet (skips used labels). | |
| fontSize | No | Font size in pt (default 11). | |
| template | No | csv: template with {Column name} or {1}-style placeholders (empty = all columns, one per line). | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, so the bar is lower, and the description still adds real behavioral context: hard cap of 3000 labels, Latin text only, shrink-to-fit stepping down to 5 pt, printer offset nudges in mm, and the practical instruction to print at 100% / actual size. It omits what the call actually produces (a written PDF file and its path) and any note about multi-sheet output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most decision-relevant information (what it prints, mode semantics, limits) is front-loaded, and there is no filler. It is a single dense run-on paragraph with slash-and-parenthesis packing, which is efficient but slightly harder to scan than a short bulleted form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 22-parameter, zero-required-parameter generator with no output schema, the description covers geometry, text input modes, typography, and limits well. The remaining gap is the return contract: it never states that the result is a PDF file path (or base64 when returnBase64 is set), which the agent needs to chain further processing steps.
Complex tools with many parameters or behaviors need more documentation. Simple 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 already 86%, so the baseline is 3; the description nonetheless adds value beyond the schema by mapping presets to real stationery codes (L7160, L7159, L7163, L7654, L7651, 5160/5163/5167) and giving a concrete template example "{Name}\n{Street}\n{City} {Postcode}". It does not clarify interplay between "count" (same mode) and "copies" (list/csv), which is the one genuinely ambiguous pair.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("Print address or product labels on standard sticker sheets as PDF") and then enumerates the exact sheet families and modes, so an agent knows precisely what artifact it gets. No sibling tool in the list produces label sheets, and the tool name/title are fully substantiated rather than restated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is expressed at the mode level: "list" (one label per block, blank line between), "csv" (rows into a template, header or {1} style), "same" (one text × count), plus a note to start at a later position to reuse a part-used sheet. What is missing is an explicit statement of when not to use it (e.g. vs. doc_business_cards or doc_invoice) or prerequisites such as the Latin-only constraint being called out as a blocker rather than a footnote.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_receiptReceipt PDFARead-onlyIdempotent
Make a simple sales receipt as PDF: an 80 mm thermal-roll receipt (page height fits the content, monospace) or an A5 page. Shop header (name, address, phone, tax number), receipt number with prefix, date/time, customer, items (name × qty × price), discount (% or fixed amount), tax % after discount, total, payment method, amount paid and change, note and footer. Same maths as the website: amounts rounded half-up to 0, 2 or 3 decimals. Also returns the totals and a 32-column plain-text version. English labels, Latin text only for now. Web version: https://s3eidat.github.io/receipt-maker/
| Name | Required | Description | Default |
|---|---|---|---|
| no | No | Receipt number. | |
| pay | No | Payment method. | cash |
| tax | No | Tax rate % applied after the discount. | |
| disc | No | Discount: a percentage, or an amount when discType is "amt". | |
| note | No | Note line above the footer. | |
| paid | No | Amount the customer paid (shows change). | |
| shop | No | Shop details: name, address, phone, taxId, currency, decimals, prefix, footer. | |
| when | No | Date and time, YYYY-MM-DDTHH:MM (default now). | |
| items | Yes | Items: name, qty, price. | |
| format | No | thermal = 80 mm roll (default), a5 = A5 page. | thermal |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| customer | No | Customer name or table (optional). | |
| discType | No | pct = percent of subtotal (default), amt = fixed amount. | pct |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that amounts are rounded half-up to 0/2/3 decimals, that tax is applied after discount, and that the call also returns totals plus a 32-column plain-text version — useful behavioral detail. It leaves the disk-write side effect only in the schema, which sits in mild tension with readOnlyHint=true, but the description itself does not assert read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that front-loads what is produced and then lists the rendered fields, with no filler beyond the marketing-style URL. It is long but every clause maps to an actual capability 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?
For a 14-parameter, nested-object tool with no output schema, the description covers layout, content, rounding rules, returned text version and a character-set limitation. Only the file-writing/path behavior and error cases are left entirely to the schema, which is 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 already 100%, so the baseline is 3; the description goes further by explaining the computation order (discount as % or fixed, then tax, then total/paid/change) and the role of prefix, currency and decimals in the rendered output. That adds meaning beyond the per-field schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact ('Make a simple sales receipt as PDF') and enumerates the two layouts (80 mm thermal roll vs A5) plus the exact content fields. An agent can tell this is a receipt generator, not a generic PDF tool, though it never names the nearest sibling (doc_invoice) to contrast with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the content list and the 'English labels, Latin text only for now' limitation; there is no explicit when-to-use, when-not-to-use, or pointer to doc_invoice for invoices. The website reference hints at the expected use case but does not route between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doc_resumeResume / CV PDFARead-onlyIdempotent
Turn structured CV fields into a clean A4 resume PDF: contact header, summary, experience, education, skills, projects and languages, in any section order, with three templates like the website: "classic" (centred header and accent rule), "modern" (coloured sidebar with contact, skills and languages) and "compact" (denser, headings in a left column). Description lines starting with "-", "•", "*" or "–" become bullet points; skills are comma-separated. Aims for one page; longer CVs continue on a second page. English headings, Latin text only for now. Web version: https://s3eidat.github.io/resume-builder/
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | Section order; missing sections are appended in the default order. | |
| accent | No | Accent colour (hex). | #0e7c86 |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| skills | No | Skills: comma-separated text or a list. | |
| contact | No | ||
| summary | No | Two or three lines about you. | |
| projects | No | ||
| template | No | classic | |
| education | No | ||
| languages | No | ||
| experience | No | ||
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and closed-world, so the safety profile is covered. The description still adds real behavior: the bullet-detection rule for leading '-', '•', '*', '–', comma-separated skills, the one-page target with overflow to a second page, and English/Latin-only constraints. It does not describe the returned result object or write-failure 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?
A single dense paragraph that front-loads the core purpose before detailing templates and formatting rules. Most sentences carry information, though the trailing web link and the 'Latin text only for now' aside could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter tool with nested objects and no output schema, the description covers purpose, template semantics, section ordering, and text formatting rules well. It falls slightly short on where the PDF ends up and on the base64 return option, which the schema mentions only briefly.
Complex tools with many parameters or behaviors need more documentation. Simple 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 around 50%, and the description usefully fills the biggest gaps: it names the three templates and describes what each one looks like visually, which the bare enum in the schema does not, and it explains the bullet convention for description lines and the comma-separated skills form. Remaining parameters such as accent, returnBase64, and output are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: turning structured CV fields into an A4 resume PDF, and enumerates the sections it renders. This clearly separates it from generic conversion siblings like ai_markdown_to_pdf or ai_create_pptx, since the input is a structured CV, not markdown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The framing implies usage (structured CV fields in, resume PDF out), but there is no explicit when-to-use or when-not statement, and no named alternative for the generic 'I have markdown, make a PDF' case. The web-version link is reference material, not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitignore_generateGenerate .gitignoreARead-onlyIdempotent
Build a .gitignore by combining the website's templates for languages, frameworks, mobile, game engines, tools, OSes and editors (node, python, java, android, ios, flutter, reactnative, unity, unreal, go, rust, cpp, dotnet, php, wordpress, rails, django, nextjs, vite, docker, terraform, macos, windows, linux, vscode, jetbrains, vim). Templates can be named by id, name or keyword (e.g. "javascript" → node). Duplicate patterns are removed, optional "### Name ###" section headers, plus your own custom lines at the end. Returns the text, or writes it to "output" (e.g. "./.gitignore"). Set "list" to see all templates. Web version: https://s3eidat.github.io/gitignore-gen/
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | Just list the available templates (id, name, group, keywords). | |
| custom | No | Extra lines to append in a "Custom" section. | |
| dedupe | No | Drop patterns that already appeared in an earlier section. Default true. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| headers | No | Add a generated-by header, section headers and template comments. Default true. | |
| templates | No | Templates to combine, in order, e.g. ["node", "nextjs", "vscode", "macos"]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses genuinely useful behavior beyond the schema: duplicate pattern removal, optional "### Name ###" headers, custom lines appended in a "Custom" section, and either returning text or writing a file. However, "writes it to 'output' (e.g. './.gitignore')" describes a filesystem write while annotations declare readOnlyHint=true, which is an inconsistency by MCP semantics. The disclosure itself is rich, so this is a contradiction flag rather than an empty description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then the template catalog, then behavior caveats. The long parenthetical id list is bulky but functional for keyword matching; it's a single dense paragraph rather than a run-on without structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six optional parameters, no required ones, and no output schema, the description still covers return mode, write mode, listing mode, dedupe, headers, and custom lines. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning on top: templates accept id, name, or keyword ("javascript" → node) and are applied in order, and "output" may be a file path or a folder ending in "/". These aliasing and path-resolution rules are 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?
States a concrete verb and artifact ("Build a .gitignore") and immediately enumerates the template groups and the concrete template ids it supports. An agent knows exactly what this produces and that it covers node/nextjs/vscode/macos-style templates, with no overlapping sibling in the tool 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?
Gives clear operating modes: pass "templates" to combine, set "list" to enumerate available templates, set "output" to write instead of returning text. It does not state exclusions or prerequisites (e.g. whether an unknown template name errors), but there is no comparable sibling to route against, so the missing piece is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hash_computeHash (MD5 / SHA)ARead-onlyIdempotent
Compute MD5, SHA-1, SHA-256 and SHA-512 of text or a file (path or base64), optionally an HMAC with a key, and check against an expected checksum (hex in any case/spacing, "SHA256 (file) = …" lines, or base64). Web version: https://s3eidat.github.io/hash-lab/
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Or: a file to hash: local path or base64. | |
| text | No | Text to hash (UTF-8). | |
| format | No | Output encoding. | hex |
| hmacKey | No | If set, also compute HMAC with this key. | |
| expected | No | A checksum to compare against; the result says which algorithm matched. | |
| hmacAlgorithm | No | SHA-256 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and a closed-world scope, so the safety profile is covered. The description adds genuinely useful context about which checksum formats are accepted (hex in any case/spacing, 'SHA256 (file) = …' lines, base64) and that the tool reports which algorithm matched. It says nothing, however, about how the hash results themselves are returned (one per algorithm? a list? keyed by name?), which is meaningful for a compute tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence front-loads the algorithms and input modes, followed by a short reference URL. It is efficient with no filler, though the one long sentence packs four distinct capabilities together rather than separating them for scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 zero required parameters, six optional inputs, and no output schema, the description covers inputs well but leaves the response shape undocumented — the agent cannot tell whether it receives a single object keyed by algorithm or one field per algorithm, nor what a checksum mismatch returns. Adequate to invoke correctly, incomplete for interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple 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 83%, giving a baseline of 3, but the description adds real value: the schema exposes no algorithm selector, so the description is the only place stating that MD5/SHA-1/SHA-256/SHA-512 are all computed, and it clarifies 'path or base64' disjunction for the file parameter plus the checksum-format tolerance for `expected`. Minor mismatch: `hmacAlgorithm`'s SHA-384 enum value is never mentioned in the prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Compute MD5, SHA-1, SHA-256 and SHA-512') plus the three input modes (text, file path, base64) and the optional HMAC and checksum-verification behaviors in one pass. An agent can distinguish it from crypto_file_encrypt, base64_encode, or ai_file_identify without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'text or a file (path or base64)' phrasing tells the agent which input mode to pick, and 'optionally an HMAC with a key' plus 'check against an expected checksum' signal when the extra behaviors apply. It stops short of naming an alternative tool or an explicit when-not-to-use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
html_formatHTML beautify / minifyARead-onlyIdempotent
Beautify (indent block elements, keep inline runs on one line) or minify HTML with a forgiving tokenizer: implied end tags (, , …), void elements, and , , , contents kept byte-for-byte. Whitespace between attributes is normalised; attribute values are never changed. Optional comment removal (IE conditional comments kept). Text only: nothing is rendered or run. Give "text" or a file "path". Web version: https://s3eidat.github.io/html-css-format/
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "beautify" (default) or "minify". | beautify |
| path | No | Or: a path to a HTML file (UTF-8; use this for big inputs). | |
| text | No | The HTML as inline text. | |
| indent | No | Indentation: 2, 4, "tab" (or any number of spaces 0-8). | 2 |
| output | No | Optional: also write the result to this file path (or folder ending in "/"). The result text is then left out of the reply. Results over 1,000,000 characters are always written to a file. | |
| removeComments | No | Drop comments (IE conditional comments are kept). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the readOnly/idempotent annotations: forgiving tokenizer with implied end tags, void elements, byte-for-byte preservation of script/style/pre/textarea, attribute whitespace normalisation but values untouched, and comment removal that keeps IE conditional comments. It also explicitly states nothing is rendered or executed, which is exactly the context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the two modes, then the tokenizer guarantees, then input sourcing. It is dense and semicolon-heavy but nearly every clause carries behavioural information; the trailing GitHub URL is the only non-essential element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries return-value burden and does so partly: it explains when the formatted text is returned versus written to a file and the 1M-character threshold. Error cases and the exact reply shape when no output path is supplied are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple 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, but the description adds real meaning: text vs path as alternative input sources, the IE-conditional exception to removeComments, and the output behaviour where the result is omitted from the reply and oversized results are always written to file.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (beautify/minify) and resource (HTML) and immediately scopes the transformation rules. The HTML resource is unambiguous against formatting siblings like css_format, xml_format, json_format, and it is clearly not ai_html_to_markdown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete invocation guidance: supply either inline "text" or a file "path", and the schema notes path is better for big inputs. It explains mode selection and optional output-to-file behaviour, but never names an alternative tool or a when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
http_statusHTTP status codesARead-onlyIdempotent
Look up HTTP status codes: by exact code (e.g. 418, also non-standard ones like 499 or 524), by code prefix ("50"), or by words ("too many", "redirect post"), optionally limited to a class (1xx–5xx). Each result has the name, what it means, when to use it, common causes and the defining spec. Non-standard nginx/Cloudflare codes are only searched when "includeNonStandard" is set. Web version: https://s3eidat.github.io/http-status/
| Name | Required | Description | Default |
|---|---|---|---|
| class | No | Only this class: 1 informational, 2 success, 3 redirection, 4 client error, 5 server error. | |
| limit | No | Max results to return. Default 20. | |
| query | No | A code ("404"), code prefix ("5", "50") or search words. Empty = all codes (filtered by class). | |
| includeNonStandard | No | Also search non-standard codes (nginx 499, Cloudflare 52x…). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds useful behavioral detail: result fields, the fact that non-standard nginx/Cloudflare codes require includeNonStandard, and a web reference. It does not describe error behavior, but that is a minor gap for a simple lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is compact and front-loaded: main lookup modes first, then return shape, then non-standard caveat. The web-version URL is not essential for invocation, which slightly reduces conciseness, but the description remains 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?
With no output schema, the description fully compensates by stating what each result contains (name, meaning, when to use, causes, spec). Combined with complete schema coverage and annotations covering safety, an agent has everything needed to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters well. The description adds practical examples for the query parameter (418, 499, 524, "50", "too many", "redirect post") that clarify accepted input forms beyond the schema wording.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: looking up HTTP status codes. It immediately distinguishes search modes (exact code, prefix, words, class filter) and non-standard code handling, so an agent can tell exactly what this tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains the available query strategies and how class filtering and non-standard inclusion work. It does not name explicit alternatives or when-not-to-use cases, but there is no obvious sibling tool for this purpose, so the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
id_generateGenerate IDs (UUID / ULID / NanoID)ARead-only
Generate 1–1000 unique IDs with a cryptographic RNG: UUID v4 (random), UUID v7 (time-ordered, RFC 9562, strictly increasing within a batch), ULID (26 Crockford Base32 chars, monotonic) or NanoID (custom length 2–128 and alphabet: URL-safe default, alphanumeric, hex, digits, no look-alikes, or your own). Options: uppercase, no dashes. Web version: https://s3eidat.github.io/uuid-forge/
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Which ID type. | v4 |
| count | No | How many IDs (1–1000). | |
| length | No | NanoID length (2–128). 21 URL-safe chars ≈ UUID v4 collision safety. | |
| alphabet | No | NanoID alphabet: a preset ("A-Za-z0-9_-", "A-Za-z0-9", "0-9a-f", "0-9", "nolook") or your own characters (2–256 distinct; duplicates ignored). | A-Za-z0-9_- |
| noDashes | No | UUIDs only: drop the dashes (32 hex chars). | |
| uppercase | No | Upper-case output (UUID hex digits, ULID letters). Default false = lower case, like the website. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly true, openWorld false, idempotent false; the description adds substantive behavior beyond them: cryptographic RNG source, v7 strictly increasing within a batch, ULID monotonicity and Crockford Base32 encoding, NanoID length 2–128 and alphabet presets, and that duplicate alphabet characters are ignored. This is precisely the context an agent needs to trust and configure the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and ID kinds, then options, then a link. It is dense but nearly every clause carries information; the main weakness is that the first sentence is a single run-on string of technical details rather than separated clauses, which slightly hurts scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description never states the response shape — whether IDs are returned as an array, newline-joined string, or object with metadata. For a generator whose count ranges to 1000, the return format is a meaningful omission even though generation behavior itself is well covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning for parameter selection by explaining what each kind actually is (v7 time-ordered and RFC 9562, ULID monotonic, NanoID custom length/alphabet) rather than merely restating 'Which ID type'. It also confirms uppercase/noDashes semantics in line with the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Generate), resource (IDs), and enumerates the exact variants produced (UUID v4, UUID v7, ULID, NanoID) with distinguishing properties. An agent can tell this apart from siblings like password_generate or hash_compute from the name and description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the content (identifier generation for UUID/ULID/NanoID), but the description never states when to prefer this over adjacent tools such as password_generate, hash_compute, or id_inspect. It also does not mention prerequisites or exclusions, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
id_inspectInspect a UUID / ULIDARead-onlyIdempotent
Check whether a string is a valid UUID (any version; braces, urn:uuid: and missing dashes accepted) or ULID, and report its version, variant and canonical form. For UUID v1, v6, v7 and ULID also returns the embedded creation time. Web version: https://s3eidat.github.io/uuid-forge/
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The UUID or ULID to inspect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and closed-world, so the safety profile is covered; the description adds genuine context on accepted input tolerance (braces, urn:uuid:, missing dashes) and which versions carry embedded timestamps. It stops short of saying what the output looks like for an invalid string (error vs. a valid=false flag), which is the one behavior an agent still has to guess.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences front-load the core purpose and the accepted-format caveat. The trailing marketing URL for the web version does not help an agent decide or invoke, so it is mildly extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so reasonably, naming the reported fields and the conditional timestamp behavior. The main shortfall is the unspecified invalid-input response, which leaves an agent without a full picture of outcomes.
Complex tools with many parameters or behaviors need more documentation. 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 is fully documented in the schema, so baseline is 3, but the description adds real meaning beyond it by specifying which input format variants the 'id' value may take. That extra disambiguation is directly useful for constructing a valid call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource pair ('Check whether a string is a valid UUID ... or ULID') and enumerates what is reported: version, variant, canonical form, and embedded creation time. This is clearly distinguishable from the generation sibling id_generate, since the tool only inspects an existing string.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrasing ('check whether a string is valid'), but there is no explicit when-to-use statement, no exclusion, and no named alternative such as id_generate for producing new identifiers. The agent must infer the boundary from the tool name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_ascii_artImage to ASCII artARead-onlyIdempotent
Turn an image into ASCII art: each character cell takes the average brightness of its area (cells are twice as tall as wide) and maps it onto a character ramp: standard " .:-=+*#%@", detailed (70 characters), blocks " ░▒▓█", simple, binary, or your own. Contrast, brightness and invert (for light text on dark backgrounds). Returns the text; format "png" also renders it to an image (optionally in the image's colours). Transparent areas count as white paper. Web version: https://s3eidat.github.io/ascii-art/
| Name | Required | Description | Default |
|---|---|---|---|
| ramp | No | Character set, light → dark. Default standard. | standard |
| color | No | PNG only: colour each character with the image colour. | |
| image | Yes | The image: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| format | No | text (default) or png (also writes <name>-ascii.png). | text |
| invert | No | For light text on a dark background. Default false. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| columns | No | Characters per line. Default 100. | |
| contrast | No | -100 … 100. Default 0. | |
| brightness | No | -100 … 100. Default 0. | |
| customRamp | No | Characters for ramp "custom", from no ink to most ink (at least 2). | .oO0@ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only/idempotent/local, and the description still adds real behavioral detail: output is returned as text, `format: png` additionally writes `<name>-ascii.png`, `output` defaults to the server temp folder, and transparent pixels are treated as white. One caveat worth noting: the file writes described are technically a side effect for a tool annotated readOnlyHint=true, though this is artifact generation rather than data mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core transformation, then ramps, then output behavior — a sensible order. It is dense but every sentence carries information; the trailing web-version URL is the only element that does not help an agent invoke 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?
For a 10-parameter tool with no output schema, the description covers the transformation, ramp options, image-adjustment knobs, and what is returned vs written to disk. The main remaining gap is disambiguation from `image_ascii_banner` and from generic `image_convert`.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description earns more by naming the actual character ramps (" .:-=+*#%@", the 70-char detailed set, " ░▒▓█") and explaining the aspect-ratio convention behind `columns`. It also clarifies that `customRamp` backs the "custom" enum value, tying two parameters together in a way the schema does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ("Turn an image into ASCII art") and explains the sampling method (average brightness per cell, cells 2:1 taller than wide), which no sibling schema would reveal. It is clear what the tool produces. It does not, however, distinguish itself from the closely named sibling `image_ascii_banner` or from `image_convert`, leaving the agent to guess which to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description — you use it to render an image as text or a PNG — and there is useful inline guidance like "invert (for light text on dark backgrounds)". But there is no explicit when-to-use/when-not, and no mention of the near-identical `image_ascii_banner` sibling that an agent would need to disambiguate against.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_ascii_bannerText to ASCII bannerARead-onlyIdempotent
Big banner letters from text, using the website's own bitmap fonts: block (█ 5×7), char (any fill character, e.g. #), shadow (█ with ░ shade), compact (half-block 5×7), small (█ 3×5), tiny (half-block 3×5). Letters A-Z, digits and common punctuation (unknown characters show as "?"); one banner per input line. Returns the text; format "png" also renders it to banner.png. Web version: https://s3eidat.github.io/ascii-art/
| Name | Required | Description | Default |
|---|---|---|---|
| fill | No | Fill character(s) for style "char". Default "#". | # |
| text | Yes | Text to render (case-insensitive). New lines make separate banners. | |
| style | No | Letter style. Default block. | block |
| theme | No | PNG colours: dark (teal on near-black, default) or light. | dark |
| format | No | text (default) or png (also writes banner.png). | text |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavior the annotations do not: supported glyph set, that unknown characters render as '?', that each input line becomes a separate banner, that output is plain text by default, and that format 'png' additionally writes banner.png. Worth noting the description openly states a file-write side effect for png, which sits in tension with readOnlyHint=true, but the write is disclosed rather than hidden and targets the server output folder.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and the style parentheticals each carry distinct information. It is dense and slightly run-on, and the trailing web-version URL is the weakest element, but no sentence is pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 params, full schema coverage and no output schema, the description does enough: it covers the glyph repertoire, style appearance, line-to-banner mapping, and the text-vs-png return distinction. It stops short of showing what the returned text looks like or where banner.png lands when 'output' is omitted, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description earns above baseline by explaining what each style enum value looks like (block █ 5×7, shadow █ with ░, compact half-block 5×7, small 3×5, tiny half-block 3×5) and what 'char' fill means — visual semantics the schema does not convey. Theme and output path semantics are left entirely to 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?
Opening clause 'Big banner letters from text' gives a specific verb and resource, and 'using the website's own bitmap fonts' pins down the mechanism. A reader can tell this generates decorative text banners rather than processing an image, though the sibling image_ascii_art (image → ASCII) is never named, so the differentiation stays implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: styles, charset and line handling suggest 'use me to turn short text into banner art'. There is no explicit when-to-use/when-not, no mention of the closest alternative (image_ascii_art, which takes an image instead of text), and no guidance on input length or case assumptions beyond the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_compressCompress imageARead-onlyIdempotent
Make an image file smaller: re-encode at a quality (default 80) and optionally cap the longest side (maxSide), as JPEG, WebP, AVIF or PNG ("keep" = same format; GIF/BMP/TIFF become PNG). Or give targetBytes to find the highest quality that fits that size. With keepSmaller (default on) the original is kept when re-encoding would not make it smaller. Reports before/after sizes and % saved. Transparent areas become white in JPEG. Metadata (EXIF, GPS) is not copied. PNG is lossless (quality ignored). Web version: https://s3eidat.github.io/image-squeeze/
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | The image: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| format | No | Output format. Default keep (same as the input). | keep |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| maxSide | No | Scale down so the longest side is at most this many pixels (e.g. 1920). | |
| quality | No | Quality 1-100 for JPEG / WebP / AVIF. Default 80 (website default). | |
| keepSmaller | No | Keep the original bytes when the result would be larger (same format and size only). Default true. | |
| targetBytes | No | Aim for a file of at most this many bytes: searches the highest quality that fits (lossy formats only; overrides quality). | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, but the description says the tool writes a result to an output file path or folder and reports before/after sizes. Writing an output file is an environment modification, which contradicts the read-only annotation; despite otherwise rich behavioral detail, this forces a score of 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded and the description is dense with useful information. The trailing web URL is extra, and the single block is harder to scan than structured bullets, so it earns a 4 rather than a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eight-parameter tool with no output schema, the description covers modes, defaults, format edge cases, metadata handling, transparency behavior, and the result summary. This is complete enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds useful cross-parameter semantics: targetBytes overrides quality, PNG ignores quality, keepSmaller preserves the original, JPEG transparency becomes white, and metadata is not copied. It still omits some parameter behavior, such as returnBase64 details, so it is not 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 states a specific action and resource: re-encode an image to make the file smaller, with quality, dimension, and target-size modes. It is clear, but it does not explicitly differentiate itself from sibling tools such as image_resize or image_convert.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage contexts: reduce file size, optionally cap the longest side, or target a byte budget. It does not explicitly state when not to use it or direct the agent to image_resize/image_convert alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_convertConvert image formatARead-onlyIdempotent
Convert an image to PNG, JPEG, WebP, AVIF, GIF or TIFF. Reads JPEG, PNG, WebP, AVIF/HEIF, GIF (first frame), TIFF, SVG, BMP and ICO. Transparent areas are filled with background when writing JPEG (or always with flatten). EXIF rotation is applied. SVGs are rasterised at their own size (width/height or viewBox; 1024×1024 if neither), scripts never run. Images larger than 16384 px a side or 100 MP are scaled down to fit. Web version: https://s3eidat.github.io/image-convert/
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | The image: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| format | No | Output format. Default png (as on the website). | png |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| flatten | No | Fill transparency with the background for every format, not only JPEG. | |
| quality | No | Quality 1-100 for JPEG / WebP / AVIF (ignored for PNG). Default 92, same as the website. | |
| background | No | Colour used for transparent areas when writing JPEG or when flatten is on. Default #ffffff. | #ffffff |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations covering the safety profile, the description still adds substantial behavior: transparency handling (background for JPEG, or always with flatten), EXIF rotation applied, SVG rasterisation sizing rules and the fact that scripts never run, plus hard scaling limits at 16384 px/side and 100 MP. These are non-obvious side effects an agent could not infer from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary action, then proceeds in tight clauses covering inputs, edge cases and limits — nearly every sentence carries actionable information. The trailing web-version URL is the one element that does not help an agent call 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?
For a 7-parameter mutation of files with no output schema, the description covers input handling, edge cases, safety limits and the SVG path thoroughly. The remaining gap is what the result contains (written path vs. base64 payload), which is only inferable from the `returnBase64` schema entry.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning by explaining the interaction between parameters: transparency is filled with `background` only for JPEG unless `flatten` is on, which is not stated in either parameter's own text. It also ties the SVG output size rule to the input rather than to a 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 opening sentence states a specific verb and resource and enumerates every supported output format (PNG, JPEG, WebP, AVIF, GIF, TIFF), so an agent knows exactly what the tool does. It does not differentiate from the overlapping sibling image_svg_to_png, which also produces a raster from an SVG — the one gap keeping it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: convert an image when a different output format is needed, with input formats listed so an agent can judge applicability. But there is no explicit when-to-use/when-not statement and no named alternative (e.g. image_svg_to_png, image_compress, image_resize) to route between similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_cropCrop imageARead-onlyIdempotent
Crop an image to a pixel box (x, y, width, height) or to an aspect ratio (1:1, 4:5, 3:2, 16:9, 9:16, "W:H" or a number), taking the largest centred region (or aligned to an edge with position). Boxes are kept inside the image. Output JPEG/PNG/WebP/AVIF, name -x.. Web version: https://s3eidat.github.io/image-resize/
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Left edge of the crop box (pixels). Use with y, width, height. | |
| y | No | Top edge of the crop box (pixels). | |
| image | Yes | The image: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| ratio | No | Aspect ratio as "W:H" (e.g. "1:1", "4:5", "3:2", "16:9", "9:16"), a number (width/height), "orig" or "free". | |
| width | No | Width of the crop box (pixels). | |
| format | No | Output format. "keep" = same as the input when it is JPEG/PNG/WebP (else PNG). Default keep. | keep |
| height | No | Height of the crop box (pixels). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| quality | No | Quality 1-100 for JPEG / WebP / AVIF (ignored for PNG). Default 90, same as the website. | |
| position | No | Where the ratio crop sits. Default center (the website default). | center |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/openWorld=false, so the safety profile is covered. The description adds genuinely useful behavior: boxes are clamped inside the image, the largest centered region is taken by default, edge alignment via position, and the default output folder. It doesn't state the return shape, but the naming convention hints at it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: the two modes come first, then alignment, clamping, formats and naming. The trailing web URL is marginal but harmless. Every sentence carries operational information without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with no output schema, the description covers both modes, alignment, clamping, format/quality, and output naming/location well enough to call correctly. It lacks an explicit statement of the result payload (e.g., returned path/dimensions), leaving a minor gap, but the naming pattern compensates substantially.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This 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 fully documented. The description restates the ratio and box semantics but adds little beyond the schema (e.g., no extra detail on returnBase64 limits or output folder resolution beyond what the schema says). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (crop) and resource (image) with the two supported modes spelled out (pixel box vs aspect ratio), plus output formats and naming. This clearly distinguishes it from siblings like image_resize and image_convert, whose purpose is scaling/converting rather than region extraction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly explains the two usage modes and how they map to parameters (x/y/width/height for boxes, ratio for aspect, position for alignment). It does not explicitly name alternatives or state when-not to use it (e.g., use image_resize to scale instead), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_exif_readRead photo metadata (EXIF)ARead-onlyIdempotent
Show the hidden metadata in a photo: camera make/model, lens, date taken, exposure, ISO, software, author/copyright, serial numbers, comments, PNG text chunks, and GPS coordinates (where the photo was taken). Lists every metadata block (EXIF, XMP, ICC, IPTC, embedded previews) with its size and flags privacy-sensitive fields. JPEG and PNG fully; WebP/AVIF/HEIC/TIFF EXIF via sharp. Web version: https://s3eidat.github.io/exif-cleaner/
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | The photo: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint/idempotent/local scope, but the description adds meaningful behavior beyond them: it flags privacy-sensitive fields, reports every metadata block with size, and discloses uneven format coverage (full for JPEG/PNG, EXIF-only via sharp for other formats). It stops short of describing the return structure or behavior when a photo has no metadata, which matters because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence is front-loaded and the field enumeration earns its space by telling the agent what will be returned. The sentence is long and list-heavy, and the trailing web-version URL is of marginal use to an agent, 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?
For a one-parameter read-only tool with no output schema, the description covers inputs, output contents, format limitations, and privacy flagging well. What is missing is only edge behavior (no-metadata photos, error shapes), which is a minor gap rather than a blocker.
Complex tools with many parameters or behaviors need more documentation. 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 is a single parameter with 100% schema description coverage that already explains local path vs base64/data URI input. The description adds nothing about parameter formatting, which is acceptable given the schema does that job; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Show the hidden metadata in a photo') and then enumerates exactly what metadata it surfaces (camera make/model, lens, exposure, GPS, PNG text chunks, block listing). This is clearly a read/extraction tool and is distinguishable from the sibling image_exif_strip, which removes rather than reads metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied clearly enough (inspect photo metadata), and the format-support sentence ('JPEG and PNG fully; WebP/AVIF/HEIC/TIFF EXIF via sharp') helps an agent decide applicability. However, there is no explicit when-to-use/when-not guidance and no routing to the obvious alternative, image_exif_strip, so the agent must infer the boundary itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_exif_stripRemove photo metadata (EXIF)ARead-onlyIdempotent
Remove EXIF, GPS location, XMP, IPTC, comments, PNG text chunks and embedded previews from a photo before sharing it. JPEG and PNG are cleaned losslessly (image data copied byte for byte, like the website); by default the rotation is kept as a tiny orientation-only EXIF and the ICC colour profile is kept. applyOrientation re-encodes JPEGs with the rotation baked into the pixels. WebP/AVIF/HEIC/TIFF are re-encoded without metadata. Output name -clean.. Web version: https://s3eidat.github.io/exif-cleaner/
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | The photo: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| keepIcc | No | Keep the ICC colour profile (no personal data; keeps colours right). Default true. | |
| quality | No | JPEG/WebP/AVIF quality when re-encoding is needed. Default 92. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. | |
| keepOrientation | No | Keep only the Orientation tag so the photo still shows the right way up. Default true. | |
| applyOrientation | No | Instead of keeping the Orientation tag, rotate the pixels (re-encodes JPEG at `quality`; PNG is unaffected). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is behaviorally rich — lossless byte-for-byte copying for JPEG/PNG, default retention of an orientation-only EXIF and the ICC profile, applyOrientation forcing a re-encode, and the generated '-clean' filename. However, it describes writing a new file to a path, which conflicts with the readOnlyHint=true annotation implying no environment modification; an agent trusting the annotation could be surprised by output files landing on disk.
Agents need to know what a tool does to the 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 what gets stripped and how, then defaults, then the re-encode caveat — a sensible ordering with no filler sentences. The trailing website URL is the one element that does not directly help an agent invoke the tool, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still covers the return artifact (output file named <name>-clean.<ext>) and the returnBase64 path, plus the per-format processing model. It omits what the result payload reports (e.g., which tags were removed or byte savings) and error behavior for unsupported inputs, which are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is already documented, and the baseline is 3. The description adds modest value by tying keepOrientation, keepIcc and applyOrientation to the defaults it applies ('by default the rotation is kept... the ICC colour profile is kept'), but says nothing about the `output` or `image` parameters and does not clarify when `quality` takes effect beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb plus an exhaustive resource list ('Remove EXIF, GPS location, XMP, IPTC, comments, PNG text chunks and embedded previews from a photo'), which is far more specific than the title. The natural contrast with the sibling image_exif_read ('remove' vs. 'read') is obvious from the verb, and the per-format handling further pins down what the tool actually 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?
'...before sharing it' supplies a clear motivating context, and the format notes implicitly tell the agent when lossless cleaning applies (JPEG/PNG) versus re-encoding (WebP/AVIF/HEIC/TIFF). It never explicitly says when not to use it or names image_exif_read as the alternative when the agent only wants to inspect metadata, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_favicon_setFavicon set generatorBRead-onlyIdempotent
Make a complete favicon set from a letter/emoji/short text or from an image: favicon.ico (16, 32, 48 px), favicon-16x16.png, favicon-32x32.png, apple-touch-icon.png (180, square, solid), android-chrome-192x192.png and -512x512.png, site.webmanifest and head-snippet.html with the tags. Rounded square with background colour (or transparent), corner radius and padding in %. Writes everything into one folder. Web version: https://s3eidat.github.io/favicon-forge/
| Name | Required | Description | Default |
|---|---|---|---|
| fit | No | How an image fills the padded square. Default contain. | contain |
| name | No | App name for site.webmanifest. Default "My Website". | My Website |
| text | No | Letter(s) or emoji drawn on the icon (when no image is given). Default "S". | S |
| color | No | Text colour. Default #ffffff. | #ffffff |
| image | No | Use this image (logo) instead of text: a local path or base64. Square, 512 px+ works best. | |
| output | No | Folder to write the files into. Default: a new "favicons" folder in the output folder. | |
| radius | No | Corner radius in % of the size (50 = circle). Default 22. | |
| weight | No | Font weight for text. Default 900. | 900 |
| padding | No | Padding around the text/image in %. Default 14. | |
| shortName | No | Short name for site.webmanifest. Default "Site". | Site |
| background | No | Background colour. Default #0e7c86. | #0e7c86 |
| transparent | No | Transparent background (the Apple icon still gets white). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does disclose real behavior beyond the schema — everything is written into a single folder, and is otherwise additive — which is valuable given there is no output schema. However, it explicitly says the tool 'Writes everything into one folder' while annotations declare readOnlyHint=true, so an agent trusting the annotation would not expect any filesystem change; the description also never says whether an existing folder is overwritten.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and output inventory are front-loaded in the first sentence, and the styling modifiers and output-folder behavior follow compactly. The long inline file list is justified by the absence of an output schema; only the 'Web version' URL is dead weight 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?
With 12 all-optional parameters, no output schema and no annotations carrying behavioral detail, the description does the heavy lifting: it enumerates every produced file and the folder target, which is exactly what an agent needs to act. Remaining gaps are overwrite semantics and whether the tool fails or merges when the output folder already 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% with defaults and enum values documented for all 12 parameters, so the baseline is 3. The description's only added semantic is the two operating modes (text/emoji vs image input) and the styling formula of rounded square, background colour, radius and padding, which is only marginally more than the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Make a complete favicon set' — and enumerates the exact artifacts (favicon.ico at 16/32/48, apple-touch-icon, android-chrome 192/512, site.webmanifest, head snippet). That makes it unmistakable against neighbours like image_resize, image_placeholder or meta_tags_generate, though it never names a sibling or draws the boundary (e.g. that meta_tags_generate produces other head tags).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Use is implied by the artifact list rather than stated: an agent infers 'call this when a site needs favicons', but there is no explicit when-to-use, no when-not-to-use, and no pointer to alternatives such as image_placeholder for dummy icons or meta_tags_generate for the rest of the head. The trailing web-version URL is informational, not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_from_base64Base64 / data URI to image fileBRead-onlyIdempotent
Decode Base64 back into a file: accepts a data URI, a CSS url("data:…") rule, an tag, URL-encoded SVG data URIs, or raw Base64 (standard or URL-safe, line breaks allowed). Detects the real type from the bytes, warns when it differs from the declared one, and writes decoded.. Give the text inline or as a path to a text file. Web version: https://s3eidat.github.io/image-to-base64/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a text file containing it. | |
| text | No | The data URI / CSS / <img> tag / raw Base64. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly says it writes decoded.<ext>, detects the real type from bytes, and warns on mismatch, but annotations declare readOnlyHint=true. A tool that writes a file cannot be read-only, so the description directly contradicts the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and key input/behavior details are front-loaded and the description is reasonably sized. The web-version URL is extraneous for agent invocation and the first sentence is dense, 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?
It explains accepted inputs, type detection, warning behavior, and output filename, which is enough to invoke the tool. It still omits overwrite/collision behavior and return/error details for a file-writing tool, and its write behavior conflicts with the read-only annotation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents path, text, and output including the default output folder. The description adds accepted text-format examples and the inline-vs-path distinction but no additional semantics for output beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: decode Base64/data URI back into a file, with accepted input variants and output filename. It is clearly distinguishable from image_to_base64 (reverse) and generic base64_decode by producing an image file and detecting the real type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage by listing accepted forms (data URI, CSS url(), <img> tag, URL-encoded SVG, raw Base64) and saying text can be inline or a file path. However, it never names alternatives such as base64_decode or image_to_base64, nor states when not to use this tool, so guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_paletteColour palette from imageARead-onlyIdempotent
Extract the main colours of an image with their share of the picture: k-means (default, deterministic) or median cut, 1-16 colours, sorted by share. Transparent pixels are ignored. Returns hex + rgb + % per colour, CSS custom properties (:root { --color-1 … }) or JSON, and optionally writes the website's swatch strip as palette.png. Same algorithm and sampling as the website, so the colours match. Web version: https://s3eidat.github.io/palette-from-image/
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of colours. Default 6. | |
| image | Yes | The image: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| format | No | Export text format. Default css. | css |
| method | No | kmeans (default) or median (median cut). | kmeans |
| output | No | Where to write palette.png (file path or folder ending in "/"). Implies swatchPng. | |
| swatchPng | No | Also write palette.png (160×200 swatch per colour with its hex code). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond annotations: transparent pixels are ignored, sampling matches the website so results are reproducible, and output/swatchPng cause a palette.png to be written. That last point is worth flagging as mild tension with readOnlyHint=true, since the tool can create a file, but the description discloses the side effect rather than hiding it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and scope, then tacks on output/format detail. It is dense but every clause carries information; only the website URL is arguably expendable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully covers return values (hex + rgb + % per colour, CSS :root custom properties, JSON) and the optional PNG artifact, which is exactly what an agent needs to interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description only reinforces what the schema already says (1-16 range, default kmeans, output implies swatchPng) without adding new semantics such as path resolution rules or format precedence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Extract the main colours of an image') plus quantitative scope (1-16 colours, share of picture). Easily distinguished from neighbouring image tools such as image_diff, image_ascii_art, or image_resize, which do not analyse colour.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the two algorithmic options with the default called out (kmeans default/deterministic, median cut alternative) and explains what swatchPng/output add. It gives clear selection context but no explicit 'when not to use' or exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_placeholderPlaceholder imageARead-onlyIdempotent
Make a placeholder image of any size (up to 8000 px a side): solid background with centred text (default "W × H", "\n" for line breaks), auto-fitted font size or a fixed one, PNG / JPEG / WebP / SVG. Size presets for web, social media, IAB ads and devices. Optionally returns a data URI / tag for inlining. Text uses Inter when installed, else a system sans-serif. Web version: https://s3eidat.github.io/placeholder-image/
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Text to show. Empty = "W × H". Use "\n" (backslash n) or a real newline for a line break. | |
| color | No | Text colour (#rgb or #rrggbb). Default #9ca3af. | #9ca3af |
| width | No | Width in pixels. Default 1200. | |
| format | No | Output format. Default png. | png |
| height | No | Height in pixels. Default 630. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| preset | No | Size preset (overrides width/height): open-graph-link-preview 1200×630, hero-16-9-full-hd 1920×1080, hd-16-9 1280×720, blog-image-4-3 800×600, thumbnail-3-2 600×400, avatar 256×256, instagram-square 1080×1080, instagram-portrait-4-5 1080×1350, story-reel-9-16 1080×1920, x-twitter-header 1500×500, linkedin-banner 1584×396, youtube-thumbnail 1280×720, medium-rectangle 300×250, leaderboard 728×90, wide-skyscraper 160×600, mobile-banner 320×50, half-page 300×600, billboard 970×250, iphone-15-screen 1179×2556, desktop-1440 1440×900, 4k-uhd 3840×2160. | |
| dataUri | No | Also return the image as a data URI and an <img> tag (for small images). | |
| fontSize | No | Font size in px; 0 = auto-fit (default). | |
| background | No | Background colour (#rgb or #rrggbb). Default #1f2937. | #1f2937 |
| fontWeight | No | Font weight. Default 600. | 600 |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and closed-world, so the safety profile is covered. The description adds genuinely useful behaviour beyond that: default text is 'W × H', '\n' breaks lines, font size auto-fits unless fixed, and text renders in Inter when installed else a system sans-serif. It omits the file-writing side effect and where the result lands, which is the main residual gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph, front-loaded with the core action, then capabilities, then caveats. Most clauses earn their place; the trailing link to the project website is marginally useful context rather than noise, though it slightly dilutes the operational content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, all-optional generator with no output schema, the description covers what is produced (image file, optionally data URI/base64/<img>), the format and size envelope, and rendering defaults. The one thing an agent still can't infer is the concrete return shape/path when only a file is written, which would matter for chaining calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 12 parameters is already documented in the schema, making 3 the baseline. The description echoes a subset (default text, newline syntax, formats, auto-fit font, data URI for small images) but adds no syntax or constraint detail the schema doesn't already carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource — 'Make a placeholder image of any size' — and enumerates the salient capabilities (solid background, centred text, auto-fit font, four output formats, size presets). An agent can immediately distinguish this from neighbours like image_resize, image_convert, or image_ascii_banner, which all transform existing images rather than synthesise one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context — 'Size presets for web, social media, IAB ads and devices' and 'for inlining' for the data URI option — which tells the agent when this tool fits. It stops short of naming alternatives or stating when not to use it (e.g. vs image_resize for editing an existing asset), so it falls just below the explicit-alternatives bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_resizeResize imageARead-onlyIdempotent
Resize an image by pixels or percent, keeping the aspect ratio. Give width or height (the other side follows), or both: fit "cover" (default, as on the website) centre-crops to that ratio first so nothing is stretched, "contain" fits inside the box, "fill" stretches. Optional crop ratio (1:1, 4:5, 3:2, 16:9, 9:16, orig) or crop box before resizing, social-media presets, output JPEG/PNG/WebP/AVIF. Up to 16384 px a side. Output name: -x.. Web version: https://s3eidat.github.io/image-resize/
| Name | Required | Description | Default |
|---|---|---|---|
| fit | No | When both width and height are set: cover (crop to fill, default), contain (fit inside), fill (stretch). | cover |
| crop | No | Crop box (x, y, width, height in pixels) applied before resizing; overrides ratio. | |
| image | Yes | The image: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| ratio | No | Aspect ratio as "W:H" (e.g. "1:1", "4:5", "3:2", "16:9", "9:16"), a number (width/height), "orig" or "free". | |
| width | No | Target width in pixels. | |
| format | No | Output format. "keep" = same as the input when it is JPEG/PNG/WebP (else PNG). Default keep. | keep |
| height | No | Target height in pixels. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| preset | No | Exact output size preset: instagram-post 1080×1080, instagram-portrait 1080×1350, story 1080×1920, youtube-thumbnail 1280×720, x-header 1500×500, facebook-cover 851×315, linkedin-banner 1584×396, full-hd 1920×1080, passport-35x45 413×531, us-passport-2x2 600×600. | |
| percent | No | Scale by percent instead (e.g. 50 halves both sides, 200 doubles). | |
| quality | No | Quality 1-100 for JPEG / WebP / AVIF (ignored for PNG). Default 90, same as the website. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the 16384 px per-side cap, the output naming convention <name>-<W>x<H>.<ext>, the format default behavior, and the ordering fact that a crop is applied before resizing and overrides ratio. The only tension is that it describes writing output files while annotations claim readOnlyHint=true; this reads as a pure-transform-plus-new-file pattern rather than a true contradiction, but it is worth noting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core verb and aspect-ratio rule lead, followed by progressively optional features (fit, crop, presets, format, size cap, naming), which is a sensible information hierarchy. The middle fit/crop clause is dense and slightly run-on, costing a bit of scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter tool with a nested crop object and no output schema, the description covers behavior, limits, and the naming of the written file, which is what an agent needs to call it. It stops short of saying what the tool returns (path vs. metadata) and whether the result is ever returned inline except via returnBase64.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all twelve parameters are already self-documented; the description mainly restates them. It does add relational meaning the schema lacks — width/height interdependence, crop-before-resize precedence, and fit's 'nothing is stretched' rationale — but presets are only listed, not mapped to sizes, and output/returnBase64 semantics are left to 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 opening sentence is a specific verb+resource statement ('Resize an image by pixels or percent, keeping the aspect ratio') and the rest enumerates the exact levers (fit modes, crop ratio/box, presets, formats). It does not name sibling tools, so an agent must infer on its own why image_resize rather than image_crop or image_convert.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage of the parameters is well explained ('Give width or height (the other side follows), or both'), and the fit modes are given concrete semantics. However, there is no when-to-use/when-not guidance relative to the sibling image tools (image_crop, image_convert, image_compress), and no stated prerequisites about input image accessibility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_rotateRotate / flip imageARead-onlyIdempotent
Rotate an image clockwise by 90, 180, 270 or any angle (the canvas grows to fit; new corners get background), and/or flip it horizontally (mirror) or vertically. Flips apply after the rotation, as seen on screen. EXIF orientation is applied first (autoOrient, default on), so with angle 0 this simply "fixes" sideways phone photos. Output JPEG/PNG/WebP/AVIF ("keep" = same as input), name -rotated.. Web version: https://s3eidat.github.io/photo-filters/
| Name | Required | Description | Default |
|---|---|---|---|
| angle | No | Clockwise rotation in degrees (negative = counter-clockwise). Default 90. | |
| image | Yes | The image: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| format | No | Output format. Default keep (JPEG/PNG/WebP stay, others become PNG). | keep |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| quality | No | Quality 1-100 for JPEG / WebP / AVIF (ignored for PNG). Default 92, same as the website. | |
| autoOrient | No | Apply the EXIF Orientation tag first (what browsers show). Default true. | |
| background | No | Fill for the corners uncovered by a non-right-angle rotation. Default transparent (white in JPEG). | #00000000 |
| flipVertical | No | Mirror top-bottom (after rotating). | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. | |
| flipHorizontal | No | Mirror left-right (after rotating). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true, but the description describes writing an output file: 'Where to write the result' and naming it '<name>-rotated.<ext>'. That is a filesystem mutation and contradicts the read-only annotation, so the score is 1 despite otherwise detailed behavioral context about canvas growth, flip order, and EXIF handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one front-loaded paragraph with no repetition and is appropriately dense for a 10-parameter image tool. The website link is marginal for an agent, but the rest is efficient and well ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers operation semantics, ordering of EXIF/flip/rotate, output formats, output naming, and background behavior. With no output schema, it still leaves the exact return object structure unstated, but for a file-producing image tool it is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds useful meaning beyond the schema: the flip applies after rotation as seen on screen, EXIF orientation is applied first, non-right-angle rotations grow the canvas, and uncovered corners use the background fill. It does not discuss quality or returnBase64, but the schema already covers those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: rotate and/or flip an image. It also captures the full operation scope, including arbitrary angles, horizontal/vertical flips, EXIF orientation handling, and output formats, so an agent can distinguish it from image_resize, image_crop, and pdf_rotate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context, including that angle 0 fixes sideways phone photos via EXIF auto-orientation, that flips apply after rotation, and that 'keep' preserves the input format. It does not explicitly say when not to use this tool or name a sibling alternative, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_svg_to_pngSVG to PNGARead-onlyIdempotent
Rasterise an SVG to a crisp PNG: scale (1×, 2×, 3×, 4×… default 2×), a target width or height (aspect kept), or an exact size (stretched). Units (px, pt, mm, cm, in) and viewBox-only SVGs are understood; transparent background or a solid colour. Scripts, event handlers and external references are removed first. Name @2x.png. Web version: https://s3eidat.github.io/svg-to-png/
| Name | Required | Description | Default |
|---|---|---|---|
| svg | No | The SVG: a local path or base64 / data URI. | |
| mode | No | How to size the PNG. Default scale. | scale |
| scale | No | Scale factor for mode "scale". Default 2. | |
| width | No | Width in px for modes width / exact. | |
| height | No | Height in px for modes height / exact. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| svgText | No | Or: the SVG code itself. | |
| background | No | Background colour when transparent is false. Default #ffffff. | #ffffff |
| transparent | No | Keep the background transparent. Default true. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotent, but the description adds real behavioral value: scripts, event handlers and external references are stripped before rasterising, and the default output lands in a server temp folder unless --out-dir is set. The naming convention (<name>@2x.png) is also disclosed. It doesn't cover failure modes or size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that front-loads the core action and sizing modes before edge details (sanitization, naming, web link). Every clause carries information, though it is packed tightly rather than scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with no output schema, the description covers the mode semantics, units, background handling, sanitization and output naming, which is most of what an agent needs. The base64 return option and output path are left to the schema, which is 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%, so the baseline would be 3, but the description adds genuine meaning the schema lacks: 'width or height (aspect kept)' versus 'exact size (stretched)' clarifies the semantic difference between modes, and it lists supported units (px, pt, mm, cm, in). This goes beyond restating 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?
Opens with a specific verb and resource: 'Rasterise an SVG to a crisp PNG.' The sizing modes (scale, width/height, exact) further pin down what the tool produces, which separates it from generic siblings like image_convert or image_resize. It never names a sibling explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool fits by enumerating the sizing strategies and unit handling, and points to a web version. But it never states when NOT to use it or which sibling (e.g. image_convert) to prefer for non-SVG input. Usage is inferred rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_to_base64Image to Base64 / data URIARead-onlyIdempotent
Encode an image (or any file) as Base64: a data URI, bare Base64, a CSS background-image rule, an HTML tag (with width/height), Markdown, or for SVG a URL-encoded data URI (usually ~30% smaller). Detects the type from the bytes and warns when the result is too big to inline (over 10 KB: slows pages; over 1 MB: use a normal file). Results longer than maxChars are written to a .txt file instead of being returned. Web version: https://s3eidat.github.io/image-to-base64/
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | What to return: dataUri (default), base64, css, html, markdown, or svgUri (SVG only). | dataUri |
| image | Yes | The image: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| maxChars | No | Longest text returned inline; longer results go to a file. Default 200000. | |
| mimeType | No | Override the detected MIME type (e.g. image/svg+xml). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses real behavior: byte-level type detection, size-based warnings with thresholds, and the fact that over-maxChars results are written to a .txt file rather than returned. That file-spillover behavior is the kind of non-obvious trait an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded with the core action and output modes first, size warnings next, file-spillover and web link last. Nearly every clause carries information, though it is on the longer side.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still covers return behavior (inline vs written file), type detection, and size limits, which is everything an agent needs to invoke it correctly. Annotations already cover the read-only safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning: the SVG URI option is ~30% smaller, HTML output can carry width/height, and the maxChars-to-file behavior is restated. It enriches the enum semantics 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?
States a specific verb (encode) plus resource (image/any file) and enumerates the concrete output forms (data URI, base64, CSS, HTML img, Markdown, SVG URI). This clearly separates it from the pure reverse tool image_from_base64 and the generic text base64_encode, though it never names a sibling 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?
Gives usable context: it detects type from bytes and flags when results are too large to inline (10 KB warning, 1 MB cutoff). It does not explicitly say when to prefer base64_encode for plain text or image_from_base64 for the reverse, so there is no explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_watermarkWatermark imageARead-onlyIdempotent
Add a text or logo watermark to a photo. Size is a % of the photo width, margin a % of the shorter side, so the result looks the same on any resolution. One of 9 positions or tiled across the whole image (brick pattern), with opacity, rotation, colour, weight and a soft shadow for text. Logo: any image (PNG with transparency works best). Output keeps the input format (JPEG/PNG/WebP) or as chosen; name -watermarked.. Text uses the Inter font when installed, else a system sans-serif. Web version: https://s3eidat.github.io/watermark/
| Name | Required | Description | Default |
|---|---|---|---|
| logo | No | Use this image as the watermark instead of text: a local path or base64. | |
| size | No | Watermark width as % of the photo width. Default 28. | |
| text | No | Watermark text (ignored when a logo is given). Default "© Your Name". | © Your Name |
| color | No | Text colour. Default #ffffff. | #ffffff |
| image | Yes | The photo: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| tiled | No | Repeat the watermark across the whole photo. | |
| format | No | Output format. Default keep. | keep |
| margin | No | Margin from the edge in % of the shorter side; spacing between tiles when tiled. Default 4. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| shadow | No | Soft drop shadow behind text. Default true. | |
| weight | No | Font weight. Default 700. | 700 |
| opacity | No | Opacity in %. Default 60. | |
| quality | No | Quality 1-100 for JPEG / WebP / AVIF (ignored for PNG). Default 92, same as the website. | |
| position | No | Where the watermark sits (ignored when tiled). Default bottom-right. | bottom-right |
| rotation | No | Rotation in degrees (e.g. -30 for a diagonal tile). Default 0. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint) the description discloses concrete outcomes: output filename pattern <name>-watermarked.<ext>, format preservation, the default temp output folder, and that returnBase64 is only suitable for small files. The font fallback (Inter, else system sans-serif) also warns of rendering variability. It stops short of stating error behavior or size limits, and there is mild tension with readOnlyHint since the tool does write a new file to disk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and every subsequent sentence carries actionable detail. It is somewhat dense and run-on, and the trailing web-version URL is of marginal value to an agent, but nothing is genuinely padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter, no-output-schema tool, the description covers what an agent needs: how the watermark is sized, the two modes, output naming/format/location, and the small-file caveat on base64 returns. No significant calling decision is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline is 3; the description still adds real meaning by explaining the resolution-independent rationale (size as % of photo width, margin as % of the shorter side) and noting margin doubles as tile spacing and rotation examples like "-30 for a diagonal tile." It also clarifies that text is ignored when a logo is supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: "Add a text or logo watermark to a photo." It immediately distinguishes the two modes (text vs. logo) and the output behavior, so an agent can tell it apart from siblings like pdf_watermark or image_convert without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the logo-vs-text choice ("Logo: any image (PNG with transparency works best)") and when output format is retained, which implies usage. However, it never says when to pick this tool over alternatives such as pdf_watermark or image_convert, nor does it state prerequisites or exclusions; usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ip_in_rangeIs this IP in that range?BRead-onlyIdempotent
Check whether an IPv4 or IPv6 address falls inside a range given as CIDR ("10.0.0.0/8", "2001:db8::/32"), a dash range ("192.168.1.10 - 192.168.1.60") or a single address. Web version: https://s3eidat.github.io/subnet-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | The address to test. | |
| range | Yes | CIDR, "start - end" range, or single address (same family as "ip"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description usefully enumerates the accepted range syntaxes, but says nothing about failure behavior for malformed input or mismatched families, nor what the result looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core behavior and format examples. The trailing web-version URL is of little use to an agent and is the only wasted element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should say what is returned (presumably a boolean match) and how mismatched families or invalid ranges are handled. Neither is covered, leaving the result contract unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already lists CIDR, dash range and single address; the description's examples mirror that with concrete literals. It adds a little concreteness but no semantics the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: check whether an IPv4/IPv6 address falls inside a range, with concrete example formats. The operation is clearly distinct from most siblings, though the related subnet_calc is never referenced.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose statement, but there is no explicit guidance on when to pick this over subnet_calc or how to handle a range in a different family than the address. No when-not conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
json_formatJSON format / minify / validateARead-onlyIdempotent
Validate, pretty-print (2 or 4 spaces, tab) or minify JSON, optionally sorting object keys (deeply). Invalid JSON gives a clear error with line and column and the lines around it. Also returns size, key count, depth and value count. Give "text" or a file "path"; "output" writes the result to a file. Uses the standard JSON parser (no comments or trailing commas). Web version: https://s3eidat.github.io/json-studio/
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "format" pretty-prints, "minify" removes all whitespace, "validate" only checks (never throws on bad JSON). | format |
| path | No | Or: a path to a JSON file (UTF-8; use this for big inputs). | |
| text | No | The JSON as inline text. | |
| indent | No | Indentation: 2, 4, "tab" (or any number of spaces 0-8). | 2 |
| output | No | Optional: also write the result to this file path (or folder ending in "/"). The result text is then left out of the reply. Results over 1,000,000 characters are always written to a file. | |
| sortKeys | No | Sort object keys alphabetically at every level. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says the optional "output" parameter writes the result to a file, and that results over 1,000,000 characters are always written to a file. This directly contradicts the readOnlyHint=true annotation, which declares the tool does not modify its environment. Per the rubric, a contradiction with annotations scores 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core verbs and remains efficiently structured. The closing web-version URL is not essential for tool selection or invocation, so it is slightly less than perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter tool with no output schema, the description covers the main modes, input methods, output-file behavior, validation error detail, returned metrics, and parser constraints. An agent has enough information to call it correctly, aside from the annotation inconsistency noted separately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented in the input schema. The description reinforces input selection via text/path and file output, but adds no parameter semantics 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 states specific verbs and resource: validate, pretty-print, minify JSON, with optional deep key sorting. This clearly distinguishes the formatter/minifier/syntax-validator role from conversion or query siblings, even without 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?
It gives clear context for use: pick text or path as input, and output to write results to a file. It also notes the parser limitation around comments and trailing commas. It does not explicitly compare against alternatives such as ai_json_schema_validate or json_query, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
json_queryJSON query (JSONPath)ARead-onlyIdempotent
Pick values out of JSON with a JSONPath expression. Supported: $ (root, optional), .key, ['key'], [0], [-1], [], ., ..key (recursive), [start:end:step] slices, unions [0,2] / ['a','b'], and filters like [?(@.price < 10 && @.tags)] (==, !=, <, <=, >, >=, =~ /regex/i, &&, ||, !, .length). Returns each match with its path (the same path style the website's tree view copies, e.g. $.store.book[0].title). Give "text" or a file "path". Web version: https://s3eidat.github.io/json-studio/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a path to a JSON file (UTF-8; use this for big inputs). | |
| text | No | The JSON as inline text. | |
| limit | No | Return at most this many matches (default 1000). | |
| query | Yes | JSONPath expression, e.g. "$.store.book[*].author" or "$..book[?(@.price < 10)].title". | |
| output | No | Optional: write the matched values as a JSON array to this file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false. The description adds real value beyond that: it discloses the return format (each match with its path, matching the website tree style), the output-path write option, and regex/flag support – context an agent needs to interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by a compact but dense syntax reference. The embedded URL is a minor distraction, but the content is largely earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description explains the return shape (values with paths) and the optional file-write behavior, covering what an agent needs. The website URL and minor edge cases (e.g., malformed query errors) are the only small 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, but the description goes further by elaborating JSONPath syntax (slices, unions, filters, operators, .length) that the schema only hints at with examples. It meaningfully reduces query-authoring ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('pick values out of') and resource ('JSON with a JSONPath expression'), immediately distinguishing it from siblings like json_format or xml_query. An agent can identify its role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It notes you may give inline "text" or a file "path" (with a nudge toward path for big inputs), which is useful usage context. However, it never states when to choose this over sibling query/format tools or any exclusions, so routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
json_to_csvJSON to CSVARead-onlyIdempotent
Convert JSON to CSV. An array of objects becomes one row per object with nested objects/arrays flattened to dotted columns (address.city, tags.0); an array of arrays is written as-is. Fields are quoted only when needed (delimiter, quotes, line breaks, leading/trailing spaces); CRLF line ends. A formula guard (on by default) prefixes cells starting with = + - @ so spreadsheets don't run them. Give "text" or a file "path". Web version: https://s3eidat.github.io/csv-json/
| Name | Required | Description | Default |
|---|---|---|---|
| bom | No | Start with a UTF-8 BOM so Excel reads non-English text correctly. | |
| path | No | Or: a path to a JSON file (UTF-8; use this for big inputs). | |
| safe | No | Formula guard: prefix cells like =SUM(A1) with ' (default true). | |
| text | No | The JSON (array or object) as inline text. | |
| header | No | Include a header row (default true). | |
| output | No | Optional: also write the result to this file path (or folder ending in "/"). The result text is then left out of the reply. Results over 1,000,000 characters are always written to a file. | |
| delimiter | No | Delimiter: "auto" (comma), ",", ";", "tab" or "|". | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses important behavior: nested objects/arrays are flattened to dotted columns, arrays of arrays are written as-is, quoting is minimal, line endings are CRLF, and the formula guard is on by default. That is strong behavioral context for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and dense with useful conversion details, with no redundant restatement of the name. The trailing web-version URL is not necessary for tool selection or invocation, so it is slightly less than maximally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter converter with no output schema, the description covers input interpretation, nesting behavior, quoting, line endings, and safety behavior well. It does not explicitly describe the return value shape, but the schema and the conversion statement make the output context sufficiently clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter thoroughly. The description adds some contextual meaning around 'text' versus 'path' and the formula guard, but most parameter-level detail remains in the schema, matching 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 states a specific verb and resource -- converting JSON to CSV -- and immediately explains concrete conversion semantics for arrays of objects, nested flattening, arrays of arrays, quoting, line endings, and formula guarding. It is clearly distinguishable from the reverse sibling csv_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?
It gives clear input-mode guidance -- 'Give "text" or a file "path"' -- and describes output formatting behavior. It does not explicitly compare against alternatives such as csv_to_json or json_format, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
json_to_typesJSON to types (TypeScript, Go, Python, Zod)ARead-onlyIdempotent
Generate type definitions from a JSON sample: TypeScript interfaces (or type aliases), Go structs with json tags (initialisms like ID/URL, pointers for optional/nullable, optional omitempty), Python dataclasses (snake_case fields with the original key noted) and Zod schemas. All items of an array are merged into one type (missing keys become optional, null makes a field nullable, int+float → number/float64, mixed values → unions); identical shapes share one name. These four are every language the website supports. Give "text" or a file "path". Web version: https://s3eidat.github.io/json-to-types/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a path to a JSON file (UTF-8; use this for big inputs). | |
| text | No | The JSON sample as inline text. | |
| export | No | TypeScript / Zod: add the export keyword. | |
| output | No | Optional: write the code to this file (with language "all", the four outputs joined by headers). | |
| language | No | Output language, or "all" for all four. | typescript |
| rootName | No | Name of the top-level type (turned into PascalCase). | Root |
| goOmitEmpty | No | Go: add ,omitempty to optional fields. | |
| tsTypeAlias | No | TypeScript: use "type X = {…}" instead of "interface X {…}". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint/openWorldHint=false/idempotentHint=true, so the bar is lower, and the description still pays off richly by disclosing the inference algorithm: all array items merged, missing keys become optional, null yields nullability, int+float collapse to number/float64, mixed values become unions, and identical shapes share a name. That is exactly the kind of behavior an agent cannot get from annotations. One tension: annotations say readOnly, yet the `output` parameter writes a file to disk (the description stays silent on this side effect, so the safety profile is not qualified).
Agents need to know what a tool does to the 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 the useful merging rules, with zero fluff. The one sentence that does not earn its place is "These four are every language the website supports," which tells an invoking agent nothing actionable; the trailing URL is defensible as attribution.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should convey what comes back; it effectively does by describing each generated artifact, and the merge semantics cover the tricky cases of a sample-driven generator. The gaps are minor: it does not say the code is returned as text (versus only written to `output`), and it leaves the file-write side effect of `output` unexplained relative to the readOnly annotation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This 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 and the schema already documents all eight parameters. The description adds meaning for a few of them indirectly — "TypeScript interfaces (or type aliases)" maps to tsTypeAlias, "optional omitempty" maps to goOmitEmpty, and "Give text or a path" restates the input choice — but `export`, `output`, and `rootName` are never touched on, so it does not beat the schema by much.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Generate type definitions from a JSON sample") and enumerates the four concrete outputs with their idioms, so the agent knows exactly what it gets back. It does not, however, distinguish itself from the sibling ai_json_schema_infer, which infers a JSON Schema from the same kind of input — the only sibling-differentiating sentence is the meta remark about "every language the website supports," which does not help selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: you supply a JSON sample and pick a language. The one piece of routing guidance is "Give 'text' or a file 'path'", plus a hint that path suits big inputs. There is no explicit when-to-use/when-not, no mention of ai_json_schema_infer as the alternative when the user actually wants a schema rather than code.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
json_to_yamlJSON to YAMLARead-onlyIdempotent
Convert JSON to YAML (js-yaml dump: no line wrapping, no anchors; strings that would read as numbers/booleans are quoted). Options: 2 or 4 space indent, sort keys, and write a top-level array as a multi-document YAML stream (--- per item). Invalid JSON gives line and column. Give "text" or a file "path". Web version: https://s3eidat.github.io/yaml-json/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a path to a JSON file (UTF-8; use this for big inputs). | |
| text | No | The JSON as inline text. | |
| indent | No | Indentation: 2 or 4 spaces. | |
| output | No | Optional: also write the result to this file path (or folder ending in "/"). The result text is then left out of the reply. Results over 1,000,000 characters are always written to a file. | |
| sortKeys | No | Sort mapping keys alphabetically. | |
| multiDocument | No | A top-level JSON array becomes one YAML document per item. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and idempotentHint, so the safety profile is already covered; the description adds real behavioral detail beyond that: error reporting ('Invalid JSON gives line and column'), the no-anchors/no-wrap dump behavior, and the multi-document stream output. It does not mention the 1,000,000-character auto-file-write rule, but that lives in the schema, so the gap is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the conversion behavior, then options, then error handling and input modes — a sensible priority order in a compact block. The parenthetical style and trailing marketing URL cost it the top score, but almost every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward converter with no output schema, the description covers output format quirks, options, error behavior, and input source. It leaves the file-output threshold to the schema, which is acceptable, so nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all six parameters are already documented, and the description largely restates them (indent 2/4, sort keys, multi-document). The 'path or text' input-mode hint adds a little framing value but no syntax or edge-case detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (convert JSON to YAML) and immediately qualifies the exact serializer semantics (js-yaml dump, no line wrapping, no anchors, quoting of ambiguous strings). An agent can distinguish it from siblings like yaml_to_json or json_format at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent how to supply input: 'Give "text" or a file "path"' (path recommended implicitly for large inputs via the schema). It doesn't name an alternative tool or exclusion condition, but the inverse relationship with yaml_to_json is self-evident from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jwt_decodeJWT decodeARead-onlyIdempotent
Decode a JSON Web Token (a leading "Bearer " is fine): header, payload, iat/nbf/exp/auth_time as ISO dates with relative time, expired / not-yet-valid status, and named standard claims. If "secret" is given, verifies HS256/HS384/HS512 signatures (secret as text or Base64URL). RS/ES/PS tokens are decoded but not verified (needs a public key). Encrypted JWE tokens can't be read. Web version: https://s3eidat.github.io/jwt-inspector/
| Name | Required | Description | Default |
|---|---|---|---|
| now | No | Unix time in seconds to judge expiry against. Default: now. | |
| token | Yes | The JWT (header.payload.signature). | |
| secret | No | HMAC secret to verify an HS256/384/512 signature. | |
| secretIsBase64 | No | The secret is Base64/Base64URL-encoded bytes, not text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-open-world, but the description adds substantial independent behavior: a leading "Bearer " prefix is tolerated, epochs are rendered as ISO dates with relative time, expired/not-yet-valid status is reported, and signature verification only covers HS* algorithms. The JWE and asymmetric-key limitations are exactly the failure modes an agent needs to know before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the core action and followed by verification scope and hard limits; every clause carries information. The trailing web-version URL is the one element that doesn't help tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only 4-parameter decoder with no output schema, the description covers inputs, the shape of the returned data (dates, status flags, named claims), algorithm coverage, and unsupported token types. Nothing an agent needs to call it correctly or interpret failure is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the documented behavior of token, now, secret and secretIsBase64 is already in structured fields; the description's note that the secret may be "text or Base64URL" largely restates the secretIsBase64 parameter. The 'now' parameter (used to judge expiry) is never mentioned in the description, so no meaningful semantics are added beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Decode a JSON Web Token") and immediately enumerates what the decode yields: header, payload, ISO-converted time claims, validity status and named standard claims. No sibling tool (base64_decode, hash_compute, crypto_text_decrypt) overlaps, so an agent can route unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear conditions for the verification path ("If \"secret\" is given, verifies HS256/HS384/HS512") and explicit exclusions (RS/ES/PS decoded but not verified; JWE unreadable), which tells the agent when this tool will under-deliver. It names no alternative tool for asymmetric verification, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
markdown_tableMarkdown tableARead-onlyIdempotent
Make a GitHub-flavoured Markdown table from CSV, TSV, a JSON array (of objects or of arrays), an existing Markdown table (to re-align / re-pad it) or a "rows" array. Per-column alignment (left, center, right), columns padded to line up (optional), pipes escaped as | and line breaks as . CSV delimiter (comma, semicolon, tab) is detected from the first line. Give "text", a file "path" or "rows". Web version: https://s3eidat.github.io/markdown-table/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a path to a CSV/TSV/JSON/Markdown file (UTF-8; use this for big inputs). | |
| rows | No | Or: the table as an array of rows (first row = header unless header is false). | |
| text | No | The CSV / TSV / JSON / Markdown table as inline text. | |
| align | No | Column alignment: one value for all columns or one per column. Default: keep a Markdown input's alignment, else none. | |
| format | No | Input format; "auto" detects Markdown, then JSON, then CSV/TSV. | auto |
| header | No | First row is the header. When false, "Column 1", "Column 2"… headers are added. | |
| output | No | Optional: also write the result to this file path (or folder ending in "/"). The result text is then left out of the reply. Results over 1,000,000 characters are always written to a file. | |
| pretty | No | Pad cells so the columns line up (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/closed-world, but the description adds real behavior: pipes escaped as \|, line breaks as <br>, CSV delimiter detected from the first line, and that a >1,000,000-character result is always written to a file. That last point is worth flagging against readOnlyHint=true, since the 'output' option makes the tool write to disk, though the write is an optional side channel on an otherwise pure transformation rather than a contradiction of the tool's stated purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded and the density is justified for 8 parameters with several formats. The first sentence is a long run-on that packs formats and options together, and the trailing web-version URL adds little for an agent, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, zero-required, no-output-schema tool, the description covers input modes, format detection, alignment, padding, escaping, and the file-output escape hatch, and it implicitly establishes that the reply contains the Markdown text. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns an extra point by clarifying that text/path/rows are alternatives (one-of) and by stating the 'auto' detection order (Markdown, then JSON, then CSV/TSV) and the default alignment behavior. Most remaining parameter detail 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 opens with a specific verb+resource ('Make a GitHub-flavoured Markdown table') and enumerates every accepted input shape (CSV, TSV, JSON array of objects/arrays, existing Markdown, 'rows' array). Directionality is unambiguous, which cleanly separates it from the inverse sibling markdown_table_parse without needing to name it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for invoking the tool and even routes between input modes ('Give "text", a file "path" or "rows"', plus 'use this for big inputs' on path). It stops short of explicit when-not-to-use or naming an alternative tool, so it lands just below the top mark.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
markdown_table_parseMarkdown table to JSON / CSVARead-onlyIdempotent
Read a Markdown table (pipes optional at the ends, | escapes, as line breaks) back into data: JSON objects keyed by the header, JSON arrays, or CSV; also returns each column's alignment. Uses the website's Markdown import. Give "text" or a file "path". Web version: https://s3eidat.github.io/markdown-table/
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | "objects" (header → keys), "arrays" (header row first) or "csv". | objects |
| path | No | Or: a path to a Markdown file (UTF-8; use this for big inputs). | |
| text | No | The Markdown table as inline text. | |
| output | No | Optional: also write the result to this file path (or folder ending in "/"). The result text is then left out of the reply. Results over 1,000,000 characters are always written to a file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent and closed-world behavior, and the description adds real parsing context beyond them: optional edge pipes, \| escapes, <br> line breaks, and the fact that column alignment is also returned. It does not describe the shape of the reply or how the alignment data is packaged, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph that front-loads the input dialect, then the output formats, then the input source. The trailing 'Uses the website's Markdown import' and the marketing URL are low-value for an agent deciding how to call it, but the rest is waste-free.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does carry the return-value burden and names the three formats plus the alignment side-output, which is the key information. It is slightly thin on the envelope structure of the response and on what happens when neither 'text' nor 'path' is supplied (no required 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 all four parameters including the 'as' enum are documented in the schema itself, setting the baseline at 3. The description only restates the text-or-path choice and lists the three output formats, adding no syntax, size, or precedence guidance beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: reading a Markdown table back into JSON objects, JSON arrays, or CSV, plus column alignment. The direction ('back into data') implicitly contrasts with the sibling markdown_table, but that sibling is never named, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only routing hint is 'Give "text" or a file "path"', which is parameter choice rather than when-to-use guidance. There is no explicit statement of when to prefer this over markdown_table or over csv_to_json/json_to_csv, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meta_tags_generateMeta tags generatorARead-onlyIdempotent
Generate the HTML for SEO and social sharing: , meta description, canonical link, Open Graph (og:type, url, title, description, image + alt, site_name, locale) and X/Twitter card tags. All values are HTML-escaped. Also checks lengths (title 30–60, description 70–160 characters), URLs and the @handle, and shows how Google, Facebook and X would truncate the title and description. URLs without a scheme get https://. Optionally writes the tags to an .html file. Web version: https://s3eidat.github.io/meta-tags/
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Canonical page URL. | |
| card | No | X card type. Default summary_large_image. | summary_large_image |
| type | No | og:type, e.g. website, article, product, profile. Default website. | website |
| image | No | Share image URL (1200×630 recommended). | |
| title | No | Page title (aim for 30–60 characters). | |
| locale | No | og:locale, e.g. en_US or ar_AR. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| No | X/Twitter handle: "@name", "name" or a profile URL. | ||
| imageAlt | No | Alt text for the share image. | |
| siteName | No | Site name (og:site_name). | |
| description | No | Meta description (aim for 70–160 characters). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds genuinely useful behavior beyond the annotations: HTML escaping, length validation (title 30–60, description 70–160), URL and @handle validation, scheme defaulting to https://, and per-platform truncation previews. However, it states the tool "Optionally writes the tags to an .html file," which is a filesystem side effect that conflicts with readOnlyHint=true in the annotations — an agent relying on the annotation could assume this call is side-effect free.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core capability is front-loaded in the first sentence and the remaining details are all operational (validation rules, file output). It is a single dense paragraph and the trailing web-version link is marginal, but nothing is redundant enough to penalize heavily.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 11 optional parameters and no output schema, the description correctly compensates by explaining what comes back (the generated head HTML plus validation warnings and truncation previews). It stops short of explaining the return shape when writing to a file versus returning inline, which is the one remaining ambiguity 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 already 100%, so baseline is 3. The description earns the extra point by adding semantics the schema only hints at: the character budgets for title and description, the https:// defaulting for scheme-less URLs, and the accepted handle formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Generate the <head> HTML") and enumerates the exact tag families produced (title, meta description, canonical, Open Graph, X card). No sibling tool in the list overlaps with this, and an agent can distinguish it from html_format or text_escape immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear the context of use (SEO and social sharing) and mentions the web-version alternative URL plus the optional file-writing mode. It gives no explicit when-not guidance or named alternatives among the sibling tools, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
password_checkPassword strength checkARead-onlyIdempotent
Estimate how strong a password really is, the way attackers guess (zxcvbn-style): finds common passwords (1,282-entry list), dictionary words (also reversed, capitalised or l33t), keyboard walks, sequences, repeats, years and dates, then the cheapest way to guess the whole thing. Returns a 0–4 score, entropy bits, guesses, crack time for 4 attack scenarios, the pieces found, and advice. Offline only: no breach lookups, nothing stored or logged. Web version: https://s3eidat.github.io/password-check/
| Name | Required | Description | Default |
|---|---|---|---|
| password | Yes | The password to check (only the first 256 characters are analysed in detail). | |
| showPieces | No | Include the matched pieces (they contain parts of the password). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, and the description adds substantive context beyond them: the detection passes performed, the exact return fields (0–4 score, entropy bits, guesses, crack time across 4 scenarios, pieces, advice), the privacy guarantee, and the 256-character deep-analysis limit. Nothing about the call's behavior is left to guess.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and return shape are front-loaded, and the trailing privacy note plus demo URL are useful rather than filler. The detection-list clause is dense but each element signals a distinct capability; slightly tighter phrasing would earn 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?
No output schema exists, yet the description fully enumerates what comes back (score, entropy, guesses, crack times, pieces, advice) and covers the privacy dimension an agent or user would reasonably worry about when submitting a password. Complete for a two-parameter read-only 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 both parameters (password, showPieces) and the 256-char analysis note are already documented in the schema. The description's mention of 'the pieces found' as a return element loosely ties to showPieces but adds no new constraint or formatting detail. Baseline 3 is appropriate when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Estimate how strong a password really is') and pins the mechanism (zxcvbn-style, attacker-guess simulation). The detection targets listed — common-password list, dictionary/leetspeak, keyboard walks, sequences, dates — make it unmistakably distinct from the sibling password_generate, which produces passwords rather than scoring them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear about the use context and sets one real boundary: 'Offline only: no breach lookups, nothing stored or logged' tells the agent not to rely on it for compromised-credential checks. It does not explicitly name password_generate as the alternative for creation, so the routing guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
password_generatePassword & passphrase generatorARead-only
Generate strong random passwords (8–128 chars; lower/upper/digits/symbols; skip look-alikes Il1|O0o; exclude your own characters; require every chosen set) or passphrases (3–12 words from the website's 2,381-word list, separator, capitalise, add a number). Returns 1–1000 results with exact entropy bits, a strength grade and the time to crack at 100 billion guesses/s. Always crypto random (OS CSPRNG, rejection sampling); nothing is stored or logged. Web version: https://s3eidat.github.io/pass-forge/
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Random characters or random words. | password |
| count | No | How many to generate. | |
| lower | No | password: include a–z. | |
| upper | No | password: include A–Z. | |
| words | No | passphrase: number of words. | |
| digits | No | password: include 0–9. | |
| length | No | password: number of characters. | |
| exclude | No | password: characters never to use. | |
| symbols | No | password: include symbols !#$%&*+-=?@^_~()[]{}<>.,:;/| | |
| addNumber | No | passphrase: append a number 0–99 to one random word. | |
| separator | No | passphrase: between words ("" = none, words then capitalised). | - |
| capitalize | No | passphrase: capitalise each word. | |
| requireEachSet | No | password: at least one character from every chosen set. | |
| avoidLookalikes | No | password: leave out I l 1 | O 0 o. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds genuinely new behavioral guarantees: OS CSPRNG with rejection sampling, and that nothing is stored or logged. It also discloses the return shape (1–1000 results with exact entropy bits, strength grade, crack time at 100 billion guesses/s), which matters because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and the two modes before any detail, so an agent can stop reading early if it only needs the gist. The parenthetical option lists are dense and restate schema flags, which costs some length, but there is no filler or marketing padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, zero-required tool with no output schema, the description covers mode semantics, both parameter domains, and the return payload (results, entropy, grade, crack time). Safety behavior is covered by annotations and reinforced by the CSPRNG/no-logging statements, leaving no practical gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already carries a mode-prefixed description, so the baseline is 3. The description adds some extra semantics beyond the schema — the 2,381-word list size, the explicit look-alike set Il1|O0o, and the 1–1000 result cap — which helps an agent choose values correctly, though most of the range/flag detail is restated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb-plus-resource ("Generate strong random passwords ... or passphrases") and immediately enumerates the option space for each mode, so the agent knows exactly what the tool produces without opening the schema. Sibling names like password_check are clearly a different operation (validation), and the mode split makes the tool's identity unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes mode selection explicit by splitting options into "password" and "passphrase" groups, and gives concrete guidance such as the 8–128 char and 3–12 word ranges. It does not, however, mention when to prefer this over the sibling password_check tool or state any 'do not use for X' exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_compressCompress PDFARead-onlyIdempotent
Shrink a PDF by re-rendering every page as a JPEG image (best for scans and photo-heavy files). Presets like the website: email (96 DPI, quality 55), balanced (144 DPI, 72), high (220 DPI, 85); or set dpi/quality yourself; optional grayscale. The result loses selectable text, links and form fields. Reports before/after size and a verdict ("bigger" means keep the original: the PDF was already efficient). Web version: https://s3eidat.github.io/pdf-compress/
| Name | Required | Description | Default |
|---|---|---|---|
| dpi | No | Override the preset resolution (36-300 DPI). | |
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| preset | No | Quality preset. Default "balanced". | balanced |
| quality | No | Override the preset JPEG quality (30-95). | |
| password | No | Password, if the PDF is protected. | |
| grayscale | No | Convert pages to grayscale. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses useful behavioral details such as JPEG re-rendering, loss of selectable text/links/forms, and size verdict reporting. However, annotations declare readOnlyHint=true while the tool produces a compressed output file, which is a write side effect; this directly contradicts the read-only annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and best-fit use case, then quickly covers presets, caveats and output reporting. It is dense but efficient, with 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?
For an 8-parameter tool with no output schema, the description covers the transformation method, case-specific suitability, lossy effects, preset behavior, and the shape of the result. Remaining parameter details are fully covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description still adds value by mapping presets to concrete DPI/quality values and explaining grayscale and custom dpi/quality overrides, going beyond the schema's 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 states a specific verb and resource (shrink/compress a PDF) and explains the mechanism (re-rendering pages as JPEG). It also distinguishes the best-fit cases (scans and photo-heavy files), making the tool easy to tell apart from PDF manipulation siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context with "best for scans and photo-heavy files" and explains preset tradeoffs. It does not explicitly name alternatives for text-heavy PDFs, but the warning about losing selectable text, links and form fields effectively signals when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_extract_pagesExtract PDF pagesARead-onlyIdempotent
Make one new PDF from selected pages of a PDF, e.g. "1-3, 7, 10-" (order as written, each page once). The rest of the file is left out. To reorder, duplicate or delete pages use pdf_organize. Web version: https://s3eidat.github.io/pdf-split/
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| pages | Yes | Pages to keep: "1-3, 7, 10-" ("5-" = to the end; also "odd", "even", "last"). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and closed-world, so safety is covered. The description adds genuinely behavioral nuance beyond them: page order is preserved "as written" and each page appears "each page once," which clarifies how duplicates/gaps are handled. It does not discuss permissions or large-file limits, keeping it at a solid 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?
Two tight sentences lead with the core operation and constraint, followed by a one-line alternative pointer. No filler; the trailing web link is the only borderline element but is 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?
With no output schema, the description usefully signals that the result is a single new PDF with the unselected pages excluded, and the output destination is covered by the schema's `output` param. It is complete enough to invoke correctly, though it doesn't state return shape explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning not fully captured in the schema by specifying "order as written, each page once," which disambiguates whether reordering or duplicate ranges are honored in the output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Make one new PDF from selected pages of a PDF," with the page-range syntax demonstrated inline. It also explicitly distinguishes itself from pdf_organize (the reorder/duplicate/delete sibling), so an agent can route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use plus an explicit alternative: "To reorder, duplicate or delete pages use pdf_organize." It also scopes the operation ("The rest of the file is left out"). It stops short of naming pdf_split, the most confusable sibling for producing multiple files, so it is strong but not exhaustive routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_form_fieldsList PDF form fieldsARead-onlyIdempotent
List the fillable fields of a PDF form in reading order: name, readable label, type (text, checkbox, radio, dropdown, list, signature, button), page, current value, options, and whether it is required / read-only / multi-line. Use the names with pdf_form_fill. Web version: https://s3eidat.github.io/pdf-fill/
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the return shape (field name, label, type enum, page, current value, options, required/read-only/multi-line) and the reading-order guarantee. It omits what happens on a PDF with no fillable fields — empty result vs. error — which is the one behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and the return inventory, followed by the actionable handoff to pdf_form_fill. The trailing web-version URL is small and doesn't displace the substance; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry the return contract — and it does, enumerating every field attribute an agent needs to plan a fill. The only missing piece is edge-case behavior (non-form PDF, encrypted PDF), which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single 'file' parameter is fully documented in-schema (local path relative to --root, or raw/base64 data URI). The description adds no parameter-level detail of its own, so the baseline 3 applies — the schema does all the semantic work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the fillable fields of a PDF form') and then enumerates the exact per-field attributes returned, which distinguishes it cleanly from pdf_info or pdf_to_text. An agent can tell instantly that this is the form-introspection tool, not a generic text extractor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent forward: 'Use the names with pdf_form_fill,' which is the natural alternative-sibling handoff. It does not state when NOT to use it (e.g., for non-form PDFs, where pdf_info or pdf_to_text would be the right call), so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_form_fillFill a PDF formARead-onlyIdempotent
Fill PDF form fields by name (get names from pdf_form_fields): text as strings, checkboxes as true/false, radio groups and dropdowns by option text, lists as arrays. Optionally flatten (bake the answers into the page, no longer editable). Only changed fields are redrawn. Text the standard font cannot draw (Arabic…) is kept and viewers are asked to draw it, but cannot be flattened. Web version: https://s3eidat.github.io/pdf-fill/
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| values | Yes | Field name -> value, e.g. {"name": "Sara", "agree": true, "plan": "pro", "langs": ["Arabic"]}. | |
| flatten | No | Flatten the form after filling (fields become plain page content). | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. | |
| ignoreUnknown | No | Skip names that are not in the form instead of failing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly/idempotent/openWorld; the description adds real behavior: flattening is irreversible ("bake the answers into the page, no longer editable"), only changed fields are redrawn, and text the standard font cannot draw is preserved but cannot be flattened. Minor tension worth noting: it writes to an output path while readOnlyHint=true, though the input PDF itself is not mutated.
Agents need to know what a tool does to the 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, front-loaded with the operation and the routing hint, then type conventions, then behavioral caveats, then the URL. No filler sentences; every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters, no output schema, and thin annotations, it covers the essential concerns: input naming source, value typing, flatten irreversibility, Unicode fallback limits, and the base64 return option. It never states what the tool returns on success (path? summary?), which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description earns an extra point by explaining the consequence of `flatten` beyond the schema's terse "fields become plain page content" (irreversible loss of editability) and by restating the value-type mapping that the `values` anyOf only encodes structurally.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ("Fill PDF form fields") and immediately scopes it by saying field names come from pdf_form_fields, which cleanly distinguishes it from that sibling. An agent can identify the operation and its prerequisite without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to pdf_form_fields to obtain field names first, and gives per-type value conventions (strings for text, true/false for checkboxes, option text for radios/dropdowns, arrays for lists). No explicit "when not to use" clause, e.g. pointing to pdf_sign_image for signatures, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_from_imagesImages to PDFARead-onlyIdempotent
Make a PDF from images (JPEG, PNG, WebP, GIF, TIFF, AVIF, SVG…), one image per page, in the order given. Page size A4, Letter, or "fit" (page = image size at 96 dpi); orientation auto/portrait/landscape; margin in mm; quality "original" (JPEG/PNG kept as-is), high (≤3000 px, JPEG 90), medium (≤2000 px, 75) or small (≤1400 px, 60). Photos are turned upright from their EXIF orientation. Web version: https://s3eidat.github.io/images-to-pdf/
| Name | Required | Description | Default |
|---|---|---|---|
| images | Yes | Images in page order: path/base64 strings, or {file, rotate}. | |
| margin | No | Margin around each image in mm. Default 10. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| quality | No | Image quality / size trade-off. Default "high". | high |
| pageSize | No | Page size. Default "a4". | a4 |
| orientation | No | "auto" turns the page to match each image. Ignored for "fit". | auto |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations (readOnlyHint, idempotentHint, openWorldHint) by disclosing EXIF auto-uprighting, what "original" quality means (JPEG/PNG kept as-is), the downscaling ceilings behind high/medium/small, and that "fit" means page = image at 96 dpi with orientation ignored. Minor tension: annotations mark it read-only while the tool plainly writes a PDF artifact, and the description never states what the result contains (path? bytes?).
Agents need to know what a tool does to the 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 verb, resource, and output shape, then packed with high-density parenthetical detail; almost every clause carries real information. Slightly over-dense as one run-on sentence, and the trailing web-version URL contributes nothing to tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the essentials for a 7-parameter, mutation-style tool with no output schema: formats, ordering, page geometry, quality trade-offs. Gaps remain around what is returned (path vs. base64 depending on returnBase64), file naming, and failure behavior for unsupported or unreadable images.
Complex tools with many parameters or behaviors need more documentation. Simple 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 3 is the floor; the description earns above that by giving concrete semantics the terse enum labels omit — pixel caps and JPEG quality numbers per quality tier, the 96 dpi meaning of "fit", and orientation being ignored under "fit". It does not add anything for `output` or `returnBase64` beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Make a PDF from images") plus the key structural rule (one image per page, in the order given). This cleanly distinguishes it from pdf_to_images, image_convert, and ai_markdown_to_pdf in the sibling list without the agent opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The accepted input formats and page-size/quality options imply when the tool applies, and ordering semantics are stated. However there is no explicit when-to-use vs. alternative guidance (e.g., vs. image_convert, ai_markdown_to_pdf, or pdf_merge), and no prerequisites or exclusions beyond what the option list implies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_infoPDF infoARead-onlyIdempotent
Quick facts about a PDF for planning the next step: page count, page sizes (points, mm, paper name such as "A4 portrait", grouped by size), rotated pages, encryption, PDF version, form field count, title/author, and which pages have no text layer (scans that would need OCR). Related web tool: https://s3eidat.github.io/pdf-metadata/
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| password | No | Password, for the text check on a protected PDF. | |
| textCheck | No | Check which pages have a text layer (reads up to 500 pages). Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so safety and repeatability are covered. The description adds useful output-oriented context, especially the OCR/text-layer signal and encryption facts, but does not discuss failure behavior, limits, or other operational traits beyond what the schema annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with a colon-delimited list of outputs, making it easy to scan. It is somewhat dense, and the external web-tool link is marginally useful, but there is little wasted language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the key return facts so an agent knows what information it will receive. Given complete parameter descriptions and read-only annotations, this is largely sufficient, though explicit sibling routing guidance would make it more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the file, password, and textCheck parameters are already well documented in structured form. The description does not add syntax or semantic detail beyond the schema; it mainly describes returned information, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as a PDF and enumerates the specific facts returned: page count, page sizes, rotation, encryption, version, form fields, title/author, and missing text layers. It implies inspection/planning rather than mutation, but it does not explicitly name or distinguish itself from close siblings such as pdf_metadata_read, pdf_form_fields, pdf_to_text, or ai_ocr.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for planning the next step' and the note about pages that 'would need OCR' imply appropriate usage contexts. However, it gives no explicit when-to-use guidance, exclusions, or named alternatives, so an agent must infer routing from the output list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_mergeMerge PDFsARead-onlyIdempotent
Combine several PDFs into one, in the order given. Each entry can be a file (path or base64) or {file, pages} to take only some pages ("1-3, 5, 8-"; "3-1" keeps reverse order; a page can repeat). Password-protected PDFs must be unlocked first. Web version: https://s3eidat.github.io/pdf-merge/
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | PDFs to merge, in order: a path/base64 string, or {file, pages}. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false), and the description still adds non-obvious behavior: input-order semantics, per-file page slicing including reversed ranges, and the unlock-first prerequisite for encrypted inputs. It stops short of saying what happens on failure or how the output is surfaced, so it is not a 5. Note a mild tension: the tool produces an output artifact while readOnlyHint=true, though the description itself makes no claim of mutating existing resources.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and ordering constraint are front-loaded in the first clause, followed by the two details an agent actually needs (page selection, encryption prerequisite). The trailing web-version URL is the one element that does not help an agent invoke 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?
For a 3-parameter, non-destructive merge with a fully documented schema and no output schema, the description covers the important unknowns: ordering, page subsetting, and encrypted-input handling. It leaves the shape/return of the result (path vs. base64) to the schema, which is acceptable but slightly thin given returnBase64 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 coverage is 100%, so the baseline is 3, but the description contributes edge-case semantics the schema only partially conveys — that a page can repeat and that pages may be omitted per file via the {file, pages} form. It duplicates the reverse-range notation already present in the schema, so the added value is modest rather than large.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Combine several PDFs into one') plus an ordering guarantee, so an agent can tell exactly what the operation produces. It does not differentiate from siblings that also manipulate PDF pages (pdf_extract_pages, pdf_organize, pdf_split), which keeps it below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the task (multi-input assembly in a given order) and one real prerequisite is given: password-protected PDFs must be unlocked first. There is no explicit when-to-use vs. when-not, and no routing to pdf_organize/pdf_extract_pages for the overlapping page-range capability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_metadata_readRead PDF metadataARead-onlyIdempotent
Show what a PDF reveals about itself: Title, Author, Subject, Keywords, Creator, Producer, creation/modification dates (with time zone), custom info fields, XMP metadata (size, edit history, creator) and the document ID. Optionally returns the XMP XML. Web version: https://s3eidat.github.io/pdf-metadata/
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| includeXmp | No | Also return the decoded XMP XML. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, the description adds valuable detail about exactly what is returned: title, author, dates with time zone, custom fields, XMP metadata, and document ID. It also notes that XMP XML can be optionally returned, which compensates for the lack of an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core operation and then lists returned fields efficiently. The inclusion of a web version URL is extraneous but does not significantly detract from an otherwise compact definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description does a good job enumerating the returned metadata fields and noting the optional XMP XML return. It omits error behavior or edge-case handling, but for a read-only inspection tool the coverage is largely 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 both parameters are already fully documented in the input schema. The description's mention of optionally returning XMP XML loosely maps to includeXmp but adds no syntax or format detail beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Show') and resource ('PDF metadata') and enumerates the specific fields returned, making the operation easy to identify. It does not explicitly distinguish itself from the sibling pdf_info tool, so it falls short of the highest clarity score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool reads metadata but offers no guidance on when to choose it over siblings like pdf_info or image_exif_read. There are no conditions, exclusions, or prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_metadata_writeEdit or strip PDF metadataBRead-onlyIdempotent
Change PDF info fields (title, author, subject, keywords, creator, producer, dates, custom fields) or strip all metadata: info fields, XMP, page-level data and the document ID, and drop unreachable leftovers from earlier edits so no trace stays in the bytes. Untouched values keep their exact original form. Web version: https://s3eidat.github.io/pdf-metadata/
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| strip | No | Remove ALL metadata (other edits are ignored). | |
| title | No | Title. "" removes it; omit to keep it. | |
| author | No | Author. "" removes it; omit to keep it. | |
| custom | No | Custom info fields to set; null removes one. E.g. {"Company": null}. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| creator | No | Creator (the app that made it). "" removes it; omit to keep it. | |
| modDate | No | Modification date as ISO 8601. "" removes it; omit to keep it. | |
| subject | No | Subject. "" removes it; omit to keep it. | |
| keywords | No | Keywords. "" removes it; omit to keep it. | |
| producer | No | Producer (the PDF engine). "" removes it; omit to keep it. | |
| removeXmp | No | Remove the XMP metadata stream (and page-level XMP/PieceInfo). | |
| creationDate | No | Creation date as ISO 8601, e.g. "2026-03-14T09:30:00+03:00". "" removes it; omit to keep it. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. | |
| removeDocumentId | No | Remove the document ID from the trailer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly says this tool changes PDF metadata and can strip all metadata, XMP, page-level data, and the document ID. The annotations declare readOnlyHint=true, which directly contradicts a tool that writes output and mutates metadata. This is an annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and strip scope, and the preservation rule is stated in a short follow-up sentence. The web-version URL is non-essential and slightly promotional, but the description remains compact 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 the two main modes and the destructive scope of stripping, which is important for a complex 15-parameter mutation tool. However, it does not describe output behavior such as where results are written or what happens to the original file, and the annotations misclassify the tool as read-only.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents all 15 parameters in detail, including empty-string removal semantics and custom-field null removal. The description adds preservation behavior for untouched values and lists field categories, but most parameter meaning is already supplied by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: change PDF info fields or strip all metadata. It enumerates the editable fields and the scope of stripping, so an agent can distinguish this write operation from sibling read-oriented tools like pdf_metadata_read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly presents two usage modes: editing selected info fields versus stripping all metadata. It does not explicitly name pdf_metadata_read as the alternative or state when not to use this tool, but the intended context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_organizeOrganize PDF pagesARead-onlyIdempotent
Rebuild a PDF from a page list: reorder, delete (leave pages out), duplicate (list a page twice) and insert blank pages. "3, 1-2, blank, 5-" puts page 3 first, then 1-2, a blank page (same size as the page before it), then 5 to the end; page 4 is dropped. Optionally rotate pages of the result. Existing page rotation is kept. Web version: https://s3eidat.github.io/pdf-organizer/
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| pages | Yes | New page order (1-based source pages): e.g. "3, 1-2, blank, 2, 5-". Pages not listed are removed; "blank" adds an empty page. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| rotate | No | Optional rotations applied to pages of the new order. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint, so the safety profile is covered. The description adds genuinely useful behavioral detail beyond that: unlisted pages are dropped, blank pages match the size of the preceding page, and existing page rotation is preserved. It does not say whether the source file is untouched or how an existing output path is handled, which keeps it at 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?
Purpose is front-loaded in the first clause, followed by a concrete example that earns its space. The trailing link to the web version is the only sentence that adds nothing for an agent, a small but real dilution.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter file-producing tool with no output schema, the description covers the input grammar, page-drop semantics and rotation handling well. It leaves the return shape implicit (what the result object contains besides optional base64) and does not state that the source PDF is left unmodified, a gap that annotations only partly cover.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters are already documented. The description's page-list syntax is essentially a restatement of the 'pages' schema description, and it says nothing about 'output' path semantics or 'returnBase64' trade-offs beyond what the schema states. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Rebuild a PDF from a page list') plus the four operations it enables (reorder, delete, duplicate, insert blanks), which cleanly separates it from siblings like pdf_extract_pages, pdf_split, pdf_merge and pdf_rotate. The worked example makes the tool's 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 worked page spec plus 'Pages not listed are removed' makes the intended use case and semantics clear, and rotation is framed as an optional post-step. It never names a sibling or an explicit when-not-to-use condition (e.g. use pdf_rotate if you only need rotation, or pdf_extract_pages if you only need a subset), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_page_numbersAdd page numbersARead-onlyIdempotent
Add page numbers to a PDF, plus an optional header and footer line. Format tokens: {n}, {total}, {date}, {filename} (e.g. "Page {n} of {total}", "{n} / {total}", "- {n} -"). Choose the corner/edge, start number, how many leading pages to skip (e.g. a cover), a page range, font, size, colour and margin. Numbers stay upright on rotated pages. Web version: https://s3eidat.github.io/pdf-page-numbers/
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Text for {date}. Default: today in the server locale. | |
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| font | No | Helvetica | |
| size | No | Text size in points. Default 10. | |
| skip | No | Leave this many first pages without a number (e.g. 1 for a cover). Default 0. | |
| color | No | Colour as hex "#rrggbb". Default #333333. | #333333 |
| pages | No | Pages to number: 1-based list like "1-3, 5, 8-" ("5-" = to the end, "-3" = first three, "3-1" = reversed). Also "all", "odd", "even", "last". Empty = all pages. | |
| start | No | Number of the first numbered page. Default 1. | |
| footer | No | Optional footer text on numbered pages (tokens allowed). | |
| format | No | Number format with {n}, {total}, {date}, {filename}. Default "Page {n} of {total}". Empty = no number (header/footer only). | Page {n} of {total} |
| header | No | Optional header text on numbered pages (tokens allowed). | |
| margin | No | Distance from the page edge in points. Default 28. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| position | No | Where the number goes: t/b = top/bottom, l/c/r = left/centre/right. Default "bc". | bc |
| footerAlign | No | Footer alignment: l, c or r. | c |
| headerAlign | No | Header alignment: l, c or r. | c |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the bar is lower; the description still adds real context — numbers stay upright on rotated pages, base64 return only works for small files, and output defaults to a server temp folder unless --out-dir is set. It does not say what the success result looks like or whether the input file is preserved (though the separate `output` param implies a new file).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences plus token examples, with the capability stated first and the configuration surface second. The trailing documentation URL is the only element that does not help invocation, but it is harmless and short.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 17-parameter, write-a-file tool with no output schema, the description covers the full option surface and the default output location. The remaining gap is the return payload (file path vs base64 envelope) when returnBase64 is false, which the agent must infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 94%, so the schema already carries nearly all parameter meaning. The description enumerates the same option set (corner, start, skip, range, font, size, colour, margin) and mirrors the format-token examples, adding little beyond what is already documented 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?
A specific verb and resource ('Add page numbers to a PDF') plus the extra capability of header/footer lines. An agent immediately knows the outcome, and the token list makes the scope concrete rather than generic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the described options (skip a cover, page ranges), but there is no explicit when-to-use guidance and no differentiation from near neighbours such as pdf_watermark, pdf_organize or pdf_metadata_write. The web-version link is not routing guidance for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_rotateRotate PDF pagesARead-onlyIdempotent
Rotate selected pages of a PDF by 90, 180 or 270 degrees clockwise (-90 = counter-clockwise), on top of any rotation they already have. Other pages, links and form fields are left as they are. Web version: https://s3eidat.github.io/pdf-organizer/
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| angle | Yes | Clockwise degrees: 90, 180, 270, or -90. | |
| pages | No | Pages to rotate: 1-based list like "1-3, 5, 8-" ("5-" = to the end, "-3" = first three, "3-1" = reversed). Also "all", "odd", "even", "last". Empty = all pages. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint=false and idempotentHint, so safety framing is partly covered. The description adds real value beyond that: rotation is cumulative on top of existing rotation, and other pages, links and form fields are untouched. It stops short of saying whether the source file is modified or what the result contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences front-load the operation, the angle domain and the preservation guarantee. The trailing web-version URL is marginally useful and costs little, keeping it short of 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?
For a 5-parameter mutation tool with no output schema, the description covers what is changed and what is preserved, which is the essential behavioral context. It does not state the return shape or that output goes to a server folder by default, though the schema's output parameter description covers the latter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including the page-range syntax and output destination is already documented. The description only restates the angle options ('90, 180 or 270 clockwise, -90 = counter-clockwise'), which the schema's enum and description already contain. Baseline 3 for a fully documented 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 (rotate) and resource (selected pages of a PDF), plus the allowed angles and the additive semantics ('on top of any rotation they already have'). An agent can distinguish this from pdf_organize/pdf_extract_pages without opening the schema, since page rotation is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the operation itself (rotate pages of a PDF), and the preservation note hints at when this is the right, non-destructive-page-selection tool. However, it never names an alternative (e.g. pdf_organize for reordering, pdf_to_images for raster rotation) or any precondition for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_sign_imageSign PDF with an imageARead-onlyIdempotent
Place a signature (or initials, stamp, logo) image on PDF pages at x/y/width in points, measured from the top-left of the page as it is shown (rotated pages are handled). A light paper background is removed by default so scanned signatures sit cleanly on the page. Optional text marks (name, date…) can be added too. This is a visual signature, not a cryptographic digital signature. To draw a signature by hand, use the web version: https://s3eidat.github.io/pdf-sign/
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Left edge in points from the left of the page (72 pt = 1 inch). Default 72. | |
| y | No | Top edge in points from the TOP of the page. Default: 72 pt above the bottom margin. | |
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| pages | No | Pages to sign: "last" (default), "1", "all", "1-3"… | last |
| texts | No | Optional text marks, e.g. the printed name or the date. | |
| width | No | Width in points. Default 150 (about 5.3 cm). | |
| height | No | Height in points. Default: keeps the image aspect ratio. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| signature | No | Signature image: local path or base64 (PNG, JPEG, WebP…). | |
| threshold | No | Brightness (0-255) above which pixels become transparent. Default 210. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. | |
| removeBackground | No | Make light (paper) pixels transparent and trim to the ink. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: default background removal so scanned signatures sit cleanly, rotation-aware coordinates, a threshold-controlled transparency rule, and a default output location (server temp folder unless --out-dir is set). The one unaddressed tension is that the tool writes a new output file while annotations declare readOnlyHint=true; the description does not clarify that the source PDF is left untouched and a new file is produced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core action and placement geometry, followed by the background-removal behavior, the textual-mark option, and the non-cryptographic caveat. No sentence is redundant and nothing important is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter tool with no output schema, the description plus a fully annotated schema covers the essentials an agent needs to invoke it correctly. The remaining gap is outcome semantics (whether a new file is always created, what the result object contains), which matters given the readOnly annotation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented; the description's contribution is limited to reinforcing the coordinate origin ('as it is shown (rotated pages are handled)') and the image/width relationship. Useful, but the schema already carries the per-parameter detail (texts, threshold, pages, returnBase64), so this stays at the high-coverage baseline plus a small increment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Place a signature ... image on PDF pages') plus the placement model (x/y/width in points from the top-left). It also rules out the most likely confusion by saying 'This is a visual signature, not a cryptographic digital signature', which separates it from signing/verification tools and from pdf_form_fill.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when this is the right tool (stamping an image of a signature, initials, stamp or logo) and names an alternative path for handwritten drawing via the web link. It does not explicitly contrast with nearby siblings such as pdf_watermark (image placement) or pdf_form_fill (signature fields), leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_splitSplit PDFARead-onlyIdempotent
Split one PDF into several PDFs written to a folder: by page ranges (one file per range, e.g. "1-3, 4-6, 7-"), every N pages, or one file per page. Files are named like the website: -pages-1-3.pdf, -part-01.pdf, -page-001.pdf. Use pdf_extract_pages to get a single PDF with chosen pages. Web version: https://s3eidat.github.io/pdf-split/
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| mode | Yes | "ranges": one PDF per range in `ranges`; "every": a new PDF every `every` pages; "single": one PDF per page. | |
| every | No | For mode "every": pages per file (e.g. 2 makes 1-2, 3-4…). | |
| output | No | Folder to write the PDFs into (created if missing). Default: a new folder in the server output folder. | |
| ranges | No | For mode "ranges": comma-separated ranges, each becomes one PDF, e.g. "1-3, 4-6, 7-". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations give readOnly/idempotent/openWorld, but the description adds the behavior that matters most here: files land in a destination folder and follow deterministic naming (<name>-pages-1-3.pdf, <name>-part-01.pdf, <name>-page-001.pdf). Note a mild tension: annotations say readOnlyHint=true while the tool creates output files, though it does not modify the input PDF.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and modes in one dense sentence, then the alternative, then the naming detail. The trailing web-version URL is the only content that doesn't help an agent invoke 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?
Five parameters at full schema coverage, no output schema, and the description covers modes, destination, and output naming, which is what an agent needs to call it correctly. Edge behavior (invalid or overlapping ranges, what happens when a range exceeds page count) is left undocumented, but that is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description goes beyond it by tying each mode to the resulting filename pattern, which is real added meaning about how `ranges`, `every`, and `single` manifest in output. The default output folder behavior is also echoed usefully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (split one PDF into several PDFs written to a folder) and enumerates the three modes with concrete examples. It explicitly distinguishes itself from the sibling pdf_extract_pages, so an agent can choose between them without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use pdf_extract_pages to get a single PDF with chosen pages" is an explicit alternative with the selecting condition (one output vs many). Mode selection is implied by the mode semantics and by the examples. It stops short of a full when-not rule (e.g. use pdf_organize to reorder rather than split), so it is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_to_imagesPDF to imagesARead-onlyIdempotent
Render PDF pages to PNG, JPEG or WebP images in a folder (one file per page, named -p001.png…). Choose the DPI (72 = screen size, 150 = default, 300 = print), JPEG/WebP quality, a page range, and a transparent background for PNG/WebP. Very large pages are capped at 16384 px a side / 16.7 megapixels, like the website. Web version: https://s3eidat.github.io/pdf-to-images/
| Name | Required | Description | Default |
|---|---|---|---|
| dpi | No | Resolution in dots per inch. Default 150. | |
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| pages | No | Pages to render: 1-based list like "1-3, 5, 8-" ("5-" = to the end, "-3" = first three, "3-1" = reversed). Also "all", "odd", "even", "last". Empty = all pages. | |
| format | No | Image format. Default "png". | png |
| output | No | Folder to write the images into (created if missing). Default: a new folder in the server output folder. | |
| quality | No | JPEG/WebP quality 1-100. Default 90. | |
| password | No | Password, if the PDF is protected. | |
| transparent | No | Keep the page background transparent (PNG/WebP only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, closed-world), and the description adds genuinely non-obvious behavior: the 16384 px / 16.7 MP per-page cap, that the output folder is created if missing, and that password-protected PDFs are handled. It stops short of saying what the tool returns (a path list?) and whether existing files in the target folder are overwritten.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: the core action and output naming come first, then the tunable options, then the size cap. The trailing web-version URL is minor filler but only one clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still communicates the return shape via the per-page filename convention and output-folder default, and it warns about size capping. Missing only the overwrite/collision behavior and whether a manifest of written files is returned — minor for an 8-param, 1-required 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 earns extra by giving DPI guidance the schema lacks (72 = screen, 150 = default, 300 = print) and by tying quality to JPEG/WebP and transparency to PNG/WebP. The page-range and file/password semantics are left entirely to 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?
Opens with a specific verb+resource+output: "Render PDF pages to PNG, JPEG or WebP images in a folder." It also states the output shape (one file per page, named <name>-p001.png), which distinguishes it from reverse-direction siblings like pdf_from_images and text-extraction siblings like pdf_to_text / ai_pdf_to_markdown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the option list (DPI presets, page range, transparency) — the agent can infer this is the tool for rasterizing pages. There is no explicit when-to-use/when-not statement and no routing against alternatives such as ai_pdf_to_markdown (text) or image_convert (already-raster images).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_to_textPDF to textARead-onlyIdempotent
Extract the text of a PDF with lines and paragraphs rebuilt (right-to-left Arabic/Hebrew lines in reading order), as plain text or Markdown, with optional page separators and reflow (join lines, mend hyphenated words). Returns per-page word counts and flags pages with no text layer (scans: this tool does no OCR). Supports page ranges and passwords. Give "output" to write a .txt/.md file instead of returning the text inline. Web version: https://s3eidat.github.io/pdf-to-text/
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| pages | No | Pages to read: 1-based list like "1-3, 5, 8-" ("5-" = to the end, "-3" = first three, "3-1" = reversed). Also "all", "odd", "even", "last". Empty = all pages. | |
| format | No | "text" or "markdown" (## Page N headings, reflowed paragraphs). | text |
| output | No | Write the text to this file (or folder ending in "/") instead of returning it inline. | |
| reflow | No | Join the lines of each paragraph and mend words split by a hyphen. | |
| perPage | No | Also return each page's text separately. | |
| maxChars | No | Cut the inline text after this many characters (the file output is never cut). | |
| password | No | Password, if the PDF is protected. | |
| separators | No | Put a "——— Page N ———" line before each page. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly/idempotent/closed-world), the description discloses the no-OCR limitation, that text-layer-missing pages get flagged, that per-page word counts are returned, that `output` writes a file instead of returning inline, and that maxChars truncation applies only to inline text. This is exactly the behavioral context an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and feature set in a dense but readable block; every clause carries information. It is a single run-on sentence chain, though, and the trailing marketing URL is not useful to an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 parameters, no output schema, and annotations covering only safety, the description fills the remaining gaps: return shape (text plus per-page counts and warning flags), output modes (inline vs file), and the OCR boundary. Nothing essential to a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented; the description's mentions of `output`, `reflow`, and separators restate schema content. The one added nuance is that copying to a file bypasses maxChars truncation, but that is also in the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource ('Extract the text of a PDF') plus concrete differentiating capabilities: line/paragraph rebuilding, RTL reading order, text vs Markdown, page ranges. It also rules out OCR, which implicitly distinguishes it from ai_ocr. It does not, however, name the closest sibling ai_pdf_to_markdown, whose overlap with the `format: markdown` option an agent would have to infer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context: use it for text-layer PDFs, with an explicit exclusion for scans ('this tool does no OCR') and a note that scans are flagged. The main gap is that the alternative tool (ai_ocr for image-only PDFs, ai_pdf_to_markdown for markdown output) is never named, leaving the agent to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_watermarkWatermark PDFARead-onlyIdempotent
Stamp a text or image watermark on PDF pages: centred or tiled across the page, with opacity, angle, size, colour and a page range. It reads upright on rotated pages. Text the standard PDF fonts cannot draw (Arabic, CJK…) is stamped as an image. Defaults match the website: "CONFIDENTIAL", Helvetica Bold 72 pt, #d64545, 25% opacity, 45°. Web version: https://s3eidat.github.io/pdf-watermark/
| Name | Required | Description | Default |
|---|---|---|---|
| gap | No | Space between tiles in points (tile mode). Default 80. | |
| file | Yes | The PDF: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). | |
| font | No | Font for text. | HelveticaBold |
| mode | No | "center": one stamp in the middle; "tile": repeated across the page. | center |
| size | No | Text size in points. Default 72. | |
| text | No | Watermark text (default "CONFIDENTIAL"). Ignored when "image" is given. | |
| angle | No | Rotation in degrees, counter-clockwise as shown. Default 45. | |
| color | No | Colour as hex "#rrggbb". Default #d64545. | #d64545 |
| image | No | Image watermark instead of text: a local path or base64 (PNG, JPEG, WebP, SVG…). | |
| pages | No | Pages to stamp: 1-based list like "1-3, 5, 8-" ("5-" = to the end, "-3" = first three, "3-1" = reversed). Also "all", "odd", "even", "last". Empty = all pages. | |
| scale | No | Image width as % of the page width. Default 40. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| opacity | No | Opacity in % (1-100). Default 25. | |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses real behavior: orientation handling on rotated pages, the fallback that stamps non-Latin text as an image, and that results are written to an output destination rather than mutating the source. It does not state whether the input PDF is left untouched or what the response contains, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the core action and followed by behavior and defaults; nothing is padded. The trailing web-version URL is mildly off-task but negligible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter tool with no output schema, the description covers the main behavioral surprises (rotation, font fallback, output destination) and the default look. It stops short of explaining the response shape or the base64 return path, which the schema only hints at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 14 parameters is already documented, including the page-range grammar and enum values. The description mostly repeats the defaults the schema already carries; its only added semantic is the font-fallback rule for unsupported scripts (which is parameter-adjacent but not tied to a specific field).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Stamp a text or image watermark on PDF pages" gives a specific verb and resource, and the following clause enumerates the modes (centred/tiled) and styling knobs. It is clearly distinguishable from siblings like image_watermark and pdf_sign_image because it is scoped to PDF pages and text/image stamps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the feature list (text vs image mode, page range, rotated pages) but there is no explicit when-to-use statement and no named alternative (e.g. image_watermark or pdf_page_numbers) to route against. An agent can infer the right context but must reason it out from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prayer_timesPrayer timesARead-onlyIdempotent
Islamic prayer times (Fajr, Sunrise, Dhuhr, Asr, Maghrib, Isha) for any coordinates + IANA time zone, or a known city, for one day, several days or a whole month, plus the Hijri (Umm al-Qura) date and the next prayer with a countdown. Same astronomy as the website (adhan.js): 13 methods (Jordan Awqaf, MWL, Umm al-Qura, Egyptian, ISNA, Karachi, Dubai, Kuwait, Qatar, Turkey, Singapore, Tehran, Moonsighting), Shafi'i or Hanafi Asr, and the recommended high-latitude rule beyond 48° (overridable). Times are local HH:MM (24 h) in the given zone, plus UTC ISO. Coordinates are rounded to 4 decimals like the site. Web version: https://s3eidat.github.io/prayer-times/
| Name | Required | Description | Default |
|---|---|---|---|
| asr | No | Asr school: "shafi" (standard: Shafi'i, Maliki, Hanbali) or "hanafi". Default shafi (hanafi for Karachi-method cities). | |
| now | No | Reference instant (ISO 8601) for "today" and the next prayer. Default: the current time. | |
| city | No | A known city (sets coordinates, time zone and its usual method): amman, irbid, zarqa, aqaba, mecca, medina, riyadh, jeddah, jerusalem, gaza, damascus, beirut, baghdad, cairo, alexandria, dubai, abudhabi, doha, kuwait, manama, muscat, istanbul, casablanca, tunis, algiers, khartoum, karachi, lahore, dhaka, delhi, kualalumpur, jakarta, tehran, london, paris, berlin, newyork, chicago, toronto, losangeles, sydney. | |
| date | No | First day, YYYY-MM-DD in the place's calendar. Default: today there. | |
| days | No | How many consecutive days to return. | |
| month | No | Or a whole month timetable, YYYY-MM (overrides date/days). | |
| method | No | Calculation method. Default: the city's usual method, else "mwl". | |
| latitude | No | Latitude in degrees (−90..90). Use with longitude and timezone. | |
| timezone | No | IANA time zone of the place, e.g. "Asia/Amman" (required with coordinates; overrides the city's). | |
| longitude | No | Longitude in degrees (−180..180). | |
| highLatitudeRule | No | "auto" = website behaviour (recommended rule when |latitude| > 48°). | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the readOnly/idempotent annotations, it discloses the underlying astronomy library (adhan.js) matching the website, coordinate rounding to 4 decimals, the default-method resolution order, the >48° high-latitude recommendation with override, and the output encoding (local HH:MM 24h plus UTC ISO). It also defaults defaults explicitly (today, current time), which the agent cannot infer from 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?
Front-loaded with the core verb+resource+scope before the detail, and most sentences carry real information. However, enumerating all 13 calculation methods duplicates the schema enum verbatim and the trailing website URL is low value for an agent, so a small trim is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 11 all-optional parameters and no output schema, the description does the right work: it explains the defaulting chain for method/asr/date/now and sketches the return payload (per-day times in local and UTC, Hijri date, next prayer countdown). It doesn't describe the top-level response shape (e.g., array of days vs. single object), which is the remaining gap for a no-output-schema 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 already 100%, so the baseline is 3, but the description adds genuine meaning: the 48° threshold that motivates highLatitudeRule (not in the schema), the interaction that city sets coordinates/zone/method, and that the site-equivalent rounding is applied. Minor overlap with the schema's enum list keeps it from 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?
States a specific resource (Islamic prayer times) with the exact prayers returned, both input modes (coordinates+IANA zone or known city), and the temporal scopes supported (one day, several days, whole month). The scope is instantly distinguishable from siblings like calc_hijri or time_world_clock.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is clear from the capability statement — you call this when you need prayer times for a place/time range, and the description explains the two input patterns (city shortcut vs. coordinates+timezone). It stops short of naming alternatives or stating exclusions (e.g., when to use calc_hijri alone for Hijri conversion), which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qibla_directionQibla directionARead-onlyIdempotent
Qibla direction (great-circle bearing from true north to the Kaaba in Makkah) and distance from any coordinates or a known city, with the compass point, a "face north, then turn right/left N°" instruction, and (if you give a device heading) how far to turn. Bearings are from TRUE north; a magnetic compass can differ by a few degrees. Web version: https://s3eidat.github.io/qibla-finder/
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Or a known city: amman, irbid, zarqa, aqaba, mecca, medina, riyadh, jeddah, jerusalem, gaza, damascus, beirut, baghdad, cairo, alexandria, dubai, abudhabi, doha, kuwait, manama, muscat, istanbul, casablanca, tunis, algiers, khartoum, karachi, lahore, dhaka, delhi, kualalumpur, jakarta, tehran, london, paris, berlin, newyork, chicago, toronto, losangeles, sydney. | |
| heading | No | Optional: the direction you are facing now (degrees from north) to get a turn instruction. | |
| latitude | No | Latitude in degrees (−90..90). | |
| longitude | No | Longitude in degrees (−180..180). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so safety is covered. The description adds genuine value with the true-north vs magnetic-compass caveat and a preview of result fields, but it says nothing about output structure or precision limits beyond that caveat.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core definition and input modes are front-loaded in a single dense sentence with no filler. The trailing web-version URL is marginal but harmless; the sentence is long yet every clause carries payload.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden and discharges most of it by naming the bearing, distance, compass point and turn instruction. For a stateless read-only calculator this is largely sufficient, though the absence of an explicit success/error shape is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds information the schema lacks: that city and coordinates are alternative inputs rather than cumulative ones, and that heading exists specifically to produce a turn instruction. That resolves an ambiguity the flat property list leaves open.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource: computes the great-circle bearing and distance from true north to the Kaaba from coordinates or a named city, and enumerates the derived outputs (compass point, turn instruction, correction from a device heading). No sibling tool does anything similar, so it is instantly distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Makes the two input modes explicit ('any coordinates or a known city') and explains the optional heading as the trigger for the turn instruction, so an agent knows what to supply and what extra output it unlocks. It stops short of naming when not to use it or pointing at related tools like prayer_times.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qr_generateQR code generatorARead-onlyIdempotent
Make a QR code as SVG or PNG for a link, plain text, Wi-Fi login, contact card (vCard 3.0), email, SMS, phone call or map location. Same encoder as the website (qrcode.js: versions 1-40, error correction L/M/Q/H, smallest version that fits, best mask), UTF-8 so Arabic/emoji work. Options: size in px, quiet-zone margin, colours, square/rounded/dots modules, and an optional centre logo (forces level H). Returns the file path, the exact encoded text, version, module count and contrast warnings. Max about 2.9 KB of data at level L. Web version: https://s3eidat.github.io/qr-studio/
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | email: recipient address. | |
| ecc | No | Error correction: L 7%, M 15% (default), Q 25%, H 30%. A logo forces H. | M |
| url | No | url: web address; "https://" is added when no scheme is given. | |
| body | No | email: message body. | |
| logo | No | Optional centre logo image (path or base64, max 5 MB). Covers ~22% of the code; error correction becomes H. | |
| mode | No | Encoding mode. "byte" (UTF-8, what the website uses), "auto" (numeric/alphanumeric when the text allows, smaller codes), or force one. | byte |
| size | No | Image width/height in px (default 1024). | |
| ssid | No | wifi: network name. | |
| text | No | text: any text (encoded exactly as given). | |
| type | No | What the code holds. Default: "url" if url is given, else "text". | |
| No | vcard: email address. | ||
| label | No | geo: optional place label (?q=). | |
| phone | No | vcard/sms/tel: phone number. | |
| shape | No | Module shape. Rounded/dots also round the three finder squares. | square |
| format | No | Output format. | png |
| hidden | No | wifi: the network is hidden. | |
| margin | No | Quiet zone in modules (default 4; under 2 may not scan). | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| address | No | vcard: address. | |
| company | No | vcard: company. | |
| message | No | sms: message text. | |
| subject | No | email: subject. | |
| version | No | QR version 1-40 (size), or 0 = smallest that fits (default). | |
| website | No | vcard: website. | |
| jobTitle | No | vcard: job title. | |
| lastName | No | vcard: last name. | |
| latitude | No | geo: latitude, -90..90. | |
| password | No | wifi: password (ignored for open networks). | |
| security | No | wifi: WPA (WPA/WPA2/WPA3, default), WEP, or nopass (open). | |
| firstName | No | vcard: first name. | |
| longitude | No | geo: longitude, -180..180. | |
| background | No | Background colour, hex (default #ffffff). | #ffffff |
| foreground | No | Module colour, hex (default #0d0f12). | #0d0f12 |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, idempotent, non-open-world operation, but the description adds substantial behavioral context beyond them: the underlying encoder and version range, UTF-8 support for Arabic/emoji, logo forcing error correction H, practical data limit (~2.9 KB at L), and exact return fields including contrast warnings. This is unusually rich disclosure for a generation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and supported payload types, followed by encoding details, options, and return values in a logical flow. It is dense but nearly every sentence carries useful information; the only minor cost is that the paragraph is long for a single description block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 34-parameter tool with no output schema, the description does the important supplementary work: it explains the return payload (file path, encoded text, version, module count, contrast warnings), the default output folder behavior, and practical constraints like data size and logo/ECC interaction. Parameter-level details are fully covered by the schema, so only deeper combination semantics are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description still adds value by summarizing the option groups and, importantly, noting cross-parameter effects such as a logo forcing level H and the maximum data capacity. It does not document every parameter, but the schema already handles the rest in detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Make a QR code as SVG or PNG") and enumerates the payload types it supports, from URL to vCard to geo. An agent can immediately distinguish it from unrelated file or text utilities and understand exactly what it produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context by listing supported QR content types and options, but it never mentions when to prefer a sibling tool such as qr_wifi or barcode_generate. The overlap with qr_wifi is left for the agent to infer, so the routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qr_readQR code readerARead-onlyIdempotent
Read (decode) a QR code from an image file: photo, screenshot or scan (PNG, JPEG, WebP, GIF, TIFF, AVIF, SVG). Uses jsQR like the website, trying several sizes and inverted (light-on-dark) codes. Returns the text plus what it is (Link, Wi-Fi, Contact, Email, SMS, Phone, Location, Event or Text) with parsed fields, and safety notes for links (http, hidden @ user part, punycode lookalikes, bare IPs, odd ports). Links are never opened. Reads one code per image. Web version (with camera): https://s3eidat.github.io/qr-scanner/
| Name | Required | Description | Default |
|---|---|---|---|
| image | Yes | The image containing a QR code: a local file path (absolute, or relative to the server's --root) or base64 data (raw or a data: URI). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/openWorld=false, yet the description adds real behavioral context: tries multiple sizes and inverted codes, never opens links, and returns safety notes for suspicious URLs. It stops short of describing failure behavior when no code is present in the image.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core verb and input are front-loaded and every major sentence carries information. Minor waste remains in 'Uses jsQR like the website' and the trailing web-version URL, which don't help an agent choose or call 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?
There is no output schema, and the description compensates by describing the return payload: decoded text, a content classification (Link, Wi-Fi, Contact, Email, etc.), parsed fields, and link safety notes. That is sufficient for an agent to know what to expect without any structured output definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter is fully described in the schema (local path or base64/data URI, relative to --root), so baseline is 3. The description earns an extra point by enumerating accepted image formats (PNG, JPEG, WebP, GIF, TIFF, AVIF, SVG), which the schema does not specify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (read/decode) and resource (QR code) bound to an input type (image file), and enumerates the accepted formats. It implicitly separates itself from qr_generate/barcode_generate by being a decoder, but never names the nearest sibling (qr_wifi) or states the boundary explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — 'Read (decode) a QR code from an image file' tells an agent what the tool consumes, and 'Reads one code per image' is a limitation rather than selection guidance. There is no statement of when to prefer this over qr_wifi, qr_generate, or ai_ocr for extracting text from an image.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qr_wifiWi-Fi QR code and cardARead-onlyIdempotent
Make a Wi-Fi QR code that phones join by scanning (WPA/WPA2/WPA3, WEP or open; hidden networks), as PNG or SVG, or a printable PDF card like the website's: coloured header with the Wi-Fi symbol, "Scan to join", the QR code, network name and (optionally) the password, on an A6 card, an A4 poster, or A4 sheets of 4 or 9 cards to cut. Special characters (; , : " ) are escaped. The PDF card uses English labels and Latin text only for now. Web version: https://s3eidat.github.io/wifi-card/
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | PNG/SVG: image size in px. | |
| ssid | Yes | Network name (SSID). | |
| theme | No | PDF: card colour; "saver" is an ink-saving outline. | teal |
| title | No | PDF: heading on the card (default "Wi-Fi"). | |
| format | No | pdf = printable card sheet (default); png/svg = just the QR code. | |
| hidden | No | The network is hidden (not broadcast). | |
| layout | No | PDF: a6 = one A6 card; a4 = one A4 poster; a4x4 = A4 sheet of 4 cards (default); a4x9 = A4 sheet of 9 small cards. | a4x4 |
| margin | No | PNG/SVG: quiet zone in modules. | |
| output | No | Where to write the result: a file path, or a folder ending in "/". Default: the server output folder (a temp folder unless --out-dir is set). | |
| password | No | Wi-Fi password (ignored for open networks). | |
| security | No | WPA (WPA/WPA2/WPA3, default), WEP, or nopass (open network). | WPA |
| returnBase64 | No | Also return the output as base64 in the result (only for small files). Default false. | |
| showPassword | No | PDF: print the password under the code. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, closed-world), so the bar is lower; the description still adds real context: special characters (; , : " \) are escaped, PDF labels are English/Latin-only for now, and the card mirrors the website's design. It stops short of describing the returned value or where the file lands by default, though the output param partly covers the latter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the body is a single sprawling sentence that re-enumerates schema-defined options (A6/A4/A4x4/A4x9, colour header, password placement) and tacks on a web link. Tightening the option list would make it easier to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter generator with no output schema, the description covers formats, security modes, hidden networks, escaping and a known localization limitation. The main omission is what the tool returns (file path vs. base64) and default output location, which the schema only partially implies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, which sets the baseline at 3. The description reinforces format/layout/theme choices but adds no syntax or edge-case detail (e.g. size vs. margin interaction, base64 size limits) beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Make a Wi-Fi QR code") with the exact scope: security types supported, hidden networks, and the three output formats (PNG/SVG/PDF card). This clearly separates it from the generic qr_generate sibling, which would not know about Wi-Fi payloads or printable card layouts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the phrase "that phones join by scanning" and by the format/layout enumeration. There is no explicit statement of when to choose this over qr_generate or barcode_generate, and no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
random_diceDice roller, coin flip, random numbersARead-only
Roll dice with standard notation (2d6+3, d20, d%, 4d6dl1 / "4d6 drop lowest", 2d20kh1 advantage, 2d20kl1, 5d10dh2; up to 100 dice per term, 2–1000 sides, 20 terms), flip coins (counts + streaks), or draw random whole numbers in a range (optionally unique and sorted, up to 10,000). Crypto random with rejection sampling (no modulo bias); optional seed for reproducible results. Web version: https://s3eidat.github.io/dice-roller/
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | numbers: largest value (inclusive). | |
| min | No | numbers: smallest value (inclusive). | |
| mode | No | What to do. | dice |
| seed | No | Optional seed for a reproducible result (same seed + same input = same output). Omit for true crypto randomness. | |
| sort | No | numbers: sort ascending. | |
| count | No | numbers: how many numbers. | |
| flips | No | coin: how many coins to flip. | |
| rolls | No | dice: how many times to roll the expression. | |
| unique | No | numbers: no repeats. | |
| notation | No | dice: the dice notation, e.g. "3d8+2d6+4". | 2d6 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the annotations: it discloses the RNG quality (crypto random with rejection sampling, no modulo bias), the seed mechanism that explains reproducible-vs-true-random behavior, and hard limits (100 dice per term, 2–1000 sides, 20 terms, 10,000 numbers). It stops short of stating error behavior for malformed notation or what the seed collision semantics are, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded — mode capabilities come first, quality/seed guarantees and limits follow. The trailing web-version URL is arguably filler for an agent choosing a tool, but the rest of the text is high information density with little 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 10 parameters, no output schema, and three distinct modes, the description covers inputs thoroughly but says nothing about what comes back — totals, individual die faces, dropped dice, streaks, or error payloads for invalid notation. That return-shape gap is the one thing an agent must still guess at.
Complex tools with many parameters or behaviors need more documentation. Simple 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 already 100%, so the baseline is 3; the description earns a step up by expanding the `notation` parameter far beyond the schema's single example (d%, dl/kh/kl/dh modifiers) and by restating the numeric-mode constraints on unique/sorted/count. It adds genuine grammar knowledge the schema does not carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names three specific capabilities (dice rolling, coin flipping, random number generation) and enumerates the exact notation grammar supported (2d6+3, d20, d%, 4d6dl1, 2d20kh1, 5d10dh2). An agent can tell instantly this is a randomness generator rather than a picker, team-splitter, or password 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?
Usage context is clear through the mode enumeration and per-mode constraints (dice notation vs. coin counts/streaks vs. numeric ranges with unique/sort). However, it never names an alternative or exclusion — e.g. when to prefer random_pick or random_teams over this tool is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
random_pickWheel picker (random pick)ARead-only
Pick a random winner (or several, without repeats, like spinning with "remove winner" on) from a list of names, or shuffle / sort the whole list. Fair: crypto random with rejection sampling. Entries are trimmed, cut to 100 characters, max 500; at least 2 needed. Optional seed for a reproducible draw. Web version: https://s3eidat.github.io/wheel-picker/
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "pick" winners, "shuffle" the list, or "sort" it A→Z. | pick |
| seed | No | Optional seed for a reproducible result (same seed + same input = same output). Omit for true crypto randomness. | |
| text | No | Or: the entries as text, one per line. | |
| count | No | How many winners to pick (each winner is removed before the next spin). | |
| items | No | The entries, one per array item. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses real behavioral detail: crypto randomness with rejection sampling, trimming and 100-character truncation of entries, a 500-entry cap and 2-entry minimum, and the seed's reproducibility semantics. This is exactly the kind of constraint an agent cannot infer from structured fields. The seed case is a slight nuance against idempotentHint=false but is consistent for unseeded calls, so it is not a 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 core action and its variants come first, with fairness and constraint details following; almost every clause carries information. The parenthetical nesting makes it a slightly dense single run-on sentence, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description implies but does not state the shape of the return value (selected winners vs. reordered full list). Input constraints, randomness guarantees and the seed behavior are otherwise well covered for a 5-parameter, all-optional 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 the baseline is 3; the description earns above that by adding semantics the schema lacks — the trimming/truncation of entries, the minimum of 2 entries, and the fact that count removes each winner before the next draw. It does not explain how 'text' and 'items' interact when both are supplied, which is the one ambiguity left.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource pair ('Pick a random winner... from a list of names') and enumerates the three operating modes (pick, shuffle, sort), so an agent can tell exactly what the tool produces. It does not name any sibling it should be preferred over (e.g. random_teams, secret_santa_draw, random_dice), so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the situations the tool serves: picking one or several winners without repeats, or shuffling/sorting an entire list. The 'remove winner' analogy makes the multi-pick behavior concrete. No explicit when-not-to-use or alternative-tool routing is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
random_teamsTeam makerARead-only
Split a list of people into fair random teams: choose the number of teams or people per team. Add a skill level ("Ali, 5" / "Sara: 3") and teams are balanced by total skill (people without one count as the average). Team names: numbers, letters, colours, animals or your own. Crypto-random shuffle; optional seed for a reproducible split. Max 2000 people, 100 teams. Web version: https://s3eidat.github.io/team-maker/
| Name | Required | Description | Default |
|---|---|---|---|
| num | No | Number of teams (min 2) or people per team (min 1), see mode. | |
| mode | No | "teams": make `num` teams; "per": `num` people per team. | teams |
| seed | No | Optional seed for a reproducible result (same seed + same input = same output). Omit for true crypto randomness. | |
| text | No | Or: people as text, one per line. | |
| naming | No | Team names: Team 1…, Team A…, colours, animals, or customNames. | num |
| people | No | People, one per item, optionally "Name, skill" (skill 0–100). | |
| balance | No | Balance teams by skill when skills are given. | |
| customNames | No | naming=custom: team names in order (missing ones fall back to "Team N"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-open-world, and non-idempotent behavior, but the description adds key operational facts: crypto-random shuffle, optional seed reproducibility, skill averaging for unskilled people, and hard limits of 2000 people/100 teams. It does not describe error handling or output shape, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loads the core purpose, sizing modes, balancing, naming, and constraints. It includes a web URL that is not essential to tool invocation, keeping it from a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eight-parameter tool with all-optional inputs and no output schema, the description covers the important input semantics and limits. It leaves the exact return shape implicit and does not address invalid input handling, but annotations and schema cover safety and parameter definitions.
Complex tools with many parameters or behaviors need more documentation. Simple 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 still adds meaning by showing skill syntax ('Ali, 5' / 'Sara: 3'), explaining how missing skills are treated, and clarifying naming options. It does not deeply cover every parameter such as text, balance, or customNames fallback, so 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 opening sentence gives a specific verb, resource, and output: 'Split a list of people into fair random teams.' It also immediately scopes the two sizing modes, making the tool's purpose distinct from single-pick random 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 establishes the use case and explains the two sizing modes, but it does not explicitly say when to choose this over sibling tools like random_pick or secret_santa_draw. Usage is implied rather than guided with exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
regex_testRegex testARead-onlyIdempotent
Run a JavaScript regular expression against text: every match with its index, length, numbered and named capture groups, plus an optional replace preview ($1, $, $&, $`, $', $$). Flags g i m s u y (and d, v). Runs in an isolated worker with a timeout (default 1.5 s) so catastrophic backtracking is reported instead of hanging. Lists up to 5000 matches. Web version: https://s3eidat.github.io/regex-playground/
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to search. | |
| flags | No | Regex flags, default "g". | g |
| limit | No | Max matches to include in the result (count is still total). Default 500. | |
| pattern | Yes | The regex source, without slashes, e.g. "(\\d+)-(?<w>[a-z]+)". | |
| replace | No | Replacement string for a replace preview (JavaScript String.replace syntax). | |
| timeoutMs | No | Kill the regex after this many ms. Default 1500. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: execution happens in an isolated worker, catastrophic backtracking is caught and reported rather than hanging, there is a default 1.5 s timeout, and matches are capped at 5000. These are exactly the traits an agent needs to predict failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, each carrying distinct information: what it returns, replacement syntax, flag/timeout behavior, and match cap. Capability is front-loaded and nothing repeats structured fields verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description fully describes the return payload (matches with index, length, numbered and named capture groups, replace preview). Combined with the timeout and match-cap disclosures, an agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds value by spelling out the accepted flag set (g i m s u y, plus d and v) and the replacement token syntax ($1, $<name>, $&, $`, $', $$), which the schema only alludes to as 'JavaScript String.replace syntax'. The 'up to 5000 matches' phrasing is slightly loose against the schema's default limit of 500.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the specific verb and resource ('Run a JavaScript regular expression against text') and immediately enumerates what is returned — matches, index, length, capture groups, optional replace preview. An agent can distinguish this from text_diff, hash_compute, or json_schema_validate without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies the use case (testing a regex and previewing replacements) but gives no explicit when-to-use vs alternatives, no prerequisites, and no exclusions. The trailing web-version URL is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
secret_santa_drawSecret Santa drawARead-only
Draw Secret Santa (gift exchange) pairs: everyone gives to exactly one other person and receives from one, never themselves. Exclusions (couples, housemates…) block a pair both ways. Checks exactly whether a draw is possible and explains why not (and which exclusion to drop). Crypto random and uniform; optional seed. Up to 200 people. Nothing is emailed: hand each giver only their own line. Optional budget, date and message are echoed for slips. Web version: https://s3eidat.github.io/secret-santa/
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Optional exchange date, YYYY-MM-DD. | |
| seed | No | Optional seed for a reproducible result (same seed + same input = same output). Omit for true crypto randomness. | |
| names | Yes | Participants (an item may also hold several names separated by commas or new lines). | |
| budget | No | Optional gift budget, e.g. "20 JD". | |
| message | No | Optional note for everyone. | |
| exclusions | No | Pairs of names who must not draw each other, e.g. [["Omar","Sara"]]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint annotations, the description discloses that randomness is crypto-uniform, that a seed makes the result deterministic, that exclusions block both directions, that feasibility is checked with an explanation of which exclusion to drop, and that optional budget/date/message are merely echoed. This is exactly the kind of behavior an agent needs and the annotations do not supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is dense and front-loaded, leading with the core draw semantics before constraints and caveats. Some clauses (the trailing web URL, the slip echo detail) are secondary but still earn their place for an agent reasoning about side effects.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still conveys what an agent needs: the pairing result, the echoed optional fields, and the failure/explanation path when no valid draw exists. It stops short of describing the exact response shape (e.g. how pairs are keyed), which is the only remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description genuinely adds semantics: exclusions are bidirectional constraints, seed yields identical output for identical input, and budget/date/message are pass-through echoed values rather than inputs to the draw. Only the comma/newline multi-name item behavior is left to 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 first sentence states a specific verb and resource ('Draw Secret Santa (gift exchange) pairs') and immediately defines the invariants (one give, one receive, never self). It is clearly distinguishable from close siblings like random_teams or random_pick by the exclusion-pair semantics alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operating context: the 200-person cap, the seed option for reproducibility, and the explicit operational note 'Nothing is emailed: hand each giver only their own line.' It does not name alternatives (e.g. random_teams) or state when-not to use it, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sql_formatSQL format / minifyARead-onlyIdempotent
Format SQL (one clause per line, indented sub-queries, CASE blocks, JOIN … ON with AND/OR, CREATE TABLE column lists) or minify it to one line per statement. Options: keyword case (UPPER, lower, keep), indent (2, 4, tab), trailing or leading commas, keep/drop comments when minifying. Dialect-neutral tokenizer: understands -- and /* */ comments, '' and E''' strings, "x", x and [x] identifiers, $$ dollar quotes, ::casts, JSON operators, :name/$1/? parameters. Only re-spaces; never runs anything. Give "text" or a file "path". Web version: https://s3eidat.github.io/sql-format/
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "format" (default) or "minify". | format |
| path | No | Or: a path to a .sql file (UTF-8; use this for big inputs). | |
| text | No | The SQL as inline text. | |
| commas | No | Put list commas at line ends (trailing) or starts (leading). | trailing |
| indent | No | Indentation: 2, 4 or "tab". | 2 |
| output | No | Optional: also write the result to this file path (or folder ending in "/"). The result text is then left out of the reply. Results over 1,000,000 characters are always written to a file. | |
| keywordCase | No | Keyword and built-in function case. | upper |
| keepComments | No | Minify only: keep comments (as /* */). Optimizer hints /*+ */ and /*! */ are always kept. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and closed-world behavior, and the description adds meaningful context: the dialect-neutral tokenizer supports comments, strings, identifier quoting, dollar quotes, casts, JSON operators, and parameters. The statement "Only re-spaces; never runs anything" directly reinforces the safety profile beyond what the 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 front-loaded with the primary format/minify purpose, then moves into options, dialect support, safety behavior, and input methods. It is dense but well structured; the web-version link and tokenizer detail are useful context rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a formatting tool with eight optional parameters and no output schema, the description covers purpose, modes, input sources, formatting options, dialect support, and read-only safety. It could more explicitly state the return value, but the output parameter schema already explains when result text is returned versus written to a file.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage and already documents all eight parameters, including enums, defaults, and output behavior. The description reinforces the available options but adds little semantic detail beyond what the schema already says, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a precise verb and resource: format SQL or minify it. It immediately distinguishes the two modes and lists concrete formatting behaviors such as clause-per-line, indented subqueries, CASE blocks, and JOIN … ON handling, so an agent knows exactly what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains how to choose between formatting and minifying via the mode option, and how to provide input using inline text or a file path. It also says the tool only re-spaces and never runs anything, which implicitly distinguishes it from SQL execution siblings such as ai_sql_query, though it does not explicitly name that alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subnet_calcSubnet calculator (IPv4 / IPv6)ARead-onlyIdempotent
IPv4: from "192.168.1.0/26", "10.0.0.5 255.255.255.0" or a wildcard mask, get network, broadcast, first/last host, usable and total addresses, netmask, wildcard, class, address type (private, CGNAT, loopback, documentation…), integer/hex/binary forms; optionally split into N equal subnets or allocate VLSM blocks by host counts ("Sales:50, Ops:20"). /31 and /32 follow RFC 3021. IPv6: compressed (RFC 5952) and expanded forms, network, first/last address, address count, number of /64s, reverse DNS name and type. Web version: https://s3eidat.github.io/subnet-calc/
| Name | Required | Description | Default |
|---|---|---|---|
| vlsm | No | IPv4: VLSM host requirements, e.g. "50, 20, 10" or "Sales:50, Ops:20". Largest first, each block aligned. | |
| split | No | IPv4: split the network into at least this many equal subnets (rounded up to a power of two; first 4096 listed). | |
| prefix | No | Prefix length to use when "address" has none (default /24 for IPv4, /128 for IPv6), or to override it. | |
| address | Yes | IPv4 or IPv6 address, optionally with /prefix (or an IPv4 dotted mask after a space or slash). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/no-network profile, and the description adds real behavioral detail beyond them: /31 and /32 follow RFC 3021, default prefixes (/24 IPv4, /128 IPv6), and that split lists at most the first 4096 subnets. It does not describe invalid-input behavior or whether split and VLSM can be combined, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph cleanly split into "IPv4: …" and "IPv6: …" with the highest-value output list front-loaded. Nearly every clause carries information, though the trailing web-version URL is low-value for an agent and the single-block layout makes it slightly harder to scan than bulleted feature groups.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by enumerating the return fields for both families, including edge details (RFC 5952 compression, /64 count, reverse DNS name, 4096-subnet listing cap). Given the read-only annotation set and 100% schema coverage, an agent has enough to invoke this correctly without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple 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 still adds value by noting wildcard-mask input (not mentioned in the schema entry for `address`) and by illustrating VLSM syntax ("Sales:50, Ops:20") and RFC 3021 handling that conditions the prefix parameter. It stops short of explaining parameter interactions, e.g., split + vlsm together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (subnet calculation) and enumerates exactly what it returns: network, broadcast, first/last host, usable/total addresses, netmask, wildcard, class, address type. It also names the two optional modes (equal split, VLSM allocation) and covers both IPv4 and IPv6, so an agent knows precisely when this tool applies versus unrelated siblings like ip_in_range or base_convert.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear usage context is conveyed through concrete accepted input formats ("192.168.1.0/26", "10.0.0.5 255.255.255.0", wildcard mask) and the optional modes ("optionally split into N equal subnets or allocate VLSM blocks by host counts"). It does not state exclusions or name alternative tools for edge cases (e.g., plain IP-in-range checks), which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_arabicArabic text toolsARead-onlyIdempotent
Arabic text utilities. mode "clean": remove tashkeel (harakat and Quranic marks, optionally keeping shadda), remove tatweel (kashida), normalise letters (alef with hamza/madda/wasla → bare alef; alef maqsura and Farsi ya → ya; ta marbuta → ha; hamza on waw/ya → waw/ya), switch Latin , ; ? to Arabic punctuation, and convert digits (Arabic-Indic ↔ Western). mode "arabizi": turn Arabizi / Franco-Arabic chat text (mar7aba, 3arabi, 5ala9, el bait) into Arabic script. Returns the result with letter/word/character counts. Give "text" or a text file "path". Web version: https://s3eidat.github.io/arabic-tools/
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "clean" = clean & normalise Arabic text (default); "arabizi" = Arabizi (Latin letters + numbers) → Arabic script. | clean |
| path | No | Or: a path to a UTF-8 text file. | |
| text | No | The text to transform. | |
| digits | No | clean: keep digits, convert Arabic-Indic/Persian digits to 0-9 ("western"), or 0-9 to Arabic-Indic ("arabic"). | keep |
| output | No | Optional: write the result to this file path (or folder ending in "/") instead of returning it. | |
| keepShadda | No | clean: when removing tashkeel, keep the shadda. | |
| normalizeYa | No | clean: alef maqsura and Farsi ya → Arabic ya. | |
| normalizeAlef | No | clean: alef with hamza above/below, madda or wasla → bare alef. | |
| removeTatweel | No | clean: remove tatweel / kashida (default true). | |
| taMarbutaToHa | No | clean: ta marbuta → ha. | |
| normalizeHamza | No | clean: hamza on waw → waw, hamza on ya → ya. | |
| removeTashkeel | No | clean: remove tashkeel / harakat (default true). | |
| arabicPunctuation | No | clean: Latin comma, semicolon and question mark → Arabic ones. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and closed-world behavior, and the description adds useful operational context: it lists the transformations, says it returns letter/word/character counts, and notes that results can be written to an output path. It does not discuss limits or failure cases, but the safety profile is sufficiently covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and mode definitions, and the dense operational detail is justified by the two-mode, 13-parameter tool. It could be more scannable with structured formatting, and the trailing web-version note is not essential to invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 optional parameters, full schema description coverage, and no output schema, the description is largely complete: it covers both modes, input methods, return counts, and output-file behavior indirectly. Minor gaps remain around parameter interactions and edge cases, but the schema handles those details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 13 parameters are already documented in the schema. The description adds some mode-level context and names several transformations, but it largely repeats schema content and does not add syntax or interaction details beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource, Arabic text, and enumerates concrete transformations for both the "clean" and "arabizi" modes. It clearly distinguishes the two modes from each other, though it does not explicitly contrast the tool with siblings such as text_clean.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what each mode does and that the caller should provide "text" or a file "path", which implies when each mode is appropriate. However, it gives no explicit when-to-use guidance, exclusions, or alternatives such as text_clean for non-Arabic cleanup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_caseCase convertARead-onlyIdempotent
Convert text case: upper, lower, title (smart: keeps small words lower and iPhone/NASA as typed), sentence, camel, pascal, snake, kebab, constant, alternate, inverse. Works line by line and handles Unicode (Arabic, accents, ß). Web version: https://s3eidat.github.io/case-convert/
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Target case. | |
| text | Yes | Text to convert. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered. The description adds useful behavior beyond annotations: line-by-line conversion, Unicode handling for Arabic/accents/ß, and smart title casing that preserves small words and mixed-case tokens like iPhone/NASA. It does not discuss empty input or error behavior, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a compact, front-loaded paragraph that lists modes first and behavioral notes second. The trailing web-version URL is non-essential but minor, and every other clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter pure function with full annotation coverage and no output schema, the description provides enough context to call it correctly: all modes, smart title behavior, line-by-line processing, and Unicode handling. The only minor omission is an explicit statement of the return value, though the converted-text output is self-evident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the mode enum already lists valid values, so the baseline is 3. The description earns extra credit by explaining the semantics of 'title' mode (smart casing, small-word handling, preserving iPhone/NASA) and by noting line-by-line and Unicode behavior that the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Convert text case') and enumerates all conversion modes, making it immediately distinguishable from siblings like text_slugify or text_fancy. An agent can tell exactly what the tool produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool by naming every supported case conversion, including smart title behavior. It does not explicitly name alternatives or exclusions (e.g., when to prefer text_slugify or text_fancy), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_citationCitation generatorARead-onlyIdempotent
Format references from structured fields in APA 7, MLA 9, Chicago author-date (17th), Harvard (Cite Them Right) or IEEE, for books, book chapters, journal articles, web pages, newspaper/magazine articles, videos and reports. Handles author-count rules (et al.), initials, organisations as authors, editions, page ranges (MLA 127-53), DOIs, URLs and access dates, and title case for MLA/Chicago/IEEE. Returns each citation as plain text and HTML (italics as ), the in-text citation, missing-field hints, and the whole list as a bibliography sorted for the style (numbered for IEEE). Web version: https://s3eidat.github.io/citation-gen/
| Name | Required | Description | Default |
|---|---|---|---|
| style | Yes | Citation style: apa, mla, chicago, harvard or ieee. | |
| sources | Yes | One or more sources. | |
| autoCase | No | Apply title case where the style wants it (MLA, Chicago, IEEE book titles). Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly/idempotent/closed-world, but the description goes further and describes the return payload in detail (plain text and HTML with <i> italics, in-text citation, missing-field hints, sorted bibliography, numbered for IEEE). It also discloses edge-case handling such as et al. rules, organisation authors, edition elision and title case, which an agent needs to trust the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A dense two-sentence block that front-loads styles and source types before edge-case behaviour and the return shape. It is long but nearly every clause carries information; the trailing web-version URL is the only non-essential element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully documents the return structure and per-style sorting, and it covers the tricky input semantics of a single nested-array parameter. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema: author-count rules, initials, organisation-as-author handling, page-range formatting (MLA 127-53), access dates and MLA/Chicago/IEEE title casing. It does not explain the autoCase toggle's interaction with styles in 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?
States a specific verb+resource: format references in five named styles for eight named source types. No sibling tool overlaps with citation formatting, so the agent can route here unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The enumerated styles and source types effectively define when this tool applies, and the web-version URL gives an escape hatch for interactive use. It stops short of an explicit 'do not use for X' or a contrast with an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_cleanText cleanerARead-onlyIdempotent
Clean up text line by line with a fixed pipeline (same order as the website): strip HTML tags and decode entities → remove emojis → trim each line → collapse repeated spaces → remove empty lines → remove duplicate lines (optionally ignoring case) → sort (A–Z, Z–A, natural, by length) → reverse → shuffle (seedable) → add line numbers. Returns the cleaned text plus counts, or writes it to a file when "output" is given. Give "text" or a text file "path". Web version: https://s3eidat.github.io/text-cleaner/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a path to a UTF-8 text file. | |
| seed | No | Seed for a reproducible shuffle (default: random). | |
| sort | No | Sort lines: none (default), az, za, natural (item 2 before item 10), length (shortest first). | none |
| text | No | The text to clean. | |
| trim | No | Trim spaces at the start and end of each line (default true). | |
| output | No | Optional: write the cleaned text to this file path (or folder ending in "/") instead of returning it. | |
| reverse | No | Reverse the line order (default false). | |
| shuffle | No | Shuffle the lines (default false). | |
| stripHtml | No | Strip HTML tags (drops script/style/comments, block ends become line breaks) and decode entities (default false). | |
| ignoreCase | No | When removing duplicates, treat lines that differ only in case as duplicates (default false). | |
| numberLines | No | Prefix each line with its number ("1. ", padded) (default false). | |
| removeEmoji | No | Remove emojis (©, ® and ™ are kept) (default false). | |
| collapseSpaces | No | Collapse runs of spaces/tabs into one space (default true). | |
| removeDuplicates | No | Remove duplicate lines, keeping the first (default false). | |
| removeEmptyLines | No | Remove empty (whitespace-only) lines (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The pipeline ordering, the seed-for-reproducible-shuffle and the file-write behavior are all valuable disclosures that the annotations do not carry. However, two of them conflict with the annotation block: 'writes it to a file when "output" is given' is a side effect against readOnlyHint=true, and the default random shuffle (unless seed is set) makes repeated calls with identical arguments non-identical against idempotentHint=true. The disclosure is accurate and useful, which keeps this above 1, but the mismatch with the declared hints is a real safety signal an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the pipeline, then the return/write behavior, then input sourcing and the reference URL — a sensible order with no filler. The pipeline is delivered as one very long run-on sentence, which is dense but each clause is load-bearing (the ordering is the main information the schema lacks).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter, no-output-schema tool, the description covers what is returned ('the cleaned text plus counts'), what happens when 'output' is set, and the order in which options are applied. It does not address edge cases such as what counts are returned exactly or encoding/error behavior on a bad path, but nothing essential to making a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 and the schema already documents each flag, including the ©/®/™ emoji exception and the natural-sort ordering. The description still adds value the schema does not: an either/or relationship between 'text' and 'path', the fixed execution order among the flags (which determines output when several are combined), and the return-vs-file behavior of 'output'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource (clean text, line by line) and enumerates the exact operation set, in execution order, so an agent can distinguish it from single-purpose siblings like text_case, text_slugify or text_replace-style tools. The closing line pins the parity with the website and the two input modes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the input modes ('Give "text" or a text file "path"') and that output can go to a file, which is genuine routing guidance. It gives no when-not guidance and never names an alternative sibling (e.g. text_case or text_slugify) for single-operation transforms, so selection against the ~130 siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_diffDiff two textsARead-onlyIdempotent
Compare two texts line by line (Myers diff) and return a unified diff (3 lines of context, like diff -u), counts of added/removed/unchanged lines, and change blocks where each removed line is paired with the added line that replaced it and the changed words are marked [-old-] / {+new+}. Can ignore whitespace and case. Works with any language (Arabic included). Up to 50,000 lines per side. Web version: https://s3eidat.github.io/diff-view/
| Name | Required | Description | Default |
|---|---|---|---|
| nameA | No | Label for the "---" header (default "original"). | |
| nameB | No | Label for the "+++" header (default "changed"). | |
| changed | No | The changed text ("after"). | |
| original | No | The original text ("before"). | |
| wordDiff | No | Mark the changed words inside paired lines (default true). | |
| ignoreCase | No | Treat lines that differ only in letter case as equal. | |
| changedPath | No | Or: path to the changed text file. | |
| originalPath | No | Or: path to the original text file. | |
| ignoreWhitespace | No | Treat lines that differ only in spacing as equal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, closed-world), so the description spends its budget on operationally useful detail: 3 lines of unified-diff context, the [-old-]/{+new+} inline markers, added/removed/unchanged counts, and a hard 50,000-line-per-side limit. What's missing is any hint about the response envelope (field names/shape), which matters more here because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose, output format, limits and options are front-loaded in one dense sentence, followed by short supporting clauses. 'Works with any language (Arabic included)' and the demo URL are mildly peripheral but small enough not to bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no output schema, the description does the heavy lifting on return values, size limits and diff semantics, and annotations cover side-effect safety. The remaining gap is that zero parameters are required and nothing states that you must supply either the two text fields or the two path fields — an agent can call this with an empty object and get no warning from the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is already documented with defaults; the description only restates the whitespace/case toggles and the word-level marking behavior. It adds no semantics for the nameA/nameB header labels or for the mutually exclusive inline-text vs. *Path input modes, which is exactly the ambiguity the schema alone leaves open.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (compare), resource (two texts), algorithm (Myers diff), and output artifact (unified diff with counts and change blocks). This clearly separates it from ai_image_diff (images) and ai_text_similarity (scoring), though it never names a sibling explicitly to make the routing 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?
Usage is only implied by the verb 'compare' — there is no statement of when to prefer this over ai_text_similarity or which input mode (inline text vs. *Path file inputs) to pick. The mention that whitespace/case can be ignored hints at use cases (formatting-insensitive comparison) but stops short of guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_escapeEscape / unescape textARead-onlyIdempotent
Escape or unescape a string for a target: JSON (string body), JavaScript (incl. template literals), HTML, XML, URL (encodeURIComponent, optional form +), SQL (doubled quotes, optional MySQL backslashes and wrapping quotes), CSV field (RFC 4180; comma, semicolon or tab), regex, POSIX shell single quotes, C/C++, Java/C#, and Unicode escapes (\uXXXX, \u{X}, \UXXXXXXXX, &#xX;, U+XXXX). Options per target as on the website. Set "allTargets" to get the escaped form for every target at once. Web version: https://s3eidat.github.io/text-escape/
| Name | Required | Description | Default |
|---|---|---|---|
| form | No | url: form style, + for spaces. | |
| text | Yes | The text to escape, or the escaped text to unescape. | |
| wrap | No | sql: wrap in single quotes (unescape: strip them). | |
| ascii | No | json/js/html/c/java: also escape non-ASCII characters (c: as UTF-8 octal). | |
| every | No | unicode: escape every character, not only non-ASCII. | |
| mysql | No | sql: escape backslashes too (MySQL). | |
| named | No | html (with ascii): prefer named entities such as ©. | |
| target | Yes | Format: json, js, html, xml, url, sql, csv, regex, shell, c, java, unicode. | |
| delimiter | No | csv: field delimiter (comma, semicolon or tab). | , |
| direction | No | escape (default) or unescape. | escape |
| allTargets | No | escape only: also return the text escaped for every target. | |
| alwaysQuote | No | csv: always quote the field. | |
| unicodeFormat | No | unicode: u4 = \uXXXX (JS, JSON, Java), ubrace = \u{X} (ES6, Rust, Swift), u8 = \UXXXXXXXX (Python, C), html = &#xX;, uplus = U+XXXX. | u4 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and closed-world behavior, so the safety profile is covered. The description adds genuinely useful context (per-target option semantics, the allTargets fan-out mode) but defers key behavior to 'as on the website', which an agent inside the tool call cannot consult, and it omits error behavior for invalid escapes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The target list is front-loaded and useful, but the single run-on paragraph packs twelve formats plus options into one sentence and includes low-value filler like 'Options per target as on the website' and the external website URL, which do not help an agent invoke 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?
There is no output schema, and the description only partially compensates: it explains the allTargets return shape but never states that a normal call returns the single escaped/unescaped string, nor how errors (e.g. malformed escape sequence on unescape) are surfaced. For a 13-parameter tool this leaves a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description nudges above it by mapping targets to their characteristic options (JSON string body, SQL doubled quotes, CSV RFC 4180, unicode formats \uXXXX vs \UXXXXXXXX) in a way that orients the reader before they read the schema. It adds no new per-parameter meaning beyond the schema, keeping it from 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 names a specific verb (escape/unescape), the resource (a string), and enumerates the exact target formats supported. An agent can immediately tell this is a general-purpose escaper and distinguish it from narrower siblings like url_encode or base64_encode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states that `allTargets` produces output for every target at once and defaults `direction` to escape, which is light usage guidance. However, it never says when to prefer this tool over sibling utilities such as url_encode, url_decode, or sql_format, and offers no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_fancyFancy text (Unicode styles)ARead-onlyIdempotent
Restyle text with Unicode look-alike characters for bios and posts (28 styles): Bold, Italic, Bold italic, Script, Bold script, Fraktur, Bold fraktur, Double-struck, Sans-serif, Sans bold, Sans italic, Sans bold italic, Monospace, Circled, Circled dark, Squared, Squared dark, Parenthesized, Fullwidth, Small caps, Superscript, Upside down, Strikethrough, Underline, Double underline, Slashed, Overline, Wide spaced. Only Latin letters and digits change (other scripts such as Arabic and emoji pass through); some styles cover only capitals or only some symbols. Give one "style", or none to get every style. Up to 20,000 characters. Web version: https://s3eidat.github.io/fancy-text/
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to restyle. | |
| style | No | One style name (exact, e.g. "Bold", "Script", "Upside down"). Omit to get all styles. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, not open-world), and the description adds substantive behavior the agent cannot get elsewhere: Latin-only substitution, pass-through of other scripts and emoji, partial coverage for some styles (capitals/symbols only), and a 20,000-character cap. That is exactly the extra context this dimension rewards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The useful constraints are front-loaded in a single dense block, but roughly half the text is a verbatim restatement of the 28-value enum, which the schema already provides. Trimming that list would make the definition tighter without losing anything an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 behavior, limits, script scope, and per-style quirks thoroughly for a simple two-parameter transform. The only minor gap is that it doesn't say what the response looks like (presumably an object of style→text when no style is given), and there is no output schema to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the style enum already lists all 28 values with descriptions, so the schema carries the parameter semantics. The description's re-enumeration of the same styles adds no information beyond the enum; the only real addition, omit-for-all, is also already in the schema's style description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ("Restyle text with Unicode look-alike characters") plus the intended output domain (bios and posts) and the style count. An agent can immediately distinguish this from siblings like text_case or text_clean, which transform case/whitespace rather than substituting Unicode glyphs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"for bios and posts" gives a clear context, and the description explicitly explains the omit-style branch ("Give one style, or none to get every style"). It does not explicitly contrast with text_case/text_clean, which an agent might confuse it with, so no exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_layout_fixKeyboard layout fixer (EN ⇄ AR)ARead-onlyIdempotent
Fix text typed with the wrong keyboard layout between US English (QWERTY) and Arabic (101): "hgsghl ugd;l" becomes the Arabic greeting, and Arabic gibberish typed on English keys becomes "hello". Direction "auto" detects it; in mixed text only the words that look mistyped are converted (using small English/Arabic letter-pair models), so words that are already right stay as they are. Handles the shift layer (harakat, hamza forms), lam-alef keys and Caps Lock (all-caps Latin input is treated as lowercase). Web version: https://s3eidat.github.io/layout-fixer/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a path to a UTF-8 text file. | |
| text | No | The mistyped text. | |
| capsLock | No | Caps Lock was on: treat capital Latin letters as lowercase (detected automatically when all letters are capitals). | |
| direction | No | "auto" (default) detects; "ar" = typed on English keys, convert to Arabic; "en" = typed on Arabic keys, convert to English. | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety (readOnly, idempotent, closed-world); the description supplies the substantive behavior an agent cannot infer: auto-detection, partial conversion of only mistyped words in mixed text via letter-pair models, shift-layer/harakat and lam-alef handling, and Caps Lock normalization to lowercase. That is exactly the non-obvious semantics that determine whether the output is trustworthy.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the highest-signal example ('hgsghl ugd;l' → Arabic greeting) and then layers the caveats in a single dense paragraph. It is slightly overlong and the trailing web-version URL is incidental, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only transform the behavioral picture is complete. Two gaps remain: with zero required parameters it never says that either 'text' or 'path' must be supplied (and whether they are mutually exclusive), and with no output schema it does not indicate the return shape (plain converted string vs. per-word results).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters, their defaults and the direction enum are already fully documented structurally. The description reinforces direction='auto' with the mixed-text nuance, but adds little parameter-level detail beyond what the schema states; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (fix text typed with the wrong keyboard layout) and pins the exact domain (US QWERTY ⇄ Arabic 101) with bidirectional concrete examples. This clearly separates it from generic siblings like text_arabic or text_clean, which do not remap keystrokes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trigger condition is unmistakable ('Fix text typed with the wrong keyboard layout') and the description explains what happens in the ambiguous mixed-text case, which is where an agent would otherwise hesitate. It stops short of naming alternatives or stating when NOT to use it (e.g. pure transliteration or spell correction).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_loremLorem ipsum generatorARead-only
Generate placeholder text: classic Lorem ipsum, readable English filler, or Arabic filler. Choose paragraphs (max 100), sentences (max 500) or words (max 10000); optionally start with the classic opener and wrap paragraphs in tags. Give a seed for repeatable output (the same seed gives the same text). Writes a .txt/.html file instead when "output" is given. Web version: https://s3eidat.github.io/lorem-gen/
| Name | Required | Description | Default |
|---|---|---|---|
| html | No | Wrap each paragraph in <p>…</p>. | |
| seed | No | Seed for repeatable output (default: random). | |
| unit | No | What "count" counts. | paragraphs |
| count | No | How many paragraphs / sentences / words (clamped to the unit limit). | |
| style | No | Word list: lorem (Latin), english, or arabic. | lorem |
| opener | No | Start with the classic opening line ("Lorem ipsum dolor sit amet…", "The quick brown fox…", or the Arabic one). Default true. | |
| output | No | Optional: write the text to this file path (or folder ending in "/") instead of returning it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses valuable behavior beyond the schema (seed reproducibility, unit limits of 100/500/10000, the `output` redirect to a file). But it states 'Writes a .txt/.html file instead when "output" is given', which conflicts with the declared readOnlyHint=true — the tool can modify the filesystem. The contradiction is confined to the optional `output` param, so it isn't a wholesale mismatch, but an agent trusting the read-only hint could be misled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but every clause carries information; the mode/style/unit choice is front-loaded and the seed and file-output caveats follow logically. The trailing web-version URL is the only sentence that doesn't help an agent invoke the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the essential work of stating that text is returned by default and a file is written only when `output` is supplied. Defaults, limits and reproducibility are covered; only the exact return shape (single string vs. per-paragraph array) is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple 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 already 100%, yet the description still adds meaning: concrete caps (100 paragraphs / 500 sentences / 10000 words) that the schema only alludes to as 'clamped to the unit limit', the determinism contract for `seed`, and the folder-trailing-slash behavior for `output`. This is exactly the value-add a description should provide over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Generate placeholder text') and immediately enumerates the three variants it can produce (lorem / English / Arabic). No sibling tool in the list does placeholder *text* generation (image_placeholder is an image tool), so the agent can disambiguate purely from this sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is clear from the option enumeration: pick a style, pick a unit, pick a count, and the description states each trade-off. It never explicitly excludes or names an alternative tool, and doesn't say when *not* to use it, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_morseMorse code translatorARead-onlyIdempotent
Translate text to International Morse code and back. Encoding: letters separated by spaces, words by " / "; accents are folded (é → E) and characters without a code are skipped and counted. Decoding accepts . and - plus look-alikes (• · – — _), with words split by /, | or 2+ spaces; unknown codes become #. Encoding also returns the playing time at a given speed (PARIS timing: dot = 1200/WPM ms). No audio. Web version: https://s3eidat.github.io/morse-code/
| Name | Required | Description | Default |
|---|---|---|---|
| wpm | No | Speed in words per minute for the duration estimate (default 18). | |
| mode | No | "encode" text → Morse, "decode" Morse → text, or "auto" (default): decode if the input only has Morse symbols, spaces, / and |. | auto |
| text | Yes | Text to encode, or Morse code to decode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavioral details: separator conventions, accent folding, skipped-character counting, accepted decode look-alikes, unknown-code substitution with '#', timing estimation via PARIS rules, and absence of audio. These are exactly the kind of edge cases an agent needs before invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then packs in useful edge cases efficiently. It is dense and slightly long, and the web-version link is not essential, but most clauses earn their place given the tool's formatting complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool without an output schema, the description explains the main return-relevant behaviors: encoding includes playing time, skipped characters are counted, and unknown decoded codes become '#'. It does not specify the exact response object shape, but it is complete enough for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. 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 schema coverage is already 100%, the description adds substantial meaning beyond the schema: it defines the expected text/Morse formats, word and letter separators, accent handling, skipped characters, decode look-alikes, unknown-code behavior, and the WPM timing formula. This materially helps an agent prepare correct inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Translate text to International Morse code and back.' It immediately establishes bidirectional translation and later clarifies encode/decode/auto behavior, so the tool's role is unambiguous even among many generic text utilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains encode, decode, and auto-mode behavior clearly, including what auto mode detects. It does not explicitly state when to choose this tool over alternatives or when not to use it, but no direct sibling alternative exists, so the context is still clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_number_to_wordsNumber to words (English & Arabic)ARead-onlyIdempotent
Spell a number in words in English and Arabic: English cardinal (with decimals, optional British "and"), ordinal (twenty-first), cheque wording for an amount in a currency (cents in words or as 25/100, optional "only"), Arabic cardinal, and Arabic tafqeet for amounts with correct gender/number agreement of the currency noun (optional "faqat … la ghayr" wrapper and the modern 100 spelling). Currencies: JOD, USD, SAR, AED, KWD, EGP, GBP (or none). Accepts Arabic-Indic digits and thousands separators. Up to 999 trillion (15 digits). Web version: https://s3eidat.github.io/number-words/
| Name | Required | Description | Default |
|---|---|---|---|
| only | No | Add "only" (English) and the Arabic "faqat … la ghayr" wrapper to amounts. | |
| number | Yes | The number or amount, e.g. "1500.250", "1,234,567.89", -12.05 (Arabic-Indic digits work too). | |
| british | No | British English "and": one hundred and five. | |
| currency | No | Currency for cheque / tafqeet wording: none (default), JOD, USD, SAR, AED, KWD, EGP, GBP. | none |
| subStyle | No | Cheque sub-units in words (twenty-five cents) or as a fraction (25/100). | words |
| modernHundred | No | Arabic: use the modern spelling of "hundred" (without the extra alif). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, closed-world), so the description's added value is the operational envelope: 15-digit/999-trillion limit, acceptance of Arabic-Indic digits and thousands separators, and the supported currency set. It still doesn't clarify whether English and Arabic are returned together or selected by input, which is a behavior an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and tightly packed, with no filler sentences. However, the single long enumerative sentence is dense and mixes capability listing with usage hints, slightly reducing scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should pin down the return shape, and it mostly does by naming the phrasing styles produced. The remaining gap is whether a single call returns both English and Arabic renderings or one based on currency/style, which an agent must guess.
Complex tools with many parameters or behaviors need more documentation. Simple 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 would be 3; the description goes further by tying each option to a mode — 'only' as the English only / Arabic 'faqat … la ghayr' wrapper, 'british' as the hundred-and form, subStyle as cents-in-words vs 25/100. This adds real interpretive value over the field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Spell a number in words') and immediately enumerates the distinct output modes (English cardinal, ordinal, cheque wording, Arabic cardinal, tafqeet). It is clearly distinguishable from neighbors like calc_roman or text_arabic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage contexts are implied well through the mode list — cheque wording for currency amounts, tafqeet with gender agreement, British 'and' for UK spelling. It never names an alternative tool or states when NOT to use it, so it falls short of explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_readabilityReadability scoreARead-onlyIdempotent
Score how easy an English text is to read: Flesch Reading Ease, Flesch-Kincaid Grade, Gunning Fog, SMOG, Coleman-Liau and Automated Readability Index (same formulas, sentence splitter and syllable estimate as the website), plus a verdict, average grade level, and Hemingway-style hints: long sentences (over 20 / 30 words), passive voice and adverbs. The formulas are built for English; for Arabic text the result says so (arabicWarning). Give "text" or a text file "path". Web version: https://s3eidat.github.io/readability/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a path to a UTF-8 text file. | |
| text | No | The text to score. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, closed-world), and the description adds real behavioral context: the sentence splitter/syllable estimation match the website, an arabicWarning field appears for Arabic input, and the returned hints (long sentences over 20/30 words, passive voice, adverbs) are described. Minor gap: no mention of error behavior for malformed paths.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and inputs before the metric list, and each clause carries information. The trailing web-version URL is low value for an agent but does not distract much.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully previews the return payload (six scores, verdict, average grade level, Hemingway-style hints, arabicWarning). Nothing essential for calling it correctly is missing, though it could state what happens if both or neither of text/path are supplied.
Complex tools with many parameters or behaviors need more documentation. Simple 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, but the description adds the either/or semantics between 'text' and 'path' and notes the file format (UTF-8), which is meaningfully more than the schema's terse property descriptions convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Score') and resource ('how easy an English text is to read') and enumerates the exact metrics produced. This clearly separates it from siblings like text_word_count or ai_text_similarity, which could otherwise be confused with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the two input modes ('Give "text" or a text file "path"') and flags the English-only scope with the Arabic fallback behavior, which implicitly tells the agent when this tool is inappropriate. It does not name an alternative tool for non-English or non-readability needs, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_slugifySlugifyARead-onlyIdempotent
Turn titles into clean URL slugs, one slug per non-empty line (bulk). Folds accents (é → e, ß → ss), transliterates Arabic to Latin (the article al- becomes its own word) or keeps Arabic letters, converts Arabic-Indic digits, drops tashkeel, turns & into "and", can remove stop words (English and Arabic) and cap the length at a word boundary. Web version: https://s3eidat.github.io/slugify/
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Title(s) to slugify. Each non-empty line becomes one slug. | |
| arabic | No | "latin" transliterates Arabic letters (default); "keep" keeps them. | latin |
| lowercase | No | Lowercase the slug (default true). | |
| maxLength | No | Maximum slug length in characters, cut at a word boundary (0 = no limit). | |
| separator | No | Word separator: dash (default), underscore or dot. | - |
| foldAccents | No | Transliterate accents: é → e, ß → ss, æ → ae (default true). | |
| removeStopWords | No | Remove stop words in English and Arabic such as the, of, and (kept if nothing else is left). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, closed-world), and the description adds substantial transformation semantics beyond that: accent folding with concrete examples (é → e, ß → ss), Arabic transliteration vs letter-keeping, Arabic-Indic digit conversion, tashkeel removal, the '&' → 'and' rule, and word-boundary-length capping.
Agents need to know what a tool does to the 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 but front-loaded sentence: purpose first, then transformation rules in a scannable order, with the demo URL last. It is long but nearly every clause earns its place; the trailing URL is marginal value for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still implies the return shape through 'one slug per non-empty line (bulk)', and annotations cover safety. For a 7-parameter read-only text transformer it is close to complete, though it could be more explicit about the output payload (array vs newline-joined string).
Complex tools with many parameters or behaviors need more documentation. Simple 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 every parameter already carries its own description and defaults; the baseline is 3. The description largely restates what the schema documents (folding accents, stop words, length cap, Arabic mode) rather than adding syntax or interaction detail the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Turn titles into clean URL slugs') plus the bulk granularity ('one slug per non-empty line'). It does not name or contrast with similar siblings such as text_case, text_clean, or text_arabic, so an agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool's purpose implies its usage (URL slug generation, bulk title lists), and options like stop-word removal and Arabic transliteration hint at applicable contexts. But there is no explicit when-to-use/when-not statement and no routing advice against the neighboring text_normalization tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_social_countSocial media character counterARead-onlyIdempotent
Check a post against platform limits the way the platforms count: X/Twitter weighted length (links = 23, emoji = 2, CJK = 2; limit 280), Threads 500, Bluesky 300, Instagram 2,200 (+ 30 hashtags), LinkedIn 3,000, Facebook 63,206, TikTok 4,000, YouTube title 100 / description 5,000, Pinterest 500, Google title ~60, meta description ~160. Characters are counted as user-perceived graphemes (one emoji = 1). Also: words, hashtags, mentions, links, emoji, and SMS encoding (GSM-7 vs Unicode) with the number of SMS parts and the characters that force Unicode. Give "text" or a text file "path". Web version: https://s3eidat.github.io/social-counter/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a path to a UTF-8 text file. | |
| text | No | The post text. | |
| platforms | No | Only these meters: x, threads, bsky, ig, li, fb, tt, yt, ytd, pin, gt (Google title), gd (meta description). Default: all. | |
| gsmLookalikes | No | Also return the text with curly quotes, dashes, ellipses, odd spaces etc. replaced by GSM-7 look-alikes (cheaper SMS). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only and idempotent behavior, and the description adds substantial detail: platform-specific weighted counting, grapheme rules, SMS GSM-7 vs Unicode segmentation, default-all platforms, and file input. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loads the core check, and most details about limits and SMS encoding directly support invocation. The web-version URL is dispensable and the platform list is lengthy, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers inputs, optional platform selection, and the metrics returned, which is important because there is no output schema. It does not specify output structure or what happens when neither text nor path is supplied, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds useful meaning by listing exact platform limits and explaining what gsmLookalikes produces. It still does not clarify edge cases such as supplying both text and path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: check a post against platform limits, with exact platforms and counting rules. The platform-specific scope makes it clearly distinguishable from generic siblings such as text_word_count.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the use case (checking post text against platform limits) and how to supply input via text or path, with an optional platform filter. It does not name alternatives or say when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_word_countWord countARead-onlyIdempotent
Count words, characters (with and without spaces), sentences, paragraphs, lines and unique words; estimate reading (238 wpm) and speaking (150 wpm) time; list the most used keywords with density. Works for English and Arabic (tashkeel ignored). Give "text" or a text file "path". Web version: https://s3eidat.github.io/word-count/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a path to a UTF-8 text file. | |
| text | No | The text to analyse. | |
| keywords | No | How many top keywords to return (0 = none). | |
| includeStopWords | No | Count common words like "the"/"في" as keywords. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so safety is covered. The description adds genuine behavioral context beyond that: fixed 238/150 wpm constants for the estimates, tashkeel being ignored for Arabic, and keyword density semantics. It does not clarify what happens if both text and path are provided, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Outputs are front-loaded in a single dense semicolon-delimited sentence, followed by two short sentences on language support and input modes. The trailing web-version URL is the one element that doesn't help an agent invoke the tool, but the overall structure is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly carries the burden of describing return values, and it enumerates nearly everything returned including keyword density. Remaining gaps are minor: precedence when both text and path are supplied, and behavior on unreadable paths, though the read-only annotations mean no destructive risk is hidden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning on top by framing "text" and "path" as alternative inputs rather than independent fields, and by explaining that keyword output is ranked with density. The keywords count and stop-word toggle are left entirely to the schema, which is acceptable given full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names specific verbs and outputs — count words/characters/sentences/paragraphs/lines/unique words, estimate reading (238 wpm) and speaking (150 wpm) time, and list top keywords with density. This clearly separates it from siblings like ai_token_count (tokens), text_readability (scores), and text_social_count (platform limits).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the description says to supply "text" or a text file "path" and notes English/Arabic support, which conveys input modes but not when to choose this tool over alternatives. It never names a sibling such as ai_token_count or text_readability or states exclusions. An agent must infer applicability from the output list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_convertTimestamp convertARead-onlyIdempotent
Convert a Unix timestamp (seconds, ms, µs or ns — auto-detected from the number of digits, or set "unit") or a date string to ISO 8601 (UTC and in a timezone), RFC 7231 / UTC string, local time in any IANA timezone with its offset, relative time ("3 hours ago"), day of year, ISO week, and Unix seconds/ms. A wall-clock time without an offset (e.g. "2026-10-26T14:30") is read in "timezone". Also shows the same instant in extra "zones" (world clock). No value = now. Date arithmetic is not done here. Web version: https://s3eidat.github.io/timestamp-convert/
| Name | Required | Description | Default |
|---|---|---|---|
| now | No | Reference "now" in Unix ms for the relative time. Default: the current time. | |
| unit | No | Unit of a numeric timestamp. Default: auto-detect. | auto |
| value | No | A Unix timestamp (e.g. 1700000000 or "1700000000123"), an ISO/RFC date string, or a wall-clock "YYYY-MM-DDTHH:MM[:SS]". Default: now. | |
| zones | No | Extra IANA timezones to show the same instant in, e.g. ["UTC","Asia/Tokyo"]. | |
| timezone | No | IANA timezone for the local view and for wall-clock input. Default: the server's (UTC). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world behavior, so the bar is lower; the description still adds real context — digit-count auto-detection of units, the server's UTC as the default timezone, and the now-default behavior. It says nothing about invalid-input handling or whether ambiguous timestamps fail, which would be the remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph with the primary behavior front-loaded and no padding sentences; each clause covers a distinct capability. It is slightly cramped — parsing the output-format list takes effort — and the trailing web-version URL adds little 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?
There is no output schema, and the description compensates fully by enumerating every returned representation (ISO 8601 UTC/zoned, RFC 7231, local offset, relative time, day of year, ISO week, Unix s/ms). Combined with the annotation profile and 100% schema coverage, nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description earns an extra point by explaining the auto-detect rule ('from the number of digits') for `unit` and the coupling between wall-clock `value` input and the `timezone` parameter, neither of which the schema spells out. It treats `zones` only as 'world clock' without noting the 50-item cap beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (convert) and resource (Unix timestamp / date string) and enumerates the output formats produced, so an agent knows exactly what it returns. The closing clause 'Date arithmetic is not done here' actively separates it from siblings like calc_date_diff and calc_due_date.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditions: 'No value = now' for a quick current-time lookup, a wall-clock string without an offset is interpreted in "timezone", and date arithmetic belongs elsewhere. It never names the specific sibling tools to use instead for arithmetic, which keeps this below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
time_world_clockWorld clock & meeting plannerARead-onlyIdempotent
Current (or any given) time in a list of time zones or cities: local time, date, weekday, UTC offset, difference from a home zone, day/night and working-hours flags. Plus the website's meeting planner: the 24 hours of a day in the home zone, each zone's local hour and band (work 9–17, awake 7–22, night), and the hours when everyone is in working hours. Zones: IANA ids ("Asia/Tokyo") or city names ("Mecca", "New York", "Tokyo"). Uses Node's ICU time-zone data; no network. Web version: https://s3eidat.github.io/world-clock/
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | The instant to show (ISO 8601, e.g. "2026-01-15T12:00:00Z"). Default: now. | |
| zones | Yes | Time zones or cities, e.g. ["Asia/Amman", "London", "New York"]. The first is the home zone unless homeZone is set. | |
| hour12 | No | 12-hour clock (AM/PM) instead of 24-hour. | |
| planner | No | Include the 24-hour meeting planner. | |
| homeZone | No | Zone the differences and the planner day are measured from. Default: the first of zones. | |
| plannerDate | No | Planner day (YYYY-MM-DD in the home zone). Default: the date of "at" there. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld=false/idempotent, and the description usefully corroborates this with 'Uses Node's ICU time-zone data; no network', which tells the agent results are deterministic and offline. Because there is no output schema, the enumeration of returned fields (local time, date, weekday, UTC offset, difference, day/night and working-hours flags, planner bands) adds real value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and planner capability are front-loaded in the first two sentences, followed by input-format guidance and a provenance note. Every sentence carries information; nothing is redundant padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and six parameters, the description adequately explains what comes back (per-zone fields, planner bands, overlap hours) and what inputs look like. It stops short of describing edge cases such as invalid zone names or the 50-item cap, but nothing essential for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all six parameters are already documented. The description only reinforces zone input format (IANA ids or city names) and the notion of a home zone used for differences and the planner day; it adds little syntax or constraint detail 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?
Opens with a specific verb+resource ('Current (or any given) time in a list of time zones or cities') and then names the second capability, the 24-hour meeting planner. It clearly separates itself from siblings like time_convert by emphasizing multi-zone listing plus planner bands, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description of outputs and the default behaviors ('Current (or any given) time'), so an agent can infer this is the tool for multi-zone/meeting-scheduling queries. However, there is no explicit when-to-use vs. time_convert or calc_date_diff, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
url_decodeURL decodeARead-onlyIdempotent
Decode percent-encoded text (decodeURIComponent, or decodeURI with mode "full"). Optionally turn "+" into spaces (form encoding). Errors on malformed %-sequences. Web version: https://s3eidat.github.io/url-toolkit/
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "component" = encodeURIComponent (for one query value or path segment; escapes / ? & = #). "full" = encodeURI (a whole URL; keeps those). | component |
| text | Yes | Percent-encoded text. | |
| plusAsSpace | No | Treat "+" as a space (application/x-www-form-urlencoded). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, so the bar is lower. The description adds a genuinely useful behavioral fact beyond them: it errors on malformed %-sequences, which tells the agent to expect failures on invalid input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core semantics are front-loaded in the first sentence and the error note follows logically. The trailing web-version URL is extra but harmless; otherwise there's no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a small single-string transform with full schema coverage and clear annotations, the description covers purpose, mode choice, and failure behavior. Only explicit sibling routing is missing, which is a minor gap for such a simple 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 the enum mode values and plusAsSpace flag are fully documented in the schema. The description restates mode 'full' and the '+' behavior without adding syntax or edge-case detail beyond the schema, hitting the baseline for full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource ('Decode percent-encoded text') and pins down the exact semantics by referencing decodeURIComponent/decodeURI. It's distinguishable from siblings like url_encode and url_parse by the decode verb, though it never names 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?
Explains the two modes and the '+' handling in passing ('form encoding'), which implies when each applies, but there's no explicit guidance on when to use this tool versus url_parse or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
url_encodeURL encodeARead-onlyIdempotent
Percent-encode text for URLs, exactly like JavaScript encodeURIComponent ("component", default) or encodeURI ("full"). UTF-8 based. Web version: https://s3eidat.github.io/url-toolkit/
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "component" = encodeURIComponent (for one query value or path segment; escapes / ? & = #). "full" = encodeURI (a whole URL; keeps those). | component |
| text | Yes | Text to encode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and closed-world, so the safety profile is covered. The description adds genuinely new behavioral facts: encoding is UTF-8 based, and the output is byte-for-byte the same as the named JavaScript built-ins, which tells the agent exactly what to expect in the result.
Agents need to know what a tool does to the 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 front-loaded sentences carry the essential semantic anchor, and the trailing project URL is small and potentially useful for verifying behavior. Slightly more than strictly necessary for a tool this simple.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, single-purpose transform with full schema coverage and no output schema, the description gives enough to call it correctly. It does not state the return value explicitly (the encoded string), but that is near-obvious given the JS equivalence.
Complex tools with many parameters or behaviors need more documentation. Simple 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 mode parameter's enum description already spells out the encodeURIComponent/encodeURI mapping, so the description largely repeats structured data. The 'exactly like JavaScript ... ("component", default)' phrasing reinforces the default but adds little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (percent-encode) and resource (text for URLs), and pins the semantics to two well-known JavaScript functions so the agent knows exactly which transformation it is. It is clearly distinguishable from siblings like url_decode, url_parse, and text_escape.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when each mode applies through the encodeURIComponent/encodeURI analogy, but the concrete guidance ('for one query value or path segment' vs 'a whole URL') lives in the schema, not the description. No alternative tool is named and no exclusion is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
url_parseURL parseARead-onlyIdempotent
Split a URL into protocol, user, host, port, path, query, fragment and origin (with decoded forms), list its query parameters in order (duplicates and bare flags kept, + as space) and flag tracking parameters (utm_*, fbclid, gclid, msclkid, mc_cid, _ga, _hsenc…). Optionally returns the URL with tracking removed. A missing scheme means https://. Passwords are never echoed. Web version: https://s3eidat.github.io/url-toolkit/
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to parse. | |
| stripTracking | No | Also return "cleanUrl" with tracking parameters removed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, closed-world), and the description adds real substance beyond them: a scheme-less input is coerced to https://, passwords are never echoed, duplicate and bare query params are preserved and '+' is treated as space. It does not state behavior on malformed URLs, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and output shape, then defaults, then privacy behavior; nearly every clause carries information. The tracking-parameter enumeration with an ellipsis and the web-version link are mildly expendable but 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?
With no output schema, the description carries return-value disclosure and does it well, enumerating fields and the optional cleanUrl. It falls just short of complete by omitting error behavior for unparseable input, which matters for a parser.
Complex tools with many parameters or behaviors need more documentation. Simple 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, but the description genuinely adds semantics for both parameters: it explains the implicit 'https://' default for a scheme-less url and clarifies that stripTracking yields a cleanUrl with the listed tracking parameters removed. That goes beyond the terse schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('split') on a specific resource ('a URL') and enumerates the exact output components (protocol, user, host, port, path, query, fragment, origin, decoded forms), plus a query-parameter listing and tracking-flag pass. This makes it trivially distinguishable from the encoding-oriented siblings url_encode/url_decode and from useragent_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?
Usage is implied by the purpose (call it when you need a URL dissected or tracking stripped), and the stripTracking behavior is described. However, no sibling is named and there is no explicit when-not guidance, so the agent must infer the boundary against url_decode/url_encode on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
useragent_parseUser agent parseARead-onlyIdempotent
Parse browser user-agent strings into browser + version, engine (Blink, WebKit, Gecko, Trident, EdgeHTML, Presto), OS + version, device type (desktop, mobile, tablet, TV, console, bot, HTTP client), vendor and model. Recognises ~50 crawlers and AI bots (Googlebot, Bingbot, GPTBot, ClaudeBot, PerplexityBot…) and HTTP clients (curl, python-requests, Go, okhttp, Postman…). Give one "userAgent", a list, or a text/log file (one per line, or the last quoted field of each access-log line); up to 5000 per call, with a count by type. Web version: https://s3eidat.github.io/ua-parser/
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Or: a text file (path or base64) with one user agent per line, or an access log. | |
| accessLog | No | Read "file" as an access log: take the last quoted field of each line. | |
| userAgent | No | One user-agent string. | |
| userAgents | No | Several user-agent strings. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations provide safety hints, the description adds critical operational behavior by listing the specific types of bots and clients it recognizes (e.g., Googlebot, curl, Postman), defining its scope far beyond basic parsing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although long, the definition is entirely efficient. Every sentence adds unique, high-value information regarding the parsing capabilities and input flexibility.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, multi-mode nature of the tool, the description is perfectly complete. It covers what it does, what it extracts, what formats it handles, and its performance 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?
The schema coverage is 100%. The description supplements this by explaining how to use the input fields—specifically that a 'file' can be a path or a base64 string, and how the 'accessLog' flag dictates log processing behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The purpose is exceptionally clear, specifying that it 'Parse[s] browser user-agent strings' and detailing the exact fields extracted (browser, engine, OS, device type, vendor, model).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 multiple usage paths: single user agent, list, file path, and parsing an access log. It also explicitly defines operational boundaries, noting 'up to 5000 per call.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xml_formatXML format / minify / validate / to JSONARead-onlyIdempotent
Validate XML (well-formedness and namespaces, with line and column for errors), pretty-print it (2, 4 spaces or tab; mixed content, CDATA and xml:space="preserve" kept exactly as written), minify it, or convert it to JSON (attributes as "@name", repeated elements as arrays, text as "#text"). Optionally removes comments. Never loads external DTDs or entities. Give "text" or a file "path". Web version: https://s3eidat.github.io/xml-format/
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "format" pretty-prints, "minify" strips layout whitespace, "json" converts to JSON, "validate" only checks (never throws on bad XML). | format |
| path | No | Or: a path to a XML file (UTF-8; use this for big inputs). | |
| text | No | The XML as inline text. | |
| indent | No | Indentation: 2, 4, "tab" (or any number of spaces 0-8). | 2 |
| output | No | Optional: also write the result to this file path (or folder ending in "/"). The result text is then left out of the reply. Results over 1,000,000 characters are always written to a file. | |
| removeComments | No | Drop <!-- comments --> (format and minify). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the readOnly/idempotent annotations with real behavioral detail: no external DTD or entity loading (a meaningful side-effect guarantee), fidelity guarantees that mixed content, CDATA and xml:space="preserve" are kept as written, and that validation errors carry line/column. It does not say what validate returns on success or how large outputs are handled in the reply, but the added context is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the four modes and their distinguishing behavior, then input guidance. Dense but every clause carries information; the trailing web-version URL is the only low-value element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no output schema and readOnly annotations, the description covers modes, input sources, preservation behavior, and safety limits. Remaining gaps (success return shape for each mode, behavior on invalid XML in non-validate modes) are modest and partly covered by the schema's 'validate never throws' note.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented in the schema, which sets the baseline at 3. The description adds little parameter-level meaning beyond restating the indent options and input source; the '@name'/array/'#text' notes describe JSON conversion output conventions rather than parameter behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verbs and resource: validate (with well-formedness/namespace checks), pretty-print, minify, convert to JSON — an agent immediately knows the four modes. It does not name xml_query, the closest sibling that also operates on XML, so the boundary between 'format' and 'query' work is left implicit. Still clearly distinguishable from html_format/json_format by the XML 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?
It gives input guidance ('Give "text" or a file "path"') and mode-level semantics, so usage is implied rather than stated. There is no explicit when-to-use/when-not guidance and no pointer to xml_query for query-type work. Adequate but leaves the agent to infer tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xml_queryXML XPath queryARead-onlyIdempotent
Run an XPath 1.0 expression on XML: node-sets (elements, attributes, text…), numbers (count(), sum()), strings and booleans. Full XPath 1.0: all axes, predicates, operators and the core function library. Namespace prefixes declared anywhere in the document can be used as-is; a default namespace on the root gets the prefix "d" (e.g. //d:book), as on the website. Each matched node comes back as XML text plus its type, name and XPath location. Web version: https://s3eidat.github.io/xml-format/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a path to a XML file (UTF-8; use this for big inputs). | |
| text | No | The XML as inline text. | |
| limit | No | Return at most this many nodes (default 1000). | |
| xpath | Yes | XPath 1.0 expression, e.g. "//book[price > 30]/title", "count(//item)", "//d:entry/@id". | |
| namespaces | No | Extra or overriding prefix → namespace URI bindings, e.g. {"atom":"http://www.w3.org/2005/Atom"}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, closed-world), so the description only needs to add operational context — and it does: it discloses the per-node return shape (XML text plus type, name and XPath location) and the non-obvious namespace rule that a root default namespace is auto-bound to prefix 'd'. It also pins the XPath version to 1.0, which prevents an agent from trying 2.0/3.0 syntax. Minor gaps remain around error behavior for malformed XML.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core capability, then result shape, then the namespace gotcha — the right ordering. The trailing 'Web version:' URL is filler that doesn't help an agent call the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a 5-parameter tool at full schema coverage and no output schema, the description supplies what structure cannot: the shape of each returned node, the namespace defaulting rule, and the XPath version ceiling. An agent has everything needed to construct a working call.
Complex tools with many parameters or behaviors need more documentation. Simple 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 a 3 is the baseline; the description earns more by explaining namespace resolution semantics that the schema's one-line 'prefix → namespace URI' note does not: in-document prefixes work as-is and the root default namespace is silently remapped to 'd'. That is exactly the detail an agent would otherwise get wrong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run an XPath 1.0 expression on XML') and enumerates the result classes (node-sets, numbers, strings, booleans). It never names xml_format or any sibling as the alternative for non-query XML work, so sibling differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the mention of count()/sum() and the node examples, which signal the extraction use case. But there is no explicit 'use this when...' guidance, no statement of when xml_format or json_query is the better pick, and no prerequisites (e.g. well-formed XML required).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
yaml_to_jsonYAML to JSONARead-onlyIdempotent
Convert YAML to JSON (YAML 1.2 core schema plus anchors/aliases, << merge keys, timestamps, multi-document files). Safe: no code tags (!!js/function, !!python… are rejected), alias bombs and recursive aliases are stopped. Several documents become a JSON array. Errors give line and column. Give "text" or a file "path". Web version: https://s3eidat.github.io/yaml-json/
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Or: a path to a YAML file (UTF-8; use this for big inputs). | |
| text | No | The YAML as inline text. | |
| indent | No | Indentation: 2 or 4 spaces. | |
| output | No | Optional: also write the result to this file path (or folder ending in "/"). The result text is then left out of the reply. Results over 1,000,000 characters are always written to a file. | |
| sortKeys | No | Sort object keys alphabetically at every level. | |
| alwaysArray | No | Always output an array of documents, even for one document. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations, disclosing rejection of code tags, alias-bomb/recursive-alias protection, line-and-column errors, and the 1,000,000-character file fallback. However, it also states the tool will write results to an output file, a side effect that conflicts with readOnlyHint=true. The rich disclosure is offset by that safety-profile mismatch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the conversion scope comes first, safety and error behavior second, invocation guidance third. The trailing web-version link is the only sentence that does not help an agent decide or invoke.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of return semantics and does so: multi-document output shape, the file-write alternative, and the error format are all covered. An agent has everything needed to call it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description still earns a bump by explaining behavior the schema does not, notably that multiple documents become a JSON array (the semantics behind alwaysArray) and that oversized results are written to a file rather than returned. The text/path guidance is largely a restatement of 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?
Opens with a specific verb+resource pair ("Convert YAML to JSON") and immediately scopes the supported feature set (YAML 1.2 core, anchors/aliases, merge keys, timestamps, multi-document). It is unambiguously distinct from the sibling json_to_yaml and from format-only tools like json_format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 tells the agent how to invoke it ("Give \"text\" or a file \"path\"") and steers large inputs to the path form. What is missing is an explicit when-not or a naming of a preferred alternative, but for a single-purpose converter the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
162 tool updates
v0.1.0- First observed
ai_chart - First observed
ai_chunk_text - First observed
ai_create_pptx - First observed
ai_create_xlsx - First observed
ai_csv_profile - First observed
ai_detect_language - First observed
ai_diagram - First observed
ai_docx_to_markdown - First observed
ai_extract_entities - First observed
ai_file_identify - First observed
ai_html_to_markdown - First observed
ai_image_diff - First observed
ai_json_schema_infer - First observed
ai_json_schema_validate - First observed
ai_markdown_to_docx - First observed
ai_markdown_to_pdf - First observed
ai_media_info - First observed
ai_ocr - First observed
ai_pdf_to_markdown - First observed
ai_pptx_to_markdown - First observed
ai_sql_query - First observed
ai_text_similarity - First observed
ai_token_count - First observed
ai_web_fetch - First observed
ai_xlsx_to_markdown - First observed
ai_zip - First observed
barcode_generate - First observed
base_convert - First observed
base64_decode - First observed
base64_encode - First observed
bytes_convert - First observed
calc_age - First observed
calc_bmi - First observed
calc_cash_count - First observed
calc_compound_interest - First observed
calc_date_diff - First observed
calc_discount - First observed
calc_due_date - First observed
calc_equation - First observed
calc_expression - First observed
calc_fraction - First observed
calc_fuel_cost - First observed
calc_gpa - First observed
calc_hijri - First observed
calc_hours - First observed
calc_loan - First observed
calc_percentage - First observed
calc_primes - First observed
calc_roman - First observed
calc_salary - First observed
calc_sleep - First observed
calc_split_bill - First observed
calc_stats - First observed
calc_unit_convert - First observed
calc_zakat - First observed
chmod_calc - First observed
cron_explain - First observed
crypto_file_decrypt - First observed
crypto_file_encrypt - First observed
crypto_stego_hide - First observed
crypto_stego_reveal - First observed
crypto_text_decrypt - First observed
crypto_text_encrypt - First observed
css_clamp - First observed
css_format - First observed
css_units - First observed
csv_to_json - First observed
curl_to_code - First observed
doc_attendance_sheet - First observed
doc_business_cards - First observed
doc_calendar - First observed
doc_invoice - First observed
doc_labels - First observed
doc_receipt - First observed
doc_resume - First observed
gitignore_generate - First observed
hash_compute - First observed
html_format - First observed
http_status - First observed
id_generate - First observed
id_inspect - First observed
image_ascii_art - First observed
image_ascii_banner - First observed
image_compress - First observed
image_convert - First observed
image_crop - First observed
image_exif_read - First observed
image_exif_strip - First observed
image_favicon_set - First observed
image_from_base64 - First observed
image_palette - First observed
image_placeholder - First observed
image_resize - First observed
image_rotate - First observed
image_svg_to_png - First observed
image_to_base64 - First observed
image_watermark - First observed
ip_in_range - First observed
json_format - First observed
json_query - First observed
json_to_csv - First observed
json_to_types - First observed
json_to_yaml - First observed
jwt_decode - First observed
markdown_table - First observed
markdown_table_parse - First observed
meta_tags_generate - First observed
password_check - First observed
password_generate - First observed
pdf_compress - First observed
pdf_extract_pages - First observed
pdf_form_fields - First observed
pdf_form_fill - First observed
pdf_from_images - First observed
pdf_info - First observed
pdf_merge - First observed
pdf_metadata_read - First observed
pdf_metadata_write - First observed
pdf_organize - First observed
pdf_page_numbers - First observed
pdf_rotate - First observed
pdf_sign_image - First observed
pdf_split - First observed
pdf_to_images - First observed
pdf_to_text - First observed
pdf_watermark - First observed
prayer_times - First observed
qibla_direction - First observed
qr_generate - First observed
qr_read - First observed
qr_wifi - First observed
random_dice - First observed
random_pick - First observed
random_teams - First observed
regex_test - First observed
secret_santa_draw - First observed
sql_format - First observed
subnet_calc - First observed
text_arabic - First observed
text_case - First observed
text_citation - First observed
text_clean - First observed
text_diff - First observed
text_escape - First observed
text_fancy - First observed
text_layout_fix - First observed
text_lorem - First observed
text_morse - First observed
text_number_to_words - First observed
text_readability - First observed
text_slugify - First observed
text_social_count - First observed
text_word_count - First observed
time_convert - First observed
time_world_clock - First observed
url_decode - First observed
url_encode - First observed
url_parse - First observed
useragent_parse - First observed
xml_format - First observed
xml_query - First observed
yaml_to_json
TDQS
Scored across 162 tools
Most tools target distinct operations, but the large surface creates real overlap clusters: base64_decode vs image_from_base64, image_convert vs image_svg_to_png, image_resize vs image_crop, and pdf_split vs pdf_extract_pages vs pdf_organize. The detailed descriptions help resolve these, but an agent must still carefully compare several similar tools before choosing.
Names consistently use snake_case with a category prefix (ai_, pdf_, image_, text_, calc_, json_, etc.) and readable action/resource suffixes. There is some variation between verb-first and noun-first forms (pdf_merge vs pdf_page_numbers, image_resize vs image_palette), but the pattern remains predictable overall.
162 tools is far beyond a well-scoped MCP surface; even for a broad utility suite, this volume imposes a heavy selection and context burden on an agent. Many individual tools are justified, but the overall set is excessively large rather than appropriately bounded.
Coverage is unusually broad across PDFs, images, documents, text, JSON/XML/YAML, calculators, crypto, QR/barcodes, and developer utilities, with most workflows having multiple supporting operations. Minor gaps remain, such as audio/video transformation or generic file-system operations, but core domains are well covered.
Maintenance
Related MCP Connectors
PDF, image, video, OCR, screenshot, SQL, QR and text tools for agents. No API key, no signup.
Image & PDF tools for AI agents: compress, convert, resize, PDF, AI vision, pipeline.
Merge, split, extract, rotate, reorder and stamp PDF pages from your AI chat, all offline.
Merge, split, extract, rotate, reorder and stamp PDF pages from your AI chat, all offline.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables file operations (PDF, Office, images, archives, media) through natural language, with tools for reading, writing, converting, and analyzing files locally.1-
- AlicenseAqualityDmaintenanceProvides AI agents with local file-processing capabilities for token counting, RAG chunking, CSV/JSON conversion, QR generation, and more, while keeping documents private on the user's machine.71MIT
- AlicenseAqualityAmaintenanceLocal file tools for agents. Read and convert documents (DOCX, PDF, HWP, HWPX, EML), edit PDFs, resize and clean images, cut out backgrounds, make QR codes. Nothing is uploaded.65MIT
- AlicenseBqualityBmaintenanceLets AI assistants read, search, edit, annotate, sign, redact and OCR PDF files entirely on the local machine, with no uploads and non-destructive writes to new files. It also merges, splits and reorganises pages, fills forms, compares versions to detect tampering, and converts documents between PDF, Word, Excel, images and text, including turning bank statements into spreadsheet rows.22AGPL 3.0