code-context-storage-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@code-context-storage-mcp Save the call graph and semantic info for the backend."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Code Context Storage MCP
code-context-storage-mcp is a local storage and MCP protocol service for a code context knowledge base. It stores code nodes, call edges, semantic information, evidence, business catalogs/mappings, and version snapshots in SQLite, and exposes structured tools externally via FastMCP's stdio transport.
The project sits between "Skill / external AI" and persistent business capabilities: callers read and write the knowledge base through MCP tools and must not access SQLite directly. The MVP targets a single code repository and a fixed source version, focusing on index/artifact import, version-constrained queries, business mapping, evidence validation, incremental sync, snapshot publishing, and evaluation.
Features
SQLite persistence of code facts:
node,edge,evidence,node_semantic.Node recall based on semantic and business terms, plus budget-constrained graph context, path, and impact analysis.
Business catalogs, contexts, mappings, and mapping steps; candidate and confirmed results have explicit statuses.
staging → published snapshot publishing flow with idempotent operations, CAS concurrency protection, and stale propagation/recovery.
MCP protocol v2 envelope:
request_id,operation_id, schema/tool version, and structured errors.Test coverage for unit, contract, black-box, and real stdio MCP adapter scenarios.
Out of scope for this project are code generation/execution, cross-repository unified graphs, automatic business modeling without human confirmation, and mixing runtime observations into static code facts. See the MVP design document for the full boundary.
Related MCP server: local-code-intel-mcp
Requirements
Python 3.11 or later
pipThe working directory in the Windows PowerShell examples is the repository root
Dependencies are declared in pyproject.toml; the core runtime dependency is fastmcp==3.4.7.
Install
A virtual environment is recommended:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e .If PowerShell blocks activation scripts, you can skip activation and run the commands below directly with .\.venv\Scripts\python.exe.
Run the MCP server
After installation, use the project's command-line entry point:
code-context-storage-mcp --database .data\context.dbOr use the module entry point directly:
python -m code_context_storage_mcp.server --database .data\context.dbBoth startup methods use the stdio transport. The process reads MCP JSON-RPC messages from stdin and writes responses to stdout, so do not append ordinary logs to stdout; the default database path is .data/context.db, and a different SQLite file can be specified with --database.
View command-line arguments:
code-context-storage-mcp --helpMCP client configuration
A stdio client should launch the following command and write requests to stdin:
{
"mcpServers": {
"code-context-storage": {
"command": "code-context-storage-mcp",
"args": ["--database", ".data/context.db"]
}
}
}If the console script is not installed, change command to Python and args to:
["-m", "code_context_storage_mcp.server", "--database", ".data/context.db"]After connecting, the client should first call MCP's tools/list to see the currently registered tools and their input schemas. Tools are grouped by capability: code fact write/read, graph queries, business catalogs and mappings, sync control, publishing, evidence, knowledge generation, and evaluation; the exact registered set is whatever tools/list returns at service runtime.
Development commands
Run from the repository root:
python -m pytest tests -qRun black-box tests:
python -m pytest tests\blackbox -qFor scenarios in black-box tests that need a real MCP stdio service, the service command can be configured:
$env:PYTHONPATH = "src"
$env:KNOWLEDGE_GENERATE_MCP_COMMAND = '["python", "-m", "code_context_storage_mcp.server"]'
python -m pytest tests\blackbox -qSome black-box tests skip when this configuration is missing; in CI it should be explicitly configured so the tests surface configuration or protocol issues.
Phase acceptance and evaluation
Generate the Phase acceptance report and its accompanying evaluation request:
python scripts\run_phase_acceptance.py --output artifacts\phase-acceptance.jsonRun offline evaluation with the generated request and thresholds:
python scripts\run_evaluation.py `
--request artifacts\evaluation-request.json `
--thresholds artifacts\thresholds.json `
--output artifacts\evaluation-result.json `
--database .data\context.dbrun_evaluation.py uses an empty response set by default, which is suitable for validating the evaluation pipeline and input contract; to get meaningful evaluation results, provide black-box responses from an MCP client via --responses. The script exits with a non-zero code when the evaluation status is not passed.
Repository layout
src/code_context_storage_mcp/
server.py CLI 入口,创建 Store 并启动 stdio MCP 服务
fastmcp_server.py FastMCP server、tool 注册和 protocol envelope
tool_definitions.py tool 输入 schema
router.py tool 到 handler/service 的分发
handlers/ 代码事实、图查询和业务操作处理器
services/ 查询、同步、索引、幂等、追踪等业务服务
publication/ 发布适配与发布服务
store.py SQLite 持久化
entities.py/contracts.py 数据实体与协议契约
migrations/ SQLite schema migrations
tests/ 单元、契约、集成和黑盒测试
scripts/ 验收与评测脚本
docs/design/ 设计文档The main runtime chain is: server.main -> Store -> create_mcp_server -> ToolRouter -> handlers/services -> SQLite. Write operations typically enter staging first, then pass conflict/coverage gates before a snapshot is published; queries are pinned to a single snapshot and source revision and return a traceable execution context.
Data and migrations
The default database file .data/context.db is runtime data and must not be committed to version control. The schema is maintained by SQL files in migrations/; before connecting new code to an existing database, confirm the corresponding migration has been applied. Tests usually use temporary SQLite databases, so they do not depend on the default data file on the development machine.
License
This repository does not currently provide a standalone license file; if you plan to release it publicly, please add a license and contribution guidelines first.
Available Tools
77 toolsanalyze_impactD
analyze impact
Inputs: node_id (required), repository_id (required), target_commit (required), depth, +11 more.
business_candidates_validateD
business candidates validate
Inputs: context (required), candidates (required), request_id, tool_version, +1 more.
business_context_listD
business context list
Inputs: repository_id (required), target_commit (required), scope_id, domain_id, +5 more.
business_contexts_batch_upsertD
business contexts batch upsert
Inputs: context (required), contexts (required), request_id, tool_version, +2 more.
business_coverage_recordD
business coverage record
Inputs: context (required), coverage (required), request_id, tool_version, +2 more.
business_directory_batch_upsertD
business directory batch upsert
Inputs: scopes (required), context (required), domains (required), concepts (required), +4 more.
business_directory_getD
business directory get
Inputs: repository_id (required), target_commit (required), scope_id, domain_id, +5 more.
business_fts_rebuildD
business fts rebuild
Inputs: repository_id (required), target_commit (required), request_id, snapshot_id, +2 more.
business_mapping_confirmD
business mapping confirm
Inputs: actor (required), status (required), mapping_id (required), evidence_refs (required), +20 more.
business_mapping_expandD
business mapping expand
Inputs: mapping_id (required), repository_id (required), target_commit (required), actor, +20 more.
business_mapping_getD
business mapping get
Inputs: mapping_id (required), repository_id (required), target_commit (required), actor, +20 more.
business_mapping_listD
business mapping list
Inputs: context_id (required), repository_id (required), target_commit (required), request_id, +6 more.
business_mapping_reverseD
business mapping reverse
Inputs: repository_id (required), target_commit (required), actor, limit, +20 more.
business_mappings_batch_upsertD
business mappings batch upsert
Inputs: context (required), mappings (required), request_id, tool_version, +2 more.
business_mapping_searchD
business mapping search
Inputs: repository_id (required), target_commit (required), actor, limit, +20 more.
business_mappings_validateD
business mappings validate
Inputs: context (required), mappings (required), request_id, tool_version, +2 more.
check_coverageD
check coverage
Inputs: context (required), operation_id (required), items, action, +9 more.
code_context_getD
code context get
Inputs: repository_id (required), target_commit (required), node_ids, direction, +8 more.
code_facts_commitD
code facts commit
Inputs: context (required), nodes, evidence, request_id, +3 more.
code_facts_validateD
code facts validate
Inputs: context (required), nodes, evidence, request_id, +3 more.
confirmD
confirm
Inputs: actor (required), status (required), mapping_id (required), evidence_refs (required), +20 more.
confirmation_auditD
confirmation audit
Inputs: repository_id (required), target_commit (required), actor, limit, +20 more.
detect_conflictsD
detect conflicts
Inputs: context (required), operation_id (required), items, action, +9 more.
dict_readD
dict read
Inputs: repository_id (required), target_commit (required), scope_id, domain_id, +8 more.
dict_writeD
dict write
Inputs: payload (required), entity_type (required), repository_id (required), target_commit (required), +8 more.
edge_batch_upsertD
edge batch upsert
Inputs: edges (required), context (required), request_id, tool_version, +2 more.
edge_validateD
edge validate
Inputs: edges (required), context (required), request_id, tool_version, +2 more.
evaluation_getD
evaluation get
Inputs: evaluation_run_id (required), request_id, tool_version, schema_version.
evaluation_golden_setD
evaluation golden set
Inputs: cases (required), actor, request_id, tool_version, +3 more.
evaluation_runD
evaluation run
Inputs: snapshot_id (required), golden_set_id (required), repository_id (required), source_revision (required), +7 more.
evidence_batch_getD
evidence batch get
Inputs: evidence_ids (required), repository_id (required), target_commit (required), request_id, +4 more.
evidence_getD
evidence get
Inputs: repository_id (required), target_commit (required), edge_ids, node_ids, +6 more.
evidence_verifyD
evidence verify
Inputs: context (required), end_line, file_path, request_id, +9 more.
exportD
export
Inputs: format (required), snapshot_id (required), repository_id (required), source_revision (required), +5 more.
find_pathsD
find paths
Inputs: to_node_id (required), from_node_id (required), repository_id (required), target_commit (required), +11 more.
get_edgesD
get edges
Inputs: repository_id (required), target_commit (required), edge_ids, edge_types, +6 more.
get_nodesD
get nodes
Inputs: node_ids (required), repository_id (required), target_commit (required), file_path, +4 more.
graph_context_getD
graph context get
Inputs: repository_id (required), target_commit (required), start_node_ids (required), depth, +10 more.
healthD
health
Inputs: repository_id (required), actor, request_id, snapshot_id, +3 more.
index_rebuildD
index rebuild
Inputs: repository_id (required), actor, request_id, snapshot_id, +3 more.
ingestD
ingest
Inputs: scope (required), context (required), operation_id (required), config_version (required), +6 more.
jobD
job
Inputs: context (required), operation_id (required), items, action, +9 more.
job_cancelD
job cancel
Inputs: context (required), operation_id (required), items, action, +9 more.
job_resumeD
job resume
Inputs: context (required), operation_id (required), items, action, +9 more.
knowledge_command_statusD
knowledge command status
Inputs: request_id, tool_version, schema_version, timeout_seconds.
knowledge_confirmD
knowledge confirm
Inputs: actor (required), knowledge_id (required), operation_id (required), reason, +5 more.
knowledge_generateD
knowledge generate
Inputs: mapping_ids (required), snapshot_id (required), operation_id (required), repository_id (required), +7 more.
knowledge_rejectD
knowledge reject
Inputs: actor (required), knowledge_id (required), operation_id (required), reason, +5 more.
list_conceptsD
list concepts
Inputs: domain_id (required), repository_id (required), target_commit (required), scope_id, +5 more.
list_contextsD
list contexts
Inputs: repository_id (required), target_commit (required), scope_id, domain_id, +5 more.
list_domainsD
list domains
Inputs: scope_id (required), repository_id (required), target_commit (required), domain_id, +5 more.
list_scopesD
list scopes
Inputs: repository_id (required), target_commit (required), scope_id, domain_id, +5 more.
mining_discoverD
mining discover
Inputs: snapshot_id (required), repository_id (required), source_revision (required), mode, +6 more.
mining_runD
mining run
Inputs: snapshot_id (required), operation_id (required), repository_id (required), source_revision (required), +6 more.
node_batch_getD
node batch get
Inputs: node_ids (required), repository_id (required), target_commit (required), file_path, +4 more.
node_semantic_batch_upsertD
node semantic batch upsert
Inputs: context (required), semantics (required), request_id, tool_version, +2 more.
node_semantic_validateD
node semantic validate
Inputs: context (required), semantics (required), request_id, tool_version, +2 more.
publishD
publish
Inputs: run_id (required), context (required), manifest_id (required), operation_id (required), +9 more.
pushD
push
Inputs: target (required), dry_run (required), snapshot_id (required), operation_id (required), +9 more.
queryD
query
Inputs: query (required), snapshot_id (required), operation_id (required), repository_id (required), +9 more.
query_trace_readD
query trace read
Inputs: query_trace_id (required), request_id, snapshot_id, tool_version, +2 more.
search_nodesD
search nodes
Inputs: terms (required), repository_id (required), target_commit (required), limit, +4 more.
search_pathsD
search paths
Inputs: context_id (required), repository_id (required), target_commit (required), actor, +20 more.
semantic_confirmD
semantic confirm
Inputs: context (required), semantic_id (required), confirmed_by (required), expected_version (required), +3 more.
semantic_fts_rebuildD
semantic fts rebuild
Inputs: repository_id (required), target_commit (required), request_id, tool_version, +2 more.
semantic_term_searchD
semantic term search
Inputs: terms (required), repository_id (required), target_commit (required), limit, +7 more.
skill_eventsD
skill events
Inputs: job_id (required), trace_id, request_id, tool_version, +1 more.
skill_statusD
skill status
Inputs: job_id (required), request_id, tool_version, schema_version.
skill_triggerD
skill trigger
Inputs: payload (required), request_id (required), skill_name (required), operation_id (required), +6 more.
snapshot_catalogD
snapshot catalog
Inputs: repository_id (required), status, page_size, page_token, +4 more.
snapshot_cleanupD
snapshot cleanup
Inputs: actor (required), repository_id (required), permission_scope (required), status, +4 more.
snapshot_switchD
snapshot switch
Inputs: request_id, snapshot_id, tool_version, repository_id, +2 more.
stale_eventD
stale event
Inputs: context (required), operation_id (required), request_id, tool_version, +1 more.
stale_event_readD
stale event read
Inputs: repository_id (required), object_id, page_size, page_token, +6 more.
statusD
status
Inputs: context (required), request_id, operation_id, tool_version, +1 more.
traverse_graphD
traverse graph
Inputs: repository_id (required), target_commit (required), start_node_ids (required), depth, +11 more.
updateD
update
Inputs: scope (required), changes (required), context (required), operation_id (required), +7 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 77 tools
The tool set is extremely large with many overlapping names. For example, there are multiple 'confirm' tools (semantic_confirm, business_mapping_confirm, knowledge_confirm, confirm) and many 'validate' tools (code_facts_validate, edge_validate, node_semantic_validate, business_candidates_validate, business_mappings_validate). Generic verbs like 'update', 'query', 'publish', and 'job' further blur boundaries, making it nearly impossible for an agent to reliably select the correct tool without detailed descriptions.
Most tool names use snake_case, but the pattern is inconsistent. Some follow verb_noun (e.g., list_scopes, list_domains, search_nodes), but many invert to noun_verb (e.g., graph_context_get, node_batch_get) or use awkward structures like 'business_directory_batch_upsert'. Additionally, several tools are single words without a pattern (e.g., ingest, update, push, query, status, health), which breaks consistency.
With 77 tools, the server is excessively large for a typical MCP context. The stated domain of code-context-storage is not so broad as to justify this number, especially when many tools appear to be variations of the same operation (e.g., multiple upsert, validate, and confirm tools). This creates a maintenance and selection burden without clear benefit.
Despite the massive number of tools, there are notable gaps. For instance, there are upsert operations for nodes, edges, and business mappings but no corresponding delete or remove operations. Similarly, there are get and search operations but no clear lifecycle management for jobs beyond cancel/resume. The bloat suggests coverage is scattered rather than systematically complete.
Maintenance
Related MCP Connectors
Shared context for your codebase: a hosted code knowledge graph over MCP. Free plan, OAuth sign-up.
Repository knowledge graph MCP server for codebase understanding and debugging.
The fact infrastructure for agentic companies. Verified, versioned business facts over MCP.
Deterministic context layer for your codebase: change impact, blast radius, answers with receipts.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceProvides a local code knowledge graph for Java projects, enabling querying of classes, methods, fields, calls, inheritance, and imports via MCP tools like query, context, impact, and cypher.1-
- FlicenseNot gradedqualityDmaintenanceProvides code intelligence by indexing source code into SQLite and offering MCP tools for symbol search, flow tracing, and context retrieval to assist with code navigation and understanding.-
- FlicenseNot gradedqualityBmaintenanceTransforms a codebase into a queryable knowledge base for code understanding, impact analysis, ownership lookup, and more via CLI, HTTP API, or MCP.112-
- AlicenseNot gradedqualityDmaintenanceProvides a code graph querying and visualization MCP server, enabling users to search, trace, and describe code components, overlay diffs, and explore architecture through natural language.MIT