MCP (streamable HTTP) · Threads

Draft and schedule Threads posts from Windsurf

Founders who code in Windsurf can use Cascade to draft the posts that explain their product to customers, not just to other builders. Cascade reads the feature you finished, writes a plain-language Threads post through SocialHandoff, and saves it as a draft. It stays under 500 characters and waits for your approval. Longer ideas can go out as a reply-chain thread, and every post waits for your approval.

Prompt

I just finished the booking reminders feature for our salon software. Write a Threads post for salon owners, first person as the founder, about why we built it: no-shows cost them money. Under 400 characters.

How to do it

  1. Mint a Threads agent key In https://app.socialhandoff.com, open Connections, connect your Threads account, then create an agent key scoped to Threads with draft permission only. Copy the key when it is shown; only its hash is stored.
  2. Edit mcp_config.json Open Windsurf's MCP settings and add a server with serverUrl https://app.socialhandoff.com/mcp and an Authorization header holding the Threads key. Or use the stdio form with npx -y socialhandoff-mcp.
  3. Refresh the servers Refresh MCP servers in the Cascade panel so the new tools load.
  4. Let Cascade draft Ask Cascade to summarize the branch you are on as a Threads post. It calls draft_post; you approve or send it back with edits from the inbox.

Example draft

Every salon owner I talk to says the same thing: no-shows hurt more than slow weeks. So we built booking reminders. Your clients get a text the day before with a one-tap confirm or reschedule, and you see who confirmed at a glance. It is on for every account today, no setup.

Gotchas

  • Threads fetches images and video from your instance at signed, expiring URLs, so you do not need a separate public media host. The API itself must be reachable over public HTTPS; an instance that only runs on localhost cannot publish media to Threads.
  • Keep each Threads post within 500 characters, and remember that Threads counts emoji by their UTF-8 bytes, so a few emoji use more of the limit than they appear to. The per-network length guardrail flags longer drafts before they reach the inbox.
  • A draft too long for one post can go out as a reply-chain thread, with each part published as a reply to the one before. Every part has its own 500-character limit, and a carousel of 2 to 20 images or videos can lead the chain.
  • Windsurf loads MCP servers when Cascade starts. After changing mcp_config.json, refresh the servers or the Threads tools will not be offered.
Threads
  • Character limit: 500 characters per post. Emoji count as their UTF-8 bytes, so an emoji can use up to 4 characters of the limit.
  • Links: Up to 5 links per post. Threads generates a preview for the first one.
  • Carousels: 2 to 20 images or videos in one carousel post.
  • Image files: JPEG or PNG, up to 8 MB. Threads fetches each file from a URL at publish time.
Threads scheduler for agent drafts you approve first

Frequently asked questions

Stdio or HTTP for Windsurf?
Both are supported. HTTP needs no local Node process. Stdio with npx -y socialhandoff-mcp is handy when your instance runs on the same machine.
Can Windsurf attach a screenshot to a Threads post?
Yes. Upload the image and SocialHandoff serves it to Threads at a signed, expiring URL, with alt text if you add it. The instance must be reachable over public HTTPS so Threads can fetch the file.
What happens if a Threads publish fails?
The post is marked failed with the error, a post.failed webhook fires if you registered one, and you can fix and retry from the inbox.

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