MCP (streamable HTTP) · Facebook

Draft Facebook Page posts from Cursor

When you ship something customers will notice, the Facebook Page is often where they ask about it. Cursor can write that post while the change is still fresh: it reads the pull request, drafts a plain update, and can attach screenshots from the repo. SocialHandoff connects over MCP, so Cursor only ever creates drafts. The post waits in the inbox, and the person who manages the Page approves it.

Prompt

We deploy the new mobile checkout tonight. Write a Facebook Page post for customers: what changes, that saved cards carry over, and that checkout will be down from 23:00 to 23:30. Draft for Facebook and schedule it for 17:00 today.

How to do it

  1. Connect Facebook and mint a key In https://app.socialhandoff.com, open Connections, sign in with Facebook and pick the Pages to connect; each Page becomes its own channel. Then create an agent key named Cursor scoped to Facebook with draft and schedule permission.
  2. Add the server to mcp.json Create .cursor/mcp.json in the repository with a url of https://app.socialhandoff.com/mcp and an Authorization header carrying the key. Cursor lists the tools under MCP in its settings once it connects.
  3. Attach media from the workspace Cursor calls attach_media for photos (up to 10, each with alt text) or one video: a public url, or the file as base64 data (up to 8 MB) with its mime type and alt text. Larger files go to POST https://app.socialhandoff.com/v1/media as multipart. The ids go into draft_post as mediaIds.
  4. Ask for the draft Ask Cursor in agent mode. It calls draft_post with networks set to facebook and schedule_post for the time you named.
  5. Approve for the right Page The card shows which Page the post goes to. Approve on desktop or in the phone swipe stack, and it publishes to that Page at the scheduled time.

Example draft

Tonight we are updating checkout on our mobile app.

You will see a shorter, 2-step checkout with Apple Pay and Google Pay. Your saved cards and addresses carry over, so there is nothing to set up again.

Checkout will be unavailable from 23:00 to 23:30 while we switch over. Thanks for your patience.

Gotchas

  • Only Facebook Pages can be connected, not personal profiles. Every Page you grant at sign-in becomes its own channel, so check which Page the card names before approving.
  • Base64 data for attach_media is capped at 8 MB. For a larger video, Cursor has to upload from its terminal; if the key lives only in your shell profile, make sure that terminal loads it, or the upload returns 401.
  • A Page post can carry up to 10 photos or one video, not both. Each photo should have alt text, or the missing-alt-text guardrail flags it.
Facebook
  • Where you can post: Facebook Pages only. The API does not allow posting to personal profiles or to Groups through SocialHandoff.
  • Page access: You need a role on the Page that allows creating content.
  • Photos: One photo with alt text, or up to 10 photos in one post.
  • Video: One video per post.
Facebook post scheduler for Pages, with approval built in

Frequently asked questions

Why can only testers post at first?
Meta requires App Review and Business Verification before your own developer app can post for people outside its tester list. Until then, add people under App Roles.
Should mcp.json go in the repository?
Only without the key. Keep the key in an environment variable or in the global ~/.cursor/mcp.json so it never gets committed.
Can one agent post to several Pages?
Yes. Every Page granted at sign-in connects as its own channel, and a key scoped to Facebook can draft for them. Each post names its Page on the approval card.

Let your agents post. Keep the final say.

Connect your first agent in minutes. Every draft waits in your inbox until you approve it.

14 days free. No card required.

The hosted version is opening soon

Leave your email and we will send one message when hosted accounts open, with your 14-day trial ready. Want it today? Self-host it free from the repo.

Start free trial