生成AI研修
Part 6: AI × 開発 応用

Chapter 34: MCP サーバー連携

Model Context Protocol による外部ツール統合

34.1 MCP(Model Context Protocol)とは

MCP(Model Context Protocol)は Anthropic が策定したAI モデルと外部ツールを接続するための標準プロトコルです。2024年末に公開され、現在は多くのツールベンダーが MCP サーバーを提供しています。

MCP が解決する問題:

  • これまで: AI に外部ツールを連携させるには各社が独自の統合を実装する必要があった
  • MCP 以降: 標準化されたインターフェースで、どの AI クライアントとも接続できる

MCP のアーキテクチャ

MCP が提供する機能

機能説明
ToolsAI が呼び出せる関数(ファイル操作・API 呼び出し等)
ResourcesAI が読み込めるデータソース(ファイル・DB・URL 等)
Prompts再利用可能なプロンプトテンプレート

34.2 標準 MCP サーバーの導入

Claude Code への MCP サーバー追加は claude mcp add コマンドで行います。

設定方法

# 1. ファイルシステム MCP サーバー(ローカルファイル操作)
claude mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem /path/to/workspace

# 2. GitHub MCP サーバー
claude mcp add github -- npx -y @modelcontextprotocol/server-github

# 3. Brave Search MCP サーバー
claude mcp add brave-search -- npx -y @modelcontextprotocol/server-brave-search

設定は ~/.claude/mcp_settings.json に保存されます:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"],
      "env": {}
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
      }
    }
  }
}

利用可能な主要 MCP サーバー一覧

MCP サーバー用途
@modelcontextprotocol/server-filesystemローカルファイル操作
@modelcontextprotocol/server-githubGitHub Issues/PR/コード
@modelcontextprotocol/server-slackSlack メッセージ送受信
@modelcontextprotocol/server-postgresPostgreSQL クエリ
@modelcontextprotocol/server-brave-searchWeb 検索
@modelcontextprotocol/server-puppeteerブラウザ操作

TODO: あとで実際のスクリーンショットに置き換え - claude mcp list の出力と、MCP サーバーが有効になった Claude Code の画面


34.3 Slack 連携

Slack MCP サーバーを使うと、Claude Code から直接 Slack にメッセージを送ったり、チャンネルの内容を参照したりできます。

セットアップ

# Slack Bot Token を環境変数に設定
export SLACK_BOT_TOKEN="xoxb-..."
export SLACK_TEAM_ID="T..."

claude mcp add slack -- npx -y @modelcontextprotocol/server-slack

活用例: 開発通知の自動化

PR マージ完了時に Slack の #dev-updates チャンネルに通知するワークフロー:

Claude Code に指示する例:

「feature/auth ブランチの PR をマージして、
 完了したら #dev-updates チャンネルに
 "✅ auth 機能をリリースしました。変更点: [変更概要]" を投稿してください」

Claude Code は以下を自動実行します:

  1. gh pr merge で PR をマージ
  2. Slack MCP の send_message ツールで通知

Slack MCP が提供するツール

ツール名機能
slack_list_channelsチャンネル一覧を取得
slack_get_channel_historyチャンネルの会話履歴を取得
slack_post_messageメッセージを投稿
slack_reply_to_threadスレッドに返信
slack_get_usersユーザー一覧を取得

34.4 GitHub / データベース連携

GitHub MCP による高度なワークフロー

GitHub MCP を使うと、Issues・PR・コードの操作を Claude Code から直接行えます。

# 環境変数の設定
export GITHUB_PERSONAL_ACCESS_TOKEN="ghp_..."

claude mcp add github -- npx -y @modelcontextprotocol/server-github

活用できる操作:

# Issue の自動トリアージ
「未対応の Issue を全て読んで、優先度(Critical/High/Medium/Low)を
 ラベルで付けてください。基準: セキュリティ > データ破損 > 機能バグ > 改善」

# PR 自動レビュー
「今週オープンされた PR を全て確認して、
 テストが不足しているものに review request コメントを残してください」

PostgreSQL MCP によるデータ操作

claude mcp add postgres -- npx -y @modelcontextprotocol/server-postgres \
  "postgresql://user:password@localhost:5432/mydb"

注意: 本番 DB への接続は読み取り専用ユーザーを使うこと。MCP サーバー経由で誤って本番データを書き換えるリスクがあります。

活用例:

# スロークエリの自動調査
「過去1週間のスロークエリログを分析して、
 インデックスの追加で改善できるクエリをリストアップしてください。
 改善案の SQL も合わせて提案してください」

34.5 Figma 連携(デザイン → コード)

Figma MCP サーバーを使うと、デザインデータを読み込んでコードを生成するデザイン→コード自動化が実現します。

セットアップ

Figma MCP は Claude Code に組み込まれています:

# claude_desktop_config.json または mcp_settings.json
{
  "mcpServers": {
    "figma": {
      "command": "npx",
      "args": ["-y", "@figma/mcp-server-figma"],
      "env": {
        "FIGMA_API_KEY": "${FIGMA_API_KEY}"
      }
    }
  }
}

使用例

Figma URL: https://figma.com/design/abc123/MyApp?node-id=1-2

「このノード(node-id: 1-2)をTailwind CSSを使ったReact コンポーネントに変換してください。
 - TypeScript 使用
 - Props は適切に型定義する
 - アクセシビリティ属性を付与する」

TODO: あとで実際のスクリーンショットに置き換え - Figma デザインとそこから生成された React コードの対比


34.6 カスタム MCP サーバーの作成

標準の MCP サーバーに存在しない社内ツールや独自サービスには、カスタム MCP サーバーを実装します。

実装例(TypeScript / Node.js)

// my-company-mcp/src/index.ts
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
  CallToolRequestSchema,
  ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";

const server = new Server(
  { name: "my-company-mcp", version: "1.0.0" },
  { capabilities: { tools: {} } }
);

// ツールの定義
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [
    {
      name: "get_deployment_status",
      description: "サービスのデプロイ状態を取得する",
      inputSchema: {
        type: "object",
        properties: {
          service: {
            type: "string",
            description: "サービス名(例: api, web, worker)",
          },
          environment: {
            type: "string",
            enum: ["staging", "production"],
          },
        },
        required: ["service", "environment"],
      },
    },
  ],
}));

// ツールの実装
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  if (request.params.name === "get_deployment_status") {
    const { service, environment } = request.params.arguments as {
      service: string;
      environment: string;
    };

    // 社内 API を呼び出す
    const response = await fetch(
      `https://deploy.internal.example.com/api/status/${environment}/${service}`
    );
    const data = await response.json();

    return {
      content: [
        {
          type: "text",
          text: JSON.stringify(data, null, 2),
        },
      ],
    };
  }

  throw new Error(`Unknown tool: ${request.params.name}`);
});

// サーバー起動
const transport = new StdioServerTransport();
await server.connect(transport);

登録とテスト

# ビルド
cd my-company-mcp && npm run build

# 登録
claude mcp add my-company -- node /path/to/my-company-mcp/dist/index.js

# 動作確認
claude mcp list
# → my-company: node /path/to/my-company-mcp/dist/index.js ✓

カスタム MCP の設計指針

  1. ツールは1機能1ツール: 複数の操作をまとめない
  2. 入力スキーマを厳密に: AI が正しいパラメータを渡せるよう required を明示する
  3. エラーを丁寧に返す: エラーメッセージが AI の自己修正に活用される
  4. べき等性を保つ: 同じ入力を何度呼ばれても安全な設計にする
  5. 読み取りと書き込みを分ける: 誤操作リスクを減らすため、書き込みツールは別に定義する

On this page