MCPサーバー自作から本番公開まで - 完全ガイド
山田太郎
MCPサーバーをゼロから構築する包括的なガイド。TypeScriptとPythonの実装、MCP Inspectorでのテスト、Nodeflareでのデプロイを解説。
MCPサーバーを自作する意義
MCP(Model Context Protocol)は、Anthropicが開発したAIアシスタントと外部システムを接続するためのオープンプロトコルです。「AIアプリケーションのためのUSB-Cポート」と例えられ、あらゆるツールやデータソースとAIモデルの連携を標準化します。
MCP登場以前は、ツールごとにカスタムインテグレーションが必要でした。MCPは一度実装すれば、どこからでも接続できる標準プロトコルを提供します。
以下のケースでは自作が必要です。
- 社内システムやプライベートAPIとの連携
- 自社固有のビジネスロジックの実装
- 既存のマイクロサービスのAI対応化
- セキュリティ・コンプライアンス要件への対応
MCPアーキテクチャの理解
MCPはクライアント-サーバーアーキテクチャを採用。Claude DesktopやClaude CodeなどのクライアントがMCPサーバーに接続します。
MCPサーバーは3種類のプリミティブを提供できます。Toolsはアクションを実行する関数。Resourcesは読み取り専用データを提供。Promptsは再利用可能なテンプレートです。ほとんどのユースケースではToolsを使用します。
前提条件
- Node.js 20以降(TypeScript)またはPython 3.10以降
- Claude DesktopまたはClaude Code(テスト用)
- Git(バージョン管理用)
TypeScriptでMCPサーバーを構築する
プロジェクトセットアップ
mkdir my-mcp-server && cd my-mcp-server
npm init -y
npm install @modelcontextprotocol/sdk zod
npm install -D typescript @types/node tsxtsconfig.json
{
"compilerOptions": {
"target": "ES2022",
"module": "Node16",
"moduleResolution": "Node16",
"outDir": "./dist",
"rootDir": "./src",
"strict": true
}
}MCPサーバーの実装
src/index.tsを作成します。
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({ name: "my-mcp-server", version: "1.0.0" });
server.tool(
"get_weather",
"都市の天気を取得",
{ city: z.string().describe("都市名") },
async ({ city }) => {
const data = { Tokyo: "22°C 晴れ", Osaka: "24°C 曇り" };
return { content: [{ type: "text", text: data[city] || "都市が見つかりません" }] };
}
);
const transport = new StdioServerTransport();
server.connect(transport);ビルドとテスト
npm run build
npx @modelcontextprotocol/inspector dist/index.jshttp://localhost:5173でブラウザからテストできます。
PythonでMCPサーバーを構築する
pip install fastmcpfrom fastmcp import FastMCP
mcp = FastMCP("my-mcp-server")
@mcp.tool()
def get_weather(city: str) -> str:
data = {"Tokyo": "22°C 晴れ", "Osaka": "24°C 曇り"}
return data.get(city, "都市が見つかりません")
if __name__ == "__main__":
mcp.run()Claude Desktopへの接続
設定ファイル(macOS: ~/Library/Application Support/Claude/claude_desktop_config.json)を編集:
{
"mcpServers": {
"my-mcp-server": {
"command": "node",
"args": ["/path/to/dist/index.js"]
}
}
}本番デプロイオプション
Google Cloud Run: フルマネージド、GCPユーザー向け。Dockerfile必要。
Cloudflare Workers: エッジ実行、低レイテンシ。Hono等のフレームワーク必要。
Nodeflare: MCP専用。GitHubから即座にデプロイ、設定不要。
Nodeflareでデプロイする
- nodeflare.techにGitHubでサインイン
- リポジトリを選択
- デプロイをクリック
数秒でライブに。Claude Codeから接続:
claude mcp add my-server https://your-server.nodeflare.tech/sseセキュリティの考慮事項
- すべての入力を検証
- シークレットは環境変数で管理
- レート制限を実装
- パラメータ化クエリでSQLインジェクション防止
まとめ
- TypeScript/Pythonで実装
- MCP Inspectorでローカルテスト
- Nodeflareで本番デプロイ
- エラーハンドリングとセキュリティ対策
シンプルなツールから始め、徐々に機能を追加しましょう。詳細はmodelcontextprotocol.ioを参照してください。
著者
山田太郎
テックブロガー。10年以上のソフトウェア開発経験を持つ。
