关于 CONTRI
CONTRI 是面向编码 Agent 的只读 MCP 服务,可在开始贡献前分析公开 GitHub Issue 和仓库。它结合认领状态、项目活跃度、维护者响应情况与贡献项目发现,并沿用 CONTRI 浏览器扩展的判断逻辑。
主要功能
- 01检查 Issue 的指派、认领和关联 PR
- 02批量检查最多 10 个 Issue
- 03查看仓库活跃度和维护者响应时间
- 04查找适合新手的 Issue 和活跃项目
- 05生成带来源链接的贡献简介
- 06缓存报告并显示 GitHub 请求额度
适用场景
- 01确认某个 Issue 是否已有人处理
- 02在活跃项目中挑选适合新手的 Issue
- 03评估项目活跃度和维护者响应情况
- 04贡献前查看仓库指南
MCP 相关
通过 stdio 向 MCP 客户端提供只读 GitHub 分析工具和提示词。它通过 GitHub 访问公开数据,不会创建评论、认领或 PR。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
9收录的工具列表 · 更新于 5 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| force | boolean | 否 | 绕过缓存(会增加请求数) |
| issue | string | 是 | https://github.com/owner/name/issues/123 或 owner/name#123 |
| detail | enum | 否 | brief:判定 + URL(约 40 个 token);full:包含证据brief | full |
| includeThread | boolean | 否 | 同时返回 issue 正文和近期评论(最多约 14k 个字符) |
详细介绍
contri-mcp
面向 AI 编码 Agent 的 CONTRI。 Agent 开始处理 GitHub issue 前,可以查看 CONTRI 在浏览器中展示的信息:是否已经有人在处理、项目是否活跃,以及维护者是否会回复。
- 避免重复劳动。 Agent 越来越常在已经有人认领的 issue 上提交拉取请求。
check_issue会查找负责人、“我想处理这个”评论(以及后来没了动静的认领),以及引用该 issue 的未合并拉取请求。 - 数据与扩展一致。 服务会复用 CONTRI 自身的报告和判定逻辑,因此结果与 github.com 上的徽章一致。
- 只读、本地运行,仅使用公开数据。 它通过标准输入输出在你的机器上运行,只与
api.github.com通信,绝不会评论、认领或创建拉取请求。
工具
| 工具 | 可回答的问题 | 请求数(已登录 / 匿名) |
|---|---|---|
check_issue | 我可以接手这个 issue 吗?看起来无人处理、@x 已认领、认领后没有动静、未合并的拉取请求 #n、已分配…… | 1–2 / ~4 |
check_issues | 一次调用最多检查 10 个 issue:默认只返回判定结果,快速筛选成本低 | 每个 issue 的请求数同上 |
repo_health | 项目活跃吗?近 90 天合并的拉取请求(排除机器人)、人工作者、合并耗时、发布情况 | 2 / ~7 |
team_responsiveness | 有人会回复吗?团队首次回复外部拉取请求和 issue 的时间、哪些请求仍在等待、维护者 | 2–3 / ~35 |
find_issues | 没有负责人的入门级 issue;已登录时还会检查是否已有未合并的拉取请求引用该 issue | 3 / 2 |
discover_projects | 按语言或主题查找活跃项目,并根据近期人工合并和适合新手的 issue 排序 | 1 / ~7 |
contribution_brief | 附有来源链接的简介,以及 README、贡献指南、行为准则和模板 | 2–3 / ~5 |
提示词:find_first_issue(寻找一个活跃项目和一个无人处理的 issue)和 can_i_take_this(检查一个 issue,并说明应该开始处理、先询问,还是另选一个)。
每个结果都包含 github 字段,其中记录登录状态和 GitHub 报告的剩余请求数,方便 Agent 规划用量并判断何时提示用户登录。报告会按照与扩展相同的时长缓存在内存中(issue 检查 10 分钟,概览 30 分钟,团队响应情况 6 小时)。
Token 用量。 结果是精简的 JSON,不含填充内容:完整的 check_issue 约为 200–300 个 token,detail: "brief"(判定结果和 URL)约为 40 个 token,thread: "digest" 会附上 issue 标题和最近三条评论,约为 400 个 token(完整讨论串可能约为 3,500 个 token);check_issues 对整个批次只返回一个摘要。数字四舍五入到小数点后一位,并省略空白部分,因此 Agent 若只需判断是否继续,几乎只需为判定结果付出少量用量。
设置
此服务需要 Node.js 20.3 或更高版本,并已发布到 npm,包名为 contri-mcp,因此无需克隆或构建。
Claude Code
claude mcp add --transport stdio contri -- npx -y contri-mcp
Claude Desktop、Cursor、Windsurf 和其他使用 mcpServers 配置文件的客户端
{
"mcpServers": {
"contri": {
"command": "npx",
"args": ["-y", "contri-mcp"]
}
}
}
如果客户端找不到 npx(它不会读取你的 shell 配置),请使用 which npx 获取完整路径。
从源码安装(用于试用尚未发布的更改;构建需要 Node.js 22.12 或更高版本,推荐使用 24):
git clone https://github.com/alphasafal/contri ~/contri
cd ~/contri && npm ci && npm run build:mcp # writes mcp/dist/contri-mcp.js
claude mcp add --transport stdio contri -- node ~/contri/mcp/dist/contri-mcp.js
更新源码安装:运行 cd ~/contri && git pull && npm ci && npm run build:mcp,然后重启 MCP 客户端。
使用 GitHub 登录
未登录时,GitHub 每小时允许 60 次请求,Agent 很快就会用完。登录后,限额会提高到 5,000 次,并且 CONTRI 可以使用一个 GraphQL 请求,而不是几十个请求。你无需复制令牌:
- 让你的 Agent “登录 GitHub”,或者直接开始使用 CONTRI:如果尚未登录,它会提示你。
- Agent 会显示一段简短代码和一个指向
github.com/login/device的链接。打开链接,输入代码并授权 CONTRI。 - 就这么简单。CONTRI 会自动检测到授权,之后的每次调用都会使用该授权。
这与扩展程序使用的是同一种登录方式:通过 CONTRI OAuth App 使用 GitHub 的设备授权流程,不申请任何权限范围(公开、只读访问),也不会通过 CONTRI 传输密码。登录信息会保存到 ~/.config/contri/mcp-credentials.json,供下次使用,且只有你能读取(设置 CONTRI_MCP_CREDENTIALS 可使用其他路径;也可以让 Agent 使用 remember: false 登录,仅在本次会话中保留)。sign_out 会清除登录信息;你也可以随时在 github.com/settings/applications 撤销授权。
更偏好使用令牌? 在服务的 env 中设置 GITHUB_TOKEN(或 GH_TOKEN),并使用一个具有 Public repositories 权限、且所有权限均设为 No access 的细粒度令牌。如果 GitHub 拒绝该令牌,或者它仍是 PASTE_YOUR_TOKEN_HERE 这样的占位符,CONTRI 会继续以匿名方式运行,并提示你登录,而不是直接失败。
试用
向你的 Agent 提出类似的问题:
- “我可以接手 https://github.com/owner/repo/issues/123 吗?”
- “帮我在一个活跃的 TypeScript 项目中找一个适合新手的 issue,要求维护者能在几天内回复。”
- “开始处理这个 issue 前,先确认没人正在处理它。”
隐私
没有后端,也没有分析功能。服务只会向 GitHub(api.github.com,以及用于登录的 github.com)发送请求,你的登录信息也只会发送到 GitHub。只分析公开仓库。报告保存在内存中,进程退出后即会消失;唯一会写入的文件是保存的登录信息(如果你登录了)。只有在 Agent 请求时,issue 文本才会发送给它(使用 check_issue 并设置 includeThread)。请参阅 PRIVACY.md。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。