terse-sharp
Roslyn for your coding agent — 88 MCP tools, 10–30× fewer tokens. Stops reading whole C# files: semantic navigation, compile-gated edits, safe renames, type-checked XAML. One dotnet tool install.
Install / Use
claude mcp add amusleh-spotware-com -- npx -y github:amusleh-spotware-com/terse-sharpIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
AI & Machine LearningSupported Platforms
Tags
Our assessment of terse-sharp
terse-sharp scores 74/100 on our quality scale, 846th of 939 AI & Machine Learning skills we index.
Its MCP Server is 41 KB long, well organised into 18 sections with 13 code examples: long enough that it reads more like full documentation than a focused instruction file, which agents can find harder to follow.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 3 days ago, so terse-sharp is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 92/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands.
Automated pattern scan on 2026-10-26. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
terse-sharp compared with similar skills
All 4 of these similar skills score higher than terse-sharp; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| terse-sharp (this skill)by amusleh-spotware-com | 74 | 3 | 3d ago | MCP Server |
| claude-memby thedotmack | 100 | 103.4k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 103.3k | 1d ago | CLAUDE.md |
| Understand-Anythingby Egonex-AI | 100 | 88.4k | today | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 77.9k | today | CLAUDE.md |
Frequently asked questions
- How do I install terse-sharp?
- Run
claude mcp add amusleh-spotware-com -- npx -y github:amusleh-spotware-com/terse-sharp. The install tabs above show the steps for each supported agent. - Which AI agents does terse-sharp work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is terse-sharp safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. It is MIT-licensed and scores 92/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is terse-sharp still maintained?
- The repository was last updated 3 days ago, so terse-sharp is actively maintained.
Skill content
View source on GitHub- Grep "Submit" → 40 hits → Read OrderService.cs (2,000 lines) → Read the three callers → Edit by line
+ find_usages OrderService.Submit → 6 real references, each tagged EXACT, ~200 tokens, one call
🎯 Five reasons it is installed
| | What it does | The number |
|---|---|---|
| 💸 Token saving | Answers semantically instead of dumping text — outlines, symbol ids, one record per line | 4.56M tokens never sent in one measured week — 2.9× the entire bill |
| ⏱️ Speed | Deletes round trips: batched reads, batched edits, one compile gate, concurrent test projects | a round trip costs 6.1 s of model latency before the tool runs; run_tests 38 % faster |
| 🧪 Code quality | Every edit is compile-gated and rolled back if it breaks; gate runs analyze → format → cleanup → analyze again in one call | a broken edit never reaches your branch |
| 🚦 Control | .terse.json policy can reject code that compiles but isn't mergeable; the guard denies Read/Grep/dotnet build; --read-only freezes everything | 14 rules, TERSE100–TERSE113, ReSharper's own defaults |
| 🧩 Your stack | Blazor/Razor, XAML for MAUI · WPF · WinUI · Avalonia, ASP.NET Core Minimal APIs, .resx localization, DI containers | answers what the compiler itself cannot check |
💸 Token saving — 4.6M tokens in one week, measured
508 Claude Code sessions, one developer, one week, one 31,000-file C# solution — replayed from
the raw transcripts. Every one of the 6,045 TerseSharp calls was re-priced against the built-in it
replaced: Read against the real file on disk, Grep against a real ripgrep run of the same query,
build / run_tests / git diff against 3,767 real dotnet and git invocations.
| | tokens |
|---|---|
| What the 6,045 TerseSharp calls actually cost | 2.41M |
| What Read / Grep / Bash would have cost for the same answers | 6.97M |
| Burned for nothing, had it not been installed | 4.56M — 2.9× the entire bill |
Then it compounds. Every token put into context was re-sent 33× (4.41B cache-read against 132.6M cache-write), so 4.56M tokens never injected are ~150M never re-read.
Per question, this is what the difference looks like:
| Question | Built-in tools | TerseSharp | |
|---|---|---|---|
| What's on this 2,000-line type? | Read → ~6,000 tok | get_type_outline → ~450 tok | 13× |
| Read a whole .cs file | Read → the entire text | read_text answers the outline unless you ask for text | 3× |
| Who calls this method? | Grep + follow-ups → ~4,000 tok | find_usages → ~200 tok | 20× |
| Rename across the solution | ~5,000 tok, misses the interface | rename_symbol → ~150 tok, correct | 30× |
| Why is the build red? | ~8,000 tok of MSBuild spew | build → ~600 tok | 13× |
| What did I just change? | git diff → the whole patch | diff_symbols → the changed declarations | 10× |
| Which rows does this checked-in table hold? | Read the whole .md, then grep it | read_text columns="Finding,Tool" cellChars=60 | ~10× |
| What does this budgeted doc cost in tokens? | a build plus the E2E suite → ~10 min | read_text tokens=true → ~3 s | 200× |
| Does this {Binding} bind? | no static answer exists in WPF | xaml_bindings validate=true | ∞ |
<sub>Asserted by a token-budget suite on every push, not estimated.</sub>
Success costs nothing. Every mutating tool answers in one line per changed file — verbose=true
returns the diff, dryRun=true previews it. Any caveat, rollback, timeout or zero-result run prints in
full, because condensing a result that carried a caveat is a wrong answer the agent cannot detect. A .terse.json policy WARNING is payload, so it rides on the one-line answer.
| The call | Built-in would cost | TerseSharp cost | |
|---|---:|---:|---:|
| find_implementations × 72 | 192k tok | 4k tok | 44.9× |
| find_usages × 274 | 1.26M tok | 111k tok | 11.4× |
| ranged read_text × 446 | 1.59M tok | 308k tok | 5.2× |
| get_file_outline × 162 | 402k tok | 112k tok | 3.6× |
| search_symbols × 520 | 860k tok | 272k tok | 3.2× |
| get_symbol_source × 630 | 1.26M tok | 405k tok | 3.1× |
| build × 165 | 32k tok | 10k tok | 3.1× |
| whole-file read_text × 930 | 1.04M tok | 881k tok | 1.2× |
| run_tests × 393 | 80k tok | 66k tok | 1.2× |
The floor. Push every assumption against TerseSharp — ranged reads priced as a perfect
Read offset/limit, searches priced at the median grep output instead of the mean — and the saving
is still 2.09M tokens, 1.9×. analyze, search_text, every edit tool and the whole .resx / XAML
/ Razor surface were scored zero, and no grep→Read follow-up chain was charged to the built-ins.
What lost. diff_symbols (13 calls) and list_tests (3) cost more than the raw command.
Measured, logged in the backlog, not hidden.
⏱️ Speed — fewer turns of the loop
An agentic task is a loop: emit a call, wait, read the answer, emit the next one. Two things decide how long it takes — how many times the loop turns, and how much each answer costs to read.
Mined from one week of real Claude Code sessions — 305 transcripts, 36,075 tool calls — every round trip costs 6.1 s of model latency before the tool even runs. So a tool that deletes a call beats one that merely shortens a response, and both beat a faster server.
| Instead of | One call |
|---|---|
| grep, open the hit, open its callers | find_usages — real references, each tagged EXACT or HEURISTIC |
| read the file to find the member, then read the member | get_file_outline → paste the id straight into get_symbol_source |
| one search per identifier | search_text queries=[…] — 8 literals, one pass, records tagged q1..qN |
| a text hit, an outline, then a ranged read to find the method it sits in | search_text containers=true — the declaration on the record itself |
| trace a symbol by hand across the solution | get_symbol usages=true · find_usages impact=true — definition, usages, implementations, blast radius |
| git describe to find where HEAD sits before a release | history describe=true — nearest tag, commits since it, short sha, dirty flag, one line |
| one read per file | read_text paths=[…] — up to 10 files, one answer |
| one ranged read per anchor in the same file | read_text ranges=["42", "101-102"] — discontinuous ranges, one answer |
| one edit call per site | edit_text edits=[…] — 25 edits across files, one write |
| re-sending a previewed, rolled-back or force-refused write | write_text retryWith=r3 — the payload is held, the retry sends none |
| edit, build, find you broke a caller, edit again | replace_symbol symbolIds=[…] — the member and its callers land in one compile gate |
| grep the test tree and guess what to run | find_usages impact=true tests=true — ready-made run_tests test= arguments |
| one search per glob | search_text paths=["src/**/*.cs", "**/*.md"] — globs OR-ed into one file set, one answer |
| dotnet test per project, serially | run_tests projects=[…] — concurrent, one process per core |
| a run_tests past the client's foreground limit, polled with TaskOutput | a plain run_tests where the client moves long calls to the background and notifies (Claude Code); elsewhere run_tests detach=true answers an id at once and run_tests status="<id>" waitSeconds=3600 waits for the verdict - nothing notifies a detached run, and run_tests status="cancel" stops a run whose caller stopped waiting |
And the waiting itself is shorter. A bare run_tests over a solution builds once, then runs each
test assembly directly where its runner allows — no MSBuild evaluation and no VSTest host per project —
measured 38 % faster over five alternating pairs. A green run_tests repeated with nothing written
since is not re-run at all: it answers UNCHANGED with the previous verdict and its age; a repeat that re-runs anyway names what moved in one NOTE re-ran: line. From the second
consecutive call of the same tool, the response adds one 14-token line naming the plural you should have
passed.
Parallel by default where it is safe. Every read tool — analyze included — declares the MCP readOnlyHint annotation and
every deleting tool declares destructiveHint, so a client that gates parallel dispatch on those hints —
Claude Code does — fans the reads out instead of running them one at a time. The build and test tools are
deliberately off that list: a build dispatched beside an edit is a race, not a saving.
🧪 Code quality — the gate your agent cannot skip
An agent that writes code it cannot verify is a liability. TerseSharp holds the Roslyn compilation, so it verifies before it reports success.
- 🛡️ Compile-gated edits. Every C#, Razor and refactoring edit is applied, re-analyzed, and rolled
back if it introduces a compile error — in the changed projects and every project that transitively
depends on them. The agent never gets to say "done" over a red tree.
undo_last_changereverses the last one;allowErrors=trueis the explicit opt-out. - 🧭 Semantic, never textual. Real references, not string matches — every record tagged
EXACTorHEURISTIC, so you always know what you are trusting. - 🧾 No silently-ignored arguments. A parameter a tool does not declare is refused by name; a listing
that quietly dropped your
maxResultsis a wrong answer the agent cannot detect. - 🚫 Never guesses. Where it cannot prove an answer it says so —
AmbiguousSymbol,SaturatedName,UNRESOLVED_CONTEXT,NOT rewritten. A false positive costs an agent more than no answer. - 🔄 Always fresh. A file you just created, or an edit from your IDE, is already in the next answer — no reload, no stale index.
One call runs the whole ladder in the mandated order and answers one verdict line:
gate → analyze at info severity → format → cl
Truncated for display — read the full file on GitHub.
Related Skills
claude-mem
103.4kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
103.3kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
Understand-Anything
88.4kGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
headroom
77.9kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
