Claude や Cursor に社内 DB を問い合わせさせたい、ローカルファイルを読ませたい、内部 API を叩かせたい——一方で Function Calling だけだとモデルが変わるたびに統合コードを書き直す、そんな開発者向けに、2026年6月 時点の SDK を前提に MCP プロトコル基礎 から動く Server までを手順化します。環境構築と Hello WorldTools・Resources・PromptsHTTP トランスポートとデバッグ本番デプロイとナレッジベース事例 を扱い、サイト内 MCP プロトコル解説Agent Skill ガイド と補完関係です。
01

コードを書く前に MCP を理解する:進化、三層構造、単発統合を超える理由

Model Context Protocol は Anthropic が 2024年11月 に公開したオープン標準で、AI クライアントが外部能力をどう発見・呼び出すかを一本化します。要点はシンプルです。Server を一度書けば Claude Desktop、Cursor、その他 MCP 対応クライアントから接続でき、下位 LLM を差し替えてもツール層を書き直す必要がありません。

01

Function Calling 時代:各 LLM ベンダーが独自スキーマを提供し、GPT・Claude・Gemini ごとにアダプタコードが必要でした。

02

Plugins 波:ChatGPT Plugins がライブデータ連携の需要を証明しましたが、OpenAI 専用で閉じたエコシステムのままでした。

03

MCP 標準化:Anthropic がベンダー中立プロトコルを OSS 化。2026年には OpenAI、Google、Microsoft も Linux Foundation AAIF 傘下で採用しています。

04

設計目標:HTTP が Web サービスを標準化したのと同様に、AI とツール間の通信を一本化し、実行時発見と自己記述ツールを実現します。

architecture
┌────────────────────┐         ┌─────────────────────┐
│   MCP Client       │ ◄─────► │   MCP Server        │
│  (Claude / Cursor) │  JSON   │  (あなたが構築)     │
│                    │  -RPC   │                     │
└────────────────────┘         └─────────────────────┘
                                        │
                          ┌─────────────┼─────────────┐
                          ▼             ▼             ▼
                       Tools       Resources      Prompts
                    (アクション)   (データ読取)  (テンプレート)
能力役割
ToolsAI が呼び出す関数検索、計算、SQL、HTTP 呼び出し
ResourcesURI で読むデータ設定ファイル、ユーザープロフィール、ノート索引
Prompts再利用プロンプトコードレビュー、面接シミュレーション、デバッグ支援

ワイヤ形式は JSON-RPC 2.0 です。ライフサイクルは initialize ハンドシェイク → 能力交渉 → リクエスト/レスポンスループ → 正常終了。トランスポートは stdio(ローカル子プロセス、ネットワーク不要)と HTTP + SSE(リモート、マルチクライアント、チーム共有)の二系統が主流です。

観点MCPOpenAI Function CallingLangChain Tools
標準化オープンプロトコルベンダー独自フレームワーク依存
トランスポートstdio / HTTP+SSEHTTP のみHTTP のみ
クロスモデル対応非対応部分的
Resources / Promptsネイティブ非対応非対応
エコシステム(2026)10,000+ Server成熟だがロックイン成熟だが結合度高

MCP は Function Calling の薄いラッパーではありません。AI が実行時にツールを発見・記述・呼び出すためのプロトコル層です。

02

環境構築と Hello World:venv から Cursor でツールが見えるまで

10分以内に動く MCP Server を用意できます。Python + FastMCP を第一候補とし、TypeScript は @modelcontextprotocol/sdk で同概念を実装します。

言語SDK向いているチーム
Pythonmcp(FastMCP)バックエンド/AI エンジニア、最短 Hello World
TypeScript@modelcontextprotocol/sdkNode 基盤のフロント/フルスタック
bash
python -m venv .venv
source .venv/bin/activate
pip install mcp

npm init -y
npm install @modelcontextprotocol/sdk

推奨プロジェクト構成は次のとおりです。

tree
my-mcp-server/
├── server.py
├── tools/
│   ├── calculator.py
│   └── web_search.py
├── resources/
│   └── file_reader.py
├── prompts/
│   └── templates.py
├── tests/
│   └── test_tools.py
└── pyproject.toml
python
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("my-first-server")

@mcp.tool()
def say_hello(name: str) -> str:
    return f"Hello, {name}! これが最初の MCP ツールです。"

if __name__ == "__main__":
    mcp.run()

公式 MCP Inspector で起動確認します。

bash
python server.py
npx @modelcontextprotocol/inspector python server.py

クライアント接続:Claude Desktopclaude_desktop_config.json または Cursormcp.json に起動コマンドを登録し、再起動後にツール一覧へ表示されることを確認します。

注意:STDIO Server はクライアント起動中ずっと子プロセスとして動きます。設定には絶対パスを使い、作業ディレクトリ不一致による Hello World 失敗を避けてください。

03

Tools・Resources・Prompts:本番 Server が公開すべき三層

本番 Server は Tools でアクション、Resources で読み取りデータ、Prompts で再利用テンプレートを登録します。関数シグネチャと docstring が AI 向けドキュメントになり、別途 OpenAPI を書く必要はありません。

Tool 構造:名前は関数名、パラメータは型ヒント、説明は docstring から生成されます。複雑入力には Pydantic モデルを使います。

python
from pydantic import BaseModel, Field

class SearchInput(BaseModel):
    query: str = Field(description="検索キーワード")
    max_results: int = Field(default=5, description="最大件数")
    language: str = Field(default="ja", description="結果言語")

@mcp.tool()
def web_search(input: SearchInput) -> list[dict]:
    ...
実用 Tool用途要点
Calculator数式評価安全な eval または AST パーサ、文字列で返却
File read/writeローカル I/O許可ディレクトリをホワイトリスト化
HTTP request外部 API 呼び出しhttpx で async、タイムアウトとステータス確認
Database query読み取り専用 SQLパラメータ化クエリ、DDL をブロック
Time / timezone現在時刻・変換ISO 8601 文字列で返却
python
import httpx

@mcp.tool()
async def fetch_url(url: str) -> str:
    async with httpx.AsyncClient(timeout=30.0) as client:
        response = await client.get(url)
        response.raise_for_status()
        return response.text

エラー処理:回復可能な失敗は構造化 dict で返し、回復不能な状態のみ raise します。I/O 系 Tool には必ずタイムアウトを設定し、ファイルシステムや DB アクセス前に権限を検証してください。

Resources は Tools と異なり、URI 経由でデータを供給します。静的 Resource は固定 URI、動的 Resource はパスパラメータを受け取ります。

python
@mcp.resource("config://app-settings")
def get_app_settings() -> str:
    return json.dumps({"version": "1.0", "env": "production"})

@mcp.resource("user://{user_id}/profile")
def get_user_profile(user_id: str) -> str:
    user = db.query_user(user_id)
    return json.dumps(user)
