back to all blogs查看所有博客帖子

在 26.0.0.9 中推出 MCP 服务器(mcp-1.0)、为 openidConnectClient 提供受保护资源元数据等更新

image of author image of author
Ismath Badsha and Ismath Badsha (翻译) 2026年9月 8日
以其他语言提供的职位: English ,

Open Liberty 26.0.0.9 引入了 MCP 服务器支持(mcp-1.0),为 openidConnectClient 新增了 OAuth 2.0 受保护资源元数据支持,并为共享 JCache 集群引入了自定义会话缓存名称前缀。

在 Open Liberty 26.0.0.9 中:

查看 26.0.0.9 中已修复 bug 的列表。

使用 26.0.0.9 开发和运行应用程序

如果您使用 Maven,请在 pom.xml 文件中包含以下内容:

<plugin>
    <groupId>io.openliberty.tools</groupId>
    <artifactId>liberty-maven-plugin</artifactId>
    <version>3.12.3</version>
</plugin>

或者,如果您使用 Gradle,请在 build.gradle 文件中包含以下内容:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'io.openliberty.tools:liberty-gradle-plugin:4.0.2'
    }
}
apply plugin: 'liberty'

或者,如果您使用 容器镜像:

FROM icr.io/appcafe/open-liberty

或者访问我们的 下载页面。

如果您使用 IntelliJ IDEA、Visual Studio Code 或 Eclipse IDE,还可以利用我们的开源 Liberty 开发工具,直接在 IDE 中高效完成开发、测试、调试和应用程序管理。

在 Stack Overflow 上提问

MCP 服务器(mcp-1.0)

模型上下文协议(Model Context Protocol,MCP) 是一项开放标准,使 AI 应用程序能够从外部来源访问实时数据和业务逻辑。借助 MCP 服务器功能(mcp-1.0),应用程序开发者只需使用少量注解,即可公开 Liberty 应用程序的工具和数据,供代理式 AI(agentic AI)工作流使用。

在 mcp-1.0 推出之前,尚无标准方法将 Liberty 应用程序中现有的 Java 业务逻辑公开给 AI 代理。您必须为每个要连接的 AI 工具构建并维护自定义集成。有了 mcp-1.0,您只需使用 @Tool 注解现有的 CDI 方法,Liberty 便会自动处理 MCP 协议、工具发现、会话管理、安全性和可观测性。无需更改业务逻辑,您的应用程序即可立即供任何兼容 MCP 的 AI 代理使用。

如需完整的入门指南和示例,请参阅 将 Liberty 业务逻辑公开为 AI 工具的博客文章 以及 mcp-1.0 功能文档。

26.0.0.9 中的新增内容

经过多个 beta 版本之后,mcp-1.0 现已正式发布(GA)。自上一个 beta 版本(26.0.0.9-beta)以来,最重要的变更是功能名称由 mcpServer-1.0 更改为 mcp-1.0,并且 server.xml 文件中的配置元素由 <mcpServer> 更改为 <mcp>。请按如下方式更新 server.xml 文件:

<featureManager>
    <feature>mcp-1.0</feature>
</featureManager>
<application location="my-app.war">
    <mcp path="/custom-mcp"/>
</application>

如果您是从 26.0.0.8-beta 或更早版本迁移,请注意核心 API 类型也已从 io.openliberty.mcp. 移至 org.mcpjava.server.。有关这些导入变更的完整详细信息,请参阅 26.0.0.9-beta 博客文章。

以下功能同样是本 GA 版本中的新增内容,未包含在 26.0.0.9-beta 中:

  • DNS 重绑定攻击防护 — 当 MCP 服务器收到来自环回地址的请求时,会按照 MCP 规范的要求验证 Origin 头。无需任何配置。

  • 工具方法支持 @MetaField — 可以使用 @MetaField 注解工具方法,向 tools/list 响应中的 _meta 对象添加数据。

  • @Tool 支持 outputSchemaFrom — 当 structuredContent = true 时,您可以指定另一个类来生成输出模式(output schema),而不受方法返回类型的限制。

  • 针对不受支持注解的警告 — 如果应用程序使用了 mcp-1.0 不支持的 MCP Java API 注解(例如 @Prompt、@Resource、@ResourceTemplate),Liberty 现在会记录一条警告。应用程序仍会正常启动,使用 @Tool 注解的方法也会继续正常工作。

  • OAuth 2.0 受保护资源元数据(RFC 9720) — 当在 openidConnectClient 上配置 protectedResourceMetaDataEnabled="true" 时,Liberty 会在 /.well-known/oauth-protected-resource 提供受保护资源元数据文档。这样,MCP 客户端便可按照 MCP 授权流程自动发现正确的授权服务器。

为 openidConnectClient 提供受保护资源元数据

OAuth 2.0 受保护资源元数据(RFC 9720)提供有关受 OAuth 2.0 保护的资源的元数据,其中包括指向可授予访问权限的授权服务器的链接。

在本次发布中,使用 openidConnectClient-1.0 功能的 Open Liberty 服务器可以启用受保护资源元数据。任何 openidConnectClient 配置均可启用受保护资源元数据,但其主要用例是与 mcp-1.0 功能配合使用,以支持 MCP 授权流程。在该流程中,MCP 客户端使用受保护资源元数据发现授权服务器。

