- Add a read-only `attachment_read` tool for issue and issue comment attachments.
- Use the existing Gitea SDK attachment metadata APIs for `list` and `get`.
- Add authenticated `/attachments/{uuid}` downloads in the MCP server for `download`, with small image inline results and streamed file downloads for larger content.
- Add `-max-inline-attachment-bytes` / `GITEA_MAX_INLINE_ATTACHMENT_BYTES` to configure inline image limits.
- Update the tool tables in all README variants.
Refs: #209
Reviewed-on: https://gitea.com/gitea/gitea-mcp/pulls/218
Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: yp05327 <576951401@qq.com>
12 KiB
Gitea MCP 服务器
Gitea MCP 服务器 将 Gitea 实例接入 Model Context Protocol 客户端,让仓库、问题、拉取请求等都能在兼容 MCP 的聊天界面中浏览和管理。
安装
可从 发布页面 下载二进制文件并放入 PATH,或使用 docker.gitea.com/gitea-mcp-server 镜像,也可用 make 和 Go 1.26 及以上从源码构建到 $GOPATH/bin:
git clone https://gitea.com/gitea/gitea-mcp.git
cd gitea-mcp
make install
配置
Gitea 主机和访问令牌可通过命令行参数或环境变量提供,命令行参数优先。运行 gitea-mcp --help 可查看完整的参数与环境变量列表。日志写入 $HOME/.gitea-mcp/gitea-mcp.log,加上 -d 可启用调试日志。
Claude Code
通过 go run 运行服务器,需要安装 Go:
claude mcp add --transport stdio --scope user gitea \
--env GITEA_ACCESS_TOKEN=token \
--env GITEA_HOST=https://gitea.com \
-- go run gitea.com/gitea/gitea-mcp@latest -t stdio
VS Code
可使用本 README 顶部的安装按钮,或将下面的内容加入用户设置 (JSON),按 Ctrl + Shift + P 并输入 Preferences: Open User Settings (JSON) 即可打开。也可放在工作区的 .vscode/mcp.json 中,此时无需 mcp 键。
{
"mcp": {
"inputs": [
{
"type": "promptString",
"id": "gitea_token",
"description": "Gitea 个人访问令牌",
"password": true
}
],
"servers": {
"gitea-mcp": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "GITEA_ACCESS_TOKEN", "docker.gitea.com/gitea-mcp-server"],
"env": {
"GITEA_ACCESS_TOKEN": "${input:gitea_token}"
}
}
}
}
}
OpenCode
将下面的内容加入 OpenCode 配置的顶层 mcp 对象:
"gitea-mcp": {
"enabled": true,
"type": "local",
"command": [
"gitea-mcp",
"-t", "stdio",
"-H", "https://gitea.com",
"-T", "<your personal access token>"
]
}
Mistral Vibe
将下面的内容加入 ~/.vibe/config.toml:
[[mcp_servers]]
name = "gitea"
transport = "stdio"
command = "docker"
args = ["run", "--rm", "-i", "-e", "GITEA_ACCESS_TOKEN", "-e", "GITEA_HOST", "docker.gitea.com/gitea-mcp-server"]
[mcp_servers.env]
GITEA_ACCESS_TOKEN = "TOKEN"
GITEA_HOST = "https://gitea.com"
其他客户端
Cursor 等客户端可使用 stdio 命令:
{
"mcpServers": {
"gitea": {
"command": "gitea-mcp",
"args": ["-t", "stdio", "--host", "https://gitea.com"],
"env": {
"GITEA_ACCESS_TOKEN": "<your personal access token>"
}
}
}
}
或使用 http 端点,对应以 gitea-mcp -t http --port 8080 启动的服务器:
{
"mcpServers": {
"gitea": {
"url": "http://localhost:8080/mcp",
"headers": {
"Authorization": "Bearer <your personal access token>"
}
}
}
}
配置完成后,可在聊天框输入 列出我所有的仓库 试试。
可用工具
| 工具 | 范围 | 访问 | 描述 |
|---|---|---|---|
| get_gitea_mcp_server_version | 版本 | 读取 | 获取 Gitea MCP 服务器版本 |
| get_me | 用户 | 读取 | 获取当前已认证用户 |
| get_user_orgs | 用户 | 读取 | 列出当前用户的组织 |
| search_users | 搜索 | 读取 | 搜索用户 |
| search_org_teams | 搜索 | 读取 | 搜索组织中的团队 |
| search_repos | 搜索 | 读取 | 搜索仓库 |
| search_issues | 搜索 | 读取 | 跨仓库搜索问题和拉取请求 |
| notification_read | 通知 | 读取 | 读取通知:列出(可限定仓库)或按 ID 获取会话 |
| notification_write | 通知 | 写入 | 将某条或全部通知标记为已读 |
| label_read | 标签 | 读取 | 读取仓库或组织标签 |
| label_write | 标签 | 写入 | 写入标签(仓库或组织):创建、编辑、删除 |
| milestone_read | 里程碑 | 读取 | 读取里程碑:获取单个或列出 |
| milestone_write | 里程碑 | 写入 | 写入里程碑:创建、更新、删除 |
| wiki_read | Wiki | 读取 | 读取 Wiki:列出页面、获取内容、修订历史 |
| wiki_write | Wiki | 写入 | 写入 Wiki 页面:创建、更新、删除 |
| timetracking_read | 时间跟踪 | 读取 | 读取时间跟踪:问题/仓库耗时、活动计时器、我的跟踪记录 |
| timetracking_write | 时间跟踪 | 写入 | 写入时间跟踪:计时器和记录条目 |
| package_read | 软件包 | 读取 | 读取软件包注册表:列出软件包、列出版本或获取某个版本 |
| package_write | 软件包 | 写入 | 删除软件包版本(不可恢复) |
| list_issues | 问题 | 读取 | 列出仓库问题 |
| attachment_read | 问题 | 读取 | 读取问题/评论附件:列出元数据、获取元数据或下载内容 |
| issue_read | 问题 | 读取 | 读取问题:详情、评论或标签 |
| issue_write | 问题 | 写入 | 写入问题:创建、更新、管理评论和标签 |
| list_pull_requests | 拉取请求 | 读取 | 列出仓库拉取请求 |
| pull_request_read | 拉取请求 | 读取 | 读取拉取请求:详情、差异、变更文件、头部提交状态、审查 |
| pull_request_write | 拉取请求 | 写入 | 写入拉取请求:创建、更新、关闭、重新打开、合并、更新分支、管理审查者 |
| pull_request_review_write | 拉取请求 | 写入 | 写入 PR 审查:创建、提交、删除、驳回 |
| actions_config_read | Actions | 读取 | 读取 Actions 密钥和变量 |
| actions_config_write | Actions | 写入 | 写入 Actions 密钥和变量:更新插入、创建、更新、删除 |
| actions_run_read | Actions | 读取 | 读取 Actions 工作流、运行、作业、日志和构件 |
| actions_run_write | Actions | 写入 | 写入 Actions 运行:触发、取消、重新运行 |
| create_repo | 仓库 | 写入 | 创建新仓库 |
| fork_repo | 仓库 | 写入 | 复刻仓库 |
| list_my_repos | 仓库 | 读取 | 列出当前用户拥有的仓库 |
| list_org_repos | 仓库 | 读取 | 列出组织中的仓库 |
| get_repository_tree | 仓库 | 读取 | 获取仓库文件树 |
| get_file_contents | 文件 | 读取 | 获取文件内容和元数据 |
| get_dir_contents | 文件 | 读取 | 获取目录中的条目 |
| create_or_update_file | 文件 | 写入 | 创建或更新文件(提供 sha 以更新现有文件) |
| delete_file | 文件 | 写入 | 删除文件 |
| create_branch | 分支 | 写入 | 创建新分支 |
| delete_branch | 分支 | 写入 | 删除分支 |
| list_branches | 分支 | 读取 | 列出仓库分支 |
| create_tag | Git 标签 | 写入 | 创建标签 |
| delete_tag | Git 标签 | 写入 | 删除标签 |
| get_tag | Git 标签 | 读取 | 获取标签详情 |
| list_tags | Git 标签 | 读取 | 列出仓库标签 |
| list_commits | 提交 | 读取 | 列出仓库提交 |
| get_commit | 提交 | 读取 | 获取提交详情 |
| create_release | 版本发布 | 写入 | 创建版本发布 |
| delete_release | 版本发布 | 写入 | 删除版本发布 |
| get_release | 版本发布 | 读取 | 按 ID 获取版本发布 |
| get_latest_release | 版本发布 | 读取 | 获取最新版本发布 |
| list_releases | 版本发布 | 读取 | 列出仓库版本发布 |
说明: 部分工具是聚合的、基于操作的工具,单个工具通过
method参数暴露多个操作。当服务器以只读模式运行时(-r/GITEA_READONLY),访问为「写入」的工具会被隐藏;可通过-O/--tools(GITEA_TOOLS)过滤对外暴露的工具集合。
许多工具支持 page 和 per_page 分页参数。最大有效页面大小由 Gitea 服务器的 [api].MAX_RESPONSE_ITEMS 设置决定(默认 50),超出的值会被静默截断。