About conorbronsdon/substack-mcp
conorbronsdon/substack-mcp is an MCP server published by conorbronsdon in the Search category: read posts, manage drafts, publish Notes, get comments, and upload images. Safe by design: cannot publish or delete posts.
The repository has 44 stars and 9 forks, with the last commit 4 days ago. Recent commit activity is the strongest signal that reported issues will get attention.
Install
git clone https://github.com/conorbronsdon/substack-mcpThis server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.
Tools (19)
export_draftEditable Markdown, exact original body, conversion diagnostics, preflight and editor link
Parameters not published.
get_draftGet full content of a draft by ID
Parameters not published.
get_postGet full content of a published post by ID
Parameters not published.
get_post_analyticsGet a published post's stats (views, opens, signups, subscribes, reactions) by ID
Parameters not published.
get_post_commentsGet comments on a published post
Parameters not published.
get_post_tagsResolve post tag associations; preserves unresolved IDs and reports empty-result identity uncertainty. Draft coverage is currently live-verified only for empty responses
Parameters not published.
get_publicationRead projected publication identity/settings, verify the configured host, and report missing fields; does not verify account identity or role
Parameters not published.
get_sectionsList your publication's sections (categories) with their IDs
Parameters not published.
get_subscriberLook up membership by exact email; reconcile pending additions
Parameters not published.
get_subscriber_countGet your publication's current subscriber count
Parameters not published.
Show all 19 tools
list_draftsList draft posts
Parameters not published.
list_publication_tagsRead tag definitions, including hidden tags by default, with bounded local pagination
Parameters not published.
list_published_postsList published posts with pagination
Parameters not published.
list_scheduled_postsList posts scheduled for future publication (read-only; scheduling stays in Substack's editor)
Parameters not published.
list_subscribersRead a bounded page of private subscriber records
Parameters not published.
plan_draft_updateReview proposed changes, preflight and a receipt for best-effort stale detection; no writes
Parameters not published.
preflight_draftRead-only checks for title, audience, body structure, images, and paywalls, with an editor link
Parameters not published.
rank_posts[Rank posts](docs/analytics-rankings.md) by views, opens, sends, rates, signups, subscribes, estimated value or date, keeping null and missing values distinct
Parameters not published.
search_postsSearch a publication archive by query and status; bounded pages with continuation metadata
Parameters not published.
Ask AI
Ask AI about conorbronsdon/substack-mcp
Powered by Claude · Grounded in docs
Security checks
- ✓README presentThe repository ships documentation.
5 checks have not been run yet.
README
substack-mcp
An MCP server for Substack that lets AI assistants read your publication data and manage drafts.
Safe by design: This server can create and edit drafts but cannot publish or delete posts. You always review and publish manually through Substack's editor.
Tools
Read
| Tool | Description |
|---|---|
get_subscriber_count |
Get your publication's current subscriber count |
list_published_posts |
List published posts with pagination |
list_drafts |
List draft posts |
get_post |
Get full content of a published post by ID |
get_draft |
Get full content of a draft by ID |
get_post_comments |
Get comments on a published post |
Write
| Tool | Description |
|---|---|
create_draft |
Create a new draft from markdown |
update_draft |
Update an existing draft (unpublished only) |
upload_image |
Upload an image to Substack's CDN |
create_note |
Publish a Substack Note (short-form, publishes immediately) |
create_note_with_link |
Publish a Note with a link card attachment |
Intentionally excluded
- Publish posts — Publishing long-form posts should be a deliberate human action
- Delete — Too destructive for an AI tool
- Schedule — Use Substack's editor for scheduling
Setup
1. Get your credentials
Open your Substack in a browser, then:
- Session token: Navigate to your publication, open DevTools → Application → Cookies → copy the value of
connect.sid(URL-encoded string starting withs%3A) - User ID: In DevTools Console, run:
fetch('/api/v1/archive?sort=new&limit=1').then(r=>r.json()).then(d=>console.log(d[0]?.publishedBylines?.[0]?.id)) - Publication URL: Your Substack URL, including custom domain if you have one (e.g.,
https://newsletter.yourdomain.comorhttps://yourblog.substack.com)
2. Configure your MCP client
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"substack": {
"command": "npx",
"args": ["-y", "@conorbronsdon/substack-mcp"],
"env": {
"SUBSTACK_PUBLICATION_URL": "https://yourblog.substack.com",
"SUBSTACK_SESSION_TOKEN": "your-session-token",
"SUBSTACK_USER_ID": "your-user-id"
}
}
}
}
Claude Code
Add to your .mcp.json:
{
"mcpServers": {
"substack": {
"command": "npx",
"args": ["-y", "@conorbronsdon/substack-mcp"],
"env": {
"SUBSTACK_PUBLICATION_URL": "https://yourblog.substack.com",
"SUBSTACK_SESSION_TOKEN": "your-session-token",
"SUBSTACK_USER_ID": "your-user-id"
}
}
}
}
3. Verify
Ask your AI assistant: "How many Substack subscribers do I have?"
Token expiration
Substack session tokens expire periodically (typically ~90 days). If you get authentication errors, grab a fresh connect.sid cookie from your browser and update the env var. Make sure ad blockers are disabled when copying the cookie.
Markdown support
The create_draft and update_draft tools accept markdown and convert it to Substack's native format. Supported:
- Paragraphs, headings (h1–h6)
- Bold, italic,
inline code - Links
- Images
- Bullet and numbered lists
- Code blocks (with language)
- Blockquotes
- Horizontal rules
Important notes
- This server uses Substack's unofficial API. It may break if Substack changes their endpoints.
- Session tokens are sent as cookies. Keep your
SUBSTACK_SESSION_TOKENsecure. - The server validates authentication on startup and will fail fast if your token is expired.
Development
git clone https://github.com/conorbronsdon/substack-mcp.git
cd substack-mcp
npm install
npm run build
Run locally:
SUBSTACK_PUBLICATION_URL=https://yourblog.substack.com \
SUBSTACK_SESSION_TOKEN=your-token \
SUBSTACK_USER_ID=your-id \
npm start
Disclaimer
All views, opinions, and statements expressed on this account are solely my own and are made in my personal capacity. They do not reflect, and should not be construed as reflecting, the views, positions, or policies of Modular. This account is not affiliated with, authorized by, or endorsed by Modular in any way.
License
MIT
README copy captured when this server was indexed; it may lag the repository. The original is authoritative.