社交媒体发布服务

一个用于通过Sprout Social创建和安排社交媒体帖子的MCP服务器,支持多网络发布、媒体上传和定时发布功能。

  • by EbonyLouis
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 EbonyLouis/sprout-social-mcp

使用说明

萌芽社会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 install

2.配置环境变量

使用您的Sprout Social凭据设置以下环境变量:

必修的:

  • SPROUT_API_TOKEN -您的Sprout Social API代币
  • SPROUT_CUSTOMER_ID -您的Sprout Social客户ID
  • SPROUT_GROUP_ID -您的Sprout社交群ID

这些将根据您的工作流程而有所不同:

  • SPROUT_PROFILE_ID_LINKEDIN -LinkedIn个人资料ID
  • SPROUT_PROFILE_ID_TWITTER -Twitter/X个人资料ID
  • SPROUT_PROFILE_ID_YOUTUBE -YouTube个人资料ID
  • SPROUT_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 (字符串,可选):媒体文件的公共URL
  • media_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:

  1. 登录Sprout Social
  2. 引导到 出版 → 编排
  3. 选择配置文件时,请使用浏览器的开发人员工具(“网络”选项卡)
  4. 查找API调用以查看 customer_profile_id 价值观
  5. 或者,联系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官方文档。

未来改进

  1. 添加对发布的支持(不仅仅是草稿)
  2. 实现帖子编辑和删除
  3. 添加对后分析检索的支持
  4. 对多个岗位实施批量操作
  5. 添加对网络特定内容要求的验证
  6. 支持其他媒体类型和格式