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 常问的五类只读问题
对话里反复出现的,大致是这五类:
- 定位已入库制品,并说明是否隔离、是否扫过。
- 查看依赖、声明许可与漏洞计数。
- 按仓库格式给出客户端配置示例(口令占位符)。
- 预览已有清理策略会影响什么(不执行)。
- 读取仓库或租户已有的安全评分快照。
明确不做:上传、删除、发布、下载、触发扫描、签发令牌。协议拉包继续走 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_artifact |
Artifacts:VIEW |
按名称片段等检索;至少一项过滤条件;pageSize 夹到 1–20 |
repo_locate_version |
Artifacts:VIEW |
精确定位主文件;多条时 ambiguous + 候选,不猜一条 |
repo_inspect_dependencies |
制品字段 Artifacts:VIEW;许可证发现另需 SecurityScans:VIEW |
依赖、声明许可、漏洞计数;不触发扫描 |
repo_list_repositories |
Repositories:VIEW |
可见仓库列表,不含 settings |
repo_client_setup |
Repositories:VIEW |
与控制台同源模板;口令为占位符 |
repo_artifact_security |
扫描历史等另需 SecurityScans:VIEW |
隔离、已有漏洞计数与扫描历史;不触发扫描 |
repo_repository_score |
SecurityScans:VIEW |
仓库/租户评分快照,不是单个包的分数 |
repo_cleanup_preview |
CleanupPolicies: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 Token |
401,无工具列表 |
| OAuth 刷新令牌 / 其他产品令牌 | 401 |
| 无 Bearer | 401(避免收成工具内错误导致模型盲重试) |
可见范围等于该用户在 /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 |
| Claude | claude_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(一句话) |
|---|---|---|
| 托管情报 MCP | Sonatype 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