mcpField
F
Forgejo MCP Server

Forgejo MCP Server

本地服务
codeberg.org版本控制149今天更新

关于 Forgejo MCP Server

Forgejo MCP Server 通过 REST API 将 MCP 客户端连接到 Forgejo 实例,可处理仓库、议题、拉取请求、文件和 Actions 工作流任务,并支持多种传输方式。

主要功能

  1. 01浏览和管理仓库
  2. 02创建及查看议题
  3. 03管理拉取请求
  4. 04读取仓库文件
  5. 05查看 Actions 工作流运行

适用场景

  1. 01通过 AI 助手列出仓库
  2. 02创建或查看仓库议题
  3. 03检查未关闭的拉取请求
  4. 04读取分支中的文件

MCP 相关

将 Forgejo REST API 操作作为 MCP 工具和资源提供给 MCP 客户端,支持 stdio、HTTP 和 SSE 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Forgejo MCP 服务

📦 此项目已迁移。 开发、问题、发行版本和容器镜像现已托管在 https://git.b4mad.industries/agentic-forges/forgejo-mcp。 Codeberg 仓库 codeberg.org/goern/forgejo-mcp 仅作为只读镜像保留,其容器注册表不再发布镜像 — 请改为从 git.b4mad.industries/agentic-forges/forgejo-mcp 拉取。迁移前后的问题编号保持不变。欢迎人类和 AI Agent 在新位置参与贡献。

git clone https://git.b4mad.industries/agentic-forges/forgejo-mcp.git

如果你的远程仓库或书签指向 forgejo.b4mad.net,那与之前名称下的 Forge 完全相同 — 于 2026-07-29 更名,并非再次迁移。旧名称仍可解析,且通过同一个主机密钥提供 2222 端口服务,因此现有克隆仍可正常使用;你可以方便时再更新它们的地址:

git remote set-url origin \
  ssh://[email protected]:2222/agentic-forges/forgejo-mcp.git
ssh-keyscan -p 2222 git.b4mad.industries >> ~/.ssh/known_hosts

将 AI 助手连接到 Forgejo 仓库。通过自然语言管理问题、拉取请求、文件等。

功能介绍

Forgejo MCP 服务是一个集成插件,可将 Forgejo 与 Model Context Protocol (MCP) 系统连接起来。配置完成后,你可以通过任何兼容 MCP 的 AI 助手(例如 Claude、Cursor 或 VS Code 扩展)与 Forgejo 仓库交互。

你可以使用的示例命令:

  • “列出我的所有仓库”
  • “创建一个标题为‘登录页面中的错误’的问题”
  • “显示 my-org/my-repo 中尚未关闭的拉取请求”
  • “获取 main 分支中 README.md 的内容”
  • “显示 agentic-forges/forgejo-mcp 中最新的 Actions 工作流运行记录”

快速开始

1. 安装

选项 A:使用 Go(推荐)

git clone https://git.b4mad.industries/agentic-forges/forgejo-mcp.git
cd forgejo-mcp
go install .

确保 $GOPATH/bin(通常为 ~/go/bin)位于 PATH 中。

**注意:**你也可以直接从模块路径安装,无需克隆:

go install git.b4mad.industries/agentic-forges/forgejo-mcp/v3@latest

选项 B:下载二进制文件

从发行版本页面下载最新版本。

对于 Arch Linux,请使用你偏好的 AUR 助手:

yay -S forgejo-mcp      # builds from source
yay -S forgejo-mcp-bin  # uses pre-built binary

选项 C:Nix / NixOS

你可以使用 Nix 包管理器直接运行服务端:

nix-shell -p forgejo-mcp

也可以使用 Flakes:

nix run nixpkgs#forgejo-mcp

注意:forgejo-mcp 目前仅在 unstable 通道中提供,尚未纳入 25.11 稳定版。

选项 D:容器镜像

每次发布时,都会将经过签名的多阶段 OCI 镜像发布到 git.b4mad.industries/agentic-forges/forgejo-mcp。无需从源代码构建即可运行服务:

# Latest release
podman run --rm -i \
  -e FORGEJO_ACCESS_TOKEN="<your personal access token>" \
  git.b4mad.industries/agentic-forges/forgejo-mcp:latest \
  --transport stdio --url https://your-forgejo-instance.org

# Or pin a specific version
podman run --rm -i git.b4mad.industries/agentic-forges/forgejo-mcp:v3.1.0 --help
标签含义
vMAJOR.MINOR.PATCH不可变 — 对应确切的发行版本(例如 v3.1.0)。用于生产环境。
latest会变动 — 始终指向最新发行版本。仅为方便使用。

该镜像为单架构(linux/amd64),使用 cosign 签名,并附带 CycloneDX SBOM。运行前,请参阅验证容器镜像检查签名和来源证明。

2. 获取访问令牌
  1. 登录你的 Forgejo 实例
  2. 前往 设置 → 应用程序 → 访问令牌
  3. 创建一个具有所需权限(repo、issue 等)的新令牌
3. 配置 AI 助手

将以下内容添加到 MCP 配置文件中:

stdio 模式(最常见):

{
  "mcpServers": {
    "forgejo": {
      "command": "forgejo-mcp",
      "args": [
        "--transport", "stdio",
        "--url", "https://your-forgejo-instance.org"
      ],
      "env": {
        "FORGEJO_ACCESS_TOKEN": "<your personal access token>",
        "FORGEJO_USER_AGENT": "forgejo-mcp/1.0.0"
      }
    }
  }
}

可流式传输的 HTTP 模式(推荐用于远程访问/Claude.ai):

{
  "mcpServers": {
    "forgejo": {
      "url": "http://localhost:8080/mcp"
    }
  }
}

使用可流式传输的 HTTP 模式时,请先启动服务:

forgejo-mcp --transport http --url https://your-forgejo-instance.org --token <your-token>

多租户 HTTP 模式(可选):

你可以运行单个集中式 forgejo-mcp 实例,让每个客户端通过标准 HTTP Authorization 标头提供自己的令牌。这样便可通过一个服务为多个用户或 Agent 提供服务。

  1. 启动服务(可以不设置全局令牌):
    forgejo-mcp --transport http --url https://your-forgejo-instance.org
    
  2. 客户端在每个请求中都包含自己的令牌:
    • Authorization: token <token>(Forgejo 风格)
    • Authorization: Bearer <token>(OAuth2/MCP 风格)
    • 注意:方案名称(token 或 Bearer)不区分大小写。

请参阅 demos/multi-tenant-http.md,了解可直接复制粘贴使用的操作指南。

将服务暴露到网络

默认情况下,sse 和 http 传输仅监听回环地址,因此这台机器之外的任何设备都无法访问它们。这符合 Model Context Protocol 对本地运行服务的指导原则,也是行为上的一项变更:早期版本会监听所有网络接口。默认值 localhost 会绑定两个回环地址族,因此客户端将 localhost 解析为 127.0.0.1 或 ::1 时都可以连接。如果任一地址族上的端口已被占用,服务将拒绝启动,而不会仅在另一个地址族上提供服务,导致部分客户端连接到占用该端口的其他程序。若机器完全无法使用某个地址族(例如 IPv6 已禁用),则会跳过该地址族,并在启动日志中说明。

