MCP Tool Reference

The PostFuze MCP server exposes 32 tools across six categories plus 2 read-only resources. Every tool is a thin authenticated wrapper over an endpoint in the REST API — it forwards your Authorization: Bearer sk_… key and inherits the exact same validation, scoping and response envelope. The parameters below mirror the request bodies and query strings documented in the API reference. Follow the setup guide to connect a client first.

A tool result is the raw JSON the REST API returned, serialized as text. Non-2xx responses come back with an isError flag set and the problem+json body intact, so the agent can read the failure and recover.

Catalog at a glance

CategoryCountTools
Posts & replies7create_post, list_posts, get_post, get_post_analytics, delete_post, create_reply, get_replies
Social accounts7list_social_accounts, get_social_account, delete_social_account, connect_bluesky, get_account_metrics, get_account_health, list_pinterest_boards
Media6upload_media, confirm_media_upload, list_media, get_media, set_media_thumbnail, delete_media
Social networks & connections8create_social_network, list_social_networks, get_social_network, update_social_network, delete_social_network, get_auth_url, list_pending_pages, finalize_connection
Webhooks3register_webhook, list_webhooks, test_webhook
Account & usage1get_account_usage
Resources2PostFuze://social-accounts, PostFuze://supported-networks

Naming

A few MCP tools use friendlier parameter names than the REST API and the server aliases them for you — for example network maps to the API’s platform, client_key to client_id, and social_account_ids to the post accounts[] array. You always use the MCP names listed below.

Posts & replies

Create, schedule, inspect and delete posts, and post native replies (first comments and threads). See the Posts and Replies API pages for the underlying contracts.

create_post

Create (and optionally schedule) a post, fanned out to one or more connected accounts. The MCP-only first_comment and thread_content sugar is compiled down to the REST containers array: the root post becomes container 0, the first comment container 1, and each thread entry a subsequent reply.

ParameterTypeRequiredDescription
contentstringYesText body of the root post.
social_account_idsstring[]YesIDs of the connected social accounts to publish to (at least one).
scheduled_atstringNoISO 8601 time to publish at (max 30 days out). Omit to publish immediately.
media_idsstring[]NoMedia IDs to attach to the root post.
first_commentstringNoText posted as the first comment/reply after the root post lands.
thread_contentstring[]NoAdditional thread entries published as sequential replies.
is_draftbooleanNoSave as a draft instead of queueing for publication.
tools/call arguments
{
  "content": "Launch day is here 🚀",
  "social_account_ids": ["a1b2c3d4-…", "b7c8d9e0-…"],
  "scheduled_at": "2026-06-10T15:00:00.000Z",
  "media_ids": ["m_9f8e7d6c"],
  "first_comment": "Full write-up: https://acme.com/blog/launch"
}

list_posts

List posts, most recent first. Supports status/account filtering and keyset (cursor) pagination.

ParameterTypeRequiredDescription
statusstringNoFilter by post status (e.g. draft, scheduled, queued, published).
social_account_idstringNoOnly posts targeting this connected account.
limitintegerNoPage size (default 25, max 100).
cursorstringNoKeyset cursor — pass a previous response’s next_cursor to fetch the next page.

get_post

Fetch a single post with its containers and per-account publication targets.

ParameterTypeRequiredDescription
post_idstringYesThe post ID.

get_post_analytics

Per-account and aggregated engagement metrics for a published post. Mirrors GET /posts/{id}/analytics.

ParameterTypeRequiredDescription
post_idstringYesThe post ID.

delete_post

Delete a post. Scheduled, queued and draft posts are canceled; content already published to a platform stays live on that platform.

ParameterTypeRequiredDescription
post_idstringYesThe post ID.

create_reply

Post a reply/comment under a published post — replied to on each of the post’s published accounts whose platform supports replies. Returns one row per target.

ParameterTypeRequiredDescription
post_idstringYesThe id of the published post to reply under.
contentstringYesReply text.

get_replies

List replies/comments recorded under a published post.

ParameterTypeRequiredDescription
post_idstringYesThe id of the published post to read replies from.

Social accounts

Inspect, disconnect and read metrics for the accounts your key can publish to. To connect a new account via OAuth, use get_auth_url in the next section. See Social accounts.

list_social_accounts

List connected social accounts the org can publish to.

ParameterTypeRequiredDescription
networkstringNoFilter by network/platform (e.g. x, linkedin, instagram).
usernamestringNoFilter by account username.

get_social_account

Fetch a single connected social account by ID.

ParameterTypeRequiredDescription
idstringYesThe social account ID.

delete_social_account

Disconnect a social account (revokes/disables it).

ParameterTypeRequiredDescription
idstringYesThe social account ID.

connect_bluesky

