一个模型上下文协议(MCP)服务器,提供类似IDE的代码导航和本地存储库搜索。为ChatGPT等AI助手提供强大的代码探索功能,包括符号搜索、三元组索引和语义导航。
快速入门
看 docs/QUICKSTART.md 查找到工作配置的最快路径和最常见的旋钮(索引路径、repos、嵌入开/关、管理设置)。
特性
混合代码搜索
- 使用三元组索引进行快速文本搜索(灵感来自GitHub的Blackbird)
- Trigram商店使用RocksDB通过
rocksdict(安装时pip install -e .[trigrams-rocksdict]);SQLite回退已删除。 - 基于符号的函数、类、方法和变量搜索
- LanceDB支持的向量嵌入语义代码搜索(ANN查询,每个仓库向量存储)
- 显示代码大纲的文件结构视图
- 具有文件监视功能的自动索引更新(可选)
生产就绪
- 线程安全并发访问(SQLite WAL模式+RLock序列化)
- 文件监视器、HTTP处理程序和向量索引安全并行运行
- 并发操作中没有“数据库被锁定”错误
- 用于操作管理(索引重建、统计数据、日志)的管理员API
- 具有标头编辑功能的全面请求/响应日志记录
企业安全
- OAuth 2.0身份验证,支持PKCE远程访问
- 本地连接旁路(本地主机不需要身份验证)
- API密钥回退和IP白名单
可用工具
index_repository-通过符号提取构建可搜索索引search_code-跨存储库的快速子字符串搜索goto_definition-查找符号定义list_symbols-查看文件/仓库结构list_mcp_tools,external_mcp_prompt-发现注册到Sigil的外部MCP工具build_vector_index-为代码生成语义嵌入(可选)semantic_search-使用嵌入的自然语言代码搜索list_repos,read_repo_file,list_repo_files,search_repo-基本操作get_index_stats,ping-服务器信息和健康检查
快速开始
安装
克隆和安装依赖关系:
git clone https://github.com/Superuser666-Sigil/SigilDERG-Custom-MCP.git
cd SigilDERG-Custom-MCP
pip install -e .[server-full]默认嵌入运行时: llamacpp 使用Jina v2代码嵌入(768 dim) ./models/jina/jina-embeddings-v2-base-code-Q4_K_M.gguf.
安装用于符号提取的通用Ctag(可选但推荐):
macOS: brew install universal-ctags Ubuntu/Debian: sudo apt install universal-ctags Arch Linux: sudo pacman -S ctags
配置
复制示例配置并使用存储库路径进行编辑:
cp config.example.json config.json
# Edit config.json配置示例:
{
"repositories": {
"my_project": "/absolute/path/to/your/project",
"another_repo": "/path/to/another/repo"
}
}或者,使用环境变量:
export SIGIL_REPO_MAP="my_project:/path/to/project;another:/path/to/another"运行服务器
建议:使用重启脚本(同时启动MCP服务器和管理UI):
./scripts/restart_servers.sh此脚本将:
- 停止任何正在运行的服务器进程
- 在端口8000上启动MCP服务器
- 在端口5173上启动管理UI前端
- 使用以下命令运行这两个进程
nohup因此,它们在终端关闭后仍然存在
手动启动(仅限MCP服务器):
python -m sigil_mcp.server停止所有服务器:
./scripts/restart_servers.sh --stop首次运行时,将生成OAuth凭据。保存从ChatGPT连接的客户端ID和客户端密码。
连接到ChatGPT
\[!重要\] 使用Cloudflare隧道? 您必须禁用机器人战斗模式,否则ChatGPT的OAuth将失败。\ 📖 看 Cloudflare OAuth问题和解决方案 了解详情。
- 通过ngrok曝光:
ngrok http 8000(或使用Cloudflare隧道) - 在ChatGPT中,添加具有OAuth身份验证的MCP连接器
- 在服务器启动时使用OAuth凭据
- 开始使用:“在我的代码中搜索异步函数”
重要:服务器已配置为ChatGPT兼容性:
- DNS重新绑定保护已禁用(ChatGPT发送ngrok主机标头)
- MCP端点安装在根节点
/(不是/mcp) - OAuth身份验证仍处于活动状态并且是必需的
看 docs/CHATGPT_SETUP.md 详细说明。
使用示例
一旦作为MCP服务器连接到ChatGPT:
You: "Index my project repository"
ChatGPT: Indexed 342 files, found 1,847 symbols in 3.2 seconds
You: "Find where the HttpClient class is defined"
ChatGPT: Found in project::src/http/client.py at line 45
You: "Search for async functions"
ChatGPT: Found 23 matches across 8 files
You: "Build vector index for semantic search"
ChatGPT: Indexed 856 chunks from 342 documents
You: "Find code that handles user authentication"
ChatGPT: Found 5 relevant code sections (semantic search):
- auth/handlers.py:45-145 (score: 0.89)
- middleware/auth.py:12-112 (score: 0.84)
...建筑
索引过程
- 文件扫描(跳过构建工件)
- 具有SHA-256重复数据消除功能的内容存储
- 通过通用ctags进行符号提取
- 三角图倒排索引生成
- 使用zlib进行压缩
存储
~/.sigil_index/
├── repos.db # SQLite: repos, documents, symbols
├── trigrams.rocksdb/ # RocksDB trigram inverted index (default, via rocksdict)
├── lancedb/ # LanceDB vector store (per-repo code_vectors tables + PQ indexes)
└── blobs/ # Compressed content演出
- 符号查找:O(log n)通过SQLite索引
- 文本搜索:O(k),其中k=三元组\*每个三元组的文档
- 典型查询延迟:10-100ms
安全
路径横向保护: 所有路径都经过验证,以防止逃逸存储库根
身份验证层: OAuth 2.0(主要)、本地绕过(localhost)、API密钥(回退)、IP白名单(可选)
保护: 源代码需要远程访问的身份验证,OAuth凭据以0600权限存储,令牌在1小时后过期并支持刷新,PKCE防止授权代码被拦截
ChatGPT兼容性:为了兼容ChatGPT MCP连接器,DNS重新绑定保护已禁用。这意味着:
- \[否\]主机标头验证:已禁用(接受ngrok域)
- \[否\]内容类型验证:已禁用(接受应用程序/八位字节流)
- \[是\]OAuth 2.0身份验证:活动且必需
- \[是\]承载令牌验证:活动
- \[是\]令牌过期:强制
看 docs/SECURITY.md 获取详细的安全文档。
文档
设置指南
架构决策记录(ADR)
- ADR-001:OAuth 2.0身份验证
- ADR-002:基于三角图的索引 (已取代)
- ADR-003:使用Ctags进行符号提取
- ADR-004:JSON配置系统
- ADR-005:FastMCP自定义路由
- ADR-006:语义搜索的向量嵌入
- ADR-007:文件监视
- ADR-008:粒度重新索引和可配置模式
- ADR-009:ChatGPT MCP连接器兼容性
- ADR-010:线程安全和SQLite WAL模式
- ADR011:运行管理API管理员
- ADR-012:ASGI报头日志中间件
- ADR-013:LanceDB矢量存储迁移
- ADR-014:管理UI测试策略
- ADR-015:默认Llama.cpp+Jina嵌入
- ADR-016:外部MCP聚集
- ADR-017:RocksDB三角图商店
其他
- ChatGPT OAuth配置
- Cloudflare 502修复
- Cloudflare OAuth问题
- 外部MCP集成 (如果存在,请参阅config.example.json)
贡献
欢迎投稿!请看 贡献.md 指南包括:
- 贡献者许可协议(CLA) - 所有贡献者都需要
- 开发商原产地证书(DCO)要求
- 规范标准和测试要求
- 拉取请求流程
- 行为准则
许可
Sigil拥有双重许可:
- 开源:可在AGPLv3下用于开源项目和满足源代码共享要求的私人使用。
- 商业的:希望在内部运行Sigil而不开源自己的应用程序或需要赔偿和支持的组织需要商业许可证。
联系我 商业许可选项。
看 许可证 完整AGPLv3文本的文件。
许可常见问题
Q: 我可以在AGPLv3下在公司内部运行这个吗?
A: 是的,只要您对AGPLv3及其要求感到满意。如果你通过网络向用户公开服务器(比如将其作为内部服务运行),AGPLv3要求向这些用户提供源代码,包括你所做的任何修改。
Q: 我们有“无AGPL”政策。我们还能用Sigil吗?
A: 是的,通过商业许可证。电子邮件 davetmire85@gmail.com 讨论你的需求。
Q: 为什么我必须签署CLA才能捐款?
A: 《贡献者许可协议》保持了许可故事的整洁——开源社区的AGPLv3,需要商业许可的组织的商业许可——没有关于谁拥有什么的法律歧义。您的贡献在AGPLv3下仍然是开源的;CLA只是澄清了权利。
Q: 商业许可证包括哪些内容?
A: 商业许可证提供了在内部使用Sigil的自由,无需开源要求,能够保持修改的专有性,赔偿和支持选项,以及明确的企业合规法律地位。联系我了解详情和价格。
Q: 我可以将其用于我的个人项目吗?
A: 当然!AGPLv3非常适合个人项目、业余爱好者使用和小型团队。只有当您的组织要求与AGPL冲突时,您才需要商业许可证。
有关贡献的更多详细信息,请参阅 贡献.md.
致谢
- 受GitHub Blackbird搜索引擎启发的三角图索引
- 由通用Ctags支持的符号提取
- 基于模型上下文协议(MCP)规范构建
支持
问题: 文档: docs/ 安全: docs/SECURITY.md
