This is a submission for the Notion MCP Challenge
What I Built
Every developer I know has the same problem. They write a solid post, spend 20 minutes formatting it for Dev.to, copy-paste to Hashnode, re-upload the images that broke because Notion's CDN URLs expire, then give up on Medium entirely. The writing was the easy part. The publishing killed the momentum.
BlogCast MCP fixes that.
It's an open-source MCP server + dashboard that turns Notion into a publishing hub. Write once — in Notion or in the built-in rich text editor — then tell Claude to publish it everywhere.
"Publish my TypeScript post to Dev.to and Hashnode"
That's it. One sentence. Done.
What it actually does:
- Publishes to Dev.to, Hashnode, and Medium simultaneously
- Handles Notion's expiring image URLs automatically (downloads → caches → re-uploads to each platform's CDN)
- Adapts content per platform — Medium gets clean HTML, Dev.to/Hashnode get optimized Markdown
- Syncs analytics back into Notion (views, reactions, comments — all in one place)
- Schedules posts via Claude: "Schedule my React post for tomorrow at 9am UTC"
- AI pre-publish checks — catches missing excerpts, vague titles, broken formatting before you hit send
- Auto-configures Claude Desktop — no JSON editing required
The whole thing runs locally. No third-party servers, no SaaS fees, no data leaving your machine. Your API keys are stored encrypted on your device.
Video Demo
Show us the code
GitHub: github.com/TheCodeDaniel/blogcast_mcp
Built as a proper monorepo — three packages that work together:
| Package | What it does |
|---|---|
mcp/ |
MCP server — the Claude integration layer |
server/ |
Express backend — publishing, image caching, AI, scheduling |
client/ |
React dashboard — write, publish, manage everything visually |
Stack: TypeScript, Node.js, Express, React, Vite, TipTap editor, Anthropic SDK, Notion API.
How I Used Notion MCP
Notion sits at the center of this whole thing — not as a passive database, but as the living CMS.
The MCP server talks to Notion directly via @notionhq/client. When Claude calls publish_post, the server reads the Notion page blocks, converts them to Markdown using notion-to-md, handles all the images, pushes to each platform, then writes the results back into Notion — a linked Analytics database that tracks views, reactions, and comments per platform.
The Notion integration does five specific things:
Posts database — every draft, scheduled post, and published article lives here. Status, tags, platforms, canonical URL — all tracked as Notion properties.
Analytics database — a relational table linked to Posts. Every publish result is logged: URL, status (Success/Failed), and synced stats from each platform's API.
Auto-migration — on first run, BlogCast patches both databases automatically. New user? You don't set up a single column manually. Just share your databases with the integration and BlogCast does the rest.
Two-way sync —
sync_analyticspulls the latest numbers from Dev.to and Hashnode back into Notion. Your post performance dashboard lives where you already work.Scheduling — set
Scheduled Atin Notion (or via Claude: "schedule this for Friday 9am"), and the backend polls every N minutes to auto-publish when the time comes.
The MCP layer is what makes Claude feel like a natural publishing assistant rather than a chatbot bolted onto a dashboard. You're not filling out forms — you're just talking.
"Show me what's in Review" → list_drafts
"Preview my latest draft" → preview_post
"Publish the TypeScript one to all platforms" → publish_post
"What's the view count on my last post?" → sync_analytics + get_publish_status
Everything that used to take 30 minutes of copy-paste and re-uploading now takes one message.
Top comments (0)