CC学校

Deep dive · MCP

外の世界に、
を作る。

MCP(Model Context Protocol)は、Claude が外部システムと話すための共通語。Slack でも DB でも社内 API でも、同じ手順で接続できます。

01 / Concept

MCP は「ツール」をプラグイン可能にする標準

サーバ側がツール/リソース/プロンプトを公開し、Claude 側はそれを自分のツールキットに追加できる。

Claude 自身は内部に Read / Edit / Bash 等のツールを持っています。MCP はそこに「外部の世界のツール」を後から差し込む仕組み。 Slack 投稿・DB クエリ・ブラウザ操作も、Claude にとっては同じ「ツール呼出」になります。

02 / Transports

4 つの伝送方式を選ぶ

ローカルで動くか、リモートか、SDK 内か。それぞれメリット/使いどころが異なります。

stdio

transport

ローカルで子プロセスを起動。標準入出力で JSON-RPC。

best for

  • ローカルツール
  • 開発環境
  • 認証が要らない or env で渡せる
claude mcp add github -- npx -y @modelcontextprotocol/server-github

HTTP

transport

リモートの HTTP エンドポイント。ヘッダ認証や OAuth。

best for

  • SaaS
  • 社内 API
  • OAuth で配布
claude mcp add --transport http jira https://mcp.jira.example

SSE

transport

Server-Sent Events。HTTP 派生で長時間接続向け。

best for

  • push 通知
  • 長時間ストリーム
claude mcp add --transport sse notify https://mcp.example/sse

SDK

transport

Agent SDK の中で `createSdkMcpServer()` で同プロセス内に持つ。

best for

  • SDK アプリ内ツール
  • 型安全な定義
  • プロセス境界を増やしたくない
// SDK 内で createSdkMcpServer({ tools: [...] })

03 / Scope

3 つのスコープ、上が勝つ

同じ MCP サーバ名がローカル/プロジェクト/ユーザーで重なった場合、より local 側が優先されます。

scope hierarchy

MCP / 設定の解決順は local → project → user

名前が同じ MCP サーバ/設定が複数のスコープにある場合、上位(local)が勝ちます。配列はマージ、スカラーは上書き。

LocalProjectUserlocal wins

example for Project

チームの権限ルール、プロジェクト共通 MCP

04 / Auth

OAuth / API キー / 動的ヘッダ

リモート MCP の認証は OAuth がメイン。固定ポート、メタデータ上書き、スコープ制限が選べます。

.mcp.json (project スコープ)
{
  "mcpServers": {
    "jira": {
      "transport": "http",
      "url": "https://mcp.jira.example",
      "auth": {
        "type": "oauth",
        "callbackPort": 9876,
        "scopes": ["read:issues", "write:issues"]
      }
    },
    "internal-api": {
      "transport": "http",
      "url": "https://api.corp.example/mcp",
      "headers": {
        "X-Internal-Token": "${INTERNAL_TOKEN}"
      }
    }
  }
}

Tool Search はデフォルト ON。`/mcp` で各サーバの token cost を見られるので、idle MCP の負荷を可視化できます。 サーバ作者側は、ツール数が多いなら検索しやすい命名・説明にすると Claude のヒット率が上がります。

06 / Channels

Channels — push 通知できる MCP

Telegram / Discord / iMessage に届いたメッセージを、走っている Claude に流し込める。離席中の対話に使える。

Channels は MCP の双方向版。Claude は外部から push されたイベントに反応できますし、同じチャンネルに返信もできます。 モバイルからの軽い指示、夜間バッチの完了通知に応答、などの使い方に。

  • GitHubstdio / HTTP

    Issue / PR / レビューコメントを直接読み書き

  • SlackHTTP

    DM / チャンネル投稿、検索

  • Postgresstdio

    SQL クエリと explain

  • SentryHTTP

    エラー一覧と stack trace

  • Linear / JiraHTTP

    チケットの作成・更新・検索

  • Browserstdio

    Chrome 拡張経由でブラウザを操作

08 / Managed

Managed MCP — 組織で許可リスト配布

ユーザーが勝手にどんな MCP でも繋げると統制できないので、組織として allowlist / denylist を配布できます。

managed-mcp.json
{
  "allowedMcpServers": {
    "github": { "transport": "stdio", "command": "npx -y @modelcontextprotocol/server-github" },
    "internal": { "transport": "http", "url": "https://mcp.corp.example" }
  },
  "deniedMcpServers": [
    "*://*.unknown-domain/*"
  ]
}