请传入地址而非名称,例如 --host 127.0.0.1 或 --host ::1,以仅绑定对应的地址族。当另一个地址族在这台机器上不可用,但服务无法将其识别为“不存在”时,请使用此方式;否则服务会拒绝启动。

如果你在容器中运行服务,或为远程客户端提供服务,现在必须明确指定。 默认设置不会接受来自本机之外的连接;在容器中运行时,也不会接受来自容器之外的连接:

  • 将 --host 设置为网络可访问的地址(容器中通常使用 0.0.0.0,以监听所有接口);
  • 并将 --allowed-hosts 设置为客户端使用的主机名。此项为必需,而非可选:如果网络可访问的地址未配置此项,服务会拒绝启动,而不是启动后拒绝所有请求。

如果请求的 Host 标头不在你声明的列表中,服务将返回 403 Forbidden。在回环监听器上始终接受回环名称,因此声明代理的主机名不会妨碍你从同一台机器直接连接。

浏览器客户端。 除非请求中包含的 Origin 已列在 --allowed-origins 中,否则该请求将被拒绝;该选项默认值为空。系统会完整比对来源,包括方案、主机和端口,因为 Origin 中的端口属于发起请求的页面,而非本服务。完全不带 Origin 标头的请求不受影响,这也是通常情况:MCP 客户端不是浏览器。

sse 和 http 上的身份验证

在这些传输方式下,每个请求都必须携带自己的 Authorization 标头。不带标头的请求会被拒绝,并返回 401 Unauthorized,而不会使用服务器自身配置的令牌来处理。这正是上述多租户设置所预期的行为,也因此可以安全地公开该设置。

在 stdio 上,若标头缺失,仍会像以前一样使用已配置的令牌。stdio 不会有任何变化。

如果你通过 sse 或 http 运行单用户部署,并希望恢复旧行为,--allow-operator-token-fallback 可以实现这一点。使用前请先了解其含义:任何能连接到该端口的客户端,无需提供凭据,就能以你的令牌所代表的身份行事。启用此选项时,启动日志会醒目地提示这一点。

SSE 模式下(旧版基于 HTTP):

{
  "mcpServers": {
    "forgejo": {
      "url": "http://localhost:8080/sse"
    }
  }
}

使用 SSE 模式时,请先启动服务器:

forgejo-mcp --transport sse --url https://your-forgejo-instance.org --token <your-token>
通知流与心跳

在 sse 和 http 上,服务器会保持一个流处于打开状态,用于传递自身消息(通知、进度和服务器请求)。会话空闲时,该流不会传输任何内容;静默时间过长时,客户端、代理和 NAT 设备会断开流;有一个 MCP 客户端会在六分钟后中止连接。因此,服务器会按 --heartbeat 指定的间隔向流中写入 JSON-RPC ping,默认间隔为 30s。设置 --heartbeat 0 可恢复此前的静默行为。

作为 OAuth 资源服务器进行远程操作

使用 --auth-mode resource-server 时,http 传输会按照 MCP 授权规范的定义,成为 OAuth 2.0 资源服务器。客户端不再发送 Forgejo 令牌,而是登录你选择的 OpenID Connect 提供商,并发送其 JWT 访问令牌。服务器会验证该令牌,为调用方签发一个有效期为五分钟的 JWT,并通过 Forgejo 16 Authorized Integration 将其提供给 Forgejo。任何位置都不会配置 Forgejo 令牌,调用方的访问令牌也绝不会传给 Forgejo。

此模式需要:

  • Forgejo 16.0 或更高版本;
  • 能签发 JWT 访问令牌且可添加按用户设置的声明的 OpenID Connect 提供商(默认声明为 forgejo_aud),该声明用于保存此用户的 Authorized Integration 的受众;
  • 服务器的公开 HTTPS 来源,因为 Forgejo 会从中获取服务器的颁发者文档;
  • 一个签名密钥文件:EC P-256 或 P-384、Ed25519,或至少 2048 位的 RSA。
forgejo-mcp --transport http --url https://forgejo.example.org \
  --host 0.0.0.0 --allowed-hosts mcp.example.org \
  --auth-mode resource-server \
  --authorization-server https://id.example.org \
  --resource https://mcp.example.org/mcp \
  --forgejo-jwt-issuer https://mcp.example.org/issuer \
  --forgejo-jwt-signing-key-file /run/credentials/forgejo-mcp.service/signing-key

此模式为可选启用:未指定 --auth-mode 时,上述行为都与之前一致。在此模式下,服务器只响应 /mcp、受保护资源元数据,以及颁发者路径下的发现文档和密钥集。若配置无法安全提供服务,服务器会拒绝启动,并指出需要修正的设置。签名密钥代表所有信任该颁发者的用户的集成行事,因此必须像保护它所取代的 Forgejo 令牌一样妥善保管。

  • 运维指南:身份提供商要求、部署顺序、代理规则、密钥轮换,以及完整的 Zitadel 示例。
  • 用户指南:创建 Authorized Integration、必需的 sub 声明规则,以及配置 MCP 客户端。
4. 开始使用

打开兼容 MCP 的 AI 助手并尝试:

List all my repositories

可用工具

