Agent skill

Edt MCP Tool Descriptions

by DitriXNew in DitriXNew/EDT-MCP

How to size, write and A/B-test the text of a tool — its description and its inputSchema parameter prose — so that cutting it does not cost call quality, and so that a tool that IS getting called…

AGPL-3.0Auto-check passedAgent Workflows

Install Edt MCP Tool Descriptions

skills CLI
$ npx skills add DitriXNew/EDT-MCP --skill edt-mcp-tool-descriptions -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install DitriXNew/EDT-MCP edt-mcp-tool-descriptions --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/DitriXNew/EDT-MCP.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/edt-mcp-tool-descriptions .claude/skills/edt-mcp-tool-descriptions && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
edt-mcp-tool-descriptions
GitHub stars
296
Token cost
~3k tokens
SKILL.md length
1,739 words
Files
1
Skills in repo
24
Repo updated
First seen
Licence
AGPL-3.0

At a glance

How to size, write and A/B-test the text of a tool — its description and its inputSchema parameter prose — so that cutting it does not cost call quality, and so that a tool that IS getting called…

  • Works in 4 steps: One sentence of purpose. What it does,… → Then, only if it applies: the… → A discriminator only where two tools are… → …
  • Rewriting any tool description
  • SKILL.md covers The two kinds of sentence, The rule that decides where a…, Writing rules and Four facts a parameter…, plus 3 more sections
  • Calls python3

What it does

Edt MCP Tool Descriptions is an agent skill from DitriXNew/EDT-MCP. How to size, write and A/B-test the text of a tool — its description and its inputSchema parameter prose — so that cutting it does not cost call quality, and so that a tool that IS getting called wrong gets text that fixes it. Use when shortening or rewriting any tool description, when adding a tool and choosing how much to write, when a tool is being mis-called or its protocol ignored, or when deciding whether a piece of prose earns its tokens.

Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Agent Workflows, covering MCP servers and A/B testing. The licence is AGPL-3.0.

When your agent uses it

  • Rewriting any tool description
  • Adding a tool and choosing how much to write
  • A tool is being mis-called
  • Its protocol ignored

Example prompts

  • “/edt-mcp-tool-descriptions”

Requirements

  • Python 3

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. One sentence of purpose. What it does, on what.
  2. Then, only if it applies: the load-bearing clause — DESTRUCTIVE / CASCADES / IRREVERSIBLE
  3. A discriminator only where two tools are genuinely confusable and the request wording
  4. Nothing else. Payload grammars, examples and edge cases belong in the guide — they were

What it can do on your machine

Read from SKILL.md and the folder at commit 6d18531. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Edt MCP Tool Descriptions loads about 3k tokens when it runs. Until then it costs about 120 tokens; SKILL.md has 1,739 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~120
When it runs · the whole SKILL.md, loaded when a task matches
~3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from DitriXNew/EDT-MCP at commit 6d18531, republished under its AGPL-3.0 licence (© DitriXNew). 1,739 words, ~3,045 tokens.

