Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Kotlin で始める MCP 入門
Search
rokuosan
May 10, 2025
Technology
360
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kotlin で始める MCP 入門
Kyoto.kt #3
rokuosan
May 10, 2025
More Decks by rokuosan
See All by rokuosan
internal/testlog で遊ぼう
rokuosan
0
600
発見!Ruby 9
rokuosan
0
61
CloudflareのBetaサービスでローカルなLLMを安全に公開する
rokuosan
0
480
Workers を定期実行する方法は一つじゃない
rokuosan
0
590
OpenNext + Hono on Cloudflare でイマドキWeb開発スタックを実現する
rokuosan
0
730
【学内向け】主観でやるオレオレ RubyKaigi 2025 Recap
rokuosan
0
56
Kotlin で Discord の絵文字コミュニケーションを盛り上げたい!
rokuosan
0
49
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
380
KC3 2024 Dockerで始める自宅サーバー入門
rokuosan
0
910
Other Decks in Technology
See All in Technology
"優秀な誰か"の下位互換にならないために
yut0naga1_fa
1
1.7k
メルペイ 会計システム概要と歴史
mewuto
0
210
Loop Engineering これくらいでいい
mikanichinose
0
220
Deep Data Security 機能解説
oracle4engineer
PRO
2
790
自分で立ててみるLLMサービス
y_sera15
0
160
USB PDを使ってスマホを労わりたい
raspython3
0
160
Getting Started with Google Antigravity
glaforge
0
200
転んだ話が背中を預ける理由になる / A_story_about_falling_down_gives_you_a_reason_to_watch_each_other_s_backs.pdf
pauli
3
360
AIに攻撃される前に、AIに攻撃させる
tsuchikazu
0
170
LocalStack を使ったサーバーレスアプリケーション開発 / Serverless Development with LocalStack
kakakakakku
1
400
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
690
OpenSharing について熱く語る〜AI アセットの共有について〜
kameitomohiro
0
260
Featured
See All Featured
Marketing to machines
jonoalderson
1
5.9k
The SEO Collaboration Effect
kristinabergwall1
1
590
Embracing the Ebb and Flow
colly
88
5.2k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
400
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
Building Flexible Design Systems
yeseniaperezcruz
330
41k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
Code Review Best Practice
trishagee
74
20k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
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