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
30
Kotlin で始める MCP 入門
Kyoto.kt #3
rokuosan
May 10, 2025
Tweet
Share
More Decks by rokuosan
See All by rokuosan
OpenNext + Hono on Cloudflare でイマドキWeb開発スタックを実現する
rokuosan
0
100
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
210
KC3 2024 Dockerで始める自宅サーバー入門
rokuosan
0
130
お手軽アウトプット環境を求めて
rokuosan
0
140
Kotlinを使ってマイクラ鯖をWebで管理するアプリケーションを作るつもりでギリギリ間に合う予定だったけど非同期処理に躓いて大失敗した話
rokuosan
0
160
Other Decks in Technology
See All in Technology
OTel meets Wasm: プラグイン機構としてのWebAssemblyから見る次世代のObservability
lycorptech_jp
PRO
1
280
技術書典18結果報告
mutsumix
2
170
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
740
GigaViewerにおけるMackerel APM導入の裏側
7474
0
420
ローカル環境でAIを動かそう!
falken
PRO
1
150
KMP導⼊において、マネジャーとして考えた事
sansantech
PRO
1
200
JNation 2025 - Quarkus for Spring Developers
edeandrea
PRO
0
100
Redmineの意外と知らない便利機能 (Redmine 6.0対応版)
vividtone
0
1.1k
Oracle Cloud Infrastructure:2025年5月度サービス・アップデート
oracle4engineer
PRO
0
330
アプリケーションの中身が見える!Mackerel APMの全貌と展望 / Mackerel APMリリースパーティ
mackerelio
0
400
Roo Codeにすべてを委ねるためのルール運用
pharma_x_tech
1
190
人とAIとの共創を夢見た2か月 #共創AIミートアップ / Co-Creation with Keito-chan
kondoyuko
1
650
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
How to Think Like a Performance Engineer
csswizardry
23
1.6k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
A better future with KSS
kneath
239
17k
How to train your dragon (web standard)
notwaldorf
92
6k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Scaling GitHub
holman
459
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
228
22k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
GraphQLとの向き合い方2022年版
quramy
46
14k
Documentation Writing (for coders)
carmenintech
71
4.8k
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