Token导航 LogoToken导航TokenDH.com
Project Rag logo
开发工具stdio官方级别未说明来源级核验

Project Rag

MCP Server

一个基于Rust的MCP服务器,提供强大的RAG能力,用于理解和搜索大规模代码库,支持40+文件类型和12种编程语言的语义分析。

工具数

9

提示词数

0

GitHub Stars

13

资源数

0
代码搜索代码导航RustClaudeClaude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

Brainwires

提供方

Brainwires

最后核验

2026/5/17 20:20

运行时

Docker

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

docker run -p 6333:6333 -p 6334:6334 \

详细介绍

RAG项目-用于代码理解的MCP服务器

![Tests](https://github.com/Brainwires/project-rag) ![Coverage](https://github.com/Brainwires/project-rag) ![Rust](https://www.rust-lang.org/) ![Crates.io](https://crates.io/crates/project-rag) ![License: MIT](https://opensource.org/licenses/MIT)

一种基于Rust的模型上下文协议(MCP)服务器,为AI助手提供强大的RAG(检索增强生成)功能,用于理解海量代码库。

概述

此MCP服务器使AI助手能够通过以下方式高效搜索和理解大型项目:

  • 创建代码文件的语义嵌入
  • 将它们存储在本地矢量数据库中
  • 提供快速语义搜索功能
  • 支持增量更新以提高效率

特性

  • 本地优先:所有处理都使用fastembed-rs在本地进行(不需要API密钥)
  • 混合搜索:使用往复式秩融合(RRF)将向量相似性与BM25关键字匹配相结合,以获得最佳结果
  • 基于AST的分块:使用Tree sitter为12种语言提取语义单元(函数、类、方法)
  • 全面的文件支持:索引40多种文件类型,包括代码、文档(带PDF)→Markdown转换)和配置文件
  • Git历史搜索:使用智能按需索引搜索提交历史记录(默认值:10次提交,仅根据需要进行更深入的索引)
  • 多项目支持:通过项目筛选同时索引和查询多个代码库
  • 智能索引:自动为新代码库执行完整索引,或为以前索引的代码库执行增量更新
  • 跨进程锁定:基于文件系统的锁可防止多个进程(例如多个Claude Code会话)同时对同一代码库进行索引
  • 并发访问保护:安全锁管理可防止多个代理尝试同时索引时索引损坏
  • 稳定的嵌入式数据库:LanceDB矢量数据库(默认,无外部依赖),具有可选的Qdrant支持
  • 语言检测:自动检测40多种文件类型(编程语言、文档格式和配置文件)
  • 高级过滤:按文件类型、语言或路径模式搜索
  • 尊敬的吉吉尼奥尔:在索引过程中自动排除忽略的文件
  • 代码导航:查找定义、引用和调用图(轻量级LSP类功能)
  • 自适应搜索阈值:未找到结果时自动降低相似性阈值(0.7→0.6→0.5→0.4→0.3)
  • Slash命令:通过MCP Prompts提供9个方便的斜线命令

MCP Slash命令

服务器提供了9个斜线命令,用于在Claude Code中快速访问:

  1. /project:index -索引代码库目录(自动执行完整或增量)
  2. /project:query -搜索索引代码库
  3. /project:stats -获取索引统计信息
  4. /project:clear -清除所有索引数据
  5. /project:search -使用过滤器进行高级搜索
  6. /project:git-search -使用按需索引搜索git提交历史记录
  7. /project:definition -查找符号的定义位置(类似LSP)
  8. /project:references -查找对某个符号的所有引用
  9. /project:callgraph -获取函数的调用图(调用者/被调用者)

slash-commands.md 详细用法。

支持的文件类型

Project RAG自动索引和搜索 40+文件类型 分为三类:

编程语言(24种语言)

