Skip to main content
Developer integration

Content Drifter MCP server

Generate, schedule, and manage social posts from any MCP client. Cursor, Claude Desktop, Cline, Windsurf and more, without context-switching to the dashboard. Built for founders and creators who already live in AI coding assistants.

By Tayyab, Founder

Tools exposed (v0)

Your assistant reads these descriptions to decide when to call Content Drifter.

generate_post

Write a platform-native post from a topic, in your brand voice.

POST /api/mcp/v1/generatewrite

platform
string, required, linkedin, twitter, instagram, facebook, threads, bluesky, pinterest, youtube, tiktok
topic
string, required, What the post is about. Up to 2000 characters.
tone
string, optional, e.g. "direct", "warm". Falls back to your Brand Kit voice.
length
short | medium | long, Optional. Defaults to what suits the platform.
Ask: "Write a LinkedIn post about why we moved off
  per-seat pricing, in a direct tone."

Returns: the post text, suggested hashtags, and an image
prompt you can hand straight to Image Studio. Nothing is
saved or scheduled by this call.
schedule_post

Put content on the calendar for a future time.

POST /api/mcp/v1/schedulewrite

platform
string, required, One platform per call.
content
string, required, The post body.
scheduledFor
ISO 8601 datetime, required, Must be in the FUTURE. Read in your account timezone.
contentType
string, Defaults to "post". Also story, reel, carousel, article where the platform allows it.
hashtags
string, optional, Counted toward the platform character limit.
imageUrl
URL, optional, Required by Instagram, Pinterest and TikTok.
Ask: "Schedule that for Tuesday at 9am."

Lands on your calendar awaiting review. It does NOT go
out on its own -- see Publishing and approval below.
list_upcoming_posts

Read back what is already scheduled.

GET /api/mcp/v1/upcoming-postsread

platform
string, optional, Filter to one platform. Omit for everything.
limit
number, optional, How many to return, newest first.
Ask: "What am I posting this week?"

Returns each item with its platform, status and scheduled
time in your account timezone, so "Tuesday 9am" means
Tuesday 9am to you.
list_platform_connections

Check which accounts are connected before you plan around them.

GET /api/mcp/v1/platformsread

none
Takes no parameters.
Ask: "Which of my accounts are connected?"

Returns each platform with its connection health, so the
assistant can warn you BEFORE scheduling to an account
that needs reconnecting.
get_brand_kit

Read your voice, colours and fonts so generations stay on-brand.

GET /api/mcp/v1/brand-kitread

none
Takes no parameters.
Usually called on your behalf, not asked for directly.
A good assistant reads this first so the post it writes
sounds like you rather than like a language model.
publish_now

Send an approved post immediately.

POST /api/mcp/v1/publishwrite

contentItemId
string, required, The id of an item that has passed Final Review.
Ask: "Publish the LinkedIn one now."

Refuses anything that has not been reviewed. That is the
guard, not an inconvenience: it is what stops an assistant
posting to your audience without you seeing it.

2-minute install

  1. Generate an API key and copy the secret (shown once).
  2. Paste the config below into your MCP client settings.
  3. Replace cd_live_YOUR_KEY_HERE with your key.
  4. Restart the client. Ask: "Schedule a LinkedIn post for Tuesday about our launch."

Cursor

.cursor/mcp.json (project) or Cursor Settings → MCP

{
  "mcpServers": {
    "contentdrifter": {
      "command": "npx",
      "args": ["-y", "@contentdrifter/mcp"],
      "env": {
        "CONTENTDRIFTER_API_KEY": "cd_live_YOUR_KEY_HERE"
      }
    }
  }
}

Claude Desktop

claude_desktop_config.json → mcpServers

{
  "mcpServers": {
    "contentdrifter": {
      "command": "npx",
      "args": ["-y", "@contentdrifter/mcp"],
      "env": {
        "CONTENTDRIFTER_API_KEY": "cd_live_YOUR_KEY_HERE"
      }
    }
  }
}

Cline

Cline MCP settings (VS Code)

{
  "mcpServers": {
    "contentdrifter": {
      "command": "npx",
      "args": ["-y", "@contentdrifter/mcp"],
      "env": {
        "CONTENTDRIFTER_API_KEY": "cd_live_YOUR_KEY_HERE"
      }
    }
  }
}

Optional: set CONTENTDRIFTER_API_BASE to http://localhost:3001 when testing against pnpm dev:test.

Authentication

Every request carries your key as a Bearer token. Your MCP client sends it for you once it is in the config; the raw form is here for anyone calling the endpoints directly.

