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
610
発見!Ruby 9
rokuosan
0
63
CloudflareのBetaサービスでローカルなLLMを安全に公開する
rokuosan
0
520
Workers を定期実行する方法は一つじゃない
rokuosan
0
630
OpenNext + Hono on Cloudflare でイマドキWeb開発スタックを実現する
rokuosan
0
740
【学内向け】主観でやるオレオレ RubyKaigi 2025 Recap
rokuosan
0
56
Kotlin で Discord の絵文字コミュニケーションを盛り上げたい!
rokuosan
0
51
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
380
KC3 2024 Dockerで始める自宅サーバー入門
rokuosan
0
910
Other Decks in Technology
See All in Technology
書き手が人でもAIでも正しくなる道、SREを埋め込んだDeveloper Platform / tech drivers day8
chmikata
4
800
「社外イベント=意識高い」の壁を壊せ!元々無関心だった僕らが部内で社外イベントを民主化して15人を連れ出すまで
say_no_w
0
160
AI時代、つくる力を自分たちの手に。 ──電通×KAG、アジャイルとAI駆動開発で挑む開発の変革
yuukiyo
3
400
クラウドエージェントの先駆け Devin。今も最先端を走る、他との違い
kinopeee
1
490
CSS2026:OWS研究会・招待講演「世界観を、実装する」
atsush1_sada
2
340
OneLakeをデータソースにした AI Search(Foundry IQ)の ライフサイクル管理
ryuseiiida
0
120
Claude Code on Bedrock で統制をかける小ネタ集/claude-code-bedrock-governance-tips
emiki
1
13k
Claude for Google Workspaces ポン出し/claude-for-google-workspace-slide-conversion
emiki
0
13k
アカウント統制の健康診断
kenichinakamura
1
210
Draft AIエージェントの トークン消費を最小化する 8つの原則
kinopeee
6
1.8k
日本AIベンチャーレポート2026
kentarofujii
0
250
Let's Change Our World—Again
snoozer05
PRO
6
710
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
30 Presentation Tips
portentint
PRO
1
440
WENDY [Excerpt]
tessaabrams
14
40k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
540
Exploring anti-patterns in Rails
aemeredith
4
540
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
580
Designing Experiences People Love
moore
143
24k
YesSQL, Process and Tooling at Scale
rocio
174
15k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Side Projects
sachag
456
43k
Darren the Foodie - Storyboard
khoart
PRO
4
4k
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