A1 Lane
A1 Lane için barındırılan MCP sunucusu; sosyal medya gönderileri planlama aracı. Taslak oluşturmak, onay istemek, gönderileri planlamak ve teslimat makbuzlarını kontrol etmek için 26 araç sunar. On iki kanaldan yedisi bugün bağlanıyor; geri okuma doğrulaması kanala bağlıdır. OAuth 2.0 veya çalışma alanı belirteciyle Streamable HTTP.
Barındırılan MCP Sunucusu
npx add-mcp 'https://a1lane.ai/mcp/v1'Claude Code, Codex, Cursor ve daha fazlasına kurulur
Dokümantasyon
MCP reference
Assistant tools, generated from the server's tool definitions on each request: 31 tools on contract v1.9, the same list tools/list returns. Streamable HTTP, JSON-RPC over POST, protocol 2025-06-18. Authorise with OAuth 2.1 (discovery at /.well-known/oauth-authorization-server, authorization code + PKCE S256) or, for developers, a workspace token. The stdio server (python -m postlane.mcp) exposes the same tools.
https://a1lane.ai/mcp/v1
Every mutating tool accepts an optional idempotency_key: replaying a key returns the original result and executes nothing again; a key never forces past an uncertain outcome. Inputs are strict (additionalProperties: false) — unknown fields are errors, never dropped. Per-token rate limit: 120 calls a minute. Start with get_delivery_digest.
By job: Orient · Prepare · Review and hand off · Schedule and manage · Verify and recover · Measure · The chain · Errors · A–Z
The chain: draft → schedule → receipt
{
"create_draft": {
"destinations": [
{
"account_id": "acc_…"
}
],
"caption": "A weekend outside"
},
"publish_post": {
"post_id": "post_…",
"mode": "scheduled",
"scheduled_at": "2026-09-19T09:00:00-07:00"
},
"get_receipt": {
"post_id": "post_…"
}
}
get_receipt returns id, status, destinations[] — each with platform, status (published only after read-back), url, stage, message — and the receipt checkpoints.
Orient
See what is connected and what each platform accepts.
List connected social accounts. Use when the user asks which social media accounts are connected, which account to post to, whether an account needs reconnecting, or how to connect a new one. Returns each connected account in this workspace with its platform, handle, account id (acc_…), health (ok, credential_invalid, action_required_in_app, unknown) and posting-slot schedule, plus the web Connect page address and the platforms a new account can connect today. An assistant cannot connect an account itself: give the user the Connect page address, wait until they say they have finished, then call list_accounts again to confirm the new account and its health. For what a platform allows, use get_platform_schema; for the workspace's plan and how many accounts it can hold, use get_workspace.
Annotations: readOnly, idempotent
No inputs.
{}
Get workspace, plan and limits. Use when the user asks which workspace this is, what plan it is on, whether they can create another workspace, how many social accounts or queued posts it can still hold, whether posts need approval before they send, which timezone schedule times are read in, or why publishing is paused. Returns the workspace name and id, the timezone that schedule times are echoed in, whether approval is required, this connection's scopes, the plan and billing state (plan, status, whether publishing is allowed, trial and billing-period end dates, and the address of the billing guide) and each limit beside current usage: workspaces on the billing account (how many it has and how many the plan allows; null means unlimited), connected accounts, queued posts, post history, media storage and seats. Check it before creating another workspace, connecting another account or scheduling many posts, so a plan limit is not a surprise. It changes nothing. For the connected accounts themselves use list_accounts.
Annotations: readOnly, idempotent
No inputs.
{}
Get the link to connect an account. Use when the user asks to connect, add, link or reconnect a social media account, or asks what they need before connecting one. Returns the address of the workspace's Connect page for the user to open in their browser, and for each platform (or the one named in platform) whether a new account can connect today, a plain note on its availability, and any prerequisite the platform sets, for example that Instagram needs a professional account linked to a Facebook Page. An assistant cannot connect an account itself and this tool connects nothing: give the user the address, wait until they say they have finished, then call list_accounts to confirm the new account and its health.
Annotations: readOnly, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
platform | string | optional | One platform to describe, for example instagram; omit to get every platform. |
{"platform": "…"}
Get a platform's posting rules. Use before writing or scheduling a post, or when the user asks what a platform allows: caption length, video and image limits, how many images a carousel takes, whether threads and first comments work there, disclosure flags, and every per-post option with its type and allowed values (for example YouTube title, privacy, tags, category and made-for-kids designation, Pinterest board, Mastodon content warning). Also says whether a new account can connect the platform on this service today, and which engagement metrics (views, likes, comments and so on) the platform reports back, which need extra permission and how often they are read. Pass platform for one platform or omit it for all. Checking here first avoids a refused draft and avoids promising a platform that is not open yet.
Annotations: readOnly, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
platform | string | optional | One platform to describe; omit to get every platform. |
{"platform": "…"}
Summarize recent deliveries. Use when the user asks what went out, how their posting went today or this week, or for a recap or status update. Returns what was delivered between since and until (default the last 24 hours) with platform links, counting only read-back-verified posts as live and listing limited deliveries separately, plus what needs the user, each with a link to the post.
Annotations: readOnly, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
since | string | optional | ISO-8601 instant with offset; default 24 hours before until. |
until | string | optional | ISO-8601 instant with offset; default now. |
{"since": "2026-09-19T09:00:00-07:00"}
List and filter posts. Use when the user asks to see their posts: drafts, what is scheduled or queued, what was published, or what failed. Returns posts with each destination's status. Filter with status, for example active, attention, draft, pending_approval, scheduled, published, failed or all; an unknown status is refused with the list of valid ones. Newest first; when more posts remain the result carries nextOffset to pass back as offset. For only the problems to fix, use list_attention_items.
Annotations: readOnly, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
status | string | optional | Filter: active, attention, all, draft, pending_approval, approved, scheduled, queued, publishing, published, published_limited, partial, failed, held, cancelled and other stored statuses; omit for all. |
limit | integer | optional | Most posts to return; default 50. |
offset | integer | optional | How many of the newest matching posts to skip, for the next page; use the nextOffset a previous call returned. Default 0. |
{"status": "…"}
Prepare
Bring in media and build drafts. Nothing is queued yet.
Import media from a link. Use when the user gives a public https link to a video or image file they want to post. Imports the file from that link into the workspace media library and returns its media id (med_…) for create_draft. It only imports what the user supplies; it does not generate, edit, resize or post anything. Not for a file on the user's phone or computer, or one attached in this chat, that has no public link: for those use create_upload_link, which gives the user a page to upload it.
Annotations: openWorld
| Input | Type | Required | Notes |
|---|---|---|---|
url | string | required | Public https link to the video or image file the user supplied. |
title | string | optional | Optional library title for the file. |
tags | array | optional | Optional library tags for finding the file later. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"url": "https://example.com/clip.mp4"}
Create a file upload link. Use when the user wants to post a video or photo from their phone or computer that has no public link. Creates a single-use link the user opens to upload one file into the media library; the link cannot post or publish anything. Then check get_upload_status for the media id.
Annotations: write
| Input | Type | Required | Notes |
|---|---|---|---|
filename | string | optional | Optional file name to show the user on the upload page. |
expires_in_minutes | integer | optional | How long the link stays open, 5 to 1440 minutes. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"filename": "…"}
Check an upload link. Use after create_upload_link to see whether the user's file has arrived. Returns the link's state: waiting, receiving (with percent), validating, ready (with the media id and which platforms the file fits), rejected (with the reason), expired or revoked.
Annotations: readOnly, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
link_id | string | required | Upload link id (lnk_…) returned by create_upload_link. |
{"link_id": "lnk_…"}
List media in the library. Use when the user asks what videos or images are already in their media library, or wants to reuse a file they uploaded earlier instead of uploading it again. Returns the library's files, newest first, each with its media id (med_…) for create_draft, kind (video or image), type, size, file name, title, tags, when it was added and whether the file itself is still held. Filter by kind, tag or a search word; page with limit and offset. It only lists; to add a file use import_media for a public link or create_upload_link for a file on the user's device.
Annotations: readOnly, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
kind | string | optional | Only videos or only images; omit for both. |
tag | string | optional | Only files carrying this tag. |
search | string | optional | Only files whose name, title or tags contain this text. |
limit | integer | optional | How many files to return, 1 to 100; default 50. |
offset | integer | optional | How many files to skip, for paging; use nextOffset from the previous result. |
{"kind": "video"}
Get the workspace's brand instructions. Use before writing or rewriting a caption for this workspace, or when the user asks what the brand allows. Returns the workspace's stored brand instructions: approved claims, prohibited phrases, caption style and defaults (hashtags, call to action, links), as the workspace's owners and admins saved them in A1 Lane. Write from these instead of guessing or relying on earlier chat. Empty fields mean nothing is set. It changes nothing; A1 Lane does not enforce these on posts.
Annotations: readOnly, idempotent
No inputs.
{}
Create a draft post. Use when the user asks to write, prepare, cross-post or set up a social media post, video, carousel or thread, including one post going to several accounts: that is one draft with one destination per account. Saves a draft with caption, media, per-platform options and destinations; nothing is sent to any platform. Each destination can carry its own caption, media, options, thread parts or first comment. Check get_platform_schema for each platform's limits and options first. A scheduled_at given here is only a planned time; nothing is scheduled until publish_post. To publish or schedule the draft use publish_post; the workspace's approval policy still applies. Use submit_batch only for several different posts at once.
Annotations: write
| Input | Type | Required | Notes |
|---|---|---|---|
caption | string | optional | Post text, up to 10,000 characters; each platform's own limit is checked at validation (see get_platform_schema). |
media_id | string | optional | Media id (med_…) from import_media or the library. |
media_ids | array | optional | Ordered media ids (med_…) for a multi-media post (carousel); order is display order and per-platform caps bind at validation. Give media_ids or media_id, never both — the two naming different media is refused, never guessed. A destination's own media_ids overrides this list for that destination. |
destinations | array | required | One entry per connected account to post to, each with its account_id and optional per-account overrides. |
scheduled_at | string | optional | Planned time, ISO-8601 with an explicit UTC offset (for example 2026-11-09T09:00:00-08:00 or 2026-11-09T17:00:00Z); a time without an offset is refused. Used when scheduling. |
first_comment | string | optional | Posted as the first comment after the destination is verified live, on platforms whose get_platform_schema entry has supportsFirstComment true. |
parts | array | optional | Thread parts, each posted as a reply to the previous, on platforms whose get_platform_schema entry has supportsParts true; other destinations get the caption alone with a parts_unsupported warning. |
utm | object | optional | UTM tags added to links in the caption, for example {"source": "bluesky", "campaign": "launch"}. |
labels | object | optional | Small key/value object stored with the post for the user's own grouping, for example {"campaign": "spring"}. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"destinations": [{"account_id": "acc_…"}]}
Copy a post into a new draft. Use when the user asks to post something again, reuse an earlier post, repost it, or start a new post from an existing one. Copies the post's caption, media and per-account settings into a NEW draft and returns the draft's summary with its own post id. Nothing is sent and the original post is not changed: edit the copy with update_draft_settings, then send it with publish_post after confirming with the user. A post whose media file is no longer held cannot be copied; the result says so and the user uploads the file again.
Annotations: write
| Input | Type | Required | Notes |
|---|---|---|---|
post_id | string | required | The post to copy (post_…), in any state: draft, scheduled, published or failed. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"post_id": "post_…"}
Edit a draft or scheduled post. Use when the user asks to change a draft or a scheduled post before it starts delivering: its caption, media, accounts, per-platform options (for example YouTube privacy or tags), scheduled time, thread parts, first comment or UTM tags. This is the tool for moving an already-scheduled post to another time: send the new scheduled_at here, not to publish_post, as ISO-8601 with an explicit UTC offset (for example 2026-11-09T09:00:00-08:00); the result echoes the time in the user's own A1 Lane timezone (scheduledAtLocal, scheduledAtTimezone). Fields you send replace the saved values. An edit to an approved post resets its approval. A post with a destination already live or being delivered cannot be edited. To stop a scheduled post, use cancel_scheduled.
Annotations: destructive
| Input | Type | Required | Notes |
|---|---|---|---|
post_id | string | required | Post id (post_…) from create_draft, list_posts or a receipt. |
caption | string | optional | Post text, up to 10,000 characters; each platform's own limit is checked at validation (see get_platform_schema). |
media_id | string | optional | Media id (med_…) from import_media or the library. |
media_ids | array | optional | Ordered media ids (med_…) for a multi-media post (carousel); order is display order and per-platform caps bind at validation. Give media_ids or media_id, never both — the two naming different media is refused, never guessed. A destination's own media_ids overrides this list for that destination. |
destinations | array | optional | One entry per connected account to post to, each with its account_id and optional per-account overrides. |
scheduled_at | string | optional | Planned time, ISO-8601 with an explicit UTC offset (for example 2026-11-09T09:00:00-08:00 or 2026-11-09T17:00:00Z); a time without an offset is refused. Used when scheduling. |
first_comment | string | optional | Posted as the first comment after the destination is verified live, on platforms whose get_platform_schema entry has supportsFirstComment true. |
parts | array | optional | Thread parts, each posted as a reply to the previous, on platforms whose get_platform_schema entry has supportsParts true; other destinations get the caption alone with a parts_unsupported warning. |
utm | object | optional | UTM tags added to links in the caption, for example {"source": "bluesky", "campaign": "launch"}. |
labels | object | optional | Small key/value object stored with the post for the user's own grouping, for example {"campaign": "spring"}. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"post_id": "post_…"}
Create many posts at once. Use when the user wants several different posts set up at once: a week of content, a content calendar or a bulk schedule. For one post going to several accounts, use create_draft with one destination per account instead, not this tool. Each item is checked and created on its own, so one invalid item does not block the others, and the result lists each item's outcome plus a batch id for get_batch_status. By default every item is saved as a draft and nothing is sent. An item that sets mode now, scheduled or queue is published or scheduled on its platforms, needs the publish scope, and cannot be recalled by this tool: set a mode only after the user has confirmed the whole schedule, and give each scheduled_at as ISO-8601 with an explicit UTC offset (for example 2026-11-09T09:00:00-08:00).
Annotations: destructive, openWorld
| Input | Type | Required | Notes |
|---|---|---|---|
posts | array | required | The posts to create, each shaped like create_draft's arguments plus an optional mode. |
labels | object | optional | Small key/value object stored on every post in the batch. |
same_asset_override | boolean | optional | true applies same_asset_override to every item. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"posts": [{"destinations": [{"account_id": "acc_…"}]}]}
Delete a post record. Use only to delete A1 Lane's own record of a post: this does NOT remove anything from any social platform, and a live post stays live. If the user says "delete my post" about something already published, they almost always mean taking it down: use unpublish_post, and ask if unclear. Use this tool to remove a draft, or to clear a finished post from the workspace's post history; it permanently deletes the post and its delivery receipt from the workspace. A queued or scheduled post must be cancelled first with cancel_scheduled, and a post still live where A1 Lane can delete it is refused until unpublish_post takes it down.
Annotations: destructive, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
post_id | string | required | Post id (post_…) from create_draft, list_posts or a receipt. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"post_id": "post_…"}
Review and hand off
Ask a person, or hand the last step to a human.
Send a draft for approval. Use when the user asks to send a draft to their team, client or manager for review or sign-off before it is posted. Moves the draft to pending approval and returns the draft's updated summary, including its approval state. Approvers approve or reject in A1 Lane; approval makes the draft schedulable, rejection returns it to draft with the reviewer's note, if they left one. This call never publishes — publishing is publish_post, and it refuses a draft whose required approval is still pending.
Annotations: write
| Input | Type | Required | Notes |
|---|---|---|---|
post_id | string | required | Post id (post_…) from create_draft, list_posts or a receipt. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"post_id": "post_…"}
Get steps to finish a post in-app. Use when the user asks how to finish a post in the platform's own app, or what a needs-attention post is waiting on. Returns, for the given post, the finishing steps for every destination waiting for the user to finish it in the app (find such posts with list_attention_items): the exact caption and every setting to apply, laid out for reading on a phone. It changes nothing and sends nothing.
Annotations: readOnly, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
post_id | string | required | Post id (post_…) from create_draft, list_posts or a receipt. |
{"post_id": "post_…"}
Schedule and manage
Queue, schedule, pause and cancel; remove a connection.
Publish or schedule a draft. Use when the user asks to post, publish or share a saved draft: right now, at a specific date and time, or in an account's next free posting slot. mode "now" publishes immediately; "scheduled" needs scheduled_at as an ISO-8601 date and time with an explicit UTC offset, for example 2026-11-09T09:00:00-08:00 (a time without an offset is refused; if the user gave a time without a timezone, ask which one they mean or state the one you assume back to them before calling); "queue" needs queue_account_id. The result echoes the scheduled time in the user's own A1 Lane timezone (scheduledAtLocal, scheduledAtTimezone): read it back to the user. Publishing makes the post public on each platform under its visibility settings and cannot be undone by this tool (unpublish_post deletes a live post afterwards). Before publishing, confirm the accounts, caption and time with the user. Some destinations need the user to finish in the platform's app, for example a TikTok inbox upload; list_attention_items shows which once delivery runs. Requires the publish scope; a post that still needs approval is refused, and the result says why. To change a post that is already scheduled, use update_draft_settings instead; to save work without sending, use create_draft.
Annotations: destructive, openWorld
| Input | Type | Required | Notes |
|---|---|---|---|
post_id | string | required | Post id (post_…) from create_draft, list_posts or a receipt. |
mode | string | optional | now sends immediately; scheduled sends at scheduled_at; queue takes queue_account_id's next free posting slot. Inferred from scheduled_at or queue_account_id when omitted. |
scheduled_at | string | optional | When to send, for mode scheduled: ISO-8601 with an explicit UTC offset, for example 2026-11-09T09:00:00-08:00 or 2026-11-09T17:00:00Z. A time without an offset is refused; the result echoes the time in the user's own timezone. |
queue_account_id | string | optional | Account id (acc_…) whose posting-slot schedule picks the time, for mode queue. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"post_id": "post_…"}
Cancel a scheduled post. Use when the user asks to cancel, stop or unschedule a queued or scheduled post. Destinations not yet sent are cancelled cleanly; a post the platform itself holds as scheduled is withdrawn from the platform; a destination whose request may already have reached the platform is marked uncertain, not cancelled. Requires the publish scope. To hold every post for a while without cancelling, use pause_workspace; to remove a post that is already live, use unpublish_post.
Annotations: destructive, idempotent, openWorld
| Input | Type | Required | Notes |
|---|---|---|---|
post_id | string | required | Post id (post_…) from create_draft, list_posts or a receipt. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"post_id": "post_…"}
Pause or resume publishing. Use when the user asks to stop all posting for now, put publishing on hold, or start again. Pauses new deliveries for the whole workspace, or for one account with account_id; queued posts are held, not failed. resume=true lifts the pause. Requires the publish scope. Returns the pause state after the call: whether paused, the accounts covered and how many deliveries are held. Posts already sent to a platform are unaffected; a delivery still in progress stops before its send step and is held.
Annotations: idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
account_id | string | optional | Account id (acc_…) to pause or resume alone; omit for the whole workspace. |
resume | boolean | optional | true lifts the pause instead of setting it. |
reason | string | optional | Optional note shown with the pause. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"account_id": "acc_…"}
Check a batch's delivery. Use when the user asks how a batch of posts or a bulk schedule is going. Returns, for a batch id from submit_batch, every post with each destination's status, and destination counts: live, pending, confirmed by a person but not read back from the platform (the "attested" count), and stopped, grouped by status such as failed or uncertain (the "parked" counts), plus whether the batch is fully live and whether it is done. For the proof behind a live destination, use get_receipt.
Annotations: readOnly, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
batch_id | string | required | Batch id (batch_…) returned by submit_batch. |
{"batch_id": "batch_…"}
Disconnect a social account. Use only when the user explicitly asks to disconnect, remove or unlink a social media account from this workspace, for example to free a connection slot for a different account. Removes the account's connection and its stored credential from A1 Lane; destinations on it that were not yet sending are ended, and the posts themselves stay. It does not delete anything on the social platform, and posts already published stay live. An account with a post queued, scheduled or in delivery is refused until those are cancelled or finished. This cannot be undone from here: connecting again takes the user back through the platform's sign-in on the Connect page (get_connect_link). Confirm the exact account with the user, then pass acknowledge true. Needs the accounts scope.
Annotations: destructive, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
account_id | string | required | Account id (acc_…) from list_accounts: the connection to remove. |
acknowledge | boolean | required | Must be true: the user has confirmed removing this account's connection. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"account_id": "acc_…", "acknowledge": true}
Verify and recover
Read the receipt; resolve what didn't land; take a post down.
Get a post's delivery receipt. Use when the user asks whether a specific post went out, where it is live, what its link is, or what happened to it. Returns the full delivery receipt for one post: each destination's status, platform post id and URL, flags, and every recorded checkpoint. A destination counts as live only when its status is published. For views and likes, use get_post_engagement.
Annotations: readOnly, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
post_id | string | required | Post id (post_…) from create_draft, list_posts or a receipt. |
{"post_id": "post_…"}
Check if posts are verified live. Use when the user asks whether their posts actually went live, or wants a post they just published double-checked. For one post, or across the workspace's active posts, returns which destinations are verified live by read-back from the platform, still pending, waiting for the user to finish in the platform's app, or uncertain. For one post's full delivery record, use get_receipt.
Annotations: readOnly, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
post_id | string | optional | Post id (post_…) to check; omit to check the workspace's active posts. |
limit | integer | optional | Most posts to return when post_id is omitted; default 50. |
{"post_id": "post_…"}
List posts that need attention. Use when the user asks what needs fixing, why a post failed, what went wrong, or what is waiting on them. Returns the needs-attention list: failed or uncertain deliveries, posts waiting for the user to finish in a platform app, held or blocked posts, flagged deliveries, pending approvals, and accounts that need reconnecting. Each item carries its action and the destination's status, message and link. To fix an item use resolve_attention; the full delivery record is in get_receipt.
Annotations: readOnly, idempotent
No inputs.
{}
Fix a delivery problem. Use when the user asks to fix, retry or re-send a failed post, or to clear an item from list_attention_items. Pick one action. "probe" asks the platform whether an uncertain delivery actually landed; always try it before any forced re-send. "retry" re-sends destinations that definitely failed; uncertain ones are refused. "release" lets out a post that was held because it looked like a duplicate. "acknowledge_force_retry" re-sends an uncertain destination even though it may already be live, so a duplicate post is possible: use it only after the user explicitly accepts that risk, and pass acknowledge=true. "confirm_deleted" records that the user deleted the post themselves in the platform's app; it needs destination_id and acknowledge=true. Requires the publish scope. Returns the post's updated status for each destination (for "probe", also each destination's verdict).
Annotations: destructive, openWorld
| Input | Type | Required | Notes |
|---|---|---|---|
post_id | string | required | Post id (post_…) from create_draft, list_posts or a receipt. |
action | string | required | Which fix to apply; see the tool description for each. |
destination_id | string | optional | Destination id (dst_…) from get_receipt or list_attention_items: one account's copy of the post. |
acknowledge | boolean | optional | Set true only after the user accepts the stated risk; required by acknowledge_force_retry and confirm_deleted. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"post_id": "post_…", "action": "probe"}
Delete a live post from platforms. Use when the user asks to take a published post down or delete it from a platform. Deletes the live post from its platforms, or from one destination with destination_id, and requires acknowledge=true after the user confirms. A deletion counts as done only when read-back shows the post gone; where the platform has no delete API it returns the steps to delete it in the app. To remove only A1 Lane's record, use delete_post_record.
Annotations: destructive, idempotent, openWorld
| Input | Type | Required | Notes |
|---|---|---|---|
post_id | string | required | Post id (post_…) from create_draft, list_posts or a receipt. |
destination_id | string | optional | Destination id (dst_…) to remove from one platform only; omit to remove every live copy. |
acknowledge | boolean | required | Must be true, and only after the user confirms the deletion. |
idempotency_key | string | optional | Optional client-chosen key (8-200 chars of A-Z a-z 0-9. _: -). Replaying the same key returns the original result and executes nothing again; a key never forces past an uncertain outcome. |
{"post_id": "post_…", "acknowledge": true}
Measure
Read what each platform reports, with the time it was read.
Get a post's engagement. Use when the user asks how a post performed: its views, likes, comments, shares or stats. Returns, per destination, the latest platform-reported views, likes, comments and shares with the time each was read, plus their history. A metric the platform does not report is marked unavailable with the reason, never shown as zero.
Annotations: readOnly, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
post_id | string | required | Post id (post_…) from create_draft, list_posts or a receipt. |
{"post_id": "post_…"}
Get engagement totals. Use when the user asks how their accounts or posts did over a period, for engagement totals, or for a performance report. Returns engagement totals for the last days (default 30, limited by the plan's history) per metric, platform and account. Posts whose platform did not report a metric are left out of that metric and counted with the reason, never counted as zero.
Annotations: readOnly, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
days | integer | optional | Window in days, 1 to 366; default 30. |
{"days": 1}
Get best times to post. Use when the user asks when to post or what time to schedule on one account. Returns the best weekday and hour slots from that account's own past engagement; it does not change any schedule. With too little history it says "Not enough data yet." instead of guessing.
Annotations: readOnly, idempotent
| Input | Type | Required | Notes |
|---|---|---|---|
account_id | string | required | Account id from list_accounts (acc_…). |
{"account_id": "acc_…"}
Errors, with the server's fix hints
Every error is {code, reason, fix_hint}. The hints below are produced by the server's own error translator on this request.
| Code | Reason (example) | fix_hint |
|---|---|---|
invalid_input | caption is required. | Fix the field named in the reason. |
unauthorized | The token is invalid, expired or revoked. | Re-authorize (OAuth) or create a new workspace token. |
plan_limit | Plan limit reached on this workspace's plan. The call was not performed. | Tell the user which plan limit was reached; nothing was changed, and the same call will be refused again. |
forbidden | Forbidden. | The token lacks the permission; scopes nest read ⊂ write ⊂ publish, and manage/approve are never token-grantable. |
not_found | Post not found. | Check the id against list_posts / list_accounts; another workspace's objects are invisible here. |
conflict | Destination is uncertain. | Run resolve_attention action=probe first; if the probe reports absent, retry normally. Forcing needs acknowledge_force_retry with acknowledge=true. |
too_large | File too large. | Use a smaller file or free space in the library. |
rate_limited | Too many requests. | Wait and retry; limits are per token and per account plan. |
provider_unavailable | The platform or an upstream provider did not answer correctly. | Retry later; nothing was published. |
server_error | The request could not be completed; no changes were confirmed. | Retry; if it persists, contact support. |
All tools, A–Z
cancel_scheduled · create_draft · create_upload_link · delete_post_record · disconnect_account · duplicate_post · get_batch_status · get_best_times · get_brand_instructions · get_connect_link · get_delivery_digest · get_engagement_rollup · get_handoff_pack · get_platform_schema · get_post_engagement · get_receipt · get_upload_status · get_verification_status · get_workspace · import_media · list_accounts · list_attention_items · list_media · list_posts · pause_workspace · publish_post · request_approval · resolve_attention · submit_batch · unpublish_post · update_draft_settings
Directory listings of our assistant connector are not platform approvals.