Download SKILL.mdSave it as .claude/skills/edt-mcp-tool-descriptions/SKILL.md (or your agent's skills folder).
name
edt-mcp-tool-descriptions
description
How to size, write and A/B-test the text of a tool — its `description` and its `inputSchema` parameter prose — so that cutting it does not cost call quality, and so that a tool that IS getting called wrong gets text that fixes it. Use when shortening or rewriting any tool description, when adding a tool and choosing how much to write, when a tool is being mis-called or its protocol ignored, or when deciding whether a piece of prose earns its tokens.

EDT-MCP — writing and testing tool text

tools/list is loaded into every session before the user types anything. Every sentence in it is paid for on every request, forever. So the question for any sentence is not "is it true?" but "does removing it change what the model does?" — and that is a question with a measured answer, not an opinion.

The harness that answers it lives in tests/tool-choice/. Its findings (Sonnet 5, 500 requests, four text variants) are what this skill encodes.


The two kinds of sentence

Everything in a tool's text is one of these, and they get opposite treatment.

Capability indexLoad-bearing clause
What it iswhat the tool does, what it can address, how it differs from the neighboura protocol, an irreversibility, a cascade, a deprecation, a fact that exists nowhere else
Example"Addressed by FQN; the type token may be English or Russian""call once WITHOUT confirm to preview, then again with confirm=true"
Measured effect of removing itnone — tool choice held at 99–100% with the index cut to one line, on one-step requests AND on 145 long multi-step scenarioslarge — preview→confirm collapsed 54% → 23%
Verdictcut to one linekeep, and make it imperative

Cut the index. Keep the clause. If a clause is not working, make it longer, not shorter.

That last part is the point: a description is not a token budget to minimise, it is a control surface. delete_metadata with a one-sentence imperative protocol clause outperformed today's full paragraph 98% to 54%. Shorter AND better, because the sentence was written as an instruction rather than as documentation.


The rule that decides where a sentence goes

Text that is always in context changes behaviour. Text the model fetched itself does not.

Measured directly: over 61 destructive requests, the arm with bare descriptions fetched the tool's own guide in 46 of 61 cases — the guide documents the two-phase protocol in full — and still previewed only 22% of the time, versus 27% when it had not fetched it. Reading the guide changed nothing.

Consequences, all of them counter-intuitive enough to be worth stating:

  • "Move it to the guide" is not a way to keep a behaviour. It is a way to delete it while feeling safe. Guides are reference, not control.
  • A pointer does not summon the guide. Adding "see get_tool_guide('x')" changes nothing about whether the guide gets read; what drives a fetch is missing data in the schema, not an invitation in the description.
  • Do not answer a behaviour problem by enlarging the guide. 87 guides already cost ~111K tokens; in a wide session they, not the catalog, dominate. Growing them makes the payload worse and the behaviour the same.
  • A protocol that must not be skipped should not live in prose at all. Even today's full description only gets preview→confirm 54% of the time. Text raises that to 98%; only server-side enforcement gets 100%.

Writing rules

Description.

  1. One sentence of purpose. What it does, on what.
  2. Then, only if it applies: the load-bearing clause — DESTRUCTIVE / CASCADES / IRREVERSIBLE / DEPRECATED, and the protocol as an imperative, not a description of a protocol. "Call once WITHOUT confirm to preview, then again with confirm=true to apply" beats "supports a two-phase confirmation workflow" by a wide margin.
  3. A discriminator only where two tools are genuinely confusable and the request wording would not separate them (clean_project / revalidate_objects / resync_to_disk).
  4. Nothing else. Payload grammars, examples and edge cases belong in the guide — they were measured not to affect the call.

Parameter prose. Default to none: name, type, required, enum, default carry the call. Keep a phrase only when it states a fact that the schema cannot:

  • a value vocabulary the enum name does not reveal — markerKind: 'task' = TODO/FIXME/XXX/HACK (drop it and "find all FIXMEs" stops resolving to get_markers);
  • a mutual exclusion — objects vs objectFqns;
  • a scope limit that makes the tool inapplicable — create_infobase: FILE only, server/web rejected;
  • a semantic that flips behaviour — run_yaxunit_tests.debug=true returns a handle and needs wait_for_break.

One clause. If it needs a paragraph, it belongs in the guide and the parameter needs a better name or a tighter enum.

Never cut an enum, a default, or the one concrete example that shows a value's shape. Stripping those was measured to break call construction: invented keys, invented value shapes, invented paths.


Four facts a parameter description may be the ONLY carrier of

Cutting inputSchema prose in this plugin went through eight review rounds, and every round found the same shape: the sentence being deleted was the only place a fact existed. The schema here declares no default, cannot say "this mutates", and cannot express a conditional requirement — so before deleting a parameter's description, check it against these four, all of which really happened:

  1. The VALUE SHAPE. modulePath is a bare string; the only statement of its form was the example 'CommonModules/MyModule/Module.bsl'. Same for an array<object> payload whose members ({name, value, language?}) are declared nowhere else.
  2. A MUTATING DEFAULT. recordBuildTime, updateBeforeLaunch, terminateRunningClients default to true and, left out, write. On the wire they are a bare {"type":"boolean"}.
  3. An OPTIONAL PARAMETER WHOSE ABSENCE WIDENS THE BLAST RADIUS. Omit clean_project.projectName and every project is rebuilt; omit build_external_objects.objectName and every external object is rewritten. optional reads as "safe to leave out" and here it is the opposite. Always ask what the omission means — this class has no danger vocabulary to grep for, so the ratchet cannot see it.
  4. A CONDITIONAL REQUIREMENT. rename_metadata_object.expectedHash becomes required only once confirm=true meets a non-empty disableIndices.

InputSchemaCompactorRiskTest is the ratchet for the classes that DO have a vocabulary (discard / overwrite / irreversible / personal data / unsaved). Classes 1, 3 and 4 have none — they are caught by reading, and by naming the parameter in InputSchemaCompactor.KEEP with the reason beside it.

The real fix is upstream: teach JsonSchemaBuilder to emit default and to mark a parameter as mutating. Then classes 2 and 3 become structural and the prose can go.


Show full SKILL.md (751 more words)Show less

Testing a description change

Never ship a text change on judgement alone — the last four rewrites in this repo all produced at least one result opposite to what was expected.

bash
cd tests/tool-choice
python3 build_catalogs.py --stage /tmp/tc-arms   # renders each arm into blind dirs,
                                                # copied OUTSIDE the checkout (see below)
# run every batch through an agent that may read ONLY arms/<arm>/,
# writing answers/<arm>_batch_<nn>.json and answers/<arm>_chain_<nn>.json
python3 grade.py            # metric table + 0..10 scorecard

To test a new variant, add it to v4_overrides.json (or a sibling file) and register an arm in build_catalogs.py. Arms are staged under blind names (arm_a…arm_d) so the runner cannot tell which variant it holds.

Blinding leaks in two places, and both have already happened here. Opaque directory names are the easy half; check the other two before trusting a number:

  1. Does the catalog name its own arm? Ours rendered # EDT-MCP tool catalog - arm V1 (current, as shipped) for a whole 500-request sweep. head -1 arms/*/catalog.md — all four lines must be identical.
  2. Does the runner see this repository? An agent started inside the checkout loads CLAUDE.md, which names the destructive tools as a "stop and think twice" zone — the exact behaviour the safety metric measures, handed to the runner for free. Stage the arms outside with --stage and start the runner there.

Both leaks move every arm the same way, so an A/B comparison survives them, but the absolute levels do not transfer to a real client. Report a safety number as "V4 against V1", never as "how often a client previews".

The bar to clear. A text change is accepted when, against the arm it replaces:

MetricRequirement
Верный тул (one-step)not lower
Покрытие плана (long scenarios)not lower
preview→confirm on destructivenot lower — this is the one that breaks first
Устаревший алиас выбран0
Вызовов с выдуманным параметром / без обязательногоnot higher
Честный отказ, когда тула нетnot lower
tools/list weightlower, or justified by a metric that improved

Nothing else counts as "no regression". In particular, a smaller payload is not a result on its own: V2 shrank the payload 19,6% and took safety from 54% to 30%.

A plan benchmark cannot see a missing value SHAPE — run the tool live too. The sweep grades plans, so a model that does not know what a parameter's value looks like scores well by planning a discovery call first, and the gap never shows up. modulePath was cut from 12 tools this way: 500 requests said nothing, and the first live run against a real server reported it could not tell a file path from a Type.Name token and spent a call finding out. Before shipping a cut, drive a dozen real requests through the live server and read what the agent says it hesitated over.

Read the misses, do not just read the totals. Every question where an arm disagreed with the expected label gets opened by hand. Three of the labels in questions.json were wrong and the model was right — including create_infobase, where all arms correctly refused a server infobase that the label demanded. A benchmark you do not audit measures your own assumptions.


Cost: what a cut is actually worth

The saving is not the payload delta. A short description makes the model fetch guides, and guides are large; the real number is catalog + the guides that session pulls.

Distinct tools in the session3–410202850
Cut-with-clauses vs today−50%−34%−14%0+28%

So a cut pays on the common profile (a session touching a handful of tools) and costs on a wide one. Two things follow: quote a saving with the profile attached, never bare; and remember that PREF_PROGRESSIVE_DISCLOSURE attacks the same cost by cutting the tool set, which scales where text edits do not.


When a tool is being called wrong

The fix is not "write more". Work down this list — the first three cost nothing at runtime:

  1. Rename the parameter or tighten the enum. A wrong call is usually an ambiguous name, and a schema fix is free where prose is not.
  2. Make the existing clause imperative. "Call once without confirm, then with confirm=true" instead of a sentence describing that a confirmation exists.
  3. Add a discriminator to the description, naming the sibling it is being confused with.
  4. Add one parameter phrase stating the fact the schema cannot.
  5. Enlarge the description — legitimately, even past today's length, if the metric moves. A description that is longer and measurably better is a good trade; the token budget is not the objective.
  6. Enforce it in the server. For anything that must never be skipped, this is the only answer that reaches 100%.

And re-run the harness after, because two of the six sometimes make things worse.

© DitriXNew, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/edt-mcp-tool-descriptions of DitriXNew/EDT-MCP.

Open the folder on GitHubat commit 6d18531

Compare with similar skills

Edt MCP Tool Descriptions next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Edt MCP Tool Descriptions compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Edt MCP Tool Descriptions this skillDitriXNew/EDT-MCP296—~3kAutomated safety check: PassAGPL-3.0
Gearcoleco Romhackingdrhelius/Gearcoleco142—~3.9kAutomated safety check: PassGPL-3.0
KapsoLeeroo-AI/kapso121—~642Automated safety check: PassMIT
Autoresearchgrandamenium/cortextos101—~1.9kAutomated safety check: PassMIT
Google Mapscablate/mcp-google-map469—~909Automated safety check: PassMIT
Reddit InsightsBrianRWagner/ai-marketing-claude-code-skills4411 repos~3.1kAutomated safety check: PassNone

Similar skills

  • Gearcoleco Romhacking

    drhelius/Gearcoleco

    Hack, modify, and translate ColecoVision and Super Game Module ROMs using the Gearcoleco emulator MCP server.

    142 GitHub stars~3.9k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Kapso

    Leeroo-AI/kapso

    Optimize code using KAPSO (Knowledge-Grounded Optimization).

    121 GitHub stars~642 tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Autoresearch

    grandamenium/cortextos

    The analyst has assigned you a research cycle, or you have identified a metric you want to improve through systematic experimentation.

    101 GitHub stars~1.9k tokensUpdated 17 days ago
    Agent WorkflowsAuto-check passed
  • Google Maps

    cablate/mcp-google-map

    Search places, resolve addresses, compare routes, inspect neighborhoods, and retrieve geographic or environmental facts through the standalone @cablate/mcp-google-map CLI.

    469 GitHub stars~909 tokensUpdated 13 days ago
    Marketing & SEOAuto-check passed
  • Reddit Insights

    BrianRWagner/ai-marketing-claude-code-skills

    Search and analyze Reddit content using semantic AI search via reddit-insights.com MCP server.

    441 GitHub starsUsed in 1 repo~3.1k tokens
    Marketing & SEOAuto-check passed
  • Autoresearch

    ericosiu/ai-marketing-skills

    Run Karpathy-style autoresearch optimization on any content.

    3.6k GitHub starsUsed in 2 repos~2.2k tokens
    Marketing & SEOAuto-check passed

More from DitriXNew/EDT-MCP

All 24 skills in this repo
  • Edt MCP Autopilot

    DitriXNew/EDT-MCP

    Autonomous, spec-driven, multi-agent pipeline that takes an EDT-MCP task or issue end-to-end — research → critics → architect → parallel development → review loop → tests → live-stand check →…

    296 GitHub stars~2.5k tokensUpdated 2 days ago
    Auto-check passed
  • Edt MCP Build Test

    DitriXNew/EDT-MCP

    How to build the EDT-MCP Eclipse plugin (Tycho/Maven) and run its unit and e2e tests, plus the test conventions for this repo.

    296 GitHub stars~1.4k tokensUpdated 2 days ago
    Auto-check passed
  • Edt MCP E2E Testing

    DitriXNew/EDT-MCP

    How to write/run the AUTOMATED black-box e2e suite (tests/e2e/) that covers every EDT-MCP tool (62 today) against a live server with git-fixture isolation, happy + negative + error-quality coverage…

    296 GitHub stars~1.3k tokensUpdated 2 days ago
    Auto-check passed
  • Edt MCP Yaxunit

    DitriXNew/EDT-MCP

    How to write and run YAXUnit unit tests for a 1C configuration through 1C:EDT + the EDT-MCP runyaxunittests / debugyaxunittests tools.

    296 GitHub stars~2.5k tokensUpdated 2 days ago
    Auto-check passed
  • Edt MCP Testing

    DitriXNew/EDT-MCP

    How to manually e2e-test each EDT-MCP server tool against a live EDT workbench + TestConfiguration.

    296 GitHub stars~2.1k tokensUpdated 2 days ago
    Auto-check passed
  • Edt MCP Architecture

    DitriXNew/EDT-MCP

    Map of the EDT-MCP plugin's target architecture — where the shared helpers live, the layering rules, and the canonical way to do project/metadata/code resolution.

    296 GitHub stars~1.2k tokensUpdated 2 days ago
    Auto-check passed

Questions about Edt MCP Tool Descriptions

What does Edt MCP Tool Descriptions do?

How to size, write and A/B-test the text of a tool — its description and its inputSchema parameter prose — so that cutting it does not cost call quality, and so that a tool that IS getting called…. Edt MCP Tool Descriptions is an agent skill from DitriXNew/EDT-MCP. How to size, write and A/B-test the text of a tool — its description and its inputSchema parameter prose — so that cutting it does not cost call quality, and so that a tool that IS getting called wrong gets text that fixes it.

When should I use Edt MCP Tool Descriptions?

Edt MCP Tool Descriptions fits situations like: rewriting any tool description; adding a tool and choosing how much to write; A tool is being mis-called; its protocol ignored.

How do I install Edt MCP Tool Descriptions in Claude Code?

Run `npx skills add DitriXNew/EDT-MCP --skill edt-mcp-tool-descriptions -a claude-code`. Or copy the skill folder (.claude/skills/edt-mcp-tool-descriptions in DitriXNew/EDT-MCP) into .claude/skills/edt-mcp-tool-descriptions in your project. Claude Code loads it when a task matches its description.

How do I install Edt MCP Tool Descriptions in Codex?

Run `npx skills add DitriXNew/EDT-MCP --skill edt-mcp-tool-descriptions -a codex`. Or copy the skill folder (.claude/skills/edt-mcp-tool-descriptions in DitriXNew/EDT-MCP) into .agents/skills/edt-mcp-tool-descriptions in your project. Codex loads it when a task matches its description.

Can I use Edt MCP Tool Descriptions in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add DitriXNew/EDT-MCP --skill edt-mcp-tool-descriptions -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/edt-mcp-tool-descriptions, .gemini/skills/edt-mcp-tool-descriptions, .github/skills/edt-mcp-tool-descriptions and .opencode/skills/edt-mcp-tool-descriptions in your project.

What does Edt MCP Tool Descriptions need to run?

Going by SKILL.md and its folder, Edt MCP Tool Descriptions needs the command-line tools its instructions call (python3). Our summary lists: Python 3.

Does Edt MCP Tool Descriptions access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Edt MCP Tool Descriptions safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Edt MCP Tool Descriptions use?

Edt MCP Tool Descriptions is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Edt MCP Tool Descriptions use?

About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Edt MCP Tool Descriptions?

Skills that share tags, products or a category with Edt MCP Tool Descriptions: Gearcoleco Romhacking (drhelius/Gearcoleco, 142 stars), Kapso (Leeroo-AI/kapso, 121 stars), Autoresearch (grandamenium/cortextos, 101 stars) and Google Maps (cablate/mcp-google-map, 469 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Edt MCP Tool Descriptions?

DitriXNew (a GitHub user) maintains it in DitriXNew/EDT-MCP, which has 296 GitHub stars. The repository holds 24 skills in this directory. The repository was last updated on October 7, 2026.

Source: DitriXNew/EDT-MCP on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.