For people building agents

Social media automation that an agent can be trusted with

Publishing is irreversible and partial failure is the normal case. An autonomous publisher needs more than an HTTP endpoint — it needs to rehearse, to act on one destination at a time, and to retry without duplicating.

Six primitives, and why each one exists

01

Dry runs are a first-class tool

preflight_post answers “would this work?” without spending a credit or touching a network. An agent that can check its own plan before executing it makes an order of magnitude fewer expensive mistakes than one that learns by failing.

02

Atomic batching, validated up front

multicall runs up to 20 operations in one request. Tool names are validated before anything executes, so a typo in call 14 cannot leave calls 1 through 13 committed and the rest orphaned. With stopOnError, the reply names exactly which calls were skipped.

03

One post per profile

A five-target broadcast becomes five addressable posts, each with its own ID, status and permalink. An agent can therefore reason about — and repair — one delivery without re-doing the other four.

04

Retries that are genuinely partial

Publishing a partly-failed post again skips the profiles that already succeeded. This is the property that makes unattended retry loops safe: re-running is idempotent where it matters.

05

A read/write split that means something

Seven read-only tools an agent can call freely; nine mutating tools gated behind approval. The distinction is enforced by the platform, not by hoping the system prompt holds.

06

Workspace scoping on every call

Every tool accepts workspaceId, and list_workspaces enumerates what the key can reach. An agent operating across several clients cannot accidentally publish into the wrong one by forgetting which context it is in.

One request, a whole plan

An agent that generates an image, then creates a post referencing it, then schedules a follow-up, otherwise pays three round trips and three chances to end up in a half-applied state. multicall collapses that into one validated batch.

  • Up to 20 calls per batch
  • Tool names validated before execution
  • Optional label per call, echoed on the result
  • stopOnError reports the skipped calls
  • Cannot nest — no recursive batches
POST /api/tools/multicall
x-api-key: pmcp_sec_•••

{
  "calls": [
    { "id": "img", "tool": "generate_image",
      "arguments": { "prompt": "launch banner, brand kit Studio" } },

    { "id": "main", "tool": "create_post",
      "arguments": {
        "content": "Multi-workspace support is live.",
        "targetAccounts": [
          { "platform": "linkedin", "profileId": "lin_774…" },
          { "platform": "twitter",  "profileId": "tw_129…",
            "content": "Workspaces. One bill, clean separation." }
        ],
        "scheduleDate": "2026-10-14",
        "scheduleTime": "09:00",
        "timezone": "Asia/Kolkata"
      } }
  ],
  "stopOnError": true
}
→ 2 ok · 0 failed · 0 skipped

Six ways autonomous posting goes wrong

And the platform behaviour that removes each one.

Posting the same thing seven times

Per-network variants and per-profile targeting mean one action, seven appropriate posts — not one paragraph pasted seven times.

Discovering the limit at publish time

Pre-flight surfaces character overruns, missing media and unconnected profiles before the queue is touched.

Duplicate posts from a retry loop

Retry walks the delivery list and skips what already succeeded, so a loop that runs twice does not post twice.

Silent partial failure

Each delivery carries its own status and upstream error. There is no aggregate “success” hiding two dropped networks.

Timezone drift on a long queue

Slots store a wall-clock time plus an IANA zone, resolved at publish, so an evergreen queue does not slide an hour in November.

Credential leakage into context

Social tokens never leave the backend vault; the API key lives in the server process. The model sees tool results only.

Agent automation FAQ

What makes social media automation hard for AI agents?
Publishing is irreversible, per-network rules differ wildly, and failure is usually partial rather than total. An agent needs a way to check a plan before executing it, a way to act on one destination without disturbing the others, and a retry path that does not duplicate. Browser automation and generic HTTP wrappers give it none of those.
Why use typed tools instead of scripting the websites?
Browser automation against social networks breaks whenever a selector changes, usually violates the networks’ terms, and gives an agent no structured error to reason about. Typed tools over official APIs give stable schemas, real error codes and per-delivery state — which is what an agent needs to recover rather than retry blindly.
How do I stop an agent publishing something it should not?
The mutating tools sit behind approval, so a human accepts or rejects each write. Beyond that, keep the agent on explicit profile targeting rather than whole-platform fan-out, and instruct it to preflight before every create. The platform enforces the first; the second two are prompt discipline.
Can I run this without a human in the loop?
The REST API will let you, and CI-driven publishing is a legitimate pattern — a release script that preflights then schedules. What you give up is the approval gate, so scope the API key to one workspace, target explicit profiles, and keep the copy generated from something deterministic like a changelog.
What does multicall actually guarantee?
It validates every tool name in the batch before running anything, executes in order, and returns one result entry per call with ok/error and an optional label you set. With stopOnError it also reports which calls were skipped after a failure. It is not a database transaction — completed calls stay completed — but it removes the “half a batch was nonsense” failure mode.
Which model or framework do I need?
Any that speaks MCP or plain REST. Claude, ChatGPT, Cursor and custom runtimes are all documented. The tools are model-agnostic — nothing in the interface assumes a particular provider.