docs

MCP tool

list_posts

List posts

Reads only · changes nothing, and needs no approval.

What it does

List recent posts with their status (pending_approval, scheduled, processing, posted, partial, failed, rejected). A post still waiting carries approval_link, a ready-made Markdown link to its one-click approve/reject page — print that string verbatim whenever you mention the post, never unwrapped into a bare address. CALL THIS BEFORE ASSUMING A POST IS STILL WAITING. A person can reject one at any moment through a link you never see, and this is how you find out: status: "rejected" with rejectionReason — what they actually objected to, in their words. Read that reason before rewriting anything, rather than guessing at what they disliked; then fix it with update_post on the SAME post. rejectionReason is often EMPTY, and that is normal rather than a fault: a one-tap rejection from an approval link or a chat card has nowhere to type one. When it is empty, ASK the person what was wrong before rewriting — a guess dressed as a fix wastes their second look. publishes says what has to happen before each post goes out: at_time (scheduledAt is a real slot somebody chose), on_approval (a person's yes, scheduledAt null), or now (nothing — it is on its way). It is NULL on a draft or a rejected post: those are going nowhere until a person decides something, so there is no answer to report — say what status says instead, and never tell somebody a draft is about to publish. ASK FOR WHAT YOU WANT. status narrows the list — "pending_approval" answers "what is waiting on me?" on its own, and several may be named at once (["pending_approval", "scheduled"]). Without it you get every status mixed together, newest first, and reading captions to find the ones you mean is how the wrong post gets approved or deleted. The reply echoes filter: what actually applied.

Arguments

NameTypeRequiredWhat it is
statusunionNoOnly posts in this state (or any of these). Omit for all of them.
limitnumberNoHow many, newest first (default 50, max 100)

Calling it

Any MCP client calls this by name once the connector is added. The address is the same for every tool:

https://xpost.to/api/mcp

A client that has signed in sends the tool name and its arguments:

{
  "name": "list_posts",
  "arguments": {
    "status": "…",
    "limit": 0
  }
}

The other tools

Back to the MCP connector · What the MCP server is · Connect your assistant