mason
Mason is an MCP server for maintaining a persistent, drift-checked concept map and decision records for AI coding assistants, enabling them to instantly understand project architecture and history.
Concept Map Management
get_snapshot– Load the project's concept map: a lookup table from feature/flow names to implementing files (e.g., "home screen" →[HomeScreen.kt, HomeViewModel.kt]).save_snapshot– Persist a new or updated concept map to disk so it survives across sessions.generate_snapshot_batch,save_partial_snapshot,reduce_snapshot,mason_init– Build the concept map incrementally for large codebases.verify_snapshot/save_verification– Spot-check concept map correctness and flag inaccurate entries for re-mapping.mason_check_drift– Detect staleness in the concept map against the current codebase and recommend refresh actions.
Project Analysis
full_analysis– One-shot orientation: returns git history stats, project structure, curated code previews (~60 lines each), and a test-to-source mapping.analyze_project– Analyze git history for commit patterns, stale directories, and hot (frequently changed) files.get_code_samples– Retrieve previews of representative files: entry points, configs, hot files, tests, and one file per directory.
Change Impact & Context
get_impact– Assess blast radius of changing specific files via co-change history, references, and related tests.get_context– Retrieve task-specific context including relevant features, files, tests, blast radius, freshness status, and recorded decisions in one call.
Decision Recording
save_decision– Capture and store team knowledge and engineering decisions not expressed in code for future reference.
Confluence Synchronization
mason_set_confluence/export_to_confluence– Configure and export the concept map as PM-readable wiki pages to Confluence.
Provides tools for analyzing git history to identify hot files, stale directories, commit patterns, and co-change relationships for impact analysis.
Supports using Ollama as a local LLM provider for generating concept maps and analyzing codebases without sending data to external services.
Supports using OpenAI as an LLM provider for generating concept maps and analyzing codebases through the Mason CLI.
Mason – the system of record for your codebase's AI assistants 👷
Persistent, provably-fresh context your assistant can't grep for: team decisions, change history, and a feature-to-file map — assembled per task in one call.
Modern agents are good at reading code. They're terrible at knowing what your team learned the hard way, what changes together, and whether yesterday's understanding still holds. Mason owns exactly that.
claude mcp add mason --scope user -- npx -p mason-context mason-mcpRestart Claude Code, then ask: "use mason to set up this project." The assistant calls mason_init, walks you through a quick Q&A to build the concept map, and you're done.
Next session, your assistant loads the map instead of grepping 8 files to figure out what your app does.
0.6.0 note: Mason 0.6 adds decision records (
save_decision), task-scoped assembly (get_context), map verification (verify_snapshot), the self-maintaining refresh loop, and richer uninitialized responses. If you set Mason up before 0.6, re-run setup once (ask your assistant to "run mason_init again") — it refreshes the marker-delimited CLAUDE.md section that routes assistants to the new tools.
0.4.0 note: Mason is MCP-only as of v0.4.0. The previous
mason <command>CLI has been removed — everything runs through MCP tools, driven by your assistant. See 0.4.0 migration below if you used the old CLI.
The pain
Agentic search keeps getting better at re-deriving what's in the code — but three kinds of context can't be re-derived, and today they evaporate:
Decisions. "We tried retrying 401s in 2023; it locked accounts." Your assistant re-suggests it next sprint, in every teammate's session.
History. Which files change together, which dirs are dead — knowledge that lives in thousands of commits, too expensive to mine per session.
Freshness. Any cached understanding — a wiki, a CLAUDE.md, a map — rots silently, and a confidently wrong assistant is worse than a slow one.
Related MCP server: codecortex
The fix
Mason is an MCP server that maintains three git-committed, deterministic stores and assembles them per task:
Concept map (
.mason/snapshot.json) — features and flows → files, built by your assistant, spot-checked byverify_snapshotDecision records (
.mason/decisions/) — team knowledge the code can't express, captured bysave_decision, PR-reviewed like codeDrift engine — LLM-free proof of what's stale, per entry, with a self-maintaining refresh loop for CI
Ask your assistant to do a task and one get_context call returns the relevant features, files, tests, blast radius (git co-change + references), matching decisions, and a freshness verdict. The map itself:
{
"features": {
"home screen": {
"files": ["HomeScreen.kt", "HomeViewModel.kt", "GetWeatherDataUseCase.kt"]
}
},
"flows": {
"weather fetch": {
"chain": ["HomeViewModel.kt", "WeatherRepositoryImpl.kt", "WeatherServiceImpl.kt"]
}
}
}The assistant jumps straight to the relevant files instead of exploring.
Where the map comes from: Mason doesn't parse your code. Your assistant reads the project through Mason's analysis tools and writes the map itself — capturing architectural intent, not just symbols and call edges. Setup also adds a short section to your CLAUDE.md so every future session (any assistant, any teammate) consults the stores before exploring.
What the numbers say
Measured with real headless agent sessions in A/B arms (baseline always has a populated CLAUDE.md — beating a context-free agent is not a result). Full harness, pinned commits, and losses included: bench/harness/.
Where Mason wins — knowledge that isn't in the code. On tasks whose correct answer hinges on a recorded engineering decision (seeded fairly: the baseline had the same facts in a discoverable doc), Mason averaged 9.0/10 vs 7.0/10. The baseline missed the constraint entirely half the time, and needed ~3× the turns when it found it; Mason surfaced it in one
get_contextcall, every time.Stale-map safety. Against a deliberately stale map, the drift flag + changed-file previews led the agent to verify and answer current-code truth — the "confidently wrong from a stale cache" failure did not occur.
Where it's a wash — and we say so. On questions agents can answer by reading code, quality is parity across hono (186 files), vuejs/core (483), and nestjs/nest (1676): 8.7–8.8 both arms, with Mason slightly behind on nest (8.5 vs 8.8). If your only questions are "how does X work", modern agents don't need a map.
Cost of ownership, measured. Map builds scale linearly at ~$1.20 per 100 files (Sonnet): $3.22 for hono, $5.63 for vue-core, $19.52 for nest. Incremental refreshes after drift are cents.
Decision records
The store that makes Mason more than a map. When your assistant learns something the code can't express — a failed approach, a deprecation, a workaround's reason, a review-settled convention — it records it with save_decision:
One JSON file per record in
.mason/decisions/— concurrent additions merge cleanly; conflicting edits to the same record surface to a human, which is the pointGit-committed and PR-reviewed: nothing enters team knowledge without the normal review gate
Anchored to files and drift-checked: when the anchor files change, the record is flagged for re-verification instead of silently going stale
Surfaced by
get_contextas constraints exactly when a task touches them — for every teammate, in every session, on any assistant
MCP tools
Tool | Purpose |
| Start here. Returns the Map-Reduce setup playbook. Idempotent. |
| Marks the project as initialized once the playbook is done. |
| Map step — returns one batch of files for the assistant to summarize. |
| Persists the partial map for one batch. |
| Reduce step — returns every partial + instructions to merge into a unified map. |
| Persist the final unified map. Clears partials. |
| Configure Confluence credentials — two-step: list spaces, then persist. |
| Sync the concept map to Confluence as PM-readable wiki pages. |
| First call for any architecture question. Loads the concept map — feature → file lookup — in one LLM-free call. |
| First call for any task or bug. Matching features + files + tests + blast radius + freshness + recorded decisions, in one call. |
| Record knowledge the code can't express — failed approaches, deprecations, conventions. Git-committed, PR-reviewed, drift-checked. |
| Feature-level staleness report — what changed since the snapshot, and whether to refresh incrementally or rebuild. |
| Spot-check map correctness — sampled entries + file skeletons for the assistant to judge, least-recently-verified first. |
| Record verification verdicts — failures flag entries for re-mapping until fixed. |
| Call before editing a file. Traces what's affected — co-change history + references + related tests. |
| Git stats — hot files, stale dirs, commit conventions. |
| One-shot orientation for unmapped projects: structure + samples + tests + git. |
| Smart file previews selected by architectural role. |
The init / write tools refuse to run until mason_init has completed. The read-only diagnostics (analyze_project, full_analysis, get_code_samples) work without init.
Setup also offers to add a short marker-delimited section to your project's CLAUDE.md telling assistants to consult the map before exploring — assistants follow project instructions far more reliably than they discover MCP tools on their own.
How the concept map is built
To stay accurate on codebases of any size, Mason uses a Map-Reduce pattern instead of stuffing the whole codebase into one LLM call:
Map:
generate_snapshot_batchreturns ~50 files at a time (skeletons of every file in the batch plus a few deeper-read bodies for grounding). Your assistant produces a partial concept map for that batch and persists it withsave_partial_snapshot. Repeat until every file in the project has been visited.Reduce:
reduce_snapshotreturns all the partials plus instructions to merge them into one product-shaped catalog — combining platform variants ("home Android" + "home iOS" → "home screen"), deduplicating, and ensuring no file is dropped.Save:
save_snapshotpersists the unified map and cleans up the partials.
The result: every source file is represented exactly once in the final snapshot. A 200-file project takes ~5 batches; a 1000-file monorepo takes ~20.
Change impact
Before editing a file, Mason tells you what else might be affected. Three signals you'd normally need a dozen tool calls to gather, in one call:
Co-change history — files that historically change together in commits
References — files that import or mention the target by name
Related tests — test files paired by naming convention
Ask your assistant "what would be affected if I changed WeatherRepository?" and it'll call get_impact for you.
Drift detection
A concept map that silently goes stale is worse than no map — your assistant confidently jumps to files that no longer do what the map says. mason_check_drift compares the map against HEAD (pure git + filesystem, no LLM call) and reports drift at the feature level: which features are stale and which files changed under them, new source files not yet mapped, ghost files the map still references, and renames. It ends with a recommendation — up-to-date, incremental (re-map just the stale entries), or full-rebuild (re-run the Map-Reduce playbook).
Ask your assistant "is the concept map still fresh?" — and if it isn't, the same report tells it exactly which entries to regenerate. get_snapshot includes the same drift report whenever it detects a stale map, so a stale map self-heals in the course of normal use.
Incremental refreshes are safe against partial updates: every entry a refresh touches is stamped with the commit it was verified against, so entries skipped in one refresh keep reporting as stale instead of silently riding along on the map's new hash. Features that disappear from the codebase can be deleted from the map with save_snapshot's removeFeatures/removeFlows — renames stop leaving zombie entries behind.
When a lot of files drifted at once, the assistant runs a scoped refresh instead of a full rebuild: generate_snapshot_batch accepts a files list, so the Map-Reduce loop walks only the drifted files and the reduce step merges the result into the existing map. 60 drifted files in a 1000-file monorepo means ~2 batches, not 20.
Drift checks in CI
Because the check is deterministic, it also ships as a tiny standalone binary — the one exception to "MCP-only", read-only and LLM-free:
npx -p mason-context mason-drift --dir . # exit 0 fresh · 1 stale · 2 error
npx -p mason-context mason-drift --json # full report as JSON
npx -p mason-context mason-drift --refresh-prompt # stale? print refresh instructions for any agentRun it on merges to main to catch a rotting map before your assistant does. Note: the diff is computed against the snapshot's base commit, so shallow CI checkouts need enough fetch-depth to reach it — when they don't, mason-drift reports stale with full-rebuild rather than guessing.
The map maintains itself
Detection is free and deterministic; the fix needs an LLM — but not any particular one. mason-drift --refresh-prompt emits provider-neutral instructions that any coding agent with the Mason MCP server connected can execute. Pipe it to whichever headless CLI your team runs:
# Claude Code
claude -p "$(mason-drift --refresh-prompt)" --dangerously-skip-permissions \
--mcp-config '{"mcpServers":{"mason":{"command":"npx","args":["-y","-p","mason-context","mason-mcp"]}}}'
# OpenAI Codex CLI (mason configured in ~/.codex/config.toml)
codex exec --full-auto "$(mason-drift --refresh-prompt)"
# Gemini CLI (mason configured in .gemini/settings.json)
gemini --yolo -p "$(mason-drift --refresh-prompt)"To close the loop in CI, this repo ships a reusable GitHub Actions workflow — detect on every push, refresh with your agent of choice, commit the updated map back:
jobs:
mason:
uses: adrianczuczka/mason/.github/workflows/mason-refresh.yml@main
with:
agent-command: >-
claude -p "$MASON_REFRESH_PROMPT" --dangerously-skip-permissions
--strict-mcp-config --mcp-config
'{"mcpServers":{"mason":{"command":"npx","args":["-y","-p","mason-context","mason-mcp"]}}}'
secrets: inheritOmit agent-command for detect-only mode: free, no credentials, fails the check when the map goes stale.
Confluence sync
Keep a Confluence wiki in sync with the concept map, in plain product language that PMs and designers can read. Each sync rewrites the snapshot through your assistant into PM-friendly descriptions, pushes one page per feature, and posts a "what changed since last sync" entry to a changelog page. Mason owns these pages and overwrites each one on every sync, so edit the code, not the page — manual edits to a page body are replaced. Re-running a sync with no code change is a no-op: it makes no Confluence edits at all.
Setup happens during mason_init (you'll be asked) or any time later by asking your assistant "set up Confluence for this project." The assistant walks you through the Atlassian site URL, your account email, and an API token from id.atlassian.com, then lets you pick which space to use. To sync, ask "sync the wiki to Confluence."
⚠️ Token in chat history. The API token is pasted into your assistant chat, not a terminal. It will appear in your chat history. If that's not acceptable, skip Confluence sync.
Other clients
Mason's MCP server is client-agnostic. Pick yours:
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in your project):
{
"mcpServers": {
"mason": {
"command": "npx",
"args": ["-p", "mason-context", "mason-mcp"]
}
}
}Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"mason": {
"command": "npx",
"args": ["-p", "mason-context", "mason-mcp"]
}
}
}Add to ~/.codex/config.toml:
[mcp_servers.mason]
command = "npx"
args = ["-p", "mason-context", "mason-mcp"]Add to your VS Code settings (settings.json):
{
"mcp": {
"servers": {
"mason": {
"command": "npx",
"args": ["-p", "mason-context", "mason-mcp"]
}
}
}
}Language support
Language-agnostic. Mason works from file naming patterns and git history rather than language-specific parsing, so it runs on any project with a git repo — TypeScript, Kotlin, Python, Go, Rust, Swift, Java, C#, Dart, and more.
Security
The snapshot contains: feature names, relative file paths, flow descriptions. No source code, no secrets, no business logic.
Respects
.gitignoreviagit ls-files. A deny-list blocks.env,.pem,.key, credentials, and other sensitive files from being sampled.Path traversal protection keeps all file access inside the project root.
MCP tools are local-only. Generating a snapshot via MCP uses your assistant's existing LLM context — Mason itself makes no API calls.
0.4.0 migration
If you used Mason before v0.4.0, the standalone mason <command> CLI has been removed. Everything now runs through MCP tools, called by your assistant.
Old CLI | New flow |
| Not needed — your assistant is the LLM. |
| Ask your assistant: "set up Mason here" → it calls |
| Removed. Use your assistant directly. |
| Ask your assistant: "give me git stats for this repo" — it calls |
| Ask your assistant: "what would changing File.kt affect?" — it calls |
| Removed. The map auto-refreshes when the assistant detects stale state. |
The npm package is still published, but only the mason-mcp binary is meaningful now. Running mason directly prints a migration message and exits.
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseAqualityBmaintenanceA TypeScript tool that ranks files in your codebase by importance, tracks dependencies, and provides file summaries to help understand code structure through Cursor's Model Context Protocol.Last updated14298
- Alicense-qualityDmaintenancePersistent codebase knowledge layer for AI agents. Pre-digests codebases into structured knowledge (symbols, dependency graphs, co-change patterns, architectural decisions) and serves via MCP. 28 languages, 14 tools, ~85% token reduction.Last updated257MIT
- Alicense-qualityCmaintenanceTurn any codebase into an AI-readable neural map — with proof. Every claim linked to code anchors (line + SHA-256 hash), every context window optimized with greedy token budgeting, every session protected by drift detection. Tree-sitter indexing across 11 languages, cross-session learning, AI enrichment, and 28 MCP tools. Zero config — just connect and your AI agent remembers everything.Last updated3613GPL 3.0
- AlicenseAqualityCmaintenanceExtract domain knowledge from codebases to reduce LLM token consumption by 20x and time in agentic search by 10x — gathers and makes concepts, naming conventions, and vocabulary queryable via MCP.Last updated1940MIT
Related MCP Connectors
Give your AI agent a persistent map of your project's structure, dependencies, and bugs.
AI Agent with Architectural Memory. Impact analysis (free), tests and code from the graph (pro).
Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.
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/adrianczuczka/mason'
If you have feedback or need assistance with the MCP directory API, please join our Discord server