{"name":"io.github.ndesv21/socialclaw","slug":"ndesv21-socialclaw","title":null,"description":"Connect any AI agent to 11+ social platforms: schedule, publish & track posts via hosted MCP.","url":"https://mcp.market/server/ndesv21-socialclaw","rating":null,"grade":"A","score":88,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":46,"stars":92,"forks":23,"downloads_week":83,"last_push_at":"2026-08-24T10:56:01.000Z","license":"MIT"},"uptime":{"percent":95,"checks":22,"ok":21,"last_checked_at":"2026-09-24T21:21:11.197Z","last_ok_at":"2026-09-24T21:21:11.197Z","latency_ms":224},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/ndesv21/socialclaw","website":"https://getsocialclaw.com","version":"0.1.20","remotes":[{"type":"streamable-http","url":"https://getsocialclaw.com/mcp","headers":[{"description":"Bearer <SocialClaw workspace API key>","isRequired":true,"isSecret":true,"name":"Authorization"}]}],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"socialclaw","version":"0.1.20","runtimeHint":"npx","transport":{"type":"stdio"},"runtimeArguments":[{"isRequired":true,"value":"mcp","type":"positional"}],"environmentVariables":[{"description":"SocialClaw workspace API key from https://getsocialclaw.com/dashboard","isRequired":true,"isSecret":true,"name":"SOCIALCLAW_API_KEY"}]}],"tools":[{"name":"account_capabilities","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"accountId":{"type":"string","description":"Optional account id."},"provider":{"type":"string","description":"Optional provider filter."}}}},{"name":"apply_schedule","description":"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.","write_action":true,"price_micros":0,"input_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 inbox mode: settings: { tiktokPostMode: \"draft\" } sends the media to TikTok's inbox notification flow 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"]}},{"name":"cancel_post","description":"Cancel a scheduled post before it publishes.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"postId":{"type":"string"}},"required":["postId"]}},{"name":"connect_account","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"provider":{"type":"string","description":"Provider to connect."},"botToken":{"type":"string","description":"Telegram bot token (telegram only)."},"chatId":{"type":"string","description":"Telegram chat target, e.g. @yourchannel (telegram only)."},"webhookUrl":{"type":"string","description":"Discord channel webhook URL (discord only)."}},"required":["provider"]}},{"name":"delete_instagram_comment","description":"Permanently delete an Instagram comment on the user's media. Prefer hide_instagram_comment when unsure.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string","description":"Instagram connected-account id or handle."},"commentId":{"type":"string"}},"required":["account","commentId"]}},{"name":"get_analytics","description":"Get analytics snapshots for a post, an account, or a run. scope must be post, account, or run; id is the matching identifier.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"scope":{"type":"string","enum":["post","account","run"]},"id":{"type":"string"},"window":{"type":"string","description":"Optional analytics window, e.g. 7d."}},"required":["scope","id"]}},{"name":"get_instagram_account_insights","description":"Get an Instagram account's insight trend (a daily time series, e.g. reach) over the last N days.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string","description":"Instagram connected-account id or handle."},"metric":{"type":"string","description":"Account metric, default reach (e.g. reach, profile_views, accounts_engaged)."},"days":{"type":"number","description":"Window in days (2-30, default 14)."}},"required":["account"]}},{"name":"get_instagram_comments","description":"Read the comments (and replies) on an Instagram post. Use list_instagram_media first to get a mediaId.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string","description":"Instagram connected-account id or handle."},"mediaId":{"type":"string","description":"The IG media id from list_instagram_media."},"limit":{"type":"number","description":"Max comments to return (default 25, capped at 100)."},"after":{"type":"string","description":"Pagination cursor from a previous response."}},"required":["account","mediaId"]}},{"name":"get_instagram_media_insights","description":"Get analytics for one Instagram post (reach, likes, comments, saved, shares, views). Use list_instagram_media for the mediaId.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string","description":"Instagram connected-account id or handle."},"mediaId":{"type":"string"},"mediaProductType":{"type":"string","description":"Optional: FEED, REELS, or STORY — refines which metrics are requested."}},"required":["account","mediaId"]}},{"name":"get_instagram_messages","description":"Read the messages in an Instagram direct-message conversation.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string","description":"Instagram connected-account id or handle."},"conversationId":{"type":"string","description":"Conversation id from list_instagram_conversations."},"limit":{"type":"number","description":"Max messages (default 25, capped at 100)."},"after":{"type":"string","description":"Pagination cursor from a previous response."}},"required":["account","conversationId"]}},{"name":"get_instagram_profile","description":"Get an Instagram account's profile stats: followers, follows, media count, bio.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string","description":"Instagram connected-account id or handle."}},"required":["account"]}},{"name":"get_post","description":"Get one post including its delivery state and provider identifiers.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"postId":{"type":"string"}},"required":["postId"]}},{"name":"hide_instagram_comment","description":"Hide or unhide an Instagram comment on the user's media. Set hidden=false to unhide.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string","description":"Instagram connected-account id or handle."},"commentId":{"type":"string"},"hidden":{"type":"boolean","description":"true to hide (default), false to unhide."}},"required":["account","commentId"]}},{"name":"list_accounts","description":"List connected social accounts in the SocialClaw workspace. Optionally filter by provider (x, facebook, instagram_business, instagram, threads, linkedin, linkedin_page, pinterest, tiktok, telegram, discord, youtube, reddit, wordpress).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"provider":{"type":"string","description":"Optional provider filter."}}}},{"name":"list_assets","description":"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.","write_action":false,"price_micros":0,"input_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."}}}},{"name":"list_instagram_conversations","description":"List the Instagram direct-message conversations for an account, most recent first. Each conversation includes `counterpart` (the other person's {id, username}) — use its id as the recipientId when replying; `participants` also lists the account itself.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string","description":"Instagram connected-account id or handle."},"limit":{"type":"number","description":"Max conversations (default 25, capped at 100)."},"after":{"type":"string","description":"Pagination cursor from a previous response."}},"required":["account"]}},{"name":"list_instagram_media","description":"List an Instagram account's recent posts (caption, permalink, timestamp, comment count) so you can find one to read or moderate comments on. account is the connected-account id or handle.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string","description":"Instagram connected-account id or handle."},"limit":{"type":"number","description":"Max media to return (default 25, capped at 100)."},"after":{"type":"string","description":"Pagination cursor from a previous response."}},"required":["account"]}},{"name":"list_instagram_mentions","description":"List recent @mentions of the workspace's Instagram accounts (captured from Instagram mention webhooks).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"limit":{"type":"number","description":"Max mentions (default 30, capped at 100)."}}}},{"name":"list_posts","description":"List posts in the workspace with optional filters.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"runId":{"type":"string"},"status":{"type":"string","description":"e.g. scheduled, published, action_required, failed, canceled."},"account":{"type":"string","description":"Account handle filter."},"provider":{"type":"string"},"campaignId":{"type":"string"},"limit":{"type":"number","description":"Maximum posts to return. Defaults to 20 and is capped at 50."},"offset":{"type":"number","description":"Offset for paging through results."}}}},{"name":"post_attempts","description":"List publish attempts for a post, including provider errors. Use this to debug failed posts.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"postId":{"type":"string"}},"required":["postId"]}},{"name":"preview_campaign","description":"Preview how a campaign schedule document expands into concrete posts and steps without creating anything.","write_action":false,"price_micros":0,"input_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 inbox mode: settings: { tiktokPostMode: \"draft\" } sends the media to TikTok's inbox notification flow instead of publishing, and the creator finishes the post inside the TikTok app.","additionalProperties":true}},"required":["schedule"]}},{"name":"publish_draft","description":"Publish a previously created draft run, optionally at a given ISO-8601 start time.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"runId":{"type":"string","description":"Draft run id."},"startAt":{"type":"string","description":"Optional ISO-8601 publish start time."}},"required":["runId"]}},{"name":"react_instagram_message","description":"React to a received Instagram direct message (e.g. love).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string","description":"Instagram connected-account id or handle."},"conversationId":{"type":"string"},"messageId":{"type":"string"},"recipientId":{"type":"string","description":"The other participant's Instagram-scoped user id (IGSID)."},"reaction":{"type":"string","description":"Reaction name, default love."}},"required":["account","conversationId","messageId","recipientId"]}},{"name":"refresh_analytics","description":"Fetch fresh analytics for a published post from the provider and store a new snapshot, then return it. Supported providers: Instagram, TikTok, YouTube, Reddit, X, Pinterest, Snapchat (others return an unsupported snapshot). Call this before get_analytics when you need current numbers rather than the last stored snapshot.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"postId":{"type":"string","description":"The published post id to refresh."},"window":{"type":"string","description":"Optional analytics window, e.g. 7d (default lifetime)."}},"required":["postId"]}},{"name":"reply_instagram_comment","description":"Reply to an Instagram comment on the user's media.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string","description":"Instagram connected-account id or handle."},"commentId":{"type":"string"},"message":{"type":"string","description":"The reply text."}},"required":["account","commentId","message"]}},{"name":"retry_post","description":"Retry a failed post.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"postId":{"type":"string"}},"required":["postId"]}},{"name":"run_status","description":"Get the status summary of a publishing run and its posts.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"runId":{"type":"string"}},"required":["runId"]}},{"name":"send_instagram_message","description":"Send an Instagram direct message — a text reply, or an image/video attachment via attachment_url. Only allowed within 24 hours of the recipient's last message unless a message tag (e.g. HUMAN_AGENT) is supplied.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"account":{"type":"string","description":"Instagram connected-account id or handle."},"conversationId":{"type":"string","description":"Conversation id (for routing/storage)."},"recipientId":{"type":"string","description":"The recipient's Instagram-scoped user id (IGSID)."},"text":{"type":"string","description":"Message body (omit when sending an attachment)."},"attachment_url":{"type":"string","description":"Public URL of an image/video to send as an attachment."},"attachment_type":{"type":"string","description":"Attachment type: image (default), video, or audio.","enum":["image","video","audio"]},"tag":{"type":"string","description":"Optional message tag, e.g. HUMAN_AGENT, to reply outside the 24h window."}},"required":["account","conversationId","recipientId"]}},{"name":"upload_asset","description":"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.","write_action":true,"price_micros":0,"input_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"]}},{"name":"validate_schedule","description":"Validate a schedule document against provider rules, media limits, account state, and publish times WITHOUT creating any posts. Always run this before apply_schedule.","write_action":false,"price_micros":0,"input_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 inbox mode: settings: { tiktokPostMode: \"draft\" } sends the media to TikTok's inbox notification flow instead of publishing, and the creator finishes the post inside the TikTok app.","additionalProperties":true}},"required":["schedule"]}},{"name":"workspace_health","description":"Get workspace health, including connection state across providers. Pass provider to check one provider's connections.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"provider":{"type":"string","description":"Optional provider to check connection health for."}}}},{"name":"workspace_usage","description":"Get workspace usage counters and plan entitlement consumption.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}}],"scan":{"score":88,"grade":"A","scanned_at":"2026-09-24T05:06:41.089Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-24T05:06:41.009Z","components":{"code":{"score":25,"max":25,"notes":["12 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1178ms"]},"poisoning":{"score":15,"max":15,"notes":["32 tool descriptions checked"]},"auth":{"score":8,"max":15,"notes":["API key sent as a header"]},"maintenance":{"score":12,"max":15,"notes":["last push 31 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://getsocialclaw.com/mcp","reachable":true,"authRequired":false,"latencyMs":1178,"serverInfo":{"name":"socialclaw","version":"0.1.15"}}],"packages":[{"registryType":"npm","identifier":"socialclaw","version":"0.1.20","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":0,"publishedAt":"2026-08-04T23:45:08.942Z","repositoryUrl":"git+https://github.com/ndesv21/socialclaw.git","weeklyDownloads":83}],"repo":{"found":true,"owner":"ndesv21","repo":"socialclaw","archived":false,"pushedAt":"2026-08-24T10:56:01Z","stars":92,"forks":23,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/147517448?v=4","ownerCreatedAt":"2023-10-10T12:56:50Z","license":"MIT"},"icon":{"url":"https://getsocialclaw.com/branding/socialclaw-app-icon.png","source":"site","width":512,"height":512},"presence":{"stars":92,"forks":23,"downloadsWeek":83,"license":"MIT","lastPushAt":"2026-08-24T10:56:01.000Z","score":46}}}},"grade_history":[],"reviews":[]}