# 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` コマンドを使用：

```bash
# ファイルシステムサーバーを追加
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` ファイルを作成することもできます：

```json
{
  "filesystem": {
    "command": "npx",
    "args": ["-y", "@modelcontextprotocol/server-filesystem", "/allowed/path"]
  },
  "database": {
    "command": "npx",
    "args": ["-y", "mcp-server-sqlite", "./data.db"]
  }
}
```

## 人気の MCP サーバー

### ファイルシステム

ローカルファイルシステムにアクセス：

```json
{
  "filesystem": {
    "command": "npx",
    "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/directory"]
  }
}
```

**機能**：指定ディレクトリ内のファイルの読み取り、書き込み、検索。

### SQLite データベース

SQLite データベースに接続：

```json
{
  "sqlite": {
    "command": "npx",
    "args": ["-y", "mcp-server-sqlite", "./database.db"]
  }
}
```

**機能**：SQL クエリの実行、データベーススキーマの管理。

### GitHub

GitHub リポジトリに接続：

```json
{
  "github": {
    "command": "npx",
    "args": ["-y", "@modelcontextprotocol/server-github"],
    "env": {
      "GITHUB_TOKEN": "${GITHUB_TOKEN}"
    }
  }
}
```

**機能**：Issues、PR、リポジトリ操作の管理。

### Context7（ドキュメント検索）

最新のライブラリドキュメントを取得：

```json
{
  "context7": {
    "command": "npx",
    "args": ["-y", "@context7/mcp-server"]
  }
}
```

**機能**：任意のライブラリの最新ドキュメントとコード例を取得。

### Supabase

Supabase バックエンドに接続：

```json
{
  "supabase": {
    "command": "npx",
    "args": ["-y", "@supabase/mcp-server"],
    "env": {
      "SUPABASE_URL": "${SUPABASE_URL}",
      "SUPABASE_KEY": "${SUPABASE_KEY}"
    }
  }
}
```

**機能**：データベース操作、認証、ストレージ管理。

### Docker

コンテナ管理：

```json
{
  "docker": {
    "command": "npx",
    "args": ["-y", "@docker/mcp-server"]
  }
}
```

**機能**：コンテナ、イメージ、ネットワークの管理。

## サーバータイプ

### stdio（ローカルプロセス）

最も一般的なタイプで、ローカルサブプロセスとして実行：

```json
{
  "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 サーバーに接続：

```json
{
  "remote-server": {
    "type": "sse",
    "url": "https://mcp.example.com/sse"
  }
}
```

**特徴**：

- クラウドサービスに適している

- OAuth 認証をサポート

- ローカルインストール不要

### HTTP

RESTful API 方式：

```json
{
  "api-server": {
    "type": "http",
    "url": "https://api.example.com/mcp",
    "headers": {
      "Authorization": "Bearer ${API_TOKEN}"
    }
  }
}
```

## 環境変数

MCP 設定は環境変数の置換をサポート：

```json
{
  "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：データベースクエリアシスタント

```json
{
  "postgres": {
    "command": "npx",
    "args": ["-y", "mcp-server-postgres"],
    "env": {
      "DATABASE_URL": "postgresql://user:pass@localhost/mydb"
    }
  }
}
```

使用例：

```
> 過去 7 日間の注文総額をクエリして
> 購入回数が最も多いユーザートップ 10 を見つけて
```

### 例 2：Kubernetes 運用

```json
{
  "kubernetes": {
    "command": "node",
    "args": ["./k8s-mcp-server.js"],
    "env": {
      "KUBECONFIG": "${KUBECONFIG}",
      "K8S_NAMESPACE": "${K8S_NAMESPACE:-default}"
    }
  }
}
```

使用例：

```
> すべての Pod のステータスをリストして
> api-server デプロイメントを再起動して
> 最近のエラーログを表示して
```

### 例 3：マルチサーバー設定

```json
{
  "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}"
    }
  }
}
```

## トラブルシューティング

### サーバーが起動しない

1. コマンドが正しくインストールされているか確認：
   ```bash
   npx -y @modelcontextprotocol/server-filesystem --help
   ```

2. 環境変数が設定されているか確認：
   ```bash
   echo $GITHUB_TOKEN
   ```

3. Claude Code のログでエラーメッセージを確認

### ツールが使用できない

1. `/mcp` でサーバーステータスを確認

2. 設定ファイルの形式が正しいか確認（JSON 構文）

3. Claude Code を再起動して設定を再読み込み

### 権限の問題

- ファイルパスに読み取り/書き込み権限があることを確認

- データベース接続文字列が正しいことを確認

- API トークンが有効で十分な権限があることを確認

## セキュリティ推奨事項

1. **最小権限の原則**：必要なアクセスのみを付与

2. **機密情報の保護**：トークンとパスワードには環境変数を使用

3. **パスアクセスの制限**：ファイルシステムサーバーは必要なディレクトリのみを公開

4. **キーの定期的なローテーション**：API トークンを定期的に更新

## セキュリティに関する注意

MCP サーバーはあなたの権限で動作し、データの読み取り、ツールの呼び出し、認証情報へのアクセスが可能です。サードパーティの MCP サーバーを導入することは、外部のコードを開発環境に組み込むことに等しいため、慎重に扱う必要があります。

**主なリスク**

- **データの流出**：悪意のある、または侵害されたサーバーが、コード・ファイル・会話内容を外部に送信する可能性があります。

- **ツールポイズニング（tool poisoning）**：サーバーがツールの説明文に隠れた指示を埋め込み、許可していない操作を Claude に実行させようとします。

- **認証情報の漏洩**：設定が不適切なサーバーが、環境変数・シークレット・トークンを読み取る可能性があります。

- **過剰な権限**：実際に必要な範囲を超えたツール権限を付与すると、攻撃対象領域が広がります。

**主要な対策**

- **信頼できるサーバーのみを導入**：公式・レビュー済み・オープンソースで監査可能な MCP サーバーを優先し、出所不明な実装は避けます。

- **最小権限**：各サーバーが宣言するツールのスコープを一つずつ確認し、本当に必要な機能とディレクトリのみを公開します。

- **人による承認ゲートを維持**：Claude Code はツール呼び出しの前に確認を求めます。削除・書き込み・認証情報に関わる破壊的な操作を、無条件に承認したり全自動承認したりしないでください。

- **認証情報の隔離**：サンドボックスでコマンドを実行する際は `sandbox.credentials` を使い、サンドボックス内プロセスがシークレットや環境変数を読み取れないようにします。

- **呼び出しの監査**：ツール呼び出しのログを記録し、定期的に確認して異常な挙動を早期に検知します。

完全な脅威モデル、サンドボックス、認証情報の隔離設定については [セキュリティのベストプラクティス](/docs/advanced/security) を参照してください。

## 次のステップ

- [プラグインシステム](/docs/advanced/plugins) でカスタム機能を作成

- [CLI テクニック](/docs/usage/cli-tips) で効率を向上

- [ワークフロー](/docs/usage/workflow-tips) で開発フローを最適化