Research: Existing Tools and Building Blocks

Crosspost (@humanwhocodes/crosspost) is almost exactly what we need for the publishing layer. It's a single Node.js package that works as a CLI, a programmatic API, and an MCP server — meaning Claude Code can post directly to X, Bluesky, LinkedIn, Mastodon, Discord, Telegram, and more within a session. No browser, no credential juggling. For polishing, there's no off-the-shelf skill, but that's fine — we'd build custom Claude Code skills with platform-specific prompts and tone guidance. Claude itself is the polishing engine. The LangChain Social Media Agent is interesting as a reference but is more heavyweight than we need.

Top pick: Crosspost (@humanwhocodes/crosspost)

A Node.js package that is a CLI tool, programmatic API, and MCP server in one. Supports X/Twitter, Bluesky, Mastodon, LinkedIn, Discord, Telegram, Dev.to, and Nostr. The MCP integration means Claude Code can publish directly within a session. This is the single best fit for our "agent workflow" approach.

Multi-platform publishing tools

ToolTypePlatformsNotes
CrosspostCLI/MCP/API8+ platformsTop pick — native Claude Code integration
Late CLICLI (commercial)13+ platformsFree tier (10 posts/mo), JSON output, scheduling built-in
PostizSelf-hosted app30+ platformsOpen source (20k stars), has REST API and MCP server
SimplexShell scriptX, Mastodon, Bluesky, LinkedInOpens editor like git commit, posts everywhere
social-cross-postPython CLIBluesky, Mastodon, X, Instagram, FacebookLightweight cross-poster

Platform-specific libraries (if we need fine-grained control)

  • X/Twitter: tweepy (Python) — requires Basic plan ($100/mo) for write access
  • Bluesky: atproto (Python) — full AT Protocol SDK, free
  • LinkedIn: linkedin-api-python-client (Python) — official SDK

AI agent / content workflows

  • LangChain Social Media Agent — LangGraph-based agent that generates Twitter/LinkedIn posts from URLs, with human-in-the-loop approval. TypeScript. Repo: https://github.com/langchain-ai/social-media-agent
  • Claude Code custom skills — no existing social media polishing skill found, but the SKILL.md infrastructure is purpose-built for this. We'd create our own polishing skills with platform-specific prompts, character limits, and tone guidance.

MCP servers for social platforms

ServerPlatformsNotes
Crosspost MCP8+ platformsBuilt into crosspost package
Postiz MCP30+ platformsRequires self-hosted Postiz instance
OpenTweet MCPX/Twitter12 tools for full tweet lifecycle
bsky-mcp-serverBlueskyAT Protocol via natural language
mcp-linkedinLinkedInVia Unipile API
  1. Polishing: Custom Claude Code skills (SKILL.md) — Claude itself is the polishing engine, guided by platform-specific prompts and tone rules
  2. Publishing: Crosspost as MCP server + CLI — one tool for all platforms, native agent integration
  3. Scheduling (if needed later): Late CLI or Postiz API

First Prototype Validation

The first prototype is intentionally lightweight:

  • one top-level fast social skill
  • local context docs for stream, tone, and channels
  • loose markdown examples as test inputs

The question for this validation pass is not "is it complete?" but "does this shape feel fast enough to use?"

Example: feature-note.md

What worked:

  • the source is thin but still enough to infer a Flowershow or Datopian publishing angle
  • the "less friction" angle is clear and easy to turn into short social copy
  • this is a good example of the kind of real input the workflow should handle

What felt weak:

  • without reading the PR, the skill would need to stay generic
  • product identity is a little ambiguous, so this is a likely case for one short clarifying question

What to tighten:

  • make it explicit in the skill that when product identity is ambiguous, it should choose the safer framing instead of pausing too long

Example: dataset-update.md

What worked:

  • this is ideal MVP input because the product, audience, and value are easy to infer
  • the "publishing data well matters" angle is stronger than a generic release note
  • should produce good X and LinkedIn drafts quickly

What felt weak:

  • the input does not include any concrete dataset detail, so posts may risk sounding generic

What to tighten:

  • encourage one specific concrete detail where available, but do not require it

Example: thought-leadership-note.md

What worked:

  • the note is strong enough to produce a clean, opinion-led post
  • this tests whether the skill can choose one angle without turning into a workshop

What felt weak:

  • this kind of input can easily trigger too much ideation and too many alternatives

What to tighten:

  • bias the skill toward choosing one strong framing and drafting immediately

Example: video-link.md

What worked:

  • the desired angle is already well constrained: one practical takeaway rather than full summary
  • this is a good pattern for YouTube or podcast-derived posts

What felt weak:

  • if the linked content cannot be inspected, the workflow depends entirely on the short context note

What to tighten:

  • tell the skill to ask for one takeaway sentence only if the link context is too thin

Validation Summary

The current prototype direction looks viable for the MVP.

Strengths:

  • the workflow is lightweight enough to stay inside one thread
  • the skill can work from rough markdown rather than a structured brief
  • the context pack removes the need for repeated tone and product questions

Risks:

  • generic outputs when the source lacks one concrete detail
  • over-questioning or over-ideating on thought-leadership inputs
  • publishing still depends on external tooling that is not yet integrated here

Most important next refinement:

  • tighten the orchestrator skill so it defaults to drafting faster and explaining less

Publishing Decision For The Next Iteration

The smallest publish path worth prototyping next is:

  • keep the skill producing copy-ready output by default
  • separately test Crosspost as the first real publishing integration

Recommendation:

  • do not block the MVP on full publish-in-thread support
  • test the polish workflow first
  • if the polish flow feels genuinely fast, add one publish helper using Crosspost rather than building custom platform code

Main blocker to true publish-in-thread behavior:

  • credential setup and tool configuration, not content generation
Built with LogoFlowershow