支持这些语言的基于AST的语义分块:

  • (.rs)
  • python (.py)
  • JavaScript (.js, .mjs, .cjs), TypeScript (.ts), JSX (.jsx), 多伦多证券交易所 (.tsx)
  • (.go)
  • Java (.java)
  • C (.c), C (.cpp, .cc, .cxx), C/C++头文件 (.h, .hpp)
  • C (.cs)
  • 迅速 (.swift)
  • Kotlin (.kt, .kts)
  • Scala (.scala)
  • 红宝石 (.rb)
  • PHP (.php)
  • 外壳 (.sh, .bash)
  • 结构化查询语言 (.sql)
  • 超文本标记语言 (.html, .htm)
  • 层叠样式表 (.css), SCSS (.scss, .sass)

文档格式(8种格式)

对丰富内容进行特殊处理:

  • 标记语言 (.md, .markdown)
  • PDF (.pdf) - 自动转换为Markdown 有桌子保护
  • 重新结构化文本 (.rst)
  • AsciiDoc (.adoc, .asciidoc)
  • 组织模式 (.org)
  • 纯文本 (.txt)
  • 日志文件 (.log)

PDF转换功能:

  • 使用提取文本内容 pdf-extract 图书馆
  • 自动转换为Markdown格式
  • 蜜饯 表格结构 (检测制表符/空格分隔的列)
  • 检测和格式化 标题 (所有大写线条和剖面标记)
  • 智能处理多列布局
  • 与任何其他文本文件一样的块(默认情况下每个块50行)

配置文件(8种格式)

为了全面了解项目:

  • JSON (.json)
  • YAML (.yaml, .yml)
  • 汤姆 (.toml)
  • 可扩展标记语言 (.xml)
  • INI (.ini)
  • 配置文件 (.conf, .config, .cfg)
  • 属性 (.properties)
  • 环境 (.env)

示例用例

# Index documentation PDFs in your project
query_codebase("API authentication flow")  # Finds content in .pdf, .md, .rst files

# Search configuration files
query_codebase("database connection string")  # Finds .yaml, .toml, .env, .conf files

# Find code implementations
search_by_filters(query="JWT validation", file_extensions=["rs", "go"])

MCP工具

服务器提供了9个可以直接使用的工具:

  1. 指数_贬值 -智能地索引代码库目录

- 自动为新代码库执行完整索引 - 自动对以前索引的代码库执行增量更新 - 尊重、尊重和排除模式 - 返回模式信息(完整或增量)

  1. 查询_降级 -跨索引代码的混合语义+关键字搜索

- 将向量相似性与BM25关键字匹配相结合(默认启用) - 返回包含向量和关键字分数的相关代码块 - 可配置的结果限制和分数阈值 - 多项目设置的可选项目筛选

  1. get_统计 -获取索引代码库的统计信息

- 文件计数、块计数、嵌入计数 - 语言细分

  1. clear_index -清除所有索引数据

- 删除整个矢量数据库集合 - 为新索引做准备

  1. search_by_filters -带过滤器的高级混合搜索

- 始终使用混合搜索以获得最佳结果 - 按文件扩展名过滤(例如,\[“rs”,“toml”\]) - 按编程语言筛选 - 按路径模式过滤 - 可选项目筛选

  1. search_git_历史 -使用语义搜索搜索git提交历史

- 按需自动索引提交(默认:10次提交,可配置) - 搜索提交消息、差异、作者信息和更改的文件 - 智能缓存:只根据需要索引新的提交 - 按作者姓名/电子邮件和文件路径过滤正则表达式 - 日期范围过滤(ISO 8601或Unix时间戳) - 分行选择支持

  1. find_definition -查找符号的定义位置(类似LSP)

- 指定文件路径、行号和列 - 返回包含符号元数据的定义位置 - 使用混合方法:高精度堆栈图(Python、TypeScript、Java、Ruby)或基于AST的RepoMap回退 - 报告结果的精度水平

  1. 查找引用 -查找对某个符号的所有引用

- 指定文件路径、行号和列 - 返回使用该符号的所有位置 - 对引用类型进行分类:调用、读取、写入、导入、类型引用、继承、实例化 - 可选:在结果中包含定义站点

  1. get_call_graph -获取函数的调用图

