Skip to main content
Glama

mcp-adr

PyPI version License: MIT Python

An MCP server that lets AI assistants create, manage, diagram, and export Architecture Decision Records (ADRs) directly from your conversation.

What are ADRs?

Architecture Decision Records are lightweight documents that capture the context, rationale, and consequences of significant architectural choices made during software development. They provide a searchable, version-controlled audit trail that helps teams understand why the system is built the way it is — not just how. Keeping ADRs close to the code prevents institutional knowledge from walking out the door when team members change.

Related MCP server: adr-skills

Features

  • Six typed templates — architecture, technology, integration, data, security, infrastructure — each with domain-specific sections generated automatically

  • Full lifecycle management — propose, accept, deprecate, or supersede ADRs with a single tool call; bidirectional links are maintained automatically

  • Diagram generation — Mermaid, PlantUML, and Draw.io output formats with per-ADR and project-wide overview diagrams

  • Impact analysis — find every ADR that mentions a component, build a full transitive dependency graph

  • Full-text search — query across all ADR content in the project

  • HTML export — render every ADR to standalone HTML pages with navigation

  • Companion skill — a Claude Code skill that gives the assistant deep ADR workflow knowledge without tool calls

Installation

pip install mcp-adr
# or
uv add mcp-adr

Configuration

Claude Code (settings.json)

{
  "mcpServers": {
    "mcp-adr": {
      "command": "mcp-adr"
    }
  }
}

Environment variables

Variable

Default

Description

ADR_DIR

docs/adr

Directory where ADR markdown files live

Every tool also accepts an optional project_path parameter to override the working directory at call time.


Tools Reference

CRUD

Tool

Key parameters

Description

adr_create

title, type, context, decision, deciders

Create a new ADR from a typed template

adr_read

query

Read an ADR by number or title substring

adr_update

number, content

Overwrite an ADR with new markdown content

adr_list

status, type

List all ADRs, optionally filtered

adr_search

query

Full-text search across all ADR content

Lifecycle

Tool

Key parameters

Description

adr_update_status

number, status, reason

Change status (Proposed/Accepted/Deprecated/Superseded)

adr_supersede

old_number, new_number

Mark an ADR as superseded, linking both documents

adr_deprecate

number, reason

Deprecate an ADR with a recorded reason

adr_link

from_number, to_number

Add a bidirectional related link between two ADRs

adr_history

query

Return matching ADRs as a timeline sorted by date

Diagrams

Tool

Key parameters

Description

adr_diagram

number, format, diagram_type

Generate a diagram for a single ADR

adr_overview

format, status_filter

Generate an overview diagram of all ADRs

Analysis

Tool

Key parameters

Description

adr_impact

component

Find all ADRs that mention a given component

adr_dependencies

number, format

Build or filter the ADR dependency graph

Export

Tool

Key parameters

Description

adr_export

output_dir

Export all ADRs to HTML files


Example Workflow

The following example walks through capturing a major API migration decision.

1. Create the ADR

adr_create(
    title="Migrate from REST to GraphQL",
    type="architecture",
    context="The mobile team reports over-fetching on every screen. REST endpoints return 40+ fields; clients use 5.",
    decision="Adopt GraphQL via Apollo Server. REST endpoints remain for external partners.",
    deciders="platform-team"
)
# → {"number": 1, "title": "Migrate from REST to GraphQL", "status": "Proposed", ...}

2. Generate a diagram

adr_diagram(number=1, format="mermaid")
# → {"number": 1, "format": "mermaid", "result": "<Mermaid context for LLM to render>"}

3. Accept the decision

adr_update_status(number=1, status="Accepted", reason="Approved in architecture review 2026-04-11")
# → {"number": 1, "old_status": "Proposed", "new_status": "Accepted"}

4. Check impact before changing the API layer

adr_impact(component="REST")
# → {"component": "REST", "count": 1, "results": [...]}

5. Export to HTML for sharing

adr_export(output_dir="site/adrs")
# → {"output_dir": "site/adrs", "files_count": 1, "files": ["site/adrs/ADR-0001.html"]}

Template Types

