TL;DR
We built an MCP server for Postmately, so your AI agent can:
- read your landing page and turn it into TikTok carousels and videos ๐
- schedule them to TikTok, YouTube, Pinterest, Telegram, Bluesky and Mastodon
- read the numbers afterwards ๐
All from Claude Code, Cursor or any MCP client. One URL, one API key, about 2 minutes of setup.
And no, it won't post anything to your accounts unless you tell it to. More on that below ๐
The problem: devs ship, nobody hears about it ๐ฉ
Here's my week as a founder:
- Monday: ship a feature ๐
- Tuesday: fix the feature ๐
- Wednesday: "I should really post about the feature"
- Thursday: open Canva, close Canva
- Friday: post nothing
Sound familiar?
The ideas were never the hard part. The hard part is everything between the idea and the published post: writing 8 slides, finding images, resizing, writing a caption per network, remembering when to post.
Meanwhile, my AI agent writes half my code. So the obvious question was:
If Claude Code can refactor my backend, why can't it make my posts?
So we gave it the tools.
What is Postmately? ๐
Postmately is a social media studio for AI agents and their owners.
Paste a website link, and it builds a brand profile (colours, tone, what you sell), checks what works for your competitors, plans a month of posts and makes carousels and videos in your brand style. Then it publishes them through official platform APIs to accounts you own.
The dashboard works fine on its own. But the fun part is the MCP server.
Why MCP? ๐
MCP (Model Context Protocol) is basically "USB for AI agents". You plug a server in, and your agent gets new tools it can call.
Postmately's MCP server gives your agent 24 tools. The important ones:
| Tool | What it does |
|---|---|
list_channels |
Which accounts are connected and their rules (max chars, media requiredโฆ) |
make_carousel |
Website link or topic โ 1080ร1920 slides with caption and hashtags |
make_video |
Branded vertical video from a topic, template or plan item |
validate_post |
Dry run: checks the post against every channel's rules, writes nothing |
create_post |
Draft, next free slot, now, or a specific date-time |
reschedule_post |
Move a post around the calendar |
get_post_metrics |
Views, reactions and comments for one post |
get_analytics_overview |
Numbers across all channels |
get_credits |
Check the balance before generating anything |
Step 1: Get an API key ๐
Sign up at postmately.com (free, no card), connect at least one channel, then go to Settings โ API and create a key.
Put it in your environment, not in your code:
export POSTMATELY_API_KEY="pm_..."
Step 2: Plug it into your agent
Claude Code
claude mcp add --scope user --transport http postmately https://api.postmately.com/mcp \
--header "Authorization: Bearer $POSTMATELY_API_KEY"
--scope user makes Postmately available in every project, not just the current folder.
Optional, but nice: install the Postmately skill, so Claude knows the workflow (list channels โ validate โ draft) without you explaining it:
mkdir -p ~/.claude/skills/postmately && \
curl -fsSL https://postmately.com/skills/postmately/SKILL.md -o ~/.claude/skills/postmately/SKILL.md
That's it. Run claude mcp list (or /mcp inside Claude Code) and you should see postmately connected โ
Cursor
Add this to ~/.cursor/mcp.json:
{
"mcpServers": {
"postmately": {
"url": "https://api.postmately.com/mcp",
"headers": {
"Authorization": "Bearer ${env:POSTMATELY_API_KEY}"
}
}
}
}
Cursor reads POSTMATELY_API_KEY from the environment it was launched in. If you set the key in .zshrc, start Cursor from that terminal (or put the key straight into the config on your own machine).
Codex
Add this to ~/.codex/config.toml:
[mcp_servers.postmately]
url = "https://api.postmately.com/mcp"
bearer_token_env_var = "POSTMATELY_API_KEY"
Anything else
Any MCP client that can send a bearer header works. The endpoint is streamable HTTP (stateless, POST only):
https://api.postmately.com/mcp.
There's also a ready-made skill file your agent can read: postmately.com/skills/postmately/SKILL.md
Quick check with curl ๐ฉบ
Not sure the key works? Ask the server to introduce itself:
curl -s https://api.postmately.com/mcp \
-H "Authorization: Bearer $POSTMATELY_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}}}'
You should get JSON back with "name": "postmately" in serverInfo. A 401 with invalid_api_key means the key is missing, mistyped or revoked: keys look like pm_ followed by 43 characters. A 405 on a GET request is normal, since the server only takes POST.
Step 3: Say hi to your channels ๐
First prompt:
What social channels do I have connected in Postmately, and what are their rules?
The agent calls list_channels and comes back with something like:
You have 4 channels connected:
- TikTok (@yourbrand): video or photo carousel, up to 10 images
- YouTube (Your Brand): needs a video
- Bluesky (yourbrand.bsky.social): 300 characters max
- Pinterest (yourbrand): needs an image
Knowing the rules matters. Bluesky cuts at 300 characters, YouTube wants a video, Pinterest wants an image. The agent writes a different text per channel instead of chopping one text to fit.
Step 4: Landing page โ carousel ๐
Now the magic:
Make a TikTok carousel from https://myproduct.com about the main problem it solves.
Save it as a draft.
Under the hood, the agent:
- calls
get_creditsto check you can afford it (a carousel costs 20 credits) - calls
make_carouselwith your URL - polls
get_carouseluntil the slides areready - calls
create_postwith the caption, hashtags and rendered slides, as a draft
The create_post call looks like this:
{
"text": "Three habits that fixed my sleep",
"channels": ["<tiktokChannelId>"],
"mediaIds": ["<slide1>", "<slide2>", "<slide3>"],
"when": "draft"
}
You open Postmately, look at the slides, fix a word if you want, and approve. Done.
Step 5: Plan the whole week ๐
Look at my month plan in Postmately. Make carousels for the next 3 plan items
and schedule them Mon, Wed and Fri at 18:00 Berlin time.
Run validate_post before scheduling.
The agent reads list_plan_items, makes the carousels, runs validate_post on each one (a dry run that catches things like "this channel needs a video"), and schedules them with an ISO date-time:
{ "when": "2026-11-09T18:00:00+01:00" }
Changed your mind? "Move Wednesday's post to Thursday" โ reschedule_post.
Step 6: Read the numbers ๐
How did my posts do this week? Which one got the most views?
The agent calls get_analytics_overview and get_post_metrics, and tells you what worked. You can ask it to make more of that.
One honest note: some networks (TikTok and Telegram among them) don't share counters through their APIs, so the numbers come from the networks that do. Postmately tells the agent which is which (metricsAvailable), so it won't make numbers up.
"Wait, you gave an AI my accounts?!" ๐ฑ
Fair question. Here's how it's set up:
- Drafts by default. Unless you clearly say "publish" or give a time, the agent saves a draft.
- Official APIs only. No shared passwords, no bots pretending to be a human clicking around.
- Your accounts stay yours. Disconnect any channel at any time.
-
Dry runs first.
validate_postchecks a post against every channel's rules and writes nothing. - One key, one workspace. An API key only sees the channels in its own workspace.
Autopilot posts from the dashboard work the same way: drafts come to Telegram or email a day before, and nothing goes out without your yes.
How much does it cost? ๐ธ
- Free: a content plan, 3 carousels and 1 video (120 credits), up to 5 channels
- AI Autopilot: $59/month, 6,000 credits (about 300 carousels or 100 videos), up to 50 channels
MCP and the API are included on every plan, including free. A carousel costs 20 credits, a video 60.
Try it
- Grab a free key at postmately.com
claude mcp add ...- Ask your agent to turn your landing page into a carousel
I'd love to hear what you build with it. What's the first post you'd hand off to your agent? Tell me in the comments





Top comments (0)