{"slug": "how-to-post-your-release-notes-to-x-linkedin-threads-and-bluesky-from-claude", "title": "How to post your release notes to X, LinkedIn, Threads and Bluesky from Claude Code", "summary": "A developer published a guide showing how to connect Claude Code to social media schedulers over the Model Context Protocol (MCP), letting the agent read a project's CHANGELOG.md, draft per-network release announcements for X, LinkedIn, Threads and Bluesky, and schedule them from the terminal. The guide recommends starting with draft-only permissions rather than full posting, since a model may invent features or round numbers incorrectly, and walks through adding remote MCP servers via `claude mcp add --transport http` with OAuth or bearer-token auth.", "body_md": "*This guide was originally published on the [Sendhour blog](https://sendhour.com/blog/post-release-notes-from-claude-code-mcp).*\n\nYou shipped v2.3. The changelog is written, the tag is pushed, and now comes the part most solo developers skip: telling anyone. Writing four versions of the same announcement, one for each network's length limit and tone, then remembering to post them at a sensible hour, is exactly the kind of chore that never gets done on release day.\n\nIf you already work in Claude Code, you can hand it that chore. Claude Code can connect to remote tools over the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports), and several social media schedulers now run MCP servers. Once one is connected, Claude can read your `CHANGELOG.md`, write a post per network, and schedule them, without you leaving the terminal you shipped from.\n\nThis guide covers the whole loop: picking a scheduler, connecting it, the prompt that works, the per-network limits Claude needs to respect, and the guardrails that keep an agent from posting something you'd regret.\n\nBefore you connect anything, decide whether Claude may **publish** or only **draft**. This is the single most important setting in the whole workflow.\n\nA good scheduler gives you levels like these:\n\n| Level | What the agent can do | When to use it | \n|---|---|---|\n| Read only | List accounts, scheduled posts and analytics | Asking \"what's going out this week?\" | \n| Drafts only | Everything above, plus create drafts you approve | Your default for launch posts | \n| Full posting | Schedule and cancel posts that go out without a check | Repeat jobs you've already reviewed a few times | \n\nStart with drafts. A language model will occasionally invent a feature, round a number the wrong way or tag the wrong account. A draft costs you one extra click; a wrong public post costs more.\n\nIf the server authenticates with an API key instead of a sign-in, remember that the key usually carries the full permissions of the person who created it. Keep it out of your repo and out of shared config.\n\nRemote MCP servers are added with `claude mcp add` and the HTTP transport. Anthropic's [Claude Code MCP documentation](https://code.claude.com/docs/en/mcp) describes HTTP as the recommended option for remote servers and shows the general shape:\n\n```\n# Server that signs you in with OAuth in the browser\nclaude mcp add --transport http <name> <url>\n\n# Server that takes an API key as a bearer token\nclaude mcp add --transport http <name> <url> \\\n  --header \"Authorization: Bearer <your-key>\"\n```\n\nTwo details from the same docs are worth knowing:\n\n`--scope user` to make it available in every project, or `--scope project` to write it to a `.mcp.json` file your team can share. If you use a bearer token, don't put it in a project-scoped `claude mcp list` from your shell, or type `/mcp` inside a Claude Code session to see each server's status and finish any sign-in.\nThen ask Claude something harmless first: *\"List my connected social accounts.\"* If you get back your X handle, LinkedIn page and so on, the connection works.\n\nThe difference between generic AI posts and ones that sound like you is almost entirely in the prompt. Save something like this as a snippet, or as a [Claude Code slash command](https://code.claude.com/docs/en/slash-commands) if you release often:\n\n```\nRead CHANGELOG.md and find the section for the latest version.\n\nWrite launch posts for:\n- X: a thread of 2-4 posts. First post says what shipped and why it\n  matters to a user. No hashtags. Link only in the last post.\n- LinkedIn: one post, plain language, short paragraphs, link to\n  https://example.com/changelog as a link card.\n- Threads: one post, conversational.\n- Bluesky: one post.\n\nRules:\n- Only mention changes that are in the changelog. Do not invent\n  features, numbers or customer names.\n- Stay inside each network's character limit.\n- No emojis in the first line.\n\nCreate these as DRAFTS for Friday 09:00 in my time zone (Asia/Kolkata).\nShow me every draft before you finish.\n```\n\nA few things make this prompt hold up:\n\n`2026-11-20T09:00:00+05:30`.\nClaude is good at writing to a length when you tell it the length. It is not reliably good at *counting* characters the way each network does, so build some margin in and let the scheduler's validation be the final check.\n\n| Network | Text limit | Notes | \n|---|---|---|\n| X | 280 characters per post | X weights some characters, such as many emoji, more heavily and counts links at a fixed shortened length. See [Counting characters](https://docs.x.com/fundamentals/counting-characters) . | \n| Threads | 500 characters | Meta's API docs note that emoji are counted by their UTF-8 bytes. See [Threads posts](https://developers.facebook.com/docs/threads/posts) . | \n| Bluesky | 300 graphemes | Set in the `app.bsky.feed.post` lexicon; a[proposal to raise it](https://github.com/bluesky-social/atproto/discussions/5171) was opened in June 2026, so check the current limit before relying on more room. | \n|  | 3,000 characters | See LinkedIn's [Post and share updates](https://www.linkedin.com/help/linkedin/answer/a528176) help page. | \n\nPractical rules that follow from this:\n\nOne cost to know about: X now prices API usage by consumption (see [X API pricing](https://docs.x.com/x-api/getting-started/pricing)), so schedulers often cap how many X posts you can send per day or month. A three-post thread uses three posts from that allowance.\n\nWhen Claude finishes, you should have one draft per network. Before approving:\n\nAfter the posts go out, you can close the loop from the same terminal: *\"How did last Friday's release posts do?\"* If your scheduler exposes analytics over MCP, Claude can pull views and engagement per post, which is a quick way to learn which networks are worth writing longer versions for next time.\n\nAgents that post in public deserve a few more safety checks than agents that edit code.\n\nSeveral schedulers now publish Claude Code setup guides for their MCP servers, including [Postiz](https://postiz.com/claude-code), [Preflight](https://preflight.social/docs/mcp) and [bundle.social](https://bundle.social/claude-code-social-media). When comparing them, check four things:\n\n**Disclosure: I built [Sendhour](https://sendhour.com), a social media scheduler that has an MCP server for this exact workflow.** It posts to TikTok, YouTube, Instagram, Threads, Bluesky, X and LinkedIn through each network's official API. Agents can connect with read-only, drafts-only or full-posting access, and a send that loses contact with a network midway is marked \"Check account\" rather than retried, so you don't get duplicates. Connecting it to Claude Code is one command (`claude mcp add --transport http sendhour https://sendhour.com/mcp --header \"Authorization: Bearer sh_your_api_key\"`), and the setup for other agents is in the [API docs](https://sendhour.com/docs). Plans start at $29/month for 5 accounts. Pick whichever tool fits your networks and budget; the workflow above works the same with any of them.\n\nThe point isn't to let an AI run your social accounts. It's to remove the friction between shipping something and saying so. With an MCP-connected scheduler, a release announcement becomes one saved prompt, one review pass and one click to approve. You'll do it every release instead of every third, and that consistency matters more than any single post.\n\nStart small: connect a scheduler with drafts-only access, run the prompt on your next release, and edit what comes back. After a few releases you'll know whether the drafts are good enough to trust with more.", "url": "https://wpnews.pro/news/how-to-post-your-release-notes-to-x-linkedin-threads-and-bluesky-from-claude", "canonical_source": "https://dev.to/vidur_saini/how-to-post-your-release-notes-to-x-linkedin-threads-and-bluesky-from-claude-code-2hoo", "published_at": "2026-11-13 06:41:54+00:00", "updated_at": "2026-11-13 06:50:26.332551+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "ai-tools", "developer-tools"], "entities": ["Claude Code", "Anthropic", "Model Context Protocol", "Sendhour", "X", "LinkedIn", "Threads", "Bluesky"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/how-to-post-your-release-notes-to-x-linkedin-threads-and-bluesky-from-claude", "markdown": "https://wpnews.pro/news/how-to-post-your-release-notes-to-x-linkedin-threads-and-bluesky-from-claude.md", "text": "https://wpnews.pro/news/how-to-post-your-release-notes-to-x-linkedin-threads-and-bluesky-from-claude.txt", "jsonld": "https://wpnews.pro/news/how-to-post-your-release-notes-to-x-linkedin-threads-and-bluesky-from-claude.jsonld"}}