Resource 種別MIME用途
Texttext/plainapplication/json設定、ログ、構造化データ
Binaryimage/*application/pdfドキュメント、スクリーンショット
Streamingイベントストリームライブメトリクス、ファイル監視

ファイルシステム Resource Server はディレクトリ一覧、内容読取、変更イベント購読を提供します。Prompts は動的パラメータ注入付きの会話テンプレートです。

python
from mcp.types import PromptMessage, TextContent

@mcp.prompt()
def code_review_prompt(language: str, code: str) -> list[PromptMessage]:
    return [
        PromptMessage(
            role="user",
            content=TextContent(
                type="text",
                text=f"次の {language} コードをバグ・セキュリティ・性能の観点でレビューしてください:\n```{language}\n{code}\n```"
            )
        )
    ]

マルチターン Prompts は userassistant ロールを混在させ、面接シミュレーションやデバッグ手順、オンボーディングフローでセッション間の構造を揃えられます。

04

HTTP トランスポート、認証、デバッグ、自動テスト

ローカル STDIO は開発向きです。チーム共有や SaaS 展開には HTTP + SSE が必要です。FastMCP は streamable-http トランスポートを最小変更でサポートします。

特性stdioHTTP + SSE
デプロイローカル子プロセスリモートサーバー
レイテンシほぼゼロネットワーク依存
マルチクライアント1 プロセス 1 クライアント多数同時接続
適した用途個人開発ツールチーム/本番 SaaS
python
mcp = FastMCP("remote-server", transport="streamable-http")

if __name__ == "__main__":
    mcp.run(host="0.0.0.0", port=8000)

本番 HTTP Server には認証とガードレールが必要です。Bearer Token または API Key ミドルウェア、既知オリジンに限定した CORS、外部 API や DB に触れる Tool への レート制限 を設定してください。

MCP Inspector は主要デバッグ UI です。Server コマンドに対して起動し、Tool を対話的に呼び出し、JSON-RPC リクエスト/レスポンスを確認してからクライアントに接続します。

python
import pytest
from mcp.client.session import ClientSession
from mcp.client.stdio import StdioServerParameters, stdio_client

@pytest.mark.asyncio
async def test_calculator_tool():
    server_params = StdioServerParameters(
        command="python",
        args=["server.py"]
    )
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            result = await session.call_tool("calculate", {"expression": "2 + 2"})
            assert result.content[0].text == "4"
エラー原因対処
クライアントに Tool が見えない設定パスまたはコマンド誤りmcp.json / claude_desktop_config.json の絶対パスを確認
JSON シリアライズ失敗非シリアライズ可能な戻り値str または dict を返却、カスタムオブジェクトを避ける
タイムアウト切断同期 Tool 内のブロッキング I/Oasync 化、明示タイムアウトを追加
Permission deniedホワイトリスト外パス許可ディレクトリを明示設定
05

本番デプロイ、ナレッジベース事例、エコシステム、六ステップと KVMNODE

Hello World から本番へ進むには、コンテナ化、可観測性、バージョン交渉、実用価値を示す参照プロジェクトが必要です。以下の capstone は 個人ナレッジベース MCP Server — Cursor 内でローカル Markdown を意味検索する例です。

01

能力の棚卸し:Agent が必要とする DB クエリ、ファイル I/O、内部 API、ビルドトリガーを列挙し、読み取り専用か書き込みかをタグ付けします。

02

トランスポート選定:ローカル開発は STDIO、複数メンバーや CI Agent が同一 Server を共有する場合は HTTP+SSE と安定ホストを選びます。

03

実装と Schema:公式 SDK で Tool を登録し、全パラメータと戻り値に JSON Schema を記述します。

04

クライアント設定:Cursor mcp.json または Claude Desktop 設定に起動コマンドまたはリモート URL を記載し、必要な環境変数を文書化します。

05

発見と呼び出しテスト:tools/list で全カタログが返ることを確認し、サンプル tools/call チェーンで多段文脈が維持されるか検証します。

06

本番ホストへデプロイ:Docker でコンテナ化し、Railway/Render で素早く試すか、Cloud Run/Lambda でサーバーレス化するか、Apple ツールチェーン同居と 7×24 が要る場合は専有クラウド Mac を選びます。料金ページを参照してください。

デプロイ選択肢:Docker は Python 依存をきれいに包みます。Railway と Render は個人プロジェクト向けワンクリック展開。AWS Lambda と Google Cloud Run はバースト型サーバーレス向き。既存インフラがあるチームは VPS + Nginx リバースプロキシも有効です。構造化ログ、Tool 呼び出し数の Prometheus メトリクス、Sentry アラート、/health エンドポイントを追加し、ハンドシェイクで MCP プロトコル版と能力を交渉してアップグレード時にクライアントが段階的に縮退できるようにします。

ナレッジベースプロジェクト:ローカル Markdown を ChromaDB または Qdrant で索引し、text-embedding-3-small で埋め込み、watchfiles で変更を監視します。三つの Tool(索引作成、意味検索、ノート更新)と索引ファイル一覧 Resource を公開します。Cursor で「先週 MCP について何を書いた?」と聞けば、Agent が検索 Tool を呼び relevant な断片を返します。

コミュニティ Server能力
mcp-server-filesystemディレクトリ一覧、ファイル読み書き
mcp-server-githubIssue、PR、コード検索
mcp-server-brave-searchBrave API 経由 Web 検索
mcp-server-postgresパラメータ化 SQL クエリ
mcp-server-slackチャンネルメッセージ取得・投稿

2026年時点で主要 AI クライアントはネイティブ MCP 対応を標準装備しています。マーケットプレイスには数千の Server が掲載され、エンタープライズ採用が OAuth 2.0 認証標準と公開エンドポイントのセキュリティ監査を後押ししています。次の一歩は modelcontextprotocol.io で仕様を読み、最初の Server を公開し、Agent Skill と組み合わせて編成ワークフローを構築することです。

A

MCP エコシステム規模(2026):公開 MCP Server 数は 10,000 を超え、初期 HTTP Web 成長に匹敵するネットワーク効果が報告されています(openEuler / Jacar コミュニティ集計)。

B

統合コスト削減:MCP 標準化により、ベンダー別アダプタと比べ AI ツール統合開発コストが 38〜55% 削減されると業界分析(Atlan / WorkOS)で示されています。

C

参入障壁の低下:標準化された Tool インターフェースにより AI スタートアップの参入障壁が約 62% 低下、従来 SI のカスタム工数は約 43% 減少するという調査結果があります。

方式本番 MCP Server主な弱点
ノート PC + STDIOローカル開発が速い蓋を閉じると停止、7×24 不可
汎用 Linux VPSHTTP+SSE 展開可能Apple ツールチェーン非対応、iOS CI 不一致
サーバーレス(Lambda/Cloud Run)バースト向け低運用コールドスタート、ステートフル制限
KVMNODE クラウド Mac + MCP専有ノード、launchd、スナップショット復元レンタル計画が必要

選択肢を正直に並べると、主力 MacBook 上で HTTP+SSE を動かすと蓋を閉じた瞬間にプロセスが落ち、OS アップデートでも中断します。セッションアフィニティのないサーバーレスは多段 Agent 文脈を失いやすいです。認証なしで MCP エンドポイントを公開するとプロンプトインジェクションと不正 Tool 呼び出しを招き、2026年の監査では約 1,000 件の無保護 Server が索引化されています。Apple Silicon、7×24、MCP Server と iOS CI と Agent Gateway の分離が必要なチームには、KVMNODE で専有 Mac Mini M4 または M4 Pro をレンタルする構成が現実的です。日/週/月の柔軟課金、launchd 管理、スナップショットロールバック。料金ページで段階を比較し、手順は ヘルプセンター、MCP スタックに常時ホストが要る場合は 注文ページ からノート PC を閉じた後も稼働する環境を切り離せます。