Skip to main content

Clear Your Tools (CYT) — dynamic tool gating for eliminating the MCP/tools tax

Project description

Clear Your Tools

Clear Your Tools is a reverse proxy for coding agents such as Claude Code. It sits between the agent and upstream LLM providers (Anthropic-compatible APIs on OpenRouter, Novita, DeepInfra, and others), intercepts each request, and shrinks the tool payload before forwarding it upstream. Can be easily adopted for other harness agents.

Large MCP catalogs can add tens of thousands of tokens of tool-schema overhead on every turn. Clear Your Tools removes irrelevant tools and trims irrelevant optional parameters while always keeping required fields for tools that stay in the request.


How it works

Agent (Claude Code, etc.)
        │
        ▼
Clear Your Tools proxy  ──► extract user query from messages
        │                   decompose each tool schema
        │                   score / filter with reranker (or LLM pruning)
        │                   recompose pruned tool list
        ▼
Upstream provider (OpenRouter, Anthropic, Novita, …)

On each intercepted request the proxy:

  1. Extracts the user query from the conversation (latest user turn, with message cleanup).
  2. Decomposes tool schemas into a catalog of chunks: each tool root keeps required properties; optional properties are split into separate searchable units.
  3. Runs the pruning pipeline configured in config.yaml (default: rerank; or llm).
  4. Recomposes surviving tools — required properties always remain; only optional properties that look relevant to the query are merged back in.
  5. Forwards the modified request to the upstream provider with the smaller tools array.

Pruning pipeline

Stage Model (default) When it runs What it does
rerank Qwen3-Reranker-8B (DeepInfra) models.rerankers.minimum_tools tools (default 29) Scores every catalog chunk against the user query; drops low-scoring tools and optional props.
llm Mercury 2 or GPT-OSS-120B (OpenRouter) models.llm.minimum_tools tools (default 50), after rerank LLM selects which catalog chunks to keep; can remove entire tools more aggressively.

Recommendations:

  • 50+ tools — keep rerank or use llm. rerank can be pipelined into LLM as a second stage (pipeline: [rerank, llm]) for stronger tool-level filtering on large catalogs.

Quick start

Requires uv tool. Install uv

1. Install proxy

From PyPI (proxy + pruners):

uv tool install 'clear-your-tools[all]'
Though we strongly recommend using password vaults like macOS KeyChain
# Store key in secure vault
security add-generic-password -s "nono" -a "OPENROUTER_API_KEY" -w "sk-..."  # macOS

# Now you can access the key like this:
export ANTHROPIC_AUTH_TOKEN="$(security find-generic-password -s "nono" -a "OPENROUTER_API_KEY" -w)"

2. Configure the proxy

Interactive wizard (writes ~/.config/cyt/config.yaml and optionally ~/.config/cyt/.env):

uv run cyt-rproxy setup

Or edit ~/.config/cyt/config.yaml manually — see CONFIG.md.

3. Run the proxy

Installed CLI:

uv run cyt-rproxy serve

Default listen port: 8834 (from bundled defaults.yaml or ~/.config/cyt/config.yaml).

4. Run the the Agent

Point Claude Code at the proxy:

export ANTHROPIC_BASE_URL="http://localhost:8834/anthropic"
export OPENROUTER_API_KEY="..."
export ANTHROPIC_AUTH_TOKEN="${OPENROUTER_API_KEY}"
claude --model haiku 'say hi' -p

The default upstream in config.yaml is OpenRouter's Anthropic-compatible endpoint. Change network.proxy.reverse.upstreams to target a different provider URL.

5. View pruning stats savings

uv run cyt-rproxy stats totals
uv run cyt-rproxy stats summary --period day
uv run cyt-rproxy stats events --limit 20

Stats are stored in ~/.config/cyt/stats.db by default.


FAQ

Doesn't pruning burn more tokens than it saves?

The reranker and weak LLM used for pruning are much cheaper per token than the main model (e.g. Claude Sonnet). You may spend extra tokens on pruning, but they cost a fraction of what you save on the main request. Set input_cost_per_token and output_cost_per_token in ~/.config/cyt/config.yaml to track savings.

Example pricing (input tokens):

Model Cost per 1M input tokens
Claude Sonnet 4.6 $3.00
Qwen-Reranker-8B $0.050
GPT-OSS-120B $0.14
Inception Mercury 2 $0.25

