記事一覧
技術チュートリアル

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 tsx

tsconfig.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.js

http://localhost:5173でブラウザからテストできます。

PythonでMCPサーバーを構築する

pip install fastmcp
from 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でデプロイする

  1. nodeflare.techにGitHubでサインイン
  2. リポジトリを選択
  3. デプロイをクリック

数秒でライブに。Claude Codeから接続:

claude mcp add my-server https://your-server.nodeflare.tech/sse

セキュリティの考慮事項

  • すべての入力を検証
  • シークレットは環境変数で管理
  • レート制限を実装
  • パラメータ化クエリでSQLインジェクション防止

まとめ

  1. TypeScript/Pythonで実装
  2. MCP Inspectorでローカルテスト
  3. Nodeflareで本番デプロイ
  4. エラーハンドリングとセキュリティ対策

シンプルなツールから始め、徐々に機能を追加しましょう。詳細はmodelcontextprotocol.ioを参照してください。

著者

山田太郎

テックブロガー。10年以上のソフトウェア開発経験を持つ。

nodeflareNodeFlare

MCP専用ホスティングサービス

GitHubにあるMCPを簡単デプロイ・簡単運用で最適化
無料で始める