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