技术热点落地:MCP 1.0 + 官方 Registry —— 一周把企业内部工具与数据源全量接进 Claude / Cursor / Codex / Cline 的实战手册(2026-06-11)
适用场景与目标
背景速览: 过去 24 小时,MCP(Model Context Protocol) 1.0 正式落地,配套发布了:
- 官方 Registry
mcp-registry.dev—— 集中托管社区与官方 MCP Server 的元数据(Server 名称、版本、能力声明、传输方式、OAuth scope),所有兼容客户端(Claude Desktop、Cursor、Codex CLI、Cline、Hermes Agent、Cherry Studio、Continue、Zed 等)可一键安装 - OAuth 2.1 鉴权基线 —— 用 Authorization Code + PKCE 标准化”代表用户访问第三方服务”,HTTP MCP 传输的鉴权不再各自造轮子
- Server-Sent Events(SSE)作为远程传输一档 ——
http://host/mcp+text/event-stream让 Server 端可以推送进度、异步任务状态,告别轮询 - 可发现性文件
/.well-known/mcp.json—— 一个域名(公司内网)放一个文件,Agent 自动列出”这家公司能用什么” - 与 Skills 协议联动 —— Server 暴露的
tools/resources/prompts可在 Skill 文档里直接引用,Agent 自动加载依赖
这不是又一份”协议文档”。它意味着 “N×M 适配”(N 个 Agent × M 个内部工具)正式变成 “N+M”(N 个 Agent 接入 MCP 客户端,1 次开发 M 个 MCP Server 给所有人用)。对每个正在做 AI 编程 / 内部 Agent 落地的团队,这是 2026 年最值得立即动手的一周。
适用场景:
- 公司内部有 5~50 个 SaaS / 自研系统(Jira / Confluence / GitLab / ClickHouse / 内部 Wiki / 监控 / 工单 / 客户系统),当前 Agent 接一个写一个适配层
- 团队在用 Claude Code / Cursor / Codex CLI / Cline / Hermes Agent / 自研 Agent 中的多个,想统一工具接入
- 你在维护一个有 50+ API 的微服务平台,希望 AI Agent 能”用得明白”它们
- 安全 / 合规团队需要”Agent 到底能调什么、调了几次、传了什么”的完整审计
核心目标:
用 一周时间 把”公司里的 Agent 工具链”从”各客户端分别写适配器”升级为”MCP 中心化”:
- 今天:选 3 个最高频的内部工具(如 GitLab、PostgreSQL、Confluence),各起一个 MCP Server,挂到本地 Claude Desktop / Cursor 上跑通
- D+1~D+2:完成 OAuth 2.1 鉴权,部署到一个能 SSE 推送的内网网关
- D+3:在
mcp-registry.dev提交公司 Registry 镜像(私有/内网),让团队所有人”一键安装”公司 Server - D+4:接入可观测性(OpenTelemetry traces、Token 计量、限流)
- D+5:编写 3 份
SKILL.md,让 Agent 知道”何时用哪个 Server、组合使用顺序” - D+6~D+7:把剩下 10~20 个内部工具批量接入,跑通端到端业务流(如”找昨天提的 Bug → 看相关代码 → 写修复 PR → 通知 reviewer”)
最小可行方案(MVP)步骤
假设你的最小环境是:内网 Linux 节点(4C8G 即可),Python 3.11+ / Node.js 20+,有 GitLab / PostgreSQL / Confluence 各一个测试实例,团队 5~20 人每天用 Claude Desktop 或 Cursor。
步骤 0:先在本地跑通”参考实现”,别一上来就造轮子
# 1) 安装 MCP Python SDK(6/10 发布 1.0.0,支持 OAuth 2.1 + SSE)
pip install "mcp[cli]>=1.0.0"
# 2) 克隆官方示例
git clone https://github.com/modelcontextprotocol/servers.git
cd servers && pip install -e ".[everything]"
# 3) 在 Claude Desktop 配置里加上官方 SQLite Server(最简范例)
# macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
# Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"sqlite": {
"command": "uvx",
"args": ["mcp-server-sqlite", "--db-path", "/tmp/test.db"]
}
}
}
打开 Claude Desktop 看到 🔨 工具图标下出现 “sqlite” = 成功。这一步的目的是验证 SDK、客户端、传输链路都正常,不要直接开始改业务。
步骤 1:挑 3 个最高频工具,按”复杂度递升”顺序
| 工具 | MCP 选型 | 预计工时 | 价值验证点 |
|---|---|---|---|
| GitLab | 官方 mcp-server-gitlab(fork 自 community) | 0.5 天 | Agent 能 list MR、读 diff、创建 issue |
| PostgreSQL | 官方 mcp-server-postgres(只读安全模式) | 0.5 天 | Agent 用 SQL 查数据、能看 EXPLAIN |
| Confluence | 自研(官方没有) | 1.5 天 | Agent 能按空间/标题搜页面、读全文、创建草稿 |
关键决策点:先用现成 Server,还是自研?
- 官方 Registry 里有的(搜
mcp-registry.dev)→ 直接 fork,别从零写- 内部 API、无 OAuth、有特殊分页/限流 → 自研,参考官方
mcp-server-template
步骤 2:自研一个 MCP Server 的最小骨架(Python)
# confluence_mcp/server.py —— Confluence MCP Server 最小骨架
from mcp.server.fastmcp import FastMCP
from mcp.server.auth.settings import AuthSettings
import httpx, os
mcp = FastMCP(
name="confluence",
instructions="Confluence Cloud 访问。优先用 cql 搜索;写入仅支持创建草稿。",
auth=AuthSettings(
issuer_url=os.environ["OAUTH_ISSUER"],
required_scopes=["confluence:read", "confluence:write:draft"],
),
)
@mcp.tool()
async def search_pages(cql: str, limit: int = 20) -> list[dict]:
"""按 CQL 搜索 Confluence 页面。
cql 示例: 'space=DEV and title~"部署"' 或 'type=page and lastModified>2026-06-01'
返回: [{'id', 'title', 'url', 'lastModified', 'excerpt'}]
"""
async with httpx.AsyncClient() as c:
r = await c.get(
"https://your-domain.atlassian.net/wiki/rest/api/content/search",
params={"cql": cql, "limit": limit},
headers={"Authorization": f"Bearer {os.environ['CONFLUENCE_TOKEN']}"},
)
r.raise_for_status()
return [
{"id": p["id"], "title": p["title"], "url": f"...{p['_links']['webui']}",
"lastModified": p["version"]["when"], "excerpt": p.get("excerpt", "")}
for p in r.json()["results"]
]
@mcp.tool()
async def create_draft(space_key: str, title: str, body_markdown: str) -> dict:
"""在指定空间创建页面草稿(不会自动发布)。"""
# ... 转换 markdown → storage format,调 POST /content
# 返回 {'id', 'url', 'status': 'draft'}
if __name__ == "__main__":
mcp.run(transport="sse", host="0.0.0.0", port=8765)
启动:
OAUTH_ISSUER=https://auth.your-company.internal \
CONFLUENCE_TOKEN=... \
python -m confluence_mcp.server
# 监听 http://0.0.0.0:8765/sse (SSE 端点)
步骤 3:挂到内网网关 + 私有 Registry
# /etc/nginx/conf.d/mcp-gateway.conf
server {
listen 443 ssl;
server_name mcp.your-company.internal;
# 可发现性文件:让 Agent 自动列出"这家公司能用什么"
location = /.well-known/mcp.json {
root /var/www/mcp;
add_header Cache-Control "public, max-age=300";
}
# 按 Server 名子路径转发
location /gitlab/ { proxy_pass http://mcp-gitlab:8765/sse; proxy_buffering off; }
location /pg/ { proxy_pass http://mcp-pg:8765/sse; proxy_buffering off; }
location /confluence/ { proxy_pass http://mcp-confluence:8765/sse; proxy_buffering off; }
# SSE 必须的几个 header
proxy_set_header Connection '';
proxy_http_version 1.1;
proxy_read_timeout 86400s;
}
可发现性文件 /var/www/mcp/.well-known/mcp.json:
{
"version": "1.0",
"servers": [
{"name": "gitlab", "url": "https://mcp.your-company.internal/gitlab/sse", "auth": "oauth2.1", "scopes": ["read_user", "api"]},
{"name": "postgres", "url": "https://mcp.your-company.internal/pg/sse", "auth": "oauth2.1", "scopes": ["db:read"]},
{"name": "confluence", "url": "https://mcp.your-company.internal/confluence/sse", "auth": "oauth2.1", "scopes": ["confluence:read", "confluence:write:draft"]}
]
}
团队成员配置 Claude Desktop / Cursor:
{
"mcpServers": {
"company": {
"url": "https://mcp.your-company.internal/.well-known/mcp.json",
"auth": "oauth2.1"
}
}
}
→ 客户端自动拉取列表、引导用户完成 OAuth 授权、连接所有 Server。这是 “N+M” 的真正落地形态。
步骤 4:在私有 Registry 镜像上发布
# 注册公司命名空间
mcp-registry login --registry https://mcp.your-company.internal
mcp-registry publish ./confluence-mcp \
--name @your-company/confluence \
--version 1.0.0 \
--transports sse \
--entrypoint https://mcp.your-company.internal/confluence/sse \
--scopes "confluence:read,confluence:write:draft"
团队成员后续安装只需:
mcp-registry install @your-company/confluence
关键实现细节
1. 工具(tool)描述的写法直接决定 Agent 会不会用、能不能用对
反面教材(实际工程里见过最常见的错误):
@mcp.tool()
async def query(sql: str) -> list: # ❌ 名字太通用
"""查询数据库。""" # ❌ 描述无信息
...
Agent 看到这种 tool 会:① 不知道在什么场景下用它 ② 不知道能查哪些表 ③ 不知道有什么限制。
正例:
@mcp.tool(
name="pg_query",
description=(
"在只读模式下执行 SELECT 查询 PostgreSQL 业务库(schema: biz_oltp, biz_dw)。"
"禁止 DDL/DML(INSERT/UPDATE/DELETE/DROP/TRUNCATE/CREATE/ALTER/GRANT/REVOKE)。"
"单条 SQL 最多扫描 10 万行(自动 LIMIT 截断),超时 30s。"
"返回最多 200 行;超出会被截断并提示完整查询走 `pg_export`。"
"输入必须是已参数化的字面量,禁止字符串拼接(防止注入)。"
),
)
async def pg_query(sql: str, params: list | None = None) -> dict:
"""..."""
关键原则:tool 的
description是给 LLM 看的”人话文档”,要写得像 PR Review 时给同事的注释:能做什么、不能做什么、有什么限制、典型输入长啥样、错误时怎么 fallback。
2. 用 resources 暴露只读上下文,避免每次都调 tool
@mcp.resource("schema://tables")
async def list_tables() -> str:
"""业务库所有表的 schema 摘要(自动按用户权限过滤)。"""
# 返回 markdown 表格:表名 | 用途 | 主键 | 常见过滤字段
...
Agent 第一次进新会话时自动拉一次这个 resource,就知道有哪些表、能 join 什么。tools 是动作,resources 是只读上下文——别把所有东西都做成 tool。
3. 异步任务用 SSE 推进度,而不是让 Agent 反复 poll
@mcp.tool()
async def start_etl_job(dataset: str) -> str:
"""启动 ETL 任务,返回 job_id。"""
job_id = await submit_job(dataset)
# 注册一个 SSE 事件流,任务完成时推 'job_done' 事件
register_progress_stream(job_id, f"/jobs/{job_id}/events")
return job_id
@mcp.resource("jobs://{job_id}/status")
async def job_status(job_id: str) -> str:
return json.dumps(await get_job_status(job_id))
客户端订阅 jobs://{job_id}/events 就能看到 “10% → 30% → 100% → summary”,不用 Agent 反复调 tool。对长任务(>30s)必须走 SSE,否则 Agent 会浪费 100+ 个 token 反复询问”好了吗”。
4. OAuth 2.1 PKCE 的最小正确实现
# mcp_oauth.py —— 给 MCP Server 加 Authorization Code + PKCE
from mcp.server.auth import OAuthServerProvider
import secrets, hashlib, base64
class CompanyOAuthProvider(OAuthServerProvider):
async def authorize(self, client_id, scope, code_challenge, code_challenge_method, redirect_uri):
# 1) 校验 client_id、redirect_uri 白名单
# 2) 把 code_challenge + state 存到 session,生成 auth_code
# 3) 返回给用户的浏览器:redirect 到企业 SSO
...
async def exchange(self, code, code_verifier, redirect_uri):
# 校验 PKCE:base64url(sha256(code_verifier)) == code_challenge
verifier_hash = base64url_encode(hashlib.sha256(code_verifier.encode()).digest())
assert verifier_hash == stored_challenge
# 发 access_token(短期)+ refresh_token(长期)
...
MCP 1.0 起所有远程传输默认走 OAuth 2.1。不要再用 API Key 写死在配置里——一旦泄漏无法撤销,OAuth 至少能 scope 隔离 + 一键 revoke。
5. 可观测性:每次 tool 调用都打 OpenTelemetry span
from opentelemetry import trace
tracer = trace.get_tracer("mcp.confluence")
@mcp.tool()
async def search_pages(cql: str, limit: int = 20) -> list[dict]:
with tracer.start_as_current_span("confluence.search_pages") as span:
span.set_attribute("mcp.tool.name", "search_pages")
span.set_attribute("mcp.user.id", current_user_id())
span.set_attribute("confluence.cql.length", len(cql))
span.set_attribute("confluence.limit", limit)
try:
r = await call_confluence(cql, limit)
span.set_attribute("confluence.result.count", len(r))
return r
except httpx.HTTPStatusError as e:
span.record_exception(e)
span.set_attribute("confluence.http.status", e.response.status_code)
raise
导出到 Jaeger / Tempo / Datadog 之后能看到:“Agent 在哪个 tool 上花了多久、调用了几次、失败率多少、单用户 Token 消耗分布”。这一步是 AI 成本控制的基础设施——没有它你不知道哪个 Server 在烧钱。
常见坑与规避清单
坑 1:M × N 适配症——重复造轮子
症状:每个 Agent(Claude Code / Cursor / 自研)都写一套 Jira / GitLab 适配器,三套实现三个 bug。
规避:
- 一律走 MCP Server;Agent 端只需要 MCP 客户端一种实现
- 已有 OpenAPI / GraphQL:自动生成 MCP Server(
openapi-mcp-generator/graphql-mcp),不要手写 - 内部 SDK:包一层 MCP,不要”为了 MCP 重写业务”
坑 2:把数据库全权限暴露给 Agent
症状:MCP Server 拿了数据库的 DDL/DML 权限,Agent 一句话 DROP TABLE 全没了。
规避:
- 默认只读连接,新账号最小权限(
GRANT SELECT ON biz_oltp.* TO 'mcp_agent'@'%') - tool 描述里显式列出禁用语句(DDL/DML/GRANT/REVOKE/TRUNCATE/CREATE INDEX)
- 在 driver 层加 SQL 解析器拦截:检测到
;之后还有语句、检测到--注释注入、检测到字符串拼接式IN (...),直接拒 - 写操作单独建
pg_writeServer,走审批流(tool 返回requires_approval: true,Agent 把”申请”提交给人审)
坑 3:工具太多 → Token 爆炸
症状:挂了 30 个 Server,每个 20 个 tool,系统提示词直接 30k+ tokens,单次调用贵 5 倍,模型还容易选错。
规避:
- MCP 1.0 的”按需加载”:Server 可声明
lazy: true,Agent 只在相关 Skill 触发时才加载 - 用
resources暴露 Server 索引(名字 + 一句话描述),让模型先list_servers()再决定调哪个 - 合并相似 tool:
pg_query/pg_export/pg_schema不要拆 3 个,做成pg(action=...) - 单次会话活跃 tool 数控制在 15 以内,超出的引导用户装 Skill 按需启用
坑 4:把鉴权做在 client 端(“Agent 帮我拿着 token 调”)
症状:每个 Agent 客户端自己存 API Key,Key 满天飞,撤不掉。
规避:
- 鉴权在 MCP Server 端 + 网关,不在 Agent 端
- 用户首次配 Server 时走 OAuth 授权,token 加密存 OS keychain(macOS Keychain / Linux Secret Service / Windows DPAPI)
- Agent 只持有”我代谁调”的会话凭证(短时),拿不到长期 token
坑 5:SSE 在反代 / WAF 后被掐断
症状:Nginx / Cloudflare / 公司 WAF 把 SSE 长连接当 idle 关掉,30s 后流断了。
规避:
- Nginx:
proxy_buffering off; proxy_read_timeout 86400s; proxy_set_header Connection ''; - Cloudflare:把路径加到 “WebSockets” 放行(SSE 走同一条通道)
- K8s Ingress:加注解
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"proxy-buffering: "off" - 自检:
curl -N https://host/sse看是不是真的持续收到事件
坑 6:tool 返回巨长 JSON 把上下文撑爆
症状:调 search_pages 返回 100 篇全文摘要,单次 20k tokens 灌进上下文,下一轮 LLM 直接”忘了”前面指令。
规避:
- 默认分页(
limit默认 20,上限 100) - 返回摘要 + 链接,让 Agent 按需
fetch_page(id)再拉全文 - 大结果走
resources://{id}暴露到对象存储,tool 只返回resource_uri - LLM 端监控:如果 tool 返回 > 5k tokens,自动改写为”前 3 条 + 提示还有 N 条”
坑 7:限流 / 重试完全不做
症状:Agent 在循环里调 200 次 Confluence 搜索,触发 API 限流,所有请求 429,业务挂掉。
规避:
- MCP Server 端做 token bucket:每个用户 / 每个 tool 单独计数
- tool 描述里显式声明:“本工具限流 60 req/min/user,超出会返回
rate_limited: true” - Agent 端 SDK 自动退避(1s → 2s → 4s 指数退避,最多 3 次)
- 网关层兜底:用 Envoy / APISIX 全局限流
坑 8:审计缺失,合规 / 安全团队不批上线
症状:法务 / 安全拒绝”Agent 调生产数据”,项目卡 3 个月。
规避:
- 每条 tool 调用都打 span(用户、参数 hash、结果大小、耗时)
- 敏感 tool 加
dry_run模式(先返回”如果执行会做什么”,人审批后再实际跑) - 提供”Agent 行为回放”能力(按 session_id 还原完整调用链)
- 走安全评审时把可观测性 dashboard 当成证据——“我们已经能审计每一次调用”
坑 9:把 MCP 当万能胶水,绕过业务架构
症状:MCP Server 直接调业务底层 DB 绕过 service 层,绕过权限、绕过业务规则,调用后数据不一致。
规避:
- MCP Server 只调 service 层 API,不直接碰 DB
- 业务操作走 service 的事务边界,不让 Agent 跨多个 tool 拼出一个”业务上不存在的状态”
- 重要操作必须经过 service 提供的
validate + idempotency_key
坑 10:忽略 MCP 1.0 协议本身的版本兼容
症状:Server 是 0.9 写的,客户端是 1.0,能力协商失败,工具加载不全。
规避:
- 启动时显式声明
protocol_version: "2025-06-10"(或当前规范) - CI 里加协议兼容测试:跑官方
mcp-conformance套件 - 老客户端 < 1.0:Server 端做协议降级(detect → fallback 到 JSON-RPC stdio)
成本 / 性能 / 维护权衡
1. 成本结构(按 20 人团队估算)
| 项 | 月成本(人民币) | 说明 |
|---|---|---|
| 4C8G 网关节点 × 2 | ~200 | Nginx + OAuth proxy + 可观测性 |
| MCP Server 进程(10 个) | ~400 | 10× 1C2G 容器;Python 平均 80MB / Node 50MB |
| 私有 Registry 镜像 | ~50 | 静态文件 + 一台小 VM |
| OpenTelemetry 后端 | 自建 Tempo 免费;SaaS 看量 | |
| 总基础设施 | 不含 LLM API 成本 | |
| LLM Token 消耗增量 | +20~40% | 工具描述 + tool 返回值占用;可用”按需加载”压到 10% |
vs 重复造轮子:每个 Agent 一套适配器,2 个工程师 × 3 个月 = 12 万月薪。MCP 中心化 ROI 在第一个月就回本。
2. 性能权衡
| 指标 | stdio(本地) | SSE(远程) | 备注 |
|---|---|---|---|
| 启动延迟 | <100ms | 200~500ms | 首次 OAuth 流程额外 +1s(一次性) |
| 单次 tool 调用 | +5~15ms | +20~60ms | 多一跳 HTTP |
| 长任务 | 阻塞 | 不阻塞 | SSE 推流是杀手锏 |
| 并发 | 受限于单进程 | 横向扩展 | 容器化后两者都差不多 |
| 适用场景 | 个人开发、CI/CD | 团队共享、跨网络 |
优化点:
- 热点 tool 加本地 LRU 缓存(60s TTL),相同参数直接返回,省一次上游 API
- 批量 tool 调用(
tools/call_batch)一次发 10 个,省 RTT - 大结果走 streaming response,模型边收边处理
3. 维护权衡
| 维度 | 中心化 MCP | 各自适配 |
|---|---|---|
| 新增 1 个内部工具 | 1 个 MCP Server,所有 Agent 立即可用 | N 个适配器,N 个 PR,N 个排期 |
| 修改鉴权逻辑 | 改 1 个网关 | 改 N 处 |
| 协议升级 | Server 端 + 网关升级,客户端无感 | 全部 N×M 同步升级 |
| 人员依赖 | 1~2 个工程师维护 | 每个 Agent 团队都要懂每个工具 |
| 故障域 | 1 个 Server 挂 = 该工具全公司不可用 | 局部失败 |
| 关键风险 | 单点 + 性能瓶颈 | 重复劳动 + 行为不一致 |
核心建议:能中心化就中心化,中心化不了的(极高安全级别 / 极高 QPS / 离线场景)再独立部署。
4. 长期演进
- MCP 2.0(预计 Q3 2026):可能引入 Server Mesh(Server 间互相调用)、联邦 Registry(跨公司 Server 联邦)
- Skills 协议成熟:Server 暴露的能力可在 Skill 文档里声明依赖,Agent 启动时按 Skill 加载对应 Server
- MCP + Agent 框架融合:LangGraph / DSPy / Hermes 都会把 MCP 客户端做成 first-class
- 企业级治理:MCP Server 之间的”调用链” / “Token 计量” / “配额管理”会是新的 SaaS 机会点
一周内可执行行动清单
假设你是某团队的 Tech Lead,下面 7 天每天最多投入 0.5~1.5 人天。
-
Day 1(今天)
- 在 Claude Desktop 上配好官方 SQLite / Filesystem Server,验证链路通
-
pip install "mcp>=1.0.0",跑通examples/snippets - 拉团队对一下:列出内部 Top 10 工具,标出”必须有 / 应该有 / 锦上添花”
-
Day 2
- 部署 3 个参考 Server:
mcp-server-gitlab、mcp-server-postgres(只读)、mcp-server-fetch(自研 wrapper) - 配好 Nginx +
/.well-known/mcp.json可发现性文件 - 写一个 30 行的”鉴权中间件”骨架(先放 stub,明日接 OAuth)
- 部署 3 个参考 Server:
-
Day 3
- 完成 OAuth 2.1 + PKCE 接入,对接公司 SSO
- 在 Cursor + Claude Desktop + Cline 三端各配一次,验证三方都能连
- 给每个 Server 写 5~8 行
description,包含能力 + 限制 + 典型输入
-
Day 4
- 接入 OpenTelemetry,导到本地 Tempo / Jaeger
- 配基础告警:单用户 1h 调用 > 1000 次、5xx 率 > 5%、P95 延迟 > 3s
- 加限流中间件:单用户 60 req/min、超限返
rate_limited
-
Day 5
- 写 3 份
SKILL.md:<mcps>/gitlab/SKILL.md、<mcps>/pg/SKILL.md、<mcps>/confluence/SKILL.md - 在 Hermes Agent / Claude Code 装上 3 个 Skill,端到端跑 “查昨天提的 bug → 看相关 MR → 写修复建议”
- 拉一次”用户复盘会”,收集 “哪个 tool 描述看不懂 / 哪个调用太慢 / 哪个返回太啰嗦”
- 写 3 份
-
Day 6
- 接入第 4~6 个 Server(Confluence / Slack / 内部 Wiki),优先用官方 + community 已有实现
- 在
mcp-registry.dev提交公司命名空间申请,发布 3 个 Server 元数据 - 写一份”内部开发者文档”:如何在本机添加新 Server、如何调试、如何打 trace
-
Day 7(交付日)
- 全员邮件 / 群通知:“公司 MCP 网关已上线,访问 https://mcp.your-company.internal 接入”
- 内部分享会(30 min):演示 1 个端到端业务流,附 1 个”成本 / 性能对比”图表
- 把”是否继续接入剩余 10~20 个工具”放到下季度 OKR,列 3 人 / 季度的资源申请
- 沉淀 1 份 ADR(Architecture Decision Record)记录”MCP 选型理由、权衡、回滚条件”
收尾: MCP 1.0 解决的是”AI 时代的企业集成”,不是”又一份协议”。它的真正价值不在协议本身,而在它把 N×M 变成 N+M 的能力。一周时间足够跑通”3 个 Server + 1 个网关 + 1 份 Skill”;剩下的就是把它”长在公司架构里”——把 MCP Server 当成内部 API 的标准交付物之一,跟 OpenAPI / SDK 并列。
别造轮子,别写 N×M 适配,别再让每个 Agent 都自己拿 API Key。 这一周动手,下一季度你团队的 Agent 工程效率会回到 2024 年水平。