Architecture governance for AI agents: query the live model, get target patterns, check files.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Living Architecture Control Plane for the AI-Dev Era.
AI agents now write code faster than any architect can review, document, or govern it. Docs rot instantly, the real architecture is invisible, structural decisions get made silently, and intended architecture drifts with every edit. ArchSteer is the always-current architecture system of record + governance plane: it derives the real architecture from code, keeps living docs and ADRs auto-built, surfaces every major decision for the architect to ratify, enforces declared intent as code-level fitness functions, and steers AI agents to conform instead of replicating local slop.
Everything is a projection of one code-derived model β .archsteer/model.json.
Local by default: the X-ray and governance workflow runs locally and never uploads or
executes your repository's source code. It needs no account, API key, or configuration
before the first scan; cloud snapshot publishing is a separate, explicit push command.
As a Claude Code plugin (recommended if you use Claude Code):
This installs the bundled MCP server (current_architecture, get_target_pattern,
check_file β via uvx, no separate pip install needed) plus a skill that teaches
the agent when to x-ray, check, and steer on its own, and /xray / /check commands.
See .claude-plugin/plugin.json for the manifest.
As a CLI (works with any editor/agent, or standalone):
(Since 0.4.1 the MCP server ships in the base install; pip install "archsteer[mcp]" still
works as a no-op alias.)
Languages: JavaScript / TypeScript (Next.js App Router-aware, including
tsconfig.json path-alias resolution β @/lib/x resolves to a real internal
edge, not a phantom third-party dependency), Python, Java (Spring-aware),
and Salesforce Apex (SOQL/DML + trigger/handler/selector conventions).
Layer detection uses in-source signals first β Spring stereotype annotations,
Apex class-name conventions, Next.js reserved filenames (page.tsx β
page, layout.tsx β layout, route.ts β api, regardless of directory)
β then directory names.
For the fastest proof, run this in a repository and open the generated
.archsteer/report.html:
Then add the controls you need:
init auto-detects your stack and seeds a matching baseline rule pack β edit
.archsteer/architecture.yaml to fit your conventions, or pick one explicitly:
| Pack | Detected by | Baseline rules |
|---|---|---|
java-spring | pom.xml / build.gradle | persistence only in repositories; controllers never touch repositories; no hardcoded secrets; outbound calls confined to services |
salesforce | sfdx-project.json / force-app | SOQL only in selectors; logic-less triggers; no DML in controllers; no hardcoded secrets; callouts confined to services |
python-service | pyproject.toml / requirements.txt | persistence behind repositories; thin API handlers; no hardcoded secrets; outbound calls confined to services |
nextjs-app-router | package.json has next, an app/ dir, no express | data access (Supabase/Prisma/raw SQL) and third-party calls confined to lib/ or a route handler; no hardcoded secrets |
express-to-next | package.json (fallback, or express present) | repository pattern; Express β Next.js migration; no hardcoded secrets; outbound calls confined to services |
A repo with next as a dependency and an app/ directory gets the App Router
pack; a package.json with express (even one migrating to Next) gets the
migration pack instead β those are different problems with different rules.
Every starter pack ships a security baseline β no hardcoded credentials/API keys/tokens anywhere in source, and all outbound third-party calls confined to the service layer β so day-one governance covers architecture and the two security smells AI agents introduce most often.
archsteer check blocks only net-new violations against a
baseline β teams keep shipping features while debt can only shrink.check/govern. Drafts are idempotent; re-running never duplicates one already on disk.CLAUDE.md, AGENTS.md, and
.cursor/rules/archsteer.mdc (an always-on Cursor rule) are scoped to the files in play and
point at the governing ADR β they don't dump the whole model into the context window..archsteer/architecture.yamlRule types: required_layer_for_data_access, forbidden_import, forbidden_data_access,
forbidden_layer_edge, forbidden_security_finding (hardcoded secrets), and
required_layer_for_external_call (confine outbound HTTP/SDK calls to a layer).
archsteer mcp runs a local MCP server over stdio β spawned by your own editor/agent,
never hosted by us. It reads only what init/map/govern already wrote to .archsteer/
on disk, so there's no network call and nothing leaves your machine. It exposes three tools:
current_architecture β component/layer counts, conformance/drift, the declared target.get_target_pattern β the invariants that apply to a file, before you write to it.check_file β whether a file you just edited conforms, without waiting for CI.Using the Claude Code plugin above? This is already wired up β skip to Quickstart. The rest of this section is for every other client.
Add it to Cursor with one click: Install in Cursor β
Add it to Claude Code by hand (instead of the plugin), or any other MCP-compatible client:
Or in JSON config directly:
(Already have archsteer on PATH via pip/pipx? {"command": "archsteer", "args": ["mcp"]}
works identically β uvx just means no install step at all.)
Also published to the official MCP registry as
io.github.einvoice-dev1/archsteer.
.github/workflows/archsteer.yml (maps, drafts ADRs, runs the net-new gate,
uploads report.html).archsteer install-hooks wires archsteer check into
.git/hooks/pre-push β an architecture conformance score printed on every push,
blocking only NET-NEW error violations (the same ratchet as CI, just earlier feedback).
archsteer map/check cache per-file parse results in .archsteer/parse_cache.json,
so a push that only touches a handful of files re-parses just those files, not the
whole repo. Uninstall with archsteer install-hooks --uninstall.archsteer check as a step instead
of the raw git hook, e.g. a .husky/pre-push containing archsteer check.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/archsteer)<a href="https://allmcps.com/mcp/archsteer"><img src="https://allmcps.com/api/badge/archsteer?style=directory" alt="Archsteer on AllMCPs" /></a>