Substack MCP logo

Substack MCP

by conorbronsdon

Reads Substack data, manages drafts, uploads images, and publishes Notes through MCP with long-form post safeguards.

Install Substack MCP

Pick your client, then add it in one click or paste the config.

STDIONode.js
~/Library/Application Support/Claude/claude_desktop_config.json
claude_desktop_config.json
{
  "mcpServers": {
    "conorbronsdon-substack-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@conorbronsdon/substack-mcp"
      ],
      "env": {
        "SUBSTACK_PUBLICATION_URL": "YOUR_VALUE_HERE",
        "SUBSTACK_SESSION_TOKEN": "YOUR_VALUE_HERE",
        "SUBSTACK_USER_ID": "YOUR_VALUE_HERE",
        "SUBSTACK_MCP_HOME": "YOUR_VALUE_HERE"
      }
    }
  }
}

Settings → Developer → Edit Config, merge this into mcpServers, then fully quit and reopen Claude Desktop.

Values are written into the snippet above so you can paste it as is. They never leave your browser.

We couldn’t confirm it starts correctly

We ran the install command but it didn't respond within our test window — this can mean a slow first-time install rather than a real problem.

npx -y @conorbronsdon/substack-mcp

No response to initialize.

This is an experimental automated check and can have false negatives — missing environment variables, a slow cold install, etc. It doesn’t necessarily mean something’s wrong. Last checked 1mo ago.

Overview

The conorbronsdon/substack-mcp MCP server exposes Substack publication data and content workflows to AI clients over MCP. It can read posts, drafts, comments, analytics, sections, schedules, and subscriber counts, while creating or updating unpublished long-form drafts. It also uploads images and publishes short-form Notes immediately, but cannot publish or delete long-form posts. Reach for the conorbronsdon/substack-mcp MCP server when an agent needs Substack access with a manual review step for long-form publishing.

Use cases

  • Read recent Substack posts and metadata
  • Review drafts before publishing manually
  • Inspect comments and post analytics
  • Create or update long-form drafts from Markdown
  • Publish short-form Notes with links

Key features

  • Read posts, drafts, comments, and sections
  • Query subscriber counts with precision status
  • Inspect scheduled posts and analytics
  • Create and update unpublished drafts
  • Upload images to Substack CDN
  • Publish Notes immediately

Tools14

What Substack MCP lets your agent do. Expand a tool for its parameters.

Verified live~1.7k tokens of context

Security & health

What it can reach and how reliably it runs — from our own checks, not the maintainer’s claims.

ActiveLast checked Today

Recent health check succeeded.

18/21 checks healthy over the last 78d

Supply-chain signal

No high-severity advisories surfaced by our automated scan.

Critical 0High 0Medium 0Low 0

Scanned 8d ago via OSV.dev · @conorbronsdon/substack-mcp (npm)

Adoption & maintenance

Factual signals from GitHub, npm, and our automated checks — not a rating.

GitHub stars44Stargazers on the source repository.
npm downloads491Package downloads in the last 30 days.
Last commitTodayMost recent push to the default branch.
Install checkInconclusiveDidn't respond in our test window — often a slow first install.
Tools exposed14Callable tools this server registers over MCP.
Directory activity6 viewsConfig copies, upvotes, and views on AllMCPs.

How Substack MCP works

What conorbronsdon/substack-mcp MCP server does

The conorbronsdon/substack-mcp MCP server connects an MCP-compatible AI client to a Substack publication. Its read operations cover published posts, drafts, comments, sections, scheduled posts, subscriber counts, and post-level analytics. Full post and draft content includes fields such as title, body, and metadata, while list operations provide publication records with pagination where supported.

Long-form content changes remain draft-only. An agent can create a new draft from Markdown or update an unpublished draft, but it cannot publish, delete, or schedule a long-form post. Scheduling remains an action performed in Substack’s editor. The server can read posts already scheduled there with their IDs, titles, audiences, and scheduled times.