Connect a Bluesky account using a handle and an app password (Bluesky uses app passwords, not OAuth).

ParameterTypeRequiredDescription
handlestringYesBluesky handle, e.g. alice.bsky.social.
app_passwordstringYesA Bluesky app password generated in account settings.

get_account_metrics

Follower/engagement metrics for a connected account, optionally over a date range.

ParameterTypeRequiredDescription
idstringYesThe social account ID.
start_datestringNoRange start (unix seconds or ISO 8601).
end_datestringNoRange end (unix seconds or ISO 8601).

get_account_health

Check whether a connected account is currently publish-ready: it reports a healthy flag plus the account’s status and token state, so an agent can verify a channel before scheduling — and prompt the user to reconnect when a token has expired. Mirrors GET /social-accounts/{id}/health.

ParameterTypeRequiredDescription
idstringYesThe social account ID.

list_pinterest_boards

List the Pinterest boards on a connected Pinterest account (needed to pick a board when posting to Pinterest).

ParameterTypeRequiredDescription
idstringYesThe connected Pinterest social account ID.

Media

Upload images and video, then reference the returned media_id from create_post. Uploads are a two-step flow: begin the upload to get a presigned URL, PUT the bytes to it, then confirm. See Media.

upload_media

Begin a media upload: returns a presigned upload_url and a media_id. PUT the file to the URL, then confirm.

ParameterTypeRequiredDescription
file_namestringYesThe original file name.
content_typestringNoMIME type, e.g. image/png or video/mp4.

confirm_media_upload

Confirm a media upload after PUTting the file. Images and GIFs become ready immediately; videos enter processing while a cover frame is extracted, then become ready (re-fetch with get_media until then). Returns the media with thumbnail_url + thumbnail when available.

ParameterTypeRequiredDescription
media_idstringYesThe media ID returned by upload_media.

list_media

List uploaded media assets, most recent first.

ParameterTypeRequiredDescription
limitintegerNoPage size (max 100).
offsetintegerNoNumber of items to skip.

get_media

Fetch a single media asset and its public URL.

ParameterTypeRequiredDescription
media_idstringYesThe media ID.

set_media_thumbnail

Set or regenerate a media item’s thumbnail/cover. Pass source_media_id to use an existing image as a custom cover, or frame_time_ms to regenerate from a specific video frame (the two are mutually exclusive). The asset re-enters processing and the cover is reused automatically at publish time (Instagram Reels, YouTube, Facebook, Pinterest, TikTok). Mirrors POST /media/{id}/thumbnail.

ParameterTypeRequiredDescription
media_idstringYesThe video/image media ID to set a thumbnail for.
source_media_idstringNoAn existing image media ID to use as a custom cover. Mutually exclusive with frame_time_ms.
frame_time_msintegerNoVideo frame offset (ms) to regenerate the thumbnail from. Video media only.

delete_media

Delete a media asset.

ParameterTypeRequiredDescription
media_idstringYesThe media ID.

Social networks & connections

Configure your own OAuth app credentials per platform (bring-your-own-keys) and drive the hosted OAuth flow to connect accounts. Client secrets are encrypted at rest and never returned. See Social networks and the connecting-accounts guide.

Connecting an account is a chain: get_auth_url returns an authorize URL for a human to approve. When the callback comes back status=connected the account is already linked. When it returns status=pending&session=<token> (multi-account platforms like Facebook Pages or Google Business locations), call list_pending_pages with the session token to see the choices, then finalize_connection with the chosen page IDs. (For Bluesky, skip OAuth entirely and use connect_bluesky.)

create_social_network

Configure BYOK OAuth app credentials for a platform. The client secret is encrypted and never returned.

ParameterTypeRequiredDescription
networkstringYesPlatform, e.g. x, linkedin, instagram, pinterest.
client_keystringYesOAuth app client ID / key.
client_secretstringYesOAuth app client secret.

list_social_networks

List configured BYOK social network app credentials (secrets are never returned). Takes no parameters.

get_social_network

Fetch a single configured social network by its ID.

ParameterTypeRequiredDescription
network_idstringYesThe social network record ID.

update_social_network

Update BYOK credentials for a configured social network. Provide whichever fields you want to change.

ParameterTypeRequiredDescription
network_idstringYesThe social network record ID.
client_keystringNoNew OAuth client ID / key.
client_secretstringNoNew OAuth client secret.

delete_social_network

Delete a configured social network (soft delete).

ParameterTypeRequiredDescription
network_idstringYesThe social network record ID.

get_auth_url

Start the hosted OAuth flow for a platform: returns an authorize URL with signed state to connect an account.

ParameterTypeRequiredDescription
networkstringYesPlatform to connect, e.g. x, linkedin, facebook.
callback_urlstringNoWhere to redirect after the OAuth flow completes.

