MCPサーバー開発で迷わないMCP Resourcesの扱い方 — ClineやClaudeでResourcesは実装で使って良いか?
MCP Resourcesの理解も兼ねて画像も表示できるビジュアルノベルゲームのMCPサーバーを作成していたとき、「Cline ではResourcesが動くけど、Claude Desktop ではResourcesが読み込まれないぞ...」という状態に遭遇。
特にMCP Resourcesはアプリケーション側で制御されるが「Resourcesがいつ、どのように読み込まれるのか?」がわからず、思いの他アプリケーション制御が各AIアプリで違うぞということが分かってきたので、記事書きました。
はじめに(背景)
Cline, Cursor, Windsurf のようなIDEやClaude Desktop が Model Context Protocol (MCP) を採用し、LLMと外部サービスの連携が一気に進みつつあります。その一方で、MCP Resourcesはアプリケーション制御のため、実装依存のバリエーションが多く、公式仕様を読んだだけでは「どう扱えば良いのか」腑に落ちないことも多いです。
そこで今回の記事では、ClineのResourcesの実装を読み解きながら、「Cline, Claude Desktop, (or その他IDE)でMCPサーバー作成時にResourcesを使うべきかToolsで実装すべきか」が分かることを目指します。
MCPの概要は分かりやすい記事いっぱいあるので、そちらを読んでください〜!
まずは結論
- Cline ではMCP Resourcesは使ってOK -> Resources実装OK
- Claude Desktop では、Resourcesは基本的に使わないほうが良い -> Tools実装
- その他IDE (Cursor) はそもそもMCP Resourcesに対応していない -> Tools実装
Tools と Resources
MCP 仕様で定義される違い
最も大きい違いは、呼び出し主体の違いです。Resourcesがある大きなメリットは下記のとおりです:
- ResourcesがLLMのコンテキストに収まらない大規模ファイルやログを扱う際に非常に重宝する
- LLMで呼び出しする必要がないため、コンテキストを節約する&LLMアプリケーションのレスポンス速度向上に寄与する
観点 | Tools | Resources |
---|---|---|
目的 | LLM が呼び出す "アクション API" | アプリが提供する "静的/準静的データ" |
呼び出し主体 | LLM (tools/execute ) |
原則 アプリ (resources/read 呼び出し) |
副作用 | あり (書き込み・外部 API など) | なし (読み取り専用) |
権限モデル |
auto-approve など UI 承認を推奨 |
基本不要 (読み取りのみ) |
ストリーミング | 可能 | 仕様では非推奨 |
※2025/4/29時点
Cline 実装での扱い
Clineでの実装は実はResourcesをアプリケーションが実行するだけでなく、LLMとしてツールのように呼び出すこともできる実装となっています。若干仕様とは違いますが、これはこれで便利です!
観点 | Tools (Cline) | Resources (Cline) |
---|---|---|
検出タイミング | 起動直後に tools/list
|
起動直後に resources/list
|
LLM からのタグ | <use_mcp_tool> |
<access_mcp_resource> |
承認フロー | ユーザー設定 autoApprove / ダイアログ |
なし (即時実行) |
UI 表示 | Tools タブ & 検索 | Resources タブ & 検索 |
既定の自動添付 | なし | なし (ドラッグ&ドロップまたは LLM 指定のみ) |
※2025/4/29時点
Cline での Resources 実行ステップ
軽く Cline でMCP Resourcesがどのように実行されているかを見てみましょう。
-
設定ファイル読込 & 接続確立
~/.vscode/cline/mcpSettings.json
をパース → それぞれの MCP サーバーへ Stdio または SSE トランスポートで接続。 -
リソース一覧取得 (
resources/list
)
接続後に 1 回実行しserver.resources[]
にキャッシュ。 -
LLM システムプロンプト生成
Cline が<access_mcp_resource>
タグ仕様を埋め込んだ system prompt を作成(デフォルト設定)。 -
リソースアクセス要求
- LLM がタグを出力した場合のみ実行
- ユーザーが UI (ドラッグ&ドロップ / 検索) で指定することも可能
※現行バージョンに 自動添付ロジックは存在しない
-
resources/read
呼び出し → 再プロンプト
取得したcontents[]
をシステムテキストに追加し、会話を継続。
Resource の MCP 仕様と Cline 実装の対応表
MCP Resourcesの仕様(2025‑03‑26)の中で、Clineが何に対応しているかを見てみましょう。
気をつけておきたいのが、paginationです。resources/list
にはページサイズが存在します。例えばページサイズが10に設定されているサーバーの場合、ファイルの数やデータ数が多いときに、resources/list
一回では呼び出せていない別のファイルが存在することがあります。Cline はこれが未実装のため、大量のファイルを扱う際はMCP Serverのpage sizeに注意する必要があります。
仕様 | 必須/任意 | Cline 実装 | ギャップ/注意点 |
---|---|---|---|
resources/list |
必須 | ✅ 実装 |
pagination 未対応 (cursor ) |
resources/read |
必須 | ✅ 実装 | エラー -32002 個別処理なし |
resources/templates/list |
任意 | ✅ 実装 | テンプレート補完 UI 無し |
resources/subscribe |
任意 | ❌ 未実装 | Hot‑reload 非対応 |
notifications/resources/list_changed |
任意 | ❌ 未実装 | 再接続が必要 |
notifications/resources/updated |
任意 | ❌ 未実装 | Hot‑reload 非対応 |
※2025/4/29時点
Resourcesは便利な反面、まだまだ実装されていない仕様が多いです。MCP自体がまだ歴史が浅いため、仕方がない部分がありますが、せっかくある機能をフルで使えないのは悲しいです...(泣)
とはいえResourcesは使いたいので、まずは実際に、Cline や Claude Desktop でResourcesを使っても良いかどうかを見ていきましょう。
Claude Desktop vs Cline — Resourcesの扱いとサーバー実装可否
結論: Claude Desktop に対しては MCP Resourcesを実装しても現在はメリットがほぼ無い。Cline は問題なくMCP Resourcesを利用可能!
観点 | Claude Desktop | Cline |
---|---|---|
Resources 一覧 (resources/list ) |
呼び出さない (現状サポート外) | 起動時に必ず呼び出す |
LLMからの呼び出し | 無効 | 有効 (system prompt 定義あり) |
listChanged/subscribe | デスクトップ側独自実装で更新 UI はあるが MCP 標準ではない | listChanged・subscribe 未実装 |
ユースケース | "チャット + 手動ファイル添付" が中心 | "IDE コード参照" を想定 (タブ & 検索) |
Resources を提供する MCP サーバー | 効果薄 (読まれない) | 推奨 (即利用可能) |
※2025/4/29時点
代表的なClient別の対応表
Cline と Roo Code 以外はMCP Resourcesを使ったMCPサーバー開発は現時点ではおすすめできません。
そもそも未対応のClientも多いです。
Client | Resources | Tools |
---|---|---|
Claude Desktop App | ✅⚠️ | ✅ |
Cline | ✅ | ✅ |
Roo Code | ✅ | ✅ |
Cursor | ❌ | ✅ |
Windsurf | ❌ | ✅ |
VS Code Github Copilot | ❌ | ✅ |
※2025/4/29時点
詳細は公式ページ見てください!
結論
- MCP Resources はアプリケーション主導: コンテキストを扱う上でメリットも多い!
- Cline: MCP Resourcesを活用したMCPサーバーを十分運用可能!大規模プロジェクトでは pagination の追加実装は必要。
- Claude Desktop: MCP Toolsで実装すべき
まとめ
今回はMCP Resourcesのアプリケーション制御がどうなっているかをClineを中心にまとめてみました!
MCPのこのあたりの仕様さらに良くなってほしいなと思う方は「いいね」してくれると嬉しいです!
画像も表示できるビジュアルノベルゲームのMCPサーバー気になる方はこちらに記事やコード置いてますので良かったら見てください!
- 作り方はここに書いてます: ビジュアルノベルゲームのMCPサーバーの作り方
- コードはGithub: mcp-novel-game-server
- server.py: Resourcesで実装したもの
- server_tool.py: Toolsで実装したもの
Discussion