Connect any AI agent to 11+ social platforms: schedule, publish & track posts via hosted MCP.
io.github.ndesv21/socialclaw — MCP Server
This MCP server connects an AI agent to 11+ social platforms, providing hosted scheduling, publishing, and tracking for posts. It is described as a “SocialClaw” social media scheduling CLI and an OpenClaw skill for agent-driven posting.
🛠️ Key Features
Connect any AI agent to 11+ social platforms
Schedule, publish, and track posts via hosted MCP
Supports social-posting across multiple named channels
🚀 Use Cases
Agentic workflows that publish content to social platforms
Automated social media scheduling and post management for X, LinkedIn, Instagram, and more
⚡ Developer Benefits
MCP server for “mcp” and “mcp-server” integration
Labeled as an “ai-agent” and “automation” tool for agent-driven publishing
Tooling includes a scheduling CLI and an OpenClaw skill
⚠️ Limitations
The provided description lists platforms and capabilities, but does not specify authentication, rate limits, or supported posting constraints
List connected social accounts in the SocialClaw workspace. Optionally filter by provider (x, facebook, instagram_business, instagram, linkedin, linkedin_page, pinterest, tiktok, telegram, discord, youtube, reddit, wordpress).
Get publish capabilities and provider rules for connected accounts: what media is allowed, text limits, and whether publishing is currently possible. Pass accountId for one account, or provider to filter, or neither for all.
Start connecting a new social account. For OAuth providers this returns an authorizeUrl the user must open in a browser. Telegram requires botToken and chatId; Discord requires webhookUrl.
Parameters4
provider
string
required
Provider to connect.
botToken
string
optional
Telegram bot token (telegram only).
chatId
string
optional
Telegram chat target, e.g. @yourchannel (telegram only).
Upload media (image or video) to SocialClaw hosted storage. Provide either sourceUrl (a public URL the server downloads) or contentBase64. Returns an asset id and a public URL usable as media_link in schedules.
Parameters3
filename
string
required
Filename including extension, e.g. launch.png.
sourceUrl
string
optional
Public URL to download the media from.
contentBase64
string
optional
Base64-encoded file content (alternative to sourceUrl).
Raw schema
{
"type": "object",
"properties": {
"filename": {
"type": "string",
"description": "Filename including extension, e.g. launch.png."
},
"sourceUrl": {
"type": "string",
"description": "Public URL to download the media from."
},
"contentBase64": {
"type": "string",
"description": "Base64-encoded file content (alternative to sourceUrl)."
}
},
"required": [
"filename"
]
}
validate_schedule
Validate a schedule document against provider rules, media limits, account state, and publish times WITHOUT creating any posts. Always run this before apply_schedule.
Parameters1
schedule
object
required
SocialClaw schedule document. Minimal shape: { timezone, posts: [{ account, name, description, publish_at, media_link? }] }. Campaign documents use { timezone, campaigns: [...] }. Per-post provider settings go in settings, e.g. TikTok drafts: settings: { tiktokPostMode: "draft" } uploads the media to the account's TikTok drafts (inbox) instead of publishing, and the creator finishes the post inside the TikTok app.
Raw schema
{
"type": "object",
"properties": {
"schedule": {
"type": "object",
"description": "SocialClaw schedule document. Minimal shape: { timezone, posts: [{ account, name, description, publish_at, media_link? }] }. Campaign documents use { timezone, campaigns: [...] }. Per-post provider settings go in settings, e.g. TikTok drafts: settings: { tiktokPostMode: \"draft\" } uploads the media to the account's TikTok drafts (inbox) instead of publishing, and the creator finishes the post inside the TikTok app.",
"additionalProperties": true
}
},
"required": [
"schedule"
]
}
preview_campaign
Preview how a campaign schedule document expands into concrete posts and steps without creating anything.
Parameters1
schedule
object
required
SocialClaw schedule document. Minimal shape: { timezone, posts: [{ account, name, description, publish_at, media_link? }] }. Campaign documents use { timezone, campaigns: [...] }. Per-post provider settings go in settings, e.g. TikTok drafts: settings: { tiktokPostMode: "draft" } uploads the media to the account's TikTok drafts (inbox) instead of publishing, and the creator finishes the post inside the TikTok app.
Raw schema
{
"type": "object",
"properties": {
"schedule": {
"type": "object",
"description": "SocialClaw schedule document. Minimal shape: { timezone, posts: [{ account, name, description, publish_at, media_link? }] }. Campaign documents use { timezone, campaigns: [...] }. Per-post provider settings go in settings, e.g. TikTok drafts: settings: { tiktokPostMode: \"draft\" } uploads the media to the account's TikTok drafts (inbox) instead of publishing, and the creator finishes the post inside the TikTok app.",
"additionalProperties": true
}
},
"required": [
"schedule"
]
}
apply_schedule
Create a publishing run from a schedule document. Posts are scheduled or published through connected accounts. Send an idempotencyKey so retries do not create duplicate runs.
Parameters2
schedule
object
required
SocialClaw schedule document. Minimal shape: { timezone, posts: [{ account, name, description, publish_at, media_link? }] }. Campaign documents use { timezone, campaigns: [...] }. Per-post provider settings go in settings, e.g. TikTok drafts: settings: { tiktokPostMode: "draft" } uploads the media to the account's TikTok drafts (inbox) instead of publishing, and the creator finishes the post inside the TikTok app.
idempotencyKey
string
optional
Stable key to deduplicate retries.
Raw schema
{
"type": "object",
"properties": {
"schedule": {
"type": "object",
"description": "SocialClaw schedule document. Minimal shape: { timezone, posts: [{ account, name, description, publish_at, media_link? }] }. Campaign documents use { timezone, campaigns: [...] }. Per-post provider settings go in settings, e.g. TikTok drafts: settings: { tiktokPostMode: \"draft\" } uploads the media to the account's TikTok drafts (inbox) instead of publishing, and the creator finishes the post inside the TikTok app.",
"additionalProperties": true
},
"idempotencyKey": {
"type": "string",
"description": "Stable key to deduplicate retries."
}
},
"required": [
"schedule"
]
}
publish_draft
Publish a previously created draft run, optionally at a given ISO-8601 start time.
List media (images/videos) the user has uploaded to their SocialClaw library, newest first. Each asset includes a publicUrl usable directly as media_link in validate_schedule/apply_schedule. Use this to find a previously uploaded file (e.g. from the dashboard) to post. Optionally filter by kind (image/video), mime, or a text query over filename/id.
Parameters5
query
string
optional
Optional text match over filename, id, kind, mime, or url.
kind
string
optional
Filter by media kind: image or video.
mime
string
optional
Optional mime prefix filter, e.g. video/mp4.
sort
string
optional
created_desc (default, newest first) or created_asc.
limit
number
optional
Maximum assets to return. Defaults to 24, capped at 48.
Raw schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Optional text match over filename, id, kind, mime, or url."
},
"kind": {
"type": "string",
"description": "Filter by media kind: image or video.",
"enum": [
"image",
"video"
]
},
"mime": {
"type": "string",
"description": "Optional mime prefix filter, e.g. video/mp4."
},
"sort": {
"type": "string",
"description": "created_desc (default, newest first) or created_asc.",
"enum": [
"created_desc",
"created_asc"
]
},
"limit": {
"type": "number",
"description": "Maximum assets to return. Defaults to 24, capped at 48."
}
}
}
get_post
Get one post including its delivery state and provider identifiers.
Social media scheduling CLI and OpenClaw skill for AI agents posting to X, LinkedIn, Instagram, Facebook Pages, TikTok, Discord, Telegram, YouTube, Reddit, WordPress, and Pinterest.
The package ships a Model Context Protocol server. Any MCP client (Claude Code, Claude Desktop, Cursor, and others) gets 17 validation-first publishing tools over your connected workspace accounts: list accounts and capabilities, upload media, validate and preview schedules, apply with idempotency keys, publish drafts, and inspect posts, attempts, runs, analytics, usage, and health.
If you have already run socialclaw login --api-key <key>, the server reuses the saved credentials and the env block is unnecessary. See getsocialclaw.com/mcp for the full tool list.
Claude Code plugin
Install the packaged Claude Code plugin from inside Claude Code:
This installs the marketplace plugin from skills/socialclaw/ with metadata from .claude-plugin/. It is the cleanest option if you want Claude to auto-invoke SocialClaw when a user asks to connect accounts, upload media, schedule posts, inspect delivery, or check analytics.
Claude slash command and skill file
If you want the explicit /socialclaw command instead of the full plugin flow:
bash
socialclaw install --claude
That installs the bundled command file from skill/claude/socialclaw.md into ~/.claude/commands/socialclaw.md.
Use this path when you want a lightweight Claude Code setup that:
exposes one clear SocialClaw command
keeps the workspace API key flow explicit
still lets Claude use the same hosted SocialClaw API and CLI workflow
OpenClaw and ClawHub
The OpenClaw-compatible skill bundle lives in skill/.
It is designed for OpenClaw and other compatible agent runtimes that can load a SKILL.md, work from a workspace API key, and call either:
the SocialClaw HTTP API directly
the socialclaw CLI as a client for the hosted service
This is the bundle to publish to ClawHub for OpenClaw discovery.
Other agents
SocialClaw is not limited to one agent framework. The repo also includes an agent manifest in skill/agents/openai.yaml, and the CLI works well for any runtime that can execute shell commands or make HTTP requests.
That makes SocialClaw a good fit for:
Codex and terminal-native agent workflows
Claude Code via plugin or command file
OpenClaw and ClawHub skills
custom internal agents that need one stable publishing surface for social channels
In practice, all of these share the same model:
connect customer accounts inside SocialClaw
create a workspace API key
upload media, validate, apply, inspect, analyze, and optionally delete supported posts through the hosted service
Supported providers
X
Facebook Pages
Instagram Business
Instagram standalone professional accounts
LinkedIn profile
LinkedIn page
Pinterest
TikTok
Discord
Telegram
YouTube
Reddit
WordPress
Pinterest is exposed as the pinterest provider in the public CLI and skill bundle. Its main publish target is board-centric, with support for standard pins, video pins, multi-image pins, board creation and section or catalog discovery, plus pin and account analytics. Product, collection, and idea surfaces should be treated as capability-gated or beta rather than assumed for every workspace.
TikTok supports one video or one photo gallery per post. Photo galleries can include up to 35 images and expose autoAddMusic plus photoCoverIndex; selecting a specific TikTok song or sound is not available through TikTok's Content Posting API. For photo galleries, normalize images before upload, preferably to 1080x1920 JPEGs for vertical slides or another standard TikTok-compatible aspect/size. Oversized or unusual image dimensions may pass SocialClaw validation and initial TikTok acceptance, then fail later with picture_size_check_failed; reconcile photo posts after publish to confirm TikTok reports PUBLISH_COMPLETE.
Publishing
Bump the version with npm version:
bash
npm version patch
git push && git push --tags
npm publish --access public
To sync reference files manually after editing skill/references/:
bash
npm run sync:references
Notes
Users connect accounts inside the hosted SocialClaw dashboard.
The dashboard and API live at https://getsocialclaw.com.
The npm package ships the CLI, skill docs, Claude Code plugin, and command asset.