Skip to main content
Glama
code-context-storage-mcp

code-context-storage-mcp

by Jrains-ux

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

  • pip

  • The 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.db

Or use the module entry point directly:

python -m code_context_storage_mcp.server --database .data\context.db

Both 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 --help

MCP 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 -q

Run black-box tests:

python -m pytest tests\blackbox -q

For 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 -q

Some 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.json

Run 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.db

run_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 tools
analyze_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_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.

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

    D1.2/5.0

    Scored across 77 tools

    Disambiguation1/5

    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.

    Naming Consistency2/5

    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.

    Tool Count1/5

    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.

    Completeness2/5

    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

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      F
      maintenance
      Provides 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
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      Provides 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.
      -
    • F
      license
      Not graded
      quality
      B
      maintenance
      Transforms a codebase into a queryable knowledge base for code understanding, impact analysis, ownership lookup, and more via CLI, HTTP API, or MCP.
      112
      -