MCP (streamable HTTP) or REST API

Automate social drafts in n8n and keep a human approval step

n8n can reach SocialHandoff two ways: an AI Agent node with the MCP Client Tool, or a plain HTTP Request node calling the REST API. Either way, the workflow creates drafts, and a person approves them before anything is published.

How to do it

  1. Create an agent key for n8n In https://app.socialhandoff.com, open Connections, add an agent called n8n, and grant draft (and schedule if the workflow should propose times).
  2. Store it as a credential In n8n, create a Bearer Auth credential (or a Header Auth credential with Authorization set to Bearer and the key). Workflows reference it without exposing the key.
  3. Option A: MCP Client Tool Add an AI Agent node, attach an MCP Client Tool, set the endpoint to https://app.socialhandoff.com/mcp, Server Transport to HTTP Streamable, and Authentication to your Bearer credential.
  4. Option B: HTTP Request Add an HTTP Request node: method POST, URL https://app.socialhandoff.com/v1/posts, your credential, and a JSON body like the one below.
  5. Test and activate Run the workflow once, confirm the draft appears in the SocialHandoff inbox, then activate it.
{
  "body": "{{ $json.summary }}",
  "networks": ["linkedin", "bluesky"],
  "mode": "submit",
  "idempotencyKey": "n8n-{{ $execution.id }}"
}

Two ways to wire n8n

MCP Client Tool suits workflows where a model decides what to write. The AI Agent node gets the SocialHandoff tools, so it can read brand memory, draft per network, and preview, much like a chat client. Pick which tools to expose in the node; for most flows get_brand_memory, draft_post, and preview_posts are enough.

HTTP Request suits workflows where the text is already decided, for example an RSS item, a form submission, or a row in a sheet. The node posts JSON to /v1/posts and gets the created post back. No model needed.

The request body

  • body: the post text. Map it from a previous node.
  • networks: which networks to target, such as x, linkedin, bluesky, mastodon.
  • mode: draft saves a draft, submit sends it to the approval inbox, and schedule asks for a slot (it still needs approval unless the agent is promoted).
  • idempotencyKey: n8n retries failed executions. Sending the execution id means a retry returns the original post instead of creating a second one.

Workflow ideas

  • New blog post in your RSS feed, then a draft for LinkedIn and Bluesky with the link.
  • New row in a content sheet, then a submitted draft with the row's date and time.
  • An approval.requested outbound webhook from SocialHandoff into an n8n Webhook node, then a Slack or email ping to the reviewer.
  • A post.published webhook into n8n, then a row added to your reporting sheet.

Outbound webhooks carry an HMAC-SHA256 signature of the raw body, made with a signing secret that SocialHandoff shows once when you create the webhook. Verify it in a Code node before trusting the payload.

Troubleshooting

  • 401: the credential is not attached to the node, or the key lost the needed permission.
  • 422: a guardrail rejected the text, for example over the per-network length or a banned topic. The response body names the rule.
  • 423: the workspace kill switch is on; scheduling is paused until someone resumes.
  • MCP endpoint field labeled SSE: some n8n versions keep the old label. Set the transport to HTTP Streamable and the URL still works.

Per-network recipes: n8n for X, n8n for LinkedIn, n8n for Bluesky, n8n for Mastodon, and n8n for Threads.

Frequently asked questions

Should I use the MCP Client Tool or HTTP Request in n8n?
Use the MCP Client Tool when an AI Agent node writes the post. Use HTTP Request when the text already exists and you only need to create a draft.
How do I stop duplicate drafts when n8n retries?
Send an idempotencyKey, such as the execution id. A repeat request with the same key returns the original post instead of creating another.
Can n8n publish straight to LinkedIn through SocialHandoff?
Only after you promote that agent to auto-publish on LinkedIn. Until then every draft from n8n waits in the approval inbox.
Does self-hosted n8n work with self-hosted SocialHandoff?
Yes. Point the URL at your own SocialHandoff API instead of https://app.socialhandoff.com. Private-network addresses are fine for inbound calls to SocialHandoff.

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