Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
知っているふりをしないためのMCPサーバー入門 - Oracle AI Jam Session...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
oracle4engineer
PRO
January 21, 2026
Video
7.4k
10
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
知っているふりをしないためのMCPサーバー入門 - Oracle AI Jam Session #32 -
oracle4engineer
PRO
January 21, 2026
Video
More Decks by oracle4engineer
See All by oracle4engineer
Oracle AI Databaseデータベース・サービスのメンテナンス(BaseDB/ExaDB-D/ExaDB-XS)
oracle4engineer
PRO
4
1.5k
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2k
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.9k
CrossplaneによるCloud Native Control Plane
oracle4engineer
PRO
0
98
OCI Oracle AI Database Services新機能アップデート(2026/03-2026/05)
oracle4engineer
PRO
0
390
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/3 - 2026/5
oracle4engineer
PRO
1
260
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.8k
Oracle Database Gold Image
oracle4engineer
PRO
1
170
Featured
See All Featured
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Automating Front-end Workflow
addyosmani
1370
210k
Crafting Experiences
bethany
1
180
Git: the NoSQL Database
bkeepers
PRO
432
67k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
Statistics for Hackers
jakevdp
799
230k
Practical Orchestrator
shlominoach
191
11k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Everyday Curiosity
cassininazir
0
230
Transcript
知っているふりをしないための MCPサーバー入門 Yuki Sogawa Oracle Japan
自己紹介 曽川 宥輝 日本オラクル CloudNative/AI,ML ク ラウドエンジニア バックグラウンド 大阪大学でデータセンターの省電力化の研究をしていました 趣味
ギター、バイク、ゲームなど 2 Copyright © 2026, Oracle and/or its affiliates
Agenda 3 Copyright © 2026, Oracle and/or its affiliates 1
2 3 4 5 6 7 MCPの基礎知識 MCPサーバーの機能 MCPクライアントの機能 MCPのライフサイクル MCPの課題 まとめ Next Step
MCPの基礎知識
MCPとは? AIアプリケーションを外部システムに接続するための標準規格 Anthropicが提唱した、AIアプリケーションを外部システムと連携させるためのプロトコル 5 Copyright © 2026, Oracle and/or its
affiliates https://modelcontextprotocol.io/docs/getting-started/intro
MCPを使うと何ができる? LLMに、アクションを実行するための手足を与えることができる MCPを使うと自然言語で色々なアクションが実行できるようになる • データベースを操作する • ファイル操作を行う • 天気APIから天気の情報を取得する •
メールを送信する • コードを実行する • 他のシステム(Kubernetesなど)を操作する • Etc… 6 Copyright © 2026, Oracle and/or its affiliates
MCPのアーキテクチャ ホスト・クライアント・サーバーの3つの登場人物がいる 7 Copyright © 2026, Oracle and/or its affiliates
MCPクライアント MCPサーバー MCPホスト(Claude Desktop, VSCodeなど) MCPでやりとり
MCPのアーキテクチャ(レイヤー) データ層とトランスポート層の2層構造 データ層 • JSON-RPCでメッセージのやり取りを行う • MCPサーバーの機能 • Tools •
Resources • Prompts • MCPクライアントの機能 • Roots • Sampling • Elicitation などを定義している(詳細は後述します) トランスポート層 • JSON-RPCのメッセージをどのようにやり取りするか を定義する • 標準入出力でやり取り • Streamable HTTPでやり取り などを定義している(詳細は後述します) 8 Copyright © 2026, Oracle and/or its affiliates
MCPのデータ層 クライアント・サーバー間のメッセージのフォーマット、JSON-RPC 2.0 JSON-RPCは、Remote Procedure Callを実現するプロトコルの一つ。 REST APIの方が聞き馴染みがあるが、RPCの方が「ツール実行」には適切 • REST
API : リソースがメインになる(POST /tools/weather_current/executions みたいになる) • RPC: アクションがメインになる 9 Copyright © 2026, Oracle and/or its affiliates
MCPのデータ層 クライアント・サーバー間のメッセージのフォーマット、JSON-RPC 2.0 10 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー JSON-RPC 2.0 MCPの仕様 (メソッドなど) JSON-RPC 2.0 MCPの仕様 (メソッドなど) *JSON-RPC 2.0では、jsonrpc, id, method, paramsなどのフィールドが定義されているが、その中に何がくるのかまでは定 義されていない MCPは、その中(例えばmethodの中)にどういう名前が入るかなどを定義している *https://www.jsonrpc.org/specification
MCPのトランスポート層 標準入出力 • MCPクライアントとMCPサーバーを同じマシン上で 実行する場合に使用する • 基本的に認可などが不要なので非常に手軽に利用で きる • MCPクライアントのサブプロセスとしてMCPサー
バーを起動する Streamable HTTP • リモートのMCPサーバーを利用する場合に使用する • MCPは、サーバー起点でクライアントに通信を開始 する場合がある • しかし通常のHTTPでは、常にクライアント起点の通 信しかできない • HTTPの拡張仕様で、サーバー起点の通信もできるよ うにしたものがStreamable HTTP 11 Copyright © 2026, Oracle and/or its affiliates MCPクライ アント MCP サーバー 標準入力 標準出力
MCPのトランスポート層 標準入出力 • MCPクライアントとMCPサーバーを同じマシン上で 実行する場合に使用する • 基本的に認可などが不要なので非常に手軽に利用で きる • MCPクライアントのサブプロセスとしてMCPサー
バーを起動する Streamable HTTP • リモートのMCPサーバーを利用する場合に使用する • MCPは、サーバー起点でクライアントに通信を開始 する場合がある • しかし通常のHTTPでは、常にクライアント起点の通 信しかできない • HTTPの拡張仕様で、サーバー起点の通信もできるよ うにしたものがStreamable HTTP 12 Copyright © 2026, Oracle and/or its affiliates MCPクライ アント MCP サーバー 標準入力 標準出力 本日のセッションではこちらを 前提としてお話しします
MCPでよくある勘違い 「MCPはAIに手足を与えるためのプロトコルだ」と言われることが多いため、 • Function calling • Tool Use などが要らないと思われがち しかしこれらは、AIエージェント開発においてMCPと補完しあう関係にある
13 Copyright © 2026, Oracle and/or its affiliates
MCPでよくある勘違い MCPのアーキテクチャを見てみると… MCPのアーキテクチャには LLMはいない 14 Copyright © 2026, Oracle and/or
its affiliates MCPクライアント MCPサーバー MCPホスト(Claude Desktop, VSCodeなど) MCPでやりとり LLMとクライアントの間の通信は MCPに関係ない
MCPでよくある勘違い MCPのアーキテクチャを見てみると… MCPのアーキテクチャには LLMはいない 15 Copyright © 2026, Oracle and/or
its affiliates MCPクライアント MCPサーバー MCPホスト(Claude Desktop, VSCodeなど) MCPでやりとり LLMとクライアントの間の通信は MCPに関係ない じゃあどうやるの?
MCPでよくある勘違い MCPクライアントとLLM間の通信はFunction calling/Tool Use 16 Copyright © 2026, Oracle and/or
its affiliates MCPクライアント MCPサーバー MCP Function calling/ Tool Use
補足:Function callingとTool Useって何が違う? Function callingを拡張したのがTool Use Function calling • クライアント側に実装されている自作関数を実行す
る仕組み Tool Use • 関数実行の上位概念としてToolを導入 • 実行の主体が多様化 • クライアント側のTool • LLM側(Anthropicのサーバーなど)のTool 17 Copyright © 2026, Oracle and/or its affiliates ツールタイプを指定する 以前はfunctionsだったが、Tool Useに寄せた仕様になっている
MCPは何のためにある? ツール呼び出しを簡単にするため MCPがないと…(M*N問題) • クライアントがLLM呼び出しを抽象化していればク ライアントごとのツール実装 • 抽象化していなければモデル*クライアントごとの ツール実装が必要になる MCPがあると
• ツール実装はMCPの1通り • クライアントはMCPと、各LLM呼び出しができれば OK 18 Copyright © 2026, Oracle and/or its affiliates クライアント (VSCode) クライアント (Cursor) Githubツール Slackツール クライアント (VSCode) クライアント (Cursor) Githubツール Slackツール Tool Useの領域 MCPの領域
ここまでのまとめ • MCPはツール呼び出し側(クライアント)とツール実行側(サーバー)のやり取りの標準規格 • MCPは二つのレイヤーに分かれる • トランスポート層 - 標準入出力 -
Streamable HTTP • データ層 - メッセージの仕様(JSON-RPC 2.0) - クライアント・サーバーのプリミティブ(機能) • Function calling/Tool Useとは担当場所が異なる • MCPはツール呼び出し側と実行側との間の標準仕様 • Function calling/Tool UseはLLMとクライアントの間の仕様 19 Copyright © 2026, Oracle and/or its affiliates
MCPサーバーの機能
MCPサーバーのプリミティブ 3つの機能がある • Tools • LLMがアクティブに呼び出せる関数 • データベースへの書き込み、外部APIの呼び出し、ファイル変更など • Resources
• LLMに追加のコンテキストを与える機能(RAGのためのデータ供給源を提供) • サーバーにあるファイルの内容 • データベースのデータ • ドキュメント など • Prompts • LLMがToolsやResourcesを上手く扱えるようにするためのプロンプトを提供する機能 • ToolsやResourcesの呼び出しをユースケース単位でテンプレート化しておく • 正しくツール呼び出しが行われるようなプロンプトをあらかじめ用意しておく - Issueを作成してからPR作成して など 21 Copyright © 2026, Oracle and/or its affiliates
Tools LLMに関数を実行させる 二つのメソッドがある • tools/list • そのMCPサーバーで利用できるツールのリストを提供する • ツールがどういったものかを事前にLLMに教える •
tools/call • ツールを実行する 22 Copyright © 2026, Oracle and/or its affiliates
Tools 利用の流れ1 まずはLLMにどんなツールがあるかを教えてあげる 23 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー どんなツールがあ りますか? LLM tools/list
Tools 利用の流れ1 まずはLLMにどんなツールがあるかを教えてあげる 24 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー こんなツールがあ ります LLM レスポンスを返す • 足し算ツール • 掛け算ツール
Tools 利用の流れ1 まずはLLMにどんなツールがあるかを教えてあげる 25 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー このMCPサーバー にはこんなツール があるみたいです LLM プロンプトにツール リストを入れる • 足し算ツール • 引数1と引数2を足します • 掛け算ツール • 引数1と引数2をかけます
Tools 利用の流れ1 まずはLLMにどんなツールがあるかを教えてあげる 26 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー なるほど LLM
Tools 利用の流れ2 LLMがツール実行を行う 27 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー この足し算ツール 使いたいな… LLM Tool Useで指示 • 足し算ツール • 引数は1と2
Tools 利用の流れ2 LLMがツール実行を行う 28 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー 足し算ツールの実 行をお願いします LLM tools/call • 足し算ツール • 引数は1と2
Tools 利用の流れ2 LLMがツール実行を行う 29 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー 足し算ツール実行 ね。 終わりましたよ LLM レスポンスを返す • 足し算ツールの結果 • 3
Tools 利用の流れ2 LLMがツール実行を行う 30 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー Tool Aの実行が終わ りました。結果は これです。 LLM 結果をプロンプト で返す [Tool結果] 1+2 = 3
Tools 利用の流れ2 LLMがツール実行を行う 31 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー なるほど LLM
Tools 注意点 • ツールリストは、クライアント起点でLLMに教えてあげる必要がある • ツールリストを与えないと、そもそもLLMはMCPサーバーの存在を知らない • ツール実行の結果をどのようにLLMに伝達するかは、クライアントの実装次第 • LLMはあくまで入力された自然言語に対して、尤もらしい自然言語を出力するだけ
• LLMは無邪気にTool実行を要求するため、危険度の高いToolの扱いには注意が必要 • シェルが実行できるToolを提供するなら、操作できる範囲はクライアントかサーバー側で定めておく • データベース操作ができるToolを提供するなら、クエリの安全性はクライアントかサーバー側で定めておく • そもそもサンドボックス環境(VM, コンテナ)でしか利用しない など 32 Copyright © 2026, Oracle and/or its affiliates
Tools やり取りされるJSONスキーマ(tools/list) リクエスト レスポンス 33 Copyright © 2026, Oracle and/or
its affiliates この結果をLLMにど う伝えるかはクライ アント次第
Tools やり取りされるJSONスキーマ(tools/call) リクエスト レスポンス 34 Copyright © 2026, Oracle and/or
its affiliates この結果をLLMにど う伝えるかはクライ アント次第
Resources LLMに追加のコンテキストを与える 四つのメソッドがある • resources/list • リソース(URI)のリストを提供する • resources/templates/list •
リソーステンプレート(こういうパターンのURIはいけますよ)のリストを提供する • resources/read • リソースの内容を提供する • resources/subscribe • リソースの変更を監視する機能を提供する 35 Copyright © 2026, Oracle and/or its affiliates
Resources 利用の流れ1 どういうリソースがあるかをクライアントで把握する 36 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー どんなリソースが ありますか? LLM resources/list もしくは resources/templates/list
Resources 利用の流れ1 どういうリソースがあるかをクライアントで把握する 37 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー どんなリソースが ありますか? LLM resources/list もしくは resources/templates/list • resource/listの場合は、実際のリソースの URIのリストが返る • file:///logs/error.txtなど • resouces/templates/listの場合は、URIのテ ンプレートリストが返る • file:///logs/{date}.txtなど • {date}に値を埋めればいいことがわか る
Resources 利用の流れ1 どういうリソースがあるかをクライアントで把握する 38 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー こんなリソースが あります LLM レスポンスを返す • file///logs/error.txt • エラーのログ • file///logs/hello.txt • 挨拶のログ
Resources 利用の流れ1 どういうリソースがあるかをクライアントで把握する ※ リソースはクライアント(ユーザー)が利用開始するので、LLMにリソースのリストを渡す必要はない 39 Copyright © 2026, Oracle
and/or its affiliates MCPクライアント MCPサーバー なるほど LLM
Resources 利用の流れ2 ユーザー(クライアント)がリソースを要求する 40 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー LLM resouces/read エラーログを分析して欲しいな。 File://logs/error.txtが欲しいです
Resources 利用の流れ2 ユーザー(クライアント)がリソースを要求する 41 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー どうぞ LLM logs/error.txtの 内容を返す
Resources 利用の流れ2 ユーザー(クライアント)がリソースを要求する 42 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー 内容はこれです エラーを分析して LLM [Resource] logs/error.log [Content] エラー発生 プロンプトで伝える
Resources 利用の流れ2 ユーザー(クライアント)がリソースを要求する 43 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー 分析結果です LLM
Resources 利用の流れ2 ユーザー(クライアント)がリソースを要求する 44 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー なるほど LLM
Resources 利用の流れ3 LLMがリソースのサブスクライブを要求する時 45 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー logs/hello.txtに変更 があったら都度教 えてください LLM resouces/subscribe
Resources 利用の流れ3 LLMがリソースのサブスクライブを要求する時 46 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー オッケー LLM
Resources 利用の流れ3 サブスクライブしたリソースに変更があった時 47 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー logs/hello.txtの内容 変わったよ LLM notifications/resources/updated
Resources 利用の流れ3 サブスクライブしたリソースに変更があった時 48 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー logs/hello.txtの内容 を教えてください LLM resources/read
Resources 利用の流れ3 サブスクライブしたリソースに変更があった時 基本的には裏側で勝手に行われるので、ユーザーが気づくことはない 49 Copyright © 2026, Oracle and/or
its affiliates MCPクライアント MCPサーバー どうぞ LLM レスポンス
Resources 注意点 • リソースの数が多すぎる場合は、リソーステンプレートを渡す方が良い • リソースのリストだけでコンテキスト長が埋まる恐れがあるため • サーバー起点の通信が発生する(これが純粋なHTTPではMCPを使えない理由) • Notificationという通信(メソッド)は返信する必要がない(返信しようがない)
• JSON-RPCではリクエストIDを見て適切なレスポンスを返すが、NotificationにはリクエストIDがないため • 一方的に送りつけるだけで良い情報に使われる • 今回のリソースのサブスクライブも返信が不要(返信する意味がない) • サブスクライブしていても、変更の通知と同時に内容が送られてくるわけではない • 内容が知りたければresources/readを呼び出す 50 Copyright © 2026, Oracle and/or its affiliates
Prompts LLMにTools, Resourcesの使い方を教える 二つのメソッドがある • prompts/list • プロンプトのリストを提供する • prompts/get
• プロンプトの詳細を提供する 51 Copyright © 2026, Oracle and/or its affiliates
Prompts なんのための機能か 有用なToolsやResourcesを実装しても、以下のような問題がある • MCPサーバーに接続しても、何をどう聞けば利用できるかがよくわからない • うまくToolやResourceを使えるようなプロンプトを毎回書くのは大変 • ベストな使い方はサーバー開発者がよく知っているはずだが、利用者(クライアント)はそれを知らない 52
Copyright © 2026, Oracle and/or its affiliates そのMCPサーバーの機能をうまく利用できるプロンプトを サーバー開発者側が用意して、提供する仕組み プルリクエストの説 明をして欲しいな… スラッシュコマンドで プロンプトを呼び出し 必要な引数を入 れるだけ
Prompts 利用の流れ1 MCPサーバーにプロンプトのリストを要求する 53 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー どんなプロンプト がありますか? LLM prompts/list
Prompts 利用の流れ1 MCPサーバーにプロンプトのリストを要求する 54 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー これです LLM レスポンス
Prompts 利用の流れ1 MCPサーバーにプロンプトのリストを要求する ※ プロンプトはクライアント(ユーザー)が利用開始するので、 LLMにプロンプトのリストを渡す必要はない 55 Copyright © 2026,
Oracle and/or its affiliates MCPクライアント MCPサーバー スラッシュコマンド で使えるようにしよ う LLM
Prompts 利用の流れ2 ユーザーがスラッシュコマンドなどでプロンプトを利用する 56 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー LLM スラッシュコマンドで プロンプト呼び出し
Prompts 利用の流れ2 ユーザーがスラッシュコマンドなどでプロンプトを利用する 57 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー LLM prompts/get 引数が必要な場合はUI 上で埋めた後、サー バーにリクエスト送信
Prompts 利用の流れ2 ユーザーがスラッシュコマンドなどでプロンプトを利用する 58 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー LLM レスポンス プロンプトをレンダリング (引数を埋めて完成させ る)
Prompts 利用の流れ2 ユーザーがスラッシュコマンドなどでプロンプトを利用する 59 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー LLM 受け取ったプロンプト を送信
Prompts 利用の流れ2 ユーザーがスラッシュコマンドなどでプロンプトを利用する 60 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー LLM 推論結果を返す (ここにTool呼び出しなどが含 まれる)
Prompts 利用の流れ2 ユーザーがスラッシュコマンドなどでプロンプトを利用する 61 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント MCPサーバー LLM ツール呼び出しなど
ここまでのまとめ • Tools • LLMがアクティブに呼び出せる関数 • データベースへの書き込み、外部APIの呼び出し、ファイル変更など • Resources •
LLMに追加のコンテキストを与える機能(RAGのためのデータ供給源を提供) • サーバーにあるファイルの内容 • データベースのデータ • ドキュメント など • Prompts • LLMがToolsやResourcesを上手く扱えるようにするためのプロンプトを提供する機能 • ToolsやResourcesの呼び出しをユースケース単位でテンプレート化しておく • Resources Aの内容を読んで、Tool A, Tool Bを呼び出す など 62 Copyright © 2026, Oracle and/or its affiliates
MCPクライアントの機能
MCPクライアントのプリミティブ • Roots • サーバーが利用できるファイルやディレクトリの範囲を教える機能 • Sampling • サーバーがクライアントを通してLLMを利用できるようにする機能 •
Elicitation • サーバーが必要な情報を動的に収集できるようにする機能 64 Copyright © 2026, Oracle and/or its affiliates
Roots ユーザーの作業ディレクトリをサーバーに教える機能 なぜ必要か • 適切なResourcesのリストを返却するため • 作業ディレクトリがわからないと、リストが作成できない • 作業ディレクトリが事前にわかっていると、サーバー側でリッチな機能を提供できるため •
事前に対象ファイル・ディレクトリが分かっていることで裏側で必要な作業をやっておける • 作業ディレクトリ内の曖昧検索機能など • 操作していい範囲のファイルかを判断するため • tools/callなどで操作していい範囲にあるファイルかを判断できる 65 Copyright © 2026, Oracle and/or its affiliates
Roots 役割1: Resourcesのリストを作成する 作業ディレクトリごとにResourcesのリストに含まれるURIが異なるので、サーバーは作業ディレクトリを把握する必 要がある 66 Copyright © 2026, Oracle
and/or its affiliates MCPクライアント Resourceのリストをく ださい MCPサーバー 今の作業ディレクトリ にあるのはこれだな • URI: file:///Documents/src/main.py • URI: file:///Documents/src/hoge.txt 作業ディレクトリがわからないと 適切なURIが判断できない
Roots 役割2: リッチな機能を提供できる 作業ディレクトリ内を曖昧検索できるようなMCPサーバーの場合、事前にベクトル化が必要になるので、対象ファイ ルが事前にわかっていると準備できる 67 Copyright © 2026, Oracle
and/or its affiliates 認証に関係ありそ うなファイルはあ る? MCPサーバー 今からベクトル化 するのでちょっと 待ってください 作業ディレクトリが分かってない場合 作業ディレクトリが分かってる場合 認証に関係ありそ うなファイルはあ る? MCPサーバー 事前にベクトル化 してたからすぐ検 索できるぞ
Roots 役割3: 操作していい範囲のファイルかを判断できる 作業ディレクトリが分かっていれば、tools/callなどでファイル操作を要求された時に、本当に操作していいファイル かを判断できる(作業ディレクトリ外のものは操作しないように実装する) ※MCPのドキュメントには、「ルート境界を尊重する」ということがSHOULDとして書かれているため、あくまで補助 的な役割と考える方がいい。必ずしも境界を犯さないとは限らない 68 Copyright ©
2026, Oracle and/or its affiliates MCPクライアント このファイルを削除し てください MCPサーバー 作業ディレクトリ外の ファイルだからダメ tools/call
Roots メッセージのフロー クライアント側に用意されているメソッドなので、サーバー起点でメソッドが呼び出される 69 Copyright © 2026, Oracle and/or its
affiliates 作業ディレクトリを把握する 作業ディレクトリに変更があった場合はクライアントが通知して、 再度サーバーが作業ディレクトリを要求
Sampling サーバーがクライアントを通してLLMを利用できるようにする機能 ユースケース例 大量のデータをユーザーに返す前に、必要な部分だけを抽出してから返却することでコンテキスト消費を防ぐ 70 Copyright © 2026, Oracle and/or
its affiliates MCPサーバー MCPクライアント 昨日のエラーログを見 せて LLM
Sampling サーバーがクライアントを通してLLMを利用できるようにする機能 ユースケース例 大量のデータをユーザーに返す前に、必要な部分だけを抽出してから返却することでコンテキスト消費を防ぐ 71 Copyright © 2026, Oracle and/or
its affiliates MCPサーバー ログは1万行もあるか らLLMに重要な部分だ け抽出してもらおう MCPクライアント 昨日のエラーログを見 せて LLM ログ一万行要約依頼 ログ一万行要約依頼
Sampling サーバーがクライアントを通してLLMを利用できるようにする機能 ユースケース例 大量のデータをユーザーに返す前に、必要な部分だけを抽出してから返却することでコンテキスト消費を防ぐ 72 Copyright © 2026, Oracle and/or
its affiliates MCPサーバー ログは1万行もあるか らLLMに重要な部分だ け抽出してもらおう MCPクライアント 昨日のエラーログを見 せて LLM 要約結果 要約結果
Sampling サーバーがクライアントを通してLLMを利用できるようにする機能 ユースケース例 大量のデータをユーザーに返す前に、必要な部分だけを抽出してから返却することでコンテキスト消費を防ぐ 73 Copyright © 2026, Oracle and/or
its affiliates MCPサーバー ログは1万行もあるか らLLMに重要な部分だ け抽出してもらおう MCPクライアント 昨日のエラーログを見 せて LLM 結果を返す
Sampling サーバーがクライアントを通してLLMを利用できるようにする機能 ユースケース例 大量のデータをユーザーに返す前に、必要な部分だけを抽出してから返却することでコンテキスト消費を防ぐ Samplingの際は承認フェーズなどが入ります。詳しくはドキュメントをご覧ください 74 Copyright © 2026, Oracle
and/or its affiliates MCPサーバー ログは1万行もあるか らLLMに重要な部分だ け抽出してもらおう MCPクライアント 昨日のエラーログを見 せて LLM 結果を返す Sampling時にMCPサーバーの ツールを利用できるようにす ることも可能
Elicitation サーバーが必要な情報を動的に収集できるようにする機能 サーバーが自律的にユーザーへの質問や、操作の要求を行えるようにするためのもの モード • フォームモード • サーバーがJSONスキーマを定義し、クライアントがそれに基づいて入力フォームを生成・表示するモード • URLモード
• サーバーがユーザーを外部のWebページに誘導するモード 75 Copyright © 2026, Oracle and/or its affiliates
Elicitation フォームモード 構造化データを取得したい場合に使う • チケット予約を依頼されたが、日付の情報がない場合にカレンダーの入力フォームを出す • デプロイを依頼された際に、対象の環境を選択肢で選ばせる • ユーザー名や年齢などの属性情報を入力させる 76
Copyright © 2026, Oracle and/or its affiliates デプロイして MCPサーバー
Elicitation フォームモード 構造化データを取得したい場合に使う • チケット予約を依頼されたが、日付の情報がない場合にカレンダーの入力フォームを出す • デプロイを依頼された際に、対象の環境を選択肢で選ばせる • ユーザー名や年齢などの属性情報を入力させる 77
Copyright © 2026, Oracle and/or its affiliates デプロイして MCPサーバー ステージング環境 と本番環境のどち らですか?
Elicitation フォームモード 構造化データを取得したい場合に使う • チケット予約を依頼されたが、日付の情報がない場合にカレンダーの入力フォームを出す • デプロイを依頼された際に、対象の環境を選択肢で選ばせる • ユーザー名や年齢などの属性情報を入力させる 78
Copyright © 2026, Oracle and/or its affiliates ステージング環境 を選択っと MCPサーバー
Elicitation フォームモード 構造化データを取得したい場合に使う • チケット予約を依頼されたが、日付の情報がない場合にカレンダーの入力フォームを出す • デプロイを依頼された際に、対象の環境を選択肢で選ばせる • ユーザー名や年齢などの属性情報を入力させる 79
Copyright © 2026, Oracle and/or its affiliates ステージング環境 を選択っと MCPサーバー ステージング環境 にデプロイします
Elicitation URLモード MCPクライアントを介さずに、ブラウザ上でセキュアな操作などを行いたい場合 • OAuth認可フロー内の認証 • APIキーの設定 • 決済・承認 80
Copyright © 2026, Oracle and/or its affiliates Googleカレンダーの 内容を読み取って MCPサーバー
Elicitation URLモード MCPクライアントを介さずに、ブラウザ上でセキュアな操作などを行いたい場合 • OAuth認可フロー内の認証 • APIキーの設定 • 決済・承認 81
Copyright © 2026, Oracle and/or its affiliates Googleカレンダーの 内容を読み取って MCPサーバー OAuthのフローを開始 認証URLを返す 認証ページはMCPクライアントを介さないことでセキュアになる
Elicitation URLモード MCPクライアントを介さずに、ブラウザ上でセキュアな操作などを行いたい場合 • OAuth認可フロー内の認証 • APIキーの設定 • 決済・承認 82
Copyright © 2026, Oracle and/or its affiliates MCPサーバー Googleアカウントでログ インして、認可したぞ
Elicitation URLモード MCPクライアントを介さずに、ブラウザ上でセキュアな操作などを行いたい場合 • OAuth認可フロー内の認証 • APIキーの設定 • 決済・承認 83
Copyright © 2026, Oracle and/or its affiliates MCPサーバー Googleアカウントでログ インして、認可したぞ OAuthのフロー完了 ※認可フローは非常に簡略化しています。より詳細が知りたい方はNext Stepの案内を参考にしてください
ここまでのまとめ クライアントのプリミティブ(機能)は3つ。 • Roots • サーバーが利用できるファイルやディレクトリの範囲を教える機能 • Sampling • サーバーがクライアントを通してLLMを利用できるようにする機能
• Elicitation • サーバーが必要な情報を動的に収集できるようにする機能 84 Copyright © 2026, Oracle and/or its affiliates
MCPのライフサイクル
MCPのライフサイクルは3つに分かれる 1. 初期化フェーズ • 機能のネゴシエーションとプロトコルバージョンを合意する 2. 動作フェーズ • 通常のプロトコル通信 3.
シャットダウンフェーズ • 接続を正常に終了する 86 Copyright © 2026, Oracle and/or its affiliates
初期化フェーズ 正しくクライアントとサーバーがやり取りするための情報交換を行う • MCPのプロトコルバージョンのやり取り(互換性があるかを確認する) • お互いにどういう機能があるかを共有する • お互いの基本的な情報(名前、説明など)を共有する 87 Copyright
© 2026, Oracle and/or its affiliates MCPクライアント MCPサーバー 私はこんなことができ ます。MCPのバージョ ンはxxです。 私はこんなことができ ます。MCPのバージョ ンはxxです。
初期化フェーズ Capabilities MCPクライアント・MCPサーバーの機能はCapabilitiesというフィールドで交換する 88 Copyright © 2026, Oracle and/or its
affiliates クライアントのCapabilities サーバーのCapabilities Rootsに対応している Samplingに対応している Elicitationに対応している Promptsに対応している Resourcesに対応している Toolsに対応している
シャットダウンフェーズ 通常はクライアントが接続を終了する 特定のシャットダウンメッセージは定義されていないので、トランスポート層で接続終了する必要がある • 標準入出力の場合 • 子プロセス(サーバー)への入力ストリームを閉じる • サーバーの終了を待つ or
終了しない場合はSIGTERMを送信 • それでも終了しない場合はSIGKILLを送信 • Streamable HTTPの場合 • HTTP接続を閉じる 89 Copyright © 2026, Oracle and/or its affiliates
MCPの課題
たくさんのMCPサーバーを接続するとコンテキストを圧迫する問題 Anthropicは、コンテキスト圧迫問題に関するブログを公開した ここでは、「たくさんMCPサーバーを接続するとLLMのコンテキストを圧迫するから上手いことやる方法見つけた よ」ということが書かれている 91 Copyright © 2026, Oracle and/or
its affiliates https://www.anthropic.com/engineering/code-execution-with-mcp
コンテキストを圧迫する要因 大量のツール定義 たくさんのMCPサーバーを接続すると、たくさんのTools 定義がコンテキストに埋め込まれるため、コンテキスト ウィンドウを大量に消費する 中間データ ツールから返されるデータをLLMにすべて送信してから、 次の操作が行われる 例: 「東京の売り上げを教えて」と入力した場合
92 Copyright © 2026, Oracle and/or its affiliates LLM クライアント サーバー ツール定義 ツール定義が毎回 プロンプトに入る LLM クライアント サーバー 売上の全データ返却 売上の全データが プロンプトに入る 全データを見て、 東京の売り上げを 返す
コンテキストウィンドウ圧迫を防ぐ、コード実行方式 任意のコードが実行できるToolをMCPサーバーに用意しておき、 必要なタイミングでLLMが実行できるようにする さらに、クライアント側にもコード実行ができる環境を用意しておく(と私は解釈しました) 93 Copyright © 2026, Oracle and/or
its affiliates MCPサーバー MCPクライアント このコードを実行した いです! LLM 実行結果はこれだよ
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 コードを実行するツール定義を受け取る。具体的なツール説明はない。 94 Copyright © 2026, Oracle and/or its
affiliates MCPサーバー (google-drive) MCPクライアント 利用できるツールはこれです。 詳細が知りたかったらドキュメ ントを要求してね LLM MCPサーバー (salesforce)
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 クライアントは、サーバーから受け取ったツール呼び出し用のコードを、ファイルツリーとしてまとめる 95 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント LLM MCPサーバー (google-drive) MCPサーバー (salesforce) 各コードはツール呼び出しを ラップしたものになっている
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 作成したファイルツリーを、LLMに教える ※各ツールの説明はここには含まれないため、ファイル名からどういうものかを推測することになる 96 Copyright © 2026, Oracle and/or
its affiliates MCPクライアント 利用できるツールはこ れです LLM MCPサーバー (google-drive) MCPサーバー (salesforce)
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 LLMは送られてきたツール呼び出しのファイルツリーを見て、どういうツールがあるかをなんとなく把握する 97 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント Google-drive用のツール とかsalesforce用のツー ルとかがあるなぁ LLM MCPサーバー (google-drive) MCPサーバー (salesforce)
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 ユーザーがツール呼び出しが必要になるようなプロンプトを投げてきたとする 98 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント Google-driveにある議事 録.txtの内容を要約して (ユーザー入力) LLM MCPサーバー (google-drive) MCPサーバー (salesforce)
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 LLMはファイルツリーを見て、必要なツール(.tsファイル)にあたりをつけ、その中身を確認するコードを生成する 99 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント servers/google-driveに関 連するツールがありそう。 その中でも getDocument.tsが一番関 係しそうだな。どんな ツールか見てみよう。 LLM MCPサーバー (google-drive) MCPサーバー (salesforce)
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 生成したコードを実行するよう、クライアントにTool Useで依頼する 100 Copyright © 2026, Oracle and/or
its affiliates MCPクライアント このコード実行して LLM MCPサーバー (google-drive) MCPサーバー (salesforce) getDocument.tsの中身を 確認するコード
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 クライアント(Code Execution Sandbox)で、LLMが生成したコードを実行して結果をLLMに返す 101 Copyright © 2026, Oracle
and/or its affiliates MCPクライアント (Code Execution Sandbox) 実行しました。結果 はこれです。 LLM MCPサーバー (google-drive) MCPサーバー (salesforce) getDocument.tsに書かれ たツール定義が返る
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 受け取ったツール定義を見て、今回のタスクに使えそうであればそのツールを使ったコードを生成する 102 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント やっぱりgetDocument.ts が使えるな。議事録.txt の中身を取得するコー ドを生成しよう LLM MCPサーバー (google-drive) MCPサーバー (salesforce)
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 生成したコードを実行するよう、クライアントにTool Useで依頼する 103 Copyright © 2026, Oracle and/or
its affiliates MCPクライアント このコード実行して LLM MCPサーバー (google-drive) MCPサーバー (salesforce) getDocument.tsを 実行するコード
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 クライアントは依頼されたコードをクライアント(Code Execution Sandbox)上で実行する 104 Copyright © 2026, Oracle
and/or its affiliates MCPクライアント (Code Execution Sandbox) LLM MCPサーバー (google-drive) MCPサーバー (salesforce) getDocument.tsを 実行するコード
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 コードが実行された結果、getDocument.tsがラップしていたToolが呼び出される 105 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント LLM MCPサーバー (google-drive) MCPサーバー (salesforce) 議事録.txtの内容を教 えてください
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 ツール呼び出しを受けたMCPサーバーは、議事録.txtの内容を返す 106 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント LLM MCPサーバー (google-drive) MCPサーバー (salesforce) 内容はこれです
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 クライアントは、受け取った議事録.txtの内容をLLMに返す 107 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント LLM MCPサーバー (google-drive) MCPサーバー (salesforce) コード実行の結果は これです。
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 LLMは、受け取った結果を見て要約を作成し、結果を返却する 108 Copyright © 2026, Oracle and/or its
affiliates MCPクライアント LLM MCPサーバー (google-drive) MCPサーバー (salesforce) こんな議事録ね。 要約したらこうかな。
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 大量のツール定義 この過程において、LLMに渡されたのは • MCPサーバーが提供しているツールを呼び出すためのコードの名前とディレクトリ • LLMが、今回のタスクに関係しそうだと考えたコードの中身(ツール定義) だけなので、すべてのツール定義を渡す場合と比べて大きくトークン消費量が削減できる 109 Copyright
© 2026, Oracle and/or its affiliates MCPサーバー MCPクライアント LLM 必要そうなツール定義 だけみるよ
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 中間データ LLMは必要なデータのみを見て、処理はサーバー側で実行する 110 Copyright © 2026, Oracle and/or its
affiliates MCPサーバー MCPクライアント sales_data.csvの東京の 売り上げ合計を教えて LLM プロンプトを送信
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 中間データ LLMは必要なデータのみを見て、処理はサーバー側で実行する 111 Copyright © 2026, Oracle and/or its
affiliates MCPサーバー MCPクライアント 東京の売り上げを知るには、 sales_data.csvのカラム名を 知る必要があるな。コード を実行しよう LLM コード実行Toolを呼び出し (execute_pythonを呼び出し)
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 中間データ LLMは必要なデータのみを見て、処理はサーバー側で実行する 112 Copyright © 2026, Oracle and/or its
affiliates MCPサーバー MCPクライアント execute_pythonツールを 使ってください LLM コード実行Toolを呼び出し
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 中間データ LLMは必要なデータのみを見て、処理はサーバー側で実行する 113 Copyright © 2026, Oracle and/or its
affiliates MCPサーバー MCPクライアント 渡されたコードを実行したよ。 結果はこれね LLM 結果(カラム情報のみ)を返す
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 中間データ LLMは必要なデータのみを見て、処理はサーバー側で実行する 114 Copyright © 2026, Oracle and/or its
affiliates MCPサーバー MCPクライアント 結果が返ってきました。 カラム情報はこれです。 LLM 結果(カラム情報のみ)を プロンプトに入れて返す
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 中間データ LLMは必要なデータのみを見て、処理はサーバー側で実行する 115 Copyright © 2026, Oracle and/or its
affiliates MCPサーバー MCPクライアント カラム名はregionとsales_amountね。 Region=Tokyoのsum(sales_amount)を 計算するコードを実行してもらおう。 LLM 売り上げ合計を計算するコードを 実行してもらう (execute_pythonを呼び出し)
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 中間データ LLMは必要なデータのみを見て、処理はサーバー側で実行する 116 Copyright © 2026, Oracle and/or its
affiliates MCPサーバー MCPクライアント このコードを実行して ください LLM 売り上げ合計を計算するコードを 実行してもらう (execute_pythonを呼び出し)
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 中間データ LLMは必要なデータのみを見て、処理はサーバー側で実行する 117 Copyright © 2026, Oracle and/or its
affiliates MCPサーバー MCPクライアント 結果は100万円です LLM 実行結果を返す
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 中間データ LLMは必要なデータのみを見て、処理はサーバー側で実行する 118 Copyright © 2026, Oracle and/or its
affiliates MCPサーバー MCPクライアント 結果はこれです LLM 実行結果をプロンプト で返す
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 中間データ LLMは必要なデータのみを見て、処理はサーバー側で実行する 119 Copyright © 2026, Oracle and/or its
affiliates MCPサーバー MCPクライアント 100万円ね。結果を整形 して返そう。 LLM 結果を整形してメッセージを 返す
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 中間データ LLMは必要なデータのみを見て、処理はサーバー側で実行する 120 Copyright © 2026, Oracle and/or its
affiliates MCPサーバー MCPクライアント 東京の売り上げの合計は 100万円です。(ユーザー 向けに出力) LLM
コード実行によってなぜコンテキストウィンドウ圧迫が防げるか 中間データ この手続きにおいて、LLMに実際に渡された情報は • csvファイルのカラムの情報 • 必要なカラムを計算した結果の情報 のみ。csvファイルの中身全てを渡していないため、コンテキストウィンドウを節約できる 121 Copyright
© 2026, Oracle and/or its affiliates MCPサーバー MCPクライアント LLM 中身を全部見る必要は ないよ
注意点 LLMが生成したコードを実行することになるので、 適切なサンドボックス環境(VM、コンテナなど)が必要 • ホストOSを壊さない • リソースを制限する • しっかり監視できる また、このコンセプトは実験的なものなので今後変わることも十分あり得る
122 Copyright © 2026, Oracle and/or its affiliates
まとめ
まとめ • MCPは、クライアント・サーバー間のツール呼び出しなどを標準化したもの • MCPのおかげで、ツールを公開する人はMCPに沿った実装をするだけでどんなクライアントからでも利用できる • MCPサーバーには、外部データを提供するResources、アクションを提供するTools、よりこれらをうまく呼び出すた めのPromptsという機能がある • MCPは変化が激しいため、定期的にウォッチしていく必要がある
124 Copyright © 2026, Oracle and/or its affiliates
Next Step
MCP自体をより深く知りたい方 Zenn Book でフルスクラッチ実装の流れを無料で公開しています https://zenn.dev/sogawa_yk/books/fa26457ee975f0 126 Copyright © 2026, Oracle
and/or its affiliates
より実践的なMCPサーバー構築を行う上での知識をつけたい方 再来週(2/4)のOCHaCafeでセッションやります! • リモートMCPサーバーとローカルMCPサーバーの違い • Kubernetes上にデプロイする時の考慮点 • 認証・認可はどうする? • Observabilityはどうする?
• セッション管理は? • WebAPIと何が違う? 127 Copyright © 2026, Oracle and/or its affiliates
128 Copyright © 2026, Oracle and/or its affiliates