MCP Serverをゼロから構築:AIツール呼び出し完全ガイド(2026)

Python または TypeScript の基礎があるのに、Claude・GPT・Cursor から自社 API・DB・ナレッジベースを安全に呼び出す方法で詰まっているなら、本記事はHello World から本番デプロイまでの MCP Server 開発フルパスを提供します。プロトコル原理、Tools/Resources/Prompts 三大原語、HTTP+SSE リモートトランスポート、MCP Inspector デバッグ、Docker デプロイ、ナレッジベース実戦プロジェクト、Mac クラウド launchd 7×24 常駐 5 ステップ Runbookとホスティング環境決定マトリクスを含みます。

Mac ターミナルに MCP Server コードと Cursor ツール呼び出しパネルが表示され、AI ツールプロトコル開発とクラウドデプロイを象徴する

目次

1. MCP プロトコル原理と三層アーキテクチャ

Model Context Protocol(MCP)は Anthropic が 2024 年 11 月にオープンソース化した、AI Host(Cursor、Claude Desktop 等)と外部ツール/データ間の統一 JSON-RPC 2.0 通信規格です。2026 年時点で OpenAI、Google Gemini、Microsoft も採用し、公開 MCP Server は 10,000 超。

┌─────────────────────────────────┐ │ Host(Cursor / Claude Desktop) │ │ ┌───────────────────────────┐ │ │ │ MCP Client(1:1 セッション)│ │ │ └───────────────────────────┘ │ └─────────────────────────────────┘ ↕ JSON-RPC 2.0 ┌─────────────────────────────────┐ │ MCP Server(あなたが開発する) │ │ Tools │ Resources │ Prompts │ └─────────────────────────────────┘ ↕ ┌─────────────────────────────────┐ │ 外部システム(API、DB、ファイル)│ └─────────────────────────────────┘

Server は tools/list + tools/call(実行操作)、resources/list + resources/read(読み取り専用コンテキスト)、prompts/list + prompts/get(プロンプトテンプレート)を実装します。トランスポート層は STDIO(ローカル子プロセス)と HTTP+SSE(リモート共有)が主流です。

2. 三大開発痛点

  1. ツール定義の断片化。 各 AI クライアント向けに Function Calling Schema をハードコードすると、Cursor → Claude Desktop 切替のたびに書き直し。MCP は tools/list で実行時自己記述、一度書けばどこでも動く。
  2. ローカル開発と本番の乖離。 ノート PC で STDIO 調整後、蓋を閉じると切断。Linux Docker には Apple ツールチェーンがなく、トラブルシュートコストが急増。
  3. セキュリティと可観測性の欠如。 約 1,000 個の公開 MCP Server が未認可で露出。本番では Token 集中管理と tools/call レイテンシ基線記録が必須。

3. 環境準備

TypeScript と Python の両パスを提供。どちらか一方で十分です。

TypeScript パス

mkdir my-mcp-server && cd my-mcp-server npm init -y npm install @modelcontextprotocol/sdk zod npm install -D typescript @types/node tsx npx tsc --init

Python パス

mkdir my-mcp-server && cd my-mcp-server python3 -m venv .venv && source .venv/bin/activate pip install "mcp[cli]" httpx

推奨:Node.js 20+ または Python 3.10+。Mac ローカルで検証後、第 10 節 Runbook で本番常駐。

4. Hello World:最初の MCP Server

以下 TypeScript 例は STDIO Server を作成し ping ツールを公開します:

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: "hello-mcp", version: "1.0.0" }); server.tool("ping", "Health check", { message: z.string().optional() }, async ({ message }) => ({ content: [{ type: "text", text: `pong: ${message ?? "ok"}` }] }) ); const transport = new StdioServerTransport(); await server.connect(transport);

npx tsx src/index.ts で起動。Python 版は mcp.server.Server + stdio_server() で同等ロジック。

5. Tools 開発:5 つの実戦ツール

本番 Server は通常 3–8 個の高価値ツールを公開。以下 5 例は典型シナリオをカバー:

ツール名用途主要パラメータ
query_database読み取り専用 SQLsql: string
search_docsナレッジベース全文検索query: string, limit?: number
create_ticketチケット作成title, body, priority
fetch_weather外部 REST API 呼び出しcity: string
run_scriptサンドボックス実行lang, code(ホワイトリスト必須)

