DEV Community

Cover image for My AI agent now creates and posts for me ๐Ÿคฏ (hereโ€™s the MCP setup)
Leo
Leo

Posted on

My AI agent now creates and posts for me ๐Ÿคฏ (hereโ€™s the MCP setup)

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_..."
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

--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
Enter fullscreen mode Exit fullscreen mode

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}"
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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"}}}'
Enter fullscreen mode Exit fullscreen mode

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?
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

Under the hood, the agent:

  1. calls get_credits to check you can afford it (a carousel costs 20 credits)
  2. calls make_carousel with your URL
  3. polls get_carousel until the slides are ready
  4. calls create_post with 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"
}
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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" }
Enter fullscreen mode Exit fullscreen mode

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?
Enter fullscreen mode Exit fullscreen mode

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_post checks 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

  1. Grab a free key at postmately.com
  2. claude mcp add ...
  3. 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)