# MCPサーバー

DailyPlayはリモートの**MCP（Model Context Protocol）**サーバーを公開しています。Cursor、Claude、その他のMCPクライアントなどのAIエージェントが、組織に代わってゲーム作成、ストリーム管理、アセット生成、プレイセッション発行を行えます。

:::note[Businessティア以上が必要]
MCPアクセスには組織のAPIキーを使用します。APIキーは**Businessティア**以上で利用できます。
:::

## エンドポイント

| | |
| --- | --- |
| **URL** | `https://app.dailyplay.ai/api/mcp` |
| **トランスポート** | Streamable HTTP |
| **認証** | Bearer APIキー（`dpk_…`） |

ディスカバリメタデータは次の場所で公開されています：

```
https://app.dailyplay.ai/.well-known/oauth-protected-resource
```

## 始める前に

1. **Connect → API Keys** で[APIキー](/ja/api/api-keys/)を作成
2. エージェントに必要な**MCPスコープ**を有効化（空のままならセッショントークン発行のみ）
3. 作成時に一度だけ表示されるキー（`dpk_…`）をコピー

DailyPlayは**Bearer APIキー**で認証します（OAuthではありません）。両方の選択肢があるクライアントでは、ヘッダー / APIキー認証を選び、サインインフローはスキップしてください。

## クライアントセットアップ

### Claude Desktop、Claude.ai、Cowork

**カスタムコネクタ**（リモートMCP）を使います。ClaudeはAnthropicのクラウドからサーバーに接続するため、エンドポイントは公開到達可能である必要があります。

1. **Customize → Connectors** を開く（Team/Enterpriseのオーナーは **Organization settings → Connectors**）
2. **Add custom connector**（または **Add → Custom → Web**）をクリック
3. 次を設定：
   - **Name:** `DailyPlay`（任意のラベル可）
   - **MCP server URL:** `https://app.dailyplay.ai/api/mcp`
4. 認証で **No sign-in** を選択（DailyPlayはまだOAuth非対応）
5. **request header** を追加：
   - Header: `Authorization`
   - Value: `Bearer dpk_YOUR_KEY`（`Bearer ` の接頭辞とスペースを含める）
6. 保存後、チャットの **+** メニュー → **Connectors** でコネクタを有効化

