Bicameral MCP
A provenance-aware decision ledger that maps meeting transcripts and PRDs to code symbols to track implementation and drift. It enables developers to maintain institutional memory by linking historical context and architectural decisions directly to the evolving codebase.
README
Bicameral MCP — Decision Ledger for Your Codebase
Every software team makes hundreds of verbal decisions per week — in meetings, PRDs, Slack threads, and huddles. None of those decisions are linked to the code that implements (or fails to implement) them.
Bicameral MCP is a local MCP server that ingests meeting transcripts and PRDs, builds a structured graph of decisions mapped to code symbols, and continuously tracks whether those decisions are reflected, drifting, or lost as the codebase evolves.
One-liner: A provenance-aware decision layer for your codebase — paste a transcript, get a living map of what was decided and what was actually built.
The Problem: 5 SDLC Friction Points
| Smell | What Happens | Fix |
|---|---|---|
| CONSTRAINT_LOST | A rate limit or compliance rule surfaces mid-sprint instead of at design time | bicameral.search — pre-flight context before coding |
| CONTEXT_SCATTERED | The "why" behind a decision is split across Slack, Notion, and someone's memory | bicameral.ingest — normalizes intent from any source into a unified graph |
| DECISION_UNDOCUMENTED | A verbal "let's do X" never lands in a ticket or ADR | bicameral.status — tracks what was decided vs what was built |
| REPEATED_EXPLANATION | Same context tax paid twice — once to design, once to engineering | bicameral.search — retrieves full decision provenance |
| TRIBAL_KNOWLEDGE | Only one person knows why the system works the way it does | bicameral.drift — surfaces institutional memory tied to code |
Bicameral's value is drift detection — knowing that a decision made three weeks ago is now inconsistent with what actually shipped, or that a decision made today is inconsistent with the codebase reality.
Quickstart
One-command setup
# With pipx (recommended — most systems have it)
pipx run bicameral-mcp setup
# Or with uvx
uvx bicameral-mcp setup
# Or with pip
pip install bicameral-mcp && bicameral-mcp setup
This launches an interactive wizard that:
- Detects your repo (from cwd or prompts you)
- Auto-detects the best available runner (uvx, pipx, or python)
- Installs the MCP config into Claude Code
That's it. The server builds its code index on first tool call.
Manual config
Run from your repo root:
claude mcp add-json bicameral --scope local '{
"command": "uvx",
"args": ["bicameral-mcp@latest"],
"env": {
"REPO_PATH": "/path/to/your/repo",
"SURREAL_URL": "surrealkv:///path/to/your/repo/.bicameral/ledger.db"
}
}'
Local development
pip install -e ".[test]"
bicameral-mcp setup # interactive config
bicameral-mcp --smoke-test # verify tools
bicameral-mcp # start MCP server (stdio)
No LLM provider credentials needed — all retrieval is deterministic.
5 MCP Tools
| Tool | Purpose | Auto-triggers |
|---|---|---|
bicameral.ingest |
Ingest a normalized source payload (transcript, PRD, Slack export) and advance the source cursor | — |
bicameral.status |
Surface implementation status of all tracked decisions (reflected / drifted / pending / ungrounded) | — |
bicameral.search |
Pre-flight: find past decisions relevant to a feature before writing code | link_commit(HEAD) |
bicameral.drift |
Code review: surface decisions that touch symbols in a file, flagging divergence | link_commit(HEAD) |
bicameral.link_commit |
Sync a commit into the ledger — updates content hashes, re-evaluates drift | — |
How the Tools Compose
Pre-flight (before coding)
bicameral.search("add rate limiting") → surfaces prior constraints and code regions
Code review (before merging)
bicameral.drift("payments/processor.py") → surfaces decisions touching this file
bicameral.status(filter="drifted") → full drift report
Ingestion (after a meeting)
bicameral.ingest(transcript_payload) → extracts intents, maps to code
bicameral.link_commit("HEAD") → syncs latest commit state
bicameral.status(since="2026-03-20") → shows what's reflected vs pending
Status Derivation
Decision status is a pure function computed at query time — never stored:
| Condition | Status | Meaning |
|---|---|---|
No code_region mapped |
ungrounded | Intent captured but no matching code found |
| Symbol absent at git ref | pending | Code not yet written |
content_hash differs |
drifted | Code changed since decision was recorded |
content_hash matches |
reflected | Code matches intent |
This makes Bicameral immune to rebase, squash, and cherry-pick — status is always re-derivable from (intent, git_ref).
Environment Variables
| Var | Default | Purpose |
|---|---|---|
REPO_PATH |
. |
Path to the repo being analyzed |
SURREAL_URL |
surrealkv://~/.bicameral/ledger.db |
SurrealDB URL. Use memory:// for tests. |
Tests
pip install -e ".[test]"
pytest tests/ -v
| Phase | Tests | What |
|---|---|---|
| Phase 1 | test_phase1_code_locator.py |
Code locator tools against real indexed repo |
| Phase 2 | test_phase2_ledger.py |
SurrealDB ledger adapter with memory:// |
| Phase 3 | test_phase3_integration.py |
Full E2E structured around 5 SDLC failure modes |
Phase 3 tests produce JSON artifacts (test-results/e2e/) with full tool responses and SurrealDB graph dumps for qualitative review.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。