MCP Server (mcp-1.0)、openidConnectClient の保護リソース・メタデータ対応など、26.0.0.9 の新機能
Open Liberty 26.0.0.9 では、MCP Server サポート (mcp-1.0) の導入、openidConnectClient への OAuth 2.0 保護リソース・メタデータ対応の追加、および共有 JCache クラスター向けのカスタム・セッション・キャッシュ名プレフィックスが導入されました。
Open Liberty 26.0.0.9 では次の変更があります:
26.0.0.9 で修正されたバグのリストをご覧ください。
以前の Open Liberty GA リリースのブログ記事もご確認ください。
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 内から効果的な開発、テスト、デバッグ、およびアプリケーション管理を行うこともできます。
MCP Server (mcp-1.0)
Model Context Protocol (MCP) は、AI アプリケーションが外部ソースからリアルタイムのデータとビジネス・ロジックにアクセスできるようにするオープン・スタンダードです。MCP Server の機能 (mcp-1.0) を使用すると、アプリケーション開発者はいくつかのアノテーションを追加するだけで、Liberty アプリケーションのツールとデータをエージェント型 AI ワークフローで利用できるように公開できます。
mcp-1.0 以前は、Liberty アプリケーションの既存の Java ビジネス・ロジックを AI エージェントに公開するための標準的な方法がありませんでした。接続したい AI ツールごとにカスタム統合を構築・維持する必要がありました。mcp-1.0 では、既存の CDI メソッドに @Tool アノテーションを付けるだけで、Liberty が MCP プロトコル、ツール検出、セッション管理、セキュリティー、およびオブザーバビリティを自動的に処理します。ビジネス・ロジックを変更することなく、アプリケーションは MCP 互換の AI エージェントからすぐに利用可能になります。
入門ガイドと使用例の詳細については、Liberty ビジネス・ロジックを AI ツールとして公開するブログ記事および mcp-1.0 の機能ドキュメントをご参照ください。
26.0.0.9 の新機能
複数のベータ・リリースを経て、mcp-1.0 が一般提供 (GA) されました。最後のベータ版 (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 Server がループバック・アドレスからのリクエストを受信した場合、MCP 仕様の要件に従って
Originヘッダーを検証するようになりました。設定は不要です。 -
ツール・メソッドへの
@MetaFieldサポート — ツール・メソッドに@MetaFieldアノテーションを付けることで、tools/listレスポンスの_metaオブジェクトにデータを追加できます。 -
@ToolでのoutputSchemaFrom—structuredContent = trueの場合、メソッドの戻り値の型とは独立して、出力スキーマの生成に使用するクラスを指定できます。 -
サポートされていないアノテーションに対する警告 —
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 認可フローをサポートするための mcp-1.0 の機能との組み合わせです。このフローでは、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>
詳細については、OpenID Connect Client の機能ドキュメントおよび openidConnectClient 設定リファレンスをご参照ください。
共有 JCache クラスター向けのカスタム・セッション・キャッシュ名プレフィックス
同じ JCache ベースのセッション・ストアを共有する複数の Liberty インスタンス (例えば、同じ Hazelcast または Infinispan クラスターを参照している Kubernetes または OpenShift 上の複数の 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 サーバーに固有のプレフィックスを設定できます。これにより、1 つの共有クラスターが名前空間の衝突なく複数の 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 スコア | 脆弱性評価 | 影響を受けるバージョン | 注記 |
|---|---|---|---|---|
9.4 |
サーバーサイド・リクエスト・フォージェリ |
17.0.0.3-26.0.0.8 |
|
|
7.5 |
サービス拒否 |
17.0.0.3-26.0.0.8 |
|
|
8.7 |
HTTP レスポンス・スマグリング |
17.0.0.3-26.0.0.8 |
|
|
7.4 |
HTTP リクエスト・スマグリング |
17.0.0.3-26.0.0.8 |
|
|
8.7 |
HTTP リクエスト・スマグリング |
17.0.0.3-26.0.0.8 |
|
|
7.1 |
サービス拒否 |
17.0.0.3-26.0.0.8 |
|
|
5.7 |
サービス拒否 |
17.0.0.3-26.0.0.8 |
|
|
7.5 |
サービス拒否 |
17.0.0.3-26.0.0.8 |
|
|
7.5 |
サービス拒否 |
17.0.0.3-26.0.0.8 |
|
|
7.5 |
サービス拒否 |
17.0.0.3-26.0.0.8 |
|
過去のセキュリティー脆弱性の修正のリストについては、セキュリティー脆弱性 (CVE) リストを参照してください。
このリリースで修正された注目すべきバグ
バグの修正に時間を費やしました。以下のセクションでは、このリリースで解決された問題の一部について説明します。詳細については、26.0.0.9 で修正されたバグの完全なリストをご覧ください。
-
「jakarta.interceptor.InvocationContext.getParameters()」を呼び出せない。「this.firstInvocation」が null である
-
IBM WebSphere Application Server Liberty が Liberty コレクティブを使用する際の権限昇格の影響を受ける (CVE-2026-18499)
-
IBM WebSphere Application Server Liberty がサービス拒否の脆弱性の影響を受ける (CVE-2026-10571)
-
null プリンシパルが isUserInRole に渡されることによる未認証の JAX-RS リクエストに対する z/OS ICH408I SAF EJBROLE ルックアップのトリガー
-
Jakarta Security 4.0 (appSecurity-6.0) HAM 処理が mvn liberty:dev を使用してデプロイすると失敗する
-
IBM WebSphere Application Server が複数の脆弱性の影響を受ける (CVE-2026-14980、CVE-2026-2482)
-
set.content.type.for.empty.request に対して Invocation.Builder.property() の設定が HTTP トランスポートに無視される
-
グレースフル・スタートアップの問題 - liberty-kafka コネクター: @Incoming メソッドがアプリケーション起動完了前にメッセージを受信し、チャネルが永続的に停止する