关于 Sourcegull
Sourcegull 是以 Rust 编写的可自托管代码搜索与代码智能服务,面向管理 GitLab、GitHub 和 Gitea 仓库的团队及编码 Agent。它通过索引搜索、跨仓库导航和权限同步,让 Agent 按需读取代码及历史记录。
主要功能
- 01跨 GitLab、GitHub 和 Gitea 搜索
- 02字面、正则、关键词和结构搜索
- 03跨仓库符号导航与定义引用查询
- 04按代码托管权限执行访问控制
- 05趋势、监视和批量仓库更改
- 06提供 gull 命令行与 GraphQL API
适用场景
- 01在多个代码托管平台查找代码
- 02让编码 Agent 查询符号及提交历史
- 03按仓库权限检索代码
- 04批量修改多个仓库并跟踪合并请求
MCP 相关
Sourcegull 提供 MCP 服务,供编码 Agent 搜索代码、读取文件、查询符号、定义、引用及 Git 历史。工具在调用者权限范围内返回适合模型上下文的结果。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://{sourcegull_host}/.api/mcpclaude mcp add --transport http sourcegull-sourcegull https://{sourcegull_host}/.api/mcp{"mcpServers":{"sourcegull-sourcegull":{"type":"http","url":"https://{sourcegull_host}/.api/mcp"}}}在 Cursor 中打开{"servers":{"sourcegull-sourcegull":{"type":"http","url":"https://{sourcegull_host}/.api/mcp"}}}在 VS Code 中打开{"mcpServers":{"sourcegull-sourcegull":{"type":"http","url":"https://{sourcegull_host}/.api/mcp"}}}{"mcpServers":{"sourcegull-sourcegull":{"serverUrl":"https://{sourcegull_host}/.api/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍

只需几毫秒,即可在数千个代码仓库中查找代码,令令牌用量最多减少 50 倍。供你和你的 Agent 使用。
使用 Rust 编写,面向 GitLab、GitHub 和 Gitea 的可自托管代码搜索与代码智能工具。所有功能均采用 Apache-2.0 许可证开源,包括 SSO、SCIM、RBAC 和审计日志。没有付费套餐,未来也不会有。
快速安装 · 生产环境安装 · 文档 · 查询语言 · AI Agent(MCP) · 架构 · 开发
快速搜索,更少令牌
通过 MCP 连接的 Agent 只会读取能回答其问题的代码行,与克隆代码仓库并使用 grep 搜索相比,令牌用量最多可减少 50 倍(令牌用量)。
Sourcegull 使用自有的三元组索引。推送代码后,只有发生更改的路径会写入增量分片,因此无需重建代码仓库索引,新提交也能在几秒内搜索到。小型代码仓库会合并到复合分片中,从而让包含数千个代码仓库的实例依然保持快速。未编入索引的修订版本(任何分支、标签或提交)会直接从 git 中搜索。找到结果后会立即开始流式返回。
与同一 GitLab 上的替代方案相比: 基准测试:同一 GitLab,一次对比一个产品。
所有功能均免费
本仓库中的所有功能均采用 Apache-2.0 许可。没有企业版、许可密钥或付费层级,项目也不会推出这些内容。其他代码搜索产品通常会单独收费的功能也都包含在内:
- 通过 GitLab、GitHub 或 Gitea OAuth、OpenID Connect 或身份验证代理(HTTP 标头)实现单点登录,以及 SCIM 配置。
- 角色(RBAC)、 从 GitLab 同步的仓库权限,并在每次读取时强制执行权限,以及审计日志。
- 基于 SCIP 索引的精准代码导航,支持跨仓库和软件包版本;索引可从 GitLab CI 上传,也可通过自动索引构建;对于未编入索引的仓库,则以基于搜索的结果补充。
- 批量更改:使用一个 YAML 规范更改多个仓库,然后创建并跟踪 GitLab 合并请求。
- 趋势、关注项,以及支持导出为 CSV/JSONL 的全面搜索任务。
- 仓库可存储在多个仓库节点上,添加或移除节点无需停机。
- 使用分析数据保留在实例上。
- 为 AI 编码 Agent 提供的MCP 服务。
此外还包括:字面量、正则表达式、关键词(BM25)和结构化搜索;笔记本;代码所有权;已保存的搜索和搜索上下文;GraphQL API、gull CLI 和出站 Webhook;Grafana 仪表板和有文档说明的告警。请参阅文档。
可用于生产环境
- 一个 Rust 二进制文件,唯一的有状态依赖是 PostgreSQL(16 或更高版本)。不会向供应商的云端发送任何内容。
- 无遥测。使用分析数据保留在实例上。
- 单主机部署使用 Docker Compose,Kubernetes 部署使用 Helm Chart。每个版本都会通过从上一版本升级来进行测试。
- 仓库存储分布在多个仓库节点上,可在不停机的情况下添加或移除节点。
- 存储的密钥经过加密,且密钥轮换无需重启。
- 内置 Grafana 仪表板和 Prometheus 告警。
- 配置即代码:登录方式、代码托管平台连接和站点管理员配置来自 git 中的文件,密钥则来自环境变量。
- GitLab(gitlab.com 和自托管版本)支持所有功能。GitHub(github.com 和 Enterprise Server)及 Gitea 支持仓库同步、权限同步、Webhook 和登录。
- 可同时连接多个代码托管平台:将 gitlab.com、自托管 GitLab、GitHub 和 Gitea 并列连接,一个搜索即可覆盖所有平台,并分别遵循各自的权限。
快速安装
要试用 Sourcegull,或在一台主机上为小型团队运行它,请下载最新版本的 Compose 配置包,并使用已发布的镜像 ghcr.io/sourcegull/sourcegull(linux/amd64)启动 PostgreSQL 和 Sourcegull:
curl -fsSL https://github.com/sourcegull/sourcegull/releases/latest/download/sourcegull-compose.tar.gz | tar -xz
cd sourcegull-compose
echo "POSTGRES_PASSWORD=$(openssl rand -hex 24)" > .env
docker compose up -d
打开 http://localhost:7080。第一个注册的用户将成为站点管理员。在 站点管理 → 代码托管平台连接下添加 GitLab、GitHub 或 Gitea 连接,仓库便会开始克隆和编入索引。
生产部署
docs/install.md 是安装指南。生产环境请使用以下任一方式:
- Kubernetes(Helm),适用于规模较大的部署和多个仓库节点: install.md → Kubernetes,搭配外部 PostgreSQL 和 自有密钥、尺寸预设及容量规划。所有配置值都列在 Chart README 中。
- Docker Compose 生产布局(
compose.production.yaml,每个角色一个容器),适用于 单台主机:install.md → 生产布局。
有关两种方式的运行说明,请参阅升级文档(Compose、Helm)、 备份、监控和 以代码管理配置。
AI Agent(MCP)
/.api/mcp 是一个 Model Context Protocol 服务。编码 Agent
可以搜索代码、读取文件、查找符号、定义和引用,以及读取历史记录(日志、
提交、比较、归属),并遵循调用者的权限;输出大小适合模型的上下文。
侧边栏中的 连接 Agent 提供 Claude Code、Cursor、VS Code、
Codex、Gemini CLI、Zed、JetBrains 等工具的复制粘贴式设置,并提供一键令牌。对于 Claude Code:
claude mcp add --transport http sourcegull https://sourcegull.example.com/.api/mcp \
--header "Authorization: Bearer <token>"
工具和示例:docs/mcp.md。
工作原理
一个二进制文件 sourcegull 以不同角色运行:web(UI、API、搜索分发)、repo(Git 存储、
索引分片和搜索,分布在多个节点上)、worker(后台作业)和 blob(Blob
存储);sourcegull supervise 会在一个进程中运行所有角色。sourcegull executor 会在 Docker 或 Kubernetes 中运行沙盒化作业。PostgreSQL 存储数据、作业队列、租约和缓存;不使用 Redis。
每个仓库节点都会为自己的仓库建立索引并执行搜索;web 解析查询、应用
权限,将查询分发到各节点,并合并结果流。详情请参阅
docs/architecture.md。
从源代码构建
所有内容都在 Docker 中运行;除了带 Compose 的 Docker,无需安装其他内容。
docker compose up -d # Postgres, Sourcegull built from this checkout, UI dev server
open http://localhost:5173 # UI with hot reload; API on :7080
scripts/dev test # the test suite against the dev Postgres
scripts/dev check # rustfmt, clippy -D warnings, UI type check and tests
scripts/dev help # e2e tests, benchmarks, a local GitLab with seed data, ...
更多信息请参阅 docs/development.md。
替代方案
| Sourcegull | Sourcegraph | Sourcebot | Zoekt | OpenGrok | Hound | GitLab 代码搜索 | |
|---|---|---|---|---|---|---|---|
| 许可证 | 🟢 Apache-2.0 | 💰 专有 | 💰 专有,最多支持 5 位用户免费使用 | 🟢 Apache-2.0 | 🟢 CDDL-1.0 | 🟢 MIT | 💰 取决于 GitLab 套餐 |
| 所有功能均免费 | 🟢 | 🔴 | 🔴 | 🟢 | 🟢 | 🟢 | 🔴 |
| 编写语言 | Rust | Go、TypeScript | TypeScript(内置 Zoekt) | Go | Java | Go | Ruby、Go |
| 已索引内容的正则表达式搜索 | 🟢 | 💰 | 🟢 最多支持 5 位用户 | 🟢 | 🟢 | 🟢 | 💰 仅默认分支 |
| 未索引的修订版本(任意分支、标签、提交) | 🟢 | 💰 | 🔴 | 🔴 | 🔴 | 🔴 | 🟡 任意分支,但一次只能搜索一个项目 |
| 结构化搜索和 BM25 关键词搜索 | 🟢 | 💰 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 |
| 代码托管平台 | 🟢 GitLab、GitHub、Gitea | 💰 多种 | 🟢 多种,最多支持 5 位用户 | 🟡 镜像工具 | 🟡 本地检出(支持多种 VCS) | 🟢 git 等 | 🟢 仅 GitLab |
| 精确代码导航(SCIP),支持跨仓库 | 🟢 | 💰 | 🔴 | 🔴 | 🔴 | 🔴 | 🟡 仅限单个项目 |
| 从代码托管平台同步仓库权限 | 🟢 | 💰 | 💰 | 🔴 | 🔴 | 🔴 | 🟢 内置 |
| SSO、SCIM、RBAC、审计日志 | 🟢 | 💰 | 💰 SSO 最多支持 5 位用户免费使用,其余功能付费 | 🔴 | 🔴 | 🔴 | 💰 部分功能付费 |
| 跨仓库批量更改 | 🟢 | 💰 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 |
| 趋势、关注项、搜索任务 | 🟢 | 💰 | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 |
| 面向 AI Agent 的 MCP 服务 | 🟢 | 💰 | 🟢 最多支持 5 位用户 | 🔴 | 🔴 | 🔴 | 🟡 免费;跨项目代码搜索需付费 |
| 托管式 AI 助手 | 🔴 | 💰 | 🟢 最多支持 5 位用户 | 🔴 | 🔴 | 🔴 | 💰 |
🟢 免费 · 💰 付费 · 🟡 不完整 · 🔴 不提供
- Sourcegraph 是功能最全面的代码智能平台,以商业许可证提供可自托管版本。
- Sourcebot 基于 Zoekt 构建 Web UI、MCP 服务和 AI 助手。自 6 版本起已闭源。免费套餐最多支持 5 位用户;权限同步和分析功能仅在付费套餐中提供,SCIM 和审计日志则仅在 Enterprise 套餐中提供。
- Zoekt 是一款快速的三元组搜索引擎,仅此而已。它处理字面查询的速度比 Sourcegull 快;Sourcegull 的索引速度更快,占用磁盘空间更少,处理正则表达式的速度也更快(见下文)。
基准测试:同一个 GitLab,一次测试一个产品
每个产品都为同一个 GitLab CE 19.4 实例中的 1,007 个公开项目建立索引:7 个固定在指定版本的大型代码库(Linux、LLVM、Go、Rust、Kubernetes、GitLab、TensorFlow;4.4 GB 源代码)和 1,000 个包含历史记录的生成代码库(0.84 GB)。每个产品都在全新安装后单独运行,与 GitLab 部署在同一台主机上,主机配置为 6 个 CPU 和 24 GB 内存。
| 所有代码库均可搜索 | 峰值内存(建立索引) | 内存(空闲) | 磁盘 | 精确匹配(特定词) | 精确匹配(常见词) | 正则表达式 | 无匹配 | |
|---|---|---|---|---|---|---|---|---|
| Sourcegull | 3 min 21 s | 3.7 GB | 2.2 GB | 3.7 GB | 54 / 69 ms (724) | 48 / 54 ms (1000) | 84 / 88 ms (1000) | 29 / 35 ms (0) |
| Sourcegraph 5.0.6 | 10 min 08 s | 5.2 GB | 3.2 GB | 13.4 GB | 22 / 33 ms (640) | 24 / 30 ms (902) | 121 / 242 ms (883) | 12 / 20 ms (0) |
| Sourcebot 5.1.16 | 5 min 31 s | 8.5 GB | 1.9 GB | 13.9 GB | 77 / 90 ms (660) | 101 / 113 ms (971) | 309 / 332 ms (978) | 18 / 21 ms (0) |
| Zoekt | 9 min 05 s | 3.9 GB | 1.7 GB | 13.9 GB | 16 / 23 ms (724) | 29 / 34 ms (1000) | 361 / 390 ms (1000) | 8 / 10 ms (0) |
| Hound | 3 min 02 s | 6.2 GB | 5.9 GB | 9.4 GB | 336 / 351 ms (724) | 766 / 851 ms (2188) | 788 / 884 ms (2187) | 10 / 13 ms (0) |
| OpenGrok 1.14 | 36 min 38 s | 9.0 GB | 5.1 GB | 18.4 GB | 973 / 998 ms (653) | 84 / 107 ms (1000) | 不支持 | 20 / 27 ms (0) |
- 可搜索时间:从添加 GitLab 连接(或启动产品,如果产品从文件读取配置)开始,到所有代码库都进入搜索索引为止,包括克隆所需时间。
- 内存:产品所有容器的内存,包括数据库,由 Docker 报告:建立索引期间的峰值,以及空闲两分钟后的内存。磁盘:产品所有卷的占用(Git 镜像、索引、数据库)。
- 查询:预热 3 次后连续发送 20 个请求所得的 p50 / p95;通过 HTTP 调用每个产品的搜索 API,最多返回 1,000 条结果;括号内为返回的文件数。特定词为
kmalloc_array,常见词为func main,正则表达式为func\s+main\(,最后一个查询不匹配任何内容。Sourcegraph 和 Sourcebot 在达到 1,000 个行匹配项时停止,因此返回的文件较少;Hound 没有限制,会返回每个匹配文件。 - 设置均为默认值,例外如下:Zoekt(由提交 c0b97d2 构建的
zoekt-indexserver和zoekt-mirror-gitlab)使用-fetch_interval 1m运行(默认的一小时会让首次建立索引延迟一小时),并设置-cpu_fraction 1.0;Hound 使用 6 个索引器。OpenGrok 没有代码托管平台集成,因此其耗时包括先克隆每个代码库(每次 6 个,耗时 86 s);其正则表达式只能匹配单个词元,因此无法表达正则表达式查询。 - Sourcegraph 5.0.6 是 2023 年的单容器镜像,发布于源代码闭源之前。Sourcebot 6 需要先向供应商注册部署,API 才会响应,因此测试了没有此要求的最后一个版本 5.1.16。未纳入 GitLab 自带的代码搜索:GitLab CE 一次只能搜索一个项目的代码,而实例范围搜索需要精确代码搜索(Zoekt)或高级搜索(Elasticsearch 或 OpenSearch),两者都仅适用于 Premium 或 Ultimate。
贡献
欢迎提交 Bug 报告和拉取请求。docs/development.md 介绍了 Docker 开发环境设置、测试、基准测试和约定。提交更改前,请运行 scripts/dev check。
许可证
Apache-2.0(LICENSE-APACHE)。源自第三方项目的部分内容沿用其许可证并保留署名;详见 NOTICE。
Sourcegull 是独立项目,与 Sourcegraph, Inc. 或 GitLab Inc. 无关联,也未获得其赞助或背书。产品名称是其各自所有者的商标,此处仅用于描述替代方案和兼容性。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。