- 为函数指定文件路径、行号和列 - 返回调用者(调用此函数的内容)和被调用者(此函数调用的内容) - 可配置的遍历深度(默认值:1级) - 有助于理解代码流和影响分析

先决条件

  • :1.88+支持Rust 2024版本
  • protobuf编译器:建筑所需(通过安装 sudo apt-get install protobuf-compiler 在Ubuntu/Debian上)

矢量数据库选项

LanceDB(默认-嵌入式,稳定)

无需额外设置!LanceDB是一个直接在应用程序中运行的嵌入式矢量数据库。它将数据存储在 ./.lancedb 默认情况下为目录。

为什么LanceDB是默认设置:

  • 嵌入式 -无需外部依赖或服务器
  • 稳定 -ACID交易证明了生产
  • 丰富 -完整的SQL类过滤功能
  • 内置混合搜索 -具有互易秩融合的Tantivy BM25+LanceDB向量
  • 柱状存储器 -使用Apache Arrow高效处理大型数据集
  • 零拷贝 -用于快速查询的内存映射文件

Qdrant(可选-基于服务器)

要使用Qdrant而不是LanceDB,请使用 qdrant-backend 特点:

cargo build --release --no-default-features --features qdrant-backend

然后启动Qdrant实例:

使用Docker(推荐):

docker run -p 6333:6333 -p 6334:6334 \
    -v $(pwd)/qdrant_data:/qdrant/storage \
    qdrant/qdrant

使用Docker Compose:

version: '3.8'
services:
  qdrant:
    image: qdrant/qdrant
    ports:
      - "6333:6333"
      - "6334:6334"
    volumes:
      - ./qdrant_data:/qdrant/storage

或者单独下载: https://qdrant.tech/documentation/guides/installation/

安装

# Navigate to the project
cd project-rag

# Install protobuf compiler (Ubuntu/Debian)
sudo apt-get install protobuf-compiler

# Build the release binary (with default LanceDB backend - stable and embedded!)
cargo build --release

# Or build with Qdrant backend (requires external server)
cargo build --release --no-default-features --features qdrant-backend

# The binary will be at target/release/project-rag

用法

作为MCP服务器运行

服务器通过stdio按照MCP协议进行通信:

./target/release/project-rag

在Claude代码中配置

使用CLI将MCP服务器添加到Claude Code:

# Navigate to the project directory first
cd /path/to/project-rag

# Add the MCP server to Claude Code
claude mcp add project --command "$(pwd)/target/release/project-rag"

# Or with logging enabled
claude mcp add project --command "$(pwd)/target/release/project-rag" --env RUST_LOG=info

添加后,重新启动Claude Code以加载服务器。斜线命令(/project:index, /project:query等等)将立即可用。

在Claude Desktop中配置

添加到您的Claude Desktop配置中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Linux: ~/.config/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "project-rag": {
      "command": "/absolute/path/to/project-rag/target/release/project-rag",
      "env": {
        "RUST_LOG": "info"
      }
    }
  }
}

备注:Claude Code和Claude Desktop是不同的产品,具有不同的配置方法。

工具使用示例

索引代码库:

{
  "path": "/path/to/your/project",
  "include_patterns": ["**/*.rs", "**/*.toml"],
  "exclude_patterns": ["**/target/**", "**/node_modules/**"],
  "max_file_size": 1048576
}

查询代码库:

{
  "query": "How does authentication work?",
  "limit": 10,
  "min_score": 0.7
}

高级筛选搜索:

{
  "query": "database connection pool",
  "limit": 5,
  "min_score": 0.75,
  "file_extensions": ["rs"],
  "languages": ["Rust"],
  "path_patterns": ["src/db"]
}

索引(或重新索引)代码库:

{
  "path": "/path/to/your/project",
  "include_patterns": [],
  "exclude_patterns": []
}

*注意:这会自动为新代码库执行完整索引,或为以前索引的代码库执行增量更新。*

查找符号的定义:

