# เซิร์ฟเวอร์ MCP

DailyPlay มีเซิร์ฟเวอร์ **MCP (Model Context Protocol)** ระยะไกล ให้เอเจนต์ AI — เช่น Cursor, Claude และไคลเอนต์ MCP อื่นๆ — สร้างเกม จัดการสตรีม สร้างสินทรัพย์ และออกเซสชันการเล่นแทนองค์กรของคุณได้

:::note[ต้องใช้ Business tier ขึ้นไป]
การเข้าถึง MCP ใช้ API key ขององค์กร ซึ่งมีให้ใน **Business tier** ขึ้นไป
:::

## เอนด์พอยต์

| | |
| --- | --- |
| **URL** | `https://app.dailyplay.ai/api/mcp` |
| **ทรานสปอร์ต** | Streamable HTTP |
| **การยืนยันตัวตน** | Bearer API key (`dpk_…`) |

เมทาดาทาสำหรับดิสคัฟเวอรีอยู่ที่:

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

## ก่อนเริ่มต้น

1. สร้าง[API key](/th/api/api-keys/) ที่ **Connect → API Keys**
2. เปิดใช้ **ขอบเขตสิทธิ์ MCP** ที่เอเจนต์ต้องการ (เว้นว่างไว้หากใช้แค่การออกโทเค็นเซสชัน)
3. คัดลอกค่าคีย์ที่แสดงครั้งเดียวตอนสร้าง (`dpk_…`)

DailyPlay ยืนยันตัวตนด้วย **Bearer API key** ไม่ใช่ OAuth ในไคลเอนต์ที่มีทั้งสองทาง ให้เลือกการยืนยันด้วยเฮดเดอร์ / API key และข้ามขั้นตอน sign-in

## ตั้งค่าไคลเอนต์

### Claude Desktop, Claude.ai และ Cowork

