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
340
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
220
発見!Ruby 9
rokuosan
0
47
CloudflareのBetaサービスでローカルなLLMを安全に公開する
rokuosan
0
270
Workers を定期実行する方法は一つじゃない
rokuosan
0
540
OpenNext + Hono on Cloudflare でイマドキWeb開発スタックを実現する
rokuosan
0
640
【学内向け】主観でやるオレオレ RubyKaigi 2025 Recap
rokuosan
0
45
Kotlin で Discord の絵文字コミュニケーションを盛り上げたい!
rokuosan
0
22
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
370
KC3 2024 Dockerで始める自宅サーバー入門
rokuosan
0
740
Other Decks in Technology
See All in Technology
:syncing_time:
sksat
2
750
みてねにおけるAI-DLC導入活動とAIドリブン開発の現在地/JAWS-UG AI-DLC #2
isaoshimizu
2
120
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.3k
形式手法特論:Hyperproperty とモデル検査 #kernelvm / Kernel VM Study Tokyo 19th
ytaka23
0
810
dbt と Snowflake と tag
kevinrobot34
1
250
あなたの知らないバージョン命名規則
sat
PRO
2
740
コミュニティから始まった農業IoTとの7年間 ——人との関わりが教えてくれたこと
peacemaker07
0
110
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3.2k
[ホンマでっか SRE] あなたはなぜ SRE に?
_awache
0
150
パスキーでドライブする アカウント統合(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
270
AIで変わるエンジニアの働き方(仮)
naoinaoi
0
540
型落ちシンクライアント端末のPoEモジュールを自作したかった話
logica0419
0
440
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
4
490
Designing Experiences People Love
moore
143
24k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
220
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
How to make the Groovebox
asonas
2
2.3k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
210
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
We Are The Robots
honzajavorek
0
310
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
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