claude-augur-mcp
<img align="right" src="claude-augur.svg" alt="claude-augur-mcp" width="220">
# claude-augur-mcp
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server for **plan reasoning summaries** in [Claude Code](https://docs.anthropic.com/en/docs/claude-code). Surfaces decisions, tradeoffs, and assumptions as scannable abstracts so you can correct Claude's reasoning at a glance.
<br clear="right">

[](https://www.npmjs.com/package/claude-augur-mcp) [](https://opensource.org/licenses/MIT) [](https://www.typescriptlang.org/) [](https://nodejs.org/) [](#) [](https://github.com/Vvkmnn/claude-augur-mcp)
---
Claude's reasoning about plans is invisible. When Claude writes a plan, its decisions, assumptions, and tradeoffs are buried in the document. You have to read the entire thing to find them. If Claude assumed the wrong approach or made a bad tradeoff, you won't know until implementation is underway and something breaks.
Augur reads the plan structure and returns a template that Claude fills with its actual reasoning, inline in the response rather than hidden in a collapsed tool result. You see decisions, assumptions, and tradeoffs at a glance and can correct them before a single line of code is written.
## install
**Requirements:**
[](https://claude.ai/code)
**From shell:**
```bash
claude mcp add claude-augur-mcp -- npx claude-augur-mcp
```
**From inside Claude** (restart required):
```
Add this to our global mcp config: npx claude-augur-mcp
Install this mcp: https://github.com/Vvkmnn/claude-augur-mcp
```
**From any manually configurable `mcp.json`**: (Cursor, Windsurf, etc.)
```json
{
"mcpServers": {
"claude-augur-mcp": {
"command": "npx",
"args": ["claude-augur-mcp"],
"env": {}
}
}
}
```
There is **no `npm install` required**: no external databases, no indexing, only Node.js built-ins for filesystem access.
However, if `npx` resolves the wrong package, you can force resolution with:
```bash
npm install -g claude-augur-mcp
```
## features
1 tool. Plan structure extraction. Template seeding. Inline rendering.
#### augur_explain
Read a plan file and return a structured template for Claude to fill with its reasoning. Claude renders the abstract **inline in its response**, not hidden in a collapsed tool result.
**Call after writing or editing a plan file:**
```
augur_explain plan_path="/Users/you/.claude/plans/your-plan.md"
```
**MCP returns two content blocks:**
Block 1: one-line summary, visible even when the tool result is collapsed.
```
your-plan.md Β· 10/18 done
```
Block 2: template with pre-rendered header, progress, and `[FILL]` markers.
```
β π my-project Β· your-plan.md ββββββββββββββββββββββββββββββββββββ
β Build a REST API with authentication, rate limiting,
β and WebSocket support for real-time notifications.
β
β Progress βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Done (10/18): Auth scaffold, Rate limiter + 1 more
β Next: WebSocket layer + 1 more
β
β Decisions ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [FILL: 2-4 decisions, format: "β choice β reason"]
β [child decisions use: " β choice β reason"]
β
β Assumptions ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [FILL: 1-2 assumptions, format: "? statement"]
β
β Tradeoffs ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [FILL: 1-2 lines, "+" for pro, "β" for con]
β
β Reasoning ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [FILL: 2-3 lines explaining WHY]
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
**Claude fills the template inline:**
```
β π my-project Β· your-plan.md ββββββββββββββββββββββββββββββββββββ
β Build a REST API with authentication, rate limiting,
β and WebSocket support for real-time notifications.
β
β Progress βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Done (10/18): Auth scaffold, Rate limiter + 1 more
β Next: WebSocket layer + 1 more
β
β Decisions ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Express over Fastify β team familiarity, middleware ecosystem
β β Passport.js for auth β proven, supports OAuth + JWT
β β Redis for rate limiting β atomic counters, TTL built-in
β β ws over Socket.io β lighter, no fallback polling needed
β
β Assumptions ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ? Single Redis instance sufficient for current scale
β ? WebSocket clients handle reconnection gracefully
β
β Tradeoffs ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β + Redis rate limiting: sub-ms response, horizontal scaling
β β Extra infrastructure dependency to operate
β
β Reasoning ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Auth must be production-grade from day one β Passport.js
β handles OAuth/JWT without custom crypto. Redis rate limiting
β chosen over in-memory because the API will be multi-process.
β ws chosen over Socket.io to avoid 200KB bundle overhead.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
**What gets extracted from the plan file:**
| Field | Source | Example |
| --- | --- | --- |
| Project name | H1 title before `:` | `my-project` |
| Purpose | First `**Primary goal**:` line, or first prose paragraph | Full text, word-wrapped |
| Sections | H2 headings (excluding `Detail:` sections) | `Context, Architecture, ...` |
| Progress | `### Step N:` headings with `- [x]` / `- [ ]` counts | `Done (10/18): Auth, Rate limiter` |
| Done steps | Steps where all items are `[x]` | Capped at 2 names + `N more` |
| Next steps | Steps with pending items | First name + `N more` |
## methodology
How [claude-augur-mcp](https://github.com/Vvkmnn/claude-augur-mcp) [reads](https://github.com/Vvkmnn/claude-augur-mcp/tree/main/src) plans:
```
π claude-augur-mcp
βββββββββββββββββββ
Claude writes a plan
augur_explain
β
βΌ
βββββββββββββββββββ
β read plan file β from disk (read-only)
β (session.ts) β
ββββββββββ¬βββββββββ
β
βββ title β project name (before ":")
βββ purpose β **Primary goal**: or first prose
βββ sections β H2 headings
βββ progress β ### Step N: with [x]/[ ] counts
β
ββββββββββΌβββββββββ
β render template β left-gutter format
β (render.ts) β [FILL] markers for Claude
ββββββββββ¬βββββββββ
β
ββββββββββββββ΄βββββββββββββ
βΌ βΌ
block 1 block 2
summary template
(visible collapsed) (Claude renders inline)
β β
βΌ βΌ
plan.md Β· 10/18 done β π project Β· plan.md ββ
β purpose...
β Progress ββββββββββββ
β Done (10/18): Auth + 1
β Decisions βββββββββββ
β [FILL]
β Assumptions βββββββββ
β [FILL]
βββββββββββββββββββββββ
TEMPLATE SEEDING:
Regex extraction of Claude's thinking blocks produces garbage:
free-form prose has no structured patterns to match.
Augur takes a different approach: extract plan structure (the
deterministic part), seed a template, let Claude fill reasoning
(the part only Claude knows). Structure from MCP, content from
Claude. Consistent format, accurate reasoning.
MCP pre-renders Claude fills
ββββββββββββββ ββββββββββββ
header + purpose decisions
progress counts assumptions
section labels tradeoffs
formatting rules reasoning
```
**Two-block return**: MCP tool results get collapsed in Claude Code UI. Block 1 is a one-line summary visible even when collapsed. Block 2 is the full template that Claude renders inline in its response, visible to the user without expanding.
**Read-only**: `augur_explain` only reads the plan file. No disk writes, no state, no side effects. Works in plan mode.
**Architecture:**
```
claude-augur-mcp/
βββ package.json
βββ tsconfig.json
βββ src/
β βββ index.ts # MCP server, 1 tool
β βββ types.ts # PlanStructure interface
β βββ session.ts # Plan file parser + step progress extractor
β βββ render.ts # Template generator with left-gutter format
βββ demo/
βββ demo.cast # asciinema recording
βββ demo.gif # animated demo
```
**Design principles:**
- **Template seeding over regex extraction**: regex on thinking blocks produced garbage; template seeding lets Claude fill its own reasoning accurately
- **Inline over collapsed**: tool results get collapsed in Claude Code UI; inline rendering keeps the abstract visible
- **Read-only**: no disk writes, no state, works in plan mode
- **Single tool**: `augur_explain` does one thing well; no CRUD, no storage, no insight management
- **Left-gutter format**: `ββββ` vertical bar with no right border; can't misalign, renders cleanly in any terminal width
- **Never truncate**: purpose and header always render in full; word-wrapped, never cut
**Design influences:**
- [Architecture Decision Records](https://adr.github.io/): structured format for capturing decisions with context and consequences
- [Y-Statement ADR variant](https://medium.com/olzzio/y-statements-10eb07b5a177): concise decision format: "In context X, facing Y, we decided Z, accepting C"
- Roman [Augurs](https://en.wikipedia.org/wiki/Augur): priests who interpreted signs and patterns to reveal meaning hidden from ordinary observation
## development
```bash
git clone https://github.com/Vvkmnn/claude-augur-mcp && cd claude-augur-mcp
npm install && npm run build
```
**Scripts:**
| Command | Description |
| --- | --- |
| `npm run build` | TypeScript compilation (`tsc && chmod +x dist/index.js`) |
| `npm run dev` | Watch mode (`tsc --watch`) |
| `npm start` | Run MCP server (`node dist/index.js`) |
| `npm run clean` | Remove build artifacts (`rm -rf dist`) |
| `npm run typecheck` | TypeScript validation without emit |
| `npm test` | Type-check |
Contributing:
- Fork the repository and create feature branches
- Follow TypeScript strict mode and [MCP protocol](https://modelcontextprotocol.io/specification) standards
Learn from examples:
- [Official MCP servers](https://github.com/modelcontextprotocol/servers) for reference implementations
- [TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk) for best practices
- [Creating Node.js modules](https://docs.npmjs.com/creating-node-js-modules) for npm package development
## license
[MIT](LICENSE)
<hr>
<a href="https://en.wikipedia.org/wiki/Tomb_of_the_Augurs"><img src="logo/tomb-of-the-augurs.jpg" alt="Tomb of the Augurs" width="100%"></a>
<p align="center">
_**[Tomb of the Augurs](https://en.wikipedia.org/wiki/Tomb_of_the_Augurs)**, fresco (Tarquinia, ~530 BCE). Claudius, emperor, scholar, and member of the Augural College, wrote [Tyrrenika](https://en.wikipedia.org/wiki/Tyrrenika), a lost 20-volume history of Etruscan civilization and their methods of divination. The augurs' role was not to predict the future, but to interpret the signs and reveal whether a proposed course of action had merit._
</p>
TDQS
Scored across 1 tool
Only one tool is exposed, so there is no possibility of selecting the wrong tool or confusing overlapping purposes. Its purposeβextracting plan structure and returning an inline templateβis clearly stated.
The sole tool uses a clear snake_case name with a consistent augur_ prefix. With only one tool, there are no naming inconsistencies to evaluate.
One tool is thin for an MCP server, but it matches a narrow, single-purpose helper. It is borderline rather than extreme because the operation is non-trivial and self-contained.
The tool covers the stated operation of extracting plan structure and producing a renderable template. There are no lifecycle operations like validation or template customization, but those are not clearly required by the described scope.