MCP server for Architectural Decision Records: navigate, author, validate, link, and analyze them.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
Inspect callable tools, capabilities, and parameters exposed to AI agents by AdrMcp.
list_adrsList/filter ADRs (status, tag, date range)
get_adrGet one ADR; optionally only selected `##` sections
search_adrsLexical (default) or `semantic` term-vector search
get_adr_indexThe decision log / timeline
find_related_adrsIncoming/outgoing links + supersession chain
get_adr_graphFull relationship graph (nodes + typed edges)

Every architectural decision, on the record β an MCP server that turns a folder of Markdown ADRs into live tools your AI agent can use: search, author, validate, link, and trace decisions.
π atypical-consulting.github.io/AdrMcp

list_adrs, get_adr, search_adrs (lexical or semantic), and get_adr_index for the full decision timeline.create_adr drafts MADR- or Nygard-format ADRs; update_adr replaces or appends a single section.set_status enforces the ADR lifecycle; supersede_adr creates the replacement and marks/links the old one superseded in a single call.find_related_adrs / get_adr_graph expose links and supersession chains; find_stale_adrs flags ADRs whose code_refs no longer resolve in the codebase.detect_conflicts surfaces contradictory accepted decisions; coverage_report highlights ADR coverage gaps by architectural area.previewOnly: true and returns a unified diff before anything touches disk.adr-author, adr-review, adr-supersede) for the judgment layer on top of the raw tools.Architectural decisions get made in Slack threads, PR comments, and someone's head β then the
reasoning evaporates. Months later a teammate asks "why is it done this way?", nobody remembers, and
the decision gets silently re-litigated or accidentally reversed. ADRs fix that β if they're
written and kept honest. But a folder of Markdown files is inert: you can't ask it what's still
accepted, trace what superseded what, or notice a decision that no longer matches the code.
It's worse with AI coding agents: the one collaborator that could keep decisions current has no way to read, write, or reason about them.
AdrMcp makes that folder a live surface any MCP client can work. It gives your agent tools to list and search decisions, draft new ones from a MADR template, validate structure and links, supersede a decision while preserving its history, and flag stale or conflicting ones β all preview-by-default, so nothing is written without you seeing the diff.
The records stay plain Markdown in git; AdrMcp adds the tools. Built as a .NET 10 stdio MCP server,
architecturally modeled on RoselineMCP β
layered Tools β Services, [McpServerTool] attributes, shipped as a dotnet tool + Docker image.
ADRs are markdown files under an ADR root (default docs/adr/), one file per decision named
NNNN-kebab-title.md, using MADR 4.0 frontmatter + sections:
Everything is git-native, human-readable, and diff-able β no database.
| Tool | Kind | Description |
|---|---|---|
list_adrs | read | List/filter ADRs (status, tag, date range) |
get_adr | read | Get one ADR; optionally only selected ## sections |
search_adrs | read | Lexical (default) or semantic term-vector search |
get_adr_index | read | The decision log / timeline |
find_related_adrs | read | Incoming/outgoing links + supersession chain |
get_adr_graph | read | Full relationship graph (nodes + typed edges) |
create_adr | write | Create an ADR from a template (madr or nygard) |
update_adr | write | Replace/append a single ## section |
set_status | write | Transition status (enforces the lifecycle) |
supersede_adr | write | Create replacement + mark old superseded + link, in one call |
link_adrs | write | Typed link between two ADRs (adds inverse) |
validate_adr | read | MADR compliance: sections, status, dangling links, duplicate ids |
detect_conflicts | read | Explicit conflicts-with + highly similar accepted ADRs |
find_stale_adrs | read | ADRs whose code_refs no longer resolve |
coverage_report | read | ADR coverage per architectural area (tag); surfaces gaps |
suggest_adr_from_change | read | Draft an ADR proposal from a unified diff |
render_index | write | Regenerate the browsable README.md decision index |
diff_adr | read | Diff two ADRs, or a file vs its canonical rendering |
Writes are preview-by-default. Every mutating tool takes previewOnly (default true) and
returns a unified diff of the intended change; pass previewOnly=false to write to disk.
Resolved in order: CLI arg β env var β default.
| Setting | CLI | Env | Default |
|---|---|---|---|
| ADR root | --adr-root <path> | ADR_ROOT | <repo>/docs/adr |
Repo root (for code_refs) | --repo-root <path> | ADR_REPO_ROOT | current directory |
find_stale_adrs resolves code_refs through an ICodeLinkProvider. The default
FileSystemCodeLinkProvider is language-agnostic (a ref resolves if the file exists and, when a
symbol is given, that symbol's text is present). A Roslyn (.NET) or codebase-memory provider can be
plugged in behind the same interface β deep symbol resolution stays the client's job.
Once adr-mcp is registered as an MCP server, an agent calls its tools directly. A typical
read-then-write flow:
Three project skills under .claude/skills/ add the judgment/workflow layer on top of the
MCP tools (the server provides the mechanics; the skills provide the craft). They activate
automatically in Claude Code when the connected AdrMcp server is available:
| Skill | Triggers on | What it does |
|---|---|---|
adr-author | "write an ADR", "record this decision" | Decide if a decision warrants an ADR, frame a sharp Context/Decision/Consequences, draft via create_adr + validate_adr |
adr-review | "review this ADR", "does this decision hold up" | Structural + substantive critique against a rubric, using validate_adr / detect_conflicts |
adr-supersede | "we changed our mind", "retire this decision" | Pick the right lifecycle move and drive supersede_adr / set_status with correct linking |
CI/CD runs on GitHub Actions, modeled on RoselineMCP:
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/adrmcp)<a href="https://allmcps.com/mcp/adrmcp"><img src="https://allmcps.com/api/badge/adrmcp?style=directory" alt="AdrMcp on AllMCPs" /></a>