MCP Tutorials について
MCP Tutorialsは、Python SDKでMCPサーバーを実装する開発者向けのサンプル集です。ツール、リソース、プロンプト、画像の返却を扱い、Clineからの接続テストも記録しています。
主な機能
- 01MCP サーバーのツール例
- 02リソースの検出と読み取り例
- 03プロンプトの検出と利用例
- 04画像返却の例
活用シーン
- 01MCP Python SDKでのリソース定義の学習
- 02クライアントによるリソース検出と読み取りの理解
- 03再利用可能なプロンプトのサーバー実装の調査
MCP 対応
ツール、リソース、プロンプトのサーバーインターフェースを解説し、Clineからサンプルサーバーへ接続するテストを記録しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP チュートリアル
リファレンス
https://modelcontextprotocol.io/quickstart/server
- [v] チュートリアルで提供されている MCP サーバーを Cline 経由で使ってみる
- Cline でエラーが発生したとのことですが、Cline がデバッグレベルのログを出力する過程で、成功したエラーまで stderr に出力しているのではないかと推測しました。loglevel を error にしたところ解決しました(リンク)
- [] Tools の引数に関する説明が正しく表示されない。問題なのかどうか確認が必要
- [v] Python のリンターとフォーマッターを再インストール(→ ruff をインストール)
API リクエストを使わないわけではありません。(自分のリクエスト+MCP サーバーが提供するツール)を LLM が見て判断し、自動的に実行するため、この過程で API リクエストが 2 回発生します。$0.05、$0.03。いずれにせよ、ツールをうまく利用して情報を取得できることが分かりました。
- 例を確認する
- filesystem:ツールを使用
- drive:リソースを使用。→ リソースで可能なすべての操作はツールでも可能ですが、異なる抽象化を提供します(REST API の GET と POst 程度の違いとして理解)
例の追加
Python SDK に含まれる内容を理解する
https://github.com/modelcontextprotocol/python-sdk
- リソースの定義
https://modelcontextprotocol.io/docs/concepts/resources#resource-templates
MCP サーバーが MCP クライアントに提供する、あらゆる種類のデータです。
- リソースの検出(MCP クライアントは、MCP サーバーで利用可能なリソースをどのように把握するのか)
- 直接的なリソース:
resources/listエンドポイントを通じて、以下の形式でリソースを公開します
- 直接的なリソース:
{
uri: string; // Unique identifier of the resource
name: string; // human-readable name of resource
description?: string; // optional description
mimeType?: string; // optionam mimetype
}
- リソーステンプレート:
uritemplateを通じて提供するリソースを公開します
{
uriTemplate: string; // URI template following RFC 6570
name: string; // Human-readable name for this type
description?: string; // Optional description
mimeType?: string; // Optional MIME type for all matching resources
}
- MCP クライアントがリソースの検出を通じて、利用可能なリソースを MCP サーバーから取得した場合、どのように呼び出せるでしょうか?
- リソース読み取りハンドラーを定義する方法は 2 つあります
- @mcp.resource() を通じて
uriを受け取る関数をデコレートして定義する - または、@mcp.resource(
uri_template) を通じて定義する
- @mcp.resource() を通じて
- リソース読み取りハンドラーを定義する方法は 2 つあります
まとめると、MCP サーバーはリソースの検出を可能にするため、リソースの URI を直接、またはテンプレートを通じて公開します。mcpclients は利用可能なリソースを検出した後、URI を通じてそのリソースをリクエストできます。
- プロンプトの定義
目的に応じたプロンプトの提供:サーバーが再利用可能なプロンプトテンプレートを提供することで、LLM とのやり取りに標準化された方法を提供します(ユーザーが操作し、ユーザーが明示的にプロンプトを選択できることを意図しています)。
実装する API
-
プロンプトの検出
- 戻り値:(名前、説明、引数)
-
プロンプトの使用
- 引数:(名前、プロンプトで宣言された引数)
- 戻り値:プロンプト(動的(リソースベースのプロンプト)、複数も可能)
- 画像の返却
画像を返す機能があります
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。