RustでMCPサーバーを構築する方法 ─ rmcp公式SDKによる実装ガイド
AI開発の現場で、LLMと外部ツール・データソースの連携が大きな課題になっています。Model Context Protocol(MCP)は、この課題に対する標準化された解決策です。Rustは速度・安全性・低リソース消費の面でMCPサーバーの実装言語として優れた選択肢であり、公式SDK「rmcp」を使えば型安全なサーバーを効率的に構築できます。 MCPとは何か ─ プロトコルの基本構造 MCPはAnthropicが提唱するオープンプロトコルで、LLMアプリケーションと外部リソースをJSON-RPC 2.0ベースで接続します。Language Server Protocol(LSP)がエディタとプログラミング言語の橋渡しをしたのと同様に、MCPはAIアプリケーションと外部ツール群の間に標準的なインターフェースを提供します。 MCPの通信は3つの役割で構成されます。 役割 説明 具体例 Host LLMアプリケーション本体。接続を開始する Claude Desktop, Cursor Client Host内の接続コネクタ MCPクライアントモジュール Server 機能やデータを提供するサービス 自作のMCPサーバー サーバーが提供する機能は3つのプリミティブに分類されます。 Tools: LLMが実行できる関数。ファイル検索、API呼び出し、計算処理など Resources: ユーザーやLLMが参照できるデータソース。ドキュメント、設定ファイルなど Prompts: 再利用可能なテンプレート。ワークフローの定型操作を定義 2025年11月に公開された最新仕様(バージョン2025-11-25)では、非同期タスク管理(Tasks)やOAuth 2.1ベースの認可フレームワークが追加されています(出典: MCP公式仕様)。 なぜRustでMCPサーバーを書くのか MCPサーバーの実装言語としてはTypeScript(公式SDK)やPythonが多く使われています。Rustを選ぶ理由は主に3つあります。 1. 起動速度とメモリ効率 MCPサーバーはstdioトランスポートの場合、ツール呼び出しのたびにプロセスが起動されることがあります。Rustのバイナリは起動が高速で、Node.jsのようなランタイム初期化のオーバーヘッドがありません。メモリ使用量も数MB程度に収まるため、複数のMCPサーバーを同時に実行する環境でもリソースを圧迫しません。 2. 型安全性とコンパイル時検証 rmcpの#[tool]マクロはJSON Schemaを自動生成します。Rustの型システムにより、引数の型不一致やnull安全性の問題がコンパイル時に検出されます。TypeScript SDKでもZodによるバリデーションは可能ですが、ランタイムエラーとしてしか検出できません。 3. シングルバイナリ配布 cargo build --releaseで生成される実行ファイルは単体で動作します。Node.jsやPythonのようにnode_modulesや仮想環境を配布先に用意する必要がなく、MCPクライアントの設定も単純になります。 TypeScript SDK との機能比較 観点 rmcp(Rust) @modelcontextprotocol/sdk(TypeScript) ランタイム 不要(ネイティブバイナリ) Node.js必須 型チェック コンパイル時に完結 tscによる静的チェック+Zodランタイム検証 起動時間 数ミリ秒 100ms〜(V8初期化含む) メモリ使用量 数MB 30MB〜 非同期ランタイム tokio Node.jsイベントループ JSON Schema生成 schemarsが自動生成 Zodスキーマから変換 プロトコルバージョン 2025-11-25対応 2025-11-25対応 配布方式 シングルバイナリ npm package + node_modules エコシステム成熟度 成長中 最も成熟 学習コスト Rust経験が必要 Web開発者に馴染みやすい TypeScript SDKはエコシステムの成熟度とWeb開発者の参入しやすさで優位です。一方、パフォーマンスとデプロイの手軽さが重視される場面ではRustが適しています。 ...