← レッスンに戻る
第6章 · Claude Code応用

MCP (Model Context Protocol)

MCP · 約 14 分

重要キーワード

English日本語説明
MCP モデルコンテキストプロトコル AI とツール/データソースを繋ぐオープン標準
MCP Server MCP サーバー ツール・リソース・プロンプトを提供する側
MCP Client MCP クライアント Claude Code・Claude.ai などツールを使う側
stdio / SSE / HTTP 通信方式 MCP の主な接続トランスポート

MCP (Model Context Protocol)

MCPAI とツール/データソースを繋ぐオープン標準 プロトコル。 Anthropic が提唱し、現在は多くの IDE・エージェントが対応しています。

なぜ MCP?

LLM は単体では「外の世界」にアクセスできません。 従来は各社が 独自のツール定義 をしていたため、再利用性が低かった。 MCP は 共通インターフェース を提供し、サーバー (ツール側) を 1 度作れば多くのクライアントから使えます。

構成

[ Claude / IDE ]  <----- MCP -----> [ MCP Server ]
                                      ├ Tools (関数)
                                      ├ Resources (ファイル等)
                                      └ Prompts (テンプレ)

サーバーは 3 種類の「ケーパビリティ」を提供します: - Tools: Claude が呼べる関数 - Resources: Claude が読める静的・動的データ (ファイルや DB レコード) - Prompts: ユーザーが呼べる定型プロンプト

Claude Code への追加

claude mcp add github stdio "npx @modelcontextprotocol/server-github"

設定は ~/.claude/settings.jsonmcpServers に書かれます。

{
  "mcpServers": {
    "github": {
      "type": "stdio",
      "command": "npx",
      "args": ["@modelcontextprotocol/server-github"],
      "env": { "GITHUB_TOKEN": "$GITHUB_TOKEN" }
    }
  }
}

主なトランスポート

例: 公式・人気の MCP サーバー

数百種類が公開されており、https://github.com/modelcontextprotocol/servers で一覧が見られます。

自分で MCP サーバーを書く

Python の mcp SDK を使うと数行で書けます。

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("my-server")

@mcp.tool()
def echo(text: str) -> str:
    '''与えられた文字列をそのまま返す'''
    return text

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

クライアントから claude mcp add my-server stdio "python my_server.py" で接続。

Local vs Remote

社内サービスは HTTP MCP で公開、社員の Claude Code から共有利用するパターンが増えています。

セキュリティ

Claude.ai との互換性

claude.ai の Connectors も多くは MCP サーバーとして実装されているため、 自社で書いた MCP は Claude Code でもブラウザでも使える 二刀流が可能。

試す

MCP サーバーアイデアを Claude に出してもらいましょう。

▶ 自社向け MCP の設計
私たちは EC サイトを運営しています。社内で使える MCP サーバーのアイデアを 5 つ提案してください。各案に「提供する Tools / 想定ユーザー / 認証方式」を含めてください。

実用 MCP サーバー集 (セットアップ完全版)

MCP 1: GitHub MCP (PR・Issue 操作)

何ができる: PR レビュー、Issue 検索、コミット履歴調査、ファイル取得、リポジトリ作成 など。 Claude Code から GitHub にフルアクセス可能。

前提: 個人アクセストークン (PAT) — repo, read:org, read:user 程度が無難

追加コマンド:

claude mcp add github stdio "npx -y @modelcontextprotocol/server-github" -e GITHUB_TOKEN=ghp_xxx

使い方の例:

> https://github.com/anthropics/anthropic-sdk-python の最新 5 PR を要約して
> issue #42 にコメントして「LGTM、approve しました」と書いて
> このリポジトリの直近 10 コミットを著者別に集計

セキュリティ注意: - PAT は repo:read のみ にする (write が必要なら自分で打つ判断を) - 組織のリポジトリでは fine-grained PAT を使い、対象を絞る

MCP 2: Filesystem MCP (任意ディレクトリの読み書き)

何ができる: 指定ディレクトリ配下のファイルを Claude が読み書き。プロジェクト外のリソース (ドキュメント・参考資料) を参照させる用途。

claude mcp add fs stdio "npx -y @modelcontextprotocol/server-filesystem ~/Documents/specs ~/Documents/notes"

使い方の例:

> ~/Documents/specs/api-spec-v2.md を読んで、これに沿って実装して
> ~/Documents/notes 配下の設計メモから、認証関連だけ抽出して要約

注意: 引数で渡したパス だけ がアクセス可能。/etc~/.ssh を渡さないこと。

MCP 3: Notion MCP (社内 Wiki 連携)

何ができる: Notion のページを検索・読み込み・更新。チームの設計書や議事録を Claude に直接読ませる。

claude mcp add notion stdio "npx -y @notionhq/notion-mcp-server" -e NOTION_API_KEY=secret_xxx

Notion 側の設定: 1. https://www.notion.so/my-integrations でインテグレーション作成 2. 共有したい Page で「Connections」→ 作成したインテグレーションを追加 3. 取得した secret を環境変数で渡す

使い方の例:

> Notion の「設計レビュー 2026Q1」ページを読んで、未決議事項を Issue として GitHub に起票して

MCP 4: Slack MCP (メッセージ送受信)

何ができる: 特定チャンネルのメッセージ取得、メンション検索、メッセージ送信。

claude mcp add slack stdio "npx -y @modelcontextprotocol/server-slack" -e SLACK_BOT_TOKEN=xoxb-xxx -e SLACK_TEAM_ID=Txxx

Slack 側: 1. https://api.slack.com/apps で新規 App 2. Bot Token Scopes に channels:read, channels:history, chat:write 追加 3. ワークスペースに install → Bot User OAuth Token を取得

