# ai.social-api/socialapi (npm · mcp-socialapi)

MCP server for SocialAPI — manage social media comments, DMs, reviews, and mentions across platforms

- Trust score: 65/100 (medium)
- Change this week: +25
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `mcp-socialapi`: 65/100 (this document), [markdown](https://verifymcp.io/servers/ai-social-api-socialapi/mcp-socialapi.md), [page](https://verifymcp.io/servers/ai-social-api-socialapi/mcp-socialapi)

## Channel facts

- Registry: `npm`
- Package: `mcp-socialapi`
- Version: `1.2.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (95 of 99), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 19/100
  - Repository check failed: the declared repository URL returned HTTP 404.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 92 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 80/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 7864 tokens (~104/item across 75 items; 75 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add ai-social-api-socialapi -- npx -y mcp-socialapi
```

### Codex

```bash
codex mcp add ai-social-api-socialapi -- npx -y mcp-socialapi
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-social-api-socialapi": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "mcp-socialapi"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add ai-social-api-socialapi --command npx --arg -y --arg mcp-socialapi
```

### Hermes

```yaml
mcp_servers:
  ai-social-api-socialapi:
    command: "npx"
    args: ["-y", "mcp-socialapi"]
```

### Other

```json
{
  "mcpServers": {
    "ai-social-api-socialapi": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-socialapi"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 64, +64)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Maintenance: unverified → pass
- [functional] Licence: MIT

### 2026-07-31 (score 0, −74)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-28 (score 74, +34)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional improvement] Schema quality: unverified → excellent
- [functional] Licence: MIT

### 2026-07-27 (score 40)

First indexed and scored.

## MCP tools (75)

### `social_api_list_accounts` (~80 tokens)

List Accounts

List all connected social media accounts for the authenticated user. Returns account details including platform name, username, connection status, and platform-specific metadata (follower_count, video_count, avatar_url, etc.). Use the returned account IDs as the account_id parameter in all other tools.

Input parameters:

- `brand_id` (string): Optional brand ID to filter accounts by

### `social_api_connect_account` (~149 tokens)

Connect Account

Initiate connecting a new social media account. For OAuth2 platforms (instagram, facebook) returns an auth_url the user must visit to authorize access. After authorization, the account is connected automatically — no follow-up call needed. Present the auth_url link to the user and ask them to let you know once they've completed the authorization. For direct-auth platforms, stores credentials immediately and returns the new account_id.

Input parameters:

- `brand_id` (string): Optional brand ID to attach the account to. If omitted, a new brand is auto-created.
- `metadata` (object): Platform-specific metadata (e.g. redirect_uri)
- `platform` (string, required): Platform name (e.g. instagram, facebook)

### `social_api_exchange_oauth` (~95 tokens)

Exchange OAuth Code

Complete an OAuth2 account connection by exchanging the authorization code received after the user authorized access. Requires platform, the authorization code, and metadata including redirect_uri and state (from social_api_connect_account). For Facebook, a single user token may yield multiple Page accounts.

Input parameters:

- `code` (string, required): OAuth authorization code
- `metadata` (object): Metadata including redirect_uri and state
- `platform` (string, required): Platform name

### `social_api_disconnect_account` (~82 tokens)

Disconnect Account

Disconnect a connected social media account. Removes the stored OAuth tokens and disassociates the account from the user. Any scheduled posts targeting this account will fail on publish. This is irreversible — to reconnect, use social_api_connect_account again. Use social_api_list_accounts to find the account_id.

Input parameters:

- `account_id` (string, required): Connected account ID to disconnect

### `social_api_get_creator_info` (~98 tokens)

Get Creator Info

Fetch creator-facing profile details for a connected account: display name, username, profile picture, bio, follower/following counts, and platform-specific publishing capabilities (e.g. TikTok privacy levels, duet/stitch permissions). Use this before building a post UI so defaults and options match what the platform allows for this account. Use social_api_list_accounts to find the account_id.

Input parameters:

- `account_id` (string, required): Connected account ID

### `social_api_create_invite` (~145 tokens)

Create Invite

Create a platform invite link for a brand. The invite allows someone to connect a social media account to the brand via a one-time URL. expires_in_days must be one of: 1, 3, 7, 14, 30 (defaults to 7). Returns the invite token and shareable URL.

Input parameters:

- `brand_id` (string, required): Brand ID to create the invite for
- `expires_in_days` (integer): Number of days until the invite expires (1, 3, 7, 14, or 30; default 7)
- `platform` (string, required): Platform name (e.g. instagram, facebook, tiktok)

### `social_api_list_invites` (~60 tokens)

List Invites

List all platform invites for a brand, ordered by creation date (newest first). Returns both active and expired/used invites. Use is_active to filter in the response.

Input parameters:

- `brand_id` (string, required): Brand ID to list invites for

### `social_api_revoke_invite` (~54 tokens)

Revoke Invite

Revoke an active platform invite, making the invite URL immediately invalid. This is irreversible. Use social_api_list_invites to find the invite_id.

Input parameters:

- `invite_id` (string, required): Invite ID to revoke

### `social_api_list_brands` (~46 tokens)

List Brands

List all brands for the authenticated user. Each brand groups social accounts for one business, client, or project. Returns brand id, name, connected accounts count, and timestamps.

### `social_api_create_brand` (~66 tokens)

Create Brand

Create a new brand to group social accounts for a business, client, or project. Each brand can connect one account per platform. The number of brands is limited by your plan tier.

Input parameters:

- `name` (string, required): Name for the brand (e.g. company or client name)

### `social_api_update_brand` (~78 tokens)

Update Brand

Rename a brand. Only the name can be changed; connected accounts are not affected. Idempotent -- setting the same name has no effect. Use social_api_list_brands to find the brand_id first.

Input parameters:

- `brand_id` (string, required): ID of the brand to rename
- `name` (string, required): New name for the brand

### `social_api_delete_brand` (~39 tokens)

Delete Brand

Delete a brand and disconnect all its connected social accounts. This is irreversible.

Input parameters:

- `brand_id` (string, required): ID of the brand to delete

### `social_api_list_inbox_posts` (~234 tokens)

List Inbox Posts

List inbox posts (posts that have received comments) for the authenticated user. Optionally filter by account, platform, minimum comment count, or updated-since timestamp. Sorted newest first by default (sort_by=date). Use social_api_list_post_comments to fetch comments for a specific post. Supports pagination via cursor. Max 100 results (default 25).

Input parameters:

- `account_id` (string): Connected account ID (optional, omit for all accounts)
- `cursor` (string): Pagination cursor from previous response
- `limit` (string): Max results (1-100, default 25)
- `min_comments` (string): Only return posts with at least this many comments
- `page_id` (string): Optional page ID to filter by (for multi-page accounts like Facebook)
- `platform` (string): Filter by platform (instagram, facebook, …)
- `since` (string): RFC3339 timestamp — only return posts updated after this time
- `sort_by` (string): Sort key: date (default) or comments
- `sort_order` (string): asc or desc (default desc)

### `social_api_list_post_comments` (~147 tokens)

List Post Comments

List comments for a specific inbox post, sorted oldest-first. The inbox_post_id comes from social_api_list_inbox_posts. Requires the account_id that owns the post. Returns comment objects with text, author info, like_count, reply_count, is_hidden, and is_liked flags. Supports pagination via cursor. Max 100 results (default 25).

Input parameters:

- `account_id` (string, required): Connected account ID that owns the post
- `cursor` (string): Pagination cursor from previous response
- `inbox_post_id` (string, required): Inbox post ID (from social_api_list_inbox_posts)
- `limit` (string): Max results (1-100, default 25)

### `social_api_get_comment_replies` (~141 tokens)

Get Comment Replies

List replies to a specific comment. The interaction_id must be a comment ID starting with sapi_cmt_ (from social_api_get_comments). Returns reply interaction objects in the same format. Supports pagination via cursor and since filter. Max 100 results (default 20). Supported on Instagram and Facebook.

Input parameters:

- `account_id` (string, required): Connected account ID
- `cursor` (string): Pagination cursor
- `interaction_id` (string, required): Comment interaction ID (must start with sapi_cmt_)
- `limit` (string): Max results (1-100, default 20)
- `since` (string): RFC3339 timestamp to filter after

### `social_api_reply_to_comment` (~136 tokens)

Reply to Comment

Reply publicly to a post or a specific comment. Provide account_id and post_id; optionally also comment_id to target a specific comment thread. The reply appears publicly on the post. Max 2200 characters. Consumes 1 interaction credit. Returns the created reply ID.

Input parameters:

- `account_id` (string, required): Connected account ID
- `comment_id` (string): Platform comment ID to reply to (optional — replies to a specific comment)
- `post_id` (string, required): Platform post ID to reply to (or omit to use comment_id only)
- `text` (string, required): Reply text (max 2200 characters)

### `social_api_hide_comment` (~87 tokens)

Hide Comment

Hide a comment from public view on the platform. The comment remains in the database but is marked hidden. Reversible — use social_api_unhide_comment to restore. Supported on Instagram, Facebook, and Threads.

Input parameters:

- `account_id` (string, required): Connected account ID
- `comment_id` (string, required): Platform comment ID to hide
- `post_id` (string, required): Platform post ID

### `social_api_unhide_comment` (~65 tokens)

Unhide Comment

Restore a previously hidden comment to public view. Supported on Instagram, Facebook, and Threads.

Input parameters:

- `account_id` (string, required): Connected account ID
- `comment_id` (string, required): Platform comment ID to unhide
- `post_id` (string, required): Platform post ID

### `social_api_like_comment` (~70 tokens)

Like Comment

Like a comment on behalf of the connected account. Supported on Facebook and Twitter. Returns 501 for platforms without like support.

Input parameters:

- `account_id` (string, required): Connected account ID
- `comment_id` (string, required): Platform comment ID to like
- `post_id` (string, required): Platform post ID

### `social_api_unlike_comment` (~74 tokens)

Unlike Comment

Remove a like from a comment previously liked by the connected account. Supported on Facebook and Twitter. Returns 501 for platforms without like support.

Input parameters:

- `account_id` (string, required): Connected account ID
- `comment_id` (string, required): Platform comment ID to unlike
- `post_id` (string, required): Platform post ID

### `social_api_delete_comment` (~79 tokens)

Delete Comment

Permanently delete a comment from the platform and remove it from the inbox database. This action is irreversible. Supported on Instagram, Facebook, and YouTube.

Input parameters:

- `account_id` (string, required): Connected account ID
- `comment_id` (string, required): Platform comment ID to delete (irreversible)
- `post_id` (string, required): Platform post ID

### `social_api_private_reply_to_comment` (~117 tokens)

Private Reply to Comment

Send a private reply (DM) in response to a comment, visible only to the commenter. Max 1000 characters. Consumes 1 interaction credit. Supported on Instagram and Facebook. Returns 501 for platforms that do not support private replies.

Input parameters:

- `account_id` (string, required): Connected account ID
- `comment_id` (string, required): Platform comment ID to privately reply to
- `post_id` (string, required): Platform post ID containing the comment
- `text` (string, required): Message text (max 1000 characters)

### `social_api_moderate_comment` (~126 tokens)

Moderate Comment

Moderate a comment by hiding, unhiding, or deleting it. The interaction_id must be a comment ID starting with sapi_cmt_. Actions: 'hide' removes from public view (reversible), 'unhide' restores a hidden comment, 'delete' permanently removes it (irreversible). Returns 501 for platforms without moderation support.

Input parameters:

- `account_id` (string, required): Connected account ID
- `action` (string, required): Moderation action: hide, unhide, or delete
- `interaction_id` (string, required): Comment ID (must start with sapi_cmt_)

### `social_api_list_conversations` (~186 tokens)

List Conversations

List inbox DM conversations for the authenticated user, sorted by most recently active. Optionally filter by connected account, platform, or status (active/archived). Returns conversation objects with id, participant name/picture, last message preview, and unread count. Supports pagination via cursor. Max 100 results (default 25). Supported on Instagram and Facebook (Messenger).

Input parameters:

- `account_id` (string): Connected account ID (optional, omit to list across all accounts)
- `cursor` (string): Pagination cursor from previous response
- `limit` (string): Max results (1-100, default 25)
- `page_id` (string): Optional page ID to filter by (for multi-page accounts like Facebook)
- `platform` (string): Filter by platform (instagram, facebook, …)
- `status` (string): Conversation status: active (default) or archived

### `social_api_list_messages` (~112 tokens)

List Messages

List messages in a DM conversation, sorted newest first. The conversation_id comes from social_api_list_conversations. Returns message objects with id, direction (incoming/outgoing), text, sender info, and timestamp. Supports pagination via cursor. Max 200 results (default 50).

Input parameters:

- `conversation_id` (string, required): Conversation ID (from social_api_list_conversations)
- `cursor` (string): Pagination cursor from previous response
- `limit` (string): Max results (1-200, default 50)

### `social_api_send_dm` (~128 tokens)

Send DM

Send a direct message in an existing inbox conversation. The conversation_id comes from social_api_list_conversations. Specify the account_id to send from. Max 1000 characters. Consumes 1 interaction credit. On Facebook Messenger, messages can only be sent within 24 hours of the user's last message to you (platform policy). Supported on Instagram and Facebook.

Input parameters:

- `account_id` (string, required): Connected account ID to send from
- `conversation_id` (string, required): Conversation ID (from social_api_list_conversations)
- `text` (string, required): Message text (max 1000 characters)

### `social_api_get_conversation` (~65 tokens)

Get Conversation

Get details for a single DM conversation including participant info, unread count, status (active/archived), and last message preview. The conversation_id comes from social_api_list_conversations.

Input parameters:

- `conversation_id` (string, required): Conversation ID (from social_api_list_conversations)

### `social_api_update_conversation` (~95 tokens)

Update Conversation

Update a conversation's status. Set status to 'archived' to move it out of the active inbox, or 'active' to restore it. Idempotent -- setting the current status has no effect. Use social_api_list_conversations to find the conversation_id.

Input parameters:

- `conversation_id` (string, required): Conversation ID (from social_api_list_conversations)
- `status` (string, required): New status: active or archived

### `social_api_mark_conversation_read` (~71 tokens)

Mark Conversation Read

Mark all messages in a conversation as read, resetting the unread count to zero. Idempotent -- calling on an already-read conversation has no effect. Use social_api_list_conversations to find the conversation_id.

Input parameters:

- `conversation_id` (string, required): Conversation ID (from social_api_list_conversations)

### `social_api_events_summary` (~135 tokens)

Get Events Summary

Get aggregated event counts for a time window. Returns total events, failure count broken down by error category, counts by event category (post, inbox, account, api, webhook), inbox breakdown (comment vs DM vs mention), and the plan's retention window in days. Use to check system health, recent failures, or inbox activity volume.

Input parameters:

- `from` (string): RFC3339 start time for the summary window (e.g. 2026-04-10T00:00:00Z). Defaults to 24 hours ago.
- `to` (string): RFC3339 end time. Defaults to now.

### `social_api_create_export` (~163 tokens)

Create Export

Create an analytics export for a connected account. Enqueues an async job that collects post data, engagement metrics, and optionally video transcripts and AI vision analysis into a downloadable Excel report and shareable report page. Subject to plan limits: exports per month, cooldown hours between exports for the same account, and max one concurrent export. Use social_api_get_export to poll for completion. Free plan: 2 exports/mo, 7-day cooldown, 30 videos max. Paid plans have higher limits.

Input parameters:

- `account_id` (string, required): Connected account ID to export analytics for
- `include_transcript` (boolean): Include video transcripts in the export (plan-gated)
- `include_vision` (boolean): Include AI vision analysis in the export (plan-gated)

### `social_api_get_export` (~98 tokens)

Get Export

Get the status and result of an analytics export. Returns status (pending, processing, completed, failed), progress (total_videos, processed_videos), and for completed exports: a presigned Excel download URL (valid 15 minutes) and a shareable report page URL. Poll this after social_api_create_export to check completion.

Input parameters:

- `export_id` (string, required): Export ID (from social_api_create_export or social_api_list_exports)

### `social_api_list_exports` (~74 tokens)

List Exports

List the 50 most recent analytics exports for the authenticated user, newest first. Optionally filter by status (pending, processing, completed, failed). Returns export ID, account, platform, status, progress, and timestamps.

Input parameters:

- `status` (string): Filter by status: pending, processing, completed, or failed

### `social_api_get_export_videos` (~82 tokens)

Get Export Videos

Get the cached video data from a completed analytics export. Returns the full video array with per-video analytics (views, likes, comments, shares, duration, transcripts, vision analysis). The export must be in 'completed' status. Use social_api_get_export to check status first.

Input parameters:

- `export_id` (string, required): Export ID of a completed export

### `social_api_send_feedback` (~109 tokens)

Send Feedback

Send feedback to the SocialAPI team. Use when a user wants to report a bug, request a feature, or share general feedback. Type must be one of: 'bug', 'feature_request', or 'general'. The feedback is stored in the database and the team is notified. This is the preferred way to reach the team from within an MCP conversation.

Input parameters:

- `message` (string, required): The feedback message
- `type` (string, required): Feedback type: bug, feature_request, or general

### `social_api_list_keys` (~73 tokens)

List API Keys

List all API keys for the authenticated user. Returns key metadata including id, name, preview (first characters of the key), is_active status, last_used_at timestamp, and created_at. The full key value is never shown after creation. Use this to audit active keys or find a key_id for revocation.

### `social_api_create_key` (~85 tokens)

Create API Key

Generate a new API key (prefixed sapi_key_) for programmatic API access. The raw key is returned exactly once in the response and cannot be retrieved later -- store it securely immediately. All keys for a user share the same monthly quota pool. Provide a descriptive name to identify the key's purpose later.

Input parameters:

- `name` (string, required): Display name for the API key

### `social_api_revoke_key` (~86 tokens)

Revoke API Key

Permanently deactivate an API key. This is irreversible -- the key immediately stops working for all API requests. Use social_api_list_keys to find the key_id. Revoking an already-revoked key is a no-op (idempotent). Does not affect other active keys for the same user.

Input parameters:

- `key_id` (string, required): ID of the API key to revoke

### `social_api_list_account_pages` (~67 tokens)

List Account Pages

List pages (e.g. Facebook Pages) for a connected account. Returns page IDs, names, default/active status. Use the returned page IDs as the page_id parameter in publishing and inbox tools.

Input parameters:

- `account_id` (string, required): Connected account ID to list pages for

### `social_api_update_account_page` (~133 tokens)

Update Account Page

Update a page's default or active status for a connected account. Set is_default=true to make this the default page for publishing and inbox operations. Set is_active=false to deactivate a page (it will no longer receive events or appear in default listings). Idempotent -- setting the current value has no effect. Use social_api_list_account_pages to find the page_id first.

Input parameters:

- `account_id` (string, required): Connected account ID
- `is_active` (boolean): Activate or deactivate page
- `is_default` (boolean): Set as default page
- `page_id` (string, required): Page ID to update

### `social_api_list_posts` (~239 tokens)

List Posts

List all posts (drafts, scheduled, published, failed) with rich filtering. Supports filtering by status, platform, account_ids, date range, text search. Returns posts with per-platform delivery details and engagement metrics. Use cursor for pagination.

Input parameters:

- `account_ids` (string): Comma-separated connected account IDs to filter by
- `cursor` (string): Pagination cursor from previous response
- `from` (string): Start date (RFC3339); filters against the sort column
- `hidden` (boolean): Include hidden posts (default false)
- `limit` (integer): Max results (default 25, max 100)
- `platform` (string): Filter by platform name (e.g., instagram, facebook)
- `search` (string): Search posts by text content (case-insensitive)
- `sort` (string): Sort order: scheduled_asc (default), scheduled_desc, created_asc, created_desc
- `status` (string): Filter by status: draft, scheduled, publishing, published, partial, failed, cancelled
- `to` (string): End date (RFC3339); filters against the sort column

### `social_api_create_post` (~217 tokens)

Create Post

Create or schedule a post to one or more connected social media accounts. Omit targets and scheduled_at to create a draft. Provide targets to publish; omit scheduled_at for immediate publish, or provide an RFC3339 timestamp to schedule. Attach media by first uploading via social_api_get_media_upload_url, verifying with social_api_verify_media_upload, then passing the media_ids here. Consumes 1 post credit.

Input parameters:

- `first_comment` (string): First comment posted after publish
- `media_ids` (array): Media IDs from upload
- `publish_now` (boolean): Publish immediately when no scheduled_at
- `scheduled_at` (string): RFC3339 timestamp; omit for immediate publish
- `skip_duplicate_check` (boolean): Skip 24h duplicate content check
- `targets` (array): Per-account targets with overrides
- `text` (string, required): Post text content
- `title` (string): Post title (YouTube, Pinterest)
- `visibility` (string): public, private, or unlisted (default public)

### `social_api_update_post` (~154 tokens)

Update Post

Update the content of a draft, scheduled, or failed post. Only posts in 'draft', 'scheduled', or 'failed' status can be updated. Provide the post_id. Does not consume additional credits.

Input parameters:

- `first_comment` (string): Updated first comment
- `hidden` (boolean): Hide or unhide the post
- `media_ids` (array): Updated media IDs
- `post_id` (string, required): Post ID to update
- `scheduled_at` (string): Updated schedule time (RFC3339)
- `targets` (array): Replace targets (full list)
- `text` (string): Updated post text
- `title` (string): Updated title
- `visibility` (string): Updated visibility

### `social_api_delete_post` (~66 tokens)

Delete Post

Delete a published post from the social media platform, or cancel a scheduled/failed post before it is published. For published posts, this removes the post from the platform (irreversible). Provide the post_id.

Input parameters:

- `post_id` (string, required): Post ID to delete or cancel

### `social_api_retry_post` (~63 tokens)

Retry Post

Retry publishing a post that previously failed. Only posts in 'failed' or 'partial' status can be retried -- re-enqueues only the failed platform deliveries. Consumes 1 post credit.

Input parameters:

- `post_id` (string, required): Failed post ID to retry

### `social_api_unpublish_post` (~98 tokens)

Unpublish Post

Unpublish a post from one or all platforms. Removes the post from the social media platform but keeps the post record in SocialAPI. Optionally specify account_id to unpublish from a single platform only; omit to unpublish from all. This is irreversible on the platform side.

Input parameters:

- `account_id` (string): Account ID to unpublish from (omit for all)
- `post_id` (string, required): Post ID to unpublish

### `social_api_get_media_upload_url` (~203 tokens)

Get Media Upload URL

Get a presigned S3-compatible URL for uploading a media file to attach to a post. Provide the MIME type (e.g., image/jpeg, image/png, video/mp4) and the original filename. Upload workflow: (1) call this tool to get upload_url and media_id, (2) upload the file to the upload_url using a PUT request with the file bytes as body and Content-Type header matching the media_type (e.g. via curl: curl -X PUT -H 'Content-Type: image/jpeg' --data-binary @photo.jpg '<upload_url>'), (3) call social_api_verify_media_upload with the media_id, (4) pass the media_id to social_api_create_post in media_ids. The upload URL expires in 15 minutes.

Input parameters:

- `filename` (string, required): Original filename e.g. photo.jpg
- `media_type` (string, required): MIME type e.g. image/jpeg or video/mp4

### `social_api_verify_media_upload` (~82 tokens)

Verify Media Upload

Confirm that a media file was successfully uploaded to the presigned URL. Call this after uploading the file via HTTP PUT to the URL from social_api_get_media_upload_url. Once verified, the media_id can be included in social_api_create_post's media_ids array.

Input parameters:

- `media_id` (string, required): Media ID returned by social_api_get_media_upload_url

### `social_api_get_post` (~83 tokens)

Get Post

Get full details for a single post including text, status, scheduled/published timestamps, per-platform delivery details with engagement metrics (likes, comments, shares, saves), and media IDs. Use the post_id from social_api_list_posts or social_api_create_post.

Input parameters:

- `post_id` (string, required): Post ID (from social_api_list_posts or social_api_create_post)

### `social_api_get_post_metrics` (~76 tokens)

Get Post Metrics

Fetch live engagement metrics for a published post from each target platform. Returns per-platform metrics including like_count, comments_count, shares_count, saves_count, impressions, reach, and platform-specific extra_metrics. Triggers a real-time refresh from platform APIs.

Input parameters:

- `post_id` (string, required): Post ID to fetch live metrics for

### `social_api_list_events` (~201 tokens)

List Events

List developer events (unified activity log). Filter by category (post, webhook, inbox, api, account), status, platform, action, account, or resource. Shows publishing attempts, webhook deliveries, inbound platform events, API calls, and account lifecycle events. Sorted newest first.

Input parameters:

- `account_id` (string): Filter by connected account ID
- `action` (string): Filter by action (publish, delivery.failed, etc.)
- `category` (string): Comma-separated event categories: post, webhook, inbox, api, account
- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Max results (default 50, max 100)
- `platform` (string): Filter by platform (instagram, facebook, etc.)
- `resource_id` (string): Filter by resource (post ID, endpoint ID, etc.)
- `status` (string): Filter by status (success, failed, pending, skipped)

### `social_api_get_constraints` (~61 tokens)

Get Platform Constraints

Get platform-specific content constraints for post creation. Returns per-platform limits including max text length, max media count, supported media types, max file sizes, aspect ratio requirements, and video duration limits. Use before creating a post to validate content will be accepted.

### `social_api_validate_post` (~166 tokens)

Validate Post

Validate post content against platform-specific constraints before creating a post. Checks text length, media counts, file types, aspect ratios, and other platform rules. Returns valid (bool), errors (blocking issues), and warnings (non-blocking). Provide either platforms (by name) or account_ids (resolved to platforms). Use this before social_api_create_post to catch issues early.

Input parameters:

- `account_ids` (array): Connected account IDs — platforms are resolved from these. Provide either platforms or account_ids.
- `media_ids` (array): Media IDs to validate (from social_api_get_media_upload_url)
- `platforms` (array): Platform names to validate against (e.g. instagram, facebook). Provide either platforms or account_ids.
- `text` (string, required): Post text content to validate

### `social_api_list_media` (~95 tokens)

List Media

List uploaded media files in the user's media library. Returns media objects with id, filename, content_type, size_bytes, status (pending/ready), and created_at. Use media IDs from here or from social_api_get_media_upload_url when creating posts. Supports pagination via cursor.

Input parameters:

- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Max results (default 25, max 100)

### `social_api_get_storage_usage` (~56 tokens)

Get Storage Usage

Get storage usage and quota for the authenticated user's media library. Returns used_bytes, limit_bytes (-1 if unlimited), and file_count. Storage limits vary by plan: Free (100 MB), all paid plans (unlimited).

### `social_api_delete_media` (~67 tokens)

Delete Media

Permanently delete a media file from the media library and object storage. This is irreversible. If the media is referenced by any post, the post will lose that attachment. Use social_api_list_media to find the media_id.

Input parameters:

- `media_id` (string, required): Media ID to delete

### `social_api_get_reviews` (~168 tokens)

Get Reviews

List reviews across connected accounts (applicable to Google Business, Trustpilot, and similar review platforms). Fan-out queries all matching accounts in parallel. Returns review interaction objects with id, reviewer name, rating, text, and timestamp. Use social_api_reply_to_review to respond. Returns 501 for Instagram, Facebook, and platforms without review support. Supports account_id or platform filter and pagination.

Input parameters:

- `account_id` (string): Connected account ID (optional, omit to fan-out across all accounts)
- `cursor` (string): Pagination cursor
- `limit` (string): Max results per account (1-100, default 20)
- `platform` (string): Filter by platform (google, trustpilot, …)
- `since` (string): RFC3339 timestamp to filter after

### `social_api_reply_to_review` (~96 tokens)

Reply to Review

Reply to a review as the business. The reply appears publicly as the business response. Requires account_id and the platform review_id. Max 2200 characters. Consumes 1 interaction credit. Returns the created reply ID.

Input parameters:

- `account_id` (string, required): Connected account ID
- `review_id` (string, required): Platform review ID to reply to
- `text` (string, required): Reply text (max 2200 characters)

### `social_api_update_review_reply` (~96 tokens)

Update Review Reply

Update an existing business reply to a review. Requires account_id and the platform review_id. Max 2200 characters. Supported on Google Business. Returns 501 for platforms that do not support updating review replies.

Input parameters:

- `account_id` (string, required): Connected account ID
- `review_id` (string, required): Platform review ID whose reply should be updated
- `text` (string, required): Updated reply text (max 2200 characters)

### `social_api_delete_review_reply` (~78 tokens)

Delete Review Reply

Delete a business reply to a review. Requires account_id and the platform review_id. Supported on Google Business. Returns 501 for platforms that do not support deleting review replies. This action is irreversible.

Input parameters:

- `account_id` (string, required): Connected account ID
- `review_id` (string, required): Platform review ID whose reply should be deleted

### `social_api_get_mentions` (~130 tokens)

Get Mentions

List brand mentions and tags for a connected account -- posts by other users that mention or tag your account. Returns interaction objects with id (prefixed sapi_mnt_), author, text, media_url, and timestamp. Supported on Instagram (@mentions and tags) and Facebook (page mentions). Returns 501 for platforms without mention tracking. Supports pagination.

Input parameters:

- `account_id` (string, required): Connected account ID
- `cursor` (string): Pagination cursor
- `limit` (string): Max results (1-100, default 20)
- `since` (string): RFC3339 timestamp to filter after

### `social_api_get_usage` (~109 tokens)

Get Usage

Get resource usage for the current billing period. Returns counts and limits for brands (brand slots), posts (create_post and retry_post operations), and interactions (reply and send_dm operations), plus period_start and period_end timestamps. Use before billed operations to check remaining quota. Free plan: 2 brands, 10 posts/mo, 50 interactions/mo. All paid plans (Starter, Pro, Business, Enterprise): unlimited posts and interactions. Brand limits vary by plan. -1 means unlimited.

### `social_api_get_account_limits` (~97 tokens)

Get Account Limits

Get platform-specific API usage limits and quotas for a connected account, as reported by the platform itself (e.g., Instagram daily posting limits). Returns a map of quota keys to remaining counts. Not all platforms expose usage limits -- returns 501 for Facebook and platforms that do not provide this data. These are the platform's own rate limits, separate from SocialAPI billing quotas.

Input parameters:

- `account_id` (string, required): Connected account ID

### `social_api_get_me` (~65 tokens)

Get Me

Get the authenticated user's profile. Returns id (UUID), email, plan tier (free, starter, pro, business, or enterprise), onboarding status (true if onboarding is incomplete), and avatar_url. Use this to check the current plan tier before performing plan-gated operations.

### `social_api_patch_me` (~74 tokens)

Update Profile

Update the authenticated user's profile. Currently only supports marking onboarding complete by setting onboarding=false. Setting onboarding=true returns an error. Returns the updated user profile. Idempotent -- calling with onboarding=false when already false has no effect.

Input parameters:

- `onboarding` (boolean, required): Set to false to mark onboarding complete (only false is allowed)

### `social_api_delete_me` (~66 tokens)

Delete Account

Permanently delete the authenticated user account and ALL associated data including API keys, connected social accounts, usage logs, webhook endpoints, and OAuth consents. This action is completely irreversible -- all API keys for this user stop working immediately. Confirm the user's intent explicitly before calling this tool.

### `social_api_list_webhooks` (~72 tokens)

List Webhooks

List all registered webhook endpoints for the authenticated user. Returns endpoint details including id, url, subscribed event types, is_active status, and created_at. Available event types: comment.received, dm.received, review.received, mention.received, post.published, post.failed, post.scheduled.

### `social_api_create_webhook` (~124 tokens)

Create Webhook

Register a new webhook endpoint to receive real-time event notifications. The URL must be HTTPS. Specify which event types to subscribe to (comment.received, dm.received, review.received, mention.received, post.published, post.failed, post.scheduled). The signing secret is returned once -- store it securely to verify payload signatures (HMAC-SHA256).

Input parameters:

- `events` (array, required): Event types to subscribe to (comment.received, dm.received, review.received, mention.received)
- `url` (string, required): HTTPS webhook endpoint URL

### `social_api_update_webhook` (~111 tokens)

Update Webhook

Update an existing webhook endpoint. Change the URL, subscribed event types, or enable/disable it (is_active). At least one field must be provided. Idempotent -- setting the same values has no effect. Use social_api_list_webhooks to find the webhook_id.

Input parameters:

- `events` (array): New event types
- `is_active` (boolean): Enable or disable the webhook
- `url` (string): New HTTPS URL
- `webhook_id` (string, required): Webhook endpoint ID

### `social_api_delete_webhook` (~67 tokens)

Delete Webhook

Permanently delete a webhook endpoint. Future events will no longer be delivered to this URL. Any in-flight deliveries may still complete. This is irreversible. Use social_api_list_webhooks to find the webhook_id.

Input parameters:

- `webhook_id` (string, required): Webhook endpoint ID to delete

### `social_api_get_webhook` (~92 tokens)

Get Webhook

Get details for a single webhook endpoint including URL, subscribed events, is_active status, a secret hint (last 4 chars only -- the full secret is returned once at creation), and delivery stats for the last 24 hours and last 7 days (delivered vs failed counts). Use social_api_list_webhooks to find the webhook_id.

Input parameters:

- `webhook_id` (string, required): Webhook endpoint ID

### `social_api_list_webhook_deliveries` (~149 tokens)

List Webhook Deliveries

List recent delivery attempts for a webhook endpoint. Each delivery includes id, event_type, status (pending, delivered, failed), HTTP response code, attempt count, and timestamps. Filter by status or event_type. Keyset cursor pagination via the cursor field. Use this to debug failing webhook endpoints.

Input parameters:

- `cursor` (string): Pagination cursor from previous response
- `event_type` (string): Filter by event type (e.g. comment.received)
- `limit` (integer): Page size (1-100, default 50)
- `status` (string): Filter by status: pending, delivered, failed
- `webhook_id` (string, required): Webhook endpoint ID

### `social_api_get_webhook_delivery` (~89 tokens)

Get Webhook Delivery

Get full details of a single webhook delivery attempt: request payload, response body, response headers, HTTP status code, attempt count, and any error message. Use social_api_list_webhook_deliveries to find the delivery_id. Essential for diagnosing why a delivery failed.

Input parameters:

- `delivery_id` (string, required): Delivery attempt ID
- `webhook_id` (string, required): Webhook endpoint ID

### `social_api_retry_webhook_delivery` (~94 tokens)

Retry Webhook Delivery

Manually retry a failed webhook delivery. Re-sends the original payload to the endpoint URL with a fresh attempt count. Use this after fixing an endpoint that was returning errors. Use social_api_list_webhook_deliveries (filtered by status=failed) to find the delivery_id.

Input parameters:

- `delivery_id` (string, required): Delivery attempt ID to retry
- `webhook_id` (string, required): Webhook endpoint ID

### `social_api_test_webhook` (~130 tokens)

Test Webhook

Send a test event to a webhook endpoint to verify it is reachable and correctly configured. Takes an event_type (e.g. comment.received) and a raw JSON payload. Returns the delivery result including HTTP response code and any error. Does not charge the user's event quota. Use this during setup to confirm your endpoint validates the signature correctly.

Input parameters:

- `event_type` (string, required): Event type to simulate (e.g. comment.received)
- `payload` (object, required): JSON payload to send as the event body
- `webhook_id` (string, required): Webhook endpoint ID to send test payload to

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/ai-social-api-socialapi/mcp-socialapi#diagnostics

## Score history

- 2026-08-03: 65
- 2026-08-02: 64
- 2026-08-01: 0
- 2026-07-31: 0
- 2026-07-30: 74
- 2026-07-29: 74
- 2026-07-28: 74
- 2026-07-27: 40

## Links

- npm package: https://www.npmjs.com/package/mcp-socialapi
- Socket report: https://socket.dev/npm/package/mcp-socialapi
- Website: https://social-api.ai/
- Changelog RSS feed: https://verifymcp.io/servers/ai-social-api-socialapi/mcp-socialapi/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/ai-social-api-socialapi/mcp-socialapi/changelog.json
- HTML version of this page: https://verifymcp.io/servers/ai-social-api-socialapi/mcp-socialapi