:::note[Request headersの提供状況]
カスタムコネクタのリクエストヘッダー認証は順次展開中で、すべてのプランや組織では表示されない場合があります。**Request headers** が見つからない場合は、下記の[stdioブリッジ](#claude-desktopのローカル設定)を使うか、[Claude Code](#claude-code) / [Cursor](#cursor) を設定してください。
:::

#### Claude Desktopのローカル設定

`claude_desktop_config.json` は**stdio**サーバーのみ受け付けます。DesktopからDailyPlayのリモートURLに接続するには、[`mcp-remote`](https://www.npmjs.com/package/mcp-remote) でブリッジします（Node.js 18+が必要）：

**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`  
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "dailyplay": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://app.dailyplay.ai/api/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer dpk_YOUR_KEY"
      }
    }
  }
}
```

保存後にClaude Desktopを再起動してください。このファイルに裸の `url` フィールドを書かないでください — DesktopはそこでのリモートHTTPエントリを無視します。

### Claude Code

```bash
claude mcp add --transport http dailyplay https://app.dailyplay.ai/api/mcp \
  --header "Authorization: Bearer dpk_YOUR_KEY"
```

ヘッダーが毎回適用されるよう、手編集の `.mcp.json` より `claude mcp add`（userまたはlocalスコープ）を推奨します。同等のJSON：

```json
{
  "mcpServers": {
    "dailyplay": {
      "type": "http",
      "url": "https://app.dailyplay.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer dpk_YOUR_KEY"
      }
    }
  }
}
```

### Cursor

1. **Cursor Settings → MCP** を開く（または設定ファイルを編集）
2. リモートサーバーエントリを追加：

**プロジェクト:** `.cursor/mcp.json`  
**グローバル:** `~/.cursor/mcp.json`

```json
{
  "mcpServers": {
    "dailyplay": {
      "url": "https://app.dailyplay.ai/api/mcp",
      "headers": {
        "Authorization": "Bearer dpk_YOUR_KEY"
      }
    }
  }
}
```

環境変数補間でキーをファイル外に保てます：

```json
"Authorization": "Bearer ${env:DAILYPLAY_API_KEY}"
```

**Available Tools** でサーバーを有効化し、テンプレートやゲームの一覧を依頼して接続を確認してください。

### その他のMCPクライアント

**Streamable HTTP** のリモートMCPに対応するクライアントは同じ要領です：

| 設定 | 値 |
| --- | --- |
| URL | `https://app.dailyplay.ai/api/mcp` |
| 認証ヘッダー | `Authorization: Bearer dpk_…` |
| 代替ヘッダー | `x-api-key: dpk_…` |

stdioのみ対応のクライアントでは、Claude Desktop節の [`mcp-remote`](#claude-desktopのローカル設定) ブリッジを使います。

## 接続の確認

接続後、ツールが必要なプロンプトで確認します。例：

- 「DailyPlayのゲームテンプレートを一覧して」
- 「組織のゲームを一覧して」

ツールが出ない、または毎回 `401` / スコープエラーになる場合：

- キーが `dpk_` で始まり、全体をコピーしたか確認
- 必要な[MCPスコープ](#mcpスコープ)がキーで有効か確認
- コネクタまたはMCPサーバーが現在のチャットで**有効**か確認
- 設定ファイル編集後にクライアントを再起動

## 認証

MCPツールは[セッショントークン](/ja/api/session-tokens/)と同じ組織APIキーで認証します。

| ヘッダー | 値 |
| --- | --- |
| `Authorization` | `Bearer dpk_…` |
| または `x-api-key` | `dpk_…` |

組織はキーから取得されます。ミューテーション用にクライアントが `org_id` を指定することはありません。

:::caution[スコープはデフォルト拒否]
**MCPスコープがない**APIキーは、REST API経由のプレイセッショントークン発行のみ可能です。必要なスコープを有効にするまでMCPツールは呼べません。
:::

## MCPスコープ

キーの作成または編集時にスコープを有効にします：

| スコープ | 解除される操作 |
| --- | --- |
| `mcp:templates:read` | ゲームテンプレートの一覧・詳細 |
| `mcp:games:read` | ゲームと賞品の一覧・読み取り |
| `mcp:games:write` | ゲーム・ステータス・賞品の作成/更新 |
| `mcp:streams:read` | ストリームの一覧・読み取り |
| `mcp:streams:write` | ストリームの作成・更新 |
| `mcp:connections:read` | 組織インテグレーションの一覧（生の認証情報なし） |
| `mcp:connections:write` | インテグレーション作成とストリームへのリンク |
| `mcp:ai` | ブランド抽出、ファネル提案、画像生成 |
| `mcp:sessions:write` | ワンタイムプレイセッショントークンの発行 |

各ツールと必要なスコープは[MCPツールリファレンス](/ja/api/mcp-tools/)を参照してください。

## 典型的なエージェントワークフロー

テンプレートからブランドゲームを作る一般的な流れ：

1. `list_templates` / `get_template` — アセットスキーマ（`name`、サイズ、`transparent`、`promptWrapper`）を取得
2. `generate_image` — 各プロンプト画像アセットを生成（透明アセットはクロマキー処理）
3. `create_game` — `baseGameConfig` と `asset.name` をキーにしたアセットURLをマージした**フラット**な `config` を渡す（例：`character`、`obstacle`）
4. `set_game_prizes` — 任意の賞品テーブル（`min_score` ティアごとに確率合計100%）
5. `set_game_status` — 準備ができたら公開

:::tip[フラットなconfigキー]
画像URLを `config.assets` の下にネストしないでください。テンプレートアセットの `name` を `config` のトップレベルキーとして使います。`update_game` は `config` を浅いマージするため、他を消さずに1アセットだけ更新できます。
:::

## Braze / コネクションの例

コネクション系ツールには、キーの組織で**admin**（またはowner）ロールが必要です。

1. `create_stream`（`mcp:streams:write`）
2. `create_connection` — `provider: "braze"`、`credentials: { api_key, rest_endpoint }`
3. `link_stream_connection` — 新しい `stream_id` と `connection_id`

認証情報は書き込み専用です。一覧/取得レスポンスに生のシークレットは含まれません。

## セキュリティ

- **最小権限のスコープ**を推奨 — 必要なツールだけ有効化
- [ゲーム/ストリームの許可リスト](/ja/api/api-keys/)と組み合わせてアクセス範囲を制限
- キーが漏洩したらダッシュボードからローテーションまたは取り消し
- APIキーのレート制限はMCPツール呼び出しにも適用されます

## 次のステップ

- [MCPツールリファレンス](/ja/api/mcp-tools/) — すべてのツール、スコープ、ロール
- [APIキー](/ja/api/api-keys/) — キー作成とMCPスコープ管理
- [セッショントークン](/ja/api/session-tokens/) — MCPなしのワンタイムプレイアクセス