工具描述
用户
get_my_user_info获取已认证用户的信息
check_notifications检查并列出用户通知
get_notification_thread获取单个通知会话的详细信息
mark_notification_read将单个通知会话标记为已读
mark_all_notifications_read确认所有通知
list_repo_notifications筛选范围限定为单个仓库的通知
mark_repo_notifications_read将特定仓库中的所有通知标记为已读
search_users搜索用户
仓库
list_my_repos列出你拥有的所有仓库
get_repo根据所有者和名称获取单个仓库
create_repo创建新仓库
fork_repo派生仓库
edit_repo编辑仓库设置。只会更改你传入的字段;未提供的字段保持不变。未提供任何字段时会报错。
search_repos搜索仓库
主题
list_repo_topics列出仓库的主题。受 page(默认值为 1)和 limit(默认值为 100)限制;返回 {topics, page, limit, count}。
set_repo_topics替换所有主题。topics 是必填的逗号分隔字符串;空字符串会清除主题。无效名称会在发送请求前被拒绝。
add_repo_topic添加一个主题
delete_repo_topic删除一个主题
分支
list_branches列出仓库中的所有分支
create_branch创建新分支
delete_branch删除分支
分支保护
list_branch_protections列出仓库的分支保护规则。受 page(从 1 开始)和 limit(每页大小)限制;响应会回显 page/limit,方便调用方获取下一页。
get_branch_protection根据 rule 名称获取单条规则
create_branch_protection创建规则。需要提供 branch_name;status_check_contexts 是必需检查项的逗号分隔列表(例如 "ci/build,ci/test")。
edit_branch_protection根据 rule 名称编辑规则。只会更改你传入的字段;未提供的字段保持不变。
delete_branch_protection根据 rule 名称删除规则
Webhook
list_repo_hooks列出仓库 Webhook。受 page(默认值为 1)和 limit(默认值为 30,服务器不设上限)限制;当 Forgejo 返回 X-Total-Count 时会返回 total_count。
get_repo_hook根据 ID 获取单个仓库 Webhook
create_repo_hook创建仓库 Webhook。接受密钥,但响应中绝不会回显该密钥。
edit_repo_hook编辑仓库 Webhook。只会更改你传入的字段;未提供的字段保持不变。
delete_repo_hook根据 ID 删除仓库 Webhook
test_repo_hook触发仓库 Webhook 的测试投递——警告:会触发实际的 HTTP 投递
文件
get_file_content获取文件内容。可选的 start_line/end_line 用于请求从 1 开始计数、包含首尾行的行范围(超出文件范围时会截断;with_metadata=true 时会忽略)。
list_repo_contents列出指定路径下的文件和目录。path="" 会列出仓库根目录。只返回一层;如需完整目录树,请使用 get_repo_tree 并设置 recursive=true。
get_repo_tree获取 Git 树。recursive=true 会在一个响应中返回完整文件树(受服务器树端点大小上限限制);recursive=false(默认值)只返回一层。
create_file创建新文件。必须且只能提供纯文本 content 或二进制安全的 content_base64(严格标准 Base64)之一。
update_file更新现有文件。必须且只能提供纯文本 content 或二进制安全的 content_base64(严格标准 Base64)之一。
delete_file删除文件
change_files在一次原生 Forgejo 提交中,以原子方式创建、更新和删除多个文件;创建/更新操作接受 content 或 content_base64。
提交
list_repo_commits列出仓库中的提交
get_commit_statuses列出完整 40 个字符 SHA 的各上下文提交状态。受 page(默认值为 1)和 limit(默认值为 30,最大值为 50)限制;返回 {sha, statuses, page, limit, count, total_count}——只有在 Forgejo 返回 X-Total-Count 时才会包含 total_count。合并后的汇总状态仍属于提交状态资源。不是 Actions 运行(请使用 list_workflow_runs)。
议题
list_repo_issues列出仓库中的议题(page/limit)。可选的 sort 可在服务器端排序:relevance、latest、oldest、recentupdate、leastupdate、mostcomment、leastcomment、nearduedate、farduedate(最后两个表示截止日期的排序方向)。
search_issues搜索某个所有者的所有仓库中的议题(page/limit);返回 {issues,page,limit,count,has_next,total_count}——只有在 Forgejo 返回 X-Total-Count 时才会包含 total_count
get_issue_by_index获取特定议题
create_issue创建新议题。可选的 labels(逗号分隔的名称或 ID)、assignees(逗号分隔的用户名)和 milestone(数字 ID)会随创建议题的同一请求一起应用。
add_issue_labels为议题添加标签。labels 接受逗号分隔的标签名称或数字 ID;无法识别名称时会报错,且不会应用任何标签。
remove_issue_labels从议题中移除标签。labels 接受逗号分隔的标签名称或数字 ID。
update_issue更新现有议题(需要数字里程碑 ID)。due_date 用于设置截止日期(RFC3339);clear_due_date=true 用于移除截止日期。两者不能同时使用——同时设置会报错,两者都不提供则截止日期保持不变。set_labels 会替换议题的整个标签集合(名称或 ID);空字符串会清除所有标签。
issue_state_change打开或关闭议题
list_issue_dependencies列出给定议题所依赖的议题。受 page(从 1 开始)和 limit(每页大小)限制;响应会回显 page/limit,方便调用方获取下一页。
list_issue_dependents列出依赖给定议题的议题。受 page(从 1 开始)和 limit(每页大小)限制;响应会回显 page/limit,方便调用方获取下一页。
add_issue_dependency使一个议题依赖另一个议题。依赖项可以位于不同的仓库中:可选的 depends_on_owner/depends_on_repo 默认使用 owner/repo。
remove_issue_dependency移除议题的一项依赖。对于跨仓库依赖,可选的 dependency_owner/dependency_repo 默认使用 owner/repo。
list_repo_milestones列出里程碑及其 ID(与 update_issue 配合使用)
list_repo_labels列出标签及其 ID。对于组织拥有的仓库,会合并组织级标签(设置 include_org_labels=false 可选择不包含)。每个条目都包含 scope 字段("repo" 或 "org"),以及 exclusive 和 is_archived(值为 false 时也会返回,不会省略)。
list_org_labels列出组织级标签及其 ID。分配工具接受标签名称,因此此工具用于查找标签,以及处理名称同时存在于仓库和组织范围内的少数情况。每个条目都包含 exclusive 和 is_archived。
create_repo_label创建仓库标签(name、6 位十六进制的 color,以及可选的 description、exclusive、is_archived)。exclusive=true 时名称必须带有范围前缀(包含 /,且 / 不能位于首尾)。返回数字 id;add_issue_labels 也接受名称。
edit_repo_label编辑仓库标签(PATCH——只更改提供的字段:name、color、description、exclusive、is_archived)。仅编辑 exclusive 时不会重新读取当前名称。
delete_repo_label删除仓库标签。默认情况下,如果标签正在使用中(会报告数量),则拒绝删除;设置 delete_mode=force 可强制删除。
get_repo_label根据数字 id 获取单个仓库标签。包含 exclusive 和 is_archived。
create_org_label创建组织级标签。字段与 create_repo_label 相同。
edit_org_label编辑组织级标签(采用 PATCH 语义,包括 exclusive 和 is_archived)。
delete_org_label删除组织级标签。使用中检查会统计可见组织仓库中的使用情况(尽力而为);delete_mode=force 可强制删除。
get_org_label根据数字 id 获取单个组织级标签。包含 exclusive 和 is_archived。
评论
list_issue_comments列出议题或 PR 下的评论
get_issue_comment获取特定评论
create_issue_comment在议题或 PR 下添加评论
edit_issue_comment编辑评论
delete_issue_comment删除评论
拉取请求
list_repo_pull_requests列出仓库中的拉取请求
get_pull_request_by_index获取特定拉取请求
create_pull_request创建新的拉取请求
update_pull_request更新现有拉取请求
list_pull_reviews列出拉取请求的评审
get_pull_review获取特定拉取请求评审
list_pull_review_comments列出拉取请求评审中的评论
list_pull_request_files列出拉取请求中更改的文件(分页)。将返回的文件名作为 get_pull_request_diff 的 file_path 参数。
get_pull_request_diff获取拉取请求的统一差异。可选的 file_path 仅返回该文件的差异块(可匹配重命名前或重命名后的路径)。
merge_pull_request合并拉取请求(style:merge/rebase/rebase-merge/squash;可选 title/message/delete-branch/force-merge/wait-for-checks)。
create_pull_review在拉取请求上创建评审(state:APPROVED/REQUEST_CHANGES/COMMENT),可选添加行内评论。
submit_pull_review提交待处理的拉取请求评审
dismiss_pull_review驳回拉取请求评审
delete_pull_review删除待处理的拉取请求评审
create_review_requests请求特定用户或团队进行评审
delete_review_requests取消待处理的评审请求
软件包
list_packages列出用户或组织的软件包版本(每个版本一行)。可选的 type 和 q。通过 page/limit 在服务器端分页(默认值为 30,最大值为 50)。封装格式为 {packages, page, limit, count, has_next, total_count?}。缺少所有者时会报错,而非返回空列表
get_package获取单个软件包版本。不嵌入所有者/创建者用户信息
delete_package删除单个软件包版本(而非该名称的所有版本)。不进行预检。4xx/5xx 响应仍会作为错误处理
list_package_files列出单个软件包版本的文件。通过 page/limit 在客户端分页(默认值为 30,最大值为 50);封装格式为 {files, page, limit, count, has_next, total_count}(total_count 是获取的列表长度)
Actions
dispatch_workflow通过 workflow_dispatch 事件触发工作流运行
list_workflow_runs列出工作流运行,可按状态、事件、运行编号或 SHA 筛选
get_workflow_run根据数据库 ID 获取特定工作流运行的详细信息
list_action_run_jobs列出 Forgejo v16+ 工作流运行的任务,可在客户端设置 page 和 limit 的范围
get_action_job_logs读取 Forgejo v16+ 任务日志,支持通过 offset 和 max_bytes 限制进行续读;默认读取末尾内容
cancel_workflow_run取消待处理或正在运行的工作流运行。已结束的运行也会返回成功(HTTP 204);运行状态不会更改
delete_workflow_run删除已完成的工作流运行。正在运行的任务会导致 API 错误。此操作会移除运行及其任务日志;Forgejo 会将该运行的构件标记为已删除
list_action_run_artifacts列出工作流运行的构件。通过 page/limit 在服务器端分页(默认值为 30,最大值为 50);可选的 name 筛选器。封装格式为 {artifacts, page, limit, count, total_count?}
get_action_artifact获取单个 Actions 构件的元数据。不下载 zip 文件
list_repo_action_secrets列出仓库的 Actions 密钥(仅名称;Forgejo 绝不返回密钥值)。通过 page/limit 在客户端分页(默认值为 30,最大值为 50)
create_or_update_repo_action_secret创建或更新仓库 Actions 密钥。同名的现有密钥会被覆盖;不会回显密钥值
delete_repo_action_secret删除仓库 Actions 密钥
list_org_action_secrets列出组织的 Actions 密钥(仅名称;Forgejo 绝不返回密钥值)。通过 page/limit 在客户端分页(默认值为 30,最大值为 50)
create_or_update_org_action_secret创建或更新组织 Actions 密钥。同名的现有密钥会被覆盖;不会回显密钥值
delete_org_action_secret删除组织 Actions 密钥
组织
list_my_orgs列出我的组织
list_user_orgs列出用户的组织
get_org获取组织详细信息
create_org创建组织
edit_org编辑组织设置
delete_org删除组织——具有破坏性且不可逆:所有仓库、团队和数据都将被永久移除
list_org_members列出组织成员
check_org_membership检查用户是否为组织成员
remove_org_member将成员从组织中移除
list_org_teams列出组织中的团队
search_org_teams搜索组织中的团队
create_org_team在组织中创建团队
add_team_member将用户添加到团队
remove_team_member将用户从团队中移除
add_team_repo将仓库添加到团队
remove_team_repo将仓库从团队中移除
时间跟踪
list_issue_tracked_times列出议题或 PR 上记录的时间条目
list_repo_tracked_times列出仓库中记录的时间条目
list_my_tracked_times列出你自己记录的时间条目
add_issue_time在议题或 PR 上记录时间(接受秒数或类似 15m 的时长)
reset_issue_time删除议题或 PR 上的所有时间记录(具有破坏性)
delete_issue_time_entry根据 ID 删除单条时间记录
start_issue_stopwatch在议题或 PR 上启动秒表
stop_issue_stopwatch停止运行中的秒表并记录经过的时间
cancel_issue_stopwatch取消运行中的秒表,不记录时间
list_my_stopwatches列出当前运行中的秒表
附件
list_issue_attachments列出议题或 PR 中的附件
get_issue_attachment获取单个议题/PR 附件的元数据
download_issue_attachment下载议题/PR 附件(小于 1 MiB 时内联返回;否则返回元数据和 URL)
create_issue_attachment为议题或 PR 上传新附件(Base64 内容或 MCP 主机上的文件路径)
edit_issue_attachment重命名议题/PR 附件
delete_issue_attachment删除议题/PR 附件
list_comment_attachments列出议题/PR 评论中的附件
get_comment_attachment获取单个评论附件的元数据
download_comment_attachment下载评论附件(小于 1 MiB 时内联返回;否则返回元数据和 URL)
create_comment_attachment为议题/PR 评论上传新附件(Base64 内容或 MCP 主机上的文件路径)
edit_comment_attachment重命名评论附件
delete_comment_attachment删除评论附件
发行版
list_releases列出仓库发行版(page/limit 加客户端 state 筛选:all/draft/prerelease/published)
get_release_by_id根据数字 ID 获取发行版
get_release_by_tag根据标签名称获取发行版
get_latest_release获取最新的非草稿、非预发布发行版
create_release创建新发行版(传入 target_commitish 还会创建标签)
edit_release更新现有发行版的字段(只会发送提供的字段)
delete_release根据数字 ID 删除发行版——具有破坏性
delete_release_by_tag根据标签名称删除发行版——具有破坏性,请核实标签
list_release_attachments列出发行版中的附件(完整获取响应后在客户端切片)
get_release_attachment获取单个发行版附件的元数据
download_release_attachment下载发行版附件(小于 1 MiB 时内联返回;否则返回元数据和 URL)
create_release_attachment为发行版上传新附件(Base64 内容或 MCP 主机上的文件路径)
edit_release_attachment重命名发行版附件
delete_release_attachment删除发行版附件——具有破坏性
Wiki
list_wiki_pages使用 page/limit 列出页面;返回 has_next,并在 Forgejo 返回 X-Total-Count 时返回 total_count。total_count 统计上游原始 Wiki 树条目数,因此对于含有子目录的 Wiki,该数值可能大于列出的页面数;这是上限,而非精确总数。
get_wiki_page读取解码后的 Markdown;可选的 start_line/end_line,始终返回 total_lines。
get_wiki_revisions使用 page/limit 列出修订历史;返回 has_next 和 total_count,即响应正文报告的页面总修订数。
create_wiki_page创建页面并返回服务器规范化后的 page_name;以斜杠分隔的标题是一种扁平子页面命名约定(没有层级,也不会自动创建父页面),若标题已存在则会覆盖。
update_wiki_page根据规范化后的 page_name 更新内容/标题;以最后写入者为准。
delete_wiki_page根据规范化后的 page_name 删除页面。
服务器
get_forgejo_mcp_server_version获取 MCP 服务版本

