抖音创作者中心视频自动发布服务支持MCP协议和HTTP API。
douyin/
├── lib/ # 共享业务逻辑模块
│ ├── browser.js # 浏览器管理(初始化、关闭)
│ ├── utils.js # 工具函数(调试、元素查找等)
│ └── douyin.js # 核心业务逻辑(登录、发布等)
│
├── mcp/ # MCP 服务器(生产环境)
│ └── server.js # MCP 服务器入口
│
├── dev/ # HTTP 调试服务器(开发环境)
│ └── server.js # Express HTTP 服务器
│
├── browser-data/ # 浏览器数据(Cookie 等,自动生成)
├── debug-screenshots/ # 调试截图(开发模式自动生成)
│
├── package.json # 项目配置
└── README.md # 项目说明
cd douyin
npm install
npm run dev
启动后访问 http://localhost:3000 提供 HTTP API:
GET /api/health - 健康检查POST /api/manual-login - 手动登录GET /api/check-status - 检查登录状态POST /api/publish - 发布视频特性:
npm run mcp
适用于 Cherry Studio 和 cursor 等 MCP 客户端。
特性:
npm run mcp:http
使用流式 HTTP 传输协议的 MCP 服务器,支持通过 HTTP 访问。
特性:
MCP_HTTP_PORT 环境变量修改)启动示例:
# 使用默认端口 3100
npm run mcp:http
# 使用自定义端口
MCP_HTTP_PORT=8080 npm run mcp:http
提供三个主要功能:
npm run dev 或 npm run mcp只需调用发布接口/工具即可。
curl -X POST http://localhost:3000/api/manual-login
curl http://localhost:3000/api/check-status
curl -X POST http://localhost:3000/api/publish \
-H "Content-Type: application/json" \
-d '{
"title": "我的视频标题",
"description": "视频简介内容",
"tags": ["科普", "教育", "儿童"],
"videoPath": "/Users/mojun/Desktop/video.mp4"
}'
打开 Cherry Studio
点击 设置 (Settings)
选择 MCP 服务器 (MCP Servers) 选项
点击 添加服务器 (Add Server) 或 手动添加 (Manual Add)
填写以下信息:
douyin-publishernode/path/to/douyin/mcp/server.js或者使用完整路径:
/usr/local/bin/node (或你的 node 路径,可以通过 which node 查看)/path/to/douyin/mcp/server.js根据 Cherry Studio 的配置格式,可能需要添加:
{
"mcpServers": {
"douyin-publisher": {
"command": "node",
"args": ["/path/to/douyin/mcp/server.js"]
}
}
}
配置完成后,在 Cherry Studio 的对话界面中,应该能看到可用的 MCP 工具:
douyin_login - 手动登录douyin_check_status - 检查登录状态douyin_publish - 发布视频配置完成后,可以直接在 Cherry Studio 中使用这些工具:
请帮我检查抖音登录状态
或者:
请帮我发布一个视频,标题是"测试视频",视频路径是 /Users/mojun/Desktop/video.mp4
如果工具不可用:
mcp/server.js 的路径正确which node 查看 node 的路径node 命令测试 MCP 服务器:
在终端运行:
cd /path/to/douyin
node mcp/server.js
如果服务器正常启动(没有错误或输出),则表示服务器本身没有问题。
MCP HTTP 服务器适用于:
请求:
POST http://127.0.0.1:3100/mcp
Content-Type: application/json
Accept: application/json, text/event-stream
{
"jsonrpc": "2.0",
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {
"name": "my-client",
"version": "1.0.0"
}
},
"id": 1
}
响应:
HTTP/1.1 200 OK
Mcp-Session-Id: 08c36270-b78c-4945-a5de-beda5e21528c
Content-Type: text/event-stream
event: message
data: {"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{"listChanged":true}},"serverInfo":{"name":"douyin-publisher","version":"1.0.0"}},"jsonrpc":"2.0","id":1}
POST http://127.0.0.1:3100/mcp
Mcp-Session-Id: 08c36270-b78c-4945-a5de-beda5e21528c
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "tools/list",
"params": {},
"id": 2
}
POST http://127.0.0.1:3100/mcp
Mcp-Session-Id: 08c36270-b78c-4945-a5de-beda5e21528c
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "douyin_check_status",
"arguments": {}
},
"id": 3
}
POST http://127.0.0.1:3100/mcp
Mcp-Session-Id: 08c36270-b78c-4945-a5de-beda5e21528c
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "douyin_publish",
"arguments": {
"title": "我的视频标题",
"videoPath": "/Users/mojun/Desktop/video.mp4",
"description": "视频简介",
"tags": ["科普", "教育"]
}
},
"id": 4
}
# 初始化会话
curl -X POST http://127.0.0.1:3100/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {"name": "curl-client", "version": "1.0.0"}
},
"id": 1
}'
| 工具名称 | 描述 | 参数 |
|---|---|---|
douyin_login | 手动登录 | 无 |
douyin_check_status | 检查登录状态 | 无 |
douyin_publish | 发布视频 | title, videoPath, description?, tags? |
douyin_logout | 登出 | 无 |
| 特性 | STDio 模式 | HTTP 模式 |
|---|---|---|
| 传输协议 | 标准输入/输出 | HTTP POST/GET/ELETE |
| 会话管理 | 单进程 | 支持多会话 |
| 访问方式 | 进程启动 | HTTP 请求 |
| 适用场景 | AI 工具集成 | Web 应用、HTTP 客户端 |
| 日志输出 | 禁用(避免干扰) | 启用(便于调试) |
Mcp-Session-IdMCP_HTTP_PORT 指定其他端口端口被占用:
MCP_HTTP_PORT=3101 npm run mcp:httplsof -i :3100 查看进程,然后 kill <PID>服务器无法启动:
npm installnode --version(需要 v14+)连接失败:
会话过期:
lib/)所有业务逻辑都在 lib/ 目录下,MCP 和 HTTP 服务器都使用这些共享模块:
lib/browser.js:浏览器实例管理lib/utils.js:工具函数(调试、元素查找等)lib/douyin.js:核心业务逻辑(登录、发布等)要添加新功能,只需:
lib/douyin.js 中添加新的业务功能mcp/server.js 中注册一个新的 MCP 工具dev/server.js 中添加一个新的 HTTP API 端点示例:添加获取视频列表的功能
// lib/douyin.js
async function getVideoList() {
// 实现获取视频列表的逻辑
}
// mcp/server.js
mcpServer.registerTool('douyin_get_videos', {...}, async () => {
const result = await getVideoList();
// ...
});
// dev/server.js
app.get('/api/videos', async (req, res) => {
const result = await getVideoList();
res.json(result);
});
videoPath 必须是绝对路径# 号,将自动添加。标签将逐个添加,每输入一个标签后按回车键将其转换为蓝色并点击标签browser-data/ 目录存储浏览器 Cookie,两个服务器之间共享debug-screenshots/ 目录中(仅开发模式)