ClaudeなどのAIアシスタントに「自社のAPIを叩かせたい」「社内DBを検索させたい」と思ったことがあるなら、MCP(Model Context Protocol)は知っておいて損はない。この記事では、MCPサーバーを自前のVPSに置いて運用する際の勘所を整理する。プロトコル自体まだ新しく仕様が変わることもあるので、細かい実装は公式ドキュメント(modelcontextprotocol.io)を都度確認する前提で読んでほしい。
MCPとは何か
MCP(Model Context Protocol)は、AIアシスタントに外部のツールやデータソースを標準化された方法で接続するためのオープンなプロトコル。平たく言うと、AIに「ファイルを読む」「DBを叩く」「外部APIを呼ぶ」といった能力を、決まったインターフェースで持たせる仕組みだ。
MCPが登場する前は、AIに何か機能を持たせようとすると、サービスごとに独自のプラグイン形式やAPI連携を作る必要があった。MCPはそこを共通化しようというもので、一度MCPサーバーを作れば、対応するクライアント(ClaudeやそのほかMCP対応のツール)からそのまま使える。
構成:ホストとサーバー
MCPの登場人物は大きく2つ。
- MCPホスト — Claude Desktopなど、AIアシスタントを動かすクライアント側
- MCPサーバー — ツールやリソースを公開する側。これは自作できる
自分でMCPサーバーを書いて、それをVPSに置いて運用する、というのが今回のテーマになる。
トランスポート:ローカルはstdio、リモートはHTTP系
MCPサーバーとホストの通信方式(トランスポート)には種類がある。ローカルで動かす場合は標準入出力(stdio)で親プロセスと直接やり取りするのが定番。一方、VPSに置いて外部のクライアントから使わせる場合はネットワーク越しになるので、HTTP系のトランスポート(Streamable HTTP)を使うことになる。VPSで運用するなら基本的にHTTP系一択と考えていい。
実装のイメージ(Python)
公式のSDKはTypeScriptやPythonなどいくつかの言語で提供されている。Pythonの場合、ざっくりしたイメージは次のような形になる(細部のAPIは変わる可能性があるので、実装時は公式SDKのドキュメントを見てほしい)。
python3 -m venv venv
source venv/bin/activate
pip install mcp
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("my-tools-server")
@mcp.tool()
def get_server_status(hostname: str) -> str:
"""指定したホストの稼働状況を返す"""
# ここで実際のチェック処理を書く
return f"{hostname} is up"
if __name__ == "__main__":
mcp.run()
@mcp.tool()のようなデコレータでツールを定義すると、そのツールには名前・説明・入力スキーマが自動的に付く。AIはその説明を見て「このツールをいつ使うべきか」を判断するので、descriptionは適当に書かず具体的に書いた方がいい。ここは実際に触ってみると効果の差がよく分かる。
VPS運用のポイント
VPSで常駐させるなら、まずsystemdでサービス化しておくのが定石。
[Unit]
Description=My MCP Server
After=network.target
[Service]
User=[サービス用ユーザー]
WorkingDirectory=/home/[ユーザー名]/mcp-server
ExecStart=/home/[ユーザー名]/mcp-server/venv/bin/python server.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
そのうえで、直接ポートを外に晒さずnginxでリバースプロキシを挟み、認証(Basic認証やトークン検証など)を必ず付ける。ここは強調しておきたいのだが、MCPサーバーは「AIに実行権限を渡す窓口」なので、セキュリティ的な重みは普通のWeb APIより一段重いと考えた方がいい。認可の仕組みと入力検証は省略しないこと。
location /mcp/ {
proxy_pass http://127.0.0.1:8765/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# ここに認証設定(auth_basicやアプリ側のトークン検証)を追加
}
用途の例
実際に作ってみると使い道は意外と地味なところに転がっている。
- 社内APIのラッパー(在庫確認、注文照会など)
- DBの検索ツール(読み取り専用に限定するのが無難)
- 定型オペレーションの実行(サーバーの再起動、ログの要約取得など)
どれも「AIに人間の代わりに操作させる」窓口になるので、書き込み系の操作を許可する場合は特に慎重に。まずは読み取り専用のツールから試すのがおすすめだ。
まとめ
MCPはAIに外部の能力を持たせるための共通規格で、VPSに自前のMCPサーバーを置けば、社内システムをAIから触れるようにできる。ただしプロトコルはまだ発展途上で、実装の細部は変わりうる。今回書いた内容も大枠の考え方として捉えて、実装時は必ず公式ドキュメントで最新の仕様を確認してほしい。