各ツールに JSON Schema パラメータ説明と副作用(read-only / destructive)を付与し、Agent が tools/list で自律選定できるようにします。

6. Resources:読み取り専用リソース

Resources は設定ファイル、Schema 定義、API 仕様など読み取り専用コンテキスト向け。Agent は resources/read で必要時のみ取得し、Prompt 肥大化を防ぎます。

server.resource("config://app/settings", "Application settings JSON", async (uri) => ({ contents: [{ uri: uri.href, mimeType: "application/json", text: await fs.readFile("config/settings.json", "utf8") }] }) );

7. Prompts:再利用可能なテンプレート

Prompts はチームのベストプラクティスを発見可能なテンプレートとして封装。例:「コードレビュー Checklist」「Incident 報告フォーマット」。

server.prompt("code-review", "Structured code review prompt", { language: z.string(), focus: z.string().optional() }, ({ language, focus }) => ({ messages: [{ role: "user", content: { type: "text", text: `Review this ${language} code. Focus: ${focus ?? "security, perf, readability"}.` } }] }) );

8. HTTP+SSE リモートトランスポート

チーム共有やクラウドデプロイ時は STDIO を Streamable HTTP または HTTP+SSE に切替:

import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js"; app.get("/sse", async (req, res) => { const transport = new SSEServerTransport("/message", res); await server.connect(transport); });
トランスポート適用利点注意
STDIOCursor / Claude Desktop ローカル依存ゼロ、隔離良好子プロセス常駐が必要
HTTP+SSEリモートチーム、複数 Client 共有ネットワーク越し、水平拡張session affinity 必要

9. デバッグとテスト

  1. MCP Inspectornpx @modelcontextprotocol/inspector node dist/index.js で GUI テスト。
  2. Cursor 設定:プロジェクトまたはグローバル .cursor/mcp.json に Server 登録。
  3. ログ階層化:stderr に構造化ログ(STDIO JSON-RPC チャネルを汚染しない)。
  4. 単体テスト:ツール handler を mock テストし、毎回 Host 起動を回避。
{ "mcpServers": { "my-kb-server": { "command": "node", "args": ["/path/to/my-mcp-server/dist/index.js"], "env": { "KB_INDEX_PATH": "/data/kb.index" } } } }

10. 本番デプロイと 5 ステップ Runbook

ホスティング環境決定マトリクス

ホスティングSTDIO7×24ネイティブ macOS適合
MacBook ローカル❌ 蓋閉じで切断個人検証
Linux VPS + Docker⚠️純 HTTP Server
VPSMAC M4 Mac クラウド✅ launchd✅ ベアメタル SSHCursor + MCP 同機常駐

5 ステップ Runbook

  1. トランスポート層選択:IDE 統合は STDIO、チーム共有は HTTP+SSE。
  2. ビルドとパッケージ:依存バージョンをロック。
  3. Cursor / Claude 設定mcp.json 記述、tools/list Schema 検証。
  4. Docker(任意):HTTP モードはコンテナ化可。STDIO は裸機 launchd 推奨。
  5. launchd 常駐:Mac クラウドノードで plist 登録、リソース上限とログ設定。

11. ナレッジベース MCP 実戦プロジェクト

社内 Markdown/Wiki をベクトルインデックス化し、3 能力を公開:

Mac クラウドノードで OpenClaw Gateway と同機デプロイすれば、Agent が 7×24 ナレッジベースを呼び出せます。詳細は MCP プロトコル概観 を参照。

12. 2026 エコシステム展望

13. 引用可能な技術要点(2026)

14. まとめ

Hello World からナレッジベース実戦まで、MCP Server の本質は「AI が何を発見し正しく呼び出すか」を標準化すること——一度書けば Cursor、Claude Desktop、VS Code すべてで再利用可能。ノート PC は検証向きだが、蓋閉じ切断・環境ドリフト・launchd 托管欠如で STDIO 子プロセスは本番で不安定。Linux Docker は HTTP モードを走らせられるが、抽象層増加と Apple ツールチェーン欠如が障壁。

Cursor、OpenClaw、Claude Desktop と MCP Server を長期 7×24 同機常駐させ、ネイティブ macOS と launchd 托管が必要なら、VPSMAC M4 Mac クラウドノードのレンタルが AI 自動化本番環境では通常より省力的な選択です——ツール層は一度書き、モデルは自由に切替、ノードは常にオンライン。