---
title: "MCP server — schedule social posts from Claude | Ravenpost"
description: "Connect Ravenpost to Claude Code, Claude Desktop or any MCP client: 19 tools to draft, schedule and publish posts across 9 networks, with platform limits enforced server-side."
url: https://ravenpo.st/docs/mcp/
---

Developers

# Drive it from Claude

Ravenpost runs an MCP server at `https://api.ravenpo.st/mcp` — 19 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.

[Overview](https://ravenpo.st/docs/)[REST API](https://ravenpo.st/docs/api/)[MCP server](https://ravenpo.st/docs/mcp/)

## Connect a client

Create a personal access token in dashboard **Settings → API tokens** — it carries one workspace, and it is shown once.

Claude Code

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

Clients that can’t set headers — claude.ai and Claude Desktop custom connectors — take the token in the URL instead. It is a deliberate fallback: request URLs are never logged server-side, and a token can be revoked at any time.

Custom connector URL

```
https://api.ravenpo.st/mcp?token=rvp_your_token_here
```

## Tools (19)

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_accounts`Connected accounts with their ids, platforms and status.

### Posts

-   `list_posts`List posts, filtered by status or platform.
-   `get_post`One post with every destination’s status and permalink.
-   `create_post`Draft, publish, schedule or queue a post across any set of accounts.
-   `update_post`Edit a draft or scheduled post — resets it to draft, so pass an action to re-send it.
-   `delete_post`Delete the Ravenpost copy and cancel a pending publish.
-   `schedule_post`Move a post to a new time.
-   `publish_post`Publish a post immediately.

### Media

-   `upload_media`Upload 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_upload`Presigned direct upload — for large or production files, so bytes never pass through the model’s context.
-   `attach_media`Register a direct upload as an asset, reformatting an image or recording a video as-is.
-   `create_variants`Cut one image into several platform canvases at once, cropping on the subject rather than the middle.
-   `list_media`Recent media assets, to reuse one instead of re-uploading.
-   `image_formats`The image formats and target dimensions upload\_media accepts.

### Analytics

-   `get_analytics`Followers per account and engagement on recent posts.
-   `best_times`Recommended posting hours measured from this workspace’s own posts — with an explicit “not enough data yet” answer.

### Instagram

-   `list_audio`Search Instagram’s licensed audio catalog for a reel track.

### Reference

-   `list_queue_slots`The weekly posting schedule and the next free slot.
-   `platform_limits`Caption 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 cannot 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 the header form wherever your client supports it.
