Skip to content

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.

Deletes · 2Final · 3Changes · 9

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

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.

3 warn
  • The server marks "post_attempts" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "post_attempts" says "post": a word for a change.

    What this check looks for
  • The server marks "run_status" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "run_status" says "run": a word for a change.

    What this check looks for
  • The server marks "refresh_analytics" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The description's first verb is "fetch": a word for reading.

    What this check looks for

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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "post_attempts" says "post": a word for a change.

      What this check looks for
    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.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The description's first verb is "fetch": a word for reading.

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "run_status" says "run": a word for a change.

      What this check looks for
    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.

.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.