conductor
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., "@conductorextract contact from this email: 'John Doe, john@example.com, (555) 123-4567'"
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.
conductor
Verified tool calls for Claude Code: an MCP server (installable as a plugin) whose 23 tools check their own output in code before you get it.
A model asked to "extract the email" or "redact the phone numbers" is usually right, and nothing
tells you when it isn't. conductor puts each job behind a contract: an input schema, an output
schema and a mandatory verifier. Deterministic jobs (slugs, base64, URL extraction) run as plain
code and never touch a model. Judgment jobs (summaries, PII redaction) run as hermetic claude -p
calls, and an answer that fails its verifier is retried with the failure as feedback, handed to a
fallback, or returned as a failure; it is never silently passed through.
The skeleton (validate -> execute -> verify -> retry -> fallback -> log) is real code that cannot be skipped; the model is quarantined to the judgment-shaped holes.
Quick start
You need Claude Code installed and logged in, and Node.js
20 or newer on your PATH (the plugin starts the server with node).
claude plugin marketplace add fainir/conductor
claude plugin install conductor@conductorRestart Claude Code (or run /reload-plugins in a running session). Inside a session the same
steps are /plugin marketplace add fainir/conductor and /plugin install conductor@conductor.
Check that the server is up:
$ claude mcp list
plugin:conductor:conductor: node /Users/you/.claude/plugins/cache/conductor/conductor/0.4.1/dist/conductor-mcp.cjs - ✓ ConnectedThen ask for the job in plain words, for example "redact the PII in this ticket with conductor".
The tools show up as mcp__plugin_conductor_conductor__<tool>.
Update with claude plugin marketplace update conductor && claude plugin update conductor@conductor,
remove with claude plugin uninstall conductor@conductor.
Without the plugin system. dist/conductor-mcp.cjs is a committed, self-contained bundle, so
a clone needs no install or build step:
git clone https://github.com/fainir/conductor
claude mcp add conductor -s user -- node "$PWD/conductor/dist/conductor-mcp.cjs"Other MCP clients can run npx -y @fainir/conductor, which serves MCP over stdio. The unrelated
conductor-mcp package on npm belongs to someone else.
Related MCP server: claude-work-mcp
Usage
Every tool returns the same envelope. Real output from the bundle for base64_encode with
{"text": "hello"}:
{ "ok": true, "output": { "encoded": "aGVsbG8=" }, "via": "base64_encode", "attempts": 1, "verdict": { "ok": true, "score": 1 } }via names the rung that produced the answer (the tool itself, a declared fallback, or
freeform for plain Claude), and attempts counts tries on that rung. A failure sets ok: false
and the tool result's isError, and the verdict says why, so the calling model can fix its call:
{ "ok": false, "via": "redact_pii", "attempts": 0,
"verdict": { "ok": false, "score": 0, "feedback": "invalid input: input: missing required property 'text'; input: unexpected property 'txt' (allowed: text)" } }From a clone you can drive the same loop with the CLI (npm ci first). Pure tools answer
instantly and cost nothing:
$ npx tsx src/cli.ts slugify '{"text":"Hello, World!"}'
{
"ok": true,
"output": {
"slug": "hello-world"
},
"command": "slugify",
"attempts": 1,
"verdict": {
"ok": true,
"score": 1
},
"costUsd": 0
}
$ npx tsx src/cli.ts normalize_phone '{"phone":"call me"}'
{
"ok": false,
"command": "normalize_phone",
"attempts": 1,
"verdict": {
"ok": false,
"score": 0,
"feedback": "shape: normalized must match /^\\+?\\d{6,15}$/ (an optional leading '+' followed by 6-15 digits)"
},
"costUsd": 0
}The CLI exits 1 when the result fails verification. Model-backed tools work the same way
(npx tsx src/cli.ts extract_contact '{"text":"Call Sam at sam@acme.io"}') and spend a
claude -p call per attempt. npx tsx src/cli.ts with no arguments lists the commands, and
npx tsx src/cli.ts route "make a url slug" '{"text":"Hello World"}' lets a model pick the command.
Tools
Pure tools (code only, no model call)
tool | input | what it does | verifier checks |
|
| Convert a string into a URL-safe slug. | non-empty; only |
|
| Count the words and characters in a string. Words are whitespace-separated tokens of the trimmed text; chars is the raw length of the input. | recomputes both counts |
|
| Normalize a phone string to canonical '[+]digits' form by stripping non-digit characters. | recomputes; optional |
|
| Truncate text to at most | length never exceeds |
|
| Split text on newlines and keep the first occurrence of each line, preserving order. | no duplicates; every line comes from the input; recomputes |
|
| Extract all http(s) URLs from a text, deduped while preserving first-seen order. | http(s) shape; each URL appears in the input |
|
| Fill a template by replacing every {{key}} token with String(data[key]); fails, naming the keys, if any {{key}} has no value in data. | recomputes; no |
|
| Encode a UTF-8 string to base64. | decodes back to the input |
|
| Decode a base64 string to UTF-8 text. | re-encodes to the input (padding and line breaks ignored) |
|
| Extract all email addresses from text. | email shape; each address appears in the input |
|
| Minify a JSON string by removing insignificant whitespace. | parses to the same value as the input |
|
| Convert a string to snake_case. | recomputes |
Model-backed tools (hermetic claude -p call)
tool | input | what it does | verifier checks |
|
| Extract a contact's name, email, and phone from a blob of text. | schema; email and phone shape; the email must appear in the input (grounding) |
|
| Summarize a blob of text in at most a few sentences, using only the text itself. | at most |
|
| Extract up to k salient keywords or short phrases that appear verbatim in the input text. | 1 to |
|
| Classify the overall sentiment of a piece of text as positive, negative, or neutral. | label is one of the three; confidence in 0..1 |
|
| Replace every email address and phone number in the input text with [REDACTED], leaving all other text unchanged. | no email or phone pattern left; |
|
| Extract a caller-specified list of fields from a blob of text into a JSON object. Each requested field becomes a key; the value is null when the field is absent from the text. |
|
|
| Repair malformed or loosely-formatted JSON text into a valid JSON value. |
|
|
| Extract every date referenced in a piece of text, normalized to ISO format YYYY-MM-DD. | each is a real calendar date in |
|
| Choose the single best-fitting category for a piece of text from a provided list of categories. | exactly one of the given categories |
|
| Translate a piece of text into a given target language. | non-empty; at most 5x the input length + 20 |
|
| Detect the natural language of text. | non-empty name; two-letter lowercase ISO 639-1 code |
Inputs ending in ? are optional. The first three columns come from the command manifests
(npm test fails if they drift); the full JSON Schemas are what the MCP server advertises.
How it works
input -> inputSchema check -> run the command -> verify -> ok? -> result
^ | no
+-- retry with the verifier's feedback (model-backed, up to maxAttempts)
| still no
declared fallbacks -> freeform (plain Claude, same schema, same verifier)Contracts with mandatory verifiers. Each command is
commands/<name>/index.ts: a manifest (input and output JSON Schema, determinism, prompts, fallbacks) plus averify()export. A command without a verifier cannot be registered (src/library.ts,src/registry.ts). Mechanical checks come first (schema, regex, recompute, grounding);llmJudgeinsrc/verify.tsexists for criteria no code can express.Precondition gate. Input that breaks the command's
inputSchemais rejected before anything runs, with a message that names the problem.Determinism gradient.
purecommands are deterministic code: run once, cached, free, and never sent to a model.stochasticcommands are run by the model and retried with feedback.effectfulis reserved for commands that will need a human gate.Fallback to freeform. Every model-backed ladder ends at plain Claude, held to the same output schema and verifier, so the conductor never does worse than a raw call, only better when a verified command applies.
Hermetic calls. Every model call (
src/cc.ts) replaces the system prompt (--system-prompt), loads no settings (--setting-sources ""), enables no tools (--tools ""), saves no session, and constrains the answer with--json-schema. This matters: a naive call once returned the operator's own email instead of the one in the input, because ambient context (global CLAUDE.md, identity, hooks) leaked in.Composition.
runPipeline(src/pipeline.ts) chains commands; each step is verified before the next runs, so errors cannot silently compound.Telemetry and routing. Every attempt is a JSONL line.
npm run scoresprints per-command reliability from the CLI and eval logs, androute()(src/router.ts) shows those rates to a small model that must pick from an enum of command names.
Configuration
Setting | Default | Effect |
|
| Where the MCP server appends |
|
| Model for that command's calls (the router and |
|
| Tries with feedback before the next fallback rung (pure commands run once) |
Model-backed calls use whatever account the claude CLI is logged into.
Results (measured by the author)
Evals compare a single naive claude -p call with the conductor on the same inputs:
Single-shot extraction (
eval/run-eval.ts): baseline 100% vs conductor 100%. On easy single-shot tasks a frontier model is already reliable, so there is no gap to close.Composition (
eval/contact-card.ts, extract_contact -> normalize_phone -> slugify): baseline 80% vs conductor 100%. The baseline emitted a phone number with an invisible Unicode character; the deterministicnormalize_phonestep is structurally immune to that class of error. Cost: the conductor made more calls, about 2x the baseline.
The reliability gap grows with composition depth and machine-consumed output, not with single easy
calls. The evals call claude and cost money; rerun them with REPEATS=2 npx tsx eval/run-eval.ts,
REPEATS=2 npx tsx eval/contact-card.ts and REPEATS=1 npx tsx eval/triage.ts (a 4-step pipeline).
Add a command
Create
commands/<name>/index.ts. A pure command exportsmanifest,runandverify:import type { CommandManifest, SolveContext, Verdict } from "../../src/types.js"; import { check, combine } from "../../src/verify.js"; export const manifest: CommandManifest = { name: "reverse_text", // must equal the directory name description: "Reverse the characters of a string.", determinism: "pure", trust: "human-verified", inputSchema: { type: "object", properties: { text: { type: "string" } }, required: ["text"], additionalProperties: false }, outputSchema: { type: "object", properties: { reversed: { type: "string" } }, required: ["reversed"], additionalProperties: false }, fallbacks: [], effectful: false, }; export async function run(input: { text: string }): Promise<{ reversed: string }> { return { reversed: [...input.text].reverse().join("") }; } export async function verify(output: { reversed: string }, input: { text: string }, _ctx: SolveContext): Promise<Verdict> { return combine( check("string", typeof output?.reversed === "string", "reversed must be a string"), check("round-trip", [...(output?.reversed ?? "")].reverse().join("") === input.text, "reversing the output must give the input back"), ); }A model-backed command sets
determinism: "stochastic", leaves outrun, and addssystemPrompt,promptTemplate,model,maxAttemptsandfallbacks: ["freeform"]; itsverifychecks the model's answer (seecommands/extract_contact/index.ts).Add
commands/<name>/tests/cases.json, a list of{ "input": ..., "expect"?: ... }.Import the module in
src/library.tsand add it toMODULES(the bundle cannot scan directories).Add a row to the right table above.
npm testchecks contracts, runs pure commands against their cases, and prints the exact README row it expects.npm run buildand commitdist/conductor-mcp.cjs, which is what the plugin runs.
Development
npm ci
npm test # hermetic: a fake `claude` on PATH, no model calls, no network
npm run typecheck
npm run build # rebuild dist/conductor-mcp.cjs and commit it (CI fails if it is stale)
npm run mcp # run the server from source over stdio
npm run scores # reliability scoreboard from projects/*/telemetry.jsonl
# These call the real claude CLI and cost money:
npx tsx eval/run-tests.ts [command] # each command's tests/cases.json through the full loop
npm run eval # eval/run-eval.tsnpm run release [patch|minor|major] bumps the version in package.json and both plugin
manifests, rebuilds, commits and pushes; installed users then get it from
claude plugin update conductor@conductor.
src/
mcp.ts MCP server: one tool per command, every call through solve()
solve.ts the loop: input check -> execute -> verify -> retry -> fallback
schema.ts the JSON Schema subset used by command contracts
cc.ts one hermetic `claude -p` call
verify.ts verifier helpers: check/combine, zod schema, email/phone patterns, llmJudge
pipeline.ts compose verified commands
router.ts reliability-weighted command choice
telemetry.ts JSONL log + per-command scores
library.ts static command list (what the bundle ships)
registry.ts directory scan used by the CLI and evals
cli.ts manual driver
scores.ts prints the scoreboard
commands/<name>/ index.ts (manifest + run? + verify) and tests/cases.json
eval/ baseline-vs-conductor evals (paid)
test/ node:test suite (free)
dist/ committed bundle the plugin runsLimitations and FAQ
Model-backed tools need the
claudeCLI logged in, and each attempt is a separateclaude -pprocess, so expect seconds per call and usage on your account. Pure tools need neither.Verifiers are mechanical. They catch format, grounding and budget violations, not every semantic error:
categorizecan pick an allowed but wrong category, and a summary can be within budget and still miss the point. No shipped command usesllmJudgeyet.Some detectors are heuristics.
redact_piitreats any long run of digits and separators as a phone number, so ISO dates or order numbers in the output fail the check and may get redacted on retry.summarizecounts sentences by.,!and?, so abbreviations count.Telemetry stays on your machine (
~/.conductor/telemetry.jsonlfor the MCP server,projects/for the CLI and evals). Inputs go nowhere except theclaude -pcalls themselves.Opening this repo as a Claude Code project shows a failed
conductorserver from.mcp.json;${CLAUDE_PLUGIN_ROOT}only expands in an installed plugin. That is harmless.Not built yet: model-driven decomposition (pipelines are explicit), human gates for
effectfulcommands, routing inside the MCP server (the client model picks tools itself), turning traces into new commands, and RL on the router.
License
More open source by Nir Feinstein
agent-harness - make Claude Code or Codex act as a product team, a CEO or a portfolio manager
frugal - your agent finds the cheaper honest way before it pays for anything
flipback - an automatic
/goalfor every turn: sends Claude Code back when it stops earlyrecall - your Claude Code memory in every agent, over MCP
Available Tools
23 toolsbase64_decodeC
Decode a base64 string to UTF-8 text. [conductor: verified pure command]
| Name | Required | Description | Default |
|---|---|---|---|
| encoded | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It reveals the output encoding (UTF-8) but says nothing about behavior on invalid base64, non-UTF-8 bytes, or whitespace/padding handling; the trailing '[conductor: verified pure command]' tag is internal noise rather than useful behavior context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The functional sentence is front-loaded and wastes nothing. The bracketed conductor tag is extraneous metadata that 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 one-parameter utility with no output schema, the description does supply the return type (UTF-8 text). However, it omits error behavior for malformed input and the fact that non-UTF-8 payloads cannot be represented, which are the main things an agent needs to call this 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 0% and the single parameter `encoded` is undocumented in the schema, but the description does say the input is a base64 string, which adds meaning about expected content. It adds no detail about padding, whitespace, or encoding variants.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (decode) and resource (base64 string) plus the output format (UTF-8 text), which cleanly separates it from the sibling base64_encode. It only stops short of 5 because it never names the inverse operation as the tool to avoid.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use statement, prerequisite, or alternative named. Usage is only inferable from the verb, which the rubric treats as no real guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
base64_encodeA
Encode a UTF-8 string to base64. [conductor: verified pure command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden; it adds limited value by saying 'verified pure command', hinting at a deterministic side-effect-free operation. It does not disclose the output alphabet (standard vs URL-safe), whether padding is included, or line-wrapping behavior, which matter for interoperability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and wastes nothing. The trailing '[conductor: verified pure command]' tag is process metadata rather than agent-facing information and slightly dilutes an otherwise clean 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 one-parameter utility with no output schema, the description covers what the tool does and how input is interpreted. The main remaining gap is the output encoding variant, which is a real ambiguity for base64 but modest in scope for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single `text` parameter, so the description must compensate; it does by specifying the input is treated as a UTF-8 string, which tells the agent how the argument is interpreted during encoding.
Input schemas describe structure but not intent. Descriptions should explain 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) and resource (UTF-8 string to base64), which is unambiguous and clearly separates it from the sibling base64_decode. An agent can select 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?
There is no guidance on when to use this versus base64_decode or any other sibling, and no stated prerequisites or exclusions. The direction of operation is inferable from the verb alone, but the description never says it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
categorizeB
Choose the single best-fitting category for a piece of text from a provided list of categories. [conductor: verified stochastic command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| categories | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. The bracketed '[conductor: verified stochastic command]' does hint at non-determinism, but it is cryptic metadata rather than plain disclosure, and nothing is said about return shape, error behavior when no category fits, or cost/latency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that states the task and inputs without waste. The trailing bracketed tag is short but opaque, mildly reducing clarity-per-character.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the biggest remaining gap is what comes back: a category string, an index, or an object with a confidence score. That omission forces the agent to guess at the result contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does clarify both parameters semantically ('a piece of text', 'a provided list of categories'), but adds no detail on limits, ordering, or how ties between categories are broken.
Input schemas describe structure but not intent. Descriptions should explain 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 ('choose the single best-fitting category') plus the input constraint ('from a provided list of categories'). It is clearly distinguishable from siblings like classify_sentiment or extract_keywords, though the description never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent learns it must supply text and a candidate category list, which signals the single-label classification scenario. There is no explicit statement of when to prefer this over related siblings (e.g. classify_sentiment for polarity) and no exclusions or call-order guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classify_sentimentC
Classify the overall sentiment of a piece of text as positive, negative, or neutral. [conductor: verified stochastic command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. Beyond naming the three labels, it says nothing about language support, text-length limits, handling of mixed or neutral-ambiguous text, or whether results are deterministic — indeed the trailing artifact '[conductor: verified stochastic command]' hints at nondeterminism without explaining 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?
One front-loaded sentence states the purpose and the label vocabulary with no wasted words. The bracketed conductor artifact is noise that does not belong in an agent-facing description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-input classification tool with no output schema and no annotations, the description does the minimum: it names the labels. It omits any guidance on input constraints, language coverage, or return shape, which leaves real gaps given that nothing else in the tool definition fills them.
Complex tools with many parameters or behaviors need more documentation. 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, text, documented at 0% schema coverage, but its meaning is largely self-evident from the tool purpose. The description adds value by revealing the output label set, which partially compensates for the absent output schema, though it says nothing about format, length, or language constraints on the input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (classify) and resource (sentiment of a piece of text) and enumerates the possible output labels, so the agent knows exactly what the tool produces. It does not explicitly distinguish itself from the nearest sibling, categorize, but the sentiment-specific framing is clear enough on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus categorize or extract_keywords, no prerequisites, and no exclusions. The agent must infer the usage context entirely from the tool name and one-sentence purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dedupe_linesA
Split text on newlines and keep the first occurrence of each line, preserving order. [conductor: verified pure command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It discloses the core algorithm, order preservation, and that the operation is a pure command, but it does not specify return shape or edge-case handling such as empty lines, whitespace, or CRLF.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences and front-loads the operation before the purity note. 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 one-parameter pure transformation, the description covers the essential behavior. It is slightly incomplete because it does not describe the return value or edge-case semantics, but those gaps are minor for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter with 0% description coverage, so the description must compensate. It does so adequately by stating that the input text is split on newlines, making clear what the `text` parameter represents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 transformation: split text on newlines, keep the first occurrence of each line, and preserve order. That is precise enough to distinguish it from every sibling tool (slugify, truncate, fix_json, etc.) 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 explains what the tool does but gives no explicit when-to-use guidance, prerequisites, or alternatives. An agent can infer it is for duplicate-line removal, but the definition does not route the agent explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_languageC
Detect the natural language of text. [conductor: verified stochastic command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It never says whether results are read-only (implied only), how ambiguous or mixed-language input is handled, whether a confidence score is returned, or what the trailing '[conductor: verified stochastic command]' token even means — that artifact is unexplained noise that could mislead 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 first sentence is tight and front-loaded. The second bracketed fragment adds no semantic value and reads like pipeline metadata accidentally left in 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?
No annotations and no output schema, so the return value (ISO 639 code vs. language name, confidence field) is entirely unknown. For a simple single-parameter tool this still leaves the agent guessing at both input constraints and output shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'text' parameter. The description only restates that text is the input being detected, adding no constraints (length limits, encoding, multi-language handling) that an agent would need to call it correctly.
Input schemas describe structure but not intent. Descriptions should explain 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+resource pair ('Detect the natural language') that says exactly what comes out. It is distinguishable from siblings like translate or classify_sentiment, though it never names or excludes 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?
No when-to-use or when-not-to-use guidance, and no mention of alternatives such as translate (which might be the better call once the language is known). Usage is only implied by the tool name and verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_contactC
Extract a contact's name, email, and phone from a blob of text. [conductor: verified stochastic command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about output shape, what happens when no name/email/phone is found, or whether multiple contacts in the blob are handled. The trailing '[conductor: verified stochastic command]' hints that results may be non-deterministic but is too cryptic to be actionable 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 operative sentence is front-loaded and wastes no words. The bracketed conductor annotation is noise that does not help an agent decide or invoke, 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 no annotations and no output schema, the description is the only source of truth, and it omits the return structure (object with three fields? nulls for missing values?) and failure behavior. For an extraction tool where the output contract matters most, that is a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter with 0% schema description coverage, so the description must compensate. Calling the input 'a blob of text' clarifies it is raw free-form text rather than structured fields, but it gives no hints about size limits, encoding, or how much surrounding text is tolerable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (extract) and resource (a contact's name, email, and phone) from input text, which is concrete enough to distinguish it from broader siblings like summarize or classify_sentiment. It does not explicitly contrast itself with near-neighbors such as extract_emails or normalize_phone, so sibling differentiation is only implied by the three-field 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?
There is no guidance on when to pick this over extract_emails (email only), normalize_phone, or redact_pii. The description says what it pulls out but never states prerequisites, when-not-to-use, or which sibling handles the narrower cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_datesB
Extract every date referenced in a piece of text, normalized to ISO format YYYY-MM-DD. [conductor: verified stochastic command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the normalization behavior (ISO YYYY-MM-DD), but says nothing about ambiguous or partial dates, timezone handling, whether the result is a list, or how multiple dates in one text are ordered — all material behaviors for a date extractor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and efficient. However, the bracketed '[conductor: verified stochastic command]' tag is unexplained boilerplate that occupies space without helping an agent invoke the tool correctly, weakening the otherwise tight structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema utility, the description covers the essential purpose and output normalization. It still omits what the return value looks like and how edge cases (no dates found, ambiguous dates) are handled, leaving meaningful gaps 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 0% for the single required 'text' parameter. The phrase 'a piece of text' does map that parameter to its meaning, providing some compensation, but it adds no constraints on length, language, or format, so the description only partially fills the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — 'Extract every date referenced in a piece of text' — and adds the normalization target (ISO YYYY-MM-DD), which clearly distinguishes it from sibling extractors like extract_urls or extract_emails. The trailing '[conductor: verified stochastic command]' is unexplained noise that slightly muddies an otherwise crisp purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no when-not-to-use conditions, and no named alternatives among the many sibling extraction tools. Usage is only inferable from the verb 'extract' applied to text, leaving the agent to guess at routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_emailsC
Extract all email addresses from text. [conductor: verified pure command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose return format, deduplication behavior, case sensitivity, or what '[conductor: verified pure command]' means in practical terms, leaving significant gaps for a tool with no structured behavioral metadata.
Agents need to know what a tool does to the world 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 instruction is a single front-loaded sentence with no wasted words. The bracketed conductor note is slightly extraneous, but the description remains appropriately sized for a simple 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 one-parameter extraction tool with no output schema or annotations, the description is minimally adequate. It should do more to explain the return shape or edge-case behavior, but the simplicity of the operation keeps it from being critically incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the only parameter, 'text', has no description in the schema. The description merely says 'from text', which identifies the input type but adds no constraints or semantics beyond what the parameter name already implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Extract all email addresses from text.' It implicitly distinguishes itself from siblings like extract_urls and extract_contact by naming the exact extraction target, though it does not explicitly contrast with 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?
There is no guidance on when to use this tool versus alternatives such as extract_contact or redact_pii. The description only implies usage from the resource type and gives no exclusions or context for choosing this extractor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_keywordsB
Extract up to k salient keywords or short phrases that appear verbatim in the input text. [conductor: verified stochastic command]
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | ||
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose a meaningful guarantee (returned keywords are exact substrings of the input, not paraphrases) and that results are capped at k. However, it omits return format, ordering, what happens when fewer than k candidates exist, and the '[conductor: verified stochastic command]' tag implies nondeterminism without explaining it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the action first and the key constraint second, so there is little waste. The trailing '[conductor: verified stochastic command]' bracket is unexplained boilerplate that adds ambiguity rather than value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no annotations and no output schema, the description covers purpose and one behavioral guarantee but not the return shape or default behavior for the optional k. Adequate but with visible gaps an agent would need to guess around.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate; it explains k as an upper-bound cap ('up to k') and implies text as the source. It does not state that k is optional or what default applies when k is omitted, leaving a real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Extract') and resource ('salient keywords or short phrases') with a scoping constraint ('appear verbatim in the input text'). Clear enough to distinguish it from adjacent siblings like summarize or word_count, but it does not name or explicitly contrast any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives such as summarize or classify_sentiment, nor any stated exclusions or preconditions. The 'verbatim' constraint hints at scope but is a behavioral property, not usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_urlsA
Extract all http(s) URLs from a text, deduped while preserving first-seen order. [conductor: verified pure command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does disclose real behavior beyond the schema: dedupe and preservation of first-seen order, plus a note that it is a verified pure command (implying no side effects). However it omits the return shape and what happens on no matches, which leaves gaps for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with zero waste; the dedupe/order constraint arrives before the metadata tag. The bracketed conductor tag is mildly noisy but carries a useful purity signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, no-output-schema transform this is nearly complete. The only material omission is the return format (list of URL strings, behavior when none are found), which an agent would want to know.
Complex tools with many parameters or behaviors need more documentation. 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, 'text', at 0% schema description coverage, but the description's phrase 'from a text' effectively maps to it and the parameter is self-evident. Little additional semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (extract) and resource (http(s) URLs from a text) plus two behavioral qualifiers (dedupe, first-seen order). The resource is distinct enough from siblings like extract_emails and extract_dates, though no sibling is named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 name and the phrase 'from a text'. There is no explicit when-to-use, when-not-to-use, or pointer to adjacent extract_* siblings, leaving the agent to infer selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fix_jsonC
Repair malformed or loosely-formatted JSON text into a valid JSON value. [conductor: verified stochastic command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It does not say what tolerances are handled (trailing commas, single quotes, unquoted keys), what happens when repair is impossible, whether output is a string or a parsed value, or what the cryptic tag '[conductor: verified stochastic command]' implies about determinism — if anything, it hints at non-determinism without explaining it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is short, front-loaded, and waste-free. The trailing bracketed conductor tag adds no actionable meaning for an agent and 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 one-parameter, no-output-schema utility the description covers the basic contract, but it leaves the failure mode and the nature of the returned value unspecified. Adequate as a minimum viable definition, not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter with 0% schema description coverage, so the description must compensate. 'JSON text' does convey that the single input is the malformed JSON string rather than a path or options object, but it says nothing about size limits, encoding, or accepted input shapes.
Input schemas describe structure but not intent. Descriptions should explain 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 ('repair') and resource ('malformed or loosely-formatted JSON text') plus the outcome ('a valid JSON value'). It is clearly distinguishable from the sibling json_minify and json_extract, but it does not explicitly contrast with them, 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?
No guidance on when to use this versus json_minify or json_extract, no mention of prerequisites, and no exclusions. The agent must infer that this is the tool for invalid JSON from the word 'malformed' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
json_extractC
Extract a caller-specified list of fields from a blob of text into a JSON object. Each requested field becomes a key; the value is null when the field is absent from the text. [conductor: verified stochastic command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| fields | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It usefully states that absent fields map to null, but says nothing about determinism despite the odd '[conductor: verified stochastic command]' tag, nothing about how fields are matched (exact keys, dot paths, regex), duplicate field names, or cost/limits of the extraction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the operation, followed immediately by the output contract. The trailing bracketed conductor tag is unexplained noise that slightly undercuts an otherwise clean 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?
It is a simple two-parameter tool and the description covers the output contract in lieu of an output schema, which is the right instinct. However, the ambiguity around how field names are resolved and the unexplained 'stochastic' note leave an agent without enough to predict results reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It maps 'text' to the source blob and 'fields' to the requested keys and explains the null-on-absence behavior, which is real added value, but it never says what field syntax is accepted (plain strings vs nested paths) or how values are typed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 plus resource ('Extract ... fields from a blob of text into a JSON object') and even specifies the output shape. It does not differentiate itself from generic siblings such as extract_dates or fix_json, but the operation is concrete enough that an agent can tell what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to prefer this over siblings like extract_dates, extract_emails, extract_contact, or fix_json, nor any prerequisites or exclusions. Usage is only inferable from the purpose sentence itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
json_minifyB
Minify a JSON string by removing insignificant whitespace. [conductor: verified pure command]
| Name | Required | Description | Default |
|---|---|---|---|
| json | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden. The '[conductor: verified pure command]' note signals a side-effect-free, deterministic transformation, which is genuinely useful context, but the description says nothing about behavior on invalid JSON (error vs. passthrough) or the return type.
Agents need to know what a tool does to the 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 functional sentence, front-loaded with the verb and outcome, followed by a short provenance tag. Nothing is padded or 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 trivial single-parameter pure string transform, the description covers the operation and input adequately; the main omission is the error/return behavior on malformed input, which matters little given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it only partially does: it identifies the input as a JSON string, which maps to the single 'json' parameter. With one self-evidently named required parameter, this is the minimum viable level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (minify) and resource (a JSON string) plus the exact mechanism (removing insignificant whitespace). It is unambiguous against siblings like fix_json or json_extract, though it never explicitly names or contrasts 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?
There is no guidance on when to reach for this versus fix_json (which also touches malformed JSON) or when minification is desirable. Usage is only implied by the tool name and operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
normalize_phoneA
Normalize a phone string to canonical '[+]digits' form by stripping non-digit characters. [conductor: verified pure command]
| Name | Required | Description | Default |
|---|---|---|---|
| phone | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose the core transformation (stripping non-digit characters, optional leading '+') and the '[conductor: verified pure command]' tag signals it is side-effect-free. It does not say what happens on empty input, extensions, or invalid/non-phone strings, nor whether errors are raised or a best-effort string returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence front-loads the operation, the canonical output, and the mechanism, followed by a short provenance tag. The bracketed conductor note is meta-information rather than tool semantics, which is minor noise, but nothing is bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter pure utility with no output schema and no annotations, the description covers input expectations and the exact output shape, which is most of what an agent needs. Only error/failure behavior is left 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 0% (a bare `string`), so the description must compensate, and it largely does: it tells the agent the input is an arbitrary phone string and that non-digit characters (including separators) are acceptable and will be stripped. It stops short of enumerating accepted formats or edge cases, so it is not fully 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 ('Normalize') and resource ('phone string') and even pins down the exact output form ('[+]digits'). No sibling tool in the list performs phone normalization, so confusion with slugify, extract_contact, etc. is unlikely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to reach for this tool versus alternatives such as extract_contact (which may also surface phone numbers) or when pre-normalization is required before other operations. The agent must infer the use case entirely from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redact_piiA
Replace every email address and phone number in the input text with [REDACTED], leaving all other text unchanged. [conductor: verified stochastic command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does add real behavioral context — everything not matching an email or phone is left byte-for-byte unchanged, and the placeholder is the literal '[REDACTED]' — but it omits whether output is deterministic, whether it reports a replacement count, and it appends an unexplained '[conductor: verified stochastic command]' tag that is noise for a straightforward text substitution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded, single, and waste-free. The trailing '[conductor: verified stochastic command]' bracket does not earn its place and slightly muddies an otherwise clean statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 text transform with no output schema, the description gives enough to call it correctly: the input, the transformation, the placeholder used, and the guarantee about untouched text. Only reporting behavior (count of redactions, edge formats) is left unspecified, which is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but there is only one parameter and the description names it functionally ('the input text'), so an agent knows exactly what to pass. It still adds no constraints on size, encoding, or behavior with malformed input, so it is adequate rather than rich.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Replace') plus the exact targets (email addresses and phone numbers) and the replacement token, and it is trivially distinguishable from siblings like extract_emails, extract_contact and normalize_phone, which find or transform rather than redact. An agent can tell exactly what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose strongly implies when to use it (sanitizing text before sharing), but the description never states conditions, prerequisites, or alternatives — e.g. it doesn't say to use extract_contact when you only need to locate contacts rather than mask them. Usage is left to inference from the name and verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slugifyB
Convert a string into a URL-safe slug. [conductor: verified pure command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It adds useful context with '[conductor: verified pure command]', indicating no side effects, but it does not explain slug rules, error behavior, or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with the purpose front-loaded. Every part is useful and there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter utility, the description is minimally adequate but omits what 'URL-safe' entails and does not mention the return value despite having no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the single required parameter 'text' is undocumented. The description's 'a string' only restates the obvious type without adding format or constraint details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Convert a string into a URL-safe slug.' It is clear what the tool does, but it does not explicitly distinguish itself from the similar sibling tool to_snake_case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as to_snake_case. It implies usage by naming the output format, but offers no explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarizeC
Summarize a blob of text in at most a few sentences, using only the text itself. [conductor: verified stochastic command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| max_sentences | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose two useful traits: a length cap on output and that summarization is extractive/grounded rather than knowledge-augmented; the bracketed tag hints that output is stochastic (non-deterministic), which is real behavioral signal. However, that tag is cryptic jargon, and nothing is said about long-input handling, failure modes, or cost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence plus a short bracketed tag — front-loaded and free of padding. The tag itself is the only questionable element, since it spends words on opaque process metadata rather than tool 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 annotations, no output schema, and 0% parameter documentation, the description is the sole source of truth and is too thin. It never says what the return value looks like (plain string?), how max_sentences overrides the default cap, or how very long inputs are handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain both parameters. It mentions the text input only obliquely and never explains max_sentences — no units, default, or how it interacts with the stated 'at most a few sentences' cap, which arguably conflicts with it. That leaves the only optional parameter's semantics entirely undefined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 (Summarize) and resource (a blob of text) and adds two scoping constraints: output is 'at most a few sentences' and the summary must use 'only the text itself.' That grounding constraint meaningfully separates it from siblings like extract_keywords or truncate, though the opening clause largely restates the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to pick this over siblings such as extract_keywords, truncate, or categorize, and no when-not guidance. The 'only the text itself' clause is an output constraint, not a routing rule, so an agent must infer selection context on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_fillA
Fill a template by replacing every {{key}} token with String(data[key]); fails, naming the keys, if any {{key}} has no value in data. [conductor: verified pure command]
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| template | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose key behavior beyond the schema: values are coerced via String(data[key]) and the operation fails with an error that names the missing keys. It does not say what happens with nested/non-scalar values or what the successful return looks like, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that leads with the action, then the substitution rule, then the failure mode. No filler; the trailing conductor tag is the only non-essential element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, no-output-schema utility, the description covers the operation, the coercion rule, and the error contract, which is enough to call it correctly. It stops short of explaining return value shape or behavior with object-valued keys.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there are no property descriptions, so the description must compensate — and it does by explaining that `template` holds {{key}} tokens and `data` is the key-value map those tokens resolve against. That is substantially more than the bare schema conveys, though edge-case semantics for nested keys remain unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 precise verb and resource ("Fill a template") and immediately specifies the exact mechanism: replacing every {{key}} token with String(data[key]). No sibling tool (slugify, fix_json, truncate, etc.) offers template substitution, so the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the mechanism rather than stated: an agent can infer this is the tool for rendering a tokenized template against a data map, and no sibling competes for that job. However, there is no explicit when-to-use framing or exclusion, so the score stays at the minimum-viable level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
to_snake_caseB
Convert a string to snake_case. [conductor: verified pure command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and the bracketed "verified pure command" tag does add real behavioral context: no side effects, deterministic output. It does not disclose edge-case handling (acronyms, punctuation stripping, Unicode) or the return shape, which matters for a transformation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the operation and then the purity guarantee. The bracketed meta-tag is slightly noisy but small and conveys a genuine property.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 pure single-argument transform with no output schema, the description covers the core action, but it omits how ambiguous inputs are handled and what exactly is returned. Enough to call it, not enough to predict results for mixed-case or punctuated input.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One required parameter with 0% schema description coverage; the description only refers generically to "a string" rather than naming or describing the text input. For a single obvious input this is close to adequate, but it adds no meaning beyond the parameter's name and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 target format ("Convert a string to snake_case"), so the transformation is unambiguous. It does not distinguish itself from the sibling tool slugify, which performs a closely related normalization, leaving an agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this over slugify or normalize_phone, no preconditions, and no exclusion cases. The only guidance is the implied 'if you need snake_case output', which the agent must infer entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
translateC
Translate a piece of text into a given target language. [conductor: verified stochastic command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| target_language | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, and it discloses almost nothing: no return format (a plain translated string?), no handling of unknown or unsupported languages, no notes on whether the source language is auto-detected. The bracketed 'conductor: verified stochastic command' fragment is internal noise rather than behavioral information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is tight and front-loaded, which is good. The trailing '[conductor: verified stochastic command]' artifact adds no value to an agent and dilutes an otherwise efficient description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no annotations and no output schema, the description should at minimum clarify the target_language format and what is returned. Neither is covered, so an agent could easily invoke it with a malformed language value or misread 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 description coverage is 0%, so both required parameters are documented only by their names. The description loosely maps to them ('piece of text', 'given target language') but never states the expected format for target_language (ISO code vs. English name) or any text-length expectation, leaving the critical ambiguity unresolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('Translate') and resource ('a piece of text') plus the output direction ('into a given target language'), which is enough to distinguish it from utility siblings like slugify or word_count. It stops short of differentiating from the adjacent detect_language tool, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives such as detect_language, nor any prerequisites or constraints (e.g., whether text length is limited, whether target_language must be provided by name or code). The agent must infer usage entirely from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
truncateA
Truncate text to at most max characters, appending a single-character ellipsis when it must be cut. [conductor: verified pure command]
| Name | Required | Description | Default |
|---|---|---|---|
| max | Yes | ||
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral load. It does disclose the ellipsis-appending behavior and states the command is pure (no side effects), but it leaves the key edge case ambiguous: whether the ellipsis counts toward `max` (result could be max+1 chars) and what happens at max=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 front-loaded sentence stating the core contract, with no wasted filler. The trailing '[conductor: verified pure command]' tag adds useful safety context (it supports purity), though it is meta-noise rather than natural description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter pure text transform with no output schema, this is nearly sufficient: the operation, the cut condition, and the appended character are all stated. Only the interaction between `max` and the ellipsis remains underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It clarifies that `max` is a character budget and that `text` is what gets cut, but it does not resolve whether the appended ellipsis is inclusive of that budget — the one semantic detail that matters.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Truncate text') plus the exact output contract ('at most `max` characters, appending a single-character ellipsis'). No sibling tool in the list performs truncation, so the agent can distinguish it 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?
Usage is only implied by the verb; there is no explicit when-to-use or when-not guidance. In practice no sibling offers an alternative truncation behavior, so the missing guidance is low-risk but still absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_countA
Count the words and characters in a string. Words are whitespace-separated tokens of the trimmed text; chars is the raw length of the input. [conductor: verified pure command]
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose deterministic behavior: words are whitespace-separated tokens of the trimmed text, chars is the raw length. The '[conductor: verified pure command]' tag further signals no side effects. It does not say what the response object looks like, 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?
Two short sentences with the core definition front-loaded and no redundant restatement of the name. The bracketed conductor tag is low-cost meta-noise rather than wasted prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter pure function with no annotations and no output schema, the description defines both computed metrics precisely enough to predict results. Only the shape of the returned value is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does add real meaning by explaining that trimming applies to the word count but not the character count, yet it never names the 'text' parameter explicitly or notes required/string 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?
States a specific verb ('Count') and two specific resources ('words and characters') applied to a string, which no sibling tool does. An agent can distinguish it from truncate, slugify, or summarize 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 only implied by the tool's obvious utility; there is no explicit when-to-use, when-not-to-use, or mention of an alternative (e.g. truncate for length limiting). For a simple utility this is tolerable but it leaves the agent to infer context.
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.
23 tool updates
v0.4.1- First observed
base64_decode - First observed
base64_encode - First observed
categorize - First observed
classify_sentiment - First observed
dedupe_lines - First observed
detect_language - First observed
extract_contact - First observed
extract_dates - First observed
extract_emails - First observed
extract_keywords - First observed
extract_urls - First observed
fix_json - First observed
json_extract - First observed
json_minify - First observed
normalize_phone - First observed
redact_pii - First observed
slugify - First observed
summarize - First observed
template_fill - First observed
to_snake_case - First observed
translate - First observed
truncate - First observed
word_count
TDQS
Scored across 23 tools
Most tools have clearly distinct purposes, but a few boundaries are slightly fuzzy: extract_contact overlaps with extract_emails/redact_pii, slugify overlaps with to_snake_case, and classify_sentiment overlaps with categorize. The descriptions generally clarify the distinctions, so misselection risk is low but not zero.
All names use consistent snake_case, which is a strong baseline. However, the convention mixes verb_noun (extract_emails, normalize_phone), noun_verb (word_count, json_extract, base64_encode), and bare verbs (summarize, truncate, translate), which is a minor inconsistency.
At 23 tools, the set is heavy for a text-processing utility server and sits at the upper edge of the appropriate range. Each tool is small and focused, but the overall surface feels broad rather than tightly scoped.
The server covers a wide range of text operations: normalization, extraction, transformation, classification, translation, encoding, and JSON repair/minification. Some generic utilities like regex replace, case conversion beyond snake_case, or HTML stripping are missing, but the core workflows are well supported.
Maintenance
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Hosted Web Crawler MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
Related MCP Servers
- AlicenseAqualityDmaintenanceA safe, local MCP server that lets Claude drive a controlled software-development loop (inspect, read, plan, patch, apply, check, analyze, fix, summarize) on a project, using deterministic tools and real diffs/test runs.101MIT
- FlicenseNot gradedqualityDmaintenanceA local MCP server that connects Claude Code to your work environment through auditable tools for file operations, API calls, and command execution, with safety gates and configuration.-
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enhances Claude Code with evidence-first engineering, protocol gates, project-aware verification, auditable traces, and durable autonomous execution.17 npmMIT
- AlicenseNot gradedqualityDmaintenanceMCP server that turns coding workflows into explicit execution graphs (DAG) with deterministic command execution, human-in-the-loop gates, and tamper-proof run history for Claude Code.5 npmMIT