0:00
/
Generate transcript
A transcript unlocks clips, previews, and editing.

Automate Your Substack with Claude or ChatGPT - with Dheeraj Sharma

A recording from Kim Doyal's live video

Thank you Lynn Jericho, Sassy Soul Revival, Magick Mica, Claire Machado, and many others for tuning into my live video with Dheeraj Sharma! Join me for my next live video in the app.

Get more from Kim Doyal in the Substack app
Available for iOS and Android

I did a live yesterday with my friend Dheeraj Sharma, and I want to get this written down while it’s still fresh, because he covered a lot of ground fast (his words: “thank you, everyone, for listening to me at a faster pace”) and there were a few moments where I actually said “hot damn” out loud on camera.

The replay is up. But if you’d rather read than watch, this is the version with the links.

Here’s what made it click for me.

The six lanes

Dheeraj opened with a frame I hadn’t seen laid out this cleanly, and it ended up being the spine of the whole conversation. If you publish on Substack, you’re not doing one job. You’re doing six.

  • Publishing the newsletter. Figuring out topics, drafting, reviewing. The part everyone thinks the whole thing is.

  • Notes, daily. The standard advice is three to five a day, which is somewhere between 90 and 150 notes a month. Every one of them has to come from somewhere.

  • Engagement. Replies, comments, the back-and-forth that actually grows a network.

  • Analytics. Knowing what worked and what didn’t, which almost nobody does consistently because it means opening another tab.

  • Restacks and reshares. The thing every growth guru tells you to do, which means feeding yet another queue.

  • DMs and notifications. The inbox that never really empties.

His claim is that four of those six can be handled right now through an MCP layer connected to Claude. Restacks and DMs are still white space.

That framing is what turned this from a tool demo into something I’ve been chewing on since. It’s not “here’s an automation.” It’s “here are the six jobs, and here’s which ones you can hand off.”

What he actually showed

He ran all of this live in Claude Cowork, which he deliberately chose because Cowork lets you build a persistent agent rather than just run a one-off chat.

  • Connecting the MCP. Plus button, connectors, manage connectors, add custom connector, paste the URL. That’s it. Roughly thirty seconds plus a handshake.

  • Calendar capacity. He asked whether his calendar was full for the next week and got back exact open slots. Mine is the same problem... I’ve got August partially planned and gaps I keep forgetting about.

  • Notes from a post. “Write me five notes from my latest published post, save them as drafts.” Then batch schedule. The version that got my attention was the scaled-up prompt: pull the best-performing posts of all time, generate notes from each, schedule the lot.

  • Viral note formats. He’s got somewhere between ten and thirteen note frameworks built in, pulled from what’s actually performed. You can ask it to show you the formats before you write, then pick one for your topic.

  • Retroactive title fixes. Give me three high-CTR title options for my last two posts. Or your first two, from back when you were figuring it out and rushed the headline.

  • The image-to-note agent. This one’s clever. He takes screenshots of a milestone, a testimonial, and a good YouTube comment, and drops them in a folder. An agent reads the folder every day, writes a note from the image, posts it at 9:30 am, and moves the image to a processed folder. His entire job is taking the screenshot. He runs it on Sonnet because the workflow is simple, which is a nice reminder that not everything needs the big model.

  • Analytics and engagement. Comparing published posts to find what the best openers have in common. Pulling recent replies and mentions and drafting responses.

The table of contents thing

I got excited about this one (well, all of them excite me, lol).

Substack doesn’t give you a table of contents.

If you want one, you’re copying anchor links by hand, one heading at a time, and then pasting them back in. There are skills floating around that help with the link collection, but you’re still doing the assembly manually.

He fetched a published post, had Claude build the TOC, told it to insert above the first heading, published the update, refreshed the live article, and it was there.

Then I asked whether it would work on any article, and he said yes, and that’s when the math got interesting. He’s got eighty or ninety posts. I’ve got a lot more than that.