{
  "file_path": "/path/to/your/project/src/main.rs",
  "line": 42,
  "column": 10
}

查找对符号的所有引用:

{
  "file_path": "/path/to/your/project/src/lib.rs",
  "line": 15,
  "column": 8,
  "include_definition": false
}

获取函数的调用图:

{
  "file_path": "/path/to/your/project/src/api.rs",
  "line": 100,
  "column": 4,
  "depth": 2
}

建筑

project-rag/
├── src/
│   ├── bm25_search.rs      # Tantivy BM25 keyword search with RRF fusion
│   ├── client/             # High-level client API
│   │   ├── mod.rs          # RagClient - unified interface for all operations
│   │   └── indexing/       # Indexing pipeline with progress reporting
│   ├── embedding/          # FastEmbed integration for local embeddings
│   │   ├── mod.rs          # EmbeddingProvider trait
│   │   └── fastembed_manager.rs  # all-MiniLM-L6-v2 implementation
│   ├── vector_db/          # Vector database implementations
│   │   ├── mod.rs          # VectorDatabase trait
│   │   ├── lance_client.rs # LanceDB + Tantivy hybrid search (default)
│   │   └── qdrant_client.rs  # Qdrant implementation (optional)
│   ├── indexer/            # File walking and code chunking
│   │   ├── mod.rs          # Module exports
│   │   ├── file_walker.rs  # Directory traversal with .gitignore + 40+ file types
│   │   ├── chunker.rs      # Chunking strategies (AST-based, fixed-lines, sliding window)
│   │   ├── ast_parser.rs   # Tree-sitter AST parsing for 12 languages
│   │   └── pdf_extractor.rs # PDF to Markdown converter with table support
│   ├── relations/          # Code relationship analysis (LSP-like features)
│   │   ├── mod.rs          # RelationsProvider trait, HybridRelationsProvider
│   │   ├── types.rs        # SymbolId, Definition, Reference, CallEdge types
│   │   ├── repomap/        # AST-based symbol extraction (fallback provider)
│   │   │   ├── mod.rs      # RepoMapProvider
│   │   │   ├── symbol_extractor.rs  # Extract definitions from AST
│   │   │   └── reference_finder.rs  # Find references via identifier matching
│   │   ├── storage/        # Relations storage layer
│   │   │   ├── mod.rs      # RelationsStore trait
│   │   │   └── lance_store.rs  # LanceDB storage (placeholder)
│   │   └── stack_graphs/   # Optional: High-precision name resolution
│   │       └── mod.rs      # StackGraphsProvider (feature-gated)
│   ├── mcp_server.rs       # MCP server with 9 tools
│   ├── types/              # Request/Response types with JSON schema
│   │   └── mod.rs          # All MCP request/response types
│   ├── main.rs             # Binary entry point with stdio transport
│   └── lib.rs              # Library root
├── Cargo.toml              # Rust 2024 edition with dependencies
├── README.md               # This file
├── CONTRIBUTING.md         # Contributor guidelines
├── TESTING.md              # Testing guide
└── CLAUDE.md               # AI assistant instructions

配置

环境变量

  • RUST_LOG -设置日志记录级别(选项: error, warn, info, debug, trace)

- 例子: RUST_LOG=debug cargo run

Qdrant配置

  • 目前硬编码为 http://localhost:6334
  • 未来:添加配置文件支持

嵌入模型

  • 违约: all-MiniLM-L6-v2 (384个维度)
  • 首次运行下载模型(~50MB)到缓存

分块策略

  • 默认:基于混合AST,可回退到固定线路
  • AST解析:提取Rust、Python、JavaScript、TypeScript、Go、Java、Swift、C、C++、C#、Ruby、PHP的语义单元(函数、类、方法)
  • 后备方案:对于不支持的语言,每个块50行
  • 替代:可配置重叠的滑动窗口

技术细节

嵌入

  • 模型:全MiniLM-L6-v2(句子转换)
  • 维度: 384
  • 图书馆:带ONNX运行时的fastembed rs
  • 演出:约500次嵌入/秒

