MCP (streamable HTTP)

Draft social posts from your terminal with Claude Code

Claude Code already knows your repository. Connect it to SocialHandoff and it can turn a merged pull request, a changelog, or a tag into drafts for each network, which wait in your approval inbox until you sign off.

How to do it

  1. Mint a key for Claude Code In https://app.socialhandoff.com, open Connections and create an agent called Claude Code. Scope it to the networks your project announces on and grant draft only.
  2. Store the key in your shell Export it as an environment variable, for example SOCIAL_AGENT_KEY, so it does not end up in shell history or a committed file.
  3. Register the server Run the claude mcp add command below. It uses the streamable HTTP transport and sends the key as a bearer header.
  4. Check the connection Start claude and type /mcp. The server should show as connected with its tools listed.
  5. Ask for a draft Ask Claude Code to read CHANGELOG.md and draft an announcement. Approve it in the inbox.
claude mcp add --transport http social https://app.socialhandoff.com/mcp \
  --header "Authorization: Bearer $SOCIAL_AGENT_KEY"

# or run the stdio server locally
claude mcp add social -- npx -y socialhandoff-mcp --url https://app.socialhandoff.com --key "$SOCIAL_AGENT_KEY"

Why Claude Code fits release announcements

The best source for a launch post is the code that shipped. Claude Code can read the diff, the changelog, and the README in the same session where it writes the draft, so the post names the real flag, the real command, and the real version number. SocialHandoff then holds that draft for review, which catches the one thing the model cannot know: whether today is the day to say it.

Scopes: user, project, or local

claude mcp add stores the server in your local scope by default. Add --scope project to write it to .mcp.json in the repository so teammates get the same server. If you do that, keep the header value as an environment variable reference and never commit a raw key. Use --scope user if you want the server in every project on your machine.

Useful prompts

  • "Read the commits since the last tag and draft one X thread and one LinkedIn post about what changed. Cite the release."
  • "Check brand memory, then rewrite the pending LinkedIn draft so it follows the voice rules."
  • "Draft a Mastodon post for the bug fix in PR 482, with a link to the release notes. Do not schedule it."
  • "List pending posts and show me a preview of each before I open the inbox."

Claude Code calls draft_post, preview_posts, and list_posts for these. With schedule permission it can also call schedule_post to propose a timezone-correct slot. It cannot call approve_post with an agent key.

Pair it with the GitHub trigger

If you want every published release to become a draft without opening a terminal, add the GitHub Actions integration too. Claude Code is then for the posts that need judgment: a deep-dive thread, a migration note, a thank-you to contributors.

Permissions

Keep the Claude Code key at draft only while you learn how it writes. Promote it on one network at a time. The trust ladder is set in .socialhandoff/policy.json, so the promotion shows up in a pull request that someone reviews.

Troubleshooting

  • Server shows as failed in /mcp: check the URL ends in /mcp and the variable is exported in the shell that launched claude.
  • 401: the header is missing or the key was revoked.
  • Tools time out: run npx socialhandoff-mcp doctor --url https://app.socialhandoff.com --key "$SOCIAL_AGENT_KEY" to test health and the key.
  • Too many tool prompts: allow the read-only tools in your Claude Code permission settings and keep prompts on for schedule_post.

Network walkthroughs: Claude Code for X, Claude Code for LinkedIn, Claude Code for Bluesky, Claude Code for Mastodon, and Claude Code for Threads.

Frequently asked questions

Which transport should I use with Claude Code?
Streamable HTTP is simplest because nothing runs locally. Use the stdio form with npx if you prefer the server as a local process or your network blocks the HTTP endpoint.
Can I share the server config with my team?
Yes. Add it with --scope project so it lands in .mcp.json. Each teammate should use their own agent key through an environment variable rather than a shared committed key.
Can Claude Code approve its own drafts?
No. An agent key can never approve a draft it wrote. A person approves in the inbox, or an owner key does it.
Will Claude Code post the moment I ask?
Not by default. New agents are draft-only, so every post waits for review until you promote the agent on a given network.

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