The weak models such as Mercury 2 or GPT-OSS-120B returns only the IDs of tools to keep, so its output stays extremely small. Rerankers do not count output tokens and are usually much cheaper than a strong LLM.

Rule of thumb: saving 1M Sonnet input tokens is still worthwhile even if pruning uses up to ~10M Mercury tokens — roughly a 1:10 cost ratio. The reranker has roughly a 1:60 cost ratio.

In practice, pruning usually adds modest overhead. Worst case (no tools pruned), you might pay ~$3.30 instead of $3.00. With typical pruning (40–95% of tool tokens removed), tool-schema cost drops from ~$3.00 to roughly $0.15–$1.80, plus ~$0.30 for pruning — about $0.45–$2.10 total for tool-related cost, or roughly 30–85% savings depending on policy.

Why don't I see 30–85% savings on my total request?

Those numbers apply to tool schemas only of the input tokens only, not the full prompt (system message, conversation history, user message, etc.). Clear Your Tools prunes tools based on the user request; the rest of the request is unchanged.

How much you save overall depends on:

  • How many tools you have — more MCP servers mean a larger share of the request is tool schemas. We do not recommend using CYT below 50 tools.
  • Which pruning policy you use — see Pruning policies.

To estimate savings on a captured request JSON, see DEV.md. To see statistics of actual net savings (input tokens) run:

uv run cyt-rproxy stats totals

With ~100 tools and prune_all, expect ~85–95% savings on tool tokens and typically ~30%+ savings on the full request. The more tools you have the more overall savings you'll see.

Where can I see how many tools and parameters an MCP server has?

The popular Fetch MCP server is a good example. On its Tools tab: 4 tools, each with 4 parameters (1 required, 3 optional) — 16 parameters total.

If the user asks to "fetch the Markdown of a webpage", the prune_all typically keeps only the Fetch Markdown tool with its required parameter plus any optional parameters that look relevant. Unrelated tools (e.g. Read file) are dropped entirely.


Development

See DEV.md for checkout setup, repository layout, library usage, and configuration reference.


Limitations

See LIMITATIONS.md for deployment constraints, token accounting caveats, and MCP aggregator trade-offs.

Debug

See details to debug pruning in debug/.


License

Inspiration

This project is inspired by the ideas explored in the tool-attention project, particularly around improving tool selection efficiency and reducing unnecessary tool exposure to the model.

It also aims to limit the effects of context rot by pruning irrelevant or confusing tools from the available toolset based on the current user prompt and execution context.

Reducing irrelevant tools helps decrease prompt noise, lowers cognitive load on the model, and can improve tool selection accuracy and overall agent reliability.

See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clear_your_tools-0.0.9.tar.gz (344.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

clear_your_tools-0.0.9-py3-none-any.whl (73.2 kB view details)

Uploaded Python 3

File details

Details for the file clear_your_tools-0.0.9.tar.gz.

File metadata

  • Download URL: clear_your_tools-0.0.9.tar.gz
  • Upload date:
  • Size: 344.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for clear_your_tools-0.0.9.tar.gz
Algorithm Hash digest
SHA256 e4f2be9c68e29f233f893cb635bf186608ac173f07e760e7bddb4e763947e7d9
MD5 da781472353b77d493a758641d58cb29
BLAKE2b-256 fe450a3d2518edbd11e4e4516f18bffc3022f99768cd7ba2c3577d3c81dd9c55

See more details on using hashes here.

Provenance

The following attestation bundles were made for clear_your_tools-0.0.9.tar.gz:

Publisher: publish-pypi.yml on qdrddr/clear-your-tools

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file clear_your_tools-0.0.9-py3-none-any.whl.

File metadata

File hashes

Hashes for clear_your_tools-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 198ea3bd0980ab5b6d9904dad1c8511ff9fd26407b265280d8ef72b8ce6b8ada
MD5 4060f70c51b01c9d483ba00f205e6609
BLAKE2b-256 ce74b2ca715aaa4b1497479940029418e0906ef575f57a7d16ac581965cad45b

See more details on using hashes here.

Provenance

The following attestation bundles were made for clear_your_tools-0.0.9-py3-none-any.whl:

Publisher: publish-pypi.yml on qdrddr/clear-your-tools

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page