MCPを初めて知る
MCP(モデルコンテキストプロトコル)は、アプリケーションが大規模なモデルのコンテキストを提供する方法を標準化するために開発されたプロトコルです。MCPは、LLMのためのデータやツールを提供する標準的な方法を提供し、MCPを使用することで、LLMに基づくエージェントや複雑なワークフローの構築が容易になります。
ビルド
MCPは、MCPホストアプリケーションが複数のMCPサーバをリンクできるCS構造である。
- エムシーピー ホスト:クロードデスクトップ、IDE、一部のAIツールなど、MCPを通じてデータを取得する必要があるプログラム。
- MCPクライアント:MCPプロトコルクライアント。
- MCPサーバ:MCPを通じて特別な機能を公開する必要のあるライトアプリケーション。MCPプロトコルの定義によると、サーバーは3種類の標準機能(リソース、ツール、プロンプト)を提供することができ、各サーバーは3種類の機能を同時に提供することも、1種類の機能を提供することもできます。
- リソース:リソースは、ファイルデータの読み取りと同様に、ファイルリソースまたはAPIレスポンスによって返されるコンテンツであることができます。
- ツール:ツール、サードパーティ・サービス、ファンクション・ファンクション。
- プロンプト:プロンプトは、ユーザーが特定のタスクを完了するための事前定義されたテンプレートです。
- ローカルデータリソース:MCPサーバーが安全にアクセスできるローカルファイル、 データベース、サービスなど。
- リモート・サービス:MCPサーバーがネットワーク経由で接続できる外部システム(APIなど)。
MCPのサービス概略図:
MCPサーバーは、MCPプロトコルを介してホスト・アプリケーションに機能のリ ストを提供し(例えば、ツールのリストを提供する)、ホスト・アプリケーション はこのリストをLLMが読み込んで理解できる形式にフォーマットします。 ホストアプリケーションは、この機能リストを使用して、ビッグモデルで処理する必要があるいくつかのリクエストをLLMに送信することができます(これがプロンプトです)。LLM はこのプロンプトに基づいて、ツール・コールの json 文字列を返します。Host Applicaiton がこのツール・コールを受信すると、対応する MCP サーバー・ツールを呼び出して、対応する結果を返します。
クロードデスクトップでMCPを使う
クロード・デスクトップ・クライアントの助けを借りて、まず間違いなくインストールする必要があり、このインストールは省略されます。ファイルシステムMCPサーバーを設定します。
次に「Developer」の下にある「Edit Config」を選択する、
見せるclaude_desktop_config.json
ファイル・システム用のMCPサーバーの設定を完了するには、ユーザー名を自分のコンピュータのユーザー名に置き換える必要があります。(コンフィギュレーション・ユーザー名を自分のコンピュータのユーザー名に置き換えるだけでなく、node.js環境をローカルにインストールする必要がある)
{
"mcpServers":{。
「ファイルシステム": {
"命令": "npx
"args": [
"-y".
"@modelcontextprotocol/server-filesystem"、
"/Users/username/Desktop"、
"/Users/username/Downloads"
]
}
}
設定が完了したら、Cluadeクライアントを再起動します。これで試す準備が整います。
ハンマーアイコンをクリックすると、MCPサーバーが提供するツールが表示されます。
以下のプロンプトを入力して試してみてください。
デスクトップ上の画像をすべて取り出して、"Images "という新しいフォルダに移動してもらえますか?
LLMのフィードバックとファイルシステムMCPサーバーは、パーミッションについてもう少し注意を喚起しながら実行するので、許可することを忘れないでほしい。
すると、LLMとMCPServerが動き出すのがわかる。
MCPサーバー開発入門チュートリアル(pythonとpip)
pythonテクノロジースタックを使ったシンプルなmcpサーバー
インストールが必要
MCPサーバーにはpython-sdk、pythonには3.10が必要です。
pip install mcp
追記:MCPは公式にはuvパッケージ管理ツールを使用していますが、私は普段pipの方を使用しているので、本文は主にpipです。mcpの依存パッケージのバージョンが最新でないものもあるので、クリーンな環境を取得するのが一番です。 MCPサーバーの開発にはデバッグクライアントが必要ですが、MCP inspectorには以下のような機能があります。
npx @modelcontextprotocol/inspector <引数2
pythonで書かれたサーバーを使用する場合は、pythonを使用します。<引数2
はオプションのパラメータである。 起動後
デモMCPサーバーの開発
MCPサーバ:MCPを通じて特別な機能を公開する必要のあるライトアプリケーション。MCPプロトコルの定義によると、サーバーは3種類の標準機能(リソース、ツール、プロンプト)を提供することができ、各サーバーは3種類の機能を同時に提供することも、1種類の機能を提供することもできます。
- リソース:リソースは、ファイルデータの読み取りと同様に、ファイルリソースまたはAPIレスポンスによって返されるコンテンツであることができます。
- ツール:ツール、サードパーティ・サービス、ファンクション・ファンクション。
- プロンプト:プロンプトは、ユーザーが特定のタスクを完了するための事前定義されたテンプレートです。
以下は、python-sdkを使った3種類の機能のデモです。
プロンプト
まずはプロンプトから。ハンドル・リスト・プロモプト
利用可能なキューワードのテンプレート一覧。ハンドルゲットプロンプト
は、名前に基づいて特定のプロンプト・テンプレートを取得する。
サーバ.list_prompts() 非同期 def handle_list_prompts() -> list[types.] """ プロンプトテンプレートの定義 """ 戻り値 [ types.Prompt( name="example-prompt"、 description="プロンプトテンプレートの例"、 引数=[ types.PromptArgument( name="arg1"、 description="引数の例"、 必須 ) ] ) ] サーバー.get_prompt() 非同期 def handle_get_prompt( name: str, arguments: dict[str, str] | None 引数: dict[str, str] | なし ) -> types.GetPromptResult. """ プロンプトテンプレートの処理 """ if name != "example-prompt": raise ValueError(f "不明なプロンプト: {name}") raise ValueError(f "不明なプロンプト: {name}") return types.GetPromptResult( description="プロンプトの例"、 messages=[ types.PromptMessage( role="ユーザー", content=types.TextContent() content=types.TextContent()。 text="例題プロンプトテキスト", text="例題プロンプトテキスト", content=types.TextContent() text="プロンプトテキストの例" ) ) ] )
リソース
リソース管理機能のコードリスト_リソース
利用可能なリソースをリストアップし、リソースのリストを返す。読み取りリソース
SAMPLE_RESOURCESはテスト用に作られたデモです。
サーバー.list_resources() 非同期 def list_resources() -> list[types.] """ リソースの定義 """ test='テスト' return [ types.Resource( uri=AnyUrl(f "file:///{test}.txt")、 uri=AnyUrl(f "file://{test}.txt"), name=test、 description=f "{test}という名前のサンプルテキストリソース"、 mimeType="text/plain", ) ) # for name in SAMPLE_RESOURCES.keys() SAMPLE_RESOURCES.keys() SAMPLE_RESOURCES={'test':'this demo is a mcp server!} server.read_resource()を実行します。 非同期 def read_resource(uri: AnyUrl) -> str | bytes. assert uri.path is not None print(uri.path) name = uri.path.replace(".txt", "").lstrip("/") # print(name) もしnameがSAMPLE_RESOURCESになければ raise ValueError(f "不明なリソース:{uri}") return SAMPLE_RESOURCES[name].
ツール
ツールの定義と呼び出し。ハンドル_リスト_ツール
利用可能なツールを定義し、JSONスキーマを使用してツールのパラメータを検証する。ハンドル・コール・ツール
ツールの呼び出しを処理し、ツール名とパラメータに基づいて適切なアクションを実行します。 server.list_tools() async def handle_list_tools() -> list[types.Tool]: """ ツールの定義。 各ツールは、JSONスキーマ検証を使用してそのパラメータを指定します。 """ return [ types.Tool( name="demo-tool", description="Get data tool for a param", inputSchema={ "type": "object", "properties": { "param": { "type": "string", "description": "url", }, }, "required": ["param"], }, ) ] @server.call_tool() async def handle_call_tool( name: str, arguments: dict |.引数.get("param") if not param: raise ValueError("Missing state parameter"") param = param.upper() return [ types.TextContent( type="text"、text=f "text:{param}" ) ] else: raise ValueError(f "不明なツール: {name}")
検査官
MCPサーバーは以下のように書かれているので、デバッグのためにMCPインスペクターを起動することができます。
npx @modelcontextprotocal/inspector
起動後、図に従って以下のスクリーンショットを取得し、http://localhost:5273、先ほどの話に従って、トランスポートタイプにSTDIOを選択し、コマンドにpythonを入力し、引数にserver.pyを入力し(上記のデモコードはserver.pyファイルに保存されます)、接続をクリックします。図の中で、各タイプに対応するServerサービスコールを入力し、ResourcesのList Resourceをクリックすると、すべてのリソースが一覧表示され、対応するリソースをクリックすると、特定のリソースの内容が表示されます。
これによって、私たちが開発したMCPサーバーとやりとりすることができる。
クロードデスクトップへの設定方法
インスペクタで行ったコマンド設定に従って、この MCP サーバを Claude に設定します。Claudeデスクトップの設定をクリックし、開発者のタブを選択し、configの編集をクリックしてclaude_desktop_config.jsonにジャンプします。
現在、2台のMCPサーバーを以下の構成でインストールしています。1台はファイル整理用、もう1台はplaywright用です(playwrightのMCPサーバーをnpx経由でインストールするため)。
{
"mcpServers":{。
"filesystem": {
"command": "npx"、
"args": [
"-y".
"@modelcontextprotocol/server-filesystem"、
"/Users/crisschan/Desktop"、
"/Users/crisschan/Downloads"
]
}, }
"playwright": {
"command": "npx", "args": ["args" - ["npx" ], "playwright": {
"args": ["-y".
"@executeautomation/playwright-mcp-server"]] 。
}
}
}
このフォーマットで独自のデモ・サービスを設定し、保存してクロード・デスクトップを再起動する。
{
「mcpServers": {
,
"demo": {
"command":"/opt/anaconda3/bin/python3", 、
" args": ["/Users/workspace/pyspace/try_mcp/server.py"].
}
}
}
コンフィギュレーションでは、コマンドは対応するバージョンのpythonの絶対アドレスでなければならず、argsの中のserver.pyのコードの位置も同様で、絶対アドレスを使用します。