工作流 📋 6 个步骤 第 610 / 611 篇

用 mcp-github-project-manager 把 GitHub Projects v2 变成多 Agent 任务队列:注册领活、心跳与预算硬闸实操

mcp-github-project-manager 是 MIT 许可的 MCP server,无需数据库就把 GitHub Projects v2 变成 Agent 的任务底座。本教程按官方 README 六步落地:装 CLI、配凭据链接入客户端、register 与 checkout_task 原子认领、心跳与交付物闭环、set_budget 硬闸、AI 生成 PRD 到 issue 与审计日志,含 scope 与动作名口径风险。

2026.11.10· 18 分钟阅读· 约 3036 字· 🗂️ GitHub Projects v2 / 🤖 多智能体任务队列

几个编码 Agent 同时对着一个仓库干活,最常见的乱象是:两个 Agent 认领了同一个 issue、改完没人复核、AI 生成任务时把 token 花超了也没人拦。mcp-github-project-manager 是一个 MIT 许可的 MCP server,把 GitHub Projects v2 直接变成 Agent 的任务底座——无需数据库、无需 Redis,Agent 注册表放在专用分支的 registry.json,任务认领写在项目自定义字段,交付物是结构化 issue 评论。本教程按官方 README 六步落地:装服务、接客户端、注册认领、心跳交付、设预算硬闸、审计加固。

🧩 适合谁:已经在用 Claude Code、Codex、Cursor 等多个 MCP 客户端并行开发,需要一份共享任务队列的团队;以及想让 PRD 自动落成 issue 的技术负责人。前置:Node.js 22.12.0 或更高(官方推荐 Node 24)、一个你有管理权限的 GitHub 仓库与 Projects v2、可用的 GitHub 凭据。核心的认领与心跳链路不需要任何大模型 API Key。

先弄清:它管的是队列,不是替你写代码

这个服务把「谁在做什么、做到哪、花了多少」存在 GitHub 原生位置,Agent 只通过 MCP 工具读写它。官方表格给出的对应关系如下,理解这张表才能看懂后面每一步的副作用:

状态存放位置含义
Agent 注册表agent-registry 分支上的 registry.json用 Contents API 做 sha 比较再写入,避免并发覆盖
任务认领Projects v2 自定义字段agent_claimed_by、agent_status、agent_pr_number 等
交付物结构化 issue 评论分支、PR、文件、测试结果一并留痕
预算与心跳注册表里的 Agent 记录服务端自行扣减,Agent 绕不过去

版本口径先说清:官方 README 的工具面为 21 个复合工具、175 个动作,第三方雷达在 2026-11-05 记录的 5.0.1 版本是 20 个工具、169 个动作,npm 上随后又有新版本发布。这些数字随版本变化,写自动化脚本时请以 npm view mcp-github-project-manager version 与仓库 docs/TOOLS.md 为准,不要把工具数量写死在断言里。

Step 1:装 CLI 并确认运行环境

1 按 Node 版本装服务,验一下命令可用

官方要求 Node.js 22.12.0 以上,推荐 Node 24。四条安装路线任选其一,装完直接运行即可启动 stdio 传输的 MCP server:

# 确认运行时版本
node --version

# 路线 A:全局安装(官方 Quickstart)
npm install -g mcp-github-project-manager

# 路线 B:npx 即用(客户端配置里最常用)
npx -y mcp-github-project-manager

# 路线 C:pnpm dlx
pnpm dlx mcp-github-project-manager

# 路线 D:容器
docker compose up --build

# 全局安装后直接启动 stdio server
mcp-github-project-manager
💡 如果客户端报「命令找不到」,优先换成路线 B 的 npx -y 写法,由客户端自己解析包;全局安装适合先在终端里手动验一遍。本地构建的方式是把 MCP 客户端指向 node build/index.js。

Node 版本是硬门槛:低于 22.12.0 时依赖可能安装成功但运行时报语法或 API 错误。用 node --version 确认后再接客户端;容器路线还要注意官方提示——把宿主目录挂到 /data 时,该目录需归容器用户 uid 10001 所有。

Step 2:配置凭据并接入 MCP 客户端

2 选一条凭据链,把服务注册进客户端

官方明确 GITHUB_TOKEN 不是必需的:凭据链按「GitHub App 安装 → --token 参数 → SECRETS_DIR 下的文件 → GITHUB_TOKEN 环境变量 → auth login 存的 OAuth 令牌 → gh auth token」依次命中,且每次工具调用都会重新解析。已经 gh auth login 过就什么都不用配。

# 方式一:环境变量(Quickstart 写法)
export GITHUB_TOKEN="ghp_..."
export GITHUB_OWNER="your-org-or-user"
export GITHUB_REPO="your-repo"

# 方式二:复用 gh CLI 登录态,无需自建 PAT
mcp-github-project-manager auth login --gh
gh auth refresh -h github.com -s project

# 方式三:OAuth 设备流
GITHUB_OAUTH_CLIENT_ID=... mcp-github-project-manager auth login

# Claude Code CLI 一行接入
claude mcp add github-project-manager -- npx -y mcp-github-project-manager