Each type value activates a set of domain-specific extra sections inserted between Consequences and Diagram.

Type

Extra sections

architecture

Components, Interactions, Constraints

technology

Evaluation Criteria, Comparison Matrix

integration

Interface Contract, Data Flow, Failure Modes

data

Schema Changes, Migration Strategy, Rollback Plan

security

Threat Model, Controls, Compliance

infrastructure

Topology, Scaling Strategy, DR Plan

All types share the common sections: Context, Decision, Alternatives Considered, Consequences (Positive / Negative / Risks), Diagram, Notes.


Diagram Formats

Format

Output

Rendering

Best for

mermaid

Text

GitHub, GitLab, Notion, etc.

Quick inline diagrams in markdown

plantuml

Text

PlantUML server or plugin

Richer UML notation, sequence diagrams

drawio

XML file

draw.io / diagrams.net

Editable, polished architecture diagrams

For mermaid and plantuml, the tool returns a context block that the LLM uses to render or display the diagram. For drawio, the tool writes a .drawio file alongside the ADR and records a link in the ADR's Diagram section.


Export

adr_export renders every ADR in the project to a self-contained HTML file using a built-in Jinja2 template. Files are written to output_dir (default: docs/adr/html). An index.html is also generated.

adr_export(output_dir="docs/adr/html")
# Produces:
#   docs/adr/html/index.html
#   docs/adr/html/ADR-0001-migrate-from-rest-to-graphql.html
#   ...

Companion Skill

A Claude Code skill is included that gives the assistant deep ADR workflow knowledge — it understands naming conventions, when to propose vs accept, how to chain tools, and how to produce complete ADRs in one pass.

Install

cp skills/adr/SKILL.md ~/.claude/skills/adr/SKILL.md

After installation, Claude Code will automatically load the skill when working with ADRs.


Development

git clone https://github.com/mauriziomocci/mcp-adr.git
cd mcp-adr
uv sync
uv run pytest -v
uv run ruff check src/mcp_adr/
uv run ruff format --check src/mcp_adr/


mcp-adr (Italiano)

Un server MCP che permette agli assistenti AI di creare, gestire, visualizzare ed esportare Architecture Decision Records (ADR) direttamente dalla conversazione.

Cosa sono gli ADR?

Gli Architecture Decision Records sono documenti leggeri che catturano il contesto, la motivazione e le conseguenze delle scelte architetturali significative prese durante lo sviluppo software. Forniscono una traccia verificabile e versionata che aiuta i team a capire perché il sistema e costruito in un certo modo — non solo come. Mantenere gli ADR vicino al codice evita la perdita di conoscenza istituzionale quando i membri del team cambiano.

Installazione

pip install mcp-adr
# oppure
uv add mcp-adr

Configurazione

Claude Code (settings.json)

{
  "mcpServers": {
    "mcp-adr": {
      "command": "mcp-adr"
    }
  }
}

Variabili d'ambiente

Variabile

Predefinito

Descrizione

ADR_DIR

docs/adr

Directory in cui risiedono i file markdown ADR


Riferimento strumenti

CRUD

Strumento

Parametri principali

Descrizione

adr_create

title, type, context, decision, deciders

Crea un nuovo ADR da un template tipizzato

adr_read

query

Legge un ADR per numero o sottostringa del titolo

adr_update

number, content

Sovrascrive un ADR con nuovo contenuto markdown

adr_list

status, type

Elenca tutti gli ADR, con filtri opzionali

adr_search

query

Ricerca full-text su tutto il contenuto ADR

Ciclo di vita

Strumento

Parametri principali

Descrizione

adr_update_status

number, status, reason

Cambia lo stato (Proposed/Accepted/Deprecated/Superseded)

adr_supersede

old_number, new_number

Marca un ADR come sostituito, collegando entrambi

adr_deprecate

number, reason

Depreca un ADR con una motivazione registrata

adr_link

from_number, to_number

Aggiunge un collegamento bidirezionale tra due ADR

adr_history

query

Restituisce gli ADR corrispondenti come timeline

Diagrammi

Strumento

Parametri principali

