Model Context ProtocolのMCPサーバーのメモ。
|
MCPサーバーは、クライアントからの要求を受けてリソースを操作する (データを返す)アプリケーション。
Claude DesktopでMCPサーバーを使うには、MCPサーバーの設定を行う必要がある。
→設定方法
実装的には、MCPサーバーはAPIを実行するサーバーである。
クライアントとの通信方式には、HTTPのREST APIで通信する方式(SSE)と、標準入出力でデータを受け渡しする方式(STDIO)がある。
MCPサーバーを作るためのSDKは、TypeScriptやJavaやPythonなど色々な言語のものが用意されている。
Claude DesktopでMCPサーバーを使うには、MCPサーバーの設定を設定ファイルに記述する必要がある。
{ "mcpServers": { "example-mcp-server": { "command": "C:/Program Files/Java/jdk-21/bin/java", "args": ["-jar", "C:/mcp-example/build/libs/example-mcp-server-0.0.1-SNAPSHOT-all.jar"] } } }
mcpServersの下に、MCPサーバー毎に設定を追加する。
設定値 | 例 | 説明 |
---|---|---|
MCPサーバー名 | "example-mcp-server" |
MCPサーバーの名前。 Claude Desktopではこの名前で認識される。 (ログにはこの名前で出力される) |
command | "java" |
MCPサーバーを実行するコマンド。 絶対パスでない場合はPATHが通っている必要がある。 |
args | ["-jar", "example.jar"] |
コマンドの引数。 |
env | { |
環境変数。 |
Windowsのパス区切り文字は「\」だが、jsonファイル内では「\\」のように二重に書く必要がある。
まぁ「/」にしておくのが楽だろう。
色々な例を見ていると、commandにはnpxを指定しているものも多い。
npxはJavaScriptのファイルをダウンロードして実行してくれるコマンドらしい。
つまり、npxを使えば、claude_desktop_config.jsonに記述を書くだけで、MCPサーバー本体のダウンロード(インストール)はユーザーが何もしなくても勝手に実施されるということだろう。
commandがjavaの場合、javaコマンドをインストールしてパスを通しておくのはともかく、jarファイルをダウンロードして配置するのはユーザーが実施しなければならない。
MCPサーバーを実装するために知っておいた方がいいと思うことを挙げてみる。
MCPサーバーの実体は、(REST)APIを処理するサーバーである。
通信方法は、HTTPを使う方式(SSE)と、HTTPを使わず標準入出力でデータを受け渡しする方式(STDIO)がある。
Claude Desktopはclaude_desktop_config.jsonで与えられたコマンドを実行しているだけである。
なので、claude_desktop_config.jsonには、サーバーとして実行されるアプリケーションを記述することになる。
MCPサーバーを作るSDKとして、typescript-sdk, java-sdk等の言語毎のSDKが用意されている。
例えばjava-sdkの場合、「java-dsk独自のサーバー実装」や「Spring Bootを利用した実装方法」が提供されている。
MCPサーバーは、リソース・ツール・プロンプトを用意する。
それらをMCPクライアントに返すのはSDK(MCPのライブラリー)がやってくれる。
リソース・ツール・プロンプトが何なのかについては、杉田 一毅さんのModel Context Protocol(MCP)の動作原理の概要を掴むための記事が分かりやすい。
大雑把に言うと、以下のような感じだと思う。
Claude DesktopによってMCPサーバーが起動されると、Claude
DesktopはMCPサーバーからリソース一覧・ツール一覧・プロンプト一覧を取得する。
すなわち「resources/list」「tools/list」「prompts/list」というREST APIが実行され、MCPサーバーからそれぞれの一覧が返される。
ただ、この部分の処理は言語毎のSDK内に隠蔽されていると思う。
SDKを使って実装する側は、SDKに従ってリソース・ツール・プロンプトを定義しておくだけでいい(はず)。
MCPサーバーを使う側のLLMがリソース・プロンプトに対応しているかどうかは、LLMによって異なる。[2025-04-19]
著名なLLMの対応状況についてはhttps://modelcontextprotocol.io/clientsにリストがある。
ツールはどのLLMもサポートしているので、とりあえずツールだけ実装しておけばMCPサーバーとして動かせる。