Skip to content

k-negishi/kotlin-mcp-quickstart

Repository files navigation

Kotlin MCP クイックスタート: Claude Desktop と MCP サーバーの連携

このプロジェクトは、Model Context Protocol (MCP) Kotlin SDK を使用した、Claude AI モデルと外部ツール連携のクイックスタート実装例です。公式のクイックスタート modelcontextprotocol.io/quickstart/server に基づき、気象情報サービスとの連携を例に、基本的な方法で MCP サーバーを実装しています。

MCP クイックスタートについて

このプロジェクトは、Model Context Protocol の公式クイックスタートガイド modelcontextprotocol.io/quickstart/server に基づいています。公式ガイドで説明されている内容に従って、Kotlin でサーバーを実装しています。

// build.gradle.kts での依存関係
dependencies {
    implementation("io.modelcontextprotocol:kotlin-sdk:1.0.0")
}

Claude と MCP サーバーの通信の流れ

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/>ドジャー・スタジアム周辺の天気は...」
Loading

具体的な通信内容

Claude と MCP サーバーは「標準入出力(stdin/stdout)」を通じて JSON 形式のメッセージをやり取りします。これは公式クイックスタートで説明されている標準的な通信方法です。

1. Claude からのリクエスト例

{
  "type": "callTool",
  "id": "request-123",
  "tool": "get_alerts",
  "arguments": {
    "state": "CA"
  }
}

2. MCP サーバーからの応答例

{
  "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."
    }
  ]
}

参考リソース

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages