MCP サーバー
Model Context Protocol で Claude Code の機能を拡張し、外部ツールやサービスに接続
MCP サーバー¶
MCP(Model Context Protocol)は、Anthropic が提供するオープンスタンダードで、Claude Code を外部ツール、データベース、API、サービスに接続できます。MCP を使用することで、Claude Code の機能を大幅に拡張できます。
MCP とは?¶
基本概念¶
MCP は AI アシスタントと外部システム間の通信標準を定義するオープンプロトコルです。3 つのコアコンポーネントで構成されています:
| コンポーネント | 説明 | 例 |
|---|---|---|
| Tools(ツール) | 実行可能なアクション | データベースクエリ、リクエスト送信、ファイル操作 |
| Resources(リソース) | 読み取り可能なデータ | ファイル内容、API レスポンス、データベースレコード |
| Prompts(プロンプト) | 事前定義されたタスクテンプレート | コードレビューテンプレート、レポート生成テンプレート |
なぜ MCP が必要?¶
-
機能拡張:Claude が本来アクセスできないシステムにアクセス可能に
-
リアルタイムデータ:最新のドキュメント、データベース内容、API データを取得
-
自動化:デプロイの実行、通知の送信、リソースの管理
-
プライバシー:データはローカルで処理、クラウドへのアップロード不要
クイックスタート¶
MCP ステータスを確認¶
> /mcp
現在設定されている MCP サーバーのステータスを表示します。
MCP サーバーを追加¶
claude mcp add コマンドを使用:
# ファイルシステムサーバーを追加
claude mcp add filesystem npx -y @modelcontextprotocol/server-filesystem /path/to/directory
# SQLite データベースサーバーを追加
claude mcp add sqlite npx -y mcp-server-sqlite ./database.db
# カスタムサーバーを追加
claude mcp add my-server node /path/to/server.js
設定ファイル方式¶
プロジェクトルートに .mcp.json ファイルを作成することもできます:
{
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/allowed/path"]
},
"database": {
"command": "npx",
"args": ["-y", "mcp-server-sqlite", "./data.db"]
}
}
人気の MCP サーバー¶
ファイルシステム¶
ローカルファイルシステムにアクセス:
{
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/directory"]
}
}
機能:指定ディレクトリ内のファイルの読み取り、書き込み、検索。
SQLite データベース¶
SQLite データベースに接続:
{
"sqlite": {
"command": "npx",
"args": ["-y", "mcp-server-sqlite", "./database.db"]
}
}
機能:SQL クエリの実行、データベーススキーマの管理。
GitHub¶
GitHub リポジトリに接続:
{
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
機能:Issues、PR、リポジトリ操作の管理。
Context7(ドキュメント検索)¶
最新のライブラリドキュメントを取得:
{
"context7": {
"command": "npx",
"args": ["-y", "@context7/mcp-server"]
}
}
機能:任意のライブラリの最新ドキュメントとコード例を取得。
Supabase¶
Supabase バックエンドに接続:
{
"supabase": {
"command": "npx",
"args": ["-y", "@supabase/mcp-server"],
"env": {
"SUPABASE_URL": "${SUPABASE_URL}",
"SUPABASE_KEY": "${SUPABASE_KEY}"
}
}
}
機能:データベース操作、認証、ストレージ管理。
Docker¶
コンテナ管理:
{
"docker": {
"command": "npx",
"args": ["-y", "@docker/mcp-server"]
}
}
機能:コンテナ、イメージ、ネットワークの管理。
サーバータイプ¶
stdio(ローカルプロセス)¶
最も一般的なタイプで、ローカルサブプロセスとして実行:
{
"my-server": {
"command": "node",
"args": ["./server.js"],
"env": {
"API_KEY": "${API_KEY}"
}
}
}
特徴:
-
ローカルで実行、データはマシン内に留まる
-
Claude Code がプロセスのライフサイクルを管理
-
ファイルシステム、ローカルデータベースに最適
SSE(Server-Sent Events)¶
⚠️ MCP 仕様 2025-11-25 以降、SSE は廃止予定です。 新規接続には Streamable HTTP(下記 HTTP セクション)を推奨します。SSE は既存サーバとの後方互換性のためにのみ保持されます。
リモートホストされた MCP サーバーに接続:
{
"remote-server": {
"type": "sse",
"url": "https://mcp.example.com/sse"
}
}
特徴:
-
クラウドサービスに適している
-
OAuth 認証をサポート
-
ローカルインストール不要
HTTP¶
RESTful API 方式:
{
"api-server": {
"type": "http",
"url": "https://api.example.com/mcp",
"headers": {
"Authorization": "Bearer ${API_TOKEN}"
}
}
}
環境変数¶
MCP 設定は環境変数の置換をサポート:
{
"my-server": {
"command": "node",
"args": ["${CLAUDE_PLUGIN_ROOT}/server.js"],
"env": {
"DATABASE_URL": "${DATABASE_URL}",
"API_KEY": "${API_KEY}",
"DEFAULT_NAMESPACE": "${K8S_NAMESPACE:-default}"
}
}
}
構文:
-
${VAR}- 環境変数の値で置換 -
${VAR:-default}- 変数が未設定の場合はデフォルト値を使用
実践例¶
例 1:データベースクエリアシスタント¶
{
"postgres": {
"command": "npx",
"args": ["-y", "mcp-server-postgres"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost/mydb"
}
}
}
使用例:
> 過去 7 日間の注文総額をクエリして
> 購入回数が最も多いユーザートップ 10 を見つけて
例 2:Kubernetes 運用¶
{
"kubernetes": {
"command": "node",
"args": ["./k8s-mcp-server.js"],
"env": {
"KUBECONFIG": "${KUBECONFIG}",
"K8S_NAMESPACE": "${K8S_NAMESPACE:-default}"
}
}
}
使用例:
> すべての Pod のステータスをリストして
> api-server デプロイメントを再起動して
> 最近のエラーログを表示して
例 3:マルチサーバー設定¶
{
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "./src"]
},
"database": {
"command": "npx",
"args": ["-y", "mcp-server-sqlite", "./data.db"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
トラブルシューティング¶
サーバーが起動しない¶
-
コマンドが正しくインストールされているか確認:
bash npx -y @modelcontextprotocol/server-filesystem --help -
環境変数が設定されているか確認:
bash echo $GITHUB_TOKEN -
Claude Code のログでエラーメッセージを確認
ツールが使用できない¶
-
/mcpでサーバーステータスを確認 -
設定ファイルの形式が正しいか確認(JSON 構文)
-
Claude Code を再起動して設定を再読み込み
権限の問題¶
-
ファイルパスに読み取り/書き込み権限があることを確認
-
データベース接続文字列が正しいことを確認
-
API トークンが有効で十分な権限があることを確認
セキュリティ推奨事項¶
-
最小権限の原則:必要なアクセスのみを付与
-
機密情報の保護:トークンとパスワードには環境変数を使用
-
パスアクセスの制限:ファイルシステムサーバーは必要なディレクトリのみを公開
-
キーの定期的なローテーション:API トークンを定期的に更新
セキュリティに関する注意¶
MCP サーバーはあなたの権限で動作し、データの読み取り、ツールの呼び出し、認証情報へのアクセスが可能です。サードパーティの MCP サーバーを導入することは、外部のコードを開発環境に組み込むことに等しいため、慎重に扱う必要があります。
主なリスク
-
データの流出:悪意のある、または侵害されたサーバーが、コード・ファイル・会話内容を外部に送信する可能性があります。
-
ツールポイズニング(tool poisoning):サーバーがツールの説明文に隠れた指示を埋め込み、許可していない操作を Claude に実行させようとします。
-
認証情報の漏洩:設定が不適切なサーバーが、環境変数・シークレット・トークンを読み取る可能性があります。
-
過剰な権限:実際に必要な範囲を超えたツール権限を付与すると、攻撃対象領域が広がります。
主要な対策
-
信頼できるサーバーのみを導入:公式・レビュー済み・オープンソースで監査可能な MCP サーバーを優先し、出所不明な実装は避けます。
-
最小権限:各サーバーが宣言するツールのスコープを一つずつ確認し、本当に必要な機能とディレクトリのみを公開します。
-
人による承認ゲートを維持:Claude Code はツール呼び出しの前に確認を求めます。削除・書き込み・認証情報に関わる破壊的な操作を、無条件に承認したり全自動承認したりしないでください。
-
認証情報の隔離:サンドボックスでコマンドを実行する際は
sandbox.credentialsを使い、サンドボックス内プロセスがシークレットや環境変数を読み取れないようにします。 -
呼び出しの監査:ツール呼び出しのログを記録し、定期的に確認して異常な挙動を早期に検知します。
完全な脅威モデル、サンドボックス、認証情報の隔離設定については セキュリティのベストプラクティス を参照してください。