【2026 AI 编程系列三】深度解析 AI 原生 IDE 的“瞬时记忆”——上下文窗口。揭秘注意力衰减与上下文污染背后的原理,解释为什么长对话会让 AI 变蠢,并帮助开发者建立健康的上下文管理意识。
2026 年 7 月 28 日,Model Context Protocol 正式发布 2026-07-28 版本。
这是 MCP 发布以来规模最大的一次协议调整。它没有停留在增加几个字段、补充几个工具类型,而是直接重构了 MCP 的通信基础:删除协议级会话,让每一次请求都能够独立处理。
对于普通开发者来说,这听起来可能只是一次协议升级;但对于真正需要部署 MCP 服务的后端开发者来说,它解决的是负载均衡、横向扩容、缓存、鉴权和链路追踪等生产环境问题。
MCP 到底解决什么问题?
MCP 全称是 Model Context Protocol,即模型上下文协议。
它定义了一套统一方式,让 ChatGPT、Claude、Cursor 或其他 AI Agent,可以连接外部系统并调用真实能力,例如:
- 查询数据库中的订单;
- 读取项目文档;
- 搜索 GitHub Issue;
- 创建工单;
- 调用企业内部接口;
- 执行一项异步任务;
- 获取服务器监控数据。
过去,不同模型、不同应用和不同工具之间通常需要分别开发适配代码。
MCP 的作用,就是在 AI 客户端和业务系统之间建立一套统一协议。业务系统只要暴露符合 MCP 规范的工具,支持 MCP 的 AI 客户端就可以发现并调用这些工具。
因此,MCP 并不只是所谓的“AI 插件协议”,它正在逐渐成为 AI Agent 访问外部系统的基础接口层。
最大变化:MCP 不再维护协议级会话
在旧版本中,MCP 客户端连接远程服务器时,需要先发送 initialize 请求完成初始化。
服务器随后返回一个 Mcp-Session-Id,后续请求必须携带该 Session ID。这意味着来自同一个客户端的请求,通常需要继续落到创建该会话的服务器实例。
当 MCP 服务部署多个实例时,就会产生几个问题:
- 负载均衡器需要配置粘性会话;
- 多个服务实例之间可能需要共享 Session;
- 网关必须理解更多协议状态;
- 某个实例异常后,会话恢复更加复杂。
在 2026-07-28 版本中,initialize 和 initialized 握手被删除,Mcp-Session-Id 以及协议层维护的 Session 也被移除。
协议版本、客户端信息和客户端能力改为通过每次请求的 _meta 传递。如果客户端需要提前了解服务器能力,可以调用新的 server/discover 方法。
这意味着,一次 MCP 请求可以被任意服务器实例处理。
部署架构也可以从:
AI 客户端
↓
负载均衡器
↓ 粘性会话
指定 MCP 实例
↓
共享 Session 存储
简化为:
AI 客户端
↓
普通负载均衡器
↓
任意 MCP 实例
对于熟悉 RESTful API 的后端开发者来说,这种设计并不陌生。
协议本身保持无状态,业务状态则通过明确的业务标识传递。
例如,一个视频生成工具第一次执行后返回:
{
"task_id": "task_20260730_10001",
"status": "processing"
}
后续查询任务时,AI Agent 再将 task_id 作为工具参数传回:
{
"task_id": "task_20260730_10001"
}
这里的任务状态依然可以保存在 MySQL、Redis 或消息队列中,只是不再隐藏在 MCP 协议的 Session 里。
请求变得更容易路由、缓存和追踪
新版 Streamable HTTP 请求增加了两个重要请求头:
Mcp-Method: tools/call
Mcp-Name: search
网关、负载均衡器和限流系统可以直接根据请求头判断当前调用的 MCP 方法和工具,不需要再解析整个 JSON 请求体。
这带来了几个实际价值:
- 可以针对不同工具设置不同限流规则;
- 可以将高消耗工具路由到独立服务;
- 可以按照工具名称记录调用次数;
- 可以在网关层阻止高风险工具;
- 可以快速区分工具查询和工具执行请求。
新版还为工具列表和资源读取结果增加了 ttlMs 与 cacheScope。
客户端可以明确知道 tools/list 的结果能够缓存多久,以及缓存结果是否可以跨用户共享,不再需要每次对话都重新拉取完整工具列表。
此外,新版规范统一了 W3C Trace Context 的字段,包括:
traceparent
tracestate
baggage
一次 AI 工具调用可以从客户端开始,经过 MCP SDK、MCP 服务、内部 API、数据库和消息队列,最终在兼容 OpenTelemetry 的链路追踪系统中形成完整调用链。
这说明 MCP 已经不再只考虑“工具能不能调用”,而是开始解决生产环境中的可观测性问题。
Tasks:长期任务有了正式生命周期
AI Agent 调用的操作并不一定能立即完成。
例如:
- 生成一段视频;
- 批量分析文件;
- 导出大型报表;
- 执行代码扫描;
- 部署一个应用;
- 处理大量数据库记录。
这些任务可能需要几十秒甚至数分钟,不适合让 HTTP 请求一直保持连接。
新版将 Tasks 作为正式扩展。服务器可以在收到 tools/call 后返回一个任务句柄,客户端再通过以下方法管理任务:
tasks/get
tasks/update
tasks/cancel
任务是否转为异步处理,由服务器根据实际情况决定,而不是让客户端强制指定。
这和后端系统常见的异步任务架构非常接近:
MCP Tool
↓
创建业务任务
↓
返回 task_id
↓
队列异步执行
↓
客户端查询任务状态
对于使用 Laravel Queue、Horizon、Redis、RabbitMQ 或 BullMQ 的项目来说,这种模式很容易与现有任务系统结合。
需要注意的是,旧版实验性 Tasks API 与新版本生命周期并不完全兼容,已经基于旧版本开发任务功能的项目需要进行迁移。
MCP Apps:工具不再只能返回文字
过去调用 MCP 工具后,最常见的结果是返回一段文本或结构化 JSON。
新版 MCP Apps 允许 MCP 服务提供交互式 HTML 界面,由支持该能力的宿主应用在沙箱 iframe 中渲染。
这意味着 MCP 工具可以返回:
- 数据统计面板;
- 参数填写表单;
- 订单详情界面;
- 图表和可视化结果;
- 审批确认页面;
- 任务进度页面。
工具需要提前声明对应的 UI 模板,使宿主应用能够在运行前完成预加载、缓存和安全检查。界面中的操作仍然通过 MCP 的 JSON-RPC 协议执行,因此可以继续进入统一的授权、审计和用户确认流程。
这项能力很重要。
未来的 AI Agent 不一定只通过聊天框工作,它可能在对话中直接打开一个可操作的业务页面。
授权机制进一步靠近 OAuth 和 OpenID Connect
当 MCP 只能读取公开天气信息时,鉴权问题并不突出。
但当 MCP 开始访问企业数据库、用户文件、支付订单和内部系统时,授权就会成为核心问题。
新版进一步加强了 OAuth 和 OpenID Connect 相关要求,包括:
- 客户端验证授权响应中的
iss; - 动态客户端注册时声明应用类型;
- 将注册凭证绑定到对应授权服务器;
- 补充 Refresh Token 获取方式;
- 明确权限逐步提升时的 Scope 处理方式;
- 完善
.well-known服务发现规则。
这些调整主要用于避免授权服务器混淆、凭证错误复用和重定向地址识别错误等问题。
企业开发 MCP 服务时,不能因为调用方是 AI,就给它一个拥有全部权限的万能 Token。
正确做法仍然是:
用户身份
+ 应用身份
+ 最小权限
+ 操作确认
+ 审计日志
尤其是删除、支付、发布、部署和修改数据等具有外部影响的操作,必须设置更严格的权限边界。
工具参数支持完整 JSON Schema 2020-12
新版将工具的 inputSchema 和 outputSchema 提升到完整的 JSON Schema 2020-12。
工具输入现在可以使用:
oneOf
anyOf
allOf
$ref
$defs
条件判断
输出结构也不再局限于对象,structuredContent 可以是任意合法 JSON 值。
这使复杂工具的参数协议更容易表达。例如,同一个搜索工具可以要求用户在“关键词搜索”和“条件筛选”之间选择一种参数结构,而不需要把所有字段都堆在同一个对象中。
不过,服务端仍然要限制 Schema 深度、验证时间和外部引用,避免复杂 Schema 消耗过多资源或形成安全风险。
PHP 和 Laravel 开发者如何接入 MCP?
Laravel 已经提供官方 laravel/mcp 扩展,可用于创建 MCP 服务端和客户端,并支持 Tools、Resources、Prompts、MCP Apps、OAuth 2.1、Sanctum 认证以及本地和远程服务。
安装扩展:
composer require laravel/mcp
发布 MCP 路由文件:
php artisan vendor:publish --tag=ai-routes
随后可以在 routes/ai.php 中注册一个 Web MCP 服务:
<?php
use App\Mcp\Servers\ProjectServer;
use Laravel\Mcp\Facades\Mcp;
/*
|--------------------------------------------------------------------------
| MCP Routes
|--------------------------------------------------------------------------
|
| 对外提供 HTTP MCP 服务。
| 生产环境必须配置认证、限流和操作审计。
|
*/
Mcp::web('/mcp/project', ProjectServer::class)
->middleware([
'auth:sanctum',
'throttle:mcp',
]);
Laravel MCP 也可以作为客户端连接其他 MCP 服务:
<?php
use Laravel\Mcp\Client;
// 创建远程 MCP 客户端
$client = Client::web('https://mcp.example.com')
->withToken($token)
->withTimeout(30);
// 获取服务端暴露的工具
$tools = $client->tools();
// 调用指定工具
$result = $tools['query-order']->call([
'order_no' => 'JD202607300001',
]);
Laravel 官方还支持把 MCP 工具直接交给 Laravel AI Agent 使用,让远程工具和项目内自定义工具进入同一个 Agent 工具列表。
需要特别注意:MCP 2026-07-28 包含破坏性调整。
不要看到新版协议发布后,就直接修改底层请求格式。优先升级所使用的 MCP SDK 或 Laravel 扩展,并确认客户端、服务端和协议版本之间的兼容关系。
生产环境需要检查什么?
准备开发或升级 MCP 服务时,至少检查以下内容。
1. 固定协议与依赖版本
不要无约束地安装最新版 SDK。
在 composer.lock、package-lock.json 或其他依赖锁文件中固定版本,并在测试环境完成兼容验证。
2. 显式管理业务状态
不要把任务状态依赖在某台 MCP 实例的内存中。
长期状态应保存到:
- MySQL;
- Redis;
- 消息队列;
- 对象存储;
- 专门的任务系统。
工具通过 task_id、document_id、project_id 等明确标识继续后续操作。
3. 保证工具调用幂等
AI Agent 可能因为超时、重试或网络异常重复调用工具。
创建订单、扣减余额、发布内容等操作必须设计幂等键,不能默认每次调用都是第一次执行。
4. 不要让网关丢弃 MCP 请求头
升级新版后,需要确认 Nginx、API Gateway 和负载均衡器能够正常转发 Mcp-Method、Mcp-Name 和链路追踪相关字段。
5. 对高风险工具增加人工确认
读取数据和修改数据不能使用同一套风险策略。
删除、转账、发布、部署和批量修改等工具,应要求用户确认并记录完整审计日志。
MCP 正在从演示协议变成工程基础设施
MCP 早期最吸引人的地方,是让 AI 能够调用工具。
而 2026-07-28 版本真正值得关注的地方,是它开始系统性解决后端工程中的现实问题:
- 如何横向扩容;
- 如何进行负载均衡;
- 如何缓存工具信息;
- 如何处理长期任务;
- 如何追踪完整调用链;
- 如何统一授权;
- 如何安全地展示交互界面;
- 如何让协议持续升级而不频繁推翻现有实现。
这意味着 AI 应用开发正在从“调用一下大模型接口”,进入完整的系统工程阶段。
对于后端开发者来说,MCP 并没有让原有经验失效。恰恰相反,API 设计、无状态架构、队列任务、OAuth、权限控制、幂等、缓存和可观测性,会在 AI Agent 时代变得更加重要。
MCP 新版释放出的信号很明确:
AI 可以负责理解意图和规划任务,但真正让系统稳定运行的,依然是严谨的后端工程。