io. github. ndesv21/ socialclaw
by ndesv21 · remote · local (npm) · no sign-in to list tools · v0.1.20 · published by GitHub user ndesv21
Connect any AI agent to 11+ social platforms: schedule, publish & track posts via hosted MCP.
34 tools: 2 can delete or cancel things, 3 do something that can't be undone, 9 change things and 20 only read.
Scanned Oct 21, 2026
- Deletes or cancels2Claude Code: deny: see these tools
- Can't be undone3Claude Code: ask: see these tools
- Changes things9Claude Code: ask: see these tools
- Only reads20Claude Code: allow: see these tools
3 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http socialclaw https://getsocialclaw.com/mcp --header 'Authorization: <your-authorization>'Findings
Matches of fixed checks, with the text they matched.
- Warnpost_attempts
The server marks "post_attempts" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "post_attempts" says "post": a word for a change.
- Warnrun_status
The server marks "run_status" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "run_status" says "run": a word for a change.
The server marks "refresh_analytics" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The description's first verb is "fetch": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
34 tools
Deletes or cancels 2Claude Code: deny
cancel_postCancel a scheduled post before it publishes.No findings
Why it is in this group
- The name "cancel_post" says "cancel": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Cancel a scheduled post before it publishes.
Annotations the server declares
- title: Cancel post
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
delete_instagram_commentPermanently delete an Instagram comment on the user's media.No findings
Why it is in this group
- The name "delete_instagram_comment" says "delete": a word for removing or ending something.
- The description says "Permanently delete".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Permanently delete an Instagram comment on the user's media. Prefer hide_instagram_comment when unsure.
Annotations the server declares
- title: Delete Instagram comment
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
Can't be undone 3Claude Code: ask
publish_draftPublish a previously created draft run, optionally at a given ISO-8601 start time.No findings
Why it is in this group
- The name "publish_draft" says "publish": a word for a change that another call does not undo.
Description, as the server wrote it Publish a previously created draft run, optionally at a given ISO-8601 start time.
Annotations the server declares
- title: Publish draft
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
reply_instagram_commentReply to an Instagram comment on the user's media.No findings
Why it is in this group
- The name "reply_instagram_comment" says "reply": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it Reply to an Instagram comment on the user's media.
Annotations the server declares
- title: Reply Instagram comment
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
send_instagram_messageSend an Instagram direct message — a text reply, or an image/video attachment via attachment_url.No findings
Why it is in this group
- The name "send_instagram_message" says "send": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it 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.
Annotations the server declares
- title: Send Instagram message
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Changes things 9Claude Code: ask
apply_scheduleCreate a publishing run from a schedule document.No findings
Why it is in this group
- The name "apply_schedule" says "apply": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Apply schedule
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
connect_accountStart connecting one of the user's own social accounts to their SocialClaw workspace.No findings
Why it is in this group
- The description's first verb is "start": a word for a change.
Description, as the server wrote it Start connecting one of the user's own social accounts to their SocialClaw workspace. For most providers this returns an authorizeUrl; give it to the user so they sign in with the provider themselves (SocialClaw never sees their password). Telegram and Discord have no sign-in page: Telegram takes the bot token and chat id of a bot the user created and made admin of their channel, and Discord takes a webhook URL the user created for their channel. Only pass values the user gave you for this purpose.
Annotations the server declares
- title: Connect account
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
hide_instagram_commentHide or unhide an Instagram comment on the user's media.No findings
Why it is in this group
- The name "hide_instagram_comment" says "comment": a word for a change.
Description, as the server wrote it Hide or unhide an Instagram comment on the user's media. Set hidden=false to unhide.
Annotations the server declares
- title: Hide Instagram comment
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
post_attemptsList publish attempts for a post, including provider errors.1 finding
Why it is in this group
- The name "post_attempts" says "post": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "post_attempts" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "post_attempts" says "post": a word for a change.
Description, as the server wrote it List publish attempts for a post, including provider errors. Use this to debug failed posts.
Annotations the server declares
- title: Post attempts
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
react_instagram_messageReact to a received Instagram direct message (e.g.No findings
Why it is in this group
- The name "react_instagram_message" says "react": a word for a change.
Description, as the server wrote it React to a received Instagram direct message (e.g. love).
Annotations the server declares
- title: React Instagram message
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
refresh_analyticsFetch fresh analytics for a published post from the provider and store a new snapshot, then return it.1 finding
Why it is in this group
- The description's first verb is "fetch": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Warn
The server marks "refresh_analytics" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The description's first verb is "fetch": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Refresh analytics
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
retry_postRetry a failed post.No findings
Why it is in this group
- The name "retry_post" says "post": a word for a change.
Description, as the server wrote it Retry a failed post.
Annotations the server declares
- title: Retry post
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
run_statusGet the status summary of a publishing run and its posts.1 finding
Why it is in this group
- The name "run_status" says "run": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "run_status" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "run_status" says "run": a word for a change.
Description, as the server wrote it Get the status summary of a publishing run and its posts.
Annotations the server declares
- title: Run status
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
upload_assetAdd an image or video to the user's SocialClaw media library so it can be attached to a post.No findings
Why it is in this group
- The name "upload_asset" says "upload": a word for a change.
Description, as the server wrote it Add an image or video to the user's SocialClaw media library so it can be attached to a post. Pass exactly one of: file (a file the user attached in this chat), sourceUrl (a direct public http(s) link to the image or video file, not a web page), or contentBase64 (small files only). Files up to 1 GB are supported through file or sourceUrl. The result is the asset: when status is ready, use its publicUrl as media_link in validate_schedule/apply_schedule. Large videos may come back with status uploading; then call get_asset with the asset id until status is ready (or failed) before scheduling.
Annotations the server declares
- title: Upload asset
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Only reads 20Claude Code: allow
account_capabilitiesGet publish capabilities and provider rules for connected accounts: what media is allowed, text limits, and whether publishing is currently possible.No findings
Why it is in this group
- The description's first verb is "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Account capabilities
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_analyticsGet analytics snapshots for a post, an account, or a run.No findings
Why it is in this group
- The name "get_analytics" says "get": a word for reading.
Description, as the server wrote it Get analytics snapshots for a post, an account, or a run. scope must be post, account, or run; id is the matching identifier.
Annotations the server declares
- title: Get analytics
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_assetGet one media asset from the user's SocialClaw library by id, including its status (uploading, ready, or failed), import progress, and publicUrl.No findings
Why it is in this group
- The name "get_asset" says "get": a word for reading.
Description, as the server wrote it Get one media asset from the user's SocialClaw library by id, including its status (uploading, ready, or failed), import progress, and publicUrl. Use it after upload_asset returns status uploading, until the asset is ready.
Annotations the server declares
- title: Get asset
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_instagram_account_insightsGet an Instagram account's insight trend (a daily time series, e.g.No findings
Why it is in this group
- The name "get_instagram_account_insights" says "get": a word for reading.
Description, as the server wrote it Get an Instagram account's insight trend (a daily time series, e.g. reach) over the last N days.
Annotations the server declares
- title: Get Instagram account insights
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_instagram_commentsRead the comments and replies people left on one of the user's own Instagram posts, so the user can review and answer them.No findings
Why it is in this group
- The name "get_instagram_comments" says "get": a word for reading.
Description, as the server wrote it Read the comments and replies people left on one of the user's own Instagram posts, so the user can review and answer them. Use list_instagram_media first to get a mediaId.
Annotations the server declares
- title: Get Instagram comments
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_instagram_media_insightsGet analytics for one Instagram post (reach, likes, comments, saved, shares, views).No findings
Why it is in this group
- The name "get_instagram_media_insights" says "get": a word for reading.
Description, as the server wrote it Get analytics for one Instagram post (reach, likes, comments, saved, shares, views). Use list_instagram_media for the mediaId.
Annotations the server declares
- title: Get Instagram media insights
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_instagram_messagesRead the messages in an Instagram direct-message conversation.No findings
Why it is in this group
- The name "get_instagram_messages" says "get": a word for reading.
Description, as the server wrote it Read the messages in an Instagram direct-message conversation.
Annotations the server declares
- title: Get Instagram messages
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_instagram_profileGet an Instagram account's profile stats: followers, follows, media count, bio.No findings
Why it is in this group
- The name "get_instagram_profile" says "get": a word for reading.
Description, as the server wrote it Get an Instagram account's profile stats: followers, follows, media count, bio.
Annotations the server declares
- title: Get Instagram profile
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
get_postGet one post including its delivery state and provider identifiers.No findings
Why it is in this group
- The name "get_post" says "get": a word for reading.
Description, as the server wrote it Get one post including its delivery state and provider identifiers.
Annotations the server declares
- title: Get post
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_profileIdentify the connected SocialClaw workspace: its stable id, name, and plan.No findings
Why it is in this group
- The name "get_profile" says "get": a word for reading.
Description, as the server wrote it Identify the connected SocialClaw workspace: its stable id, name, and plan. Use it to confirm which workspace you are acting on.
Annotations the server declares
- title: Get profile
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_accountsList connected social accounts in the SocialClaw workspace.No findings
Why it is in this group
- The name "list_accounts" says "list": a word for reading.
Description, as the server wrote it 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).
Annotations the server declares
- title: List accounts
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_assetsList media (images/videos) the user has uploaded to their SocialClaw library, newest first.No findings
Why it is in this group
- The name "list_assets" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: List assets
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_instagram_conversationsList the Instagram direct-message conversations for an account, most recent first.No findings
Why it is in this group
- The name "list_instagram_conversations" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: List Instagram conversations
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
list_instagram_mediaList an Instagram account's recent posts (caption, permalink, timestamp, comment count) so you can find one to read or moderate comments on.No findings
Why it is in this group
- The name "list_instagram_media" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: List Instagram media
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
list_instagram_mentionsList recent @mentions of the workspace's Instagram accounts (captured from Instagram mention webhooks).No findings
Why it is in this group
- The name "list_instagram_mentions" says "list": a word for reading.
Description, as the server wrote it List recent @mentions of the workspace's Instagram accounts (captured from Instagram mention webhooks).
Annotations the server declares
- title: List Instagram mentions
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
list_postsList posts in the workspace with optional filters.No findings
Why it is in this group
- The name "list_posts" says "list": a word for reading.
Description, as the server wrote it List posts in the workspace with optional filters.
Annotations the server declares
- title: List posts
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
preview_campaignPreview how a campaign schedule document expands into concrete posts and steps without creating anything.No findings
Why it is in this group
- The name "preview_campaign" says "preview": a word for reading.
Description, as the server wrote it Preview how a campaign schedule document expands into concrete posts and steps without creating anything.
Annotations the server declares
- title: Preview campaign
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
validate_scheduleValidate a schedule document against provider rules, media limits, account state, and publish times WITHOUT creating any posts.No findings
Why it is in this group
- The name "validate_schedule" says "validate": a word for reading.
Description, as the server wrote it Validate a schedule document against provider rules, media limits, account state, and publish times WITHOUT creating any posts. Always run this before apply_schedule.
Annotations the server declares
- title: Validate schedule
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
workspace_healthGet workspace health, including connection state across providers.No findings
Why it is in this group
- The description's first verb is "get": a word for reading.
Description, as the server wrote it Get workspace health, including connection state across providers. Pass provider to check one provider's connections.
Annotations the server declares
- title: Workspace health
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
workspace_usageGet workspace usage counters and plan entitlement consumption.No findings
Why it is in this group
- The description's first verb is "get": a word for reading.
Description, as the server wrote it Get workspace usage counters and plan entitlement consumption.
Annotations the server declares
- title: Workspace usage
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.1.20. Values in angle brackets are yours to fill in.
claude mcp add --transport http socialclaw https://getsocialclaw.com/mcp --header 'Authorization: <your-authorization>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__socialclaw__list_accounts",
"mcp__socialclaw__account_capabilities",
"mcp__socialclaw__get_asset",
"mcp__socialclaw__validate_schedule",
"mcp__socialclaw__preview_campaign",
"mcp__socialclaw__list_posts",
"mcp__socialclaw__list_assets",
"mcp__socialclaw__get_post",
"mcp__socialclaw__get_analytics",
"mcp__socialclaw__list_instagram_media",
"mcp__socialclaw__get_instagram_comments",
"mcp__socialclaw__get_instagram_media_insights",
"mcp__socialclaw__get_instagram_profile",
"mcp__socialclaw__get_instagram_account_insights",
"mcp__socialclaw__list_instagram_mentions",
"mcp__socialclaw__list_instagram_conversations",
"mcp__socialclaw__get_instagram_messages",
"mcp__socialclaw__workspace_usage",
"mcp__socialclaw__workspace_health",
"mcp__socialclaw__get_profile"
],
"ask": [
"mcp__socialclaw__connect_account",
"mcp__socialclaw__upload_asset",
"mcp__socialclaw__apply_schedule",
"mcp__socialclaw__publish_draft",
"mcp__socialclaw__post_attempts",
"mcp__socialclaw__retry_post",
"mcp__socialclaw__run_status",
"mcp__socialclaw__refresh_analytics",
"mcp__socialclaw__reply_instagram_comment",
"mcp__socialclaw__hide_instagram_comment",
"mcp__socialclaw__react_instagram_message",
"mcp__socialclaw__send_instagram_message"
],
"deny": [
"mcp__socialclaw__cancel_post",
"mcp__socialclaw__delete_instagram_comment"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as socialclaw. Review it before you use it.
