3行でいうと
- 公式のCloudflare MCPサーバーは
https://mcp.cloudflare.com/mcp(READMEが recommended と付ける)で、つなぐ側の設定は{"mcpServers": {"cloudflare-api": {"url": "..."}}}の形が公式の例です。接続するとCloudflareの画面で、渡す権限を選びます。 - 自動化では、OAuthの代わりに、必要な権限だけを持たせたAPIトークンを
AuthorizationヘッダーにBearerで渡せます。ユーザートークンもアカウントトークンも使えると公式は書いています。 - 自作のリモートMCPサーバーは、
npm create cloudflare@latestの雛形から作り、claude mcp add --transport http ...などでつなぐ例が公式にあります。認証は、Cloudflare Accessか第三者のOAuthです。 - AI Searchの公開口(MCP)は、公式の例では認証なしで呼んでいます。Accessで守るには、独自ドメインを付け、既定のホスト名を無効にする必要がある、と公式は書いています。
- 公式が書いていない画面経路(Claude側の設定画面、OAuth許可の取り消し画面など)は、この記事でも「記載が見つからない」と書いています。
この記事は、公式の資料を2026年10月25日に読んでまとめたものです。この記事は、実際に使って確かめた記録ではありません。設定例は「公式の例の写し」と書いたものだけが公式のままで、ほかは「この記事で組んだ例(動作は確かめていません)」です。画面の表記は変わることがあるので、手元の画面と照らして読んでください。OpenAI、Anthropic、Claudeなどは、Cloudflareとは別の会社・製品で、それぞれの設定画面や規約は、この記事では読んでいません。
先に結論
- 向きを先に決めます。 「外のAIがCloudflareを操作する」(連携A・B)と、「自作のMCPサーバーや検索の口を外のAIに使わせる」(連携C・D)では、設定する場所が違います。
- MCPで外のAIに渡る権限は、OAuthの画面での選択か、APIトークンの権限で決まります。 どちらの場合も、公式の資料は「必要な権限だけ」を前提にした書き方です(トークンの作り方は05)。
- Claude側の接続画面は、Cloudflareの資料の範囲外です。 CloudflareのMCPのページは、Claudeを「MCPのホストの例」として名前を出していますが、Claude CodeやClaude Desktopへの接続方法は載せていません。
- 公式ページ同士で書き方が違う点は、併記しています。 Cloudflare APIサーバーの位置づけ、
/sseの扱い、AI Searchのメニュー名など。
前提:用語をそろえる
- MCP:AIが外のツールにつながるための共通の規格。公式は「AIシステムと外部のアプリをつなぐ、オープンな標準」と説明します。
- MCPホスト/クライアント/サーバー:公式の説明では、ホストはAIアシスタントやエージェント、クライアントはホストの中で1つのサーバーと1対1でつながる部分、サーバーはツールや資料を出す側です。
- Streamable HTTP / stdio:公式の説明では、リモートはインターネット越しにStreamable HTTP、ローカルは同じマシンでstdioです。Cloudflareの公式サーバーは、
/mcpで終わるStreamable HTTPの口です。 - OAuth:パスワードを渡さず、画面で権限を許可する仕組み。CloudflareのMCPでは、つなぐとCloudflareの画面に移り、権限を選びます。
- Bearerトークン:HTTPの
Authorization: Bearer <トークン>の形で渡す鍵。 - Cloudflare Access:Cloudflareの、ログインや許可の仕組み。サービストークンは、人でなく機械がAccessを通るための鍵(
CF-Access-Client-IdとCF-Access-Client-Secretの組)。 - Workers:Cloudflareの上でプログラムを動かす仕組み(01・05)。自作のMCPサーバーはここに置きます。
- 設定の秘密の値は、すべて
<TOKEN>のような置き換え用の文字で書いています。
連携の地図(その1とその2)
| 連携 | 誰が → 誰を使う | 設定する場所 | 載せた記事 |
|---|---|---|---|
| A | Claudeなどの外のAIクライアント → Cloudflareの公式MCPサーバー | 外のAI側のMCP設定+Cloudflareの許可画面 | 07(この記事) |
| B | OpenAIのResponses API → Cloudflareの公式MCPサーバー | OpenAIの呼び出し側+Cloudflareのトークン | 07 |
| C | Claude Code、Cursor、Windsurf等 → 自作のMCPサーバー(Workersに公開) | 外のAI側の設定+自作サーバー | 07 |
| D | 外のAIや道具 → AI Searchの公開口(MCP) | AI SearchのSettings | 07 |
| E | 自分のアプリ → AI Gateway → OpenAI/Anthropic等 | ゲートウェイの設定、アプリの呼び出し | 08 |
| F | OpenAI互換のコード → Workers AI | 呼び出し側のベースURL | 08 |
| G | CloudflareのAgent → 外のMCPサーバー | Agentのコード | 08 |
連携A:外のAIクライアントから、CloudflareのMCPサーバーを使う(公式)
A-1 どのサーバーがあるか
公式の「Cloudflare MCP Servers」のページとGitHubのREADMEによると、接続先はすべて /mcp で終わるStreamable HTTPです。
| サーバー | 公式の説明(要約) | URL |
|---|---|---|
| Cloudflare API | Cloudflare APIの全体と開発者向けドキュメント。ツールは search()、execute()、docs()(ツール名はドキュメントのページの記述で、READMEには出てきません)。READMEは recommended と付ける。ドキュメントのページは「the only MCP server you need」と書く |
https://mcp.cloudflare.com/mcp |
| Documentation | Cloudflareの参考情報 | https://docs.mcp.cloudflare.com/mcp |
| Container | サンドボックスの開発環境 | https://containers.mcp.cloudflare.com/mcp |
| Browser Run | ページの取得、Markdown、スクリーンショット | https://browser.mcp.cloudflare.com/mcp |
| Digital Experience Monitoring | 重要なアプリの状況 | https://dex.mcp.cloudflare.com/mcp |
| Cloudflare One CASB | SaaSの設定ミスの発見 | https://casb.mcp.cloudflare.com/mcp |
| Agents SDK Documentation | Agents SDKのドキュメント(ドキュメントのページの表のみ。READMEの表にはない) | https://agents.cloudflare.com/mcp |
| Cloudflare Blog(READMEのみ) | ブログの検索と閲覧 | https://blog.mcp.cloudflare.com/mcp |
| Demo Day(READMEのみ) | READMEの表に、最小のCloudflare MCPサーバーの実演(原文:Demonstrate a minimal Cloudflare MCP server)と説明がある | https://demo-day.mcp.cloudflare.com/mcp |
READMEは、広いAPIの範囲にはCloudflare APIのサーバー(コードの実行を通して)、1つの製品の中で型の決まったツールを使いたいときは分野別のサーバー、という使い分けを書いています。ドキュメントのページは、分野別のサーバーを「任意」の位置づけにしています(READMEとドキュメントで強調の置き方が違います)。ドキュメントのページには「Most people should just use the main Cloudflare API MCP server.」とも書かれています。
READMEが「非推奨」にしているのは、AI Gateway、Audit Logs、AutoRAG、DNS Analytics、GraphQL、Logpush、Observability、Radar、Workers Bindings、Workers Buildsの各サーバーで、Cloudflare APIのサーバーへ移るよう書かれています。AI GatewayとAutoRAGの名前があるため、古い解説に当たらないよう注意してください(今回読んだドキュメントのページには、非推奨の記述はありませんでした)。
A-2 設定の書き方(公式の例の写し)
MCPクライアントの設定に、サーバーのURLを書きます。公式の「Cloudflare MCP Servers」のページの例です。
{
"mcpServers": {
"cloudflare-api": {
"url": "https://mcp.cloudflare.com/mcp"
}
}
}
公式のページは、クライアントとして Claude、Windsurf、AI Playground、MCP対応のSDKを挙げ、ほかのクライアントごとの設定は「GitHubのリポジトリを参照」と書いています。READMEは、「MCPのリモート接続に対応したクライアントを、表のURLに直接つなぐ」趣旨を書き、Claude Desktopの設定の例や mcp-remote の説明は載せていません。Claude CodeやClaude Desktopの設定の画面・ファイルの場所は、Cloudflareの資料には書かれていません。 Anthropic側の資料は、この記事では読んでいません。
A-3 手順:つないで、権限を選ぶ(公式の説明の順)
- 使うAIクライアントのMCP設定に、上の
urlを書きます(設定する場所はクライアントごとに違います。上のとおり、Cloudflareの資料にはありません)。 - クライアントがサーバーに接続します。
- Cloudflareの認可の画面に移ります(OAuth、公式の既定の方式)。
- その画面で、エージェントに渡す権限を選びます(公式の表現:「select the permissions to grant to your agent」)。
- 許可すると、クライアントの側でCloudflareのツールが使えるようになります。
期待される結果(公式の記述):search()、execute()、docs() のツールが使えます。画面の文言や、許可の選択肢の名前は、読んだページには載っていません。
A-4 手順:OAuthではなくAPIトークンで渡す(自動化向け)
公式は、CI/CDや自動化では、必要な権限を持つCloudflare APIトークンを作り、Authorization ヘッダーにBearerとして渡せる、と書いています。ユーザートークンもアカウントトークンも使えると書かれています。
- 05の段階4の手順でトークンを作ります。権限は、使うサーバーで必要な分だけにします(Cloudflare APIサーバーの場合の必要な権限一覧は、読んだページには載っていません)。
- クライアントが、リモートMCPのヘッダーを設定できるなら、
Authorization: Bearer <API_TOKEN>を付けます。ヘッダーの設定の書き方は、クライアントごとに違い、Cloudflareの資料には例がありません。
A-5 何が渡るか
| 渡る先・内容 | 公式の記述 | 公式に書かれていないこと |
|---|---|---|
| 外のAIが見られる範囲 | OAuthで選んだ権限、またはAPIトークンの権限の範囲 | 許可の選択肢の一覧 |
execute() の位置づけ |
READMEは「コードの実行を通して、広いAPIの範囲を扱う」と説明 | 実行のログの残り方 |
| 外のAIに送られた内容の扱い | ―― | そのAIの提供元(各社)の規約の話で、Cloudflareの資料からは分からない |
A-6 外し方
| 外すもの | 方法 | 出どころ |
|---|---|---|
| クライアント側の接続 | 設定からこのサーバーの項目を消す | 画面・コマンドはクライアントごとで、Cloudflareの資料に記載が見つからない |
| OAuthで与えた許可 | ―― | 取り消す画面は、読んだページに記載が見つからない |
| APIトークン方式の鍵 | ダッシュボードでトークンを削除(05の段階4) | トークンの作成・削除の手順 |
| Wranglerのログイン | npx wrangler logout(Wranglerの認証。MCPの許可とは別物) |
05の手順C |
A-7 うまくいかないときの確認点
- 「Claude's response was interrupted」と出る:READMEは、多くはツールを連鎖して呼んだときで、質問を短くするか分けると良い、と書いています(コンテキストの長さの上限に当たった可能性、という説明)。
- 古い
/sseのURLが動かない:READMEによると、古いGET /sseへのリクエストは410 Goneを返し、移行の選択肢が2つ示されます(READMEの文:既存のURLをStreamable HTTPで使う設定にするか、/mcpのURLに切り替えるか)。/sseは互換の別名としても残っている、と書かれていて、READMEの中でも2つの書き方が並んでいます。どちらを選ぶかは、手元の接続の設定と公式のREADMEで確かめてください。 - 一部の機能が使えない:READMEは、一部の機能に有料のWorkersプランが要る可能性を書いています。
- 古いサーバーを指している:A-1の「非推奨」の一覧と照らし、
mcp.cloudflare.comに移します。
A-8 そのほか:プラグイン
公式のドキュメントのページは、Claude Code、Cursorなどのエージェント向けに「Cloudflare Skills」のプラグインがあると書いています。ページには、Cloudflareの公式MCPサーバーと、場面に合わせた手順(スキル)やスラッシュコマンドをまとめたもの、という趣旨の説明があります。入れ方として、ページは4つを挙げています(Claude Codeでは cloudflare/skills のリポジトリからプラグインのマーケットプレイスを追加する、Cursorのマーケットプレイスまたは設定でGitHubのルールを追加する、npx skills add を使う、リポジトリを複製して各エージェントのスキルのフォルダへ写す)。コマンドの正確な形は、公式ページで確認してください。この記事では組み直しません。
連携B:OpenAIのResponses APIから、CloudflareのMCPサーバーを使う(READMEの記述)
READMEによると、OpenAIのResponses APIから使うときは、そのサーバーが必要とする権限を持つAPIトークンを、ダッシュボードで作って渡します。READMEの例は Browser Run のサーバーで、必要な権限はスクリーンショットでしか示されておらず、テキストでは読めていません。そのため、この記事では権限名を書きません。
- 設定する場所:OpenAI側のリクエスト(MCPサーバーのURLと認証)。OpenAI側の書き方は、この記事では読んでいません。
- 渡るデータ:トークンの権限の範囲のCloudflareの情報と、そのサーバーの結果。OpenAIの側でどう扱われるかは、OpenAIの規約の話です。
- 外し方:トークンをダッシュボードで削除します(05の段階4)。
- 確認点:トークンの権限がそのサーバーに合っているか(READMEは「サーバーごとに必要な権限が違う」と書く)。
連携C:自分で作ったMCPサーバーを、Claude Codeなどにつなぐ(公式のガイド)
C-1 作って、手元で動かす(公式の「Build a Remote MCP server」)
- 雛形を作ります(公式の写し)。
npm create cloudflare@latest -- remote-mcp-server-authless --template=cloudflare/ai/demos/remote-mcp-authless
質問には、AGENTS.mdは No、gitは No、まだ公開しないので No を選ぶ、と公式は書いています。
- フォルダに入って起動します。
cd remote-mcp-server-authless
npm start
口は http://localhost:8788/mcp です。ブラウザで /mcp を開いても動きません(MCPのやりとりの形式を待つため)、と書かれています。
- 公式の確認ツールで試します。
npx @modelcontextprotocol/inspector@latest
http://localhost:5173 を開き、サーバーのURLを入れて Connect、List Tools を選びます。
- 公開します。
npx wrangler@latest deploy
公開後の口は https://remote-mcp-server-authless.your-account.workers.dev/mcp の形です。ダッシュボードの「Deploy to Workers」ボタンで、Gitのリポジトリを作って、main への反映のたびに自動で公開する方法も書かれています。
公式のガイドは、この雛形が、非推奨とされる McpAgent の方式を使っていて、新しく作るなら mcp-worker の例から始めるよう書いています(03を参照)。
C-2 つなぐ:Claude Code(公式の例の写し)
claude mcp add --transport http math https://remote-mcp-server-authless.your-account.workers.dev/mcp
claude mcp list
math は公式の例の名前です。公式のガイドは、続けてClaudeに「Could you use the math tool to add 23 and 19?」のように頼む例を書いています。認証が要るサーバーでは、ブラウザで認可の流れを済ませる、と「Test a Remote MCP Server」のページにあります。
C-3 つなぐ:Cursor、Windsurf、AI Playground(公式の「Test a Remote MCP Server」)
Cursor:プロジェクトの .cursor/mcp.json、または全体の ~/.cursor/mcp.json に書きます(公式の例の写し。例のURLは http:// で書かれています。公開したサーバーでは、自分のURLを確認してください)。
{
"mcpServers": {
"my-server": {
"url": "http://my-mcp-server.my-account.workers.dev/mcp"
}
}
}
Windsurf:mcp_config.json に書きます。キー名が serverUrl で、Cursorと違います(公式の例の写し)。
{
"mcpServers": {
"my-server": {
"serverUrl": "http://my-mcp-server.my-account.workers.dev/mcp"
}
}
}
AI Playground(Cloudflareの画面):Workers AI Playgroundで、MCPサーバーのURLを入れて Connect を選び、認証があれば済ませると、ツールが出て、モデルがチャットで使えます。MCP Inspector:認証が要るときは、Open Auth settings から Quick OAuth Flow を選び、済ませてから Connect、List tools です。
Claude Desktopの設定は、公式のこの2つのページに書かれていません。
C-4 認証を付ける(公式の2つの選択肢)
| 方法 | 公式の説明 |
|---|---|
| Cloudflare Access | 利用者は、自分のIDプロバイダー経由でサインインし、Accessのポリシーを通る必要がある。手順は、公式の「Secure MCP servers with Access for SaaS」を参照(この記事では読めていない) |
| 第三者のOAuth 2.0 | GitHub、Google、Auth0など(公式の例。ほかの提供元の名前は、今回の確認では読み取れていません) |
GitHubのOAuthの例(公式の順):
npm create cloudflare@latest -- my-mcp-server-github-auth --template=cloudflare/ai/demos/remote-mcp-github-oauthで雛形を作る。- GitHubのOAuth Appを2つ作る(手元用はコールバックが
http://localhost:8788/callback、本番用)。 - 手元用には、
.envにGITHUB_CLIENT_IDとGITHUB_CLIENT_SECRETを入れる。 - 本番用には、
npx wrangler secret putでGITHUB_CLIENT_ID、GITHUB_CLIENT_SECRET、COOKIE_ENCRYPTION_KEYを設定し、KVの名前空間npx wrangler kv namespace create "OAUTH_KV"を作って、IDをwrangler.jsoncのOAUTH_KVの欄に入れる。 npm run deployで公開する。
C-5 何が渡るか/外し方/確認点
- 渡るデータ:自作サーバーが出すツールの入出力が、つないだAI(ClaudeやCursorのモデルなど)に渡ります。
- 僕らの見立て(公式の文ではありません):何を出すかは作る人が決めます。認証なしの雛形(名前に
authlessが付くもの)は、URLを知る人に開かれた形になる、と読めます。 - 外す(クライアント側):設定ファイルの項目を消す。Claude Codeの削除コマンドは、読んだページには載っていません。
- 外す(サーバー側):
npx wrangler delete(06の後始末。Workerと関連資源が消えると公式が書く)。 - 確認点:URLの末尾が
/mcpか、ブラウザで開いていないか(C-1の注意)、claude mcp listに出ているか、認証の種類と合っているか。
連携D:AI Searchの公開口(MCP)を、外のAIにつなぐ(公式の「AI Search: MCP」)
D-1 公開口をつくる(公式の順)
- ダッシュボードで AI Search を開き、インスタンスを選びます。
- Settings > Public Endpoint へ進みます(同じページの独自ドメインの節には「Public Endpoints」という表記もあり、実際のメニュー名は手元で確かめてください)。
- Enable Public Endpoint をオンにします。
- 公開口のURLをコピーします。
URLの形(公式):
https://<PUBLIC_ENDPOINT_ID>.search.ai.cloudflare.com/mcp
複数のインスタンスをまとめた「名前空間」の口は ns- で始まる https://ns-<NAMESPACE_ENDPOINT_ID>.search.ai.cloudflare.com/mcp です。ツールとリクエストの形は個別の口と同じ、と公式は書いています。どのインスタンスを対象にできるか(許可の仕組み)は、今回の確認では読み取れていません。公式ページで確認してください。
D-2 使う(公式の例の写し)
ツールは search の1つで、引数は query(文字列)です(ほかの引数は、ページには載っていません)。Accept ヘッダーには application/json, text/event-stream が要ります。
curl https://<PUBLIC_ENDPOINT_ID>.search.ai.cloudflare.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search",
"arguments": {
"query": "How do I configure AI Search?"
}
}
}'
公式のページは、MCPクライアントの設定ファイルの例は載せていません。また、完全なクライアントが必要とする初期化のやりとり(ハンドシェイク)の例も載せておらず、MCPの仕様かクライアントの資料を見るよう、という趣旨でした。
D-3 認証をつける(公式の記述)
- 同じアカウントのゾーンに、独自ドメインを付けます(有効な公開口が要ります)。
- その独自ドメインの前に、Cloudflare Accessを置きます。
- クライアントは、Accessのサービストークンを、
CF-Access-Client-IdとCF-Access-Client-Secretのヘッダーで送ります。 - あわせて
default_domain_enabledをfalseにします。Accessが守るのは独自ドメインだけなので、そうしないと、最初に作られたホスト名(<PUBLIC_ENDPOINT_ID>.search.ai.cloudflare.com)は認証なしのリクエストに答え続ける、と公式は書いています。この設定をどの画面・どのAPIで行うかは、公式のこのページには書かれていません(公式で確認できていない)。
D-4 渡るデータ/外し方/確認点
- 渡るデータ(公式の記述):入れた資料から検索された結果が、問い合わせた側に返ります。公式の呼び出し例(D-2)には、認証のヘッダーがありません。独自ドメインにAccessを付けても
default_domain_enabledをfalseにしないと、既定のホスト名は認証なしのリクエストに答え続ける、と公式は書いています(D-3)。 - 僕らの見立て(公式の文ではありません):公開口を有効にした状態でURLが外に知られると、そのインスタンスに入れた資料から検索された内容を、第三者が取り出せる可能性があります。公式が「誰でも見える」と明記しているわけではないので、有効にする前に、そのインスタンスに入れた資料の範囲を確かめておく、という使い方が考えられます。
- 外す(公式の記述):公開口は Enable Public Endpoint で有効にします(D-1)。オフにする手順と、オフにしたときの動き(URLが無効になるか)は、読んだページに記載が見つかりませんでした。独自ドメインには有効な公開口が要る、とだけ書かれています。
- 確認点:
Acceptヘッダー、独自ドメインを付けたときのdefault_domain_enabled、名前空間の口と個別の口の混同。
渡るデータのまとめ(この記事の連携)
| 連携 | 渡る先 | 渡る内容 | 公式の記述の有無 |
|---|---|---|---|
| A・B | 外のAIの提供元 | 許可した範囲のCloudflareの情報 | 提供元での扱いは、Cloudflareの資料に記載なし |
| C | つないだAI | 自作サーバーのツールの入出力 | 作る人が決める |
| D | 問い合わせた側 | 検索結果 | 認証なしの例/Accessで守る手順あり |
AI Gateway経由で他社に渡るデータ、OpenAI互換、Agentから外のMCPへ渡るデータは、08にあります。
つまずきと直し方
| 症状 | 公式に書かれている原因・直し方 |
|---|---|
| MCPの途中で「interrupted」 | ツールの連鎖で長くなった可能性。質問を短くする・分ける(README) |
/sse で 410 Gone |
古い経路。READMEは、既存のURLをStreamable HTTPで使う設定にするか、/mcp に切り替えるかの2つを示す(README) |
| AI Searchの口にcurlが通らない | Accept に application/json, text/event-stream が要る(D-2) |
| 自作MCPをブラウザで開いても動かない | MCPのやりとり用で、ブラウザでは動かない(C-1) |
| 古い解説のサーバーに接続している | READMEの非推奨の一覧と照らし、mcp.cloudflare.com に移す(A-1) |
気をつけること
- この記事は、実際に使って確かめた記録ではありません。公式の手順と例を並べたもので、設定や呼び出しの動作は確かめていません。
- MCPの接続は、外のAIに、Cloudflareのアカウントの操作や情報を渡す設定です。 OAuthで選ぶ権限や、APIトークンの権限は、必要な分に絞ります(公式の資料は、サーバーごとに必要な権限を持つトークンを使う書き方です)。
- 公式が書いていない画面・手順は、書いていません:Claude CodeやClaude Desktopの接続画面、OAuthの許可の取り消し、AI Searchのインスタンスの削除、Cloudflare Skillsプラグインのコマンドの正確な形、Cloudflare APIサーバーに必要なトークンの権限一覧。
- 公式ページ同士で書き方が違う点:Cloudflare APIサーバーの位置づけ(READMEは recommended、ドキュメントは「the only MCP server you need」)、READMEの
/sseの扱い、AI Searchの「Public Endpoint」と「Public Endpoints」の表記。 - 秘密の値(トークン、Accessのサービストークン)は、例でも置き換え用の文字で書いています。実際の値は、貼り付けや共有の範囲を自分で決めてください。
- OpenAI、Claude、Cursor、Windsurf、GitHubなどは第三者です。それぞれの規約・設定は、この記事では読んでいません。
- 金額や無料枠は、この記事の対象外です(01・04)。規約や契約、個人情報の解釈は、専門家や公式に確認してください。この記事は法律の助言ではありません。
出典
- Cloudflare MCP Servers(Cloudflare Agents docs、確認日 2026-10-25)
- cloudflare/mcp-server-cloudflare(GitHub、Cloudflare、確認日 2026-10-25)
- Model Context Protocol (MCP)(Cloudflare Agents docs、確認日 2026-10-25)
- Build a Remote MCP server(Cloudflare Agents docs、確認日 2026-10-25)
- Test a Remote MCP Server(Cloudflare Agents docs、確認日 2026-10-25)
- AI Search: MCP(Cloudflare Docs、確認日 2026-10-25)