初めてのMCPサーバーを構築する
理論はもう十分、実際に手を動かしてみよう
これまでの章で、MCPの概念や仕組みについて学んできました。クライアントがAI側にあり、サーバーが私たちの手元にあることも理解しました。いよいよ、その サーバー を自分自身の手で構築してみる時が来ました。
この記事では、プログラミング言語として人気の高い Python と Node.js を使い、ごく簡単なMCPサーバーを立ち上げる手順を、ステップバイステップで解説します。「サーバー」と聞くと難しそうに感じるかもしれませんが、驚くほど少ないコードで実現できることを体験してみてください。
準備するもの
サーバーを構築する前に、お使いのコンピュータに以下のいずれかの環境がインストールされていることを確認してください。
- Python: バージョン3.7以上が推奨されます。
- Node.js: バージョン16以上が推奨されます。
どちらか一方で大丈夫です。あなたがより慣れている方、あるいは学んでみたい方を選んで進めてください。この記事では、両方のコード例を併記します。
ステップ1:プロジェクトのセットアップ
はじめに、作業用のディレクトリを作成し、必要なライブラリをインストールします。
■Pythonの場合
mkdir mcp-server-py cd mcp-server-py # 仮想環境の作成と有効化 python -m venv venv source venv/bin/activate # 必要なライブラリをインストール pip install werkzeug json-rpc
■Node.jsの場合
mkdir mcp-server-js cd mcp-server-js # package.jsonの初期化 npm init -y # 必要なライブラリをインストール npm install express json-rpc-2.0
要するに、「作業場所を準備し、MCPサーバーを作るための便利な部品(ライブラリ)をインストールする」というステップです。
ステップ2:最初のツールを定義する
次に、AIから呼び出してもらうための、ごく簡単なツール(関数)を定義します。今回は、挨拶を返す greet
というツールを作成しましょう。
■Python (server.py
)
# server.py def greet(name: str) -> str: """指定された名前で挨拶を返す""" return f"こんにちは、{name}さん。"
■Node.js (server.js
)
// server.js function greet(params) { // MCPでは引数が配列で渡される const [name] = params; return `こんにちは、${name}さん。`; }
この時点では、これはただの普通の関数です。次のステップで、この関数をMCPサーバーに登録します。
ステップ3:MCPサーバーを実装する
いよいよサーバー本体の実装です。先ほどインストールしたライブラリを使って、JSON-RPCリクエストを受け付け、greet
関数を呼び出す口(エンドポイント)を作成します。
■Python (server.py
)
# server.py (続き) from werkzeug.wrappers import Request, Response from werkzeug.serving import run_simple from jsonrpc.manager import JSONRPCResponseManager # 1. ツールをディスパッチャに登録 dispatcher = {"greet": greet} # 2. リクエストを処理するアプリケーション @Request.application def application(request): response = JSONRPCResponseManager.handle(request.get_data(as_text=True), dispatcher) return Response(response.json, mimetype='application/json') # 3. サーバーを起動 if __name__ == '__main__': run_simple('localhost', 4000, application) print("MCPサーバーが http://localhost:4000 で起動しました")
■Node.js (server.js
)
// server.js (続き) const express = require("express"); const { JSONRPCServer } = require("json-rpc-2.0"); const app = express(); app.use(express.json()); // 1. サーバーインスタンスを作成 const server = new JSONRPCServer(); // 2. ツールをメソッドとして登録 server.addMethod("greet", greet); // 3. リクエストを処理するエンドポイント app.post("/json-rpc", (req, res) => { const jsonRPCRequest = req.body; server.receive(jsonRPCRequest).then((jsonRPCResponse) => { if (jsonRPCResponse) { res.json(jsonRPCResponse); } }); }); // 4. サーバーを起動 app.listen(4000, () => { console.log("MCPサーバーが http://localhost:4000 で起動しました"); });
コードの詳細は完全に理解できなくても大丈夫です。重要なのは、「ツールを登録し、特定のエンドポイントでリクエストを待ち受ける」という流れです。
ステップ4:サーバーを起動してテストする
それでは、作成したサーバーを起動し、curl
コマンドを使って手動でテストしてみましょう。
■サーバーの起動
Pythonの場合
python server.py
Node.jsの場合
node server.js
■テスト
別のターミナルを開き、以下の curl
コマンドを実行します。
curl http://localhost:4000/json-rpc \ -X POST \ -H 'Content-Type: application/json' \ -d '{"jsonrpc": "2.0", "method": "greet", "params": ["山田"], "id": 1}'
正しく動作していれば、以下のようなJSONレスポンスが返ってくるはずです。
{ "jsonrpc": "2.0", "result": "こんにちは、山田さん。", "id": 1 }
このレスポンスが確認できれば、あなたの最初のMCPサーバーは正常に動作しています。
まとめ
今回は、実際に手を動かして、ごく簡単なMCPサーバーを構築するプロセスを体験しました。
- PythonやNode.jsのライブラリを使えば、比較的少ないコードでサーバーを実装できる。
- サーバーの実装は、「ツールの定義」「ツールの登録」「リクエストの待受」「サーバーの起動」という流れで行う。
curl
コマンドを使うことで、AIクライアントがなくてもサーバーの動作をテストできる。
これで、あなたはAIからのリクエストを受け付ける準備ができました。サーバーという箱は作れたので、次はその中身である「ツール」をより実践的なものにしていく方法を学びます。
次回は、「MCPツールの作り方」として、引数の扱い方やエラーハンドリングなど、より高度なツールの作成方法について詳しく解説します。