The exception is Substack Notes. create_note and create_note_with_link publish short-form content directly to the public Notes feed because Substack does not provide a draft state for Notes. These operations have no preview or undo through the server.

How it works

The server communicates with Substack using publication credentials supplied through environment variables or a locally stored browser-login session. Requests are scoped to a publication, and the configuration can support more than one publication by defining a separate URL, session token, and user ID triplet for each one.

Post analytics require a lookup rather than a dedicated per-post statistics endpoint. The server searches the 500 most recent published posts for the requested ID and reports a not-found result when the post is outside that range. Subscriber results include a precision indicator: exact, approximate, or unavailable. Approximate values should be displayed as lower-bound-style figures such as “1,000+,” not as exact counts.

Image uploads accept either a base64 data URI or a local file path, but not both. The returned Substack CDN URL is publicly fetchable by anyone with the link, although the asset is unlisted and is not attributed to the publication feed.

Setup and configuration

The conorbronsdon/substack-mcp MCP server is available from npm as @conorbronsdon/substack-mcp. A client can run it with npx -y @conorbronsdon/substack-mcp and provide SUBSTACK_PUBLICATION_URL, SUBSTACK_SESSION_TOKEN, and SUBSTACK_USER_ID in the MCP server environment.

As an alternative, the optional login command opens Chromium through Playwright, captures the Substack session cookie, resolves the user ID, and stores an encrypted session file under ~/.substack-mcp/session.json. SUBSTACK_MCP_HOME can change that directory. Playwright must be installed separately. When the stored session is available and the credential environment variables are unset, the MCP server reads the session file automatically.

Claude Desktop configuration uses a server entry with the npm runner and those environment variables. The repository also documents Claude Code configuration. Browser login storage is machine-bound and encrypted, but it is not a substitute for a secret vault.

Tools and capabilities

The available operations include:

  • Count publication subscribers with an explicit precision status.
  • List and retrieve published posts and drafts.
  • Read post comments, sections, scheduled posts, and performance statistics.
  • Create or revise unpublished drafts from Markdown.
  • Upload an image and receive a hosted CDN URL.
  • Publish a Note immediately, optionally with a link card.

The tools declare read-only and non-destructive annotations where applicable, but tool annotations are hints. The tool descriptions and the actual behavior are authoritative, especially for Note publishing and public image URLs.

Limitations and notes

The conorbronsdon/substack-mcp MCP server does not provide long-form publishing, deletion, or scheduling controls. Draft updates only work for unpublished drafts. Notes are public immediately and cannot be reverted through this server. Uploaded images are publicly retrievable by URL, so agents should avoid treating them as private files. A copied browser session file is protected against casual inspection and use on another machine, but code running under the same operating-system account may still be able to re-derive its key.

Reviews

No reviews yet — be the first to share how it worked for you.

Frequently Asked Questions about Substack MCP

Run `npx -y @conorbronsdon/substack-mcp` and configure the required Substack environment variables in your MCP client.

Yes. The repository provides a Claude Desktop configuration using `npx` and the Substack publication environment variables.

It cannot publish long-form posts. It creates and updates drafts only; its Note tools publish short-form Notes immediately.

Manual configuration uses a Substack publication URL, a `connect.sid` session token, and the publication user's ID. An optional browser login can capture and store the session.

No. It has no delete or scheduling tools, though it can list posts already scheduled in Substack's editor.

Related MCP servers

Add a badge to your READMEShow it’s listed — live SVG, Markdown or HTML.

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewSubstack MCP AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/conorbronsdon-substack-mcp?style=directory)](https://allmcps.com/mcp/conorbronsdon-substack-mcp)
HTML Embed
<a href="https://allmcps.com/mcp/conorbronsdon-substack-mcp"><img src="https://allmcps.com/api/badge/conorbronsdon-substack-mcp?style=directory" alt="Substack MCP on AllMCPs" /></a>