萌芽社会MCP
一个MCP(模型上下文协议)服务器,用于通过Sprout social创建和调度社交媒体帖子。该服务器使Goose等人工智能代理能够与Sprout Social的Publishing API交互,以创建草稿帖子、日程帖子和上传媒体。
特性
- 草稿职位:在发布之前创建草稿帖子以供审查
- 预定帖子:为未来发布的帖子安排特定的时间戳
- 媒体上传:从公共URL上传图像和视频
- 多网络支持:同时发布到多个社交网络(LinkedIn、Twitter/X、YouTube、Bluesky)
- 统一接口:使用单一工具处理具有可选媒体和日程安排的内容
先决条件
- Node.js(建议使用14或更高版本)
- 具有API访问权限的Sprout社交帐户
- Sprout Social API证书:
- API代币 - 客户ID - 组ID - 您要发布到的每个社交网络的个人资料ID
设置
1.安装依赖项
npm install2.配置环境变量
使用您的Sprout Social凭据设置以下环境变量:
必修的:
SPROUT_API_TOKEN-您的Sprout Social API代币SPROUT_CUSTOMER_ID-您的Sprout Social客户IDSPROUT_GROUP_ID-您的Sprout社交群ID
这些将根据您的工作流程而有所不同:
SPROUT_PROFILE_ID_LINKEDIN-LinkedIn个人资料IDSPROUT_PROFILE_ID_TWITTER-Twitter/X个人资料IDSPROUT_PROFILE_ID_YOUTUBE-YouTube个人资料IDSPROUT_PROFILE_ID_BLUESKY-Bluesky个人资料ID
您可以在shell配置中设置这些,也可以创建 .env 文件(未在Git中跟踪)。
获取您的凭据
如果您有Sprout Social API令牌,但需要查找其他ID,请使用以下curl命令:
步骤1:获取您的客户ID
curl -X GET \
https://api.sproutsocial.com/v1/metadata/client \
-H "Authorization: Bearer YOUR_SPROUT_API_TOKEN"这将返回您的客户ID和姓名。
步骤2:获取您的组ID和配置文件ID
替换 YOUR_CUSTOMER_ID 使用步骤1中的客户ID:
curl -X GET \
https://api.sproutsocial.com/v1/YOUR_CUSTOMER_ID/metadata/customer \
-H "Authorization: Bearer YOUR_SPROUT_API_TOKEN"这将返回每个连接的社交网络的所有组ID和配置文件ID。
3.建设项目
npm run build运行MCP服务器
这是一个使用stdio传输的MCP服务器,旨在向Goose或其他MCP客户端注册。
要直接启动服务器,请执行以下操作:
npm start对于自动重新加载的开发:
npm run dev在Goose注册
要在Goose中注册此MCP服务器,请将其添加到Goose配置中。服务器使用stdio传输,因此应在Goose设置中将其配置为本地MCP服务器。
可用工具
1.上传MediaFromUrl
从公共URL将媒体(图像或视频)上传到Sprout Social。
参数:
media_url(字符串,必填):媒体文件的公共HTTP/HTTPS URL
退货:
{
"success": true,
"media_id": "string",
"expiration_time": "ISO8601 timestamp"
}例子:
await uploadMediaFromUrl({
media_url: "https://example.com/image.jpg"
});______________________________________________________________________
2.创建DraftPost
在Sprout Social中创建一个草稿帖子(未安排,需要手动发布)。
参数:
text(string,必填):帖子的文本内容customer_profile_ids(number\[\],必填):要发布到的Sprout配置文件ID数组media(array,可选):媒体对象数组media_id和media_type(“照片”或“视频”)
退货:
{
"success": true,
"request": { /* payload sent */ },
"response": { /* Sprout API response */ }
}例子:
await createDraftPost({
text: "Check out our latest update! 🚀",
customer_profile_ids: [12345, 67890],
media: [{
media_id: "media_abc123",
media_type: "PHOTO"
}]
});______________________________________________________________________
3.创建ScheduledPost
创建一个计划在未来发布的帖子草稿。
参数:
text(string,必填):帖子的文本内容customer_profile_ids(number\[\],必填):要发布到的Sprout配置文件ID数组scheduled_times(string\[\],必填):ISO8601 UTC时间戳数组(例如,“2025-11-20T15:00:00Z”)media(array,可选):媒体对象数组media_id和media_type
退货:
{
"success": true,
"request": { /* payload sent */ },
"response": { /* Sprout API response */ }
}例子:
await createScheduledPost({
text: "Scheduled post for tomorrow! 📅",
customer_profile_ids: [12345],
scheduled_times: ["2025-11-21T14:00:00Z"],
media: [{
media_id: "media_xyz789",
media_type: "VIDEO"
}]
});______________________________________________________________________
4.获取配置文件
从环境变量中获取配置的Sprout Social配置文件ID。
参数: 无
退货:
{
"linkedin_company": "12345",
"twitter": "67890",
"youtube": "11111",
"bluesky": "22222",
"group_id": "999",
"customer_id": "888"
}例子:
await getConfiguredProfiles();______________________________________________________________________
5.创建PostFromContent
统一工具 它在一次通话中处理媒体上传(如果需要)和帖子创建。这是大多数用例的推荐工具。
参数:
caption(string,必填):帖子的文本内容customer_profile_ids(number\[\],必填):要发布到的Sprout配置文件ID数组media_url(字符串,可选):媒体文件的公共URLmedia_type(枚举,可选):“照片”或“视频”(默认为“照片”)schedule_time(字符串,可选):用于调度的ISO8601 UTC时间戳
退货:
{
"success": true,
"request_sent": { /* payload sent */ },
"sprout_response": { /* Sprout API response */ }
}示例(与媒体一起起草帖子):
await createPostFromContent({
caption: "New product launch! 🎉",
customer_profile_ids: [12345, 67890],
media_url: "https://example.com/product.jpg",
media_type: "PHOTO"
});示例(预定帖子):
await createPostFromContent({
caption: "Tomorrow's announcement 📢",
customer_profile_ids: [12345],
schedule_time: "2025-11-21T10:00:00Z"
});典型工作流程
选项1:使用个人工具
// 1. Upload media
const upload = await uploadMediaFromUrl({
media_url: "https://example.com/image.jpg"
});
// 2. Create scheduled post with media
await createScheduledPost({
text: "Check this out! 🎨",
customer_profile_ids: [12345, 67890],
scheduled_times: ["2025-11-21T15:00:00Z"],
media: [{
media_id: upload.media_id,
media_type: "PHOTO"
}]
});选项2:使用统一工具(推荐)
// Single call handles everything
await createPostFromContent({
caption: "Check this out! 🎨",
customer_profile_ids: [12345, 67890],
media_url: "https://example.com/image.jpg",
media_type: "PHOTO",
schedule_time: "2025-11-21T15:00:00Z"
});查找您的个人资料ID
要查找您的Sprout Social个人资料ID:
- 登录Sprout Social
- 引导到 出版 → 编排
- 选择配置文件时,请使用浏览器的开发人员工具(“网络”选项卡)
- 查找API调用以查看
customer_profile_id价值观 - 或者,联系Sprout Social support寻求帮助
备注
- 所有帖子均创建为 草稿 默认情况下,发布前需要在Sprout Social中获得批准
- 媒体文件必须可通过HTTP/HTTPS URL公开访问
- 上传的媒体有过期时间(在上传响应中返回)
- 计划时间必须采用ISO8601 UTC格式(例如,“2025-11-20T15:00:00Z”)
- 服务器使用stdio传输,使其适合本地MCP集成
错误处理
所有工具都返回一个JSON响应,其中包含 success 字段:
success: true-操作已成功完成success: false-操作失败(包括error带详细信息的字段)
安全
- 永不承诺 你的
.env文件或公开您的API凭据 - 这
.gitignore文件配置为排除环境文件 - 安全地存储凭据并定期轮换
API 参考
此服务器使用 斯普劳特社交出版API。有关API功能和限制的更多详细信息,请参阅Sprout Social API官方文档。
未来改进
- 添加对发布的支持(不仅仅是草稿)
- 实现帖子编辑和删除
- 添加对后分析检索的支持
- 对多个岗位实施批量操作
- 添加对网络特定内容要求的验证
- 支持其他媒体类型和格式
