消息

Laravel MCP 1.0 发布

发布
Laravel MCP 1.0 已发布镜像

Laravel 团队发布了 Laravel MCP 1.0,这是其用于在 Laravel 应用中构建模型上下文协议 (MCP) 服务器的软件包的首个稳定版本。这些服务器允许 AI 应用使用您应用的工具和数据,此版本还支持 MCP 修订版。 2026-07-28 。

内容如下:

  • 协议 2026-07-28 用途 server/discover 代替初始 initialize 交换
  • 可搜索的工具目录 让代理根据需要查找工具
  • 缓存提示 告知客户哪些响应可以重复使用以及可以重复使用多长时间
  • 无状态服务器 根据新协议独立处理每个请求
  • OAuth 变更 需要 PKCE 支持,并添加一种新的客户识别方式。
  • MCP 应用 支持现在列在以下项下 extensions 能力

仍然与客户保持联系的客户 initialize 继续工作。服务器响应协议版本。 2025-11-25 或者 2025-06-18 根据客户的要求而定。

可搜索的工具目录

发送给模型的每个工具定义都会占用其上下文窗口的空间,即模型一次可以处理的信息量。 ToolSearch 您可以将常用工具保留在主列表中,并将其他工具放在搜索框中:

使用 应用程序\Mcp\工具\当前天气工具 ;
使用 应用程序\Mcp\工具\历史天气工具 ;
使用 应用程序\Mcp\工具\天气警报工具 ;
使用 Laravel\Mcp\服务器 ;
使用 Laravel\Mcp\Server\Tools\ToolSearch ;
班级 天气服务器 延伸 服务器
{
受保护 大批 工具 = [
// 始终可供代理人使用...
当前天气工具 ::班级 ,
// 仅在需要时进行搜索...
工具搜索 ::班级 => [
历史天气工具 ::班级 ,
天气警报工具 ::班级 ,
],
];
}

该软件包注册了两个工具来处理这个问题。 search_tools 接受查询和结果限制,然后返回匹配的工具及其名称、描述和预期输入。 execute_tools 按名称运行一个或多个工具。代理程序无需加载整个目录即可查找和使用工具。 #324 )

缓存提示

服务器现在可以告诉客户端哪些响应可以缓存、缓存多长时间以及是否可以在用户之间共享。使用以下方式设置默认值: Cacheable 然后使用属性 cacheHints() 要针对单个方法进行覆盖:

使用 Laravel\Mcp\Enums\CacheScope ;
使用 Laravel\Mcp\Server\Attributes\Cacheable ;
#[ 可缓存 ( ttlMs : 60000 , 范围 : 缓存范围 :: 民众 )]
班级 天气服务器 延伸 服务器
{
/**
* 获取各个 MCP 方法的缓存提示。
*
* @返回 大批 < 细绳 可缓存>
*/
受保护 功能 缓存提示 () : 大批
{
返回 [
'tools/list' => 新的 可缓存 ( ttlMs : 30000 ),
];
}
}

启用缓存时,Laravel 的 MCP 客户端会遵循以下提示: withCache() . 回答缺失或为零的情况 ttlMs 工具调用不会被缓存。 #301 , #326 )

无状态服务器

采用新协议后,服务器可以独立处理每个请求。每个 HTTP 请求和标准输入/输出 (stdio) 消息都包含协议版本以及客户端支持的功能。 params._meta 。

这 MCP-Session-Id 标题, Request::sessionId() , Request::setSessionId() ,以及 SessionInitialized 事件已被移除。要跟踪相关调用,请在请求参数中传递您自己的标识符或 _meta 。( #285 )

开放授权

OAuth授权现在需要PKCE支持。 OAuthClient::redirect() 扔一个 OAuthException 如果授权服务器离开 code_challenge_methods_supported 从其元数据中移除。此前,它只会拒绝包含该字段但未包含该字段的服务器。 S256 支持。

它还支持客户端 ID 元数据文档。使用此方法,您的 client_id 这是一个指向描述您的客户端的 JSON 文档的 HTTPS URL,并且 Mcp::oAuthRoutesFor() 该文件在 GET /mcp/oauth/{client}/client-metadata.json 如果您没有提供客户端 ID,Laravel 会在授权服务器支持时使用该文档,否则将回退到动态客户端注册(MCP)。 2026-07-28 已弃用。

当使用元数据文档时, $token->clientSecret 是 null 因此,任何存储它的数据库列都必须接受 null 这也修复了一个每次都会在授权服务器上注册新客户端的错误。 redirect() 跑了。( #323 , #342 )

升级说明

如果您是从 0.9 版本升级,请检查您的客户端如何连接和发送请​​求。 ValidateMcpHeaders 中间件在每个通过注册的路由上运行 Mcp::web() 。

使用新协议的 POST 请求需要 MCP-Protocol-Version 和 Mcp-Method 与正文匹配的标头。调用 tools/call , prompts/get , 和 resources/read 还需要 Mcp-Name 此标头必须与工具或提示名称或资源 URI 匹配。

发送这些请求的测试 postJson() 需要标头和 params._meta 字段也一样。标头不匹配会返回 HTTP 400 和 JSON-RPC 错误代码。 -32020 使用 initialize 并且不发送任何协议元数据 _meta 无需进行标头验证。

完整列表,包括错误代码更改和已移除项。 Server::CAPABILITY_UI 常量,以及定制运输合同,都在其中 1.0 升级指南 。

参考

埃里克·L·巴恩斯摄

Eric 是 Laravel News 的创建者,自 2012 年以来一直报道 Laravel 相关内容。

归档于

赞助

掌握 Laravel 标志
Laravel 代码审查

几天内即可获得 Laravel 代码审查方面的专家指导

访问 Laravel 代码审查
Laravel 14 为 Eloquent 模型添加了 defaults() 方法(图片)

Laravel 14 为 Eloquent 模型添加了 defaults() 方法

阅读文章
Laravel AI SDK 和 Laravel MCP 安全修复:立即更新 图片

Laravel AI SDK 和 Laravel MCP 安全修复:立即更新

阅读文章
Laravel 邮箱:预览和测试渲染后的邮件图片

Laravel 邮箱:预览和测试渲染后的邮件

阅读文章
Laravel 13.34 图片中将 Worker 崩溃计数作为作业异常

Laravel 13.34 中将 Worker 崩溃计数为作业异常

阅读文章
Elastic Bridge:Elasticsearch 和 OpenSearch 的 Eloquent 风格查询(图片)

Elastic Bridge:Elasticsearch 和 OpenSearch 的 Eloquent 风格查询

阅读文章
Laravel 发布周期:版本、支持策略和日期(图片)

Laravel 发布周期:版本、支持策略和日期

阅读文章