Tools
Reference for every Onepostly MCP tool, with inputs, outputs, and error codes.
Look up the inputs each tool accepts, the result it returns, and the errors it can raise. Your assistant reads the same definitions from the server, so this page is for checking what a tool can do or debugging a call.
Tool Catalog
| Tool | Access | Use it to |
|---|---|---|
connections_list | Read | List connected accounts and get their accountId values. |
publish_options | Read | Get the boards or privacy levels an account needs before posting. |
posts_create | Write | Publish now or schedule a post to one or more accounts. |
posts_list | Read | List posts, newest first, with filters. |
posts_get | Read | Get one post with the status of each destination. |
analytics_get | Read | Read normalized metrics for a post. |
posts_delete | Write | Delete published posts from the platform. |
Write tools need the mcp:write scope. See Access Levels.
Every tool returns a one-line text summary (for example Found 2 connected accounts.) and a structured result. The Output section of each tool describes the structured result.
connections_list
Lists the connected social accounts in the workspace. Call it first to get the accountId values the other tools need.
Input
Prop
Type
Output
Prop
Type
authHealth: "action_required" means the account must be reconnected. See Reconnect an Account.
publish_options
Returns the values an account requires before you can post to it. Pinterest needs a board and TikTok needs a privacy level. Other platforms return an empty required list and an empty options object.
Input
Prop
Type
Output
Prop
Type
Example output for a TikTok account:
{
"account": {
"id": "5a2d9c1e-7b4f-4e83-a6d0-3c8b1f9e2a74",
"platform": "tiktok",
"displayName": "Acme",
"handle": "acme",
"avatarUrl": null,
"status": "active",
"authHealth": "healthy"
},
"required": ["privacyLevel"],
"options": {
"privacyLevelOptions": ["PUBLIC_TO_EVERYONE", "MUTUAL_FOLLOW_FRIENDS", "SELF_ONLY"],
"commentDisabled": false,
"duetDisabled": false,
"stitchDisabled": true,
"maxVideoPostDurationSec": 600
}
}posts_create
Publishes a post now, or schedules it when you pass scheduledFor. One call can target several accounts. The tool accepts the same fields as POST /v1/posts, plus a clientRequestId idempotency key, and mediaKind is optional. See Publishing for how posts and destinations behave.
Input
Prop
Type
Rules that depend on mediaKind:
textcannot includemediaUrls. Every other kind needs at least 1 URL.multi-imageneeds at least 2 URLs.image,video,reel, andstoriesaccept exactly 1 URL.
Which kinds each platform accepts is listed in Publishing. Media URLs must meet the media URL requirements. The server has no upload tool, so upload files with the Media API before the call.
Destination Fields
Each destination takes accountId (required), an optional text that replaces the root text for that account, and the platform fields for its platform, such as boardId for Pinterest or privacyLevel for TikTok. The complete list per platform is in Platform Settings. A field the account's platform does not accept fails with VALIDATION_ERROR, and the message names the field and the platforms that accept it.
Examples
Publish a text post now:
{
"text": "Spring collection is live.",
"destinations": [{ "accountId": "YOUR_X_ACCOUNT_ID" }]
}Schedule an image post with a retry-safe key:
{
"text": "Doors open at 9.",
"mediaUrls": ["https://cdn.onepostly.com/media/storefront.jpg"],
"scheduledFor": "2027-03-15T09:00:00",
"timezone": "America/New_York",
"clientRequestId": "launch-post-2027-03-15",
"destinations": [
{ "accountId": "YOUR_INSTAGRAM_ACCOUNT_ID" },
{ "accountId": "YOUR_PINTEREST_ACCOUNT_ID", "boardId": "1084523710032119087" }
]
}Output
Prop
Type
A queued post has not reached the platform yet. Call posts_get to follow it to published or failed. Status meanings are in Post Status.
posts_list
Lists the workspace's posts, newest first.
Input
Prop
Type
Output
Prop
Type
posts_get
Returns one post with the status, link, and error of each destination.
Input
Prop
Type
Output
Prop
Type
analytics_get
Returns normalized metrics for a post, one entry per destination. Pass a Onepostly post id, a destination id, or the platform's own post id together with accountId for a post published outside Onepostly. See Outside Posts.
Input
Prop
Type
Pass postId, destinationId, or both. A call with neither fails with VALIDATION_ERROR.
Output
Prop
Type
A published destination with no metrics yet returns pending. Status meanings and per-platform metric support are in Analytics Status.
posts_delete
Deletes published posts from the platform. Pass destinationId to delete one destination, or leave it out to delete every published destination of the post. The post stays in Onepostly and those destinations change to deleted. Which platforms support deleting is listed in Remote Delete.
Input
Prop
Type
Output
Prop
Type
Deleting a destination that is already deleted succeeds and returns the post unchanged. When every destination fails, the tool returns an error with the code of the first failure instead of this result.
The Post Object
posts_create, posts_list, posts_get, and posts_delete return posts in this shape.
Prop
Type
Example posts_get result for a post published to X and Bluesky:
{
"post": {
"id": "1699f415-7fb6-43f4-9d2a-c447491f32a8",
"text": "Spring collection is live. Free shipping through Sunday.",
"mediaKind": "text",
"status": "published",
"scheduledFor": null,
"timezone": null,
"createdAt": "2027-03-15T09:00:02.114Z",
"updatedAt": "2027-03-15T09:00:06.871Z",
"destinations": [
{
"id": "c27a9e4b-6f13-4d8a-a5b2-9e0d1f3c7a64",
"accountId": "3f6c2a91-5d4e-4b7a-9e1f-8a2b6c0d4e57",
"platform": "x",
"status": "published",
"externalPostId": "1899745123456789012",
"externalUrl": "https://x.com/i/web/status/1899745123456789012",
"error": null,
"publishedAt": "2027-03-15T09:00:05.402Z"
},
{
"id": "e5d8b2f1-3c7a-4e96-8b4d-2a1f0c9e6d35",
"accountId": "8b1e7d3c-2a9f-4c65-b0d8-5e4f1a7c9b23",
"platform": "bluesky",
"status": "published",
"externalPostId": "at://did:plc:4k2xq7mzv3r5t6y8w9a1b2c3/app.bsky.feed.post/3lkq7xz2abc2w",
"externalUrl": "https://bsky.app/profile/acme.bsky.social/post/3lkq7xz2abc2w",
"error": null,
"publishedAt": "2027-03-15T09:00:06.533Z"
}
],
"mediaUrls": []
}
}Errors
A failed call returns a tool result marked as an error. Its text is a JSON object with a code, a message, the HTTP-style status, and, when it helps, a hint with the next step. Invalid arguments also list every problem in issues, each with the param at fault:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid tool arguments.",
"status": 400,
"issues": [
{
"param": "timezone",
"code": "custom",
"message": "timezone requires scheduledFor."
}
]
}
}| Code | Cause | Fix |
|---|---|---|
VALIDATION_ERROR | An argument is missing or invalid, the text is over a platform's limit, or a destination has a field or mediaKind its platform does not accept. | Fix the arguments named in issues or in the message, then call again. |
ACCOUNT_NOT_FOUND | The accountId is not a connected account in this workspace. | Call connections_list and use an id from its result. |
CONNECTION_INACTIVE | The account is not active. | Reconnect the account. See Reconnect an Account. |
NOT_FOUND | No post with this postId exists in the workspace. | Call posts_list to find the post id. |
DESTINATION_NOT_FOUND | The destinationId, or the accountId passed with a post id, does not match a destination of the post. | Call posts_get and use a destination id from its result. |
ACCOUNT_REQUIRED | analytics_get received a postId that is not a Onepostly post id, without accountId. | Pass the accountId of the account that published the post. |
OPTIONS_UNAVAILABLE | The platform did not return the account's boards or creator settings. | Call publish_options again. If it keeps failing, check the account in connections_list and reconnect it. |
RATE_LIMITED | The account reached its posting limit on the platform. details.retryAfterSeconds says how long to wait. | Wait that long, or schedule the post for later. See Rate Limits. |
NOT_DELETABLE | The destination is not published, or the post has no published destination to delete. | Check the destination statuses with posts_get. |
UNSUPPORTED_PLATFORM | Deleting posts is not available for the destination's platform. | Delete the post in the platform's own app. |
INSUFFICIENT_WALLET | The workspace wallet does not cover the X delete. | Top up the wallet in Settings → Wallet, then call again. |
TOKEN_INVALID | The platform rejected the account's authorization. | Reconnect the account. See Reconnect an Account. |
PLATFORM_UNAVAILABLE | The platform did not respond in time. | Call again. |
DELETE_FAILED | The platform refused the delete. | Read the message. Call again, or delete the post in the platform's own app. |
TOOL_ERROR | The call failed unexpectedly. | Call again. For posts_create, reuse the same clientRequestId so the post is not created twice. |
Other codes match the REST API. See Error Codes.