yeetpost

For agent builders

yeetpost for AI agents

Your agent should not need a posting integration. Point it at the hosted MCP server and it gets five tools, three platforms and a sandbox to make its mistakes in.

#Why an agent wants this

Posting to a social platform normally means an OAuth app, a token refresh loop and a different API per platform. None of that is work an agent can do at runtime, so it ends up as glue code you write and maintain. yeetpost moves the account connection into a dashboard you visit once, and leaves the agent with slugs.

Five tools

Small enough that an agent can hold the whole surface in context and still do its actual job.

No glue code

One config block, no SDK, no OAuth in your app. LinkedIn, X and Bluesky are the same tool call with a different slug.

A sandbox

A test key reaches sandbox connections and nothing else, so a loose agent cannot post to a real account.

#Connect a client

The server speaks Streamable HTTP at POST https://api.yeetpost.com/api/v2/mcp and authenticates with the same API key as the REST API, in either Authorization: Bearer or x-api-key. Grab a key from the API page.

claude code
claude mcp add --transport http \
  --header "Authorization: Bearer $YEETPOST_API_KEY" \
  yeetpost https://api.yeetpost.com/api/v2/mcp

Cursor reads a mcp.json, either .cursor/mcp.json in the project or ~/.cursor/mcp.json for every project:

.cursor/mcp.json
{
  "mcpServers": {
    "yeetpost": {
      "url": "https://api.yeetpost.com/api/v2/mcp",
      "headers": {
        "Authorization": "Bearer yp_secret_your_key_here"
      }
    }
  }
}

Any other MCP client takes the same three facts, usually in this shape. If your client wants the transport named, it is http, sometimes spelled streamable-http:

mcp config
{
  "mcpServers": {
    "yeetpost": {
      "type": "http",
      "url": "https://api.yeetpost.com/api/v2/mcp",
      "headers": {
        "Authorization": "Bearer yp_secret_your_key_here"
      }
    }
  }
}
The key goes in a header, so keep it out of anything you commit. Read it from the environment where your client supports that, and see the security checklist before you ship.

#The five tools

list_connections

The accounts and channels available, with their slugs.

create_post

Posts text to connectionSlugs[], now or at scheduledFor. Returns a result per connection.

list_posts

Recent posts, with an optional status filter and limit.

get_post

One post by postId.

cancel_scheduled_post

Cancels a scheduled post by postId.

Tool arguments use the same camelCase names as the JSON endpoints: text, connectionSlugs, scheduledFor, postId, status, limit. A single connection failing comes back as a failed item rather than a tool error, so an agent can report which platform bounced and carry on. The full behaviour is on the MCP docs page.

#Develop against the sandbox

Add a sandbox connection in the dashboard and create a test key in settings. Test keys start with yp_test_ instead of yp_secret_. A sandbox connection takes posts, validates them, stores them, returns the shapes a real platform returns and fires the same webhooks, and publishes nothing. It is free and never counts toward your plan.

Point your agent at a test key while you are building it. A test key lists only your sandbox connections, refuses any other slug, and sees only sandbox posts, so an agent that decides to post forty times cannot reach a real account. The MCP server scopes a test key the same way the REST API does. Swap in the live key when the behaviour is right.

To exercise the failure path, start the text with [fail]: the sandbox answers 422 platform_rejected, stores the post with that error and fires post.failed.

#No MCP client? Use the REST API

MCP is a convenience, not a requirement. The same account posts to the same platforms over plain HTTP, which is often the shorter path for a framework that already has its own tool abstraction.

curl
curl -X POST https://api.yeetpost.com/api/v2/posts \
  -H "x-api-key: $YEETPOST_API_KEY" \
  -H "content-type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "text": "shipped the new api docs today",
    "connectionSlugs": ["linkedin", "bluesky"]
  }'

An Idempotency-Key makes a retry safe, which matters more with an agent than with a cron job: a retried tool call should not post twice. Every endpoint is in the API reference, and the spec at https://api.yeetpost.com/api/v2/openapi.json needs no key, so an agent can read it before it has one.