# Douyin Upload MCP Skill

> 通过抖音创作者平台（creator.douyin.com）发布视频和图文内容。首选调用 MCP 工具完成操作，MCP 无法满足时可运行 Skill 脚本兜底。禁止自行启动外部浏览器访问抖音。

- Skill: `wjz-p/douyin-upload-mcp-skill` (Agent Skill, multi-file: 9 files)
- Install (CLI): `npx skillmds@latest add wjz-p/douyin-upload-mcp-skill`
- Raw SKILL.md: https://api.skillmd.com/api/skills/wjz-p/douyin-upload-mcp-skill/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: WJZ-P (https://skillmd.com/u/wjz-p)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/wjz-p/douyin-upload-mcp-skill

---


# 抖音 MCP Skill

## ⚠️ 操作优先级（必须遵守）

1. **🥇 首选：调用 MCP 工具** — 直接调用本 Skill 暴露的 MCP 工具完成操作。绝大多数场景都应该走这条路径。
2. **🥈 兜底：运行 Skill 脚本** — 当 MCP 工具无法满足需求时，运行本 Skill 项目中的脚本（如 `demo.js`、`demo-imagetext.js`）
3. **🥉 最次：连接 Skill 管理的浏览器** — 仅前两种方式都无法解决时，通过 `douyin_browser_info` 获取 CDP 连接信息接管浏览器。**需先征得用户同意**

**绝对禁止**：自行启动新的浏览器实例访问抖音页面。

## 支持范围

| 类型 | 支持 | 说明 |
|------|------|------|
| 发布视频 | ✅ | 上传视频 + 选封面 + 填标题简介 + 发布 |
| 发布图文 | ✅ | 上传图片 + 填标题简介 + 选音乐 + 发布 |
| 发布全景视频 | ❌ | 不支持（场景极少） |
| 发布纯文字 | ❌ | 不支持（场景极少） |

## 可用 MCP 工具

### 核心发布工具

| 工具名 | 说明 | 入参 |
|--------|------|------|
| `douyin_publish_video` | 发布视频（全自动，内部自动检查登录） | `filePath`（必填）, `title`, `description`, `timeout` |
| `douyin_publish_imagetext` | 发布图文（全自动，内部自动检查登录） | `filePaths`（必填，字符串数组）, `title`, `description` |

### 登录与状态

| 工具名 | 说明 | 入参 |
|--------|------|------|
| `douyin_check_login` | 检查登录状态并推进登录流程 | `smsCode`（可选，短信验证码） |
| `douyin_probe` | 探测页面各元素状态 | 无 |
| `douyin_screenshot` | 对当前页面截图保存 | 无 |

### 页面操作

| 工具名 | 说明 | 入参 |
|--------|------|------|
| `douyin_navigate_to` | 打开指定抖音页面 URL（仅 douyin.com 域名） | `url`, `timeout` |
| `douyin_reload_page` | 刷新页面 | `timeout` |
| `douyin_browser_info` | 获取浏览器连接信息（兜底接管用） | 无 |

## 典型使用流程

### 1. 登录（多次调用 `douyin_check_login` 推进）

```
第1次调用 → phase: qrcode      → 用户扫码
第2次调用 → phase: sms_verification → 自动点击接收短信
第3次调用 → phase: sms_code_input   → 用户告知验证码
第4次调用(smsCode="123456") → phase: logged_in → 登录完成
```

### 2. 发布视频

```
调用 douyin_publish_video:
  filePath: "C:/videos/test.mp4"
  title: "我的视频"
  description: "视频简介 #标签"
```

### 3. 发布图文

```
调用 douyin_publish_imagetext:
  filePaths: ["C:/images/1.png", "C:/images/2.png"]
  title: "我的图文"
  description: "图文简介 #标签"
```

## MCP 客户端配置

```json
{
  "mcpServers": {
    "douyin": {
      "command": "node",
      "args": ["<项目绝对路径>/src/mcp-server.js"]
    }
  }
}
```

也可通过 `npm run mcp` 手动启动。

## 架构

```
MCP Client → mcp-server.js → index.js → browser.js → Daemon
                                ↓
                          douyin-ops.js → operator.js → CDP → Chrome → douyin.com
```

- **Daemon**（独立进程）：管理浏览器生命周期，闲置 30 分钟自动销毁
- **browser.js**：Skill 侧连接器，按需自启 Daemon
- **operator.js**：纯 CDP 底层原子操作
- **douyin-ops.js**：抖音业务编排层
- **mcp-server.js**：MCP 工具协议层

### 端口配置（与 gemini-skill 共享同一浏览器实例）

| 配置项 | 默认值 | 说明 |
|--------|--------|------|
| CDP 端口 | 40821 | 与 gemini-skill 共享 |
| Daemon 端口 | 40225 | 与 gemini-skill 共享 |

多个 skill 共用同一个浏览器实例 + 同一个 Daemon，各 skill 各用各的 tab。

