Pipepost v0.9.0 — Substack publishing + the agent-loop transcript
You can now publish to Substack from Claude Code. That makes 6 CMS platforms in a single MCP server: Dev.to, Ghost, Hashnode, WordPress, Medium, and Substack.
But the more interesting part of v0.9.0 isn't a new platform. It's a transcript showing what an agent-loop publishing pipeline actually looks like.
What an agent loop replaces
If you publish to multiple platforms today, the manual flow is roughly:
- Open Dev.to, paste, format, tag, save draft
- Open Ghost admin, paste, format, set canonical URL, save draft
- Open Hashnode, paste, format, set canonical URL, save draft
- Open WordPress, paste, format, set canonical URL, save draft
- Open Substack, paste, format, save draft
- Open three SEO tools — one for scoring, one for meta tags, one for schema
- Open Twitter compose, write a thread of 4 tweets
- Open LinkedIn, write a professional version of the same post
- Open Bluesky, write a 287-character version
- Open Bing Webmaster Tools, paste the URL, click submit
Realistic time: 45 to 90 minutes of context switching.
The agent-loop version of that flow is one prompt:
Take this draft, audit it, score it for SEO, fix any issues, cross-publish to Dev.to, Ghost, Hashnode, WordPress and Substack as drafts with the Dev.to URL as the canonical, generate Twitter + LinkedIn + Bluesky posts, and submit the Dev.to URL to IndexNow.
Claude Code chains the calls, threads the canonical URL between them, prints the output, and asks if you want to flip the drafts to published.
The full annotated transcript is in the repo: docs/demo/agent-loop.md.
The Substack piece
Substack does not have a public API. The publish tool now talks to Substack's reverse-engineered endpoints:
-
POST /api/v1/draftsto create -
POST /api/v1/drafts/{id}/publishto publish - Cookie auth via
connect.sid(DevTools → Application → Cookies →substack.com) - Markdown converted to ProseMirror documents (paragraphs, headings, code blocks, blockquotes, bullet lists, inline bold/italic/code/links)
-
user_idresolved from/api/v1/user/profile/selfon first publish, then cached in~/.pipepost/config.json
Setup:
npx pipepost-mcp init
# then in Claude Code:
# setup platform=substack connect_sid=<cookie> publication_url=https://you.substack.com
# publish platform=substack title="..." content="..." status=draft
What v0.9.0 ships with
- 30 MCP tools
- 6 CMS publish targets (Dev.to, Ghost, Hashnode, WordPress, Medium, Substack)
- 4 direct social broadcast targets (Bluesky, Mastodon, LinkedIn, X)
- 4 SEO tools (scoring, meta, schema, IndexNow)
- 4 draft tools (save, list, get, delete)
- 4 Bluesky listening + reply tools
- Cover image search (Unsplash)
- Frontmatter generator for 7 SSGs
- Content audit + link checker
- Repurpose + generate-social-posts
- Unified analytics across all configured platforms
- 446 tests, MIT licensed, no telemetry
Install:
npx pipepost-mcp init
Read the transcript: docs/demo/agent-loop.md

Top comments (0)