ใช้ **custom connector** (remote 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 header สำหรับ custom connector กำลังทยอยเปิด และอาจยังไม่ปรากฏในทุกแพลนหรือองค์กร หากไม่เห็น **Request headers** ให้ใช้[สะพาน stdio](#คอนฟิกลocal-ของ-claude-desktop) ด้านล่าง หรือตั้งค่า [Claude Code](#claude-code) / [Cursor](#cursor) แทน
:::

#### คอนฟิกลocal ของ Claude Desktop

`claude_desktop_config.json` รับได้เฉพาะเซิร์ฟเวอร์ **stdio** หากต้องการชี้ Desktop ไปที่ URL ระยะไกลของ DailyPlay ให้ใช้ [`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 จะเพิกเฉยรายการ remote HTTP ที่นั่น

### Claude Code

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

แนะนำให้ใช้ `claude mcp add` (ขอบเขต user หรือ local) แทนการแก้ `.mcp.json` ด้วยมือ เพื่อให้เฮดเดอร์ถูกส่งทุกคำขอ 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"
      }
    }
  }
}
```

เก็บคีย์ไว้นอกไฟล์ด้วยการแทนค่าจาก env:

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

เปิดเซิร์ฟเวอร์ใน **Available Tools** แล้วขอให้เอเจนต์แสดงรายการเทมเพลตหรือเกมเพื่อยืนยันการเชื่อมต่อ

### ไคลเอนต์ MCP อื่นๆ

ไคลเอนต์ที่รองรับ remote MCP แบบ **Streamable HTTP** ใช้วิธีเดียวกัน:

| การตั้งค่า | ค่า |
| --- | --- |
| URL | `https://app.dailyplay.ai/api/mcp` |
| เฮดเดอร์ยืนยันตัวตน | `Authorization: Bearer dpk_…` |
| เฮดเดอร์ทางเลือก | `x-api-key: dpk_…` |

หากไคลเอนต์รองรับแค่ stdio ให้ใช้รูปแบบสะพาน [`mcp-remote`](#คอนฟิกลocal-ของ-claude-desktop) จากส่วน Claude Desktop

## ตรวจสอบการเชื่อมต่อ

หลังเชื่อมต่อ ให้ขอให้เอเจนต์ทำสิ่งที่ต้องใช้เครื่องมือ เช่น:

- “แสดงรายการเทมเพลตเกม DailyPlay”
- “แสดงรายการเกมในองค์กรของฉัน”

หากไม่มีเครื่องมือ หรือทุกคำขอล้มเหลวด้วย `401` / ข้อผิดพลาดขอบเขตสิทธิ์:

- ยืนยันว่าคีย์ขึ้นต้นด้วย `dpk_` และคัดลอกครบ
- ยืนยันว่าเปิดใช้[ขอบเขตสิทธิ์ MCP](#ขอบเขตสิทธิ์-mcp) ที่ต้องการบนคีย์แล้ว
- ยืนยันว่าคอนเนกเตอร์หรือเซิร์ฟเวอร์ MCP **เปิดใช้** สำหรับแชทปัจจุบัน
- รีสตาร์ทไคลเอนต์หลังแก้ไฟล์คอนฟิก

## การยืนยันตัวตน

เครื่องมือ MCP ใช้ API key องค์กรเดียวกับ[โทเค็นเซสชัน](/th/api/session-tokens/)

| เฮดเดอร์ | ค่า |
| --- | --- |
| `Authorization` | `Bearer dpk_…` |
| หรือ `x-api-key` | `dpk_…` |

องค์กรมาจากคีย์ — ไคลเอนต์ไม่ส่ง `org_id` สำหรับการแก้ไขข้อมูล

:::caution[ขอบเขตสิทธิ์ปฏิเสธโดยค่าเริ่มต้น]
API key ที่**ไม่มีขอบเขตสิทธิ์ MCP** ออกโทเค็นเซสชันผ่าน 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](/th/api/mcp-tools/)

## เวิร์กโฟลว์เอเจนต์ทั่วไป

ขั้นตอนสร้างเกมแบรนด์จากเทมเพลตที่พบบ่อย:

1. `list_templates` / `get_template` — อ่านสคีมาสินทรัพย์ (`name`, ขนาด, `transparent`, `promptWrapper`)
2. `generate_image` — สร้างสินทรัพย์ภาพแต่ละชิ้น (สินทรัพย์โปร่งใสจะถูก chroma-key)
3. `create_game` — ส่ง `config` แบบ**แบน** ที่รวม `baseGameConfig` กับ URL สินทรัพย์คีย์ตาม `asset.name` (เช่น `character`, `obstacle`)
4. `set_game_prizes` — ตารางรางวัล (ถ้ามี; โอกาสต้องรวม 100% ต่อ `min_score` tier)
5. `set_game_status` — เผยแพร่เมื่อพร้อม

:::tip[คีย์ config แบบแบน]
**อย่า**ซ้อน URL ภาพใต้ `config.assets` ใช้ `name` ของสินทรัพย์เทมเพลตเป็นคีย์ระดับบนของ `config` `update_game` รวม `config` แบบตื้น จึงแก้สินทรัพย์เดียวโดยไม่ลบส่วนอื่นได้
:::

## ตัวอย่าง 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` ใหม่

ค่าข้อมูลรับรองเป็นแบบเขียนอย่างเดียว — การ list/get ไม่คืนความลับดิบ

## ความปลอดภัย

- ใช้**ขอบเขตสิทธิ์น้อยที่สุด** — เปิดเฉพาะเครื่องมือที่ต้องการ
- รวมกับ[รายการอนุญาตเกม/สตรีม](/th/api/api-keys/) เพื่อจำกัดทรัพยากรที่คีย์เข้าถึงได้
- หมุนเวียนหรือเพิกถอนคีย์จากแดชบอร์ดหากรั่วไหล
- ขีดจำกัดอัตราของ API key ใช้กับเรียกเครื่องมือ MCP ด้วย

## ขั้นตอนถัดไป

- [เอกสารอ้างอิงเครื่องมือ MCP](/th/api/mcp-tools/) — ทุกเครื่องมือ ขอบเขต และบทบาท
- [API Keys](/th/api/api-keys/) — สร้างคีย์และจัดการขอบเขต MCP
- [โทเค็นเซสชัน](/th/api/session-tokens/) — การเข้าเล่นแบบใช้ครั้งเดียวโดยไม่ใช้ MCP