/ 目录 / 演练场 / contextplus
● 社区 ForLoopCodes ⚡ 即开即用

contextplus

作者 ForLoopCodes · ForLoopCodes/contextplus

为你的编码助手建立持久的语义地图——AST + 嵌入 + 内存图 + 影子撤销——这样它就不会反复重新读整个代码库。

Context+(ForLoopCodes/contextplus)是一个 TypeScript MCP,暴露 17 个工具用于代码库理解:tree-sitter AST 树、文件骨架、语义标识符搜索、影响范围分析、用于长期项目的内存图,以及用于安全编辑的影子恢复点。支持 Ollama 或云嵌入。

为什么要用

核心特性

实时演示

实际使用效果

contextplus.replay ▶ 就绪
0/0

安装

选择你的客户端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "contextplus": {
      "command": "npx",
      "args": [
        "-y",
        "contextplus"
      ],
      "_inferred": true
    }
  }
}

打开 Claude Desktop → Settings → Developer → Edit Config。保存后重启应用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "contextplus": {
      "command": "npx",
      "args": [
        "-y",
        "contextplus"
      ],
      "_inferred": true
    }
  }
}

Cursor 使用与 Claude Desktop 相同的 mcpServers 格式。项目级配置优先于全局。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "contextplus": {
      "command": "npx",
      "args": [
        "-y",
        "contextplus"
      ],
      "_inferred": true
    }
  }
}

点击 Cline 侧栏中的 MCP Servers 图标,然后选 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "contextplus": {
      "command": "npx",
      "args": [
        "-y",
        "contextplus"
      ],
      "_inferred": true
    }
  }
}

格式与 Claude Desktop 相同。重启 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "contextplus",
      "command": "npx",
      "args": [
        "-y",
        "contextplus"
      ]
    }
  ]
}

Continue 使用服务器对象数组,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "contextplus": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "contextplus"
        ]
      }
    }
  }
}

加入 context_servers。Zed 保存后热重载。

claude mcp add contextplus -- npx -y contextplus

一行命令搞定。用 claude mcp list 验证,claude mcp remove 卸载。

使用场景

实战用法: contextplus

如何快速让新助手在大型代码库中高效工作

👤 在单体库中使用 Cursor/Claude Code 的技术主管 ⏱ ~20 min intermediate

何时使用: 助手在阅读和重新阅读文件上浪费 30% 的 context。

前置条件
  • Node + bun 或 npm — brew install bun 或使用 npm
  • 嵌入提供商(Ollama 本地、OpenAI、Gemini 或 Groq) — ollama pull nomic-embed-text 用于离线
步骤
  1. 构建 context 树
    在代码库根目录上运行 get_context_tree。总结顶层。✓ 已复制
    → AST 树带文件头
  2. 仅骨架读取
    在 src/auth/ 上使用 get_file_skeleton 只看签名——不要读实现体。✓ 已复制
    → 没有实现的函数签名
  3. 提出语义问题
    semantic_identifier_search:'JWT 验证在哪里实现和调用?'✓ 已复制
    → 排序的实现 + 调用点

结果: 助手以对代码库的心理模型运作,使用约 5 倍少的 context。

注意事项
  • 首次运行索引很慢 — 运行一次初始扫描;增量更新很快
  • 索引和查询之间的嵌入模型不匹配 — 坚持使用一个嵌入模型;如果更改则重新索引
搭配使用: filesystem · github

如何使用影子恢复点进行重构

👤 担心让助手编辑代码的开发者 ⏱ ~15 min intermediate

何时使用: 你想要助手编辑,但也想要一键撤销而不污染 git。

步骤
  1. 捕获恢复点
    创建一个名为'before-auth-refactor'的恢复点。✓ 已复制
    → 返回点 id
  2. 让助手编辑
    propose_commit:重构 JWT 验证以使用新的密钥轮转助手。✓ 已复制
    → 文件已编辑 + 验证通过
  3. 如果出错则回滚
    undo_change 回到'before-auth-refactor'。✓ 已复制
    → 文件已还原,git 历史清洁

结果: 无所畏惧的重构,不污染 git 历史。

注意事项
  • 恢复点存在于 .contextplus/ 中——不要检入 — 将 .contextplus/ 添加到 .gitignore
搭配使用: github

删除函数前如何评估影响范围

👤 清理死代码的工程师 ⏱ ~10 min intermediate

何时使用: 你想在删除符号前准确知道谁导入或使用了它。

步骤
  1. 请求影响范围
    get_blast_radius 用于 src/pricing.ts 中的函数'legacyFormatPrice'。✓ 已复制
    → 导入或调用它的每个文件/行
  2. 规划移除
    对于每个调用点,提议替代。任何没有干净交换的地方都标记为风险。✓ 已复制
    → 迁移清单

结果: 一个没有意外的删除 PR。

注意事项
  • 动态导入(require、字符串引用)不被检测 — 用函数名的 grep 通过补充
搭配使用: github

如何使用内存图在会话间保持决策

👤 长期项目上的任何助手用户 ⏱ ~15 min advanced

何时使用: 你一直在向助手重新解释相同的架构选择。

步骤
  1. 种子内存
    upsert_memory_node:'我们选择 Postgres 而不是 MongoDB,因为计费流程中的事务不变量。'✓ 已复制
    → 使用嵌入创建的节点
  2. 创建关系
    create_relation:将该决策链接到 src/billing/*.ts 文件,边类型为'implements'。✓ 已复制
    → 边已创建
  3. 检索下一个会话
    search_memory_graph:'我们为什么使用 Postgres?'✓ 已复制
    → 决策浮出水面及支持文件

结果: 持久项目内存,超越聊天。

注意事项
  • 内存图变陈旧 — 每月运行 prune_stale_links
搭配使用: memory-service

组合

与其他 MCP 搭配,撬动十倍杠杆

contextplus + github

使用影响范围发现来填充跟踪问题

在 LegacyAuth 上运行 get_blast_radius,然后创建 GitHub 跟踪问题,每个调用点作为清单项。✓ 已复制
contextplus + memory-service

使用 mcp-memory-service 作为共享存储在项目间保持长期决策

每当 Context+ 捕获新的架构决策时,将其镜像到 mcp-memory-service。✓ 已复制

工具

此 MCP 暴露的能力

工具输入参数何时调用成本
get_context_tree root: str, depth?: int 新代码库会话中的第一个调用 free
get_file_skeleton path: str 便宜的文件概览 free
semantic_code_search query: str, k?: int 按意义查找代码 1 embedding + 1 vector search
semantic_identifier_search query: str 定位函数/类 1 vector search
get_blast_radius symbol: str, file?: str 删除/重命名前 free
run_static_analysis path?: str 未使用的代码 + 类型错误 free
propose_commit files: Edit[] 使用验证应用编辑 free
list_restore_points 查看可用的回滚 free
undo_change restore_point_id: str 还原影子编辑 free
upsert_memory_node content: str, tags?: str[] 保存持久事实 1 embedding
search_memory_graph query: str, traversal?: int 回忆过去的决策 1 vector search

成本与限制

运行它的成本

API 配额
取决于嵌入提供商:Ollama 免费,OpenAI ~$0.02/1M tokens
每次调用 Token 数
骨架读取:100-500 tokens。完整搜索:500-2000
费用
免费(开源)+ 如果使用云提供商的嵌入成本
提示
使用 Ollama 配合 nomic-embed-text 实现零边际成本。

安全

权限、密钥、影响范围

最小权限: 文件系统对索引代码库的读/写
凭据存储: 通过环境变量嵌入提供商密钥
数据出站: 嵌入发送到你选择的提供商(或与 Ollama 保持本地)
切勿授予: 不要索引包含 .env 等秘密的目录

故障排查

常见错误与修复

索引非常慢

将大目录(node_modules、dist)添加到 .contextplusignore;在本地使用 Ollama。

语义搜索返回无关结果

你的查询太抽象——包括具体符号或文件名提示。

undo_change 失败,提示'point not found'

影子点默认按会话。通过配置标志在会话间持久化。

Tree-sitter 语法缺失某种语言

检查支持的扩展名列表;不受支持类型的文件被跳过但作为纯文本索引。

替代方案

contextplus 对比其他方案

替代方案何时用它替代权衡
mcp-language-server你想要 LSP 语义(重命名、引用)而不是基于嵌入的搜索没有内存图,没有影子撤销
codebase-memory-mcp你更喜欢知识图谱视图而不是按文件骨架不同的索引形状;66 种语言

更多

资源

📖 阅读 GitHub 上的官方 README

🐙 查看未解决的 issue

🔍 浏览全部 400+ MCP 服务器和 Skills