このプロジェクトは、Model Context Protocol (MCP) Kotlin SDK を使用した、Claude AI モデルと外部ツール連携のクイックスタート実装例です。公式のクイックスタート modelcontextprotocol.io/quickstart/server に基づき、気象情報サービスとの連携を例に、基本的な方法で MCP サーバーを実装しています。
このプロジェクトは、Model Context Protocol の公式クイックスタートガイド modelcontextprotocol.io/quickstart/server に基づいています。公式ガイドで説明されている内容に従って、Kotlin でサーバーを実装しています。
// build.gradle.kts での依存関係
dependencies {
implementation("io.modelcontextprotocol:kotlin-sdk:1.0.0")
}sequenceDiagram
participant User as ユーザー
participant CD as Claude Desktop
participant Claude as Claude AI モデル
participant MCP as MCP サーバー (Kotlin)
participant API as 外部 API (米国気象庁)
User->>CD: 「大谷翔平の所属チームの<br/>本拠地の天気は?」
CD->>Claude: ユーザーの質問を転送
Note over Claude: 質問を分析し、<br/>気象情報ツールの使用を決定
Claude->>MCP: ツール呼び出しリクエスト
Note over Claude,MCP: 標準入出力経由で通信<br/>(JSON形式のメッセージ)
MCP->>API: HTTP リクエスト
API->>MCP: 気象データ (JSON)
MCP->>Claude: 整形されたツール実行結果
Claude->>CD: 最終的な回答
CD->>User: 「大谷翔平選手は現在<br/>ロサンゼルス・ドジャースに所属しており、<br/>その本拠地はドジャー・スタジアム<br/>(ロサンゼルス)です。<br/>ドジャー・スタジアム周辺の天気は...」
Claude と MCP サーバーは「標準入出力(stdin/stdout)」を通じて JSON 形式のメッセージをやり取りします。これは公式クイックスタートで説明されている標準的な通信方法です。
{
"type": "callTool",
"id": "request-123",
"tool": "get_alerts",
"arguments": {
"state": "CA"
}
}{
"type": "callToolResult",
"id": "response-123",
"requestId": "request-123",
"content": [
{
"type": "text",
"text": "Event: Flood Warning\nArea: San Francisco Bay Area\nSeverity: Moderate\nDescription: Heavy rainfall causing flooding in low-lying areas.\nInstruction: Move to higher ground if in affected areas."
}
]
}