Descrizione

adr_diagram

number, format, diagram_type

Genera un diagramma per un singolo ADR

adr_overview

format, status_filter

Genera un diagramma panoramico di tutti gli ADR

Analisi

Strumento

Parametri principali

Descrizione

adr_impact

component

Trova tutti gli ADR che menzionano un componente

adr_dependencies

number, format

Costruisce o filtra il grafo delle dipendenze ADR

Esportazione

Strumento

Parametri principali

Descrizione

adr_export

output_dir

Esporta tutti gli ADR in HTML


Esempio di workflow

# 1. Crea l'ADR
adr_create(
    title="Migrazione da REST a GraphQL",
    type="architecture",
    context="Il team mobile segnala over-fetching su ogni schermata.",
    decision="Adottare GraphQL via Apollo Server. Gli endpoint REST rimangono per i partner esterni.",
)
# → ADR-0001 creato con stato Proposed

# 2. Genera il diagramma
adr_diagram(number=1, format="mermaid")
# → Contesto Mermaid restituito all'LLM

# 3. Accetta la decisione
adr_update_status(number=1, status="Accepted")
# → Stato cambiato: Proposed → Accepted

# 4. Analizza l'impatto
adr_impact(component="REST")
# → Lista degli ADR che menzionano REST

# 5. Esporta in HTML
adr_export(output_dir="docs/adr/html")
# → File HTML generati

Sviluppo

git clone https://github.com/mauriziomocci/mcp-adr.git
cd mcp-adr
uv sync
uv run pytest -v
uv run ruff check src/mcp_adr/

Available Tools

15 tools
adr_createC

Create a new ADR with the given title and optional content.

Inputs: title (required), type, context, decision, +2 more. Returns: object

adr_dependenciesC

Build the dependency graph of ADRs, optionally filtered to one ADR's transitive deps.

Inputs: number, format, project_path. Returns: object

adr_deprecateD

Deprecate an ADR with a reason.

Inputs: number (required), reason (required), project_path. Returns: object

adr_diagramC

Generate or retrieve a diagram for an ADR.

Inputs: number (required), format, diagram_type, project_path. Returns: object

adr_exportC

Export all ADRs to HTML.

Inputs: output_dir, project_path. Returns: object

adr_historyC

Find ADRs matching a query, returned as a timeline sorted by date.

Inputs: query (required), project_path. Returns: object

adr_impactC

Find all ADRs that mention a component.

Inputs: component (required), project_path. Returns: object

adr_listC

List all ADRs, optionally filtered by status and/or type.

Inputs: status, type, project_path. Returns: object

adr_overviewC

Generate an overview diagram of all ADRs (optionally filtered by status).

Inputs: format, status_filter, project_path. Returns: object

adr_readC

Read an ADR by number or title substring. Returns structured content.

Inputs: query (required), project_path. Returns: object

adr_supersedeB

Mark an ADR as superseded by another ADR, linking both.

Inputs: old_number (required), new_number (required), project_path. Returns: object

adr_updateC

Overwrite an existing ADR with new markdown content.

Inputs: number (required), content (required), project_path. Returns: object

adr_update_statusD

Change the status of an existing ADR.

Inputs: number (required), status (required), reason, project_path. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 15 tools

    Disambiguation5/5

    Each tool has a distinct purpose (create, read, update, list, search, deprecate, supersede, link, dependencies, diagram, export, history, impact, overview). No two tools overlap in functionality, making it easy for an agent to select the correct one.

    Naming Consistency4/5

    All tools share the 'adr_' prefix, but the stems vary between verbs (adr_create, adr_read) and nouns (adr_dependencies, adr_overview). This is mostly consistent and readable, with minor deviation from a strict verb_noun pattern.

    Tool Count5/5

    With 15 tools, the server covers the full lifecycle of ADR management without being overly granular or sparse. Each tool serves a clear purpose within the domain.

    Completeness5/5

    The tool set covers all core operations (CRUD, search, status changes) and extends to advanced features like dependency graphs, diagrams, export, and impact analysis. There are no obvious gaps for typical ADR workflows.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers