04

初めてのMCPサーバーを構築する

2025年7月15日
MCPサーバー実装PythonNode.js実践

理論はもう十分、実際に手を動かしてみよう

これまでの章で、MCPの概念や仕組みについて学んできました。クライアントがAI側にあり、サーバーが私たちの手元にあることも理解しました。いよいよ、その サーバー を自分自身の手で構築してみる時が来ました。

この記事では、プログラミング言語として人気の高い PythonNode.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ツールの作り方」として、引数の扱い方やエラーハンドリングなど、より高度なツールの作成方法について詳しく解説します。