资源

MCP 资源模板使用 forgejo:// 方案,将 Forgejo 实体公开为可通过 URI 访问的资源。该 URI 方案可跨实例使用——相同的 URI 格式适用于任何 Forgejo 实例——且不会与 Forgejo 网页链接冲突。支持 resources/templates/list 和 resources/read 的客户端(Claude Code、Claude Desktop、Codex、Cursor)可以直接解析这些 URI。不支持资源模板的客户端仍可使用上述工具,不会移除任何功能。

资源不会取代任何 MCP 工具——所有现有的 list/get 工具仍然可用;资源是额外提供的、可通过 URI 访问的读取接口,旨在支持从大模型上下文中自动解析,以及对提交等不可变实体进行内容寻址缓存。

包含列表(issue、pr)的资源会将嵌入数组限制为 30 项。截断时,JSON 负载会包含一个标记,指出调用方应使用对应的 list_* 工具获取完整列表。

**何时使用资源,何时使用工具:**手头已有特定的 sha 或索引时,优先使用资源;需要列出或搜索时,优先使用工具。

URI 模板实体说明
forgejo://owner/{owner}application/json通过登录名指定的用户或组织资料;先解析用户,找不到时再解析组织。
forgejo://repo/{owner}/{repo}application/json仓库概览:身份信息及计数,不包含嵌入式列表。
forgejo://repo/{owner}/{repo}/commit/{sha}Commit metadata每个 sha 的内容不可变。返回 JSON 和 Markdown 辅助内容。sha 必须是 40 位十六进制字符。
forgejo://repo/{owner}/{repo}/commit/{sha}/statusapplication/json某个 sha 的综合 CI 状态:汇总状态及数量受限的各上下文状态(最多 30 条,哨兵名称为工具 get_commit_statuses)。
forgejo://repo/{owner}/{repo}/issue/{index}application/json(附带 text/markdown 辅助内容)Issue 元数据、渲染后的正文及数量受限的近期评论(最多 30 条,哨兵名称为 list_issue_comments)。
forgejo://repo/{owner}/{repo}/issues{?state,labels,page,limit}application/json数量受限的 Issue 列表,以行形式返回:索引、标题、状态、作者、标签、受理人、里程碑、评论数、时间戳、截止日期,且不包含正文。state ∈ {open, closed, all}(默认为 open);labels 以逗号分隔;最多 30 条,哨兵名称为 list_repo_issues。如需正文,请读取单个 Issue 资源。
forgejo://repo/{owner}/{repo}/{kind}/{index}/comment/{id}application/json(附带 text/markdown 辅助内容)按 id 获取单条评论;kind ∈ {issue, pr}。
forgejo://repo/{owner}/{repo}/{kind}/{index}/comments{?page,limit}application/json数量受限的评论串,包含完整正文(单个 Issue 资源会将正文截取至 200 个字符);kind ∈ {issue, pr};最多 30 条,哨兵名称为 list_issue_comments。
forgejo://repo/{owner}/{repo}/pr/{index}application/json(附带 text/markdown 辅助内容)PR 元数据、head/base 引用、可合并状态、数量受限的近期评论(最多 30 条,哨兵名称为 list_issue_comments)和评审(最多 30 条,哨兵名称为 list_pull_reviews)。
forgejo://repo/{owner}/{repo}/branch_protectionsapplication/json数量受限的分支保护规则列表。
forgejo://repo/{owner}/{repo}/branch_protection/{rule}application/json单条分支保护规则。规则名称是分支模式,因此字面量 / 需编码为 %2F,空格需编码为 %20(release%2Fv1);原始 / 无法解析。
forgejo://repo/{owner}/{repo}/hooksapplication/json数量受限的仓库 Webhook 列表(最多 30 条,哨兵名称为 list_repo_hooks)。绝不会返回密钥。
forgejo://repo/{owner}/{repo}/hook/{id}application/json按 id 获取单个仓库 Webhook。绝不会返回密钥。
forgejo://repo/{owner}/{repo}/label/{id}application/json按数字 id 获取单个仓库标签。
forgejo://repo/{owner}/{repo}/labels{?page,limit}application/json数量受限的仓库标签列表(最多 30 条,哨兵名称为 list_repo_labels)。
forgejo://org/{org}/labels{?page,limit}application/json数量受限的组织级标签列表(最多 30 条,哨兵名称为 list_org_labels)。
forgejo://repo/{owner}/{repo}/wiki/{pageName}application/json(附带 text/markdown 辅助内容)Wiki 页面,包含数量受限的修订记录;Markdown 上限为 1 MiB。请使用返回的规范化 page_name;在 URI 中将字面量 / 编码为 %2F,空格编码为 %20(不要对已规范化的名称重复编码)。

