代码语义智能分析工具

Context+是一款为开发者设计的代码语义智能分析工具,通过结合RAG、Tree-sitter AST、Spectral Clustering等技术,将大规模代码库转化为可搜索的分层特征图,提供99%的准确性。

  • by forloopcodes
  • TypeScript
  • 本地部署
  • 1986 星标
  • 更新于
在 GitHub 查看 ForLoopCodes/contextplus

使用说明

背景+

面向大规模工程的语义智能。

Context+是一个MCP服务器,专为要求99%准确率的开发人员而设计。通过结合RAG、树型AST、光谱聚类和黑曜石风格链接,Context+将庞大的代码库转化为可搜索的分层特征图。

https://github.com/user-attachments/assets/a97a451f-c9b4-468d-b036-15b65fc13e79

工具

发现

工具 说明
get_context_tree 项目的结构化AST树,包含文件头和符号范围(函数/类/方法的行号)。动态修剪会自动缩小输出。
get_file_skeleton 函数签名、类方法和带行范围的类型定义,无需阅读全文。显示API曲面。
semantic_code_search 按含义搜索,而不是按精确文本搜索。在文件头/符号上使用嵌入,并返回匹配的符号定义行。
semantic_identifier_search 对具有排序调用站点和线路号的函数/类/变量进行标识符级语义检索。
semantic_navigate 使用谱聚类按意义浏览代码库。将语义相关的文件分组到标记的簇中。

分析

工具 说明
get_blast_radius 跟踪导入或使用符号的每个文件和行。防止孤立引用。
run_static_analysis 运行本机linter和编译器以查找未使用的变量、死代码和类型错误。支持TypeScript、Python、Rust、Go。

代码操作

工具 说明
propose_commit 编写代码的唯一方法。保存前根据严格规则进行验证。在写入之前创建阴影还原点。
get_feature_hub 黑曜石风格的功能中心导航器。集线器是 .md 文件与 [[wikilinks]] 将功能映射到代码文件。

版本控制

工具 说明
list_restore_points 列出由创建的所有阴影还原点 propose_commit。每个都捕获AI更改前的文件状态。
undo_change 将文件还原到特定AI更改前的状态。使用阴影还原点。不会影响git。

内存和RAG

工具 说明
upsert_memory_node 使用自动生成的嵌入创建或更新内存节点(概念、文件、符号、注释)。
create_relation 在节点之间创建类型化边(relates_to、depends_on、implementations、references、similar_to、contains)。
search_memory_graph 带图遍历的语义搜索——找到直接匹配,然后遍历一级/二级邻居。
prune_stale_links 删除衰减边(e^(-λt)低于阈值)和访问计数低的孤立节点。
add_interlinked_context 批量添加具有自动相似性链接的节点(余弦≥0.72会自动创建边)。
retrieve_with_traversal 从一个节点开始向外走——返回所有按衰减和深度评分的可达邻居。

补充服务器: pmll存储器mcp (npx pmll-memory-mcp)是一个独立的MCP服务器 @Qedwards博士 它调整了Context+的长期内存图,并在其上添加了短期KV上下文内存、Q-promise重复数据删除和解决方案引擎。看 drQedwards/PPM 了解详情。

设置

快速入门(npx/bunx)

无需安装。将Context+添加到IDE MCP配置中。

对于Claude Code、Cursor和Windsurf,请使用 mcpServers:

{
  "mcpServers": {
    "contextplus": {
      "command": "bunx",
      "args": ["contextplus"],
      "env": {
        "OLLAMA_EMBED_MODEL": "nomic-embed-text",
        "OLLAMA_CHAT_MODEL": "gemma2:27b",
        "OLLAMA_API_KEY": "YOUR_OLLAMA_API_KEY"
      }
    }
  }
}

VS代码(.vscode/mcp.json),使用 servers 和 inputs:

{
  "servers": {
    "contextplus": {
      "type": "stdio",
      "command": "bunx",
      "args": ["contextplus"],
      "env": {
        "OLLAMA_EMBED_MODEL": "nomic-embed-text",
        "OLLAMA_CHAT_MODEL": "gemma2:27b",
        "OLLAMA_API_KEY": "YOUR_OLLAMA_API_KEY"
      }
    }
  },
  "inputs": []
}

如果你愿意 npx,使用:

  • "command": "npx"
  • "args": ["-y", "contextplus"]

