smart-coding-mcp
让 AI 编程助手通过语义理解而非关键词匹配来定位代码的 MCP 服务器
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
让 AI 编程助手通过语义理解而非关键词匹配来定位代码的 MCP 服务器
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有遇到过这种情况:面对一个陌生的代码仓库,问 AI 助手「认证逻辑在哪里」,但代码里用的是 login 和 session,传统关键词搜索完全匹配不上?传统正则搜索的局限性就在于此——它只能找「字面上完全一致的词」,无法理解代码背后的业务语义。
Smart Coding MCP 正是为了解决这个问题而生的。它是一个基于 Model Context Protocol(MCP)的语义代码搜索服务器,核心能力是:让 AI 编程助手通过理解语义而非「死记硬背关键词」来定位代码,即使你用了完全不同的术语描述,它也能找到语义上相关的代码片段。

图1:Smart Coding MCP 在 Cursor 中的语义搜索示例,用自然语言「缓存持久化在哪里」即可找到相关代码片段,而非必须输入精确的变量名或函数名。
以 Claude Code、Cursor Agent、Copilot Workspace 为代表的 AI 编程助手,在代码生成方面已经非常强大。但它们有一个共同的弱点:当项目规模变大、代码结构变复杂时,助手无法高效地「定位」最相关的那段代码。
一个典型场景是:你想了解某个功能「如何实现」,或者「在哪处理的」,但你的描述和代码实际使用的术语有差异。传统 grep/fgrep 只能匹配精确字符串——你说「缓存」,代码里写的是 cache 还是 buf 还是 store?
这就是语义搜索的价值:搜索的不是词,而是「意思」。Smart Coding MCP 正是把这种能力带给了所有支持 MCP 协议的 AI 编程工具。
项目使用 Matryoshka Representation Learning(MRL) 技术,这是一种嵌套式表征学习方法,核心思想是用一个高维向量(如768维)同时「压缩」出多个低维版本(64/128/256/512)。
这样做有什么好处?可以在精度和速度之间自由切换。128维嵌入生成速度比768维快数倍,而质量损失在大多数搜索场景下几乎感知不到。项目默认使用128维,是经过测试的「性价比最优」配置。当然也可以通过环境变量 SMART_CODING_EMBEDDING_DIMENSION 调整到更高维度以获得更精确的结果。
底层模型使用的是 nomic-embed-text-v1.5,这是一个专为代码和文本设计的开源嵌入模型,由 Matryoshka Diffusion 原班团队维护。模型运行在本地,通过 @huggingface/transformers 的 ONNX Runtime 实现 GPU/CPU 推理。
代码嵌入向量存储在 SQLite 数据库中(.smart-coding-cache/embeddings.db),采用 WAL 模式以支持并发读写。相比早期版本的 JSON 存储,SQLite 在大规模代码库(数千个文件)下的查询性能提升达 5-10 倍。
首次运行时,索引器会扫描整个工作区,将代码按逻辑单元分块(默认25行一块,支持智能分块/AST分块两种模式),然后逐批生成向量并写入数据库。后续运行时,它会对比文件哈希值,只重新索引变化过的文件,无需全量重建。
此外,索引过程采用渐进式索引策略(Progressive Indexing):搜索功能在索引过程中同步可用,用户无需等待漫长的初始化过程。
搜索时,Smart Coding MCP 使用 语义相似度 + 精确匹配boost 的混合策略。语义权重(SMART_CODING_SEMANTIC_WEIGHT,默认0.7)和精确匹配倍数(SMART_CODING_EXACT_MATCH_BOOST,默认1.5)均可通过环境变量调节。
这意味着:即使你输入的词和代码中的词完全不同,语义向量也能匹配到相关内容;而如果恰好有精确匹配,结果会被显著提升权重。
从 index.js 可以看到,项目基于 @modelcontextprotocol/sdk 构建,遵循 MCP 的 JSON-RPC over stdio 协议规范。
主程序是一个懒加载的 MCP 服务器:
工具注册采用插件化 Feature Registry 模式:每个工具(semantic_search、index_codebase、clear_cache、check_last_version、set_workspace、get_status)都是独立模块,通过统一的 handleToolCall 接口注册到主服务器。添加新工具只需新增一个 feature 模块,无需修改核心逻辑。
IDE (Claude/Cursor/Copilot)
↕ MCP JSON-RPC (stdio)
Smart Coding MCP Server
├─ HybridSearch → 语义搜索工具
├─ CodebaseIndexer → 索引构建工具
├─ ClearCache → 缓存清理工具
├─ CheckLastVersion → 包版本查询工具
├─ SetWorkspace → 工作区切换工具
└─ GetStatus → 状态查询工具
↕
MRL Embedder (nomic-embed-text-v1.5)
↕
SQLite Cache (向量数据库)
| 工具 | 用途 | 典型场景 |
|---|---|---|
a_semantic_search | 语义代码搜索 | 「认证逻辑在哪」「错误处理模式」 |
b_index_codebase | 手动触发全量索引 | 大规模重构后重建索引 |
c_clear_cache | 清空向量缓存 | 切换嵌入模型或缓存损坏 |
d_check_last_version | 查询npm/PyPI等20+生态最新版本 | 添加依赖前检查版本 |
e_set_workspace | 运行时切换工作区 | 同时处理多个项目 |
f_get_status | 服务器健康检查 | 排查连接/索引问题 |
其中 d_check_last_version 是一个意外的实用工具,它能实时查询20多个包管理生态(npm、PyPI、Cargo、Maven、Go、RubyGems、NuGet、Packagist、Hex、pub.dev、Homebrew、Conda 等)的最新版本。相比 AI 训练数据的静态知识,这个实时版本查询能避免引用过时依赖。
安装只需一行命令:
npm install -g smart-coding-mcp
配置时,在各主流 IDE 的 MCP 配置文件中添加服务器即可。项目提供了针对 VS Code、Cursor、Windsurf、Claude Desktop、OpenCode、Raycast、Antigravity 等7款工具的详细配置指南。
不过有一点需要注意:部分 IDE(如 Claude Desktop、Windsurf)不支持动态变量 ${workspaceFolder},需要手动填入绝对路径。如果 IDE 传入的 workspace 参数包含未展开的 ${ 字符,服务器会直接报错退出(而非静默失败),这是一个设计合理的安全机制。
系统资源占用极低:默认 CPU 限流50%,最大内存约2GB,不需要 GPU(默认使用 CPU 推理),磁盘占用仅200MB左右。
${workspaceFolder} 动态变量,需要手动配置绝对路径,不如 Cursor/VS Code 开箱即用。Smart Coding MCP 的价值不仅在于搜索本身,而在于它代表了一种趋势:让 AI 编程工具从「被动响应」转向「主动理解」。
传统 IDE 的搜索是「记住位置才能找到」,而语义搜索是「描述功能就能找到」。这种能力在大型代码库、遗留系统、跨团队协作等场景下尤为关键。
作者 Omar Haris 在 LinkedIn 公开表示,项目受到 Cursor 语义搜索的启发,旨在将这种能力普惠到所有 MCP 兼容的 AI 编程工具中。随着 MCP 协议被 Anthropic、OpenAI、GitHub 等越来越多的厂商采用,这类「代码上下文增强」工具的重要性会持续上升。