How to Give a Coding Agent Short Test Reports Through the Abbreviatory MCP Server
A coding agent fixing a bug runs the tests again and again. Change a line, run go test ./..., read the output, change another line. Each run of our sample suite prints 4,882 lines of go test -json events, 808 kB, and almost all of it says a test passed. The agent reads every line, every time, and pays for every line in its context window. By the tenth run most of its context is old test output.
What the agent needs after each run is short: which tests fail, what they printed, and whether that changed since the last run. That’s what the Abbreviatory MCP server gives it.

Set It Up Once
Install the binary from the download page, then add it to the agent. For Claude Code:
claude mcp add abbreviatory -- abbreviatory mcp
Most other agents read the same thing from their MCP settings:
{"mcpServers": {"abbreviatory": {"command": "abbreviatory", "args": ["mcp"]}}}
The agent now has four tools: run, reduce, expand and history. Tell it, in its instructions or in the chat, to run tests through run instead of its shell. It passes the command as a list, ["go", "test", "-json", "./..."], and cwd if the tests aren’t in the current folder.
What the Agent Sees
The first run is a normal report: the counts, then every failing test with its message, within 4 kB unless the agent asks for another budget. From the second run on, the report starts with what changed. This is our sample suite after one fix and one new mistake:
run 2; since run 1: 1 new, 1 fixed, 6 still failing (longest for 2 runs)
new: TestFieldSpaces (example.com/gosample/parse, 0.00s) [ref 3e35712ad529:g1205]
fixed: TestLegacyFormat (example.com/gosample/parse, 0.00s) [ref 6f92e70f603c:g1213]
tests: 1,205 passed, 7 failed, 1 skipped
FAILED (7):
- TestFieldSpaces (example.com/gosample/parse, 0.00s) (new) [ref 3e35712ad529:g1205]
parse_test.go:33: Field("width = 12"): unexpected error: strconv.Atoi: parsing " 12": invalid syntax
parse_test.go:36: Field("width = 12") = 0, want 12
The new failure comes first, marked (new). That’s the one the agent’s last change broke, and it doesn’t have to work that out by comparing two walls of output. If the agent runs the tests again without changing anything that matters, the answer is one line:
[abbreviatory] go test -json output, 4,882 lines (808.5 kB), ref 3e35712ad529; run 3, identical to run 2: the same 7 failures
The whole report is about 2.7 kB. The run it stands for is 808.5 kB.
When the Agent Needs More
Every line the report leaves out is behind a reference. If the agent needs the whole stack trace of a panic, or the full output of a passing test, it calls expand with the reference from the report, such as 3e35712ad529:g1, and gets the original lines back exactly. The originals stay on your machine, in Abbreviatory’s store, for a week.
A test run that hangs is stopped after 10 minutes, or after timeout_seconds if the agent sets it, and anything it started is stopped with it. If the agent cancels the call, the same happens.
Where It Stops
The history is kept per project and command, so the same agent working in two repositories keeps two histories. Without -json or -v, go test only names the tests that fail, so a test that disappears from the output counts as fixed even if it was deleted. It works with pytest, JUnit reports and plain logs the same way; for logs it compares error kinds instead of test names. The reference lists every option of the tools.