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
Kotlin で始める MCP 入門
Search
rokuosan
May 10, 2025
Technology
0
100
Kotlin で始める MCP 入門
Kyoto.kt #3
rokuosan
May 10, 2025
Tweet
Share
More Decks by rokuosan
See All by rokuosan
Workers を定期実行する方法は一つじゃない
rokuosan
0
150
OpenNext + Hono on Cloudflare でイマドキWeb開発スタックを実現する
rokuosan
0
190
【学内向け】主観でやるオレオレ RubyKaigi 2025 Recap
rokuosan
0
6
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
240
KC3 2024 Dockerで始める自宅サーバー入門
rokuosan
0
210
お手軽アウトプット環境を求めて
rokuosan
0
170
Kotlinを使ってマイクラ鯖をWebで管理するアプリケーションを作るつもりでギリギリ間に合う予定だったけど非同期処理に躓いて大失敗した話
rokuosan
0
170
Other Decks in Technology
See All in Technology
AIエージェントの活用に重要な「MCP (Model Context Protocol)」とは何か
masayamoriofficial
0
220
Lessons from CVE-2025-22869: Memory Debugging and OSS Vulnerability Reporting
vvatanabe
2
110
「AI2027」を紐解く ― AGI・ASI・シンギュラリティ
masayamoriofficial
0
140
ここ一年のCCoEとしてのAWSコスト最適化を振り返る / CCoE AWS Cost Optimization devio2025
masahirokawahara
1
340
Microsoft Fabric のネットワーク保護のアップデートについて
ryomaru0825
1
120
mruby(PicoRuby)で ファミコン音楽を奏でる
kishima
2
470
AI時代に非連続な成長を実現するエンジニアリング戦略
sansantech
PRO
2
710
そのコンポーネント、サーバー?クライアント?App Router開発のモヤモヤを可視化する補助輪
makotot
4
760
実運用で考える PGO
kworkdev
PRO
0
120
浸透しなさいRFC 5322&7208
hinono
0
130
LLMエージェント時代に適応した開発フロー
hiragram
1
470
Goでマークダウンの独自記法を実装する
lag129
0
230
Featured
See All Featured
Faster Mobile Websites
deanohume
309
31k
Balancing Empowerment & Direction
lara
3
600
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
How to Ace a Technical Interview
jacobian
279
23k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
The Art of Programming - Codeland 2020
erikaheidi
55
13k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
900
Why Our Code Smells
bkeepers
PRO
339
57k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Transcript
Kotlin で始める MCP 入門 id:rokuokun 2025/05/10 Kyoto.kt #3
About me (5.0s) • id:rokuokun / rokuosan / ろくお •
Kotlin はいいなって思ってます。 • https://x.com/rokuosan_dev • AI ツールチェーン使いこなせてない • Kyoto.kt やっていき
自然な導入 • 話題のMCPをやりたい • 実は全然触ってなくて時代遅れの人間だった • 公式 SDK に Kotlin
がある! • https://github.com/modelcontextprotocol/kotlin-sdk
自分が知っている MCP • Model Context Protocol • Anthropic が去年の11月に突然言い出した。 •
LLM がアプリケーションを操作するための プロトコル → インタフェースの置き換え
自分が知っている MCP • Model Context Protocol • Anthropic が去年の11月に突然言い出した。 •
LLM がアプリケーションを操作するための プロトコル → インタフェースの置き換えが起きる 若者としてコレはイカンでしょ
MCPのドキュメントを読む https://modelcontextprotocol.io/introduction
MCP Core Concepts (For Server) • Resources ◦ File-like data
that can be read by clients (like API responses or file contents) • Tools ◦ Functions that can be called by the LLM (with user approval) • Prompts ◦ Pre-written templates that help users accomplish specific tasks
MCP Core Concepts をゆるく読むと • Resources ◦ URI でデータを表現して提供できる(OS API
以外にも Web API とかも呼べる) • Tools ◦ LLMから呼び出しできる関数 • Prompts ◦ プロンプトのテンプレートを記述できる
感想と疑問 • これだけ読むと Resources は Tools として使えるのでは? ◦ 通常の関数呼び出しのほか API
呼び出しもできる ◦ “事実上” Tools と同じ役割を果たすことができそう ◦ Tools は実行にユーザー承認が必要だが、Resources はそうでない ◦ つまり許可なしでなんでも実行できちゃう!?!?
Resources をよく読んでみる • そもそも LLM にコンテキストとして情報を渡す目的 • Resources は application-controlled(あるいは
application-driven) ◦ ユーザーが「添付ファイル」としてLLMに投げるみたいなユースケース ◦ 例: MCP の最新の Specification をいつでもサッと取り出す ▪ https://modelcontextprotocol.io/llms-full.txt にアクセスして常に最新の spec を保った状態で質問ができる ▪ HTTP Scheme の場合、その URL にユーザーがアクセスできるべき(SHOULD) • LLM からではなく、人間からの呼び出しを想像すると良い
Resources 裏ワザ(?) • mcp 入門で UUID 作成する程度なら実は Resources でもできたりする ◦
Claude Desktop はResourceをキャッシュするわけじゃないので、 添付するごとにUUIDが更新される
Tools / JSON Schema https://modelcontextprotocol.io/docs/concepts/tools • データ構造は→ • annotation で
メタデータ付与が できる openWorldHintが 個人的にいい名前で好き
なんとなくわかってきた
Kotlin の MCP SDK で実装をやってみる https://github.com/modelcontextprotocol/kotlin-sdk
Kotlin の MCP SDK 事情 • Kotlin 向け MCP 公式
SDK があるのでそれを使う • 元々 JetBrains が作っていたものを公式側に取り入れたぽい空気を感じる • https://github.com/modelcontextprotocol/kotlin-sdk • 対応 Transport ◦ Stdio (標準入出力) ◦ Server-Sent Event (SSE)
Streamable HTTP は未対応(2025/05/10時点) • 新しい Transport として Streamable HTTP が追加されたが...
• 現在の Kotlin SDK (v0.5.0)では使えない • コントリビューションチャンスかと思ったらすでに取り組まれていた ◦ https://github.com/modelcontextprotocol/kotlin-sdk/pull/87 ◦ まだもう少しかかりそう
とりあえず書いてみる
UUID 生成 MCP サーバー • 雰囲気を知るにはちょうどいいって Twitter でみた • ちなみに
Kotlin の UUID 事情 ◦ Kotlin 2.0 から標準 API に kotlin.uuid.Uuid が追加された ◦ まだ Experimental なので @OptIn(ExperimentalUuidApi::class) アノテーションが必須 ◦ UUIDv4 のみ生成可能 • 標準入出力と SSE の両方を試してみる
Server 部分 • MCP サーバの基礎部分は共通化できる ◦ Tools ◦ Resources ◦
Prompts • 変更通知の有無なども設定する
Tools の実装 Handler のラムダ→
Resources の実装 • さっき出したコード • URI は一意であれば良い。 ◦ http:// のものはユーザーからアクセス
可能なものである必要がある(仕様)
stdio Transport • 標準入力からもらってくる • MCP Server と Transport を繋げる
• メインスレッドが落ちないようにする
Server-Sent Event Transport (1/2) • Ktor MCP Plugin を使うとこれだけで OK
• embeddedServer を CIO をエンジンとして起動する • mcp {} では MCP Server のインスタンスを返すだけ
Server-Sent Event Transport (2/2) • 手書きするならこうやる • サンプルからとってきた
Claude Desktop / VSCode から使ってみる https://modelcontextprotocol.io/quickstart/user
MCP サーバを使うには? • Claude Desktop • 自作 • VSCode ←
NEW!
Claude Desktop で使ってみる • 温かみのある JSON 手書き • Settings >
Developer をみる • 登録したら Restart • command は絶対パスにしておく • stdio しか対応していない?
Claude Desktop で使ってみる • 登録できるとこんな表示
Claude Desktop で使ってみる • 許可が求められて生成ができる
Claude ってもしかして... • アレ...? • 最初に「UUIDを作成してください」 と言ったらそれらしい値が返ってきた • 騙されるところだった
VSCode で使ってみる • .vscode/mcp.json に書く。 • SSEもできるぞ!
VSCode で使ってみる • Claude Desktop に登録したもの も空気を読んで見てくれる • 失敗例↓
VSCode で使ってみる • 追加できている
🎉
せっかくなので MCP Spec をいつでも出せるようにしてみる https://modelcontextprotocol.io/llms-full.txt
Resource から MCP Spec をとる • MCP の SDK に
Ktor Client がある • 素直に fetch して値を返す
Resource から MCP Spec をとる • Claude Desktop でやってみる •
できた • 無料枠だと長さ制限に達する
テストを書く
テスト方法 • 1. クライアントから実際に呼び出す • 2. Handler だけテスト • 3.
Handler の中のロジックだけテスト 2, 3 やっておけばまぁ安心でしょ (クラアントも SDK で作れるので1もやれる)
テスト方法 / 2. Handler だけテスト • 雰囲気はこんな感じ
まとめ
MCP with Kotlin のまとめ • サンプルコードを見つつ実装した • 苦しさはない • 今後の主流になる
Streamable HTTP は今後実装されるぽいので期待 • 割とサッとかけて嬉しい • Resources を使いこなすとインスタント NotebookLM ぽいことができる • MCP開発は思ったより快適にできる
Kotlin で始める MCP 入門 id:rokuokun 2025/05/10 Kyoto.kt #3