S-JIS[2025-03-30/2025-04-19] 変更履歴

MCPサーバー

Model Context ProtocolのMCPサーバーのメモ。


概要

MCPサーバーは、クライアントからの要求を受けてリソースを操作する (データを返す)アプリケーション。

Claude DesktopでMCPサーバーを使うには、MCPサーバーの設定を行う必要がある。
設定方法

実装的には、MCPサーバーはAPIを実行するサーバーである。
クライアントとの通信方式には、HTTPのREST APIで通信する方式(SSE)と、標準入出力でデータを受け渡しする方式(STDIO)がある。

MCPサーバーを作るためのSDKは、TypeScriptやJavaやPythonなど色々な言語のものが用意されている


Claude Desktopの設定方法

Claude DesktopでMCPサーバーを使うには、MCPサーバーの設定を設定ファイルに記述する必要がある。

  1. Claude Desktopのメニューの「ファイル」→「設定」をクリックする。(設定ダイアログが開く)
  2. 左側の「開発者」をクリックする。
  3. 「構成を編集」ボタンを押す。(Windows版だと、エクスプローラーが開く)
  4. claude_desktop_config.jsonをテキストエディタ―で開く。

claude_desktop_config.jsonの例:

{
  "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 {
  "NAME": "value"
}
環境変数。

Windowsのパス区切り文字は「\」だが、jsonファイル内では「\\」のように二重に書く必要がある。
まぁ「/」にしておくのが楽だろう。


色々な例を見ていると、commandにはnpxを指定しているものも多い。
npxはJavaScriptのファイルをダウンロードして実行してくれるコマンドらしい。
つまり、npxを使えば、claude_desktop_config.jsonに記述を書くだけで、MCPサーバー本体のダウンロード(インストール)はユーザーが何もしなくても勝手に実施されるということだろう。

commandがjavaの場合、javaコマンドをインストールしてパスを通しておくのはともかく、jarファイルをダウンロードして配置するのはユーザーが実施しなければならない。


MCPサーバーを実装する前提知識

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)の動作原理の概要を掴むための記事が分かりやすい。

大雑把に言うと、以下のような感じだと思う。

リソース
MCPサーバーが扱うデータ(ファイルとかDBのテーブルとか)
ツール
MCPサーバーが実行できる関数(リソースを処理する関数)
プロンプト
LLM(いわゆるAI)向けの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サーバーとして動かせる。



MCPへ戻る / 技術メモへ戻る
メールの送信先:ひしだま