curl https://www.contentdrifter.com/api/mcp/v1/upcoming-posts   -H "Authorization: Bearer cd_live_YOUR_KEY_HERE"
  • Keys are shown once, at creation. A lost key is replaced, not recovered.
  • A key acts as you: same plan, same limits, same connected accounts.
  • Revoking takes effect immediately. Generate one key per client so you can revoke a single machine.

Limits and quota

Read tools

list_upcoming_posts, list_platform_connections, get_brand_kit

100 requests per minute, per key. Free of generation quota, so checking costs nothing.

Write tools

generate_post, schedule_post, publish_now

30 requests per minute, per key. Generation also counts against your plan exactly as the dashboard does, plus an hourly ceiling on model spend.

Rate limited

HTTP 429

Carries a Retry-After header. A well-behaved client waits instead of retrying at once.

Plan caps

Same as the dashboard

MCP is another door into the same account, not a second allowance.

API keys

5 active per account

Revoke one to create another. One key per client so a single machine can be revoked.

Errors you may hit

401

Unauthorized

The key is missing, malformed or revoked. Check it is sent as a Bearer token.

400

Validation failed

A parameter is missing or the wrong shape. The response names the field.

400

That time has already passed

scheduledFor must be in the future, read in YOUR account timezone.

403

Plan limit reached

Out of quota for the day or month. The same cap the dashboard enforces.

429

Rate limited

Too many calls. Honour Retry-After.

Publishing and approval

The part worth understanding before wiring this into anything automated.

Scheduling is not approving. Anything created through MCP lands on your calendar awaiting Final Review, and the publish pipeline skips unreviewed items. An assistant cannot post to your audience on its own, even if you ask it to. That is deliberate, and it is why handing a model an API key here is a reasonable thing to do.

publish_now is the one exception, and it refuses anything that has not passed review. So the order is always: generate, schedule, you review, then publish.

Workflows worth stealing

Batch a week in one sitting

  1. Ask for five posts on one theme, one per platform.
  2. Ask to schedule them across Tuesday to Thursday mornings.
  3. Review the whole week in the calendar and approve in one pass.

Turns the weekly content chore into one conversation, and you still see everything before it goes out.

Turn a shipped feature into a campaign

  1. Paste your changelog entry or PR description.
  2. Ask for a LinkedIn post, an X thread and an Instagram caption.
  3. Schedule the LinkedIn one for launch morning, stagger the rest.

You are already in the editor when the feature lands, which is when the detail is freshest.

Audit before you plan

  1. Ask which accounts are connected.
  2. Ask what is already scheduled this week.
  3. Fill the gaps rather than doubling up.

Read tools are quota-free, so checking first costs nothing and stops you scheduling into a dead account.

Try it: three prompts that work

Ask in plain language. Your assistant picks the tool; you never name it.

Draft a LinkedIn post about our new pricing and schedule it for Tuesday 9am.

Generates in your brand voice, then books the slot on your calendar. Nothing publishes until you approve it.

What am I scheduled to post this week?

Reads your calendar back, grouped by day, in your account timezone.

Turn this blog URL into a thread for X.

Fetches the page, repurposes it, and fits the copy to X automatically.

If it is not working

The assistant says it has no Content Drifter tools

The client only reads MCP config at startup. Fully quit and reopen it, not just the window. In Cursor, check Settings then MCP for a green dot next to contentdrifter.

Every call returns 401

The key is wrong, revoked, or still the placeholder. Keys are shown once at creation, so if you did not copy it, generate a new one and delete the old.

Scheduling fails with "that time has already passed"

Times are read in your account timezone, set under Settings then Preferences. Ask for a future slot, or say the date explicitly.

A post is on the calendar but never went out

Scheduled is not approved. Anything created through MCP waits for your review, by design, so nothing publishes to your audience without you seeing it.

Still stuck? Tell us what you tried and include the client you are using.

FAQ

What is the Content Drifter MCP server?

It is a Model Context Protocol (MCP) server that lets AI coding assistants call Content Drifter on your behalf, generate platform-native posts, schedule them, list upcoming content, and read your Brand Kit without leaving Cursor or Claude Desktop.

Which AI clients support it?

Any MCP-compatible client works: Cursor, Claude Desktop, Cline, VS Code with an MCP extension, and other stdio MCP hosts. You add one JSON config block and restart the client.

How do I authenticate?

Generate an API key at /dashboard/settings/api-keys, set CONTENTDRIFTER_API_KEY in your MCP client env, and restart. Keys are hashed server-side; the raw secret is shown once at creation.

Does publish_now post without confirmation?

No. publish_now requires Final Review to be completed in the dashboard first. The tool description tells your assistant to confirm with you before publishing.

Do I need to write code to use it?

No. You add the Content Drifter MCP server to your assistant’s configuration once, authenticate, and then talk to it in plain language. Writing code is optional and only relevant if you are building your own automation on top.