architecture-contract
by godrix
README.md
# @godrix/architecture-contract-mcp
[](https://cursor.com/en-US/install-mcp?name=architecture-contract&config=eyJjb21tYW5kIjoibnB4IC15IEBnb2RyaXgvbWNwLWFyY2hpdGVjdHVyZS1jb250cmFjdCJ9)
**Architecture Contract MCP (ARC)** — agnostic MCP server that reads `arc.yaml` from the workspace and exposes tools to map layers, trace slices, generate scaffolding, and validate architectural rules.
- **MCP server name:** `@godrix/architecture-contract-mcp`
- **Binary:** `architecture-contract-mcp`
- **Tool prefix:** `arc_*` (unchanged)
- **Node:** 20+
## Quick install (npx)
No clone or local build required — the published npm package includes compiled JavaScript.
### Cursor / Claude Desktop (`mcp.json`)
```json
{
"mcpServers": {
"architecture-contract": {
"command": "npx",
"args": ["-y", "@godrix/architecture-contract-mcp"],
"env": {}
}
}
}
```
Restart your MCP client after saving. Or use the **Install MCP Server** button above.
### Global install (alternative)
```bash
npm install -g @godrix/architecture-contract-mcp
```
Then use `"command": "architecture-contract-mcp"` in `mcp.json`.
## Local development
```bash
git clone https://github.com/godrix/mcp-architecture-contract.git
cd mcp-architecture-contract
npm install
npm run build
```
```json
{
"mcpServers": {
"architecture-contract": {
"command": "node",
"args": ["/absolute/path/mcp-architecture-contract/dist/index.js"],
"env": {}
}
}
}
```
## CLI (CI/local)
```bash
# Validate manifest + rules (+ validators if configured)
node dist/index.js validate --workspace /path/to/project
node dist/index.js validate --workspace /path/to/project --run-validators
# Scaffold dry-run (default) or write
node dist/index.js scaffold --kind rest_endpoint --name Foo --workspace /path/to/project
node dist/index.js scaffold --kind rest_endpoint --name Foo --workspace /path/to/project --write
```
Or via bin:
```bash
architecture-contract-mcp validate --workspace /path/to/project
architecture-contract-mcp scaffold --kind rest_endpoint --name Foo --write
```
Exit code `1` when there are `error` violations or a validator fails.
## Local plugins
Custom architectures live under `.arc/plugins/{id}/`:
```text
my-project/
arc.yaml
.arc/plugins/my-arch/
manifest.yaml
templates/
UseCase.java.hbs
```
```yaml
# arc.yaml (thin — default from arc_init)
schemaVersion: "1"
extends: ./.arc/plugins/my-arch/manifest.yaml
project:
name: my-service
language: java
rootPackage: com.example.myapp
```
`extends` accepts:
- Built-in preset: `hexagonal-java@1`
- Local file: `./.arc/plugins/my-arch/manifest.yaml`
Template priority: `.arc/templates/` (project) → `plugin/templates/` → built-in preset.
Create an editable plugin from a preset:
```json
{
"tool": "arc_init_plugin",
"arguments": {
"pluginId": "my-arch",
"preset": "hexagonal-java@1",
"workspaceRoot": "/path/to/project"
}
}
```
## MCP tools
| Tool | Description |
|------|-------------|
| `arc_load` | Effective manifest + extendsRef, pluginRoots, kindSummaries |
| `arc_get_rules` | Rules, layers, docs and examples per layer |
| `arc_resolve` | Files to create (`includePreview` optional) |
| `arc_find` | Search with score; `role`/`suffix` filters |
| `arc_trace` | Slice or inferred chain (find + imports) |
| `arc_scaffold` | Generate Handlebars files (`dryRun` default `true`) |
| `arc_diff_scaffold` | Expected diff vs disk |
| `arc_validate` | Rules + **mayDependOn/mustNotDependOn** + CLI validators |
| `arc_validate_manifest` | Validate arc.yaml and plugins against schema |
| `arc_init` | Create **thin** arc.yaml (default) or `mode: full` |
| `arc_init_plugin` | Create `.arc/plugins/{id}/` from preset |
| `arc_list_presets` | List built-in presets |
| `arc_list_plugins` | List local plugins |
| `arc_describe_kind` | Steps/templates for a kind |
| `arc_explain_layer` | Layer + rules + repo examples |
| `arc_register_slice` | Register slice in arc.yaml |
| `arc_graph` | Mermaid graph of layers + violations |
| `arc_suggest_location` | Expected path for `role` + `name` |
### MCP resources
- `arc://guide` — full guide (SKILL + README)
- `arc://manifest/effective` — merged manifest (JSON)
- `arc://rules` — layers + rules
- `arc://plugins` — plugins in `.arc/plugins/`
- `arc://plugin/{id}` — manifest and templates for a plugin
### Prompts
- `arc-scaffold-workflow` — load → resolve → confirm → scaffold
- `arc-init-plugin` — create plugin in `.arc/plugins/{id}/`
- `arc-validate-workflow` — validate manifest and compliance
### Recommended workflow
1. `arc_init` or `arc_init_plugin` + local `extends`
2. `arc_load` → profile, kinds, pluginRoots
3. `arc_resolve` (or `arc_diff_scaffold`) with `kind` + `name`
4. Confirm with the user
5. `arc_scaffold` with `dryRun: false`
6. `arc_validate` after changes
## Built-in presets
- `hexagonal-java@1` — Spring hexagonal (port.in/out, adapters, domain)
- `mvc-typescript@1` — controllers, services, api
- `fsd-react@1` — Feature-Sliced Design (app, pages, widgets, features, entities, shared)
## `arc.yaml` schema (v1)
`arc_init` writes to the project:
- `.arc/arc-manifest.schema.json` — manifest JSON Schema
- `.arc/schema.json` — alias (`$ref`) for lint tools
- thin `arc.yaml` with `extends` (or full with `mode: full`)
```yaml
# yaml-language-server: $schema=./.arc/arc-manifest.schema.json
schemaVersion: "1"
parent: optional/path/to/parent/arc.yaml
extends: preset-id@version | ./.arc/plugins/id/manifest.yaml
project:
name: string
language: java | typescript | kotlin | other
rootPackage: optional
sourceRoot: "."
profile: hexagonal | mvc | fsd | custom
layers:
- id: string
path: glob
suffix: optional
mayDependOn: [layerIds]
mustNotDependOn: [layerIds]
kinds:
<kindId>:
variables: { key: description }
steps:
- manual: string
- generate: { layer, template, namingKey? }
rules:
- id: string
when: { layer: string | string[] }
forbidImports: [glob/substring]
requireSuffix: string
severity: error | warn
message: string
```
## Tests
```bash
npm test
```
## MCP Inspector
```bash
npm run build
npx @modelcontextprotocol/inspector node dist/index.js
```
## Migration from `arc-mcp`
| Before | After |
|--------|-------|
| npm package `arc-mcp` | `@godrix/architecture-contract-mcp` |
| Folder `arc-mcp` | `mcp-architecture-contract` |
| bin `arc-mcp` | `architecture-contract-mcp` |
| MCP server name `arc` | `@godrix/architecture-contract-mcp` |
| Tool names `arc_*` | unchanged |
## License
MIT
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues