MCPサーバーの自作完全ガイド|作り方から接続・運用まで

- MCPサーバーは、AIに外部の機能やデータを使わせるための小さなサーバープログラムである。
- 主な機能は「Tools(道具)」「Resources(データ)」「Prompts(定型文)」の3つに分かれる。
- 通信はJSON-RPC 2.0という形式で、標準入出力かHTTPでやり取りする。
- 自作の費用は、ローカル開発だけなら0円から始められる。
- 最初の1本は、環境構築込みで所要時間およそ2〜4時間・難易度はやさしめ。
MCPサーバーの自作とは?仕組みと費用の基礎知識

MCPサーバーの自作とは、AIに新しい機能やデータ参照能力を追加するための小さなサーバープログラムを、自分で書いて用意することです。
MCP(Model Context Protocol)は、Anthropicが公開したオープンな規格だ。AIモデルと外部ツールをつなぐ「共通の差し込み口」だと思えばいい。
私はこのメディアのCMSもAI駆動で組んでいるが、AIに「自社の処理」を渡したい場面は山ほどある。MCPはその受け渡しを標準化してくれる。
MCPサーバーでできること(機能の3兄弟)
MCPサーバーが提供できる機能は、Tools・Resources・Promptsの3種類に整理されている。
ここを最初に押さえておくと、後の実装で「これはどれを作っているのか」が迷わなくなる。
| 種類 | 役割 | 具体例 |
|---|---|---|
| Tools | AIが呼び出して実行する関数 | 天気を取得する、計算する、DBに書き込む |
| Resources | AIが読み取る参照データ | ファイルの中身、設定値、ログ |
| Prompts | 定型のプロンプトテンプレート | レビュー用の質問テンプレ、要約指示の雛形 |
3つのうち、実際に作る頻度が高いのは圧倒的にToolsだ。私自身、最初に作るならまずToolだけで十分だと考えている。
なぜREST APIではなくMCPを使うのか
REST APIではなくMCPを使う理由は、AIが「どんな道具があり、どう呼べばいいか」を自分で読み取れる形になっているからです。
REST APIは人間が仕様書を読んで叩く前提で作られている。MCPは、ツールの名前・説明・引数の形をAIが解釈できる形で渡す。
つまり、毎回「このAPIをこう呼んで」と指示しなくても、AI側が状況に応じて道具を選んでくれる。ここが普通のAPI連携との決定的な違いだ。
通信の仕組みとデータの形式
MCPの通信はJSON-RPC 2.0という形式で行われ、トランスポートは「標準入出力」か「HTTP(SSEを含む)」を選びます。
ローカルでClaude Desktopから使うなら、標準入出力(stdio)が一番シンプルだ。サーバーをサブプロセスとして起動し、入出力でメッセージをやり取りする。
離れた場所のサーバーに置いて複数人で使うなら、HTTPベースを選ぶ。この記事では、まずstdioで作り、後半でHTTP化の話に進む。
自作にかかる費用と必要なもの
自作の費用は、ローカル開発に限れば0円から始められます。
必要なのは、開発言語の実行環境(無料)と、テスト用のMCPクライアント(Claude Desktopなどは無料で使える)だけだ。
費用が発生するのは、本番でクラウドに常駐させる段階から。下に、どこでお金がかかるかを整理しておく。
| 段階 | 必要なもの | 費用感 |
|---|---|---|
| ローカル開発 | 言語の実行環境・エディタ・MCPクライアント | 0円 |
| 外部API連携 | 天気APIなどの利用料(無料枠あり) | 0円〜従量 |
| 本番デプロイ | クラウドの常駐サーバー/コンテナ | 月数百円〜 |
正直、学習目的なら最後まで0円で完結できる。お金の話で身構える必要はない。
開発環境の準備と前提条件
MCPサーバーの自作を始めるには、好きな言語の実行環境とMCP用の公式SDKを入れるだけで準備が整います。

前提条件はシンプルだ。コマンドを打てる端末(ターミナル)と、テキストエディタ、それに対象言語のランタイム。これだけあればいい。
- 前提:ターミナル操作の基本(フォルダ移動・コマンド実行)ができること。
- 前提:対象言語の実行環境がインストール済みであること。
- 所要時間:環境構築だけなら15〜30分ほど。
対応する開発言語の選び方
MCPの公式SDKは複数言語で提供されており、Python・TypeScript・C#・Goなどから選べます。
どれを選ぶかは「普段使っている言語」で決めていい。MCPの考え方はどの言語でも同じだ。
| 言語 | 向いている人 | ひとこと |
|---|---|---|
| TypeScript/Node.js | Web系・フロント出身の人 | 公式SDKが充実、サンプルも多い |
| Python | データ・AI周りを触る人 | 最短で書ける、学習向き |
| C#(.NET) | 業務システム・Windows寄りの人 | 型がしっかり、社内システム連携向き |
| Go | 常駐サーバーを軽く速く動かしたい人 | 単一バイナリで配布が楽 |
私の本音を言うと、初学者には書く量が少ないPythonかTypeScriptを勧める。社内の既存資産がC#や.NETならC#で揃える、という判断でいい。
実行環境のインストールと確認
インストール後は必ずバージョンを表示するコマンドで、正しく入ったかを確認します。
例えばNode.jsなら「node --version」、Pythonなら「python --version」、.NETなら「dotnet --version」を打つ。
ここでバージョン番号が返ってくれば正しい。コマンドが見つからないと出たら、PATHが通っていない。インストーラを入れ直すか、端末を再起動する。
プロジェクトの作成と必要な部品の導入
空のプロジェクトを作り、MCPの公式SDKをパッケージとして追加すれば下準備は完了です。
TypeScriptなら作業フォルダで「npm init -y」してから、MCP用のSDKを「npm install」で入れる。Pythonなら仮想環境を作ってSDKを入れる。
パッケージの正確な名前とバージョンは更新が早いので、公式リポジトリのREADMEを見て入れるのが確実だ。
【手順】はじめてのMCPサーバーを作る
はじめてのMCPサーバーは、サーバー本体の生成→ツール定義→データ公開→起動の4ステップで完成します。

