mcpField
S
Sourcegull

Sourcegull

远程服务
github.com/sourcegull其他11 天前更新
代码仓库

关于 Sourcegull

Sourcegull 是以 Rust 编写的可自托管代码搜索与代码智能服务,面向管理 GitLab、GitHub 和 Gitea 仓库的团队及编码 Agent。它通过索引搜索、跨仓库导航和权限同步,让 Agent 按需读取代码及历史记录。

主要功能

  1. 01跨 GitLab、GitHub 和 Gitea 搜索
  2. 02字面、正则、关键词和结构搜索
  3. 03跨仓库符号导航与定义引用查询
  4. 04按代码托管权限执行访问控制
  5. 05趋势、监视和批量仓库更改
  6. 06提供 gull 命令行与 GraphQL API

适用场景

  1. 01在多个代码托管平台查找代码
  2. 02让编码 Agent 查询符号及提交历史
  3. 03按仓库权限检索代码
  4. 04批量修改多个仓库并跟踪合并请求

MCP 相关

Sourcegull 提供 MCP 服务,供编码 Agent 搜索代码、读取文件、查询符号、定义、引用及 Git 历史。工具在调用者权限范围内返回适合模型上下文的结果。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://{sourcegull_host}/.api/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

README 配图
SourceGull

只需几毫秒,即可在数千个代码仓库中查找代码,令令牌用量最多减少 50 倍。供你和你的 Agent 使用。
使用 Rust 编写,面向 GitLab、GitHub 和 Gitea 的可自托管代码搜索与代码智能工具。所有功能均采用 Apache-2.0 许可证开源,包括 SSO、SCIM、RBAC 和审计日志。没有付费套餐,未来也不会有。

快速安装 · 生产环境安装 · 文档 · 查询语言 · AI Agent(MCP) · 架构 · 开发

许可证:Apache-2.0 Rust 1.85+ Docker 和 Helm

输入查询 lang:rust serde::Deserialize;axum、serde 和 tokio 的 119 个结果在几毫秒内返回

快速搜索,更少令牌

通过 MCP 连接的 Agent 只会读取能回答其问题的代码行,与克隆代码仓库并使用 grep 搜索相比,令牌用量最多可减少 50 倍(令牌用量)。

Sourcegull 使用自有的三元组索引。推送代码后,只有发生更改的路径会写入增量分片,因此无需重建代码仓库索引,新提交也能在几秒内搜索到。小型代码仓库会合并到复合分片中,从而让包含数千个代码仓库的实例依然保持快速。未编入索引的修订版本(任何分支、标签或提交)会直接从 git 中搜索。找到结果后会立即开始流式返回。

与同一 GitLab 上的替代方案相比: 基准测试:同一 GitLab,一次对比一个产品。

所有功能均免费

本仓库中的所有功能均采用 Apache-2.0 许可。没有企业版、许可密钥或付费层级,项目也不会推出这些内容。其他代码搜索产品通常会单独收费的功能也都包含在内:

此外还包括:字面量、正则表达式、关键词(BM25)和结构化搜索;笔记本;代码所有权;已保存的搜索和搜索上下文;GraphQL API、gull CLI 和出站 Webhook;Grafana 仪表板和有文档说明的告警。请参阅文档。

tokio 中的代码导航:asyncify 的悬停卡片,以及下方面板中的定义和 55 处引用

可用于生产环境

  • 一个 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 是安装指南。生产环境请使用以下任一方式:

有关两种方式的运行说明,请参阅升级文档(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。

替代方案

SourcegullSourcegraphSourcebotZoektOpenGrokHoundGitLab 代码搜索
许可证🟢 Apache-2.0💰 专有💰 专有,最多支持 5 位用户免费使用🟢 Apache-2.0🟢 CDDL-1.0🟢 MIT💰 取决于 GitLab 套餐
所有功能均免费🟢🔴🔴🟢🟢🟢🔴
编写语言RustGo、TypeScriptTypeScript(内置 Zoekt)GoJavaGoRuby、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 内存。

所有代码库均可搜索峰值内存(建立索引)内存(空闲)磁盘精确匹配(特定词)精确匹配(常见词)正则表达式无匹配
Sourcegull3 min 21 s3.7 GB2.2 GB3.7 GB54 / 69 ms (724)48 / 54 ms (1000)84 / 88 ms (1000)29 / 35 ms (0)
Sourcegraph 5.0.610 min 08 s5.2 GB3.2 GB13.4 GB22 / 33 ms (640)24 / 30 ms (902)121 / 242 ms (883)12 / 20 ms (0)
Sourcebot 5.1.165 min 31 s8.5 GB1.9 GB13.9 GB77 / 90 ms (660)101 / 113 ms (971)309 / 332 ms (978)18 / 21 ms (0)
Zoekt9 min 05 s3.9 GB1.7 GB13.9 GB16 / 23 ms (724)29 / 34 ms (1000)361 / 390 ms (1000)8 / 10 ms (0)
Hound3 min 02 s6.2 GB5.9 GB9.4 GB336 / 351 ms (724)766 / 851 ms (2188)788 / 884 ms (2187)10 / 13 ms (0)
OpenGrok 1.1436 min 38 s9.0 GB5.1 GB18.4 GB973 / 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. 无关联,也未获得其赞助或背书。产品名称是其各自所有者的商标,此处仅用于描述替代方案和兼容性。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。