向量数据库

  • 发动机:Qdrant
  • 距离度量:余弦相似性
  • 索引:HNSW用于快速近似最近邻搜索
  • 有效载荷:存储文件路径、项目、行号、语言、哈希、时间戳、内容

混合搜索

  • 向量相似性:通过嵌入进行语义理解(LanceDB或Qdrant)
  • 关键词匹配:通过Tantivy倒排索引进行全文BM25搜索
  • 融合算法:k=60常数的互易秩融合(RRF)
  • BM25参数:使用Tantivy优化的BM25实现
  • 排名:RRF使用1/(k+排名)公式组合两个排名
  • 演出:并行查询两个索引以获得快速结果

自适应阈值逻辑

两者 query_codebasesearch_by_filters 工具实现了智能自适应阈值降低:

它是如何工作的:

  1. 初始搜索使用所请求的 min_score 阈值(默认值:0.7)
  2. 如果未找到结果且阈值>0.3,则自动以较低的阈值重试
  3. 按顺序尝试的回退阈值:0.6→ 0.5 → 0.4 → 0.3
  4. 响应包括 threshold_usedthreshold_lowered 透明度字段

优点:

  • 防止语义相似度低于预期时出现空结果
  • 尽可能选择更高的阈值来保持搜索质量
  • 透明:您始终知道实际使用的阈值

示例响应:

{
  "results": [...],
  "duration_ms": 45,
  "threshold_used": 0.4,
  "threshold_lowered": true
}

轻量级LSP功能

Project RAG提供了类似于语言服务器协议(LSP)实现的代码导航功能,但针对语义搜索用例进行了优化:

查找定义 (find_definition):

  • 定位定义符号(函数、类、变量)的位置
  • 使用混合方法:Python、TypeScript、Java、Ruby的高精度堆栈图
  • 对所有其他语言回归到基于AST的RepoMap分析
  • 报告结果中的精度级别(高、中、低)

查找引用 (find_references):

  • 查找整个代码库中使用符号的所有位置
  • 对引用类型进行分类:调用、读取、写入、导入、类型引用、继承、实例化
  • 有助于理解代码是如何连接的
  • 包含/排除定义站点的选项

获取调用图 (get_call_graph):

  • 分析函数调用关系
  • 显示调用者(调用此函数的内容)和被调用者(此函数调用的内容)
  • 多级分析的可配置遍历深度
  • 非常适合影响分析和理解代码流

架构:

RelationsProvider (trait)
├── StackGraphsProvider (high precision: ~95%)
│   └── Supports: Python, TypeScript, Java, Ruby
└── RepoMapProvider (fallback: ~70% precision)
    └── Supports: All tree-sitter languages (12+)

何时使用:

  • 查找定义“这个功能在哪里定义?”
  • 查找引用:“从哪里调用此函数?”
  • 获取调用图:“此代码依赖于哪些功能?”

跨进程锁定

RAG项目使用 双层锁闭系统 为了防止多个进程同时对同一代码库进行索引:

第1层:文件系统锁(跨进程)

  • 用途 flock() 操作系统级独占锁的系统调用
  • 锁定存储在中的文件 ~/.local/share/project-rag/locks/ (或 brainwires/locks/)
  • 进程退出时自动释放(即使在崩溃时)
  • 防止多个克劳德代码会话用重复索引攻击CPU

第2层:内存锁(进程中)

  • 广播通道允许等待任务接收结果
  • 防止同一流程中的重复工作

工作原理:

Process A (Claude Session 1)          Process B (Claude Session 2)
─────────────────────────────          ─────────────────────────────
index_codebase("/project")             index_codebase("/project")
        │                                       │
        ▼                                       ▼
Acquire filesystem lock                Try filesystem lock
        │                                       │
        ▼                                       ▼
     ACQUIRED                              BLOCKED (waits)
        │                                       │
        ▼                                       │
Do full indexing...                             │
        │                                       │
        ▼                                       │
