C
Claude Academy
MCP

MCP (Model Context Protocol)

約 14 分 · クイズ 4 問 · 演習 2 問
重要キーワード (4 語)
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" }
    }
  }
}

主なトランスポート

  • stdio: ローカルプロセスを spawn (一番安全・速い)
  • SSE: リモートサーバーに HTTP+SSE 接続 (要認証)
  • HTTP: シンプルな REST 風 (新しめ)

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

  • github: PR・Issue・リポジトリ操作
  • filesystem: 任意のディレクトリ読み書き
  • postgres: SQL クエリ実行
  • brave-search: Web 検索
  • slack: メッセージ送受信
  • memory: 永続メモリ
  • puppeteer: ブラウザ自動操作

数百種類が公開されており、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

  • stdio: ローカルプロセスを spawn (一番安全)
  • SSE / HTTP: リモート MCP サーバーに接続 (要認証)

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

セキュリティ

  • 任意の MCP は 任意のコードに見える ので、信頼できる発行元のものだけを入れる。
  • 認証情報は環境変数経由で渡す。
  • 不要な MCP は無効化 (claude mcp disable <name>)。
  • MCP サーバー側で 権限スコープ を最小化 (read-only から始める)。

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 でも共通で使える

Hands-on 演習

演習 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 行で要約して」と依頼
▶ Playground を開いて実行
💡 ヒント

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

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

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

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

▶ Playground を開いて実行
💡 ヒント

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

進捗保存にはログインが必要 クイズに挑戦 (4問)

💬 このレッスンへの質問 (0)

全質問を見る →
質問の投稿には ログイン が必要です。閲覧は誰でも可能です。

まだ質問はありません。最初の 1 件を投稿してみましょう。