Install
openclaw skills install toutiao-mcp-skill通过 MCP 协议操作今日头条平台,支持内容发布、账号管理等功能
openclaw skills install toutiao-mcp-skill通过 Model Context Protocol 让 AI 能够操作今日头条平台。
本 Skill 是一个 MCP Server 集成配置,实际功能由 toutiao-mcp MCP Server 提供。
OpenClaw/AI Agent
↓ (读取 Skill 配置)
toutiao-mcp-skill
↓ (启动 MCP Server)
toutiao-mcp
↓ (MCP Protocol - 6 Tools)
今日头条平台
当用户需要操作今日头条平台时,AI 会自动调用相应的 MCP 工具:
触发关键词:
# 方式 1:从 npm 安装(推荐)
npm install -g toutiao-mcp
# 安装浏览器
npx playwright install chromium
# 方式 2:从源码构建
git clone https://github.com/sipingme/toutiao-mcp.git
cd toutiao-mcp
npm install
npx playwright install chromium
npm run build
在 OpenClaw 的 MCP 配置中添加:
{
"mcpServers": {
"toutiao": {
"command": "node",
"args": ["/path/to/toutiao-mcp/dist/index.js"],
"env": {
"PLAYWRIGHT_HEADLESS": "true",
"COOKIES_FILE": "/path/to/data/cookies.json",
"DATA_DIR": "/path/to/data"
}
}
}
}
# 克隆 Skill 配置和文档
git clone https://github.com/sipingme/toutiao-mcp-skill.git
cp -r toutiao-mcp-skill ~/.openclaw/skills/toutiao/
场景:在执行任何操作前,先确认登录状态
MCP 工具:check_login_status
步骤:
check_login_status 工具输出示例:
{
"isLoggedIn": true,
"message": "已登录"
}
异常处理:
isLoggedIn: false,执行操作 2(登录流程)场景:首次使用或 Cookie 过期
MCP 工具:login_with_credentials
步骤:
login_with_credentials 工具输入参数:
{
"headless": false
}
输出示例:
{
"success": true,
"message": "登录成功"
}
异常处理:
场景:用户提供标题、正文和图片,发布到今日头条
MCP 工具:publish_article
前置条件:
步骤:
验证登录状态
调用 check_login_status
如果未登录 → 执行操作 2(登录流程)
收集发布信息
验证内容格式
调用发布工具
{
"title": "Node.js 开发技巧分享",
"content": "本文分享几个实用的 Node.js 开发技巧...\n\n## 1. 使用 async/await\n\n异步编程是 Node.js 的核心...\n\n## 2. 错误处理最佳实践\n\n正确的错误处理能提高应用稳定性...\n\n## 3. 性能优化技巧\n\n...",
"images": ["/path/to/image1.jpg", "/path/to/image2.jpg"],
"tags": ["Node.js", "编程", "技术分享"]
}
等待发布完成
向用户报告结果
输出示例:
{
"success": true,
"articleId": "7123456789",
"url": "https://www.toutiao.com/article/7123456789/",
"message": "文章发布成功"
}
成功标准:
success: true异常处理:
| 错误类型 | 症状 | 解决方案 |
|---|---|---|
| 未登录 | isLoggedIn: false | 执行操作 2(登录流程) |
| 标题超长 | "标题长度不符" | 缩短标题到30字以内 |
| 标题过短 | "标题太短" | 扩充标题到2字以上 |
| 图片路径错误 | "图片不存在" | 检查路径,使用绝对路径 |
| 图片格式错误 | "不支持的格式" | 转换为 JPG/PNG/GIF/WEBP |
| 网络超时 | "请求超时" | 重试或检查网络连接 |
| 内容违规 | "内容审核失败" | 修改内容后重新发布 |
最佳实践:
场景:用户想发布短内容到微头条(类似微博)
MCP 工具:publish_micro_post
适用场景:
前置条件:
步骤:
验证登录状态
调用 check_login_status
收集发布信息
调用发布工具
{
"content": "今天学习了 TypeScript 的高级类型,收获满满!\n\n主要学习了:\n• 条件类型\n• 映射类型\n• 工具类型\n\n#TypeScript #学习笔记 #前端开发",
"images": ["/path/to/screenshot1.jpg", "/path/to/screenshot2.jpg"]
}
等待发布完成(通常10-20秒)
向用户报告结果
输出示例:
{
"success": true,
"postId": "7123456789",
"url": "https://www.toutiao.com/w/7123456789/",
"message": "微头条发布成功"
}
微头条 vs 文章对比:
| 特性 | 微头条 | 文章 |
|---|---|---|
| 内容长度 | 短(建议2000字内) | 长(建议300字以上) |
| 发布速度 | 快(10-20秒) | 慢(30-60秒) |
| 适用场景 | 碎片化分享 | 深度内容 |
| 标题要求 | 无标题 | 必需标题 |
| 话题标签 | 支持 #话题 | 支持标签 |
内容建议:
异常处理:
场景:用户有小红书格式的数据,想批量发布到今日头条
MCP 工具:publish_xiaohongshu_data
步骤:
验证用户已登录
准备小红书数据(JSON 数组格式)
指定下载目录(用于保存图片)
调用 publish_xiaohongshu_data 工具:
{
"data": [
{
"小红书标题": "TypeScript 开发技巧",
"仿写小红书文案": "分享几个 TypeScript 实用技巧...",
"配图": "https://example.com/image1.jpg"
},
{
"小红书标题": "React 性能优化",
"仿写小红书文案": "React 性能优化的几个要点...",
"配图": "https://example.com/image2.jpg"
}
],
"downloadDir": "/path/to/downloads"
}
输出示例:
{
"success": true,
"total": 2,
"succeeded": 2,
"failed": 0,
"results": [
{
"title": "TypeScript 开发技巧",
"success": true,
"articleId": "7123456789"
},
{
"title": "React 性能优化",
"success": true,
"articleId": "7123456790"
}
],
"message": "批量发布完成,成功 2 条"
}
数据格式要求:
小红书标题:文章标题仿写小红书文案:文章正文配图:图片 URL(自动下载)异常处理:
场景:用户想退出登录
MCP 工具:logout
步骤:
{}
输出示例:
{
"success": true,
"message": "已登出"
}
所有工具统一使用 JSON 格式输出:
成功响应:
{
"success": true,
"message": "操作成功",
"data": {
"id": "7123456789",
"url": "https://www.toutiao.com/..."
}
}
错误响应:
{
"success": false,
"error": "错误信息",
"code": "ERROR_CODE"
}
标题示例:
✅ 好标题:
- "Node.js 性能优化实战指南"
- "TypeScript 高级类型详解"
- "前端开发必备的10个工具"
❌ 差标题:
- "震惊!!!这个技巧让我..."(标题党)
- "a"(太短)
- "这是一篇关于 Node.js 性能优化的非常详细的实战指南文章"(太长)
| 项目 | 要求 | 说明 |
|---|---|---|
| 格式 | JPG, PNG, GIF, WEBP | 推荐 JPG(体积小) |
| 大小 | 单张 ≤ 10MB | 建议压缩到 2MB 以内 |
| 尺寸 | 建议 1920x1080 | 保持清晰度 |
| 数量 | 文章:不限;微头条:≤9张 | 建议3-5张 |
| 来源 | 本地路径或 URL | URL 会自动下载 |
图片路径示例:
{
"images": [
"/Users/username/Pictures/image1.jpg",
"https://example.com/image2.jpg",
"./relative/path/image3.png"
]
}
| 内容类型 | 长度建议 | 质量要求 |
|---|---|---|
| 文章正文 | ≥ 300字 | 结构清晰,内容充实 |
| 微头条 | ≤ 2000字 | 简洁明了,重点突出 |
| 标签 | 3-5个 | 相关性强,覆盖主题 |
内容格式建议:
# 使用 Markdown 格式
## 二级标题
正文内容...
- 列表项 1
- 列表项 2
**加粗重点**
> 引用内容
{
"tags": ["Node.js", "性能优化", "后端开发", "技术分享"]
}
症状:提示"未登录"或操作失败
解决:
调用 login_with_credentials 工具重新登录
症状:提示"标题长度不符合要求"
解决:
症状:提示"图片上传失败"
原因:
解决:
症状:提示"页面元素未找到"
原因:今日头条页面结构变化
解决:
症状:批量发布时部分数据失败
解决:
./data/cookies.json)用户:帮我把这篇文章发布到今日头条
AI:好的,我来帮你发布。请提供以下信息:
用户: 标题:Node.js 性能优化实战 正文:[提供详细内容] 图片:/Users/me/article-cover.jpg 标签:Node.js、性能优化、后端开发
AI:收到!我将为你发布到今日头条。
[内部流程]
{
"title": "Node.js 性能优化实战",
"content": "...",
"images": ["/Users/me/article-cover.jpg"],
"tags": ["Node.js", "性能优化", "后端开发"]
}
AI:✅ 文章已成功发布到今日头条!
📊 发布详情:
你可以在今日头条 App 或网站查看文章。
用户:发布一条微头条:"今天学习了 TypeScript 的高级类型,终于搞懂了条件类型和映射类型的区别!#TypeScript #学习笔记"
AI:好的,我来帮你发布微头条。
[调用 publish_micro_post]
{
"content": "今天学习了 TypeScript 的高级类型,终于搞懂了条件类型和映射类型的区别!#TypeScript #学习笔记"
}
AI:✅ 微头条发布成功!
📊 发布详情:
用户:把这些小红书数据批量发布到今日头条
AI:好的,我来批量发布。请提供小红书数据文件或数据内容。
用户:[提供包含5条数据的 JSON 文件]
AI:收到 5 条数据,开始批量发布...
[内部流程]
进度:
AI:✅ 批量发布完成!
📊 发布统计:
📝 发布详情:
所有文章已成功发布到今日头条!
用户:发布文章,标题:这是一篇非常非常非常详细的关于 Node.js 性能优化的完整实战指南
AI:抱歉,标题长度超出限制。
❌ 错误:标题长度为 35 字,超过最大限制 30 字
💡 建议修改为:
请提供修改后的标题。
用户:好的,用第一个
AI:收到!使用标题"Node.js 性能优化完整实战指南"继续发布...
[继续发布流程]
新用户应该能在 5 分钟内完成:
npm install -g toutiao-mcpnpx playwright install chromiumlogin_with_credentialscheck_login_statuspublish_article 或 publish_micro_post如果以上步骤都能顺利完成,说明 Skill 已正确配置!