前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
返回 AI 情报前线
All News · 全部资讯9375
  • Harness决定AI Agent能力:同模型不同表现
  • Claude Code权限绕过:Read拒绝后Bash仍可读取
  • 生产级Agent系统实战:LLM路由、Prompt合约与PR安全审查
  • LCLM:16倍压缩的潜在上下文语言模型
  • Claude Code mods解析:何时需要构建插件
  • Linus确认Linux内核进入「AI新常态」
  • 如何验证Agent实际完成了它声称的任务
  • Claude Code /compact 后哪些内容真正存活
  • 开源安全模型 apex-flash-1:60 个遗留 Bug 任务解出 40 个
  • yOGI Neural Grid:强制验证模型引用来源的工程实现
  • 美团开源LongCat-Video:13.6B参数统一视频生成模型
  • Agent技能需要包管理器而非仅靠Prompt
  • n8n AI Agent 生产环境失败根因与修复方案
  • 565 行 Python 从零实现编程智能体
  • 四大前沿模型横向评测:Astra擅计算机使用、Argon强法律金融、Sol价格最优
  • 本地RAG开发113个评估问题后的实战总结
  • AI重写让我重新审视运行时成本:Node.js转Go/Rust的算账
  • MCP工具超90个时的平台化架构设计
  • Homa:专为AI集群设计的TCP替代网络协议栈
  • 我为编码Agent的测试篡改问题做了个AdversaryGate
  • SaaS支持文档检索应选语义嵌入而非关键词
  • AI 审核员知道太多会变差:验证者应不知情
  • 长文档JSON提取超时?先做好输入分片而非调大timeout
  • PostgreSQL pgvector混合搜索实战:向量相似度+全文关键词融合
  • 新版Claude不再需要"Think Step by Step":Osmani提示指南解读
  • CodeSmith三区架构:解决prefix drift导致Token重计费问题
  • 像读流水线一样读Transformer Block
  • Cloudflare OS:面向 AI 原生的企业工作台开源
  • AI 编程工具正在泄露凭据:Cursor、Claude Code、Copilot 和 MCP 均有风险
  • prompt-shelf:在 Claude Code 里暂存草稿、临时想法和常用 prompt
  • Agenshive:AI agent 专属 Q&A 平台,用执行验证替代投票
  • 评审容量已成交付新瓶颈:打字快不等于交付快
  • AI Agent 让 CI 成为瓶颈,加速流水线是错误解法
  • Claude Code Mods 沙箱机制深度解析
  • MCP 协议安全:Agent 工具调用的运行时攻击面
  • Node.js多LLM提供商集成实战:统一输出契约与回退策略
  • Google RRSI 方法:防止自改进 AI Agent 记忆测试任务
  • DeepSeek Harness v0.2支持Claude Code Mods兼容层
  • MCP协议深度解析:AI工具集成标准现状与局限
  • 生产级LLM Gateway四个关键设计决策
  • MCP JSON 配置优化:同步一次节省 98% Discovery Token
  • Agent 静默失败代价 2500-8000 美元:用权威系统交叉验证代替执行日志
  • Agent 静默失败导致数千美元损失:如何用外部核查机制堵漏
  • Grok Build 真实用户体验:宣传与实际的落差
  • 两个面向AI Agent的x402 API:页面质量检测与成本计算
  • AI幻觉报告泛滥,谷歌暂停开源漏洞奖励计划
  • Rust成为微软内部一级语言,与C++/C#并列
  • 生产级Agentic RAG系统实战课程
  • 已加载 48 / 9375
8.0
热点
AI SCORE
编程提效2026-10-05 04:08

MCP工具超90个时的平台化架构设计

dev.to · AI#MCP#Agent#架构设计
Editor brief · 编辑速览

MCP工具暴露从90个到平台化需统一身份、计量、审计;命名规范{分类}.{动作}_{对象},每个工具独立权限测试。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

通过 Model Context Protocol 暴露一个内部工具是周末就能搞定的事。但要把九十多个工具同时暴露给人类用户和 AI Agent,同时不让 MCP 端点变成凭证泄漏的重灾区、审计日志变成消防演练,就是一个平台级别的问题了。

本文是关于如何设计这个平台的简版方案。一句话总结:把 MCP server 视为与 LLM 网关同族系的工具代理。相同的身份规则(无静态密钥)、相同的计量口径(每次调用都是一条事件)、相同的审计规范。另外加上 LLM 路径不需要的两样东西:第三方凭证的存储包装,以及回传数据的 PII 脱敏环节。

1. 按类别组织目录,而不是按工具

在 90+ 工具的规模下,首要失败是组织层面的,而非性能。几条规则让目录保持健康:

命名即契约:{category}.{verb}_{object},例如 issues.create_ticket、mail.send_draft、ci.get_pipeline_logs。重命名一个工具是破坏性变更,需要有弃用窗口期,而非静默修改。

一个工具 = 一个权限单元 + 一个审计单元 + 一个测试单元。一个"搞定工单追踪器一切"的工具,是你无法安全授予的权限、无法阅读的审计行、无法编写的测试。要拆分到每个工具同时满足这三者。

在 schema 中版本化,而非名称(issues.create_ticket@v2),并在弃用窗口期内同时服务所有活跃版本。

