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 Tools | LangChain Tools | MCP |
|---|---|---|---|
| ベンダー | OpenAI 専用 | フレームワーク依存 | オープン仕様 |
| サーバー再利用 | × | LangChain 内のみ | ◎ クライアント横断 |
| 標準化状況 | OpenAI 主導 | OSS だが LangChain 集中 | Anthropic 主導 + 公開仕様 |
| 認証 | クライアント側 | フレームワーク次第 | サーバー側 (推奨) |
| トランスポート | HTTP | Python 関数 | stdio / SSE / HTTP |
MCP の最大の強みは 「サーバー側を 1 回書けば、対応する全クライアントから使える」 という相互運用性です。社内ツール提供側の労力を最小化できます。
セキュリティ考慮事項
社内ツール連携で守るべき 4 原則:
- 認証情報を Claude に渡さない: env var で MCP サーバー側に閉じる
- 権限分離: DB は read-only ロール、API は read-only スコープのトークン
- 削除系コマンドの hard-block: DELETE / DROP / rm -rf 等はサーバー側で拒否
- 監査ログ: いつ誰がどのツールを呼んだかを記録 (誤実行調査・セキュリティ監査)
加えて、社外公開する MCP サーバーは認証 (OAuth など) を実装する必要がありますが、社内向けなら stdio 経由で Claude Desktop に閉じるのが最も安全です。
学習を加速させるには
MCP は コードで触ってみないと感覚が掴めない プロトコルです。Hello World サーバーを実装してから、社内ツールを 1 つ繋いでみる流れが効果的。
次の手を動かす: バイブコーディング実践編で MCP の章を扱っています。提出物テンプレ + 採点ルーブリック付きの演習で、自分で MCP サーバーを実装して採点される体験ができます。 /lms/free/vibe-practice (4週間限定無料)
関連ガイド:
- Claude Code 入門 — CLI 環境構築
- AI Agent SDK 入門 — Agent SDK と MCP の組合せ
- バイブコーディングとは — AI ペアプロの基礎
- Claude Code チュートリアル — 実例タスク 5 つ
- Claude Code vs Cursor 比較 — MCP と組み合わせるエディタ選択
- Claude Code vs GitHub Copilot 比較 — Copilot との比較
- Claude Code セキュリティガイド — MCP サーバー実装時のセキュリティ統制
- Anthropic Academy vs 実装力定着型研修 — MCP 学習の概念入門と実装演習
まとめ
- MCP は AI モデルとツール間のオープンプロトコル
- 一度サーバーを書けば Claude / Cursor / 他クライアントで再利用可能
- 30 行で動く Hello World サーバー、設定は JSON 1 ファイル
- 社内 DB / Slack / GitHub 連携が公式 MCP サーバーで即時可能
- セキュリティの基本: 認証情報を Claude に渡さない、権限分離、監査ログ