mcpField
A
approvepath

approvepath

本地服务
github.com/CloudCorpRecords版本控制01 周前更新

关于 approvepath

approvepath 将 PR 修改文件映射到 CODEOWNERS 负责人,并根据提供的评审历史找出常见评审者。它仅使用本地输入,按明确的一组 CODEOWNERS 匹配规则计算,不查询代码仓库或托管 API。

主要功能

  1. 01按顺序匹配 CODEOWNERS 规则
  2. 02按最后匹配规则确定负责人
  3. 03按文件统计常见评审者
  4. 04列出无负责人文件和所需评审者
  5. 05提供带路径信息的输入校验

适用场景

  1. 01确定 PR 中各文件的负责人
  2. 02查找曾评审变更文件的人员
  3. 03查看哪些变更文件没有负责人

MCP 相关

MCP 服务提供 `map_approvals`,接收 CODEOWNERS 规则、变更文件和可选的评审历史,并返回文件负责人、常见评审者、无负责人文件及所需评审者。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-approvepath": {
"command": "npx",
"args": [
"-y",
"@reneturcios/approvepath"
]
}
}
}
启动命令npx -y @reneturcios/approvepath

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@reneturcios/approvepath0.1.0
ocighcr.io/cloudcorprecords/approvepath:0.1.0

工具

1

收录的工具列表 · 更新于 1 周前

参数类型必填说明
reviewsarray否过往审查活动(可选):{reviewer, files}
codeownersarray是按文件顺序排列的 CODEOWNERS 规则:{pattern, owners}
changed_filesarray是PR 变更的文件路径

详细介绍

approvepath

CODEOWNERS 文件会指出谁应该批准一项更改。 审核历史则会显示谁实际参与审核。approvepath 会针对一个拉取请求并列展示两者:你向它提供 CODEOWNERS 规则、PR 涉及的文件,以及已有的审核活动,它就会针对每个文件返回规则指定的所有者,以及此前审核过该具体文件的人。

模式匹配遵循固定的 CODEOWNERS 语义子集,因此结果不会受你设想的 CODEOWNERS 方言影响。比较前,会从模式和文件路径中去掉任何开头的 /。以 / 结尾的模式是目录前缀:它匹配该目录下的所有文件。包含 * 的模式是 glob,必须匹配整个路径——** 匹配包括 / 在内的任意字符序列,而单个 * 匹配不含 / 的任意字符序列。其他模式会匹配与其完全相同的文件,或其下级文件(以该模式加 / 为前缀);因此,单独的目录名会覆盖其整个子树。

如果有多条规则匹配同一个文件,则以文件中最后一条匹配规则为准——这与 CODEOWNERS 本身采用的覆盖规则一致,也正因如此,较早的宽泛规则可以将一个子树交给某个团队,而之后较窄的规则又能将其中一部分交还。如果某个文件没有匹配任何规则,则该文件没有所有者:其 owners 列表为空,pattern 为 null,并按输入顺序出现在 unowned_files 中。

审核历史按实际记录统计。对于每个更改的文件,frequent_reviewers 会统计每位审核者提供的审核条目中,准确列出该文件的次数——不按前缀匹配,也不按目录匹配。审核者按次数降序、名称升序排列,且只返回排名前三位。required_reviewers 汇总 PR 中所有生效规则的全部所有者,去重并排序,这是对“这个 PR 实际需要谁批准?”最简洁且准确的回答。

所有计算都仅依据传入的参数在本地完成:不会读取代码仓库,不会调用托管服务 API,也不会进行任何猜测。格式错误的输入——例如模式为空的规则、不是非空字符串的更改文件,或缺少 reviewer 的审核条目——会产生验证错误并指出有问题的路径,不会返回部分结果。

CLI

npx @reneturcios/approvepath map --input args.json
npx @reneturcios/approvepath --version

args.json 包含完整的参数对象:

{
  "codeowners": [
    { "pattern": "src/", "owners": ["@core"] },
    { "pattern": "src/api/", "owners": ["@api-team", "sam"] }
  ],
  "changed_files": ["src/api/handler.ts", "README.md"],
  "reviews": [
    { "reviewer": "sam", "files": ["src/api/handler.ts"] },
    { "reviewer": "lee", "files": ["src/api/handler.ts"] }
  ]
}

reviews 为可选项,默认值为 []。结果以 JSON 格式打印:

{
  "files": [
    {
      "file": "src/api/handler.ts",
      "owners": ["@api-team", "sam"],
      "pattern": "src/api/",
      "frequent_reviewers": [
        { "reviewer": "lee", "reviews": 1 },
        { "reviewer": "sam", "reviews": 1 }
      ]
    },
    {
      "file": "README.md",
      "owners": [],
      "pattern": null,
      "frequent_reviewers": []
    }
  ],
  "unowned_files": ["README.md"],
  "required_reviewers": ["@api-team", "sam"]
}

退出代码:成功时为 0,发生运行时错误时为 1(包括输入文件无法读取或无效,以及输入无效),用法错误时为 2。

MCP 服务

npx -y @reneturcios/approvepath mcp

MCP 客户端配置:

{
  "mcpServers": {
    "approvepath": {
      "command": "npx",
      "args": ["-y", "@reneturcios/approvepath", "mcp"]
    }
  }
}
工具
  • map_approvals — 映射拉取请求的审批路径。

    • codeowners(数组,必需,可以为空)— 按文件顺序排列的 CODEOWNERS 规则;每个条目为 {pattern, owners},其中 pattern 是非空字符串,owners 是由非空字符串组成的数组(可以为空)
    • changed_files(字符串数组,必需,不能为空)— PR 更改的文件路径
    • reviews(数组,可选,默认值为 [])— 过去的审核活动;每个条目为 {reviewer, files},其中 reviewer 是非空字符串,files 是字符串数组(可以为空)

    返回 {files, unowned_files, required_reviewers},其中 files 按输入顺序为每个更改的文件包含一个 {file, owners, pattern, frequent_reviewers} 条目。

Docker

docker run -i ghcr.io/cloudcorprecords/approvepath
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/approvepath map --input /w/args.json

开发

npm install
npm run build   # tsc -> dist/
npm test        # tsx --test test/*.test.ts (pure local, no network)
npm run dev     # run the CLI from source

许可证

MIT — 版权所有 (c) 2026 Rene Turcios

评论

支持 Markdown

第一次接触 MCP?

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

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