授予工具组,而非全集。服务端几乎不关心 94 个 schema,客户端则不然:一个加载了所有 schema 的 Agent 仅工具定义就能烧掉 30k+ token 的上下文。客户端请求一个组(如 ci、mail),组就是授权单元。

2. 让 Agent(和审计员)保持理智的工具设计模式

一个值得审视的工具定义大致长这样:

{
  "id": "issues.create_ticket@v2",
  "input_schema": {
    "type": "object",
    "required": ["project", "summary"],
    "properties": {
      "project": { "type": "string" },
      "summary": { "type": "string", "maxLength": 256 }
    }
  },
  "errors": ["permission_denied", "validation_failed", "upstream_error", "rate_limited"],
  "pii": { "inputs": ["description"], "policy": "mask-on-store" },
  "permissions": { "min_role": "contributor", "write": true, "idempotency": "client_key" }
}

背后的模式:

幂等键用于可重试的写操作。带相同 key 的重试创建返回同一张工单,而非重复工单。将其作为写工具的注册时 lint 检查。

错误是契约的一部分。将上游失败规范化为小规模分类,并附带 retryable 标志(有的话加上 Retry-After)。Agent 根据标志重试;人类阅读错误码。

读廉价,写响亮。写操作需要最小角色和作用域(project、space、folder)。写的审计事件携带完整(脱敏后的)输入;读的审计事件只记录形状。

所有列表都要设上限。默认 limit 50,服务端上限 200,cursor 分页。无上限的列表工具是上下文窗口的炸弹。

返回所请求的,而非你所知道的。"关联工单"这类 enrichment 是 Agent 可选择调用的第二个工具。过度返回的工具是 Agent 无法规划的。

3. 认证:OAuth 2.1 + PKCE,外加几个不可妥协的要点

Happy path 很简单:客户端针对你的身份平台运行授权码流程 + PKCE,获取短期访问令牌,在 MCP 端点上出示它。服务端验证令牌、解析主体、检查工具授权。真正安全的关键在于:

所有客户端类型都启用 PKCE,包括 IDE 和 Agent 运行时。MCP 客户端通常无法持有密钥。

Resource indicators。令牌的受众是 MCP server。为其他服务签发的有效令牌会被拒绝。

动态客户端注册不是授权。DCR 保持"带上你自己的 Agent 运行时"这种模式可行(重定向 URI 白名单、认证方法检查),但工具访问仍需通过显式授权流转。

组织内统一一种令牌时效策略。例如:交互式客户端用 15 分钟访问令牌,工作负载用 1 小时,Agent 不使用刷新令牌(它们通过工作负载身份重新认证)。

每个工具组一个 scope(mcp:ci:read、mcp:issues:write),让consent 屏幕可读,而非 94 个字符串的堆砌。

客户端的令牌永不发送到 SaaS。代理用自身凭证调用下游系统,并在带内携带主体用于审计和计量。当下游系统有清晰的用户级委托模型时,优先使用它;这是更强的设计。

4. 存储的密钥:信封加密,以及它为何不是控制手段

代理必须为背后的系统存储凭证。用标准信封机制来做:

KMS key-encryption key(永不离开 KMS,自动轮换)
  └── 每个类别一个 data-encryption key(AES-256,由 KEK 包装)
        └── 秘密值:AES-256-GCM(DEK, value),每次写入fresh 96-bit nonce

每个类别独立的 DEK 将爆炸半径控制在一个类别内。每个用户的令牌在类别 DEK 下再套一层用户专属 DEK。

轮换设计上很便宜:KMS 轮换 KEK;定时任务重新包装 DEK。两者都不触碰密文。

但静态加密只回答了"数据库泄露不等于凭证泄露"。真正的控制是:没有任何角色(break-glass 除外)能读取秘钥。代理在进程内使用它完成一次调用后将缓冲区清零,审计事件记录调用和主体,绝不记录凭证。门户应显示"凭证存在,上次轮换于 N 天前",不多不少。

5. 回传时脱敏

LLM 网关可以保持对载荷无感知。MCP 路径不行:工具结果就是产品。因此结果在到达客户端之前、存储之前会经过一道 PII 脱敏步骤,目录中每个工具的 pii 字段标明了哪些输入输出需要处理。这也解释了为什么写操作的审计存储脱敏后的输入,而非原始输入。

要点清单

  • 代理,而非代理服务器:无静态密钥,每次调用都计量和审计
  • 按类别命名、一工具一权限、schema 版本化、组授权
  • 幂等性、错误分类、有界列表、不过度返回
  • OAuth 2.1 + PKCE、受众绑定令牌、DCR ≠ 授权、组级 scope
  • 信封加密配类别级 DEK,秘钥使用后即销毁
  • 结果和存储的审计输入均需 PII 脱敏

这是我的书《The AI Gateway Playbook》第五章的精简版,该章还涵盖了 LLM 网关本身:模型注册表、无密钥认证和 RBAC、配额与预算、RAG 团队助手以及运营手册。Leanpub 页面有免费样章。

声明:本文及本书由 AI 辅助基于我设计并运行此类平台的经验起草。所有示例均为通用示例。

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
AI重写让我重新审视运行时成本:Node.js转Go/Rust的算账
下一篇
Homa:专为AI集群设计的TCP替代网络协议栈