Release lock ──────────────────────────────────►│
                                                ▼
                                         Lock acquired
                                                │
                                                ▼
                                         Return (index is current)

优点:

  • 在多个Claude Code会话中没有重复的CPU工作
  • 并发写入不会导致数据库损坏
  • 进程崩溃时自动清理(操作系统发布羊群)
  • 索引完成后,等待过程立即得到响应

BM25索引锁安全

BM25(Tantivy)索引使用额外的基于文件的锁来防止并发写入:

死锁检测:

  • 检查锁文件是否过期(超过5分钟)
  • 使用文件修改时间戳来检测崩溃的进程
  • 新鲜锁(\>
  1. 异步特性警告

- 9个无害的警告 async fn 公共特征 - 外观问题,不影响功能

局限性

当前限制

  • Qdrant后端:使用Qdrant后端功能时需要外部Qdrant服务器

- 默认LanceDB后端完全嵌入,没有外部依赖关系

  • 型号下载:首次运行下载~50MB型号

- 未来:在二进制文件中包含模型或提供离线安装程序

  • 路径筛选:当前查询后过滤(未优化)

- 未来:为路径模式添加Qdrant有效载荷索引

  • 无配置文件:所有设置都硬编码

- 未来:添加TOML/YAML配置支持

规模限制

  • 大型代码库:包含100000多个文件的项目可能需要花费大量时间进行索引

- 缓解措施:使用增量更新

  • 记忆:非常大的索引(1M以上的块)可能需要大量的RAM

- 典型项目(5k文件)总共使用\5分钟)。你应该很少需要人工干预。

Qdrant连接失败

# Check if Qdrant is running
curl http://localhost:6334/health

# View Qdrant logs
docker logs 

模型下载失败

# Pre-download model
python -c "from fastembed import TextEmbedding; TextEmbedding()"

# Or set HuggingFace mirror
export HF_ENDPOINT=https://hf-mirror.com

内存不足

# Reduce batch size (edit source)
# Or index in smaller chunks
# Or use smaller embedding model

索引速度慢

# Check disk I/O
# Reduce max_file_size
# Use exclude_patterns to skip unnecessary files

未来的增强功能

高优先级

  • \[\]添加全面的集成测试
  • \[\]配置文件支持(TOML)
  • \[\]将IDF统计数据缓存到磁盘,以加快启动速度

中优先级

  • \[\]嵌入式矢量数据库选项(无外部依赖)
  • \[\]支持更多嵌入模型
  • \[\]性能基准和分析
  • \[\]AST支持更多语言(Kotlin、Perl、Scala等)

低优先级

  • \[\]用于测试/调试的Web UI
  • \[\]指标和监控端点
  • \[\]多语言文档
  • \[\]替代传输机制(HTTP、WebSocket)

许可证

MIT许可证-有关详细信息,请参阅许可证文件

贡献

欢迎投稿!请确保:

  1. 代码质量:

- 源文件保持在600行以下(强制) - 代码格式为 cargo fmt - 夹棉绒通行证(cargo clippy)

  1. 测试:

- 添加新功能的测试 - 现有测试通过(cargo test) - 更新文档

  1. 提交:

- 清晰、描述性的提交消息 - 每次提交一个逻辑更改 - 参考问题(如适用)

支持

  • 问题: https://github.com/Brainwires/project-rag/issues
  • 文档:参见 docs/ 用于部署、故障排除和斜线命令
  • 建筑:参见 docs/adr/ 用于架构决策记录

致谢

  • rmcp:官方Rust模型上下文协议SDK
  • Qdrant:高性能矢量数据库
  • 快速嵌入:快速生成本地嵌入
  • 克劳德:用于MCP协议和测试

______________________________________________________________________

建于❤️ 使用Rust 2024版本

目录标签

目录标签

代码搜索代码导航RustClaude本地部署语义分析RAGAI辅助开发

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

session

运行时(runtime,运行环境)

Docker

工具数量(toolCount,工具数)

9

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiosession部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP