Tool Reference
A complete reference for all tools exposed by the Outstand MCP server, with parameters, descriptions, and example usage.
Complete reference for all 28 tools exposed by the Outstand MCP server. Each tool includes its parameters, descriptions, and example usage.
Organization access
Every tool call follows organization permissions. OAuth tokens combine current membership with the immutable consent ceiling; reconnect and approve a new grant to gain permissions after promotion. Demotion narrows access and removal denies it. Legacy OAuth connections without a verified grant must reconnect. API-key connections use the creator's current role intersected with the key ceiling. Integrations can stop after creator demotion/removal. Discovery does not imply permission to execute a tool.
Creating a post requires posts:create and posts:publish; remote deletion requires posts:delete and posts:publish. Updating or
cancelling scheduled/published content also requires posts:publish. Media processing and account reconnect/tenant changes require their
companion capabilities. See the full matrix and workflow details in Organization permissions.
Posts
create_post
Create and publish or schedule a post to one or more social media platforms.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
accounts | string[] | Yes | Encoded account ids or exact usernames to publish to, as returned by list_social_accounts. Call that first - ids are opaque and must not be constructed. Network names (x, linkedin, …) and nicknames are not identifiers and do not resolve |
content | string | No | Text content for a single-container post. Either content or containers is required |
containers | object[] | No | Multi-container posts (threads, carousels). Each container is { content, media }, where media is an array of { url, filename, altText }. Every container after the first is published as a reply |
scheduledAt | string | No | ISO 8601 datetime for scheduling (up to 30 days ahead). Omit to publish immediately |
Platform-specific overrides (optional object per platform):
- Any network:
content- text published on that network instead of the shared body. Put a professional version inlinkedin.contentand a casual one ininstagram.content, and the top-levelcontentstays the fallback for every other network. Only the root text is overridden; media, first comments and thread replies stay shared - Instagram:
publishAsStory,reelThumbOffset,shareToFeed(Reels only;falsekeeps the Reel out of the main profile feed),userTags,collaborators,altText - YouTube:
isShort,categoryId,privacyStatus,madeForKids,containsSyntheticMedia,tags,title,thumbnailUrl - TikTok:
postMode,privacyLevel,disableComment,disableDuet,disableStitch,videoCoverTimestampMs(DIRECT_POST video only),autoAddMusic - Google Business:
topicType(STANDARD/EVENT/OFFER), event details, offer details, call-to-action - Pinterest:
board_id,link,alt_text,title - Threads: country geo-restrictions,
reply_control - Facebook:
publishAsStory,publishAsReel,mentions - LinkedIn:
article(link card),mentions,caption - Reddit:
subreddit,title,url,flairId,flairText,nsfw,spoiler,sendReplies - X, Bluesky:
contentonly
Field names are camelCase, except for Pinterest and
threads.reply_control, which are snake_case. Names that do not match are dropped and reported in the responsewarningsarray - sopost_modeis silently ignored, whilepostModetakes effect. TikTok defaults topostMode: "MEDIA_UPLOAD"(a draft in the creator's inbox); setpostMode: "DIRECT_POST"with aprivacyLevelto publish straight to the profile.
Example conversation:
"Post 'Excited to announce our new feature!' to my X and LinkedIn accounts"
"Post the launch to Instagram, LinkedIn and X - keep it casual on Instagram, make the LinkedIn version more detailed and professional, and keep X under 280 characters"
update_post
Update a post that has not been published yet. Every field is optional - only the fields you send are changed.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
post_id | string | Yes | The post ID |
content | string | No | New text content. Replaces the post body |
containers | object[] | No | New containers, same shape as create_post. Replaces the post body and all its media |
scheduledAt | string | null | No | New ISO 8601 publish time. Pass null to clear the schedule; omit to leave it untouched |
isDraft | boolean | No | Setting this to true cancels the queued publishing job; setting it to false re-queues the post |
Platform-specific overrides accept the same per-platform objects as create_post, and are merged per network and per field within a network - sending only tiktok leaves the stored YouTube configuration alone, and sending only tiktok.disableComment leaves the stored TikTok postMode and privacyLevel alone.
Notes:
- Sending
contentorcontainersreplaces the post body entirely; there is no per-container patching. - The set of social accounts a post publishes to cannot be changed. Delete the post and create a new one instead.
- Changing
scheduledAtcancels the queued publishing job and creates a new one for the new time. The response reportsrescheduled: truewhen that happened. - Posts that are already published, even for a single account, cannot be edited.
Example conversation:
"Move tomorrow's LinkedIn post to Friday at 9am and change the copy to mention the new pricing"
list_posts
Query posts with optional filters and pagination.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter by status: draft, scheduled, published, failed |
social_account_id | string | No | Filter by social account |
limit | number | No | Number of results (default: 20) |
offset | number | No | Pagination offset |
Example conversation:
"Show me my last 5 published posts on LinkedIn"
get_post
Retrieve details of a specific post including its containers and media.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
post_id | string | Yes | The post ID |
get_post_analytics
Fetch engagement metrics for a published post across platforms.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
post_id | string | Yes | The post ID |
Returns: likes, comments, shares, views, impressions, reach, engagement rate (where supported by the platform).
For Facebook, unavailable engagement counts are null and listed in
platform_specific.unavailable_fields. Available counts remain usable; incomplete engagement totals
and rates are null. Aggregated totals sum available measurements and can be partial. Rate averages
include measured zeros and exclude unavailable rates. See Facebook metrics.
Example conversation:
"How did my last tweet perform? Show me the engagement numbers."
delete_post
Delete a post or cancel a scheduled post.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
post_id | string | Yes | The post ID |
delete_remote_post
Delete a published post from the remote social network platforms it was published to. The Outstand record is kept, but the post is removed from the platforms themselves.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
post_id | string | Yes | The post ID |
Returns: Per-account results. Networks that do not support deletion via API (TikTok, Instagram) are reported as failed while others are still attempted. Threads is supported and requires the threads_delete scope; it only removes posts the connected account created.
repost_post
Repost (reshare) a published post to the social networks it was published to. Optionally add a quote (commentary) on top of the repost where the network supports it.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
post_id | string | Yes | The post ID |
quote | string | No | Commentary to add on top of the repost (quote-repost) where supported: X quote tweet, Bluesky quote post, LinkedIn reshare with commentary, Threads quote post. Omit for a plain repost/reshare. |
Returns: Per-account results (network, username, platform_post_id, status, repost_id, error). Networks without a native repost API (Facebook, Instagram, Pinterest, TikTok, Google Business, Vimeo, YouTube, Reddit) are reported as failed while others are still attempted. success is true if at least one network was reposted to.
Example conversation:
"Reshare my last LinkedIn post and add the comment 'Still true a month later.'"
create_reply
Reply to a published post on the platform.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
post_id | string | Yes | The encoded post ID |
content | string | Yes | The reply/comment text |
platform_post_id | string | No | The platform-specific post ID to reply to. Provide this or account_username |
account_username | string | No | Username or nickname of the social account to reply from. Provide this or platform_post_id |
parent_comment_id | string | No | Platform comment ID/URN to thread the reply under instead of the post. Facebook, Instagram and LinkedIn (single reply tier), Threads (any depth) |
get_replies
Fetch comments and replies on a published post. Returns { success, data }, where each comment
carries author plus a readable author_name (see
Replies Endpoint - Response Shape Migration).
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
post_id | string | Yes | The encoded post ID |
network | string | Yes | Social network name, e.g. linkedin |
username | string | Yes | Username or nickname of the social account that published the post |
include_replies | boolean | No | Nest each comment's replies under it. Defaults to top-level comments only |
resolve_author_names | boolean | No | LinkedIn only: resolve commenter URNs into author_name. Unresolvable commenters return author_name: null |
Social Accounts
list_social_accounts
List all connected social media accounts.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
network | string | No | Filter by network (e.g., x, linkedin, instagram) |
username | string | No | Filter by username |
Example conversation:
"Show me all my connected accounts"
get_social_account
Get details of a specific connected account.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
social_account_id | string | Yes | The account ID |
delete_social_account
Permanently disconnect a social account.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
social_account_id | string | Yes | The account ID |
connect_bluesky
Connect a Bluesky account using handle and app password (no OAuth required).
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | Yes | Bluesky handle (e.g., yourname.bsky.social) |
app_password | string | Yes | App password from Bluesky settings |
get_account_metrics
Get follower count and engagement metrics over a date range.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
social_account_id | string | Yes | The account ID |
start_date | string | No | Start date (ISO 8601) |
end_date | string | No | End date (ISO 8601) |
list_pinterest_boards
List available Pinterest boards for a connected Pinterest account. Required before creating pins.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
social_account_id | string | Yes | The Pinterest account ID |
Media
request_media_upload_url
Get a presigned URL for uploading an image or video file. The URL is valid for 1 hour.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
filename | string | Yes | Filename with extension (e.g., photo.jpg, video.mp4); determines the content type |
Returns: upload_url (presigned URL for HTTP PUT), media_id, filename, content_type, and expires_in (seconds).
Upload workflow:
- Call
request_media_upload_urlto get the presigned URL and media ID - Upload the file via HTTP PUT to the presigned URL, using the returned
content_typeas theContent-Typeheader - Call
confirm_media_uploadwith the media ID to activate it - Use the public URL returned by confirmation in a
create_postcontainer'smediaarray, together with the filename
confirm_media_upload
Confirm a completed upload and make the file available for use.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
media_id | string | Yes | The media ID from request_media_upload_url |
Returns: Public URL of the uploaded file. Media files are retained for 60 days.
list_media
List all media files in your organization.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | number | No | Number of results |
offset | number | No | Pagination offset |
get_media
Get details of a specific media file including metadata and URLs.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
media_id | string | Yes | The media ID |
delete_media
Delete a media file from storage.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
media_id | string | Yes | The media ID |
Social Networks
create_social_network
Store OAuth credentials for a social media platform (BYOK model).
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
network | string | Yes | Platform identifier (e.g., x, linkedin, instagram) |
client_key | string | Yes | OAuth Client ID / API Key |
client_secret | string | Yes | OAuth Client Secret / API Secret |
list_social_networks
List all configured social network credentials. Secrets are never returned.
get_social_network
Get configuration details of a specific platform.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
network_id | string | Yes | The network ID |
update_social_network
Update or rotate OAuth credentials for a platform.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
network_id | string | Yes | The network ID |
client_key | string | No | New Client ID |
client_secret | string | No | New Client Secret |
delete_social_network
Remove a platform configuration and its stored credentials.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
network_id | string | Yes | The network ID |
get_auth_url
Generate an OAuth authorization URL to connect a new social account.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
network | string | Yes | Platform identifier |
redirect_uri | string | No | URL to redirect to after authorization |
tenant_id | string | No | Tenant ID for multi-tenant setups |
scopes | string | No | Comma-separated OAuth scopes. Replaces the network's default scopes when provided |
force_account_selection | boolean | No | Always show the account-selection screen instead of re-using the signed-in account |
Instagram Direct Messages are not requested by default. To connect an account for the Conversations API, pass scopes as instagram_business_basic,instagram_business_content_publish,instagram_business_manage_comments,instagram_business_manage_insights,instagram_business_manage_messages.
Account
get_account_usage
View your current usage statistics and billing information.
Returns:
- Connected social account count vs. plan limit
- Post count in current billing period
- Billing period start and end dates
Example conversation:
"How many posts have I used this month?"