要为 openidConnectClient 配置启用受保护资源元数据,请添加 <protectedResourceMetadata> 配置元素:

<openidConnectClient id="protected-resource-demo"
    clientId="protected-resource"
    clientSecret="..."
    jwkEndpointUrl="https://auth.example.com/oidc/endpoint/SampleProvider/jwk"
    tokenEndpointAuthMethod="basic"
    issuerIdentifier="https://auth.example.com/oidc/endpoint/SampleProvider"
    authFilterRef="mcpAuthFilter"
    inboundPropagation="required">
    <protectedResourceMetadata />
</openidConnectClient>

为共享 JCache 集群提供自定义会话缓存名称前缀

当您运行多个共享同一基于 JCache 的会话存储的 Liberty 实例时(例如,Kubernetes 或 OpenShift 上指向同一 Hazelcast 或 Infinispan 集群的多个 pod),Liberty 以前会在每个实例上生成相同的会话缓存名称。缓存名称相同意味着不同实例可能会在同一缓存上发生冲突,从而在共享缓存部署中带来会话数据损坏的风险。

Open Liberty 26.0.0.9 在 sessionCache-1.0 功能的 httpSessionCache 元素中新增了 cacheNamePrefix 属性。该属性面向运行由共享缓存集群支持的多实例 Liberty 部署的运维团队和管理员。当每个实例都需要独立的缓存命名空间以避免冲突时,可使用该属性。

以前,Liberty 始终将会话缓存名称生成为 com.ibm.ws.session.meta.XXX 或 com.ibm.ws.session.attr.XXX,无法区分这些缓存是由哪个 Liberty 服务器创建的。现在,您可以为每个 Liberty 服务器配置唯一的前缀。这样,单个共享集群便可安全地托管来自多个 Liberty 服务器的会话数据,而不会发生命名空间冲突。如果未配置前缀,则仍使用原有的缓存名称。

要配置缓存名称前缀,请在 httpSessionCache 配置中添加 cacheNamePrefix 属性:

<!-- Instance 1 -->
<httpSessionCache cacheRef="InfinispanCacheManager" cacheNamePrefix="pod1_"/>
<!-- Instance 2 -->
<httpSessionCache cacheRef="InfinispanCacheManager" cacheNamePrefix="pod2_"/>

通过前缀,每个实例都会获得不同的缓存名称:pod1_com.ibm.ws.session.attr.default_host/myapp 和 pod2_com.ibm.ws.session.attr.default_host/myapp。如果没有前缀,两个实例都会生成相同的缓存名称 com.ibm.ws.session.attr.default_host/myapp。cacheNamePrefix 属性尤其适用于以下场景:

  • 多租户部署

  • 需要独立缓存命名空间的蓝绿部署

  • 需要按 pod 隔离缓存的 Kubernetes/OpenShift 部署

有关配置会话缓存的更多信息,请参阅 httpSessionCache 参考 文档。

本次发布中的安全漏洞(CVE)修复

CVE CVSS 分数 漏洞评估 受影响版本 说明

CVE-2026-14529

9.4

服务器端请求伪造

17.0.0.3-26.0.0.8

影响 sipServlet-1.1 功能

CVE-2026-14981

7.5

拒绝服务

17.0.0.3-26.0.0.8

影响 servlet-3.1、servlet-4.0、servlet-5.0、servlet-6.0 和 servlet-6.1 功能

CVE-2026-15064

8.7

HTTP 响应走私

17.0.0.3-26.0.0.8

影响 servlet-3.1、servlet-4.0、servlet-5.0、servlet-6.0 和 servlet-6.1 功能

CVE-2026-15328

7.4

HTTP 请求走私

17.0.0.3-26.0.0.8

影响 servlet-3.1、servlet-4.0、servlet-5.0、servlet-6.0 和 servlet-6.1 功能

CVE-2026-15325

8.7

HTTP 请求走私

17.0.0.3-26.0.0.8

影响 servlet-3.1、servlet-4.0、servlet-5.0、servlet-6.0 和 servlet-6.1 功能

CVE-2026-16192

7.1

拒绝服务

17.0.0.3-26.0.0.8

影响 restConnector-2.0 功能

CVE-2026-10571

5.7

拒绝服务

17.0.0.3-26.0.0.8

影响 restConnector-2.0 功能

CVE-2026-54225

7.5

拒绝服务

17.0.0.3-26.0.0.8

影响 jaxrs-2.0、jaxrs-2.1、jaxws-2.2、xmlWS-3.0 和 xmlWS-4.0 功能

CVE-2026-57819

7.5

拒绝服务

17.0.0.3-26.0.0.8

影响 jaxrs-2.0、jaxrs-2.1、jaxws-2.2、xmlWS-3.0 和 xmlWS-4.0 功能

CVE-2026-64958

7.5

拒绝服务

17.0.0.3-26.0.0.8

影响 jaxrs-2.0、jaxrs-2.1、jaxws-2.2、xmlWS-3.0 和 xmlWS-4.0 功能

如需查看以往版本中的安全漏洞修复列表,请参阅 安全漏洞(CVE)列表。

本次发布中值得关注的 bug 修复

我们投入了一些时间修复 bug。以下部分仅介绍了本次发布中解决的部分问题。如果您感兴趣,可查看 26.0.0.9 中修复 bug 的完整列表。

立即获取 Open Liberty 26.0.0.9