Deterministic IR/IR-LINT validation, policy packs, drift vs exports (archrad). Apache-2.0.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.

Your architecture drifts before you write a single line of code. archrad validate catches it β deterministically, in CI, before the PR merges.
Define your system as a graph. ArchRAD compiles it, lints it against architecture rules, and tells you exactly what's wrong β with rule codes, not opinions.
New in 0.7.x β
archrad demoruns a full example with zero setup, andarchrad scandrafts an IR from any repo with every node cited tofile:line. Lint findings only decrease in this release; nothing that passed on 0.6.x can start failing. See the changelog.
No IR file, no flags, no config β runs from any directory. Lints a bundled example and shows you the findings:
scan reads your Docker Compose, Kubernetes manifests, Terraform, OpenAPI, package manifests, and source
code, then grades every node by confidence so you can see what was parsed versus guessed. The output is a
normal IR file β review it, edit it, commit it.
Already have an OpenAPI spec or a Backstage catalog? Skip the scan:
Once a graph is committed, archrad validate is your CI gate β exit 1 blocks the merge.
ArchRAD is a blueprint compiler and governance layer. You define your architecture as an IR β nodes, edges, allowed connections β and ArchRAD validates it against a deterministic rule engine. The same IR, the same rules, the same inputs always produce the same findings.
| Command | What it checks | Codes |
|---|---|---|
archrad validate | Graph structure + architecture lint | IR-STRUCT-* IR-LINT-* |
archrad lint | Architecture lint only (fast inner-loop; skips structural) | IR-LINT-* |
archrad explain <code> | Canonical rule guidance without running a pass | β |
archrad policies-sha256 --dir <policies> | Generate a archrad-policy-pack.sha256 manifest for signed PolicyPacks | β |
archrad validate-drift | IR vs generated code on disk | DRIFT-* |
archrad scan | Draft IR from a repo β topology, OpenAPI, manifests, code; every node cited + graded by confidence | β |
archrad reconstruct | Draft IR from source code alone (one of scan's four signal sources, usable standalone) | β |
archrad ingest openapi | Derive IR from OpenAPI (local path or https URL for --spec; -H for URL auth headers) | β |
archrad ingest backstage | Backstage catalog-info.yaml β IR (Component, Resource, API, System; Location file targets) | β |
archrad fragment merge | Merge 2+ IR files β union by node.id (conflicts β stderr); --prefix-fragments for disjoint union | β |
archrad export | Compile IR β FastAPI or Express + Docker | β |
Ingest + merge workflows: docs/INGEST.md. All commands / flags: docs/CLI_REFERENCE.md. Codegen (export): docs/EXPORT.md.
archrad scan)archrad scan points at a repository and emits a draft IR β never a final
answer, always something to review and edit. It runs six extractors, graded by
how much they have to guess:
| Source | Signal | Confidence |
|---|---|---|
| Topology | docker-compose.yml, Kubernetes manifests | high β a declaration, parsed for real |
| Interface | OpenAPI / Swagger | medium β documents a real surface, but only what's documented |
| Infrastructure-as-code | Terraform (*.tf) | medium β a real declaration, but read via regex, not a true HCL parse |
| Manifest | package.json, requirements.txt, go.mod, pom.xml | low β a driver dependency implies an edge, not proof it's used |
| Code | pattern scan of source (Node.js/TS, Python, C#) | low β regex over text, no semantic understanding |
Every node and edge carries config.provenance[] β inferred_from: "file:line",
a confidence, and which extractor found it β so nothing has to be taken on
faith. When two extractors describe the same thing, scan merges them (keeping
the highest-confidence body, unioning all provenance) instead of duplicating or
erroring.
CLI scans default to --scope production so fixtures, documentation examples,
Storybook stories, and test-only manifests do not become production findings.
Use --scope all when those artifacts are the subject of the review. Library
callers retain the backwards-compatible scope: 'all' default.
The output is a normal IR file β pipe it straight into archrad validate once
you've reviewed it. Full flags: docs/CLI_REFERENCE.md.
archrad reconstruct + --codebase)"The IR looks clean β but is that what was actually shipped?"
The validation pipeline above checks your authored IR (the design contract). The --codebase flag bridges the gap to the real codebase by reconstructing an IR from source code and comparing them.
A developer can author a compliant IR (passes all IR-STRUCT-* and IR-LINT-* rules) while the actual code bypasses the documented architecture. The most dangerous pattern: an IR that shows a clean service layer but code that directly queries the database.
When --codebase is provided, the pipeline runs three stages:
Implementation drift uses a separate exit threshold: --fail-on, --fail-on-warning, and --max-warnings apply only to IR-STRUCT-, IR-LINT-, and merged PolicyPack findings. IR-DRIFT-IMPL-* are gated solely by --impl-drift-fail-on (default: drift severities error fail the command).
| Code | Severity | What it catches |
|---|---|---|
IR-DRIFT-IMPL-000 | warning | Authored IR could not be parsed for drift comparison (fix structural issues first) |
IR-DRIFT-IMPL-001 | warning | IR declares HTTP-like entry nodes but reconstruction detected zero artifacts in --codebase |
IR-DRIFT-IMPL-002 | warning | HTTP / health routes in code but authored IR has no HTTP-like nodes |
IR-DRIFT-IMPL-003 | error | Direct DB connection in code, no DB edge in authored IR |
IR-DRIFT-IMPL-004 | error | HTTP route in code not present in authored IR |
IR-DRIFT-IMPL-005 | warning | Service-to-service call in code, no edge in authored IR |
IR-DRIFT-IMPL-006 | info | Auth middleware in code, no auth node in authored IR |
IR-DRIFT-IMPL-003 is the critical one. An error there means the authored IR hides a direct DB dependency.
| Language | Detected patterns |
|---|---|
| Node.js / TypeScript | Express, Fastify, NestJS routes + controllers; BullMQ workers, Agenda jobs, cron schedules; pg, Prisma, TypeORM, Sequelize, Mongoose, Redis, BullMQ, Firebase; Passport, express-jwt, NestJS guards, Auth0, Okta, Keycloak, Cognito; axios, got, node-fetch, gRPC; outbound HTTP URLs extracted per destination |
| Python | Flask, FastAPI, Django URLs, DRF @action; SQLAlchemy, psycopg2, asyncpg, PyMongo, motor, redis-py; login_required, jwt_required, FastAPI OAuth2; requests, httpx, aiohttp, gRPC |
| C# | Minimal API MapGet/MapPost; ASP.NET Core [HttpGet]/[ApiController]; EF Core DbContext, Npgsql, Dapper; [Authorize], AddAuthentication, JWT bearer; HttpClient, gRPC, RestSharp |
The reconstructor detects service boundaries and creates one node per service rather than collapsing everything into a single gateway:
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/deterministic)<a href="https://allmcps.com/mcp/deterministic"><img src="https://allmcps.com/api/badge/deterministic?style=directory" alt="Deterministic on AllMCPs" /></a>