Ariadne
Every MCP server you installed, and what it spends on every turn whether you reach for it or not.
A server is judged once, before you install it. Then it joins every session you run and nothing measures it again.
- TypeScript
- Bun
- Claude Code
- hooks
- MCP
GitHub (opens in a new tab)README (opens in a new tab)Changelog (opens in a new tab)
What it does
A registry grades a server before you install it: where the code came from, what it asks for, what a scanner found. That judgement is made once, from the outside, on a repository. Then you install the server, it becomes part of every session you run, and nothing measures it again.
Ariadne measures the one you already run. It is a Claude Code plugin, and it asks the servers it measures for one thing only, the list of tools they already publish.
The number that matters most is the one nothing else reports: a connected server charges you before you call it once. Its tool definitions are injected into every request, each with a name, a description and a JSON schema. Twelve servers with a dozen tools each is a five-figure token bill paid on every turn, whether or not a single one of those tools is ever reached for.
What the report says
/ariadne prints the session you are in. The table is the boring half:
knossos
standing cost 49,207 bytes (~13,669 estimated tokens)
reach 2/33 tools
calls 14
returned 182,904 bytes (~50,807 estimated tokens)
largest 38,213 bytes, from scan_project
share 71.4% of MCP bytes returned
latency p50 412ms
latency p95 1,204msThe findings under it are the reason to run it, and each one names its evidence:
3 servers were connected and never called
context7: 2 tools, 4,864 bytes (~1,351 estimated tokens) injected per request
chaos: 3 tools, 22,146 bytes (~6,152 estimated tokens) injected per request
momus: 11 tools, 8,737 bytes (~2,427 estimated tokens) injected per request
Together they cost 35,747 bytes (~9,930 estimated tokens) on every turn, whether or
not you reach for them.
Observed across 6 sessions and 214 tool calls.
argos has failed to connect in every session since 2026-08-10
31 failed connections across 22 sessions on 9 days. Last error class: CONNECTION_CLOSED.
Its tools have not existed for any of them.A tool that describes itself in nine words and returns 38 KB on average is visible as such. So is a server that stopped connecting a week ago and has been nothing but a config entry ever since.
Every rule carries a minimum sample and stays silent below it. A tool called once is not a measurement, so no p95 appears until a tool has been called five times, and "never called" needs enough watched traffic behind it to mean anything.
Quick start
Needs Bun 1.1 or newer, and nothing else.
claude plugin marketplace add https://aranea-development.nl/plugins/marketplace.json
claude plugin install ariadne@araneaThe first session after install builds the hook binary in the background and says so. From the next session, Ariadne is recording.
Then import the history your machine already has:
ariadne backfillStanding cost and connection history show up immediately after a backfill and a probe. Reach, latency and result sizes come from the hooks, and the hooks only have something to say once you have run real sessions with real tool calls in them. A report run straight after install shows 0 calls for every server. That is the correct number for a server nothing has called yet.
Three sources, and one that may vanish
Hooks record every tool call: its timing, the size of what went in and what came back, and whether it failed. That half is cheap and stable, and it sees nothing before a call happens.
So a prober connects to each configured server at session start, out of band, asks what it exposes, measures the payload and disconnects. That is the only way to learn the standing cost, because no transcript and no log records a tools/list payload.
The third source is Claude Code's own MCP logs, which have been recording connection attempts on your machine for weeks. Ariadne reads them, which is why it can print a real report on its first run instead of after a week of collecting. That path is undocumented and may move, so it only ever enriches. If it disappears, the history goes and every other number stands.
Claude Code's own built-in tools are measured on the same axes, as a baseline. They make the MCP numbers legible, and they never produce a finding, because you cannot uninstall a built-in.
What it does not do
Cutting a server is your decision. Ariadne never edits a config.
It records the size of tool arguments and the size of results, and neither payload. What came back is usually the most sensitive thing in a session, and a monitor that logs payloads is a second copy of your data in a place nobody is guarding. Server command lines, environments and URLs are never recorded either: claude mcp list prints API keys in its command column, and anything that logged what it enumerated would copy them somewhere they are not guarded. Tool names, description lengths and schema shapes are recorded deliberately, because they are the server's published interface and the findings cannot be computed without them.
It does not grade a server. It measures. A grade from one machine's traffic would be a number pretending to be a judgement.
Nothing leaves the machine. There is no network code beyond the prober's connections to your own configured servers, and no export format. Everything lives under ~/.ariadne/.
It adds nothing to your context window unless you asked for a report. A tool whose subject is the cost of things sitting in your context has no business sitting in it.