@ calltilemeterm/pr-manager-mcp (英语)
一个用于检查,加速,分解,管理GitHub Pull请求的模型上下文协议(MCP)服务器,GitHub Actions CI工作流程,审查线程,测试覆盖,以及线性政策验证直接来自AI编码代理.
关键特性
- GitHub 动作加速和三角数字 :
triage_ci_failures: 快速根分级(deterministic_test, (中文(简体) ),infrastructure, (中文(简体) ),timeout, (中文(简体) ),permission, (中文(简体) ),queue_stall),并有高信号节选和行动建议.rerun_failed_jobs: 选择性重试只进行失败的工作,而不重新启动完整的套件或通过矩阵任务.cancel_superseded_runs: 取消旧承诺的过时运行,从而自动释放跑车位.enable_auto_merge: 启用 GitHub 自动相接(SQUASH编号 :MERGE编号 :REBASE通过GraphQL。 关于CLEAN无序公关UNPROCESSABLE: Pull request is in clean status倒入一个精确的头mergePullRequest。 。 。 .merge_pull_request: 直接保护的壁球/相接/基地expectedHeadSha联合国 无法自动生成的 PR .get_ci_snapshot:单调统一健康快照(活跑,队列跑出,队列停滞,阻塞器崩溃).
- PR 状态和边界合并: 获取完整的 PR 元数据、 状态检查和处理
mergeable: null自动投票. - 仓库可见度警卫: 读取活的 GitHub 寄存器可见度(
public, (中文(简体) ),private,或internal在作出公共/私人表面决定之前. - CI 任务状态和步骤日志:查询检查运行,检查套件,并下载任务执行日志,同时安全地进行定向处理并进行认证编辑.
- PR状态监视器/ 等待:高效地等待/投放公关状态过渡(
checks_passed, (中文(简体) ),checks_completed, (中文(简体) ),clean_mergeable, (中文(简体) ),bot_review_completed, (中文(简体) ),merged, (中文(简体) ),closed没有繁忙的循环. - 顶级 PR 注释: 后发出评论以引发机器人审查(例如.
@cursor-agent review)或附上CI证据摘要. - 测试覆盖率: 从 CI 检查运行、 bot 注释( 如 Codecov) 中提取测试覆盖, 或本地
coverage-summary.json文档. - 创建和促进警卫草案:打开PR草案,进行全面的预检(Linear policy, Customer Data / PII surch,PR模板完整性),并通过GraphQL将PR草案推广到"Ready for Review".
- Canonical 合规允许列表: 客户数据 / PII 刷新相同行宽
ct-compliance:allow标记为犬科ct-compliance/scripts/scan.sh. 将文字放在任何一条合法必须包含外标形状的线上——必要的网络政策ipBlock.cidr,或者一个护栏测试 坚持一个符号的 缺席 ——该行被算作允许列表(表面为summary.allowlistedCount而不是报告为调查结果。 标记内容从未重复过,因为CI日志可以被任何有Repo访问权限的人读取; 审计该集git grep ct-compliance:allow。豁免是: 仅限行:它从不为不同行找借口,也从不为文件名找借口——客户名文件仍必须更名. - 公共上游分类: 现场预检查可以在完整新添加的公共 DocsGPT 中将一个多克桥发生分类
images/docsgpt/context/overlay/docsgpt/app.py快照,仅在calltelemetry/ct-infrastructure而且只在SHA-256号d6c77b31bc3a7ee378c8692af4b4d962ace01d36785a4809a8f7a303f9c7db7a。精确的源代码摘要、开发重定向语句和发生位置在严格完整文件 diff 重建后绑定。 不明或被更改的快照、路径或寄存器;修改/更名/部分/成形的diff部分;以及手动调用者索偿接受普通扫描。 这种分类仅影响私人 -- -- IP的发生,报告summary.classifiedPublicUpstreamCount,而不改变标记计数或其他探测器。 公共测试固定使用定型gzip/base64运输;本土测试验证压缩和解码源文摘. 它不提供运行时间豁免. - 审查线索生命周期:列表GraphQL审查线索,对内置审查评论作出答复,解析/解析线索,并请求bot(Bugbot)或人文审查员.
- 乐观的货币警卫: 写业务(
reply_review_thread, (中文(简体) ),resolve_review_thread, (中文(简体) ),rerun_failed_jobs, (中文(简体) ),enable_auto_merge(b) 支助expectedHeadSha进行验证,防止对陈旧的公关修订采取行动. - 嵌入线性政策保护:执行被钉住的ct-meta后卫(
vendor/ct-meta/linear-workflow-guard.mjs, ADR 1102),用于R8/R9/R9-父母-近距离/R10自动近距离审计,并进行字节识别漂移检查(英语:npm run check:linear-guard)和共用固定平价套件。 不需要外部 CI 执行 . - 多级授权优先级: 配置了 $\ rightarrow $
GITHUB_TOKEN当地美元gh auth token通过ghCLI(英语:CLI).
完整注册的MCP工具套件(25个工具)
| 工具 | 类别 | 说明 | 关键参数 |
|---|---|---|---|
diagnose_github_access | 检查 | 只读账户和目标存储器访问元数据,一个被绑定的证书,明确的未知写权限 | owner, (中文(简体) ), repo, (中文(简体) ), expectedAccount |
get_pr_details | 检查 | 查询公关元数据、正文、分支信息、可合并状态、审查决定 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber, (中文(简体) ), pollTimeoutMs |
get_repo_visibility | 检查 | 只读存储器可见度和私有旗帜查询 | owner, (中文(简体) ), repo |
get_pr_checks | 检查 | 查询检查,检查套房,以及SHA头的状态 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber 或者说 ref |
get_job_logs | 检查 | 获取 CI 任务执行记录,并进行安全定向处理和截取 | owner, (中文(简体) ), repo, (中文(简体) ), jobId, (中文(简体) ), tailLines, (中文(简体) ), maxBytes |
get_pr_coverage | 检查 | 提取行、 分支、 检查运行的语句覆盖、 公关评论或本地报告 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber, (中文(简体) ), ref, (中文(简体) ), localReportPath, (中文(简体) ), thresholdPercent |
get_ci_snapshot | CI 加速 | 统一高信号CI健康快照和阻断器故障 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber, (中文(简体) ), includeTriage |
wait_for_pr_state | 监测 | 高效地等待/投球,直到目标PR状态条件得到满足 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber, (中文(简体) ), targetState, (中文(简体) ), timeoutMs, (中文(简体) ), intervalMs |
start_pr_wait_job | 监测 | 开始与背景工作相同的等待并返回 a jobId 立即( 用于可能超过~45s的目标; 避免网关超时) | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber, (中文(简体) ), targetState, (中文(简体) ), timeoutMs (最多6小时), intervalMs |
get_pr_wait_job | 监测 | 播放背景等待工作:运行 + 已用时间, 完成 + 全部监视结果 | jobId |
cancel_pr_wait_job | 监测 | 取消运行的背景等待任务 | jobId |
triage_ci_failures | CI 加速 | 解析 CI 步骤和日志, 以建议的行动分类根源 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber 或者说 runId, (中文(简体) ), maxJobs |
rerun_failed_jobs | CI 加速 | 在工作流程运行中选择重运行失败的工作 | owner, (中文(简体) ), repo, (中文(简体) ), runId, (中文(简体) ), pullNumber, (中文(简体) ), expectedHeadSha |
cancel_workflow_run | CI 加速 | 取消特定的运行或队列中的工作流程运行 | owner, (中文(简体) ), repo, (中文(简体) ), runId |
cancel_superseded_runs | CI 加速 | 自动取消用于公关分支的旧业务 | owner, (中文(简体) ), repo, (中文(简体) ), branch, (中文(简体) ), currentHeadSha |
trigger_workflow_dispatch | CI 加速 | 触发自定义 GitHub 动作工作流程发送 | owner, (中文(简体) ), repo, (中文(简体) ), workflowId, (中文(简体) ), ref, (中文(简体) ), inputs |
enable_auto_merge | CI 加速 | 启用自动相接; CLEAN 无队列 PRs 掉入到正标题合并 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber, (中文(简体) ), mergeMethod, (中文(简体) ), expectedHeadSha |
merge_pull_request | 着陆 | CLEAN PRs 的精确头图QL 合并( 无合并队列, 无管理员合并) | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber, (中文(简体) ), expectedHeadSha, (中文(简体) ), mergeMethod |
disable_auto_merge | CI 加速 | 根据拉动请求禁用自动相接 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber |
list_review_threads | 审查 | 查询带有分辨率状态的 GraphQL 评论线索 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber, (中文(简体) ), includeResolved |
reply_review_thread | 审查 | 对现有审查线索的答复 expectedHeadSha 警卫 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber, (中文(简体) ), threadId, (中文(简体) ), body, (中文(简体) ), expectedHeadSha |
resolve_review_thread | 审查 | 解析或解析审查线索 expectedHeadSha 警卫 | threadId, (中文(简体) ), resolve, (中文(简体) ), expectedHeadSha |
request_reviewers | 审查 | 要求用户、团队或bot账户进行审查 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber, (中文(简体) ), reviewers, (中文(简体) ), teamReviewers, (中文(简体) ), botReviewers |
add_pr_comment | 评论 | 张贴对公关的顶级评论,以触发机器人审查或张贴证据 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber, (中文(简体) ), body |
create_draft_pr | 生命周期 | 在 GitHub (默认为草稿模式) 上打开新拉请求 | owner, (中文(简体) ), repo, (中文(简体) ), title, (中文(简体) ), head, (中文(简体) ), base, (中文(简体) ), body, (中文(简体) ), draft |
precheck_pr | 生命周期 | 运行升级前验证(Linear 政策,包括 R9/R9 父母-接近/R10 自动关闭审计、客户数据/PII 刷新、模板证据) | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber (或生分行/标题/体), issueSnapshot, (中文(简体) ), requireTrackingMarker |
promote_pr_to_ready | 生命周期 | 通过 GraphQL 推广 PR 草案以供审查, 并加设闸门预选; 备用闸门默认执行 R10 下线后退 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber, (中文(简体) ), force, (中文(简体) ), overrideReason, (中文(简体) ), issueSnapshot, (中文(简体) ), requireTrackingMarker |
check_linear_policy | 政策 | 对照线性政策验证 PR 分支名称、标题和主体,包括自动关闭审计 | sourceBranch, (中文(简体) ), targetBranch, (中文(简体) ), prTitle, (中文(简体) ), prBody, (中文(简体) ), issueSnapshot, (中文(简体) ), requireTrackingMarker |
pr_land | 着陆 | 原子校验和一发自动并发/直接并发引擎与阻塞器崩溃;默认执行R10下行后退 | owner, (中文(简体) ), repo, (中文(简体) ), pullNumber, (中文(简体) ), mergeMethod, (中文(简体) ), issueSnapshot, (中文(简体) ), requireTrackingMarker |
gh_exec | 国 际 | 结构化、安全的 GitHub CLI (gh) 秘密洗涤和 JSON 剖析处决 | command, (中文(简体) ), cwd, (中文(简体) ), json, (中文(简体) ), allow_destructive |
list_running_jobs | 遥测 | 使用 vCPU 跟踪查询所有运行/ 排队的工作流程运行和任务全局或重播 | owner, (中文(简体) ), repo, (中文(简体) ), status, (中文(简体) ), actor, (中文(简体) ), runner_sku |
get_org_ci_summary | 遥测 | 含有热点、演员分布和 >2 vCPU违规检测的全Org CI/CD健康摘要 | owner, (中文(简体) ), lookback_hours, (中文(简体) ), include_blacksmith |
bulk_cancel_runs | 舰队行动 | 散装取消跑出或不想要的工作流程贯穿 Org 或带有干跑保护的 Repo | owner, (中文(简体) ), repo, (中文(简体) ), actor, (中文(简体) ), runner_label_filter, (中文(简体) ), dry_run |
GitHub 工作空间工具
Bifrost-federed pr-manager可以暴露出三种明确的寄存器工具:
| 工具 | 运行 | 警卫 |
|---|---|---|
get_repo_file | 读取 UTF-8 文件并 blob SHA | 128 KiB 最大; 选定的服务器侧证书 |
create_work_branch | 创建新 codex/ 分支 | 精确当前基数输入 SHA; 没有 ref 更新 |
put_work_file | 在 a 上提交一个 UTF-8 文件 codex/ 分支 | 精确的父和 blob SHA; 不可强制推回预置拒绝同时更改; 128 KiB 最大 |
这些工具默认不存在. 只启用注册 PR_MANAGER_GITHUB_WORKSPACE_TOOLS=enabled 缩小通配符后 pr_manager 在Bifrost名册中发放补助金,并验证预定的每笔现金额度。 它们不会合并,更改保护,安装一个App,或在许可失败后选择另一个账户. 如果拒绝更新确认丢失, 工具将读取分支一次: 它只有在遵守拟议承诺时才会返回成功, 否则 UNKNOWN_GITHUB_EFFECT 在重试前需要检查。 GitHub 仍然执行安装的寄存器和内容权限. A 类 403 Resource not accessible by integration 需要经授权的安装或单独的经授权的PR路由. 仅通过现有的名册撰写器对每个 Bifrost 虚拟密钥的预定工具名称进行注册;仅凭源注册并不能允许访问.
只读访问诊断
运行 pr-manager-mcp auth-doctor <owner> <repo> [expected-account],或使用
等值单位 diagnose_github_access MCP工具. 两者都使用现有的符号解析器
并把它的选择用于操作。 使用相同的进程范围证书
环境为预期的 Git 操作; 没有账户或全局 Git 配置
改为。 源类别描述解析器输入,而非推断
上游经纪人身份.
只有两个边框GET探测器运行: 认证的用户元数据和精确的目标 仓库。 输出保存了401,403,隐藏或缺失404,反应错误, 限速和运输结果,不返回反应体或秘密. 安装令牌可能无法识别用户;账户/App身份随即保留 不详。 仓库的作用是 没有 证书有效写入范围的证明 (精细的纹章可以更有限制性. 没有写作尝试测试它. CLI 退出 0 表示目标元数据可以读取,以及任何要求的账户匹配; 它不授权推动、合并或特权变更.
见 GitHub 认证权限。 。 。 .
仅供公众审查Yeti自我审查存放处使用, PUBLIC_REVIEW_GITHUB_TOKEN_FILE
可能指向单独挂载的 GitHub App 安装符号文件, 使用绝对
路径。 安装必须包括 review-yeti-ai/review-yeti-bot 并且已经
仓库 Variables: read
允许校验其基础自控暂停变量。 服务器将此文件粘贴
完整公共当局检查的身份;它从不切换到一般
GitHub 证书或本地证书 gh 权限出错后的身份。 如果专注
路径或证书无法获得,公众批准仍未确认,合并为
关闭。 此设置不会改变其他寄存器所用的证书 .
该存储处继续需要其严格的App 15368主机艺术权威;
私人App 4385771暂停豁免从未被用作公开审查证据.
Cloudflare 工人(全地着陆)
src/worker.ts 为无国籍的可流-HTTP MCP端点服务
https://mcp.calltelemetry.com/pr_manager/mcp (ADR 0781, ADR 1102) (中文(简体) ). 它揭露了
- 检查, create_draft_pr, (中文(简体) ), precheck_pr, (中文(简体) ),
promote_pr_to_ready, (中文(简体) ), pr_land, (中文(简体) ), wait_for_pr_state, (中文(简体) ), merge_pull_request, (中文(简体) ),
enable_auto_merge、评论和线索分辨率、重运行、工作流程发送和
等待工作三重奏——因此,ct-mcp路由器可以将每个起落工具用于任何
认证的呼叫者。 pr-manager(REL-2550)没有角色范围界定.
- Auth: Cloudflare Access JWT在"工人"中重新验证并失效.
- 证书:工人薄荷 App 安装本身的代号( 不允许)
(缩小范围)。 Cloudflare 访问是认证边界;着陆安全是
pr -manager的精确头
expected_head_sha警卫加基地分支保护 合并队列. - 边缘不相容,只按本地能力:
gh_exec(喷出当地ghCLI) (中文(简体) ) 和选入工作空间文件工具(PR_MANAGER_GITHUB_WORKSPACE_TOOLS) (中文(简体) ). - 节点/SSE入站点(
src/index.ts, (中文(简体) ),src/sse.ts)不变. - 当地 :
npm run dev:worker, (中文(简体) ),npm run build:worker。 。 。 .
设置配置( P)
运输
集装箱化服务器( E)dist/sse.js默认值 CMD 在 Docker 图像中)
揭露:
| 终点 | 运输 | 页:1 |
|---|---|---|
POST /mcp | MCP可流式HTTP(2025-03-26) | 基于会话的;响应流在SSE上以15s的保持活性帧,所以一个阻断工具呼叫永远不会让连接闲置到足够长的时间来绊倒中间人的不活动超时. 打开方式 initialize,然后发送 mcp-session-id 之后的电话. |
GET /sse + 键 POST /messages?sessionId=… | 遗产 HTTP+SSE | 输出 : keepalive 每15个评论框. |
GET /healthz | 卫生调查 | 返回活动传输集 . |
GET /metrics | 普罗米修斯文本 (0.0.4) | 只计数器——没有符号,请求路径,或寄存器内容. 无证似相 /healthz;在MCP会话机制前处理,所以刮出的时间从来不保留会话时间段. |
可通过环境或服务器选择: SSE_KEEPALIVE_MS (默认 1500),
MAX_STREAMABLE_SESSIONS (违约100起), STREAMABLE_SESSION_TTL_MS (默认)
30分钟——闲置的可流式HTTP会话被收割,因此被抛弃的客户端不能
用完盖子,然后 MAX_RUNNING_WAIT_JOBS (默认50——约束于
(同时担任投票背景工作).
计量
GET /metrics 以 Prometheus 文本格式曝光计数器, 由 a
无依赖性登记册src/utils/metrics.ts:表面足够小
那个 prom-client 将增加刻意收敛的图像的重量。 重访是否
需要直方图或实例.
| 度量衡 | 标签 | 含义 |
|---|---|---|
pr_manager_github_requests_total | method | GitHub API 请求尝试 。 故障率的分母. |
pr_manager_github_auth_failures_total | status | 401 = 符已过期、被撤销或无效. 403 = 符号缺乏所需的范围。 由于补救方法不同,分开处理. |
pr_manager_token_resolution_failures_total | source | 完全没有通过决议源解决一个符号. |
401倒计时后,故意倒计时. 一个401的后退
从中恢复是一个健康的要求;计算第一个反应将产生
工作系统的火速警报 只有幸存的401/403被计算在内.
test/unit/auth-metrics.test.ts 双向针入.
建议警示: rate(pr_manager_github_auth_failures_total[10m]) > 0 页:1
十点 持续的非零率意味着证书被暂停、取消或
未瞄准范围 —— 静态失败模式, 请求持续成功直到
短命的符号过期, 然后才开始失败 .
Async 等待资源界限
背景等任务可以被服务器的任何客户端所达到, 所以存储 自卫:
- 同时 运行 任务被封顶( e)
MAX_RUNNING_WAIT_JOBS在天花板上,start_pr_wait_job被拒绝. - Job ids是随机UUID——它们是工作上唯一的手柄,因此一个可预测的id会让一个客户端读取或取消另一个客户端.
cancel_pr_wait_job中止基本的民意调查循环( e)AbortSignal)和粘着:在飞行中民意调查结束后,被取消的工作从不会陷入满意/超时状态.- 每一个等待会束缚它的第一个观察头 或者供给
expectedHeadSha。一个头部变化结束于stale_head; 无法读取的检查结果unconfirmed而不是重用先前的成功。 满足的条件是一种观察,而不是审查或合并批准. - 要重用一个自有显示器,请提供私有随机UUID
monitorScopeId和准确的expectedHeadSha改为start_pr_wait_job相同的范围/储存/PR/目标/头重新使用其运行的工作。 一个不同的头 取代的只是 范围相同的阶段。 将UUID视为一种能力:将其保留在呼叫者/任务范围内,从不使用公有问题名,也不发布. 服务器只保留其散列 。 输入或不同范围使客户保持独立.
同步 vs 同步等待
wait_for_pr_state 将 HTTP 请求打开最多5分钟。 每个
跳入服务器边框前 闲置 连接时间( 入侵默认值)
改为 timeout server 50s),所以在网关上部署一个长时间同步等
可以在工具完成前用504来剪接——即使运输
保持溪流的活性,中介人可能仍然会限制总连接时间.
对于可能耗时超过~45秒的目标,偏好Aync形式:
start_pr_wait_job• 返回jobId以毫秒计.- 票价
get_pr_wait_job与jobId(建议间隔~5分). - 可选择
cancel_pr_wait_job。 。 。 .
.mcp.json 登记
将服务器添加到您的工程中 .mcp.json数字 :
{
"mcpServers": {
"pr-manager": {
"type": "stdio",
"command": "node",
"args": [
"pr-manager-mcp/dist/index.js"
],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}",
"CT_LINEAR_TEAM_PREFIXES": "${CT_LINEAR_TEAM_PREFIXES:-}"
}
}
}
}
构建和运行测试( R)
cd pr-manager-mcp
npm install
npm run build
npm test
着陆结果真相和失败的CI读取
enable_auto_merge 财务报告和审定财务报表 pr_land 然后读取当前身份约束状态。 这个 outcome 实值 queued, (中文(简体) ), merged, (中文(简体) ), armed, (中文(简体) ), refused,或 unconfirmed。无效变异 autoMergeRequest 不是拒绝的证据: 受保护的队列录入和立即合并都可以返回。 队列位置/状态在可用时保留. 未知的队列/自动相接/线程元数据是明确的,从不缺队列或即时相接的主张;检查当前状态而不是自动重复突变.
CLEAN直接合并只有在新鲜而无变化的PR头/碱性身份和完全成功有效的分支规则 pagination证明不应用合并队列后才能被允许. 光是CLEAN的错误就不是证据 缺少,部分,自相矛盾,或不可读状态拒绝倒置.
移民说明:CI收件已失效. 许可失败(包括403),404,瞬态5xx,不正确/不完整的pagination和已耗尽的收藏预算都是错误,不是空的成功检查列表. 现有的必要文本/App捆绑的检查、精确头条、审查行码、线条和客户数据门仍然适用。 被保护源合并,放行,部署,活验收仍然是单独的收据.