Developers

Drive it from Claude

Ravenpost runs an MCP server at https://api.ravenpo.st/mcp22 tools that let an assistant list your accounts, prepare media, and draft, schedule or publish a post across 9 networks. It reuses the dashboard’s own services, so every limit and compliance rule applies exactly as it does in the UI.

Connect a client

The endpoint is an OAuth resource server: an unauthenticated call answers 401 with a WWW-Authenticate challenge pointing at /.well-known/oauth-protected-resource, so a client that implements MCP authorization needs nothing but the URL — it discovers the authorization server and opens the sign-in itself. If you want the walkthrough rather than the reference, the MCP page covers the same ground with the prompts to try afterwards.

Claude Code — sign in
claude mcp add --transport http ravenpost https://api.ravenpo.st/mcp

A personal access token is the second route, for what a sign-in cannot cover: a client with no browser flow, a script, a CI job, and the REST API. Create one on the dashboard’s MCP page — it carries one workspace and is shown once — then send it as a bearer header.

Claude Code — token
claude mcp add --transport http ravenpost https://api.ravenpo.st/mcp \
  --header "Authorization: Bearer rvp_your_token_here"

A client that can neither sign in nor set a header takes the token in the URL. It is a deliberate fallback: request URLs are never logged server-side, and a token can be revoked at any time.

Fallback: token in the URL
https://api.ravenpo.st/mcp?token=rvp_your_token_here

Tools (22)

Descriptions here are the short version. The ones the model reads are longer and spell out the traps — which platforms ignore a format, why a TikTok post defaults to private, what an absent metric means.

Accounts

  • list_workspacesEvery workspace the token can act in. With more than one, the other tools require a workspaceId rather than guessing which client you meant.
  • list_accountsConnected accounts with their ids, platforms and status.

Posts

  • list_postsList posts, filtered by status or platform.
  • get_postOne post with every destination’s status and permalink.
  • preview_postRender a post as each platform will show it without creating anything — an interactive card in clients that support MCP Apps, and the per-platform character counts everywhere else.
  • create_postDraft, publish, schedule or queue a post across any set of accounts.
  • update_postEdit a draft or scheduled post — resets it to draft, so pass an action to re-send it.
  • delete_postDelete the Ravenpost copy and cancel a pending publish.
  • schedule_postMove a post to a new time.
  • publish_postPublish a post immediately.

Media

  • upload_mediaUpload an image or video from a URL, a local path (dev only) or base64; images are reformatted to the platform shape you name.
  • create_media_uploadPresigned direct upload — for large or production files, so bytes never pass through the model’s context.
  • attach_mediaRegister a direct upload as an asset, reformatting an image or recording a video as-is.
  • create_variantsCut one image into several platform canvases at once, cropping on the subject rather than the middle.
  • list_mediaRecent media assets, to reuse one instead of re-uploading.
  • image_formatsThe image formats and target dimensions upload_media accepts.

Analytics

  • get_analyticsFollowers per account and engagement on recent posts — published from Ravenpost or already on the account.
  • best_timesRecommended posting hours measured from this workspace’s own accounts — with an explicit “not enough data yet” answer.

Instagram

  • list_audioSearch Instagram’s licensed audio catalog for a reel track.

Pinterest

  • list_boardsThe boards on a connected Pinterest account. Every pin belongs to one and Pinterest has no default, so a Pinterest post has to name a board.

Reference

  • list_queue_slotsThe weekly posting schedule and the next free slot.
  • platform_limitsCaption budgets, media rules and recommended specs per platform.

What it looks like in use

Once connected, the work happens in ordinary sentences — the assistant picks the tools and the server keeps it honest:

> Post this screenshot to Instagram and X on Tuesday morning.
  Give X a shorter caption.

  → list_accounts        2 accounts
  → platform_limits      X caption budget: 280
  → upload_media         reformatted to 1080×1350 (feed) and 1600×900
  → best_times           Tuesday 09:00 — 1.8× a typical post (from 5 posts)
  → create_post          scheduled for Tue 09:00, 2 destinations

best_times is worth knowing about: it answers from your own published posts and the engagement collected against them, and when there isn’t enough history it says so rather than picking an hour anyway.

Questions

Which clients work?
Anything that speaks MCP over Streamable HTTP — Claude Code, Claude Desktop, claude.ai custom connectors, and the growing set of third-party clients. The server is stateless: it builds a fresh session per request, so there is no shared state between clients or workspaces.
Can the assistant create images or video for me?
No. The media tools ingest files you provide — a URL, a base64 blob, or a presigned direct upload — and reformat images to a platform’s shape. They do not synthesise media, and nothing here bills you for generation credits.
What stops it from posting something wrong?
The same server-side rules the dashboard enforces: caption budgets per platform, media requirements, TikTok’s compliance fields, thread caps. A post that would breach one is rejected with the reason rather than silently truncated. A post created as a draft stays a draft until something asks to publish it.
Is my token safe in the URL?
The URL form exists for clients that can neither run the sign-in nor set headers, and it is a deliberate trade-off: we never log request URLs server-side, and any token can be revoked from Settings at once. Prefer OAuth, or the header form, wherever your client supports either.