内容
# Everything MCP 服务器
一款高性能的模型上下文协议(MCP)服务器,利用 Everything 搜索引擎在 Windows 上提供文件搜索功能。
## 功能特点
- ⚡️ 采用 Everything 索引数据库实现闪速文件搜索
- 🔍 6 种专项搜索工具,针对 AI 编程助手优化
- 📊 可选的丰富元数据(文件大小、时间戳、属性)
- 🔒 跨权限级别工作(提升/非提升进程)
- 🚀 双模式运行:快速基本搜索(QUERY1)或详细元数据搜索(QUERY2)
- 🧵 基于队列的线程安全架构,带有专用消息窗口
- 📚 IntelliSense 支持的综合 XML 文档
## 先决条件
- Windows 操作系统
- [Everything 搜索引擎](https://www.voidtools.com/) 已安装并运行
- .NET 8.0 运行时(适用于预构建版本)或 SDK(适用于从源代码构建)
## 安装
### 选项 1:下载发布版本
1. 从 [GitHub Releases](https://github.com/rweijnen/everything-mcp/releases) 下载最新版本
2. 解压到一个目录(例如,`C:\Tools\everything-mcp\`)
3. 确保 Everything 搜索引擎已安装并运行
### 选项 2:从源代码构建
```bash
git clone https://github.com/rweijnen/everything-mcp.git
cd everything-mcp
dotnet build --configuration Release
```
## 配置
### Claude Desktop
添加到 `%APPDATA%\Claude\claude_desktop_config.json`:
```json
{
"mcpServers": {
"everything": {
"command": "C:\\Tools\\everything-mcp\\everything-mcp.exe"
}
}
}
```
### Claude Code
使用命令调色板(`Ctrl+Shift+P`):
- 运行:`mcp add everything "C:\Tools\everything-mcp\everything-mcp.exe"`
## 配置选项
MCP 服务器可以通过 `appsettings.json` 在可执行文件所在的目录中进行配置。默认情况下,为优化性能,日志记录是 **禁用** 的。
### 启用日志记录(可选)
要启用调试的文件日志记录,请创建 `appsettings.json` 文件:
```json
{
"EverythingMcp": {
"Logging": {
"Enabled": true,
"LogFilePath": "logs/everything-mcp.log",
"LogLevel": "Information",
"RollingInterval": "Day",
"RetainedFileCountLimit": 7
}
}
}
```
### 配置选项
- **Logging.Enabled**:启用文件日志记录(默认:`false`)
- **Logging.LogFilePath**:日志文件的路径(支持环境变量,如 `%TEMP%`)
- **Logging.LogLevel**:最低日志级别(`Verbose`、`Debug`、`Information`、`Warning`、`Error`、`Fatal`)
- **Logging.RollingInterval**:创建新日志文件的频率(`Day`、`Hour` 等)
- **Logging.RetainedFileCountLimit**:保留的旧日志文件数量
参见 `appsettings.example.json` 以获取完整的配置示例和注释。
## 可用工具
### 1. `search_files`
通用文件和文件夹搜索,智能范围
- `query`(必填):使用 Everything 语法的搜索查询(通配符、运算符等)
- `scope`:搜索范围(默认:"current")
- `"current"`:仅当前目录
- `"recursive"`:当前目录和子目录
- `"system"`:全系统搜索
- `"path:/custom/path"`:在特定路径中搜索
- `include_metadata`:包含文件大小和时间戳(默认:`false`)
- `max_results`:限制结果(默认:100)
### 2. `search_in_project`
在特定项目目录中搜索
- `project_path`(必填):项目的根目录
- `pattern`(必填):搜索模式(支持通配符)
- `include_metadata`:包含文件元数据(默认:`false`)
- `max_results`:最大结果数(默认:100)
### 3. `find_executable`
定位可执行文件(基于输入的智能检测)
- `name`(必填):可执行文件的名称
- `exact_match`:使用精确匹配(默认:自动检测)
- 自动检测:如果提供扩展名或没有通配符,则使用精确匹配
- `max_results`:最大结果数(默认:20)
### 4. `find_source_files`
按编程语言查找源代码文件
- `filename`(必填):要搜索的基本文件名
- `extensions`:逗号分隔的语言扩展名(例如,`cs,js,py`)
- 默认情况下,会自动包含按语言划分的默认扩展名
- `include_metadata`:包含文件元数据(默认:`false`)
- `max_results`:最大结果数(默认:100)
### 5. `search_recent_files`
查找最近修改的文件
- `hours`(必填):要回溯的小时数
- `pattern`:要筛选的文件模式(默认:`*` 表示所有文件)
- `include_metadata`:包含文件元数据(默认:`true`)
- `max_results`:最大结果数(默认:100)
### 6. `find_config_files`
在项目或全局范围内查找配置文件
- `project_path`:项目目录(全局搜索时为 `null`)
- `include_metadata`:包含文件元数据(默认:`false`)
- `max_results`:最大结果数(默认:50)
## Everything 搜索语法
所有工具都支持 `query` 参数中的 Everything 强大的搜索语法:
### 基本运算符
- **AND**:`file1 file2`(空格分隔)
- **OR**:`file1|file2`(管道分隔)
- **NOT**:`!unwanted`(感叹号)
- **分组**:`<group1> <group2>`
- **精确文件名**:`exact:"filename.ext"`(精确运算符)
### 通配符
- `*` - 零个或多个字符(`*.txt`、`test*`)
- `?` - 单个字符(`file?.txt`)
### 高级功能
- **正则表达式**:`regex:^[A-Z]+\.txt$`(正则表达式)
- **文件大小**:`size:>1GB`、`size:<100MB`
- **扩展名**:`ext:doc;pdf;txt`
- **空文件**:`empty:`
- **名称长度**:`len:>50`
- **开始/结束于**:`startwith:test`、`endwith:.log`
- **计数限制**:`count:10`
### 示例
```
*.cs !bin !obj # C# 文件,不包括构建文件夹
regex:test.*\.log$ # 以 "test" 开头的日志文件
size:>100MB ext:mp4;avi # 大型视频文件
exact:"notepad.exe" # 精确文件名匹配
file1|file2 !folder # file1 或 file2,不在 "folder" 中
```
## 架构
Everything MCP 服务器使用复杂的分层架构:
### 核心组件
- **Everything.Interop**:使用 Windows 消息与 Everything.exe 进行低级 IPC 通信
- **Everything.Client**:具有队列线程和自动协议选择的异步客户端
- **Everything.Mcp**:MCP JSON-RPC 服务器,带有 6 个专项工具
### 技术特点
- **双协议支持**:根据需求自动选择 QUERY1(快速、基本)或 QUERY2(富含元数据)
- **跨权限通信**:使用 UIPI 过滤器实现跨权限级别通信
- **线程安全**:专用消息窗口线程处理所有 IPC 通信
- **性能优化**:QUERY1 搜索在 ~20-30ms 内完成,QUERY2 在 ~50-100ms 内完成
## 开发
### 构建
```bash
dotnet build --configuration Release
```
### 测试
```bash
# 运行所有测试
dotnet test --configuration Release
# 仅运行单元测试
dotnet test tests/Everything.Interop.Tests/ --configuration Release
# 仅运行集成测试(需要 Everything.exe 运行)
dotnet test tests/Everything.Integration.Tests/ --configuration Release
```
### 测试 MCP 服务器
```bash
# 列出工具
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | dotnet run --project src/Everything.Mcp/
# 搜索示例
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_files","arguments":{"query":"*.txt !temp","scope":"system","max_results":5}}}' | dotnet run --project src/Everything.Mcp/
```
## 性能
### 典型性能特征
- **首次查询**:~100ms(包括窗口创建开销)
- **QUERY1(基本搜索)**:20-30ms
- **QUERY2(带元数据)**:50-100ms
- **测试数据**:~1M 索引文件
- **内存使用**:~10-20MB
### 优化提示
- 使用 `include_metadata: false` 以获得最快的搜索速度
- 使用适当的 `scope` 以限制搜索空间
- 设置合理的 `max_results` 限制
- 考虑为批量操作使用 `search_files` 和 QUERY1
## 故障排除
### 常见问题
- **"Everything 未运行"**:确保 Everything 搜索引擎已安装并运行
- **"无结果"**:验证 Everything 是否已完成索引(检查 Everything GUI)
- **性能缓慢**:检查 Everything 数据库是否正在忙于重建
- **权限问题**:Everything 和 MCP 服务器应具有相似的权限级别
### 调试
1. 在 `appsettings.json` 中启用日志记录
2. 检查日志文件以获取详细的错误信息
3. 在 Everything 的 GUI 中首先测试查询
4. 验证 Everything IPC 是否与测试控制台配合使用
## 项目状态
**版本 0.0.3** - 生产就绪
✅ **已完成功能**
- 完整的 Everything IPC 集成,支持 QUERY1/QUERY2
- 6 个生产就绪的 MCP 工具
- 全面的 XML 文档
- 完整的测试套件(单元测试 + 集成测试)
- 线程安全的基于队列的架构
- 跨权限通信支持
## 许可证
Mozilla 公共许可证 2.0
## 致谢
- [Everything 搜索引擎](https://www.voidtools.com/),作者:David Carpenter
- [模型上下文协议](https://modelcontextprotocol.io/),作者:Anthropic