或者直接在当前目录中生成MCP配置文件:

npx -y contextplus init claude
bunx contextplus init cursor
npx -y contextplus init opencode

支持的编码代理名称: claude, cursor, vscode, windsurf, opencode.

配置文件位置:

IDE 配置文件
克劳德代码 .mcp.json
光标 .cursor/mcp.json
VS代码 .vscode/mcp.json
风帆冲浪 .windsurf/mcp.json
OpenCode opencode.json

CLI子命令

  • init [target] -生成MCP配置(目标: claude, cursor, vscode, windsurf, opencode).
  • skeleton [path] 或 tree [path] - 新 直接在终端中查看具有文件头和符号定义的项目结构树。
  • [path] -启动指定路径(默认为当前目录)的MCP服务器(stdio)。

包括工作区排除的路径 .gitignore

如果你的工作空间 .gitignore 排除您仍然需要的子目录 索引(在monorepos中很常见,其中子项目在 repos/, packages/, 或 vendor/ 在顶层被忽略),使用 --include 或 CONTEXTPLUS_EXTRA_ROOTS 重新添加路径。

CLI表单 (可重复):

bunx contextplus /path/to/workspace \
  --include repos/lacuna \
  --include repos/graphrag-core

环境变量 (否时回退 --include 标志已设置;使用 系统路径分隔符-- : 在Unix上, ; 在Windows上):

CONTEXTPLUS_EXTRA_ROOTS=repos/lacuna:repos/graphrag-core \
  bunx contextplus /path/to/workspace

进入 .mcp.json env形式通常更符合人体工程学:

{
  "mcpServers": {
    "contextplus": {
      "command": "bunx",
      "args": ["contextplus", "/path/to/workspace"],
      "env": {
        "CONTEXTPLUS_EXTRA_ROOTS": "repos/lacuna:repos/graphrag-core"
      }
    }
  }
}

列出的每条路径都是步行的 独立地 工作区根目录,带有 新鲜忽略范围。每条路都有自己的 .gitignore 受到尊重。路径是 启动时验证;无效条目(不存在,不是目录, 工作区外)发出stderr警告并被跳过。

嵌套 .gitignore 工作区内和每个额外根目录内的文件 加载并合并继承的规则,匹配 git 和 ripgrep 行为。

来源

npm install
npm run build

嵌入提供者

Context+支持两个由控制的嵌入后端 CONTEXTPLUS_EMBED_PROVIDER:

提供者 价值 要求 最佳
Ollama (默认) ollama 本地Ollama服务器 免费、离线、私人
OpenAI兼容 openai API密钥 Gemini(免费层)、OpenAI、Groq、vLLM

Ollama(默认)

无需额外配置。只需使用嵌入模型运行Ollama:

ollama pull nomic-embed-text
ollama serve

谷歌双子座(免费版)

完整的克劳德代码 .mcp.json 例子:

{
  "mcpServers": {
    "contextplus": {
      "command": "npx",
      "args": ["-y", "contextplus"],
      "env": {
        "CONTEXTPLUS_EMBED_PROVIDER": "openai",
        "CONTEXTPLUS_OPENAI_API_KEY": "YOUR_GEMINI_API_KEY",
        "CONTEXTPLUS_OPENAI_BASE_URL": "https://generativelanguage.googleapis.com/v1beta/openai",
        "CONTEXTPLUS_OPENAI_EMBED_MODEL": "text-embedding-004"
      }
    }
  }
}

在获取免费API密钥 谷歌AI工作室.

OpenAI

{
  "mcpServers": {
    "contextplus": {
      "command": "npx",
      "args": ["-y", "contextplus"],
      "env": {
        "CONTEXTPLUS_EMBED_PROVIDER": "openai",
        "OPENAI_API_KEY": "sk-...",
        "OPENAI_EMBED_MODEL": "text-embedding-3-small"
      }
    }
  }
}

其他与OpenAI兼容的API(Groq、vLLM、LiteLLM)

任何实现 OpenAI嵌入API 作品:

{
  "mcpServers": {
    "contextplus": {
      "command": "npx",
      "args": ["-y", "contextplus"],
      "env": {
        "CONTEXTPLUS_EMBED_PROVIDER": "openai",
        "CONTEXTPLUS_OPENAI_API_KEY": "YOUR_KEY",
        "CONTEXTPLUS_OPENAI_BASE_URL": "https://your-proxy.example.com/v1",
        "CONTEXTPLUS_OPENAI_EMBED_MODEL": "your-model-name"
      }
    }
  }
}

注: 这 semantic_navigate 该工具还使用聊天模型进行集群标记。使用时 openai 提供者,set CONTEXTPLUS_OPENAI_CHAT_MODEL (默认值: gpt-4o-mini).

对于VS代码、游标或OpenCode,使用相同的 env IDE MCP配置格式中的块(请参阅 配置文件位置 上表)。

建筑学

使用模型上下文协议SDK在stdio上使用TypeScript构建的三层:

核心 (src/core/)-多语言AST解析(树形图,43个扩展)、gitignore感知遍历、带磁盘缓存的Ollama向量嵌入、wikilink中心图、带衰减评分的内存属性图。

工具 (src/tools/)-17个MCP工具,展示结构、语义、操作和内存图功能。

Git (src/git/)-影子还原点系统,用于撤消操作,无需接触git历史记录。

运行时缓存 (.mcp_data/)-在服务器启动时创建;存储可重用的文件、标识符和调用站点嵌入,以避免重复的GPU/CPU嵌入工作。实时跟踪器增量刷新更改的文件/函数。

配置

变量 类型 默认值 描述
CONTEXTPLUS_EMBED_PROVIDER 字符串 ollama 嵌入后端: ollama 或 openai
OLLAMA_EMBED_MODEL 字符串 nomic-embed-text Ollama嵌入模型
OLLAMA_API_KEY string - Ollama Cloud API密钥
OLLAMA_CHAT_MODEL 字符串 llama3.2 用于集群标记的Ollama聊天模型
CONTEXTPLUS_OPENAI_API_KEY string - OpenAI兼容提供程序的API密钥(别名: OPENAI_API_KEY)
CONTEXTPLUS_OPENAI_BASE_URL 字符串 https://api.openai.com/v1 OpenAI兼容端点URL(别名: OPENAI_BASE_URL)
CONTEXTPLUS_OPENAI_EMBED_MODEL 字符串 text-embedding-3-small OpenAI兼容的嵌入模型(别名: OPENAI_EMBED_MODEL)
CONTEXTPLUS_OPENAI_CHAT_MODEL 字符串 gpt-4o-mini 用于标签的OpenAI兼容聊天模型(别名: OPENAI_CHAT_MODEL)
CONTEXTPLUS_EMBED_BATCH_SIZE 字符串(解析为数字) 8 每次GPU调用嵌入批处理大小,限制在5-10
CONTEXTPLUS_EMBED_CHUNK_CHARS 字符串(解析为数字) 2000 合并前每个块字符数限制为256-8000
CONTEXTPLUS_MAX_EMBED_FILE_SIZE 字符串(解析为数字) 51200 跳过大于此字节数的非代码文本文件
CONTEXTPLUS_EMBED_NUM_GPU string(解析为数字) - 可选Ollama嵌入运行时 num_gpu 以(权力)否决
CONTEXTPLUS_EMBED_MAIN_GPU string(解析为数字) - 可选Ollama嵌入运行时 main_gpu 以(权力)否决
CONTEXTPLUS_EMBED_NUM_THREAD string(解析为数字) - 可选Ollama嵌入运行时 num_thread 以(权力)否决
CONTEXTPLUS_EMBED_NUM_BATCH string(解析为数字) - 可选Ollama嵌入运行时 num_batch 以(权力)否决
CONTEXTPLUS_EMBED_NUM_CTX string(解析为数字) - 可选Ollama嵌入运行时 num_ctx 以(权力)否决
CONTEXTPLUS_EMBED_LOW_VRAM string(解析为布尔值) - 可选Ollama嵌入运行时 low_vram 以(权力)否决
CONTEXTPLUS_EMBED_TRACKER 字符串(解析为布尔值) true 启用文件更改时的实时嵌入刷新
CONTEXTPLUS_EMBED_TRACKER_MAX_FILES 字符串(解析为数字) 8 每个跟踪器滴答声处理的最大更改文件数,限制在5-10个
CONTEXTPLUS_EMBED_TRACKER_DEBOUNCE_MS 字符串(解析为数字) 700 刷新跟踪器前清除窗口抖动

测试

npm test
npm run test:demo
npm run test:all