Give your AI agent a photographic memory of your codebase.
Semantic search + persistent cross-chat context + token-slim routing for Claude Code, Cursor, Codex, and any MCP client β 100% local, no API keys, no cloud. Finds relevant code by meaning, remembers decisions across sessions, and cuts token costs by 80β95%.
Works with: Claude Code Β· Claude Desktop Β· Cursor Β· Codex CLI Β· Hermes Agent Β· Kimi CLI Β· Relayhelm
π Quick Start Β· β¨ Features Β· π§° Tools Β· π Docs Β· π€ Contributing
AI coding assistants burn tokens reading whole files β or worse, your whole repo β just to answer one question. Context Broker is a Model Context Protocol (MCP) server that fixes this: it semantically indexes your codebase locally and sends only the relevant snippets, with a token report on every query.
| Without Context Broker | With Context Broker | |
|---|---|---|
| Context sent for "how does auth work?" | Entire files / repo dumps (~50,000 tokens) | Focused snippets only (~3,500 tokens) |
| Token cost per question | πΈ Full price | β Typically 80β95% saved |
| Setup | β | One line in your MCP config |
| Privacy | Depends on tooling | π Fully local β embeddings never leave your machine |
| Memory across chats / models | β None | β Built-in (Redis / Honcho / local JSON) |
If you're looking for a semantic code search MCP server, a way to reduce LLM token usage and context-window bloat, local RAG for codebases, or a context-optimization layer for Claude Code, Cursor, and Codex β this is it.
- π§ Cross-session memory β Switch from Claude to GPT-4 without losing context (handoffs)
- β‘ Token-slim router β Exposes only the tools needed for the task, not 40+ tools
- π Local-first β Runs on CPU, no cloud required, privacy-preserving
- π€ Multi-agent delegation β Splits large tasks across parallel workers safely
- π 80β95% token savings β Sends only relevant snippets, not entire files
Star β this repo if it saves you tokens β it helps other developers find it.
|
Find code by describing what you need in plain English β no exact file names required. Powered by local sentence-transformers embeddings ( Every query reports total project tokens vs. context sent vs. tokens saved β plus One
|
Three-layer secret protection (indexing, I/O, search) blocks Built-in tools generate and validate |
Plus: β‘ CPU-optimized fast inference Β· πΎ smart caching with file-mtime tracking Β· π« .gitignore/.dockerignore aware Β· ποΈ disk embedding cache survives restarts Β· πͺ¦ auto-exits when the parent editor dies Β· π§ idle caches released after 15 min Β· π optional web dashboard
Prerequisites: Python 3.13+ and uv.
Option 1: Install directly from GitHub (recommended)
uv tool install https://github.com/InSelfControll/context-broker-mcp.git
# Or with extras
uv tool install "https://github.com/InSelfControll/context-broker-mcp.git[dashboard,integrations]"Option 2: Clone and install locally
git clone https://github.com/InSelfControll/context-broker-mcp.git
cd context-broker
uv syncThen add Context Broker to your MCP client β or let the CLI write the config for you:
context-broker integration-config --host claude-code --project-root /absolute/project
# also: --host codex | hermes | cursor | relayhelmManual client configuration (Claude Desktop, Cursor, Kimi CLI, β¦)
{
"mcpServers": {
"context-broker": {
"command": "uv",
"args": ["run", "python", "/full/path/to/context-broker/context-broker.py"],
"env": {
"CONTEXT_BROKER_PROJECT_ROOT": "/path/to/your/project"
}
}
}
}One shared broker for every coding agent (recommended)
Point each agent's stdio MCP entry at:
context-broker connect --project-root /absolute/path/to/projectThe first connection auto-starts the shared service; every agent reuses one embedding model and cache pool. Manage it explicitly:
context-broker start
context-broker stop # disconnects every shared client
context-broker update --check
context-broker updateThe service uses an OS-assigned port on 127.0.0.1, an authenticated readiness check, and a startup lock, so concurrent agents never race. All clients must run as the same OS user; a private descriptor in ~/.cache/context-broker/service holds the random bearer token (CONTEXT_BROKER_SHARED_RUNTIME_DIR relocates it). Each connection binds one canonical project root β requests cannot override it, and chat/session identifiers stay scoped per project. In shared mode, global JSON storage names include a project-path digest so equally named folders cannot collide; legacy name-only global saves are not auto-migrated.
The service owns one lazy embedding model and a single LRU cache pool for indexes, query metadata, and token reports. CONTEXT_BROKER_MEMORY_POOL_MB (default 256) bounds estimated retained cache payloads β not total RSS, the model, or in-flight work. Queries keep at most CONTEXT_BROKER_QUERY_CACHE_MAX_ENTRIES entries per project (128), disk query-cache files are capped by CONTEXT_BROKER_QUERY_CACHE_MAX_FILE_BYTES (4,000,000), and disk embedding caches use read-only memory maps. get_memory_usage reports aggregate pool counts and the shared PID without exposing another project's content.
For foreground operation, serve still defaults to port 8771 (serve --port selects another). Disabling one agent's MCP connection ends only its proxy; other sessions continue. A Linux startup-only measurement with the same interpreter showed 846,224 KiB peak RSS for the old eager import vs 79,044 KiB for proxy construction, before model loading β a startup measurement, not a production benchmark.
uv run python context-broker.py
# [Broker] β‘ Indexing new project: /your/project/path
# [Broker] β
Index ready. Total size: X tokens.Then ask your assistant "how does authentication work in this project?" and watch for the tool call:
β’ Used search_codebase_tool ({"query": "auth middleware", ...})
π Token Efficiency Report:
β’ Total Project Tokens: 50,000
β’ Context Sent: 3,500
β’ Tokens Saved: 46,500 (93.0%)
| Host | Configuration file | Notes |
|---|---|---|
| Claude Code | .mcp.json β mcpServers |
600000 ms per-server timeout where supported |
| Claude Desktop | claude_desktop_config.json β mcpServers |
Manual JSON config (see above) |
| Cursor | .cursor/mcp.json β mcpServers |
Host-managed elicitation/timeout |
| Codex | .codex/config.toml β mcp_servers |
600 s tool timeout; allow interactive MCP elicitation |
| Hermes | ~/.hermes/config.yaml β mcp_servers |
600 s tool timeout; form elicitation enabled |
| Relayhelm | ~/.relayhelm/config.yaml β mcp_servers |
Project-bound shared service; form elicitation enabled |
Keep elicitation interactive: host hooks that auto-approve prompts defeat the intended human choice. If elicitation is unavailable, no delegation workers launch. Tests cover configuration parsing, real stdio/HTTP consent forwarding, failure propagation, shared-process identity, and project isolation. Native Codex, Claude Code, Cline, VS Code, DeepSeek, and Hermes applications were not launched in the test environment β the maintainer reports successful laptop use with Codex, Hermes, and Claude Code; Cursor native compatibility remains unverified.
π Search & Context
| Tool | Description |
|---|---|
search_codebase(query, project_root?) |
Semantic search over the codebase |
auto_search(project_root?) |
Auto-find entry points and configuration |
search_context(query, project_root?, top_k?) |
Search project context through the UCR public surface |
save_search_results / list_saved_results / load_saved_results |
Persist and reuse search results across sessions |
get_storage_config() |
Show storage configuration |
π§ Token-Slim Router (UCR)
| Tool | Description |
|---|---|
route_task(task, mode?, token_budget?, top_k?) |
Recommend a minimal task-specific tool slice (plan_only, recommend_tools, execute_safe) |
execute_plan(plan_json, arguments_by_tool_json?, confirmed?) |
Execute/delegate a routed plan through safety gates |
explain_plan(plan_json) |
Explain a UCR plan in client-neutral JSON |
execute_selected_tool(tool_id, arguments_json?, confirmed?) |
Safety-gated execution/delegation for one router tool |
get_route_metrics() |
Route/execution/cache/latency metrics |
benchmark_router(iterations?) |
Lightweight in-process router benchmark |
token_counter(project_root?) |
Latest token usage for editor integrations |
token_history(project_root?, limit?) |
Graph-ready token savings history |
token_integration_manifest(project_root?) |
Integration options for GraphQL, LangGraph, etc. |
The router ranks tool descriptors against the current task, applies a token budget, and returns only the tools that should be visible. Registry vectors live in .cache/token-slim-router-tools.json. Safety checks block prompt-injection text, path traversal, secret-like arguments, secret filenames, and dangerous shell commands; high-risk and shell-capable tools require explicit confirmation. Unknown tools are delegated back to the client runtime, never executed blindly.
π§ Cross-Chat Memory
| Tool | Description |
|---|---|
save_chat_context(...) |
Save chat messages to the context backend (Honcho or Redis) |
load_chat_context(...) |
Load cross-chat context |
record_turn(session_id, user_message, assistant_message, ...) |
Save one userβassistant exchange |
record_session(session_id, turns, ...) |
Bulk-persist an entire conversation |
context_backend_status() |
Show configured backend status |
load_cross_session_context(search_query?, top_k?, ...) |
Search across all sessions (Redis only) |
list_user_activity(peer_id?, limit?) |
Per-user activity audit (Redis only) |
save_model_handoff / load_model_handoff |
Immutable checkpoints when switching models |
Every save is dual-written to the chosen backend and a local-JSON ledger at <storage>/chats/<project_digest>/<session_id>.json β append-only, never overwritten. Saves invalidate then warm the default-params chat cache (CONTEXT_BROKER_AUTO_WARM_CACHE_ON_SAVE=1) so the next default load is an immediate hit. When REDIS_URL is set, full load_chat_context responses are cached with TTL CONTEXT_BROKER_CHAT_CACHE_TTL_SECONDS (default 300) for both backends.
π οΈ Repo Automation & Maintenance
| Tool | Description |
|---|---|
ensure_agents_md_tool / validate_agents_md_tool / generate_agents_md_tool / scan_projects_for_agents_md |
AGENTS.md lifecycle |
ensure_changelog_tool / validate_changelog_tool / generate_version_changelog / get_changelog_stats_tool |
CHANGELOG.md lifecycle from conventional commits |
ensure_feature_docs_tool / scan_missing_docs_tool / get_docs_stats_tool |
Feature documentation lifecycle |
check_environment(install_missing?, confirm?) |
Doctor: detect and (with confirmation) install anything missing |
Resources: codebase://auto-context (auto context per request) and codebase://token-counter (metrics for editor dashboards). Token counter reports persist under broker storage (.context-broker/_internal/token-counter-latest.json), which is excluded from semantic indexing.
flowchart TB
subgraph "AI Assistant"
AI["Natural Language Query"]
end
subgraph "Context Broker"
MCP["MCP Server"]
Core["Core Engine"]
Cache[(Query Cache)]
end
subgraph "Resources"
Codebase[(Target Codebase)]
Storage[(JSON Storage)]
Model[(ML Model)]
end
AI -->|"How does auth work?"| MCP
MCP --> Core
Core -->|"Scan & Embed"| Codebase
Core -->|"Search"| Model
Core -->|"Cache Results"| Cache
Core -->|"Persist"| Storage
MCP -->|"Relevant Files + Token Report"| AI
- Project detection β finds the project root via
.git,pyproject.toml,package.json, β¦ - File indexing β single-pass
os.walk(no symlink following by default), honoring.gitignore/.dockerignore, with hard ignores for bulky files (ISOs, VM disks, archives, media, dumps) - Local embedding β sentence-transformers on CPU (GPU via
CONTEXT_BROKER_DEVICE=cuda|mps), disk-cached under.cache/so restarts skip re-encoding - Cosine similarity search β returns focused snippets, not full-file dumps
- Caching β query results cached with file-mtime fingerprinting; idle caches released after 15 min
Performance: first search 1β5 s Β· cached searches <100 ms Β· ~100 MB base memory + ~1 MB per 100 files Β· typically 80β95% token savings.
Sequence diagram
sequenceDiagram
participant User
participant CB as Context Broker
participant Index as File Index
participant Cache as Query Cache
participant Model as ML Model
User->>CB: search_codebase("auth middleware")
alt Index not in memory
CB->>Index: Scan files
CB->>CB: Parse ignore patterns
CB->>Model: Generate embeddings
CB->>Index: Store embeddings
end
CB->>Cache: Check for cached query
alt Cache miss
CB->>Model: Encode query
CB->>Index: Compute similarities
CB->>Cache: Store results
end
CB->>User: Return relevant files
All settings are environment variables (12-factor). The most useful ones:
| Variable | Description | Default |
|---|---|---|
CONTEXT_BROKER_PROJECT_ROOT |
Default project root | Auto-detected |
CONTEXT_BROKER_EMBEDDING_MODEL |
Sentence-transformers model | all-MiniLM-L6-v2 |
CONTEXT_BROKER_DEVICE |
Torch device (cpu, cuda, mps) |
cpu |
CONTEXT_BROKER_CONTEXT_BACKEND |
Cross-chat backend: none, honcho, redis |
none |
CONTEXT_BROKER_REDIS_URL |
Redis URL for the context backend + chat cache | (empty) |
CONTEXT_BROKER_STORAGE_MODE |
global, in-project, or both |
both |
CONTEXT_BROKER_UCR_PUBLIC_SURFACE_ONLY |
Expose only the minimal UCR router surface | 0 |
CONTEXT_BROKER_AUTH_TOKEN |
Bearer token required on WS transport and dashboard when set | (empty) |
Full environment variable reference
| Variable | Description | Default |
|---|---|---|
CONTEXT_BROKER_PROJECT_ROOT |
Default project root | Auto-detected |
CONTEXT_BROKER_DEFAULT_QUERY |
Default auto-context query | "main entry point configuration setup" |
CONTEXT_BROKER_STORAGE_MODE |
Storage mode: global, in-project, or both |
both |
CONTEXT_BROKER_STORAGE_DIR |
Base directory for global storage | ~/.context-broker |
CONTEXT_BROKER_EMBEDDING_MODEL |
Sentence-transformers model for embeddings | all-MiniLM-L6-v2 |
CONTEXT_BROKER_DEVICE |
Torch device for the embedding model | cpu |
CONTEXT_BROKER_LOCAL_ONLY |
Prefer cache-only loading, with one bootstrap download if missing | 0 |
CONTEXT_BROKER_AUTO_LOAD_ENV |
Load the nearest .env file at startup |
1 |
CONTEXT_BROKER_LLM_MODEL |
Optional LLM model identifier (exposed to MCP clients) | (empty) |
CONTEXT_BROKER_LLM_BASE_URL |
Optional LLM API endpoint URL | (empty) |
CONTEXT_BROKER_LLM_API_KEY |
Optional LLM API key | (empty) |
CONTEXT_BROKER_ENABLE_PROGRESS_NOTIFICATIONS |
Per-call MCP progress updates | 0 |
CONTEXT_BROKER_EXIT_WHEN_PARENT_DIES |
Exit when the launching editor/AI process disappears | 1 |
CONTEXT_BROKER_PARENT_POLL_INTERVAL_SECONDS |
Orphan-process poll interval | 3 |
CONTEXT_BROKER_IDLE_RESOURCE_TIMEOUT_SECONDS |
Release in-memory caches after this idle time (0 disables) |
900 |
CONTEXT_BROKER_IDLE_RESOURCE_CLEANUP_INTERVAL_SECONDS |
Idle cleanup check interval | 30 |
CONTEXT_BROKER_ROUTER_PLAN_CACHE_MAX_ENTRIES |
Max in-memory routing plans (0 disables) |
128 |
CONTEXT_BROKER_INDEX_FOLLOW_SYMLINKS |
Follow symlinks while collecting files | 0 |
CONTEXT_BROKER_INDEX_MAX_FILE_BYTES |
Skip files larger than N bytes (0 disables) |
2000000 |
CONTEXT_BROKER_INDEX_DISK_CACHE |
Persist corpus embeddings under .cache/ |
1 |
CONTEXT_BROKER_CONTEXT_BACKEND |
none, honcho, or redis |
none |
CONTEXT_BROKER_REDIS_URL |
Redis URL when backend is redis |
(empty) |
CONTEXT_BROKER_REDIS_KEY_PREFIX |
Redis key prefix | context-broker |
CONTEXT_BROKER_CHAT_CACHE_TTL_SECONDS |
TTL for the Redis chat-payload cache (0 disables) |
300 |
CONTEXT_BROKER_USE_ACCOUNT_NAME |
Use the OS account name as default user peer id | 0 |
CONTEXT_BROKER_ACCOUNT_NAME_OVERRIDE |
Explicit override for the resolved user peer id | (empty) |
CONTEXT_BROKER_DASHBOARD_HOST |
Dashboard bind host | 127.0.0.1 |
CONTEXT_BROKER_DASHBOARD_PORT |
Dashboard bind port | 8770 |
CONTEXT_BROKER_HONCHO_WORKSPACE_ID |
Honcho workspace id | context-broker |
CONTEXT_BROKER_HONCHO_SESSION_PREFIX |
Honcho session id prefix | context-broker |
CONTEXT_BROKER_HONCHO_CONTEXT_TOKENS |
Default Honcho context token budget | 2000 |
CONTEXT_BROKER_HONCHO_LIMIT_TO_SESSION |
Limit Honcho context/search to selected session | 1 |
CONTEXT_BROKER_UCR_PUBLIC_SURFACE_ONLY |
Minimal UCR public router surface only | 0 |
CONTEXT_BROKER_WORKTREE_SHARED_ROOT |
Share index/cache/storage across linked git worktrees | 1 |
CONTEXT_BROKER_REGEX_MAX_PATTERN_CHARS |
Max caller regex length for find_in_codebase |
2000 |
CONTEXT_BROKER_REGEX_MATCH_TIMEOUT_SECONDS |
Per-file regex timeout (ReDoS guard) | 2.0 |
CONTEXT_BROKER_AUTH_TOKEN |
Bearer token for WS transport and dashboard | (empty) |
CONTEXT_BROKER_ALLOW_UNAUTHENTICATED_BIND |
Permit non-loopback binds without AUTH_TOKEN |
0 |
By default, Context Broker uses half of available CPU cores for embedding/indexing. It exits when its launching host disappears and releases in-memory caches after prolonged idle periods, preventing orphaned MCP processes from consuming RAM.
Context Broker uses one local ML model β an embedding model, not a chat/LLM:
| Component | Model | Purpose | Configurable? |
|---|---|---|---|
| Embedding | all-MiniLM-L6-v2 (sentence-transformers) |
Code β vector embeddings | Yes β CONTEXT_BROKER_EMBEDDING_MODEL |
| Tokenizer | cl100k_base (tiktoken) |
Token counts for efficiency reports | No |
- Runs locally on CPU by default; no LLM or chat model is used
- Downloads automatically on first use, then cached; lazy-loaded and auto-unloaded after 15 min idle
CONTEXT_BROKER_LOCAL_ONLY=1tries the cache first, then performs one announced bootstrap download; explicitHF_HUB_OFFLINE=1/TRANSFORMERS_OFFLINE=1disable downloads entirely
| Alternative model | Quality | Speed | Size |
|---|---|---|---|
all-MiniLM-L6-v2 (default) |
Good | Fast | ~80 MB |
all-mpnet-base-v2 |
Better | Slower | ~420 MB |
paraphrase-MiniLM-L3-v2 |
Lower | Fastest | ~60 MB |
Optional CONTEXT_BROKER_LLM_* variables have no built-in effect by themselves; they let MCP clients discover an LLM endpoint (reported by get_storage_config) and configure the delegation workers below.
Relevant issue history without session bloat
At setup, call configure_history_indexing. It asks the user Index / No index through MCP elicitation and saves the choice per project. Indexing is off until an explicit choice enables it; No index still reads saved history directly, and disabling indexing removes only the derived SQLite index β never original chats or handoffs.
lookup_project_history(query) checks the project's local chat ledgers and model handoffs for the current issue. Question-bearing routing/search MCP calls also check history automatically and append at most three relevant excerpts. Initialization, tool discovery, and unrelated questions do not preload project memory.
Similarity uses conservative keyword overlap (β₯2 meaningful terms, 60% query-term coverage) β it detects repeated and lexically similar issues; it is not universal semantic matching. No provider calls or embedding model loads are required. History stays excluded from the source-code index, and secret-bearing excerpts are excluded.
Both modes scan at most 128 recent candidate files, 1 MB per file, and 2000 records per lookup; each excerpt is β€2000 characters. Oversized or unreadable history produces partial: true β never interpret it as exhaustive. Records from other projects are never retrieved. A standalone MCP server cannot intercept questions a host does not send to it.
Share memory when switching models (save_model_handoff / load_model_handoff)
save_model_handoff saves an immutable checkpoint; load_model_handoff restores it for any target model in the same project. Neither requires Redis, Honcho, or a provider API:
{
"goal": "Original user request",
"messages": [{"role": "user", "content": "Exact conversation text"}],
"decisions": ["Keep the existing public API"],
"constraints": ["Use the user-selected model and reasoning level"],
"facts": [],
"tasks": [{"task": "Native verification", "status": "failed", "failure_reason": "Host unavailable"}],
"acceptance_criteria": ["Regression tests pass"],
"open_questions": []
}Pass the returned handoff_id to the next model β it must load that checkpoint before continuing. Exact supplied messages, decisions, failures, and file contents are retained; no automatic summary replaces them. Failed tasks require reasons; completed tasks require evidence. Changed files, corruption, missing checkpoints, or insufficient context budget return failed; saved memory stays intact for recovery.
Checkpoints live once under CONTEXT_BROKER_STORAGE_DIR/handoffs/<project-digest>/, independently of model, session, and storage mode. Identical saves reuse the same content-hash ID; updated checkpoints preserve previous versions. Atomic writes and file locks protect concurrent saves. Each checkpoint is limited to 256 KB (source files share the 64 KB snapshot limit); load defaults to a 32 KB byte budget. These tools cannot recover unsaved host history, transfer private model reasoning, or guarantee equal model quality.
Optional multi-agent delegation for large tasks (delegate_large_task)
delegate_large_task runs 2β4 independent proposal workers concurrently, then one integration reviewer, using the exact user-specified model ID for every call. The tool asks the user Split task / Keep one agent before any provider calls β decline, cancellation, timeout, or unavailable elicitation launches no workers, and there is no confirmation boolean that bypasses the prompt.
Configure CONTEXT_BROKER_LLM_BASE_URL (OpenAI-compatible, ending in /v1) and, if required, CONTEXT_BROKER_LLM_API_KEY on the broker service. Local HTTP is limited to loopback; remote endpoints require HTTPS. The provider must support /chat/completions JSON responses and return the requested exact model ID. Provider calls can incur charges; the confirmation states the assignments, selected model, context sharing, and maximum number of calls.
Workers have no command execution or file-writing tools β they return proposed changes, evidence, and risks. Passing review yields ready_for_integration, not completed work: the host must integrate proposals and run tests. Failed batches preserve successful proposal handoffs, cancel unfinished siblings, and never automatically retry paid calls. Files outside the project, secret files/content, oversized responses, incomplete provider responses, and model mismatches are rejected. Failures return status: "failed", failure_code, failure_reason, completed: false, with the MCP isError flag set; provider HTTP failures expose only the status code.
Storage modes & persistence model
- Query cache β local JSON at
.cache/context-broker.json - Corpus embedding index β
.cache/context-broker-index.json+.npy(invalidated by path set / mtime fingerprint / model name) - Saved results / user memory / token history β local JSON under
.context-broker/or~/.context-broker/ - Cross-chat context β optional Honcho or Redis backend
- Chat history β dual-written to the backend and
<storage>/chats/<project_digest>/<session_id>.json
Three storage modes for saved JSON results:
- Both (default) β β save to the project folder, load project-first with global fallback, list from both. Best for daily development.
- Global β everything under
~/.context-broker/. Best for CI/CD and centralized management. - In-project β everything under the project's
.context-broker/. Best for committing results to git and sharing with teammates.
Web dashboard & cross-chat backends
CONTEXT_BROKER_CONTEXT_BACKEND=redis \
CONTEXT_BROKER_REDIS_URL=redis://localhost:6379/0 \
python -m context_broker dashboardBinds 127.0.0.1:8770 by default; install extras with pip install "context-broker[dashboard]". The dashboard requires the Redis backend to enumerate projects, auto-loads the nearest .env (without overriding parent env), and re-running it when an instance is already serving is a clean no-op β safe to wire as an auto-launch step in every editor's MCP config. User identity is opt-in via CONTEXT_BROKER_USE_ACCOUNT_NAME=1 (defaults to the OS account name; CONTEXT_BROKER_ACCOUNT_NAME_OVERRIDE overrides; explicit user_peer_id args always win).
Prefer Honcho? CONTEXT_BROKER_CONTEXT_BACKEND=honcho β install with pip install "context-broker[integrations]". The same save_chat_context / load_chat_context tools then write to Honcho; context is session-limited by default to avoid mixing unrelated memory.
Disconnect behavior
On Linux, closing the editor's stdio MCP connection terminates the broker even when the editor remains open or a synchronous operation is still running β the watchdog observes pipe hangup without reading protocol messages. Network transports remain available to other clients when one disconnects.
Editor plugin enable/disable settings belong to the editor; this repository contains no editor plugin or hook that synchronizes those settings, and stopping the broker process does not change an editor's plugin toggle.
Context Broker is migrating incrementally into a Universal Context Router: an upstream MCP server plus a downstream MCP client (context_broker/client_ttc/) supporting stdio, streamable HTTP, and SSE transports with bounded reconnect, heartbeat probes, capability discovery, and downstream tools/call dispatch. The UCR runtime adds an expanded tool registry (JSON / SQLite / optional Redis), intent detection, skill-aware decomposition, DAG planning with parallel-safe stages, safety-gated execution, secret redaction, route metrics, and benchmarking β while existing tools stay backward compatible by default.
See ARCHITECTURE_MIGRATION.md for completed work, remaining phases, decisions, risks, and rollback strategy. A standalone multi-provider/channel harness is feasible β see docs/harness-feasibility.md.
- Usage Guide β configuration, workflows, tool examples, best practices, troubleshooting
- Architecture β C4 diagrams, data flow, module dependencies, performance
- Migration Plan β UCR migration status and roadmap
- UCR RFCs β vendor-neutral RFC series (RFC-000 β RFC-018)
- Example AGENTS.md β a well-structured, broker-generated
AGENTS.md - Contributing β development setup, code style, testing
context-broker/
βββ context_broker/ # Modular package (TTC pattern)
β βββ config.py # All env vars, constants, security patterns
β βββ __main__.py # Entry: MCP server or dashboard
β βββ indexer_ttc/ # Embedding, indexing, search
β βββ storage_ttc/ # JSON persistence
β βββ context_ttc/ # Cross-chat context (Honcho/Redis), chat ledger
β βββ dashboard_ttc/ # Starlette web dashboard
β βββ security_ttc/ # Secret file protection, audit logging
β βββ client_ttc/ # Downstream MCP client (UCR)
β βββ server_ttc/ # MCP tool registrations
βββ pyproject.toml
βββ README.md Β· Usage.md Β· ARCHITECTURE.md Β· CHANGELOG.md Β· AGENTS.md Β· CONTRIBUTING.md
Supported file types: Python, JavaScript, TypeScript, Go, Rust, Java, HTML, CSS, Shell, SQL, JSON, TOML, YAML, XML, Properties, Gradle, Markdown. Always-ignored directories include node_modules, .git, dist, __pycache__, .venv, target, build, bin, out, .gradle, .idea, .vscode, and more.
uv run python context-broker.py # stdio (default)
CONTEXT_BROKER_TRANSPORT=sse \
CONTEXT_BROKER_PORT=8765 uv run python context-broker.py # SSE (Docker-friendly)
CONTEXT_BROKER_TRANSPORT=streamable-http uv run python context-broker.pyContributions are welcome β see CONTRIBUTING.md for the developer guide. All changes need tests (uv run pytest) and follow the TTC pattern.
If Context Broker saved you tokens, give it a β β and share it with someone whose AI assistant is still reading entire repos.
MIT Β· Built with FastMCP and sentence-transformers