Rust Docs MCP Server について
Rust Docs MCP Server は、単一の Rust crate の最新ドキュメントに基づいて質問に答える MCP サーバーです。ドキュメントを取得して埋め込みを生成し、検索された文脈のみを基に OpenAI のモデルで回答します。古い Rust API を提案するコーディングアシスタントを避けたい開発者に向けたツールです。
主な機能
- 01crate ごとに一つのドキュメントサーバーを提供
- 02ドキュメント生成時の crate feature 指定に対応
- 03text-embedding-3-small によるセマンティック検索
- 04gpt-4o-mini による文脈ベースの回答生成
- 05crate バージョンと feature 構成ごとのキャッシュ
活用シーン
- 01serde や tokio などの現行 API 情報をコーディングアシスタントに提供
- 02インスタンスを crate ごとに起動し、一つのセッションで複数 crate を照会
MCP 対応
stdio 上で動作し、query_rust_docs ツールと crate:// リソースを公開します。リソースには crate 名が含まれます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Rust Docs MCP Server
⭐ このプロジェクトを気に入っていただけましたか? GitHubで リポジトリにスターを付けて応援し、最新情報をチェックしてください! ⭐
動機
最新のAI搭載コーディングアシスタント(Cursor、Cline、Roo Codeなど)は、コードの構造や構文の理解には優れていますが、急速に進化するライブラリやフレームワークの詳細、特にクレートが頻繁に更新されるRustのようなエコシステムでは、苦手とすることがよくあります。学習データのカットオフにより、最新のAPIに関する知識が不足し、誤った、あるいは古いコードを提案する可能性があります。
このMCPサーバーは、特定のRustクレートに特化した最新のナレッジソースを提供することで、この課題に対処します。クレート(例:serde、tokio、reqwest)ごとにこのサーバーのインスタンスを実行すると、LLMコーディングアシスタントに、そのクレートに関連するコードを書く_前に_利用できるツール(query_rust_docs)を提供できます。
このツールを使うよう指示されたLLMは、クレートのAPIや使用方法について具体的な質問をし、_現在の_ドキュメントから直接導き出された回答を得られます。これにより、生成されるコードの正確性と関連性が大幅に向上し、手動で修正する必要性が減り、開発を加速できます。
このサーバーの複数のインスタンスを同時に実行できるため、コーディングセッション中にLLMアシスタントが複数の異なるクレートのドキュメントにアクセスできます。
このサーバーは、指定されたRustクレートのドキュメントを取得し、その内容の埋め込みを生成して、ドキュメントのコンテキストに基づいてクレートに関する質問に答えるMCPツールを提供します。
機能
- 対象を絞ったドキュメント: サーバーインスタンスごとに、単一のRustクレートに特化します。
- 機能のサポート: ドキュメント生成に必要なクレートの機能を指定できます。
- セマンティック検索: OpenAIの
text-embedding-3-smallモデルを使用して、質問に最も関連性の高いドキュメントのセクションを見つけます。 - LLMによる要約: OpenAIの
gpt-4o-mini-2024-07-18モデルを利用して、取得したドキュメントのコンテキスト_のみ_に基づく簡潔な回答を生成します。 - キャッシュ: 生成したドキュメントの内容と埋め込みを、クレート、バージョン、_および_要求された機能に基づいて、ユーザーのXDGデータディレクトリ(
~/.local/share/rustdocs-mcp-server/など)にキャッシュし、次回以降の起動を高速化します。 - MCP統合: 標準的なMCPサーバーとしてstdio経由で動作し、ツールとリソースを公開します。
前提条件
- OpenAI APIキー: 埋め込みの生成と回答の要約に必要です。サーバーは、このキーが
OPENAI_API_KEY環境変数に設定されていることを前提とします。(サーバーは、クレートの依存関係のダウンロードとOpenAI APIへのアクセスにネットワーク接続も必要とします)。
インストール
推奨されるインストール方法は、お使いのオペレーティングシステム用のコンパイル済みバイナリを GitHub Releasesページからダウンロードすることです。
- Releasesページにアクセスします。
- お使いのシステムに適したアーカイブ(Windowsの場合は
.zip、Linux/macOSの場合は.tar.gz)をダウンロードします。 rustdocs_mcp_server(またはrustdocs_mcp_server.exe)バイナリを展開します。- バイナリを、システムの
PATH環境変数に含まれるディレクトリ(例:/usr/local/bin、~/bin)に配置します。
ソースからのビルド(代替方法)
ソースからビルドする場合は、Rust Toolchainをインストールする必要があります。
- リポジトリをクローンします:
git clone https://github.com/Govcraft/rust-docs-mcp-server.git cd rust-docs-mcp-server - サーバーをビルドします:
cargo build --release
使用方法
新しいクレートに関する重要な注意事項:
サーバーを初めてクレートで使用する場合(または新しいバージョン/機能セットで使用する場合)、ドキュメントをダウンロードして埋め込みを生成する必要があります。この処理には、特にドキュメントが大量にあるクレートでは時間がかかることがあり、インターネットへの接続と OpenAI API キーが必要です。
新しいクレート構成を AI コーディングアシスタント(Roo Code、Cursor など)に追加する前に、コマンドラインからサーバーを一度直接実行することをおすすめします。これにより、最初の埋め込み生成とキャッシュが完了します。サーバーの起動メッセージ(例:「MCP Server listening on stdio」)が表示され、準備が整ったことを確認したら、サーバーを終了できます(Ctrl+C)。その後の起動では、コーディングアシスタントから起動する場合も含め、キャッシュされたデータが使用されるため、起動が大幅に速くなります。
サーバーの実行
サーバーはコマンドラインから起動し、対象のクレートの Package ID
Specification が必要です。この仕様は Cargo で使用される形式(例:crate_name、crate_name@version_req)に従います。仕様の詳細については、man cargo-pkgid または
Cargo のドキュメントを参照してください。
オプションとして、-F または
--features フラグの後に、カンマ区切りの機能一覧を指定できます。これは、cargo doc を正常に実行するために特定の機能を有効にする必要があるクレート(async-stripe など、ランタイム機能が必要なクレート)で必要です。
# Set the API key (replace with your actual key)
export OPENAI_API_KEY="sk-..."
# Example: Run server for the latest 1.x version of serde
rustdocs_mcp_server "serde@^1.0"
# Example: Run server for a specific version of reqwest
rustdocs_mcp_server "[email protected]"
# Example: Run server for the latest version of tokio
rustdocs_mcp_server tokio
# Example: Run server for async-stripe, enabling a required runtime feature
rustdocs_mcp_server "[email protected]" -F runtime-tokio-hyper-rustls
# Example: Run server for another crate with multiple features
rustdocs_mcp_server "[email protected]" --features feat1,feat2
特定のクレートのバージョン および機能セット での初回実行時、サーバーは次の処理を行います。
cargo docを使用して、指定された機能を有効にした状態でクレートのドキュメントをダウンロードします。- HTML ドキュメントを解析します。
- OpenAI API を使用して、ドキュメントの内容の埋め込みを生成します(時間がかかり、費用が発生する場合があります。ただし、ほとんどのクレートでは通常、米国ペニーの何分の一か程度です。テストでは、ドキュメントページが 5000 を超える大規模なクレート
async-stripeでも、埋め込み生成の費用はわずか 0.18 米ドルでした)。 - ドキュメントの内容と埋め込みをキャッシュし、再度費用が発生しないようにします。
- MCP サーバーを起動します。
同じクレートのバージョン および機能セット で次回以降に実行すると、キャッシュからデータが読み込まれるため、起動が大幅に速くなります。
MCP とのやり取り
サーバーは標準入出力(stdio)を介して、Model Context Protocol を使用して通信します。次のものを公開します。
-
ツール:
query_rust_docs- 説明: セマンティック検索と LLM による要約を使用して、サーバーの起動時に指定された Rust クレートのドキュメントを検索します。
- 入力スキーマ:
{ "type": "object", "properties": { "question": { "type": "string", "description": "The specific question about the crate's API or usage." } }, "required": ["question"] } - 出力: 関連するドキュメントのコンテキストに基づいて LLM が生成した回答を含むテキスト応答です。先頭には
From <crate_name> docs:が付きます。 - MCP 呼び出しの例:
{ "jsonrpc": "2.0", "method": "callTool", "params": { "tool_name": "query_rust_docs", "arguments": { "question": "How do I make a simple GET request with reqwest?" } }, "id": 1 }
-
リソース:
crate://<crate_name>- 説明: このサーバーインスタンスが設定されている Rust クレートの名前を提供します。
- URI:
crate://<crate_name>(例:crate://serde、crate://reqwest) - 内容: クレート名を含むプレーンテキストです。
-
ログ: サーバーは、情報ログ(起動メッセージ、クエリ処理の手順)を
logging/message通知を介して MCP クライアントに送信します。
クライアント設定例(Roo Code)
Roo Code などの MCP クライアントを設定して、このサーバーの複数のインスタンスを実行し、それぞれ異なるクレートを対象にできます。以下は、reqwest と async-stripe 用のサーバーを設定する、Roo Code の mcp_settings.json ファイルの例です(async-stripe には features 引数が追加されている点に注意してください)。
{
"mcpServers": {
"rust-docs-reqwest": {
"command": "/path/to/your/rustdocs_mcp_server",
"args": [
"[email protected]"
],
"env": {
"OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE"
},
"disabled": false,
"alwaysAllow": []
},
"rust-docs-async-stripe": {
"command": "rustdocs_mcp_server",
"args": [
"[email protected]",
"-F",
" runtime-tokio-hyper-rustls"
],
"env": {
"OPENAI_API_KEY": "YOUR_OPENAI_API_KEY_HERE"
},
"disabled": false,
"alwaysAllow": []
}
}
}
注:
YOUR_OPENAI_API_KEY_HEREを実際の OpenAI API キーに置き換えてください。/path/to/your/rustdocs_mcp_serverが PATH に含まれていない場合は、システム上のコンパイル済みバイナリの実際のパスに置き換えてください。- キー(
rust-docs-reqwest、rust-docs-async-stripe)は、Roo Code 内でサーバーインスタンスを識別するために任意に指定する名前です。
クライアント設定例(Claude Desktop)
Claude Desktop のユーザーは、MCP 設定でサーバーを設定できます。以下は、serde と async-stripe 用のサーバーを設定する例です。
{
"mcpServers": {
"rust-docs-serde": {
"command": "/path/to/your/rustdocs_mcp_server",
"args": [
"serde@^1.0"
]
},
"rust-docs-async-stripe-rt": {
"command": "rustdocs_mcp_server",
"args": [
"[email protected]",
"-F",
"runtime-tokio-hyper-rustls"
]
}
}
}
注:
rustdocs_mcp_serverがシステムの PATH に含まれていることを確認するか、フルパス(例:/path/to/your/rustdocs_mcp_server)を指定してください。- キー(
rust-docs-serde、rust-docs-async-stripe-rt)は、サーバーインスタンスを識別するために任意に指定する名前です。 - Claude Desktop がアクセスできる場所で
OPENAI_API_KEY環境変数を設定してください(システム全体に設定するか、Claude Desktop の起動方法を通じて設定します)。Claude Desktop の MCP 設定では、Roo Code のようにサーバーごとの環境変数を直接設定できない場合があります。 - この例では、
async-stripeのように特定の機能を必要とするクレートに-F引数を追加する方法を示しています。
キャッシュ
- 保存場所: キャッシュされたドキュメントと埋め込みデータは XDG データディレクトリに保存されます。通常は
~/.local/share/rustdocs-mcp-server/<crate_name>/<sanitized_version_req>/<features_hash>/embeddings.bin以下です。sanitized_version_reqはバージョン要件から生成され、features_hashは起動時に要求された機能の組み合わせを表すハッシュです。これにより、異なる機能セットが個別にキャッシュされます。 - 形式: データは
bincodeシリアライゼーションを使用してキャッシュされます。 - 再生成: キャッシュファイルが見つからない場合、破損している場合、またはデコードできない場合、サーバーはドキュメントと埋め込みデータを自動的に再生成します。
仕組み
- 初期化:
clapを使用して、コマンドラインからクレートの仕様とオプション機能を解析します。 - キャッシュの確認: 対象のクレート、バージョン要件、機能セットに対応する既存のキャッシュファイルを検索します。
- ドキュメントの生成(キャッシュがない場合):
- 対象のクレートのみに依存し、指定された機能を
Cargo.tomlで有効にする一時的な Rust プロジェクトを作成します。 cargoライブラリ API を使用してcargo docを実行し、一時ディレクトリに HTML ドキュメントを生成します。index.htmlを含むサブディレクトリを検索して、target/doc内の正しい出力ディレクトリを動的に特定します。
- 対象のクレートのみに依存し、指定された機能を
- コンテンツの抽出(キャッシュがない場合):
- 特定したドキュメントディレクトリ内の生成済み HTML ファイルを走査します。
scraperクレートを使用して各 HTML ファイルを解析し、メインコンテンツ領域(<section id="main-content">)からテキストコンテンツを抽出します。
- 埋め込みの生成(キャッシュがない場合):
async-openaiクレートとtiktoken-rsを使用して、抽出した各ドキュメントチャンクの埋め込みをtext-embedding-3-smallモデルで生成します。- 処理したトークン数に基づいて推定コストを計算します。
- キャッシュ(キャッシュがない場合):
bincodeを使用して、抽出したドキュメントコンテンツと対応する埋め込みをキャッシュファイル(パスに機能ハッシュを含む)に保存します。 - サーバーの起動: 読み込んだ、または生成したドキュメントと埋め込みを使用して
RustDocsServerを初期化します。 - MCP サービスの提供: stdio 経由で
rmcpを使用して MCP サーバーを起動します。 - クエリ処理(
query_rust_docsツール):- ユーザーの質問の埋め込みを生成します。
- 質問の埋め込みと、キャッシュされたすべてのドキュメント埋め込みとのコサイン類似度を計算します。
- 類似度が最も高いドキュメントチャンクを特定します。
- OpenAI API 経由で、ユーザーの質問と最も一致するドキュメントチャンクの内容を
gpt-4o-mini-2024-07-18モデルに送信します。 - LLM には、提供されたコンテキストのみに基づいて質問に回答するよう指示します。
- LLM の応答を MCP クライアントに返します。
ライセンス
このプロジェクトは MIT ライセンスの下でライセンスされています。
Copyright (c) 2025 Govcraft
スポンサー
Govcraft は個人で運営しており、企業からの支援も投資家もありません。私が便利なツールを作っています。このプロジェクトが役に立った場合は、スポンサーになっていただくと、開発を続ける支えになります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。