Claude Code MCP入門:47体のAIエージェントに「外部ツールの手足」を与えた全記録
MCPとは何か——AIに「手足」を生やすプロトコル
Claude Codeは賢い。だが、素の状態では「頭だけの存在」だ。ファイルの読み書きとシェルコマンドの実行はできるが、Slack、Notion、GitHub Issues、データベース、外部APIと直接やり取りする手段を持たない。
この制約を根本から解決するのが**MCP(Model Context Protocol)**である。
MCPは、AIモデルと外部ツールをつなぐオープンプロトコルだ。Claude Codeに「MCPサーバー」を接続すると、AIがそのツールのAPIを直接呼び出せるようになる。ブラウザでポチポチ操作していた作業を、AIが自律的に実行できるようになるということだ。
私が運営する47名のAIエージェント会社「Altus」では、MCPの導入前後で業務の自動化率が劇的に変わった。具体的にどう設定し、何が起きたかを記録する。
MCPの仕組みを30秒で理解する
構造はシンプルだ。
Claude Code(クライアント)
↕ JSON-RPC over stdio/SSE
MCPサーバー(ツールごとに1プロセス)
↕
外部サービス(Slack, GitHub, DB, etc.)
MCPサーバーは「ツール一覧」と「各ツールの実行エンドポイント」を公開する。Claude Codeはその一覧を読み取り、必要に応じてツールを呼び出す。人間が「Slackに投稿して」と指示すれば、AIが適切なMCPツールを選んで実行する。
重要なのは、MCPサーバーはただのプロセスであるという点だ。Node.jsでもPythonでも書ける。既存のnpmパッケージも豊富に公開されている。
実際の設定方法:3ステップで外部ツールと接続する
ステップ1:MCPサーバーを追加する
Claude Codeには claude mcp add コマンドが用意されている。例えばGitHub連携なら以下の通りだ。
claude mcp add github -- npx -y @modelcontextprotocol/server-github
これだけでGitHub MCPサーバーが登録される。環境変数でトークンを渡す場合は -e フラグを使う。
claude mcp add github \
-e GITHUB_PERSONAL_ACCESS_TOKEN=ghp_xxxxxxxxxxxx \
-- npx -y @modelcontextprotocol/server-github
ステップ2:設定ファイルを確認する
登録したMCPサーバーは ~/.claude.json に記録される。直接編集も可能だ。
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxx"
}
}
}
}
プロジェクト単位で管理したい場合は、リポジトリルートに .mcp.json を置く。
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost:5432/mydb"]
}
}
}
ステップ3:動作確認
Claude Codeを起動して /mcp と入力する。接続中のMCPサーバーとツール一覧が表示される。
> /mcp
GitHub (connected)
Tools: create_issue, search_repositories, get_file_contents, ...
PostgreSQL (connected)
Tools: query, list_tables, describe_table, ...
ステータスが connected になっていれば準備完了だ。あとは自然言語で指示するだけでAIがツールを使い分ける。
Altusで実際に接続している5つのMCPサーバー
47体のエージェントを運用する中で、特に効果が高かったMCP構成を共有する。
1. GitHub MCP — コードレビュー自動化
claude mcp add github \
-e GITHUB_PERSONAL_ACCESS_TOKEN=$GITHUB_TOKEN \
-- npx -y @modelcontextprotocol/server-github
エージェント「レビュアー」がPRの差分を読み、Issueにコメントを書き、ラベルを付ける。人間のレビュー待ち時間がゼロになった。
2. PostgreSQL MCP — データ分析の自律実行
claude mcp add postgres \
-- npx -y @modelcontextprotocol/server-postgres \
"postgresql://readonly:pass@db.example.com:5432/analytics"
「先月のユーザー離脱率をコホート別に出して」と指示すると、AIがテーブル構造を確認し、SQLを組み立て、結果を整形して返す。読み取り専用ユーザーで接続しているため、誤ってデータを壊すリスクもない。
3. Filesystem MCP — ドキュメント横断検索
claude mcp add docs \
-- npx -y @modelcontextprotocol/server-filesystem \
/home/altus/knowledge-base
社内ナレッジベースのMarkdownファイル群を丸ごと参照可能にしている。新しいエージェントの立ち上げ時に「過去の議事録から類似案件を探して」と指示すると、関連ファイルを自動で見つけてくる。
4. Fetch MCP — 外部API呼び出し
claude mcp add fetch \
-- npx -y @modelcontextprotocol/server-fetch
任意のURLにHTTPリクエストを送れるようになる。REST APIのレスポンスを解析したり、Webページの内容を取得してまとめたりする用途で多用している。
5. Slack MCP(カスタム) — 日報の自動投稿
公式パッケージが要件に合わなかったため、自前でMCPサーバーを書いた。TypeScriptで約120行だ。
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "slack-poster",
version: "1.0.0",
});
server.tool(
"post_message",
"Slackチャンネルにメッセージを投稿する",
{
channel: z.string().describe("チャンネルID"),
text: z.string().describe("投稿するメッセージ本文"),
},
async ({ channel, text }) => {
const res = await fetch("https://slack.com/api/chat.postMessage", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.SLACK_BOT_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ channel, text }),
});
const data = await res.json();
return { content: [{ type: "text", text: JSON.stringify(data) }] };
}
);
const transport = new StdioServerTransport();
await server.connect(transport);
claude mcp add slack-poster \
-e SLACK_BOT_TOKEN=$SLACK_BOT_TOKEN \
-- node /home/altus/mcp-servers/slack-poster.mjs
毎日18時に「日報担当」エージェントが各チームの進捗をまとめてSlackに投稿する。手動の日報作成が完全に不要になった。
MCPを導入して気づいた3つの落とし穴
1. 権限の渡しすぎに注意
MCPで接続したツールは、AIが自律的に呼び出す。データベースにフルアクセス権を与えると、DELETEクエリを実行するリスクがある。必ず読み取り専用ユーザーや制限付きトークンを使うべきだ。Altusではすべてのデータベース接続をREAD ONLYに限定している。
2. MCPサーバーの起動失敗はサイレントに起きる
サーバーがクラッシュしてもClaude Code側にはエラーが表示されないことがある。/mcp で定期的にステータスを確認する習慣をつけるか、claude mcp serve でデバッグモードを使うとよい。
# トラブルシューティング:サーバーを直接実行して確認
npx -y @modelcontextprotocol/server-github 2>&1
3. ツールが多すぎるとAIが迷う
10個以上のMCPサーバーを同時接続したとき、AIが不適切なツールを選ぶ頻度が上がった。プロジェクトごとに必要なMCPだけを .mcp.json で定義し、スコープを絞ることで精度が改善した。
MCPのスコープ設計:グローバル vs プロジェクト vs ユーザー
Claude CodeのMCP設定には3つのスコープがある。
| スコープ | 設定場所 | 用途 |
|---|---|---|
| グローバル | ~/.claude.json |
全プロジェクト共通で使うツール |
| プロジェクト |
.mcp.json(リポジトリルート) |
チーム共有・プロジェクト固有 |
| ユーザーローカル | .claude/local.json |
個人のトークンを含む設定(gitignore推奨) |
Altusでは以下のように使い分けている。
- グローバル:Fetch MCP(汎用的なHTTPクライアント)
- プロジェクト:GitHub MCP、PostgreSQL MCP(リポジトリごとに対象が異なる)
- ユーザーローカル:個人のAPIトークンを含む設定
.mcp.json はGit管理に含めてチームで共有し、トークン類は環境変数で注入するのが安全な運用パターンだ。
まとめ:MCPはAIエージェントの「行動範囲」を決める
MCPを導入する前、Altusのエージェントは「コードを書く」「ファイルを整理する」が限界だった。MCP導入後は「Slackに報告する」「DBを調べる」「GitHubでIssueを管理する」まで自律的にこなすようになった。
MCPは難しい技術ではない。claude mcp add の1コマンドで始められる。だが、AIエージェントの実用性を根本的に変える。
まずはGitHub MCPかFilesystem MCPを1つ追加してみるところから始めるのが良い。AIが外部ツールを使い始めた瞬間、「ああ、これは単なるチャットボットではないな」と実感するはずだ。
Discussion