AdrMcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AdrMcpfind all accepted ADRs about authentication"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.

AdrMcp
Table of Contents
Related MCP server: DocGraph
Getting Started
Prerequisites
Run
git clone https://github.com/Atypical-Consulting/AdrMcp.git
cd AdrMcp
dotnet restore
dotnet build
dotnet run --project AdrMcp/AdrMcp.csprojEvery 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

Features
Read & search ADRs ā
list_adrs,get_adr,search_adrs(lexical or semantic), andget_adr_indexfor the full decision timeline.Author from a template ā
create_adrdrafts MADR- or Nygard-format ADRs;update_adrreplaces or appends a single section.Lifecycle-aware transitions ā
set_statusenforces the ADR lifecycle;supersede_adrcreates the replacement and marks/links the old one superseded in a single call.Relationship graph & staleness detection ā
find_related_adrs/get_adr_graphexpose links and supersession chains;find_stale_adrsflags ADRs whosecode_refsno longer resolve in the codebase.Conflict & coverage analysis ā
detect_conflictssurfaces contradictory accepted decisions;coverage_reporthighlights ADR coverage gaps by architectural area.Preview-by-default writes ā every mutating tool defaults to
previewOnly: trueand returns a unified diff before anything touches disk.Ships as a dotnet tool, NuGet package, and Docker image, plus three bundled Claude Code skills (
adr-author,adr-review,adr-supersede) for the judgment layer on top of the raw tools.
The problem
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.
The solution
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.
Storage & format
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:
---
id: 1
title: Use PostgreSQL for persistence
status: accepted # proposed | accepted | rejected | deprecated | superseded
date: 2026-07-08
tags: [data]
links:
- { type: superseded-by, target: 5 }
code_refs:
- { path: src/Data/Repository.cs, symbol: PostgresRepository }
---
# Use PostgreSQL for persistence
## Context and Problem Statement
...
## Decision Outcome
...
## Consequences
...Everything is git-native, human-readable, and diff-able ā no database.
Tools
Tool | Kind | Description |
| read | List/filter ADRs (status, tag, date range) |
| read | Get one ADR; optionally only selected |
| read | Lexical (default) or |
| read | The decision log / timeline |
| read | Incoming/outgoing links + supersession chain |
| read | Full relationship graph (nodes + typed edges) |
| write | Create an ADR from a template ( |
| write | Replace/append a single |
| write | Transition status (enforces the lifecycle) |
| write | Create replacement + mark old superseded + link, in one call |
| write | Typed link between two ADRs (adds inverse) |
| read | MADR compliance: sections, status, dangling links, duplicate ids |
| read | Explicit |
| read | ADRs whose |
| read | ADR coverage per architectural area (tag); surfaces gaps |
| read | Draft an ADR proposal from a unified diff |
| write | Regenerate the browsable |
| 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.
Configuration
Resolved in order: CLI arg ā env var ā default.
Setting | CLI | Env | Default |
ADR root |
|
|
|
Repo root (for |
|
| current directory |
Code-linking is provider-based
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.
Run
# from source
dotnet run --project AdrMcp -- --adr-root ./docs/adr
# as a global tool
dotnet tool install -g AdrMcp
adr-mcp --adr-root ./docs/adrMCP client config
{
"mcpServers": {
"adr": {
"command": "adr-mcp",
"args": ["--adr-root", "/path/to/repo/docs/adr", "--repo-root", "/path/to/repo"]
}
}
}Docker
docker build -t adr-mcp .
docker run --rm -i -v "$PWD:/workspace" adr-mcp --adr-root /workspace/docs/adrUsage
Once adr-mcp is registered as an MCP server, an agent calls its tools directly. A typical
read-then-write flow:
// "What ADRs do we have about data storage?"
list_adrs({ "tag": "data" })
// ā [{ "id": 5, "title": "Use PostgreSQL for persistence", "status": "accepted", "tags": ["data"] }]
// "Draft a decision for switching to gRPC internally" ā nothing is written yet
create_adr({
"title": "Adopt gRPC for internal services",
"template": "madr",
"previewOnly": true
})
// ā unified diff of the new docs/adr/0006-adopt-grpc-for-internal-services.md
// Once the content looks right, write it for real
create_adr({ "title": "Adopt gRPC for internal services", "template": "madr", "previewOnly": false })
// Later, retire an old decision in favor of a new one, preserving history
supersede_adr({ "oldId": 2, "newTitle": "Replace REST gateway with gRPC", "previewOnly": false })Claude skills
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 |
| "write an ADR", "record this decision" | Decide if a decision warrants an ADR, frame a sharp Context/Decision/Consequences, draft via |
| "review this ADR", "does this decision hold up" | Structural + substantive critique against a rubric, using |
| "we changed our mind", "retire this decision" | Pick the right lifecycle move and drive |
Develop
dotnet build AdrMcp.slnx
dotnet test AdrMcp.slnx # unit tests + MCP-over-stdio integration tests
dotnet pack AdrMcp/AdrMcp.csproj -c Release -o ./artifactsContinuous integration
CI/CD runs on GitHub Actions, modeled on RoselineMCP:
Workflow | Trigger | What it does |
| push / PR to | Build + test matrix (ubuntu/windows/macos); 80% line-coverage gate on ubuntu |
| push / PR / weekly | CodeQL security analysis (C#) |
| push to | Publish the landing page to GitHub Pages |
| push to | Maintain a release PR (Conventional Commits); on merge, publish NuGet + MCPB + MCP Registry + GHCR image |
Releases are automated with release-please: merge the release PR it opens to ship. See PUBLISH.md.
Project layout
AdrMcp/
āāā Interfaces/ service contracts (IAdrRepository, ICodeLinkProvider, ā¦)
āāā Services/ repository, templates, validation, graph, search, embeddings, code-links
āāā Tools/ Navigation / Authoring / Intelligence / Utility MCP tools
āāā Models/ Adr, AdrStatus, AdrLink, CodeRef, response DTOs
āāā Program.cs DI wiring + stdio MCP hostTech Stack
.NET 10
ModelContextProtocol
xunit
xunit.runner.visualstudio
DiffPlex
Markdig
Microsoft.Extensions.Hosting
YamlDotNet
Roadmap
Real embedding-backed semantic search for
search_adrs/detect_conflicts(beyond term-vector similarity)Roslyn-based
ICodeLinkProviderfor deep C# symbol resolution infind_stale_adrsAdditional ADR templates beyond MADR/Nygard (e.g. Y-statements)
Editor extension (VS Code / JetBrains) to browse and visualize the decision graph
Broaden the CI coverage gate and publish to additional package registries
See the open issues for details and to propose new ideas.
Atypical MCP servers
Part of a suite of Model Context Protocol servers by Atypical Consulting:
RoselineMCP ā Roslyn code intelligence for AI agents
ASTral ā structured code retrieval (tree-sitter)
AdrMcp ā Architecture Decision Records over MCP
MarkdownInk ā Markdown rendering for the terminal
Contributing
Contributions are welcome. Open an issue first to discuss any significant change.
Fork the repository and create your branch (
git checkout -b feat/my-feature)Commit your changes (
git commit -m 'feat: ...')Push the branch and open a Pull Request
Built by Atypical Consulting. We also make NuGetKeep, a self-hosted NuGet server with supply-chain quarantine.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Atypical-Consulting/AdrMcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server