His caveat matters, though. Don’t mass update. Google reads a site-wide bulk edit as a signal, and not a good one. His advice was to run an agent that tinkers with five or seven articles a day and lets it drip. I’d add that the update signal is exactly why this is worth doing at all... Substack sees the post as fresh, and so does Google. Older articles might get a little juice out of it.

The threads I pulled on

A few things I asked about, because they’re the pieces I’d need for my own workflow.

Brand voice enforcement. Can you make sure the notes sound like you? Yes, two ways. Either configure the brand voice in SubflowAI, or point Claude to your own voice skill or file and tell it to run every draft through it before anything reaches Substack. And you can go back and audit what’s already queued: fetch the next seven scheduled notes, run them against my voice skill, edit and reschedule anything that’s off.

Internal linking. I asked whether I could scan older posts for missing internal links and insert them. Dheeraj’s answer was the useful part. It works, but only if the system knows your archive first... every post, its public URL, when it went live. He keeps that in a Notion database wired into his Claude Code pipeline. Without the URL map, the MCP can fetch your posts but has nothing to link them to. So the first job isn’t the linking, it’s building the calendar.

(I usually just use the Claude Chrome extension and ask it to find me links and hand back the anchor text. Which works. It’s just not a system.)

Publishing from my own site. I publish on kimdoyal.com first, always, and then copy and paste into Substack. I asked whether I could build an MCP that pulls the finished article from my site into a Cowork folder and pushes it into a Substack draft. Yes. That one’s going on my list.

I don’t trust platforms I don’t own. That’s not a new position for me, and it isn’t changing.

CLI versus MCP, since it came up

I asked, and Dheeraj gave a real answer, so here’s the plain version.

An MCP is a hosted connection. Claude reaches out over the network to a server someone is running, performs a handshake, receives a list of available tools with their schemas and descriptions, and works from there. That’s what makes it easy to plug in (paste a URL, click connect), and it’s also what makes it heavy. All those tool definitions eat tokens before you’ve asked for anything.

A CLI installs on your machine as a binary. Claude Code or Codex already has access to your system, so it just calls the thing directly. No network handshake, no schema bloat, fewer tokens.

And the trend is moving toward CLIs. Tavily, Notion, and Gumroad have all shipped them. Notion has both, which makes it the cleanest comparison... same functionality, two very different plumbing jobs underneath.

The tradeoff is reach. A CLI is sandboxed on your machine, so anything that needs to communicate with a browser extension or a hosted service still requires an MCP.

I’m going to do a proper version of this... CLI, MCP, and API, how they actually differ and when you’d want each one. It deserves its own post.

The honest caveats

Dheeraj was straightforward about these, and I’d rather repeat them than let anyone find out the hard way.

  • There’s no official Substack API. All of this runs on reverse-engineered endpoints. They work until they don’t. Go in with your eyes open.

  • Don’t automate your replies to people you actually know. His line was that where he’s built a real relationship, he replies as a human. Drafting is fine. Sending should still be you.

  • Don’t mass update your archive. Drip it.

  • The tool isn’t the magic. His phrasing, not mine. Claude does the heavy lifting. The MCP is just the integration layer that lets it reach your Substack.

The links

Everything referenced during the live:

One thing worth knowing before you connect. There are two modes, and they’re not the same. The direct Substack connection is free for his subscribers and covers notes, drafts, analytics, and post management. The SubflowAI relay mode requires an active paid SubflowAI license and unlocks SubflowAI’s own tools, the calendar planning and the AI repurposing. In relay mode, Chrome needs to be open for a live request, though notes you’ve already scheduled publish fine either way because Substack handles those natively.

What I’m doing with it

The website-to-Substack draft pipeline is the one I want. Every article I publish goes on my own site first, gets the AEO and SEO pass, gets edited in my own CMS, and then I copy and paste it into Substack like it’s 2009. That’s a solvable problem, and now I know what it takes to solve it.

The table of contents backfill is second. Not all at once. Five a day, letting it run.

If you were on the live, thank you. If you weren’t, the replay’s here, and Dheeraj was generous with the details.

What would you hand off first?

Download the transcript

Discussion about this video

User's avatar

Ready for more?