以斜杠分隔的标题(如 Guides/Setup)适合作为子页面命名约定, 但 Forgejo 会将页面存储在扁平列表中:它既不会自动创建 Guides,也不会记录父子关系。若读者需要父页面,请单独创建;后续调用务必使用创建或列表操作返回的规范化 page_name。 此处记录的 Wiki REST 行为已在 Forgejo 15.0.4+gitea-1.22.0 上进行实时测试;完整的 MCP 演示也已在 16.0.0+gitea-1.22.0 上成功重放。这是已测试的范围,并不保证适用于所有中间版本 或采用不同代理配置的部署。

客户端兼容性
客户端resources/templates/listresources/read
Claude Code支持支持
Claude Desktop支持支持
Codex支持支持
Cursor(当前版本)支持支持
较旧 / 精简客户端仅支持工具仅支持工具

演示

上述工具的端到端、可直接复制粘贴的操作指南按主题分组(标签、附件、时间跟踪、通知、组织、有界 I/O 代码审查、传输),请参阅 demos/。每个演示都将实际的 ./forgejo-mcp --cli 调用与其针对 codeberg.org 执行后生成的输出配对展示。

CLI 模式

无需运行 MCP 服务,即可直接从命令行调用任何工具。这适用于 shell 脚本、CI/CD 流水线和 Claude Code 技能。

# List all available tools (grouped by domain)
forgejo-mcp --cli list

# Invoke a tool with JSON arguments
forgejo-mcp --cli get_issue_by_index --args '{"owner":"goern","repo":"forgejo-mcp","index":1}'

# Pipe JSON arguments via stdin
echo '{"owner":"goern","repo":"forgejo-mcp"}' | forgejo-mcp --cli list_repo_issues

# List recent workflow runs (text output)
forgejo-mcp --cli list_workflow_runs \
  --args '{"owner":"goern","repo":"forgejo-mcp"}' \
  --output=text

# List only failed runs
forgejo-mcp --cli list_workflow_runs \
  --args '{"owner":"goern","repo":"forgejo-mcp","status":"failure"}' \
  --output=text

# Run-scoped tools (list_action_run_jobs, cancel_workflow_run, ...) take the
# database run ID printed by list_workflow_runs (e.g. #2671), not the per-repo run
# number in the web URL (.../actions/runs/222). To map a web-URL number to a
# run ID, add "run_number":222 to the list_workflow_runs args.

# List jobs and inspect the tail of a failed job (Forgejo v16+)
forgejo-mcp --cli list_action_run_jobs \
  --args '{"owner":"goern","repo":"forgejo-mcp","run_id":123}' \
  --output=text
forgejo-mcp --cli get_action_job_logs \
  --args '{"owner":"goern","repo":"forgejo-mcp","job_id":456,"max_bytes":32768}' \
  --output=text

# Forgejo's run-wide ZIP log endpoint has no Range support. Enumerate jobs and
# fetch their bounded plaintext logs instead.

# List artifacts of a run, then read one artifact's metadata (no zip download)
forgejo-mcp --cli list_action_run_artifacts \
  --args '{"owner":"goern","repo":"forgejo-mcp","run_id":123,"limit":30}' \
  --output=text
forgejo-mcp --cli get_action_artifact \
  --args '{"owner":"goern","repo":"forgejo-mcp","artifact_id":789}' \
  --output=text

# List package versions for an owner, then inspect one version's files
forgejo-mcp --cli list_packages \
  --args '{"owner":"OWNER","type":"container","limit":30}' \
  --output=text
forgejo-mcp --cli get_package \
  --args '{"owner":"OWNER","type":"container","name":"app","version":"1.0.0"}' \
  --output=text
forgejo-mcp --cli list_package_files \
  --args '{"owner":"OWNER","type":"container","name":"app","version":"1.0.0"}' \
  --output=text