其余 MCP 客户端用标准 stdio 配置,官方给出的示例结构如下,把三个环境变量换成你自己的值:

{
  "mcpServers": {
    "github-project-manager": {
      "command": "npx",
      "args": ["-y", "mcp-github-project-manager"],
      "env": {
        "GITHUB_TOKEN": "ghp_...",
        "GITHUB_OWNER": "your-org-or-user",
        "GITHUB_REPO": "your-repo"
      }
    }
  }
}
🔎 GITHUB_OWNER 与 GITHUB_REPO 是必填项,GITHUB_TOKEN 是可选的。用 MCP_TOOL_GROUPS=core 可以只暴露项目管理工具,core,ai 再加上 AI 工具,默认 all;组过滤时 discover_tools 依然可调用。

凭据与权限风险:使用 PAT 时需要 repo、project、write:org 三个 scope,权限范围很大,勿提交含令牌的配置文件。复用 gh CLI 登录态虽方便,但官方说明 gh 令牌每 60 秒重读一次,多人共用机器时可能串到别的账号,用 GH_CLI_USER 钉住账号、或用 GH_CLI_TOKEN_FALLBACK=false 关掉回退更稳。headless 与 CI 场景官方建议改用 GitHub App 或 PAT,不要依赖交互式登录。

Step 3:注册 Agent 并原子认领任务

3 先注册身份,再用 checkout_task 抢活

每个工具都用 action 字段路由到具体动作,所以客户端只看到 21 个工具 schema 而不是 175 个。官方给出的 Agent 循环从注册开始,认领策略有 highest_priority、oldest_first、skills_match、milestone_deadline、ai 五种:

{
  "tool": "agent_work",
  "arguments": {
    "action": "register",
    "name": "claude-eng-1",
    "role": "engineer",
    "runtime": "claude-code",
    "capabilities": ["typescript", "testing"]
  }
}

{
  "tool": "agent_work",
  "arguments": {
    "action": "checkout_task",
    "agentId": "agent-abc123",
    "strategy": "highest_priority"
  }
}

{
  "tool": "agent_work",
  "arguments": {
    "action": "get_task_context",
    "issueNumber": 42
  }
}
✅ 注册时把 runtime 与 capabilities 写清楚,后续用 skills_match 策略才派得准。上例的 agent-abc123 是注册回显里返回的 ID,实际调用时按回显原样带回,别自己编。

先拿测试仓库练手:认领会写 Projects v2 的自定义字段,交付物会写进真实 issue 评论,注册表会提交到 agent-registry 分支。这些改动在你的仓库里是可见的,甚至会触发通知与自动化;新接团队请用一个临时仓库跑通整条链路,确认字段与分支命名可接受后再接正式项目。

Step 4:心跳、提交交付物、闭环复核

4 把进度、分支、PR 依次回写,形成可审的队列

官方的 Agent 循环是「注册 → 认领 → 取上下文 → 心跳 → 提交交付物 → 完成」,每一步的 ID 都从上一步回显里串下来。提交交付物用 agent_manage,完成后由人或另一个 Agent 走复核:

{
  "tool": "agent_work",
  "arguments": {
    "action": "heartbeat",
    "agentId": "agent-abc123",
    "status": "working",
    "taskId": "issue-42",
    "progress": 60,
    "currentBranch": "feat/42-add-login-form"
  }
}

{
  "tool": "agent_manage",
  "arguments": {
    "action": "submit_work_product",
    "agentId": "agent-abc123",
    "taskId": "issue-42",
    "issueNumber": 42,
    "branch": "feat/42-add-login-form",
    "prNumber": 99,
    "summary": "Added login form with validation"
  }
}

{
  "tool": "agent_work",
  "arguments": {
    "action": "complete_task",
    "agentId": "agent-abc123",
    "taskId": "issue-42",
    "summary": "Implemented and tested"
  }
}

官方在仓库里放了 examples/basic/agent-loop.ts,是这条循环的 Runnable 版本(worker 加 reviewer,ID 逐环串联,任一失败非零退出);加 --plan 会打印带符号引用的调用序列,适合先看清再实跑。

📌 官方的跨工具契约有两条值得写进自己的脚本:create 类动作可带可选 idempotencyKey,24 小时内重试会重放结果而不是重复创建;分页 list 会返回 nextCursor,原样作为 cursor 传回即可。每个工具还会带 _meta.schemaVersion,便于客户端做兼容判断。

复核动作口径:官方表格把 review 列在 agent_work 的能力里,叙述里也提到 approve、reject、decompose 的复核循环,但 README 没有给出精确的 review 动作字符串示例。需要精确参数时请查 docs/TOOLS.md,不要照着本文或其他二手文章猜动作名。

Step 5:给每个 Agent 装预算硬闸

5 用 set_budget 限额,让服务端替你踩刹车

官方的设计意图很直接:预算必须由 Agent 绕不过的一方执行。每个 Agent 都有带告警阈值与硬停止的 token 预算,服务端按工具调用自行扣减,record_usage 覆盖 Agent 自身的运行时开销;硬停止时 AI 工具会收到 BudgetExhausted。预算用 agent_manage 设置,重置周期可选 daily、weekly、monthly 或 never。