使い方:

> #general の最新 50 メッセージから、未対応の質問を抽出してリストにして
> #ops に「本日のデプロイ完了しました 🚀」と投稿

注意: write 権限を渡すと暴走時のリスクあり。最初は read-only スコープから始める。

MCP 5: PostgreSQL MCP (DB 直接操作)

何ができる: SQL クエリ実行、スキーマ確認。

claude mcp add pg stdio "npx -y @modelcontextprotocol/server-postgres postgresql://user:pass@localhost:5432/mydb"

使い方:

> users テーブルから直近 7 日のサインアップ数を日別に集計して
> orders テーブルのスキーマを確認し、何かおかしい箇所があれば指摘

⚠️ 強く推奨: read-only ユーザーで接続 すること:

CREATE USER claude_readonly WITH PASSWORD 'xxx';
GRANT CONNECT ON DATABASE mydb TO claude_readonly;
GRANT USAGE ON SCHEMA public TO claude_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_readonly;

→ Claude が誤って DROP TABLE を打っても DB が無事。


自作 MCP サーバー (FastMCP, 30 行)

社内専用サービスとつなぐ MCP を Python で書いてみる:

# my_server.py
from mcp.server.fastmcp import FastMCP
import requests
import os

mcp = FastMCP("my-internal-tools")

@mcp.tool()
def get_user_status(user_id: str) -> dict:
    """社内ユーザーシステムからユーザーの状態を取得"""
    r = requests.get(
        f"https://internal.example.com/api/users/{user_id}",
        headers={"Authorization": f"Bearer {os.environ['INTERNAL_API_TOKEN']}"},
        timeout=10,
    )
    r.raise_for_status()
    return r.json()

@mcp.tool()
def search_tickets(query: str, limit: int = 10) -> list[dict]:
    """社内チケットシステムを検索"""
    r = requests.get(
        "https://tickets.example.com/api/search",
        params={"q": query, "limit": limit},
        headers={"Authorization": f"Bearer {os.environ['TICKETS_API_TOKEN']}"},
        timeout=10,
    )
    return r.json()["results"]

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

登録:

claude mcp add my-internal stdio "python /path/to/my_server.py" \
  -e INTERNAL_API_TOKEN=xxx \
  -e TICKETS_API_TOKEN=yyy

これで /mcp 一覧に my-internal が出て、Tools に get_user_statussearch_tickets が表示される。


MCP 運用のベストプラクティス

観点 推奨
認証 環境変数経由 (-e KEY=VALUE)、settings.json には書かない
スコープ 最小権限から始める (read-only → write は別途)
信頼 公式 / 著名 OSS のみ。野良 MCP に PAT を渡さない
監査 ~/.claude/mcp-logs/ に通信ログを残す設定を
障害 MCP が落ちると Claude のターンも長くなるので timeout を短めに

💡 claude.ai の Connectors も多くは MCP サーバーの実装。自社で書いた MCP は Claude Code でもブラウザの Claude でも共通で使える

演習問題

演習 1: github MCP を追加して PR を要約

公式の github MCP サーバーを Claude Code に追加し、特定リポジトリのオープン PR を一覧 → 要約させてください。

  1. GITHUB_TOKEN (個人アクセストークン, repo 権限) を取得
  2. claude mcp add github stdio "npx -y @modelcontextprotocol/server-github" -e GITHUB_TOKEN=$GITHUB_TOKEN
  3. Claude Code で「/ の最新 PR を 5 件、それぞれ 1 行で要約して」と依頼
スタータープロンプト:
<owner>/<repo> の現在オープンな PR を最大 5 件取得し、それぞれ 1 行で要約してください。重要度の高いものを上に。
ヒントを見る

GitHub Token は個人アクセストークン (PAT) の最小権限 (repo:read) で作成すると安全。-e フラグで環境変数を MCP に渡せます。

演習 2: FastMCP で hello サーバーを書く

Python で 30 行程度の MCP サーバーを書いてください。 - ツール hello(name: str) → "Hello, {name}!" を返す - ツール now() → 現在時刻 ISO8601

Claude Code に登録して動作確認。

スタータープロンプト:
FastMCP (mcp Python SDK) で 30 行以内の MCP サーバーを書いてください。
- @mcp.tool() で hello(name) と now() を提供
- stdio で起動
- mcp パッケージは pip install mcp で入る前提
ヒントを見る

pip install mcp でインストール。from mcp.server.fastmcp import FastMCP の API はシンプルで、Python の関数に @mcp.tool() を付けるだけで Tool になります。

理解度チェック

  1. MCP の正式名称は?
    1. Model Context Protocol
    2. Multi Client Pipeline
    3. Modular Code Plugin
    4. Memory Caching Process
  2. MCP の利点として正しくないのは?
    1. ツール実装の再利用性
    2. AI とデータソースの標準的接続
    3. オープン仕様
    4. GPU 不要で動く保証
  3. ローカルプロセスとして起動する MCP の transport は?
    1. stdio
    2. SSE
    3. WebRTC
    4. FTP
  4. MCP サーバーが提供する 3 種類のケーパビリティは?
    1. Tools / Resources / Prompts
    2. Hooks / Skills / Agents
    3. Models / APIs / Clients
    4. Read / Write / Execute
解答と解説を見る
  1. A — Model Context Protocol の略です。
  2. D — GPU 不要保証は MCP の機能ではありません。
  3. A — stdio はローカル spawn で最もシンプル安全な方式です。
  4. A — Tools (関数), Resources (データ), Prompts (テンプレ) の 3 種類。