ここでは「足し算をする計算ツール」と「設定値を返すデータ」を持つ最小サーバーを作る。1ステップ=1動作で進める。
手順1:サーバー本体を用意する
まず、SDKからサーバーのインスタンスを1つ作ります。
このとき、サーバーの「名前」と「バージョン」を渡す。名前は後でクライアント側に表示されるので、自分が分かるものにしておく。
ここまででサーバーの“ガワ”ができた。まだ何の機能もないが、それでいい。
手順2:機能(ツール)を定義する
次に、AIが呼び出せるツールを1つ登録します。
ツールには「名前」「説明文」「入力の形(引数)」「実行する処理」を持たせる。今回は2つの数を受け取って合計を返す処理にする。
説明文はAIが「いつこの道具を使うか」を判断する材料になる。だから雑に書かない。「2つの整数を受け取り合計を返す」のように具体的に書く。
手順3:データを公開する
続いて、AIが読み取れるResource(データ)を1つ公開します。
Resourceには一意のアドレス(URI)を付ける。例えば「config://app/settings」のような形で、アクセスされたら設定値を返すようにする。
Toolが「動かす」担当なら、Resourceは「見せる」担当だ。読み取り専用の情報はここに置く。
手順4:サーバーを動かして確認する
最後に、トランスポートを標準入出力に設定してサーバーを起動します。
起動コマンドを打つと、サーバーは入力待ちの状態でじっと止まる。エラーを吐かずに止まっていれば成功だ。
ここで何も表示されず固まったように見えても、それが正常。サーバーはクライアントからの接続を待っている状態だ。
作ったサーバーを動作確認する方法

動作確認は、まず公式の検査ツール「MCP Inspector」で単体チェックし、その後Claude DesktopやCursorに接続するのが安全な順番です。
いきなりClaude Desktopにつなぐと、動かないときに「サーバーが悪いのか設定が悪いのか」が切り分けられない。先に単体で確かめる。
検査ツールでの動作チェック
MCP Inspectorは、サーバーに登録したツールやリソースを画面上で一覧・実行できる公式の検査ツールです。
自作サーバーを指定して起動すると、ブラウザに検査画面が立ち上がる。そこでToolsの一覧に「足し算」が出ていれば、登録は成功している。
実際に引数を入れて実行し、正しい合計が返ってくるかをここで確かめる。AIをつなぐ前にバグを潰せるのが大きい。
Claude Desktopとつないで使ってみる
Claude Desktopとつなぐには、設定ファイルに自作サーバーの起動コマンドを書き加えます。
この設定ファイルは「claude_desktop_config.json」という名前で、OSによって置き場所が違う。下にまとめた。
| OS | 場所 |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
ファイルが無ければ、同じ名前で新規作成すればいい。書き換えたらClaude Desktopを完全に再起動する。これを忘れる人が本当に多い。
再起動後、入力欄の周辺にツールのアイコンが出て、自作サーバーが認識されていれば接続成功だ。
Cursorやその他のクライアントとの接続
自作MCPサーバーはClaude Desktop専用ではなく、CursorやCline、VS Code拡張など他のMCP対応クライアントからも同じように使えます。
Cursorの場合も、考え方は同じ。設定からMCPサーバーを追加し、起動コマンドを登録するだけだ。設定ファイルの場所や書式がクライアントごとに少し違う点だけ注意する。
私は普段Cursorで開発しているので、自作ツールをCursorに常駐させて作業を任せている。1本作れば使い回せるのがMCPの良いところだ。
うまくいかないときの対処と注意点
うまくいかない原因の大半は「設定ファイルのパス間違い」「再起動忘れ」「標準出力へのログ混入」の3つに集約されます。

ここを先回りで潰しておけば、ほとんどのつまずきは避けられる。私自身が踏んだものも含めて並べる。
よくあるエラーと解決策
エラーが出たら、まず「サーバー単体は動くか」「クライアントの設定は正しいか」を分けて確認します。
| 症状 | よくある原因 | 対処 |
|---|---|---|
| ツールが表示されない | 設定ファイルのパス・コマンドが誤り | フルパスで書き直す/再起動する |
| 起動直後に落ちる | ログを標準出力に出している | ログを標準エラー出力に切り替える |
| コマンドが見つからない | 実行環境のPATHが通っていない | コマンドを絶対パスで指定する |