# delete_package removes one version. Do not invoke it against a registry you do not own.

# cancel_workflow_run is 204 even when the run already finished.
# delete_workflow_run only succeeds for a completed run; a live run is an error.

# Show a tool's parameters
forgejo-mcp --cli create_issue --help

# Control output format (json or text)
forgejo-mcp --cli list --output=json
forgejo-mcp --cli get_my_user_info --args '{}' --output=text

CLI 模式要求与 MCP 服务模式使用相同的 FORGEJO_URL 和 FORGEJO_ACCESS_TOKEN 配置。默认情况下,工具结果以 JSON 格式写入 stdout;错误会写入 stderr,并以非零退出代码结束。

配置选项

你可以通过命令行参数或环境变量配置服务:

CLI 参数环境变量说明
--urlFORGEJO_URLForgejo 实例的 URL
--tokenFORGEJO_ACCESS_TOKEN你的个人访问令牌
--debugFORGEJO_DEBUG启用调试模式
--transport-传输模式:stdio、sse 或 http
--sse-port-SSE 模式的端口(默认:8080)
--http-port-可流式传输的 HTTP 模式的端口(默认:8080)
--hostFORGEJO_MCP_HOSTsse 和 http 传输绑定到的地址(默认:localhost,仅本机可访问,同时绑定 127.0.0.1 和 ::1;传入其中一个地址即可仅绑定对应地址族)
--allowed-hostsFORGEJO_MCP_ALLOWED_HOSTS以逗号分隔的 Host 名称列表,本服务会响应这些名称;当 --host 不是环回地址时必须设置
--allowed-originsFORGEJO_MCP_ALLOWED_ORIGINS允许发送 Origin 标头的 Web 来源,以完整来源表示(https://console.example.org)。默认为空
--allow-operator-token-fallbackFORGEJO_MCP_ALLOW_OPERATOR_TOKEN_FALLBACK在 sse/http 模式下,使用本服务自身的令牌处理未带 Authorization 标头的请求。默认关闭
--heartbeatFORGEJO_MCP_HEARTBEATsse/http 向通知流写入 JSON-RPC ping 的间隔,以便客户端和具有空闲超时的代理保持连接(默认:30s;0 表示不发送)
--auth-modeFORGEJO_MCP_AUTH_MODEpassthrough(默认)或 resource-server;参见作为 OAuth 资源服务器进行远程操作
--authorization-serverFORGEJO_MCP_AUTHORIZATION_SERVERresource-server 模式:OpenID Connect 提供方的签发者 URL,逐字节比较
--resourceFORGEJO_MCP_RESOURCEresource-server 模式:MCP 端点的规范 URI,例如 https://mcp.example.org/mcp;其路径必须为 /mcp
--resource-audienceFORGEJO_MCP_RESOURCE_AUDIENCEresource-server 模式:访问令牌的 aud 必须包含的值(默认:--resource 的值)
--scopes-supportedFORGEJO_MCP_SCOPES_SUPPORTEDresource-server 模式:元数据和 401 挑战中发布的、以空格分隔的范围(默认:不发布任何范围)
--forgejo-audience-claimFORGEJO_MCP_FORGEJO_AUDIENCE_CLAIMresource-server 模式:包含调用方 Forgejo Authorized Integration 受众的访问令牌声明(默认:forgejo_aud)
--forgejo-jwt-issuerFORGEJO_MCP_FORGEJO_JWT_ISSUERresource-server 模式:服务为 Forgejo 签署 JWT 时使用的签发者 URL,例如 https://mcp.example.org/issuer;必须使用 https,且末尾不能有斜杠
--forgejo-jwt-signing-key-fileFORGEJO_MCP_FORGEJO_JWT_SIGNING_KEY_FILEresource-server 模式:用于为 Forgejo 签署 JWT 的 PEM 私钥(EC P-256 或 P-384、Ed25519,或至少 2048 位的 RSA)
--forgejo-jwt-published-key-filesFORGEJO_MCP_FORGEJO_JWT_PUBLISHED_KEY_FILESresource-server 模式:以逗号分隔的 PEM 密钥列表,与签名密钥一同发布,用于密钥轮换
--cli-进入 CLI 模式,直接调用工具
--user-agentFORGEJO_USER_AGENTHTTP User-Agent 标头(默认:forgejo-mcp/<version>)
-FORGEJO_MCP_ALLOW_FILE_PATH_UPLOAD允许 file_path 附件上传读取主机文件系统(1/true/yes/on;默认关闭)
-FORGEJO_MCP_UPLOAD_ROOT将 file_path 上传限制在此目录内(默认:进程可读取的任意位置)

命令行参数优先于环境变量。

在 passthrough 模式下,不允许使用 resource-server 设置;因此,如果配置了这些设置却忘记指定 --auth-mode resource-server,服务将无法启动。

从主机文件系统上传附件

create_issue_attachment、create_comment_attachment 和 create_release_attachment 接受 base64 content,也接受运行 forgejo-mcp 的机器上的 file_path。使用路径形式可避免通过 MCP 传输扩展 大型发布制品的 base64 数据。

默认关闭,因为这会让 MCP 客户端所控制的任何对象都能读取服务器进程可读取的任意文件——遭到提示词注入的 Agent 可能会将 ~/.ssh/id_ed25519 上传为公开的发布资产。请谨慎启用,并尽量限制其访问范围:

export FORGEJO_MCP_ALLOW_FILE_PATH_UPLOAD=1
export FORGEJO_MCP_UPLOAD_ROOT=/home/you/build/dist   # optional but recommended

设置 FORGEJO_MCP_UPLOAD_ROOT 后,若路径解析到该目录之外——无论是因为路径为绝对路径、包含 ..,还是经过符号链接——都会在读取任何内容之前被拒绝。base64 content 上传不受这两个变量的影响。

验证发布版本

发布归档附带 checksums.txt 文件,以及可选的 checksums.txt.sig 文件;后者由 cosign 使用项目的发布密钥对生成。验证这两个文件,即可确认你下载的二进制文件由项目的发布流水线构建,且在传输过程中未遭篡改。

注意: cosign 签名于 2026 年年中引入。签名机制接入前发布的标签不会附带 .sig 文件——验证仅适用于 v2.23.x 及之后的版本,且仅限发布时已配置 COSIGN_PRIVATE_KEY 密钥的情况。

1. 安装 cosign

请按照适用于你平台的上游 cosign 安装指南 进行安装。快速安装方式:

# Linux/macOS — pinned binary
COSIGN_VERSION=v2.4.1
curl -sSfL -o /usr/local/bin/cosign \
  "https://github.com/sigstore/cosign/releases/download/${COSIGN_VERSION}/cosign-linux-amd64"
chmod +x /usr/local/bin/cosign

# macOS via Homebrew
brew install cosign

# Arch Linux
sudo pacman -S cosign

确认安装:

cosign version
2. 获取公钥

cosign 公钥的权威来源是 op1st-emea-b4mad GitOps 仓库——它也是在运行发布流水线的 op1st-pipelines 命名空间中配置 cosign-signing-key-artifacts Secret 的唯一可信来源。这是用于签署发布文件(checksums.txt.sig)的制品签名密钥,与下文第 5–6 节中使用的镜像签名密钥 cosign-signing-key-images.pub 不同。获取方式有两种:

分支最新版本(实时更新,跟随未来的密钥轮换):

curl -sSfL -o cosign.pub \
  https://codeberg.org/operate-first/op1st-emea-b4mad/raw/branch/main/manifests/applications/op1st-pipelines-tokens/cosign-signing-key-artifacts.pub

固定到特定提交(可检测篡改,推荐用于 CI/脚本):

curl -sSfL -o cosign.pub \
  https://codeberg.org/operate-first/op1st-emea-b4mad/raw/commit/cd3715fa8283a2069a2e3e299744a7b55b1b0260/manifests/applications/op1st-pipelines-tokens/cosign-signing-key-artifacts.pub

固定到提交的永久链接会将文件内容的哈希值纳入 URL——如果有人重写该提交中的文件,下载就会失败或内容不匹配。在自动化中采用此密钥之前,请固定到你信任的最新提交。

3. 下载发布制品

选择你安装的标签(例如 v3.1.0),并下载校验和文件、其签名和二进制归档:

TAG=v3.1.0
VERSION="${TAG#v}"
BASE="https://git.b4mad.industries/agentic-forges/forgejo-mcp/releases/download/${TAG}"

curl -sSfLO "${BASE}/forgejo-mcp_${VERSION}_checksums.txt"
curl -sSfLO "${BASE}/forgejo-mcp_${VERSION}_checksums.txt.sig"
curl -sSfLO "${BASE}/forgejo-mcp_${VERSION}_linux_amd64.tar.gz"   # adjust os/arch
4. 验证签名,然后验证校验和

Cosign 会验证 checksums.txt 是否由持有与 cosign.pub 匹配的私钥的人签名。信任校验和文件后,再通过普通的 sha256sum -c 检查确认归档的完整性。

# Verify checksums.txt against the signature.
cosign verify-blob \
  --key cosign.pub \
  --signature "forgejo-mcp_${VERSION}_checksums.txt.sig" \
  "forgejo-mcp_${VERSION}_checksums.txt"
# Expected: "Verified OK"

# Verify the downloaded archive against the (now-trusted) checksums.
sha256sum --ignore-missing -c "forgejo-mcp_${VERSION}_checksums.txt"
# Expected: "<archive>: OK"

校验和链会传递覆盖 SBOM 和其他按归档提供的资产——验证一次 checksums.txt,即可验证其中列出的所有内容。

5. 验证 release-tools 镜像的 SLSA 来源证明

release-tools 容器镜像(供 Tekton 发布流水线内部使用)携带由 Tekton Chains 生成的 SLSA v1.0 来源证明。此证明将镜像摘要绑定到生成该镜像的确切 PipelineRun、git 提交和构建器身份,提供超出 cosign 签名本身可证明范围的供应链来源信息。

获取 cosign-signing-key-images 公钥(与上文的制品签名密钥不同):

curl -sSfL -o cosign-images.pub \
  https://codeberg.org/operate-first/op1st-emea-b4mad/raw/branch/main/manifests/applications/op1st-pipelines-tokens/cosign-signing-key-images.pub

针对指定镜像标签验证证明:

IMAGE_TAG=v1.0.0   # substitute the release-tools tag you want to verify
cosign verify-attestation \
  --type slsaprovenance \
  --key cosign-images.pub \
  "codeberg.org/operate-first/release-tools:${IMAGE_TAG}" \
  | jq .

成功运行后会打印解码后的 in-toto 声明(JSON)。请检查 predicate.buildDefinition.externalParameters.runSpec.params 是否引用预期的 git 修订版本,并确认 predicate.runDetails.builder.id 显示的是 Tekton Chains 构建器。

注意: SLSA 来源证明适用于 forgejo-mcp-46j(Tekton Chains 支持)合并后构建的发布版本。更早的镜像标签仅携带 cosign 签名;它们没有 verify-attestation 载荷。

6. 验证容器镜像

git.b4mad.industries/agentic-forges/forgejo-mcp 应用镜像(选项 D)由与 release-tools 镜像相同的 cosign-signing-key-images 密钥签名,附带 CycloneDX SBOM,并通过 Tekton Chains 获取 SLSA v1.0 来源证明。请重用上文获取的 cosign-images.pub 密钥。

验证签名:

IMAGE_TAG=v3.1.0   # substitute the release you are pulling
cosign verify \
  --key cosign-images.pub \
  "git.b4mad.industries/agentic-forges/forgejo-mcp:${IMAGE_TAG}" \
  | jq .

验证 SLSA 来源证明:

cosign verify-attestation \
  --type slsaprovenance \
  --key cosign-images.pub \
  "git.b4mad.industries/agentic-forges/forgejo-mcp:${IMAGE_TAG}" \
  | jq .

验证并下载已签名的 CycloneDX SBOM 证明:

cosign verify-attestation \
  --type cyclonedx \
  --key cosign-images.pub \
  "git.b4mad.industries/agentic-forges/forgejo-mcp:${IMAGE_TAG}" \
  | jq -r '.payload | @base64d | fromjson | .predicate' > forgejo-mcp.cdx.json

SBOM 现在是已签名的 in-toto 证明(cosign attest),而不是未签名的 attach sbom 制品。cosign download sbom 已不再适用。

由于发布流水线按摘要推送镜像,并且只有在签名和附加 SBOM 成功后才会提升 vX.Y.Z / latest 标签,因此你能拉取的任何标签都保证已签名。

验证故障排查
  • Error: no matching signatures — .sig 文件来自其他发布版本,或者 cosign.pub 密钥不正确。请从同一个标签重新下载两者。
  • Error: cannot read file: checksums.txt.sig — 发布版本早于启用 cosign 签名的时间,或者由于该次运行未设置密钥,签名被跳过。请退回到仅验证校验和(sha256sum -c);这仍能检测传输过程中的损坏,但无法检测篡改。
  • cosign.pub 与签名不匹配 — 请确认你获取的公钥来自包含发布时正在使用的密钥的提交。如不确定,请从 branch/main 获取。

故障排查

启用调试模式以查看详细日志:

forgejo-mcp --transport sse --url <url> --token <token> --debug

或者设置环境变量:

export FORGEJO_DEBUG=true

自定义 User-Agent:如果你的 Forgejo 实例或代理屏蔽默认的 go-http-client user agent,请设置自定义值:

# Via environment variable
export FORGEJO_USER_AGENT="forgejo-mcp/1.0.0"

# Or via CLI flag
forgejo-mcp --user-agent "forgejo-mcp/1.0.0" --transport sse --url <url> --token <token>

获取帮助

此仓库也镜像在 Radicle 上,这是一个点对点代码协作网络。使用以下命令克隆:

rad clone rad:z4PdPpsH9iJQcWfqTbxpFcWaZ9zPL

面向开发者

请参阅 DEVELOPER.md,了解构建说明、架构概览和贡献指南。

已知问题

  • 从旧的 Codeberg 模块路径安装 — go install codeberg.org/goern/forgejo-mcp/v2@latest 仍然可以解析,但会指向只读镜像,而该镜像落后于当前版本。请改用 git.b4mad.industries/agentic-forges/forgejo-mcp/v3@latest。

    此条目之前提到,在某个版本包含重命名后的 go.mod 之前,新路径无法安装。该版本现已发布 — 从 v3.0.0 起,声明的模块路径为 module git.b4mad.industries/agentic-forges/forgejo-mcp/v3 — 因此新路径可以正常安装。此前由 replace 指令导致的阻碍(#67) 也已解决;go.mod 中不再包含该指令。

贡献者

forgejo-mcp 的发展离不开每一位提交问题、编写代码、审查 PR 并推动项目向前发展的贡献者。感谢大家。🙏

代码贡献者
贡献者亮点
goern(Christoph Görn)项目创建者和维护者
Ronmi Ren联合创建者;SSE/HTTP 传输、问题阻塞、CI/CD 改进、徽标、Glama 规范
twstagg(Tristin Stagg)支持配置用户代理(PR #89)
mattdm(Matthew Miller)日志改进、FORGEJO_* 迁移、README、URL 重构
byteflavourcheck_notifications + 完整的通知管理 API(PR #84、#86);HTTP/SSE 传输的无状态逐请求身份验证(PR #138);NixOS 安装文档(PR #146);网络传输加固——默认绑定到回环地址、Host/Origin 检查、逐请求凭据(PR #545,合入为 #573;#586、#585、#589);OAuth 资源服务器模式——入站 JWT 验证和出站 Forgejo 16 Authorized Integration 签名,附带运维人员和用户指南以及 40 个带锚点的演示场景(PR #584,研究见 #582);开发环境 FORGEJO_MCP_EXEC(PR #580);功能请求 #80、#85
jesterret支持拉取请求评审和评论(PR #51)
appleboy支持自定义 SSE 端口、错误修复
ignasgilremove_issue_labels 工具(PR #96)
dmikushin(Dmitry Mikushin)修复从 MCP 客户端解析字符串编码的数字参数的问题(PR #93)
jiriks74更新 mcp-go v0.44.0 依赖项(PR #90)
th(Tomi Haapaniemi)update_pull_request 工具
hiifong早期错误修复和更新
Lunny Xiao早期贡献
techknowlogick早期贡献
yp05327早期贡献
mw75支持在创建仓库时指定所有者/组织(PR #18)
Dax Kelson问题评论管理(PR #34)
Guruprasad KulkarniArch Linux AUR 安装文档(PR #69)
Mario Wolff贡献
Massimo Fraschetti贡献
synath(David Paul Turley)通过 ServerVersion 探测支持仓库级令牌(PR #112);合并时检查状态码(PR #113);Claude Desktop Extension(.mcpb)打包(PR #118、#123);问题 due_date + 服务端排序(PR #483);有界的问题列表和评论串资源(PR #487);分页封套中的 total_count 取自 X-Total-Count(PR #507);增强 create_*_attachment 的超时处理(PR #534、#536);跨仓库问题依赖关系(PR #535)
BrilliantKahnget_file_content 默认返回纯文本(PR #116);list_repo_contents 和 get_repo_tree 工具(PR #117)。首次开源贡献——欢迎加入!🎉
nesvet(Eugene Nesvetaev)get_repo/edit_repo(PR #527);仓库主题工具(PR #528);取消/删除 Actions 运行以及获取运行构件(PR #533);get_commit_statuses(PR #542);软件包列表/获取/删除/文件工具(PR #543);创建问题、分配问题和替换标签时可使用标签名称(PR #591);创建、编辑和读取标签时支持 exclusive 和 is_archived(PR #592)
pisco(Marco Pisco)为问题、评论和发行版附件上传支持 file_path,并使用流式 multipart 处理,因此大型发行版资源不再需要经 base64 往返转换(PR #481)
paulgit(Paul Git)为每个工具声明准确的 MCP 注释和标题,并在 DEVELOPER.md 中提供分类准则(PR #633,取代 #602)
derliebemarcus(Marcus Pauli)change_files 原子多文件提交,以及 create_file/update_file 中支持二进制安全的 content_base64(PR #628);apply_diff_patch 原生差异补丁写入(PR #629)
MaherMakerHallerErne(Maher Al Sairawan)问题依赖关系工具——list_issue_dependencies、list_issue_dependents、add_issue_dependency、remove_issue_dependency——遵循正确的 Forgejo API 契约(PR #335)
woozar(Johannes Herrmann)通过直接 REST API 支持 Wiki——页面列表/获取/创建/更新/删除和修订,并强化契约和分页处理(PR #379)
dismantl(Dan Staples)有界的 Forgejo v16+ 工作流作业日志——list_action_run_jobs、get_action_job_logs(PR #378)
matheusalves96(Matheus Alves)仓库和组织 Actions 密钥工具——列表、创建或更新、删除(PR #605)
社区贡献者

提出问题并参与讨论、共同塑造项目发展方向的人:

贡献者贡献
byteflavour提交了 #80(发现里程碑/标签)、#85(通知 API 提案);积极参与讨论并担任评审
choucavalier提交了 #82(修复技能)、#70(macOS arm64 版本)、#62(二进制版本和 mise 支持)
MalcolmMielle提交了 #59(PR 评审工具——现已实现)
redbeard提交了 #60(Actions 支持——现已实现)
c6sepl6p提交了 #72(base64 编码)、#54(合并拉取请求——现已实现)
malik提交了 #73(版本标志)、#47(修复 Nix 构建)
a2800276提交了 #74(OpenAI 兼容性)
simenandre提交了 #49(go install 支持)
BasdP提交了 #42(Projects 支持)
BoBeR182提交了 #32(wiki 支持)
ignasgil提交了 #95(remove_issue_labels 功能请求)
Vokuar提交了 #99(支持 streamable HTTP 传输)
janbaer提交了 #98(回复评审评论)
fraschm98早期问题报告
heathen711提交了 #106(问题/评论附件——现已实现);参与设计 1 MiB 内嵌上限和 browser_download_url 回退方案
decarvalhoaa (Antonio De Carvalho)基于 Open WebUI 后端发生的真实上下文窗口溢出问题,提交了 #593(服务端响应大小上限),并提供测量数据,促成了 #596 中 list_repo_pull_requests 的负载调整
chris420 (Chris Oloff)提交了 #452(组织范围的问题搜索——现已作为 search_issues 实现);在 PR #458 中参与设计评审,推动以实例上限强制机制取代下一页探测,并发现响应封装错误地报告了自身的 limit
赛博格贡献者

本项目也收到了 AI 编码 Agent 的贡献——这些贡献以常规 PR 的形式提交,并由人工评审:

Agent角色贡献
brenner-axiom (b4-dev, B4arena)AI 开发 Agent组织管理工具(PR #94);showboat 演示(PR #97);list_repo_milestones、list_repo_labels 工具(PR #83);竞态条件修复(PR #78);贡献者文档(PR #87、#88);提交了 #76;代码评审
opencodeAI 开发 Agent支持拉取请求评审和评论(PR #51)
claude-codeAI 开发 Agent与 BrilliantKahn 合作,提供 get_file_content 纯文本默认行为以及 list_repo_contents/get_repo_tree 工具(PR #116、#117)
b4mad-release-agent发布自动化自动生成变更日志并添加发布标签
the #B4mad Renovate bot依赖更新自动升级依赖项

想要贡献?欢迎提交问题或拉取请求,所有贡献都受欢迎。

许可证

本项目为开源项目。许可证详情请参阅代码库。

评论

支持 Markdown

第一次接触 MCP?

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

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