通过 Model Context Protocol 让 AI 能够操作今日头条平台。
本 Skill 是一个 MCP Server 集成配置,实际功能由 toutiao-mcp MCP Server 提供。
text
OpenClaw/AI Agent
↓ (读取 Skill 配置)
toutiao-mcp-skill
↓ (启动 MCP Server)
toutiao-mcp
↓ (MCP Protocol - 6 Tools)
今日头条平台
当用户需要操作今日头条平台时,AI 会自动调用相应的 MCP 工具:
触发关键词:
bash
# 方式 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 配置中添加:
json
{
"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"
}
}
}
}
bash
# 克隆 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 工具输出示例:
json
{
"isLoggedIn": true,
"message": "已登录"
}
异常处理:
isLoggedIn: false,执行操作 2(登录流程)场景:首次使用或 Cookie 过期
MCP 工具: login_with_credentials
步骤:
login_with_credentials 工具输入参数:
json
{
"headless": false
}
输出示例:
json
{
"success": true,
"message": "登录成功"
}
异常处理:
场景:用户提供标题、正文和图片,发布到今日头条
MCP 工具: publish_article
前置条件:
步骤:
验证登录状态 text
调用 check_login_status
如果未登录 → 执行操作 2(登录流程)
收集发布信息
验证内容格式
调用发布工具
json
{
"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", "编程", "技术分享"]
}
输出示例:
json
{
"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
适用场景:
前置条件:
步骤:
验证登录状态 text
调用 check_login_status
收集发布信息
调用发布工具
json
{
"content": "今天学习了 TypeScript 的高级类型,收获满满!\n\n主要学习了:\n• 条件类型\n• 映射类型\n• 工具类型\n\n#TypeScript #学习笔记 #前端开发",
"images": ["/path/to/screenshot1.jpg", "/path/to/screenshot2.jpg"]
}
等待发布完成(通常10-20秒)
向用户报告结果
输出示例:
json
{
"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 工具:
json
{
"data": [
{
"小红书标题": "TypeScript 开发技巧",
"仿写小红书文案": "分享几个 TypeScript 实用技巧...",
"配图": "https://example.com/image1.jpg"
},
{
"小红书标题": "React 性能优化",
"仿写小红书文案": "React 性能优化的几个要点...",
"配图": "https://example.com/image2.jpg"
}
],
"downloadDir": "/path/to/downloads"
}
输出示例:
json
{
"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
步骤:
json
{}
输出示例:
json
{
"success": true,
"message": "已登出"
}
所有工具统一使用 JSON 格式输出:
成功响应:
json
{
"success": true,
"message": "操作成功",
"data": {
"id": "7123456789",
"url": "https://www.toutiao.com/..."
}
}
错误响应:
json
{
"success": false,
"error": "错误信息",
"code": "ERROR_CODE"
}
长度限制:2-30个字
计算规则:
建议:
标题示例:
text
✅ 好标题:
- "Node.js 性能优化实战指南"
- "TypeScript 高级类型详解"
- "前端开发必备的10个工具"
❌ 差标题:
- "震惊!!!这个技巧让我..."(标题党)
- "a"(太短)
- "这是一篇关于 Node.js 性能优化的非常详细的实战指南文章"(太长)
项目要求说明格式JPG, PNG, GIF, WEBP推荐 JPG(体积小)大小单张 ≤ 10MB建议压缩到 2MB 以内尺寸建议 1920x1080保持清晰度数量文章:不限;微头条:≤9张建议3-5张来源本地路径或 URLURL 会自动下载
图片路径示例:
json
{
"images": [
"/Users/username/Pictures/image1.jpg",
"https://example.com/image2.jpg",
"./relative/path/image3.png"
]
}
内容类型长度建议质量要求文章正文≥ 300字结构清晰,内容充实微头条≤ 2000字简洁明了,重点突出标签3-5个相关性强,覆盖主题
内容格式建议:
markdown
# 使用 Markdown 格式
## 二级标题
正文内容...
- 列表项 1
- 列表项 2
**加粗重点**
> 引用内容
数量:建议 3-5 个
选择原则:
示例: json
{
"tags": ["Node.js", "性能优化", "后端开发", "技术分享"]
}
症状:提示"未登录"或操作失败
解决:
调用 login_with_credentials 工具重新登录
症状:提示"标题长度不符合要求"
解决:
症状:提示"图片上传失败"
原因:
解决:
症状:提示"页面元素未找到"
原因:今日头条页面结构变化
解决:
症状:批量发布时部分数据失败
解决:
./data/cookies.json)用户:帮我把这篇文章发布到今日头条
AI:好的,我来帮你发布。请提供以下信息:
用户: 标题:Node.js 性能优化实战 正文:[提供详细内容] 图片:/Users/me/article-cover.jpg 标签:Node.js、性能优化、后端开发
AI:收到!我将为你发布到今日头条。
[内部流程]
json
{
"title": "Node.js 性能优化实战",
"content": "...",
"images": ["/Users/me/article-cover.jpg"],
"tags": ["Node.js", "性能优化", "后端开发"]
}
AI:✅ 文章已成功发布到今日头条!
📊 发布详情:
你可以在今日头条 App 或网站查看文章。
用户:发布一条微头条:"今天学习了 TypeScript 的高级类型,终于搞懂了条件类型和映射类型的区别!#TypeScript #学习笔记"
AI:好的,我来帮你发布微头条。
[调用 publish_micro_post]
json
{
"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 已正确配置!