语义文件搜索
按含义而不是关键字搜索文件。
一个本地macOS应用程序+MCP服务器,用于在文件系统上进行本地语义搜索。 完全基于Swift构建。通过MLX在Apple Silicon上运行。没有云,没有Python,没有依赖关系。
______________________________________________________________________
为什么?
Spotlight按名称查找文件。 grep 按精确文本查找文件。两人都不明白 *意义*.
语义文件搜索使用本地AI模型嵌入您的文档,然后让您按概念搜索——“移居日本”可以找到您的物流说明、住房研究和行动计划,即使它们从未提及这些确切的单词。
作为Mac应用程序独立工作,或作为 MCP服务器 因此,Claude Code和Cursor等AI编码工具也可以搜索您的文件。
特性
- 语义搜索 --按含义而非关键字查找文件
- 100%本地 --嵌入通过MLX在Apple Silicon GPU上运行,任何东西都不会离开你的机器
- 单个二进制 --原生SwiftUI应用程序,无Python,无sidecar进程,无运行时依赖关系
- MCP服务器 --Claude Code和Cursor可以通过以下方式搜索您的文件
--mcp旗帜 - 多个模型 --在Qwen3 0.6B(本地)或Gemini Embedded 2(云)之间切换
- 智能排除 --系统模式(.git、node_modules)+自定义glob模式
- 实时索引 --一键重新索引,实时显示进度
截图
搜索 --按含义查找文件
克劳德代码中的MCP --AI工具搜索您的文件
模型 --选择本地或云嵌入
设置 --排除模式、数据位置
快速开始
需求
- macOS 14+与苹果硅(M1/M2/M3/M4)
- Xcode 16+(用于金属着色器编译)
构建与运行
git clone https://github.com/ryuseitaniguchi/semantic-file-search.git
cd semantic-file-search
./build.sh
open .xc-build/SemanticSearch.app与Claude Code一起使用
claude mcp add semantic-search -- /path/to/SemanticSearch --mcp然后在克劳德代码中:
> Use semantic_search to find files about "database architecture"
> Use refresh_index to index ~/Documents建筑
单个Swift二进制文件——在一个进程中嵌入引擎、向量存储和UI。
SemanticSearch (one binary, two modes)
│
├── GUI mode (default) → SwiftUI app
├── MCP mode (--mcp) → headless stdio server for Claude Code
│
├── Core/
│ ├── SearchEngine MLXEmbedders → Qwen3-Embedding (Apple Silicon GPU)
│ ├── Indexer Walk dirs → chunk text → embed → store
│ ├── TextChunker 512-token recursive splitting with overlap
│ └── Config ~/.config/semantic-file-search/config.json
│
├── MCP/
│ └── MCPServer 3 tools via modelcontextprotocol/swift-sdk
│
└── Views/ SwiftUI (Dashboard, Search, Folders, Models, Settings)没有Python。没有sidecar进程。组件之间没有HTTP。
MCP工具
| 工具 | 说明 |
|---|---|
semantic_search | 按含义搜索索引文件。返回文件路径、代码段和相关性得分。 |
refresh_index | 为目录建立索引。增量--仅处理新的/更改的文件。 |
get_index_status | 显示索引统计信息:文件计数、向量计数、活动模型。 |
支持的文件类型
.md .txt .py .js .ts .jsx .tsx .rs .go .java .c .cpp .h .swift .rb .php .kt .scala .sh .yaml .yml .toml .json .xml .html .css .scss .sql 以及10+以上。
运作原理
- 将文件夹添加到索引(“已索引文件夹”屏幕或
refresh_indexMCP工具) - 应用程序读取文本文件,将其分块为约512个令牌段
- 每个块都使用Qwen3-embedded-0.6B在GPU上嵌入
- 矢量存储在本地
~/.local/share/semantic-file-search/ - 搜索使用Accelerate vDSP余弦相似性(100K向量约10ms)
第一次运行从HuggingFace下载嵌入模型(~350MB)。
配置
配置在 ~/.config/semantic-file-search/config.json:
{
"directories": ["~/Documents/notes", "~/projects"],
"model": "mlx-community/Qwen3-Embedding-0.6B-4bit-DWQ",
"user_excluded_patterns": ["*.log", "vendor/"],
"max_file_size_mb": 10
}技术栈
| 组件 | 技术 |
|---|---|
| UI | SwiftUI(macOS 14+) |
| 嵌入件 | MLXEmbedders 苹果硅GPU |
| 矢量搜索 | 加速vDSP(SIMD余弦相似度) |
| MCP | modelcontextprotocol/swift-sdk (stdio传输) |
| 存储 | 原始Float32二进制+JSON元数据 |
| 设计灵感来自 VoiceInk |
许可证
麻省理工学院
