rag-code-mcp
doITmagic/rag-code-mcp加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你接手了一个 50 万行的遗留代码库,想要快速定位「所有与支付相关的业务逻辑」,传统 grep 只能匹配关键词,语义相近但命名混乱的代码完全无法触达——这就是代码导航的根本困境。
RagCode MCP 正是来解决这个问题的:它是一个完全本地运行的 RAG(检索增强生成)引擎,以 MCP(Model Context Protocol)Server 的形式,让 Cursor、Windsurf、Copilot、Claude 等 AI IDE 获得语义级代码搜索能力。你问「支付流程在哪」,它不仅能找到 payment.go,还能找到所有包含退款逻辑、回调处理、风控判断的分散文件——跨语言、跨目录、跨仓库。
代码导航工具并不新鲜。ctags 追朔到 1992 年,VS Code 的 Go to Definition 更是标配。但这些工具都有一个根本局限:基于符号和语法,而非语义。当你搜索「认证」时,符号导航找不到「login」「verify」「authenticate」「check_token」这些语义相关但字面无关的代码。
大型语言模型改变了这一点。通过 Embedding 模型将代码片段向量化,再用向量相似度搜索,可以找到语义相近的代码。然而,现有的 AI 代码助手(如 GitHub Copilot Chat)需要将代码发送给云端 API——对于金融、医疗、政府等数据敏感行业,这是一道不可逾越的红线。
RagCode MCP 的核心价值主张正是:把 Embedding + RAG 的能力,完全搬到本地。不依赖任何云服务,不泄露一行代码到外部网络。
RagCode MCP 的技术栈选型非常「实用主义」,没有追新炫技的痕迹:
从 go.mod 可以看出,项目完全用 Go 1.24.4 编写,核心依赖包括:
┌─────────────────────────────────────────────────────┐
│ AI IDE (Client) │
│ Cursor / Windsurf / Copilot / Claude Desktop │
└──────────────────┬──────────────────────────────────┘
│ MCP Protocol
┌──────────────────▼──────────────────────────────────┐
│ RagCode MCP Server (Go) │
│ ┌──────────────────────────────────────────────┐ │
│ │ tools/ MCP 工具层(语义搜索、索引) │ │
│ ├──────────────────────────────────────────────┤ │
│ │ ragcode/ RAG 核心(Query路由、召回) │ │
│ ├──────────────────────────────────────────────┤ │
│ │ storage/ Qdrant 交互层 │ │
│ ├──────────────────────────────────────────────┤ │
│ │ llm/ Ollama 调用封装 │ │
│ ├──────────────────────────────────────────────┤ │
│ │ workspace/ 多工作区管理 + 语言检测 │ │
│ ├──────────────────────────────────────────────┤ │
│ │ codetypes/ 多语言 AST 解析 (Go/PHP/JS/TS)│ │
│ └──────────────────────────────────────────────┘ │
└──────────┬──────────────────────┬─────────────────┘
│ │
┌──────▼──────┐ ┌───────▼───────┐
│ Ollama │ │ Qdrant │
│ (本地 LLM) │ │ (向量数据库) │
└─────────────┘ └───────────────┘
项目支持 Go、PHP/Laravel/WordPress、JavaScript/TypeScript/React、Python 四种语言。不同于简单的文本分块,RagCode 会对代码做 AST(抽象语法树)解析,提取函数签名、类定义、import 依赖等结构化信息作为元数据。这些元数据在向量检索时可以作为过滤条件或rerank依据。
例如,搜索「错误处理逻辑」时,系统不仅能找到包含 error 关键词的代码,还能识别:try-catch 块的具体范围、panic/defer 的作用范围、以及自定义错误类型 MyError 的定义位置。
配置文件 config.yaml 中定义了 .git、go.mod、package.json、Cargo.toml、pyproject.toml 等工作区标记。RagCode 自动扫描当前目录结构,识别工作区边界,每个工作区创建独立的 Qdrant collection,实现多仓库并行索引,互不干扰。
RagCode 提供跨平台预编译二进制(Linux/macOS/Windows),安装流程极为简洁:
# Linux 一键安装(自动启动 Ollama + Qdrant Docker 容器)
curl -fsSL https://github.com/doITmagic/rag-code-mcp/releases/latest/download/rag-code-mcp_linux_amd64.tar.gz | tar xz
./ragcode-installer -ollama=docker -qdrant=docker
安装脚本会自动拉取并启动 Ollama(默认模型 phi3:medium)和 Qdrant Docker 容器,全程无需手动配置。完成后只需在 AI IDE 的 MCP 配置中注册 RagCode Server,编辑器重启后即生效。
配置示例(Cursor .cursorrules):
{
"mcpServers": {
"ragcode": {
"command": "rag-code-mcp",
"args": ["--config", "./config.yaml"]
}
}
}
没有项目是完美的,RagCode MCP 也有几个值得注意的局限:
1. 模型质量依赖本地 LLM。RagCode 本身是工程化的 RAG 管道,搜索质量高度依赖 Embedding 模型的质量。当前默认使用 mxbai-embed-large,这是一个较小 Embedding 向量模型(384 维),对于复杂的多语言代码库,语义召回能力可能不如 OpenAI text-embedding-3-large 或 Cohere。
2. 多语言支持尚不完整。Go、PHP、JS/TS 是 AST 深度解析,Python 目前仅基于文本分块处理,复杂 Python 项目(如使用 dataclass、typing.ParamSpec 等高级特性)的语义理解能力会打折扣。
3. 向量检索的固有问题:Embedding 擅长捕捉语义相似性,但无法理解精确的因果链和调用图。例如「A 函数调用了哪些函数」这种问题,向量搜索无能为力,需要结合传统的符号分析(如 go callgraph)。
4. 没有 Web UI。目前只有 CLI + MCP 协议接入,对于不熟悉 MCP 或不想折腾 IDE 配置的用户,上手门槛比带 Web 界面的工具(如 Continue Dev、Tabby)要高。
RagCode MCP 的出现,反映了一个明确的趋势:RAG 能力正在从云端向本地、从小众向开发者日常工具下沉。
传统 RAG 系统的部署复杂度(Embedding 服务 + 向量数据库 + LLM API)让大多数团队望而却步。RagCode 的 Installer 模式、用 Ollama 替代商业 LLM API、用预编译二进制替代源码编译——每一步都在降低「本地 RAG」的落地门槛。
对于安全敏感型团队(如金融、区块链、医疗),RagCode 提供了一种可能性:在不改变开发习惯的前提下,让 AI 代码助手真正保护代码隐私。这也许是它最核心的价值所在。