ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

用 AI 助手只读查制品库:AngusRepo MCP 怎么接入

用 AI 助手只读查制品库:AngusRepo MCP 怎么接入

Coding Agent 要在对话里问「这个坐标在哪个仓、依赖和漏洞计数是什么」,并不需要把mvn/npm/docker搬进模型上下文。AngusRepo 把这条能力做成进程内的MCP 只读端点:宿主连上之后调用具名工具,服务端回环本进程管理 API,返回元数据投影。

结论:Repo MCP全部只读——默认暴露 8 个以repo_开头的工具;不代理/maven、/npm、/v2等协议路径;不下载二进制、不签发令牌、不执行清理。社区版不含 MCP;团队版 / 企业版 / 云服务版按文档接入。身份必须是门户签发的用户访问令牌(PAT),Deploy Token(repod_)会被 401。

控制台与客户端怎么接 MCP,见文末参考「通过 MCP 连接 AngusRepo」。本文说明只读八工具怎么划分、鉴权为何区分 PAT 与 Deploy Token,以及限流与版本边界。缓存一致性见文末参考「缓存架构设计与实践」。

1. Agent 常问的五类只读问题

对话里反复出现的,大致是这五类:

  1. 定位已入库制品,并说明是否隔离、是否扫过。
  2. 查看依赖、声明许可与漏洞计数。
  3. 按仓库格式给出客户端配置示例(口令占位符)。
  4. 预览已有清理策略会影响什么(不执行)。
  5. 读取仓库或租户已有的安全评分快照。

明确不做:上传、删除、发布、下载、触发扫描、签发令牌。协议拉包继续走 PAT 或 Deploy Token,不进 MCP。

2. 形态:进程内端点 + 回环