list_pending_pages

After get_auth_url and a callback with status=pending&session=<token>, list the pages/accounts available to connect (e.g. Facebook Pages, Google Business locations). Returns the network and an availablePages array (id, type, name, username, profilePictureUrl). Pass the chosen IDs to finalize_connection.

ParameterTypeRequiredDescription
session_tokenstringYesThe pending-connection session token from the OAuth callback (the session query param).

finalize_connection

Complete a pending multi-account connection by selecting which pages/accounts to link. Call after list_pending_pages, passing the chosen page IDs. Returns the connectedAccounts that were linked.

ParameterTypeRequiredDescription
session_tokenstringYesThe pending-connection session token from the OAuth callback.
selected_page_idsstring[]YesIDs of the pages/accounts to connect (from list_pending_pages availablePages[].id). At least one.

Webhooks

Register HTTPS endpoints and have PostFuze deliver signed events (post.published, post.error, account.token_expired, …) so an agent can react to outcomes instead of polling. See Webhooks.

register_webhook

Register a webhook endpoint. The one-time signing_secret is returned only on creation — store it to verify delivery signatures. Endpoint URLs must be public HTTPS (loopback/private/metadata addresses are rejected).

ParameterTypeRequiredDescription
urlstringYesThe HTTPS endpoint to deliver events to.
eventsstring[]YesEvent types to subscribe to (at least one).
descriptionstringNoA human-readable label for the endpoint.

list_webhooks

List the configured webhook endpoints (signing secrets are never returned). Takes no parameters.

test_webhook

Send a signed webhook.test event to a registered endpoint synchronously and return the delivery result, so you can verify an endpoint is reachable and your signature check works.

ParameterTypeRequiredDescription
webhook_idstringYesThe webhook endpoint ID to send the test event to.

Account & usage

Read your plan’s consumption for the current billing period. See Usage.

get_account_usage

Current billing-period usage: posts published vs. included, connected account count, and the billing period window. Takes no parameters.

Resources

Beyond tools, the server exposes two read-only MCP resources. Clients fetch them with resources/read; they return application/json and are handy as context an agent can pull in without making a tool call.

URINameContents
PostFuze://social-accountsConnected social accountsThe connected social accounts this API key can publish to (live, same data as list_social_accounts).
PostFuze://supported-networksSupported social networksThe 11 platforms PostFuze can publish to, each with its display name and per-post character limit.
PostFuze://supported-networks
{
  "data": [
    { "network": "x", "name": "X (Twitter)", "char_limit": 280 },
    { "network": "linkedin", "name": "LinkedIn", "char_limit": 3000 },
    { "network": "instagram", "name": "Instagram", "char_limit": 2200 },
    { "network": "tiktok", "name": "TikTok", "char_limit": 2200 },
    { "network": "facebook", "name": "Facebook", "char_limit": null },
    { "network": "threads", "name": "Threads", "char_limit": 500 },
    { "network": "bluesky", "name": "Bluesky", "char_limit": 300 },
    { "network": "youtube", "name": "YouTube", "char_limit": 5000 },
    { "network": "pinterest", "name": "Pinterest", "char_limit": 800 },
    { "network": "google_business", "name": "Google Business", "char_limit": 1500 },
    { "network": "reddit", "name": "Reddit", "char_limit": 40000 }
  ]
}

Publishing a video with an agent

Video is a three-tool chain because media is uploaded out-of-band and a video isn’t publish-ready until its cover frame is extracted. Have the agent run, in order:

  1. upload_media with the file name and content_type (e.g. video/mp4) → returns a presigned upload_url and media_id. The agent (or your app) PUTs the bytes to that URL.
  2. confirm_media_upload with the media_id. A video comes back processing; re-fetch with get_media until status: "ready" (and thumbnail_url appears). Optionally call set_media_thumbnail to pick a different cover frame.
  3. create_post with the media_id in media_ids and the target social_account_ids.

Wait for ready, and size for the strictest platform

Attaching a video before it reaches ready, or one that exceeds a target platform’s limits, fails validation. The same asset must satisfy everytarget — a clip fine for LinkedIn (5 GB) is rejected for the same post’s X target (512 MB cap). See the per-platform media-requirements matrix and size the asset accordingly, or fan the video out to one platform per post.

Per-platform configuration

Some platforms need an extra field at publish time — a Pinterest board_id, a YouTube title/privacy, a TikTok privacy level. create_postaccepts these through the post’s configuration, and the agent can discover the values it needs first: e.g. call list_pinterest_boards to pick a board before posting to Pinterest, or get_account_health to confirm a channel is connected and its token is valid before scheduling. See Configurations for the full per-platform field reference and the platform pages under Platformsfor each network’s requirements.

Next steps