# 设置预算的工具与动作(参数细节见 docs/TOOLS.md)
# tool: agent_manage
# action: set_budget
# reset period: daily | weekly | monthly | never

# 与单次操作预算区分开
# AI_SESSION_TOKEN_LIMIT 是「每次 AI 任务生成」的上限
# 与 per-agent 预算是两套独立机制

# 只暴露必要工具组,减小上下文开销
MCP_TOOL_GROUPS=core
MCP_TOOL_GROUPS=core,ai
MCP_TOOL_GROUPS=all

# 按需展开动作,而不是把 175 个动作全塞进 schema
# {"tool": "discover_tools", "arguments": {"domain": "sprints"}}
💡 discover_tools 支持 domain(projects、issues、pull_requests、milestones、sprints、labels、automation、iterations、events、status_updates、analytics、ai_generation、ai_analysis、ai_planning、agents、system)或自由文本 query;即便开了工具组过滤它也一直可用。

别把预算当总体账单:官方说明 AI 工具是可选的,不配模型 key 时其余功能照常工作;因此预算主要约束 AI 工具与 record_usage 上报的开销,不等于你在本机跑编码 Agent 的全部模型花费。告警阈值的具体数值 README 未列出,需查 docs/TOOLS.md。

Step 6:AI 生成 PRD 到 issue,并留审计线索

6 打开 AI 工具组,把计划落成真实任务

ai_generate 覆盖从想法生成 PRD、增强与解析 PRD、加特性、推荐下一任务、复杂度分析、扩展子任务、追溯矩阵,最后把任务实体化为 GitHub issue 并按里程碑与冲刺分组。启用它需要配模型提供方;官方支持 anthropic、openai、google、google-vertex、perplexity 与 openai-compatible(OpenRouter、Groq、Ollama、LM Studio 等),且没有默认模型,需按角色自行配置。

# 打开 AI 工具组(默认 all 时无需设置)
MCP_TOOL_GROUPS=core,ai

# 按角色配置模型(官方变量形态)
# AI_{MAIN,PRD,RESEARCH,FALLBACK}_{PROVIDER,MODEL,API_KEY,BASE_URL}
# 例:AI_PRD_PROVIDER、AI_PRD_MODEL、AI_PRD_API_KEY

# 打开变更审计:追加式、已脱敏的 JSONL
AUDIT_LOG_ENABLED=true
AUDIT_LOG_PATH=.mcp-audit/mutations.jsonl

# 健康与速率
# system 组提供实时 GitHub 速率探测的健康检查
RATE_LIMIT_FLOOR=100
📚 官方把 ai_generate 的九个动作以能力描述列出,但精确 action 字符串与完整参数表在 docs/TOOLS.md;写脚本前先读那份参考,比照着第三方示例猜更稳。

HTTP 端点默认收紧:官方说明 WEBHOOK_HOST 默认只绑 127.0.0.1,/events/* 需要 EVENTS_AUTH_TOKEN 或 OAuth 2.1 配置,两者都没有时返回 503;EVENTS_ALLOW_UNAUTHENTICATED=true 仅供受信任的开发环境。要把服务暴露到网络前,先确认令牌、代理信任列表与签名校验都已配置,别把项目管理队列开放成公开写入口。

常见问题速查

现象排查方向
客户端看不到工具确认 Node 22.12.0 以上、stdio 配置正确、会话已重启;用 discover_tools 验证连通
报 project 权限不足PAT 需 repo、project、write:org;gh 登录态用 gh auth refresh -h github.com -s project 补 scope
串到了别人的账号凭据链回退到 gh auth token;用 GH_CLI_USER 钉账号或关掉回退
重复创建了 issuecreate 动作带上 idempotencyKey,24 小时内重试会重放原结果
AI 工具不可用未配模型 key 或 MCP_TOOL_GROUPS 过滤掉了 ai 组;官方说明无 key 时其余功能不受影响
动作名报错README 未列全九个 ai_generate 动作字符串,去 docs/TOOLS.md 核对

做到哪一步算成功

在测试仓库里:claude mcp add github-project-manager -- npx -y mcp-github-project-manager 之后会话能列出工具;agent_work 的 register 返回可用 agentId,checkout_task 在 Projects v2 里写入认领字段且两个 Agent 不会抢到同一任务;heartbeat、submit_work_product、complete_task 三步依次回显成功,issue 评论里能看到分支与 PR;set_budget 设一个很小的额度后触发 AI 工具应被 BudgetExhausted 拦下;.mcp-audit/mutations.jsonl 里有追加式变更记录。这条链路走通,说明队列、复核与预算三件事都落在服务端而不是靠提示词约束。

📌 想继续深入:官方还列出 resources 只读视图、prompts 模板、webhook 与 SSE 传输、GitHub App 凭据链与 Docker 部署指南;项目为 MIT 许可,发布历史见 CHANGELOG.md。本教程六步只覆盖安装、接入、认领、交付、预算与审计这条主线。
← 返回教程中心