IDE / Agent --POST {网关}/repo/mcp--> Boot /mcp --回环 Bearer--> /api/v1/**(白名单 GET)

选择进程内端点,是因为权限和审计已经在 REST 上;再做一个外部 Node 去包 REST,会把策略复制一份。回环没有通用 path 参数,协议路径和下载接口不会被模型拼出来。

项口径
传输无状态POST;默认路径/mcp;经网关为{host}/repo/mcp
回环基址本机 Repo 端口;Bearer 原样转发;带X-Angus-Client-Source: mcp
注册面只注册tools;不注册 MCP resources / prompts / sampling
GM不新增 GM 资源;工具显隐跟现有@PPS权限码走

实例开关(发行配置口径,与用户文档一致):

配置作用
angus.mcp.enabled(环境变量ANGUS_MCP_ENABLED,未设置时为true)false时不注册端点;制品托管不受影响
angus.mcp.write-enabled产品侧固定false,无写工具

限流:每个账号每分钟最多30次合法tools/call;非法参数在计入限流前返回。社区版不种子「系统 → MCP」Tab,并强制关闭/mcp。

3. 八个工具(名称以文档为准)

系统管理员或持有全部只读权限时,tools/list应看到恰好 8 个:

工具权限要点做什么
repo_find_artifactArtifacts:VIEW按名称片段等检索;至少一项过滤条件;pageSize夹到 1–20
repo_locate_versionArtifacts:VIEW精确定位主文件;多条时ambiguous+ 候选,不猜一条
repo_inspect_dependencies制品字段Artifacts:VIEW;许可证发现另需SecurityScans:VIEW依赖、声明许可、漏洞计数;不触发扫描
repo_list_repositoriesRepositories:VIEW可见仓库列表,不含 settings
repo_client_setupRepositories:VIEW与控制台同源模板;口令为占位符
repo_artifact_security扫描历史等另需SecurityScans:VIEW隔离、已有漏洞计数与扫描历史;不触发扫描
repo_repository_scoreSecurityScans:VIEW仓库/租户评分快照,不是单个包的分数
repo_cleanup_previewCleanupPolicies:VIEW只走 GET preview,不创建执行记录

结果投影刻意丢掉downloadUrl、校验和、README 与许可证全文,降低模型侧误用与泄密面。

明确不在列表中:repo_search、repo_compare_versions(后续项、默认不注册)、repo_invoke_read、repo_connection_check,以及任何 publish / delete / execute cleanup / mint token。

secure为空或scanTrust=UNKNOWN表示尚未扫描,不等于安全。门禁默认关;Repo 执法、Security 引擎分工与产品文档 FAQ 一致。

4. 鉴权边界(容易踩坑)

凭证结果
门户签发的用户访问令牌(PAT)可进 MCP;工具集随角色收窄
repod_Deploy Token401,无工具列表
OAuth 刷新令牌 / 其他产品令牌401
无 Bearer401(避免收成工具内错误导致模型盲重试)

可见范围等于该用户在/api/v1的范围,与控制台一致;MCP不单独再解释协议路径上的repo:read/repo:write。PAT 上的repo:write只表示协议可写,不表示 MCP 可写。

个人令牌:右上角头像 →我的(/profile)签发。CI 用服务账号,不要把个人登录态写进仓库。

5. 宿主接入(与手册对齐的最小片段)

令牌放环境变量,勿写入仓库:

{"mcpServers":{"angus-repo":{"url":"https://<gateway-host>/repo/mcp","headers":{"Authorization":"Bearer ${ANGUS_REPO_TOKEN}"}}}}
宿主配置文件(以各宿主文档为准)
Cursor项目.cursor/mcp.json或用户级~/.cursor/mcp.json
Claudeclaude_desktop_config.json
VS Code工作区.vscode/mcp.json

仅 stdio 的宿主可用@anguskit/mcp --product repo转发;该进程读ANGUS_TOKEN/ANGUS_BASE_URL,与上面的ANGUS_REPO_TOKEN不是同一变量名。若默认 npm 源没有该包,文档建议改用https://repo.anguskit.com/npm/npm-public/。完整宿主表见文末参考:MCP 文档。

5.1 一次真实对话:用户问 → 工具 → 期望形态

步骤内容
用户问log4j-api 2.24.1 在哪个仓?隔离了吗?
应调用先repo_locate_version(坐标/名称 + 版本精确定位);若需漏洞计数与隔离字段,再repo_artifact_security(或定位结果里已有的安全投影字段,以实际返回为准)
期望字段 / 形态制品id为十进制字符串;仓库名、格式、版本可核对;多条主文件时返回ambiguous并列出候选,不由模型任选一条
不应出现downloadUrl、完整校验和、许可证全文;也不应触发新扫描

连上后也可先让助手tools/list确认恰好八个repo_*,再指定一条真实 Maven 坐标调用repo_locate_version做冒烟。

6. 与业界形态的对照(极短)

形态代表与 AngusRepo(一句话)
托管情报 MCPSonatype Guide查公开组件情报,不读客户仓
平台宽工具面JFrog Platform MCP含写操作面;AngusRepo 选窄只读
进程内窄工具AngusRepo回环本进程 REST,协议路径隔离

对照说明产品取舍,不是采购排名。细节以各厂商当日文档为准。

7. 边界与翻车表

现象原因处理
连不上社区版 /enabled=false/ URL 错换版本或开开关;核对/repo/mcp
401用了repod_或刷新令牌改用「我的」里签发的 PAT
工具很少角色缺权限码按文档补Artifacts:VIEW等
想让 Agent 拉 jar误以为 MCP 代理协议用 mvn/npm/docker 走协议路径
把仓库分当成包分误读repo_repository_score制品看漏洞计数与隔离字段
ambiguous同坐标多条主文件列出候选让人挑,不任选
rate_limited超过 30 次/分钟稍后再试;合并提问

FAQ

MCP 会不会删包或执行清理?

不会。写开关恒关;清理只有 preview。

和 Skill 什么关系?

Skill 描述该问哪些制品风险;MCP 提供可调用的查询工具。两者可同时用(产品文档口径)。

为什么不做通用只读网关?

具名工具限制回环白名单,避免把管理 API 整面暴露给模型,并便于投影脱敏。

Deploy Token 为什么不能连 MCP?

repod_是单仓 CI 凭据。若能调管理面 MCP,会把自动化令牌变成对话身份——鉴权前直接 401。

小结

  • 核心取舍:只读、八工具、回环 REST、协议路径隔离。
  • 接入核心:网关/repo/mcp+ PAT;Deploy Token 不行。
  • 社区版没有这条能力;需要时对照团队/企业/云服务版文档与控制台开关。

参考文章

  • 通过 MCP 连接 AngusRepo:https://www.anguskit.com/zh/docs/repo/get-started/mcp
  • AngusRepo 产品介绍:https://www.anguskit.com/zh/docs/repo/get-started/introduction
  • AngusRepo 缓存架构设计与实践:https://www.anguskit.com/zh/blog/angusrepo-cache-architecture
  • 制品入库怎么拦住漏洞和许可证问题:https://www.anguskit.com/zh/blog/artifact-repo-vulnerability-license-scanning
  • Deploy Token 与 ACL:https://www.anguskit.com/zh/blog/angusrepo-deploy-token-pat-acl-guide
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进