TL;DR: MCP(Model Context Protocol)は Claude Code を外部ツールと接続する拡張レイヤーです。
~/.claude/settings.jsonに数行追加するだけで GitHub PR 操作・Slack 通知・DB クエリを Claude Code から直接実行できます。本記事では既製サーバーの追加手順から自作の最小構成、セキュリティ境界の設計指針まで実践コードとともに解説します。
はじめに:MCP が Claude Code を変える理由
本記事は Claude Code セットアップ2026 シリーズの一部です。基本セットアップを完了した後、MCP で外部ツールと接続して Claude Code の能力を大幅に拡張する手順を解説します。
Claude Code の標準機能は「コードを読み書きする」ことですが、実際の開発業務はそれだけでは終わりません。
- GitHub で PR を作成・マージする
- Slack でチームに進捗を通知する
- PostgreSQL のテーブル定義を確認しながらコードを書く
- Jira のチケットをステータス更新する
これらを毎回手動でやっていませんか? MCP(Model Context Protocol) を使えば、これらすべてを Claude Code のセッションから操作できます。
MCP は Anthropic が2024年11月に公開したオープンな標準規格です(公式仕様)。「AI クライアントが外部ツールと通信するための共通プロトコル」として設計されており、2026年現在は GitHub・Slack・PostgreSQL・Filesystem など主要サービスの公式 / コミュニティ MCP サーバーが揃っています。
プロトコルレベルの詳細はMCP実装ガイドに委ねますが、本記事では Claude Code ユーザーが「今日から使える」実践パターンに絞って解説します。
MCP の仕組みを3分で理解する
MCP のアーキテクチャは3つのコンポーネントで構成されます。
┌─────────────────────┐ MCP Protocol ┌──────────────────┐
│ Claude Code │◄────────────────────►│ MCP Server │
│ (MCP Client) │ JSON-RPC over │ (GitHub, Slack, │
│ │ stdio / SSE │ DB, etc.) │
└─────────────────────┘ └──────────────────┘
│
┌────────▼─────────┐
│ External Service │
│ (API / Database) │
└──────────────────┘
MCP Client(Claude Code): ツールを「呼び出す側」。利用可能なツール一覧を MCP サーバーに問い合わせ、必要なときに実行します。
MCP Server: 外部サービスへの操作を「ツール」として提供する中間層。list_tools と call_tool の2つのエンドポイントを持ちます。
トランスポート: stdio(ローカルプロセス)と SSE(リモートサーバー)の2種類があります。Claude Code では主に stdio 方式を使います。
MCP の重要な点は tool の定義が JSON Schema ベースであることです。Claude は tool の説明とスキーマを読み取り、いつどの tool を使うかを自律的に判断します。
MCP サーバーを Claude Code に追加する手順
設定ファイルの場所
Claude Code の MCP 設定は ~/.claude/settings.json(グローバル)または .claude/settings.json(プロジェクトローカル)で管理します。プロジェクトごとに異なる MCP サーバーを使いたい場合はローカル設定を推奨します。
{
"mcpServers": {
"サーバー名": {
"command": "起動コマンド",
"args": ["引数"],
"env": {
"環境変数名": "値"
}
}
}
}
基本的な追加手順
- MCP サーバーパッケージをインストール
settings.jsonに設定を追加- Claude Code を再起動(または
/mcpコマンドで再読み込み) @mcpでツール一覧を確認
以下、主要サーバーの設定例を示します。
既製 MCP サーバーの実践例
1. GitHub 連携(PR 操作・Issue 管理)
GitHub MCP サーバーを使うと、PR 作成・レビュー・マージ、Issue の作成・更新、ブランチ操作などを Claude Code から直接実行できます。
インストール
npm install -g @modelcontextprotocol/server-github
設定(~/.claude/settings.json)
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxx"
}
}
}
}
使用例
Claude Code セッション内で次のように指示できます。
今開いている PR #123 のレビューコメントをすべて確認して、対応が必要な指摘を教えて
feature/new-login ブランチで main 向けに PR を作成して。タイトルは「feat: ログイン機能追加」で
GitHub MCP サーバーが提供する主なツール(公式実装準拠):
| ツール名 | 説明 |
|---|---|
create_pull_request | PR 作成 |
list_pull_requests | PR 一覧取得 |
merge_pull_request | PR マージ |
create_issue | Issue 作成 |
search_repositories | リポジトリ検索 |
get_file_contents | ファイル内容取得 |
2. Slack 連携(通知・メッセージ送受信)
Slack MCP サーバーを使うと、チャンネルへのメッセージ送信、スレッド返信、メッセージ検索などを Claude Code から操作できます。
設定(~/.claude/settings.json)
{
"mcpServers": {
"slack": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-slack"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-xxxxxxxxxxxx",
"SLACK_TEAM_ID": "T0XXXXXXXXX"
}
}
}
}
Slack Bot Token は Slack API ページ でアプリを作成し、chat:write・channels:read・messages:read スコープを付与して取得します(公式値: Slack API OAuth スコープ)。
使用例
#dev チャンネルにデプロイ完了の通知を送って
昨日の #incident チャンネルのメッセージを要約して
3. データベース連携(PostgreSQL)
PostgreSQL MCP サーバーを使うと、スキーマ確認・クエリ実行・テーブル定義の参照を Claude Code からできます。コードを書きながらテーブル構造をその場で確認できるため、ORM のモデル定義ミスを防げます。
設定(~/.claude/settings.json)
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://localhost:5432/mydb"
]
}
}
}
セキュリティ注意(経験則): 本番DBへの接続は避け、読み取り専用ユーザーを専用に作成することを強く推奨します。後述のセキュリティ設計を参照してください。
使用例
users テーブルのスキーマを確認して、last_login カラムを追加するマイグレーションを書いて
4. ファイルシステム操作
Filesystem MCP サーバーを使うと、指定ディレクトリ配下のファイル操作(読み書き・ディレクトリ作成・削除)を許可された範囲内で実行できます。Claude Code のデフォルトのファイルアクセスより細かいスコープ制御が可能です。
設定(~/.claude/settings.json)
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/username/projects",
"/tmp/claude-workspace"
]
}
}
}
引数に許可するディレクトリパスを列挙します。複数指定可能です。
主要 MCP サーバー一覧(カテゴリ別)
2026年現在、公式サーバーリポジトリで管理されている主要サーバーは以下の通りです。
| カテゴリ | サーバー名 | 主な機能 |
|---|---|---|
| バージョン管理 | @modelcontextprotocol/server-github | PR/Issue/リポジトリ操作 |
| コミュニケーション | @modelcontextprotocol/server-slack | メッセージ送受信・検索 |
| データベース | @modelcontextprotocol/server-postgres | スキーマ確認・クエリ実行 |
| データベース | @modelcontextprotocol/server-sqlite | SQLite ローカル DB 操作 |
| ファイル | @modelcontextprotocol/server-filesystem | ファイル読み書き |
| 検索 | @modelcontextprotocol/server-brave-search | Web 検索 |
| メモリ | @modelcontextprotocol/server-memory | セッション横断メモリ |
| 時刻 | @modelcontextprotocol/server-time | 現在時刻・タイムゾーン |
| Fetch | @modelcontextprotocol/server-fetch | HTTP リクエスト |
コミュニティ製サーバーは mcp.so や awesome-mcp-servers にカタログ化されています。
MCP サーバーを自作する最小構成
既製サーバーでカバーできない社内システムや独自 API には自作が必要です。Node.js(TypeScript)での最小構成を示します。
前提: @modelcontextprotocol/sdk を使います(公式 SDK ドキュメント)。
npm install @modelcontextprotocol/sdk
最小構成(server.ts)
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
ListToolsRequestSchema,
CallToolRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";
const server = new Server(
{ name: "my-custom-server", version: "1.0.0" },
{ capabilities: { tools: {} } }
);
// ツール一覧を返す
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [
{
name: "get_user_info",
description: "社内ユーザー情報を取得する",
inputSchema: {
type: "object",
properties: {
user_id: { type: "string", description: "ユーザーID" },
},
required: ["user_id"],
},
},
],
}));
// ツールを実行する
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "get_user_info") {
const userId = request.params.arguments?.user_id as string;
// 社内 API への実際の呼び出し
const user = await fetchInternalUser(userId);
return {
content: [{ type: "text", text: JSON.stringify(user) }],
};
}
throw new Error(`Unknown tool: ${request.params.name}`);
});
async function fetchInternalUser(userId: string) {
// 実際の実装
return { id: userId, name: "John Doe", team: "Engineering" };
}
// stdio トランスポートで起動
const transport = new StdioServerTransport();
await server.connect(transport);
Claude Code への設定
{
"mcpServers": {
"my-custom-server": {
"command": "node",
"args": ["/path/to/dist/server.js"]
}
}
}
自作サーバーの判断軸は「社内固有システム・複数エージェントでの共通利用・認可境界の明確化」が必要な場合です。それ以外は既製サーバーで対応できます(詳細はMCP実装ガイド参照)。
セキュリティ境界の設計指針
MCP は Claude Code の能力を大幅に拡張しますが、誤った設定はセキュリティリスクになります。
最小権限の原則
各 MCP サーバーには必要最小限の権限のみ付与します。
{
"mcpServers": {
"github-readonly": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxx"
}
}
}
}
GitHub トークンのスコープ例(経験則):
| 用途 | 推奨スコープ |
|---|---|
| コードレビュー補助のみ | repo:read |
| PR 作成まで | repo |
| Issue 操作まで | repo, issues |
破壊的操作には承認ゲートを設ける
Claude Code Hooks と組み合わせて、破壊的操作(DELETE・merge・drop table)の前に確認プロンプトを挟む設計を推奨します(Hooks 実践ガイド参照)。
{
"hooks": {
"PreToolUse": [
{
"matcher": "mcp__github__merge_pull_request",
"hooks": [
{
"type": "command",
"command": "echo 'PR マージを実行します。よろしいですか? (yes/no)' && read confirm && [ \"$confirm\" = 'yes' ]"
}
]
}
]
}
}
環境変数の管理
API トークンを settings.json に直書きするのはリスクがあります。以下の方法を推奨します。
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}
シェルの環境変数 GITHUB_TOKEN を Claude Code 起動前に設定しておくことで、トークンをファイルに書かずに済みます。.env ファイルと direnv の組み合わせも有効です。
プロジェクトローカル設定と gitignore
プロジェクトローカルの .claude/settings.json にトークンを書く場合は必ず .gitignore に追加します。
echo ".claude/settings.json" >> .gitignore
MCP でできること / できないこと
| できること | できないこと |
|---|---|
| 外部サービス API の呼び出し | Claude 自身の内部状態の変更 |
| ファイル読み書き(許可済みパスのみ) | ネットワーク外へのアクセス(ファイアウォール依存) |
| DB クエリ実行 | MCP サーバー自体のコード変更(設定のみ) |
| シェルコマンド実行(サーバー設計次第) | 他の MCP サーバーのツールの直接呼び出し |
まとめ・次のステップ
Claude Code と MCP の組み合わせで実現できることを整理します。
- 既製サーバーを追加するだけで GitHub・Slack・DB との連携が即座に可能
- 設定は
settings.jsonの数行で完結(コマンド1本のインストール不要なケースも多い) - 自作サーバーは SDK を使えば最小100行以下で動かせる
- セキュリティ設計は最小権限・承認ゲート・環境変数管理の3原則を守る
今すぐ試せるアクション: まず GitHub MCP サーバーを1つ追加してみてください。PR 一覧の確認から始めるだけでも、Claude Code の使い方が大きく変わります。
このシリーズについて
本記事は「Claude Code セットアップ2026」シリーズの一部です。シリーズ全体は Claude Code セットアップ2026 からご覧いただけます。インストールから CLAUDE.md・Hooks・MCP・失敗パターンまで体系的に解説しています。
関連記事
- MCP実装ガイド:自前サーバの設計と認可境界 — MCP プロトコルレベルの詳細設計
- Claude Code Hooks 実践 — MCP と組み合わせた自動化パターン
- AI ペアプログラミングのパターン — Claude Code の実践的な活用パターン
- AI駆動の開発計画 — エージェントを使った開発フロー全体像
FAQ
Q. MCP と Claude Code の関係は何ですか?
MCP は Claude Code を外部ツールと接続するためのオープン標準プロトコルです。Claude Code は MCP クライアントとして動作し、GitHub・Slack・DB などの MCP サーバーのツールを呼び出せます。MCP なしの Claude Code はコード編集専用ですが、MCP 追加後は外部サービス操作も統合されます。
Q. Claude Code に MCP サーバーを追加するにはどうすればよいですか?
~/.claude/settings.json(または .claude/settings.json)の mcpServers セクションに、サーバー名・起動コマンド・引数・環境変数を記述します。多くのサーバーは npx -y <package-name> で起動できます。設定後、Claude Code を再起動すれば自動的に接続されます。
Q. MCP サーバーを自作するのは難しいですか?
@modelcontextprotocol/sdk を使えば、最小構成は TypeScript 約100行で動かせます。ListTools ハンドラーでツール定義を返し、CallTool ハンドラーでツールを実行するだけです。難しいのはツールの設計(何をツールとして切り出すか)であり、実装自体はシンプルです。
Q. MCP を使う際のセキュリティリスクは何ですか?
主なリスクは「過剰な権限付与」「API トークンの平文保存」「破壊的操作の誤実行」の3つです。最小権限スコープのトークン作成・環境変数による認証情報管理・Hooks による承認ゲートの設置で対処できます。本番 DB への直接接続は避け、読み取り専用ユーザーを使ってください。
Q. MCP と Function Calling の違いは何ですか?
Function Calling は各 AI プロバイダー固有の仕様(OpenAI Functions・Anthropic Tools など)で、サービス間の互換性がありません。MCP はプロトコル標準化により、1つの MCP サーバーを Claude・Cursor・他社エージェントから共通インターフェースで利用できます。エコシステムの形成とツール資産の再利用性が MCP の最大の利点です。
References
- Model Context Protocol 公式サイト — MCP 仕様の一次ソース
- MCP サーバー公式リポジトリ — Anthropic 管理の公式サーバー一覧
- TypeScript SDK ドキュメント — 自作サーバー実装のリファレンス
- Anthropic Claude Code ドキュメント — Claude Code 公式ドキュメント
- awesome-mcp-servers — コミュニティ製サーバーのカタログ
- Slack API OAuth スコープ — Slack MCP 設定時のトークンスコープリファレンス
