Substack MCP Server
Allows reading posts and publication info from Substack, and optionally creating drafts and notes using session cookie authentication.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Substack MCP Serverlist my recent posts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Substack MCP Server
A Model Context Protocol server that lets Claude read from — and optionally draft to — a Substack publication.
Substack has no official public API. This server uses the same unofficial JSON endpoints the Substack website itself calls, plus the public RSS feed. That has two consequences worth knowing up front:
Read tools work with no login and are reliable.
Writing (drafts) needs your session cookie, and because it rides on undocumented endpoints, treat
create_draftas experimental — Substack can change these endpoints without notice.
Tools
Tool | Auth? | What it does |
| no | Connection check; publication name, URL, latest post. |
| no | Recent posts, newest first, with free/paid flag. |
| no | Keyword search across your posts. |
| no | Full content of one post by slug (API, RSS fallback). |
| yes | Creates a draft (never publishes). Attaches your author byline. Needs |
| yes | Lists your unpublished drafts with edit URLs. |
| yes | Publishes a plain-text Note. Live/public — no draft step. |
| yes | Publishes a Note with a link-preview card. Live/public. |
| yes | Publishes a Note with an uploaded image. Live/public. |
A local .env file (next to server.py) is loaded automatically, so you can
keep SUBSTACK_PUBLICATION / SUBSTACK_SID there for local runs instead of
exporting them by hand. Copy .env.example to .env to start.
Related MCP server: Substack MCP Server
Setup
cd substack-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txtSet your publication (subdomain only):
export SUBSTACK_PUBLICATION=your-subdomain
python server.py # should start and wait silently on stdioCtrl-C to stop. If it exits with an error about SUBSTACK_PUBLICATION, that
variable isn't set.
Connect it to Claude Code
From the repo directory:
claude mcp add substack \
--scope user \
--env SUBSTACK_PUBLICATION=your-subdomain \
-- /absolute/path/to/substack-mcp/.venv/bin/python /absolute/path/to/substack-mcp/server.pyThen claude mcp get substack should show ✔ Connected. The write tools read
SUBSTACK_SID from your local .env (see below), so it never lands in config.
Connect it to Claude Desktop
Edit your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add (use absolute paths, and your venv's python if you made one):
{
"mcpServers": {
"substack": {
"command": "/absolute/path/to/substack-mcp/.venv/bin/python",
"args": ["/absolute/path/to/substack-mcp/server.py"],
"env": {
"SUBSTACK_PUBLICATION": "your-subdomain",
"SUBSTACK_SID": ""
}
}
}
}Fully quit and reopen Claude Desktop. You should see the substack tools appear.
Try: "Use the substack tools to list my 5 most recent posts."
Enabling the write tools (optional)
The write tools (create_draft, create_note, create_note_with_link,
create_note_with_image, list_drafts) act on your behalf, so they need proof
you're logged in. There's no API key, so it uses your browser session cookie:
Log into Substack in your browser.
Open DevTools → Application (Chrome) / Storage (Firefox) → Cookies →
https://substack.com.Copy the value of the
substack.sidcookie.Copy
.env.exampleto.envand paste it afterSUBSTACK_SID=.
Security notes: this cookie is equivalent to your login — anyone with it can
act as you. It lives only in your local .env (git-ignored). Don't commit it,
don't paste it into chats, and rotate it (log out / back in) if it leaks. It
expires periodically; when a write tool starts returning auth errors, refresh it.
⚠️ Notes publish immediately.
create_draftonly ever makes a draft you publish yourself, butcreate_note*post to your public Notes feed the moment they run — there is no draft step. Treat them as a real send.
Limitations & notes
Draft and note bodies convert plain paragraphs (blank-line separated) into Substack's editor format — no bold/italic/headings yet. Drafts are meant to seed a post you finish in the editor.
Paywalled post bodies only come through in full when authenticated; otherwise you get the free preview.
The unofficial endpoints can change without notice. If a read tool starts failing, the
/api/v1/archiveshape or/feedis the first thing to check.
Extending it
Natural next tools: list_comments(slug), delete_note(id), scheduling, or
richer Markdown→ProseMirror conversion (bold/italic/links/headings). Each is a
new @mcp.tool() function in server.py.
Support
Every tool here started as a mess in my own week — a client problem I kept solving by hand, until I built something that could run it for me. I ship them open, MIT, because a tool you can hand to someone else is the only proof the thinking was real.
A coffee keeps the tools free and maintained, and funds the next one — built in the open.
Disclaimer
This project is not affiliated with or endorsed by Substack. It uses undocumented endpoints that may change or break at any time. Use at your own risk, and in line with Substack's terms of service.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseBqualityDmaintenanceA Model Context Protocol server that enables downloading and parsing Substack posts directly through the Claude desktop app, allowing users to access and summarize Substack content.Last updated122
- AlicenseBquality-maintenanceEnables interaction with Substack publications through natural conversation, allowing users to create posts with cover images, publish notes, manage content, and retrieve profile information.Last updated82
- Alicense-qualityDmaintenanceEnables users to manage and read Substack content directly within Claude, including listing subscriptions and fetching full post details. It supports searching within newsletters and retrieving recent feeds using authenticated browser cookies.Last updated1MIT
- Alicense-qualityDmaintenanceCreate, manage, and publish Substack posts with full rich text formatting directly from Claude Desktop or any MCP-compatible client.Last updated7120MIT
Related MCP Connectors
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
Connect Claude to Fathom meeting recordings, transcripts, and summaries
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/thenewrhythm/substack-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server