MCP (Model Context Protocol) 入門|Claude を社内ツールに繋ぐ実践ガイド

公開: 2026-05-09

この記事でわかること

  • MCP の設計思想 (USB-C of AI tools): なぜ「もう一つのプロトコル」が必要だったのか
  • MCP サーバーの最小実装 (TypeScript / Python の Hello World)
  • Claude Desktop / Claude Code から MCP サーバーを使う設定手順
  • 社内 DB / 社内 API / Slack 等への接続実例とセキュリティ考慮事項
  • 似た仕組み (OpenAI Tools, LangChain Tools) との違い

なぜ MCP が必要だったのか

AI モデルを「外部ツールと連携させる」仕組みは、これまで以下のような乱立状態でした:

  • OpenAI Function Calling: OpenAI モデル専用の関数呼出規格
  • LangChain Tools: LangChain フレームワーク内の抽象化
  • Anthropic Tool Use: Claude API での tool 規格
  • 各社独自の MCP もどき: ChatGPT Plugins, Microsoft Copilot Connectors, etc.

問題は 「サーバー側 (ツール提供側) を実装したのに、別のモデルでは使えない」 こと。Claude 用に実装した社内 DB ツールを、Cursor で使うには別実装が必要、という二重メンテナンスが頻発していました。

Anthropic は 2024 年末、これを解決するオープンプロトコル MCP (Model Context Protocol) を公開しました。設計思想は 「USB-C of AI tools」: 一度実装すれば、対応モデル / クライアントから等しく使える共通プロトコルです。

最小実装 (TypeScript で 30 行)

npm i @modelcontextprotocol/sdk
// weather-server.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: "weather", version: "0.1.0" },
  { capabilities: { tools: {} } },
);

server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [{
    name: "get_weather",
    description: "都市名を渡すと天気を返す (デモ)",
    inputSchema: {
      type: "object",
      properties: { city: { type: "string" } },
      required: ["city"],
    },
  }],
}));

server.setRequestHandler(CallToolRequestSchema, async (req) => {
  const city = req.params.arguments?.city ?? "";
  return {
    content: [{ type: "text", text: `${city} の天気: 晴れ (demo)` }],
  };
});

const transport = new StdioServerTransport();
await server.connect(transport);

これで動く MCP サーバーが完成。実行は tsx weather-server.ts (or node で transpile 後)。

Claude Desktop / Code で使う設定

Claude Desktop

~/.claude/claude_desktop_config.json (macOS) を編集:

{
  "mcpServers": {
    "weather": {
      "command": "npx",
      "args": ["tsx", "/path/to/weather-server.ts"]
    }
  }
}

Claude Desktop を再起動すると、UI 下部に「🔌 1 server」と表示され、@weather get_weather city=東京 のような形でツールが使えるようになります。

Claude Code

~/.claude/mcp.json または プロジェクトの .mcp.json に同じ形式で記述。claude mcp list でサーバーが認識されているか確認できます。

社内ツール連携の実例

例 1: 社内 DB の read-only クエリ

// company-db-mcp.ts (抜粋)
const PG_RO_URL = process.env.COMPANY_DB_RO_URL!;  // env で受け取る
const pool = new pg.Pool({ connectionString: PG_RO_URL });

server.setRequestHandler(CallToolRequestSchema, async (req) => {
  if (req.params.name === "query") {
    const sql = req.params.arguments?.sql as string;
    // SELECT のみ許可、それ以外は拒否
    if (!/^SELECT\b/i.test(sql.trim())) {
      throw new Error("Only SELECT statements are allowed");
    }
    const result = await pool.query(sql);
    return { content: [{ type: "text", text: JSON.stringify(result.rows) }] };
  }
});

ポイント:

  • 接続情報は env: Claude には絶対に渡さない
  • read-only ロール: PostgreSQL 側で専用 user を作って GRANT SELECT のみ
  • SQL の入力検証: 簡易ながら SELECT 以外を拒否
  • タイムアウト: 長時間クエリで DB を圧迫しないよう pool config で statement_timeout

例 2: Slack 投稿

公式 Slack MCP サーバーを使うのが最速:

{
  "mcpServers": {
    "slack": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-...",
        "SLACK_TEAM_ID": "T..."
      }
    }
  }
}

セットアップ後、Claude から「#dev-notify チャンネルに 'デプロイ完了' と投稿して」のような自然文で投稿できます。

例 3: GitHub 連携

@modelcontextprotocol/server-github で、PR 作成・issue コメント・リポジトリ検索などが Claude から使えます。社内開発の review 補助で重宝します。

OpenAI Tools / LangChain Tools との違い

観点OpenAI ToolsLangChain ToolsMCP
ベンダーOpenAI 専用フレームワーク依存オープン仕様
サーバー再利用×LangChain 内のみ◎ クライアント横断
標準化状況OpenAI 主導OSS だが LangChain 集中Anthropic 主導 + 公開仕様
認証クライアント側フレームワーク次第サーバー側 (推奨)
トランスポートHTTPPython 関数stdio / SSE / HTTP

MCP の最大の強みは 「サーバー側を 1 回書けば、対応する全クライアントから使える」 という相互運用性です。社内ツール提供側の労力を最小化できます。

セキュリティ考慮事項

社内ツール連携で守るべき 4 原則:

  1. 認証情報を Claude に渡さない: env var で MCP サーバー側に閉じる
  2. 権限分離: DB は read-only ロール、API は read-only スコープのトークン
  3. 削除系コマンドの hard-block: DELETE / DROP / rm -rf 等はサーバー側で拒否
  4. 監査ログ: いつ誰がどのツールを呼んだかを記録 (誤実行調査・セキュリティ監査)

加えて、社外公開する MCP サーバーは認証 (OAuth など) を実装する必要がありますが、社内向けなら stdio 経由で Claude Desktop に閉じるのが最も安全です。

学習を加速させるには

MCP は コードで触ってみないと感覚が掴めない プロトコルです。Hello World サーバーを実装してから、社内ツールを 1 つ繋いでみる流れが効果的。

次の手を動かす: バイブコーディング実践編で MCP の章を扱っています。提出物テンプレ + 採点ルーブリック付きの演習で、自分で MCP サーバーを実装して採点される体験ができます。 /lms/free/vibe-practice (4週間限定無料)

関連ガイド:

まとめ

  • MCP は AI モデルとツール間のオープンプロトコル
  • 一度サーバーを書けば Claude / Cursor / 他クライアントで再利用可能
  • 30 行で動く Hello World サーバー、設定は JSON 1 ファイル
  • 社内 DB / Slack / GitHub 連携が公式 MCP サーバーで即時可能
  • セキュリティの基本: 認証情報を Claude に渡さない、権限分離、監査ログ