Substack MCP Server logo

Substack MCP Server

Manage Substack posts, subscribers, analytics, feeds, tags, comments, and images through 27 MCP tools.

Install Substack MCP Server

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": {
    "substack-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "substack-mcp@latest"
      ],
      "env": {
        "SUBSTACK_PUBLICATION_URL": "YOUR_VALUE_HERE",
        "SUBSTACK_SESSION_TOKEN": "YOUR_VALUE_HERE",
        "SUBSTACK_USER_ID": "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.

Automated check passed— started and listed 27 tools correctly (7d ago).

Overview

Substack MCP Server MCP server connects MCP clients to a Substack publication through an authenticated browser session. It exposes tools for creating and publishing posts, managing drafts, querying subscribers, exporting engagement data, browsing feeds, handling comments and tags, and uploading images. Use it when an agent needs to automate publication workflows or inspect subscriber activity without a public Substack API. The server runs through Node.js and npx or a published Docker image, with three environment variables for the publication URL, session token, and user ID.

Use cases

  • Create and organize publication drafts
  • Search subscribers by engagement or subscription data
  • Export subscriber engagement metrics
  • Review scheduled and published posts
  • Automate comments, tags, feeds, or image uploads

Key features

  • Post and draft management
  • Subscriber filtering and pagination
  • Asynchronous subscriber exports
  • Engagement and analytics access
  • Reader feeds, tags, and comments
  • Image uploads

Tools27

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

Verified live~14.4k 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.

8/8 checks healthy over the last 40d

What it can do

From the 27 tools this server returned when we ran it.

Can delete or modify data · 3Makes network requests · 2Read-only tools · 24
Network at startup3 connections
Files written at startupNone
Install scriptsNone
npm provenanceNot published
Package age519 days
Maintainers1

Observed 2026-10-15 in an isolated sandbox. A description of reach, not a security audit.

Supply-chain signal

No high-severity advisories surfaced by our automated scan.

Critical 0High 0Medium 0Low 0

Scanned 12d ago via OSV.dev · substack-mcp@latest (npm)

Adoption & maintenance

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

GitHub stars87Stargazers on the source repository.
npm downloads2.4kPackage downloads in the last 30 days.
Last commit1mo agoMost recent push to the default branch.
Availability100%Our rolling endpoint + install checks that succeeded.
Install checkPassedOur sandbox started it and listed its tools.
Tools exposed27Callable tools this server registers over MCP.
Directory activity2 viewsConfig copies, upvotes, and views on AllMCPs.

How Substack MCP Server works

What Substack MCP Server MCP server does

Substack MCP Server MCP server gives an MCP-compatible client access to publication-management tasks in Substack. It supports post creation and publishing workflows, draft management, subscriber searches and exports, analytics-related subscriber data, reader feeds, tags, comments, and image uploads. The repository describes 27 tools exposed through one server.

The server is intended for authenticated work on a specific publication. It does not use a public Substack API; instead, it sends requests using the authenticated web session associated with the supplied credentials.

How it works

The server receives MCP tool calls from an LLM client and translates them into requests made with the configured Substack session. For example, create_draft_post accepts a title, subtitle, and body, then returns a draft ID and publication state. Plain text is split into paragraphs, while structured content can be supplied as a Substack document JSON string. Markdown is not interpreted as formatting.

Structured post content should be applied with set_post_body, whose published schema supports the document node vocabulary used by Substack. get_draft can then read an unpublished post, and list_posts can search drafts, published posts, or scheduled posts with pagination and sorting.

Subscriber operations support free-text search, filtering, sorting, and pagination. Filters are combined with AND, and the available operators depend on each column's type. export_subscribers handles asynchronous exports and includes engagement values that may be filterable but are not returned by the regular subscriber listing.

Setup and configuration

Substack MCP Server MCP server requires Node.js 22 or newer when installed with npx. Configure the MCP client with the command npx, the argument -y substack-mcp@latest, and these environment variables:

  • SUBSTACK_PUBLICATION_URL: the full publication URL.
  • SUBSTACK_SESSION_TOKEN: the value of the authenticated substack.sid or connect.sid cookie.
  • SUBSTACK_USER_ID: the numeric user ID returned by a publication_user request.

The repository also publishes a Docker image. A Docker-based MCP configuration passes the same three variables to marcomoauro/substack-mcp:latest.

Credentials are collected from the browser's developer tools while signed in to Substack. The session token should be treated as a password, kept local, and excluded from commits, issue reports, and complete Cookie headers. After configuration, a request such as listing recent drafts can verify the connection.

Tools and capabilities

  • Create drafts and update structured post bodies.
  • List drafts, published posts, and scheduled posts.
  • Search, filter, sort, and paginate subscriber records.
  • Export subscriber data, including available engagement metrics.
  • Work with publication analytics, reader feeds, tags, comments, and images.

Limitations and notes

Substack MCP Server MCP server depends on an authenticated web session rather than a public API. Authentication may stop working when the browser session expires or changes; signing in again and obtaining a current token may be necessary.

Subscriber filters do not support OR conditions or nested expressions, so alternatives requiring OR must be issued as separate calls. Engagement fields can be used for filtering but are not necessarily included in list_subscribers; exports provide those values instead. Exports cover the complete matching set rather than using pagination, and Substack may omit tag_ids and group_membership from exported columns. Exported values can also be display-formatted, such as currency strings rather than numeric values.

Reviews

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

Frequently Asked Questions about Substack MCP Server

Substack MCP Server is an MCP server that connects an MCP client to an authenticated Substack publication session. Its main tools create and inspect posts, list and export subscribers, and work with publication data such as feeds, comments, tags, analytics, and images. It uses session credentials rather than a public Substack API.

Install it through npx with Node.js 22 or newer, or run the published Docker image. Add the server to your MCP client's JSON configuration with the npx command and provide the publication URL, session token, and user ID as environment variables.

It requires SUBSTACK_PUBLICATION_URL, SUBSTACK_SESSION_TOKEN, and SUBSTACK_USER_ID. The first identifies the publication, the second is the value of an authenticated Substack session cookie, and the third is the numeric user ID obtained from a publication_user request.

No, it uses an authenticated Substack web session because Substack does not provide a public API for these operations. Keep the session token local and handle it like a password; authentication may need to be renewed after the browser session changes.

Use export_subscribers with optional filters, selected columns, and a maximum wait time. The server requests the asynchronous export, waits for completion, and downloads the result. The export includes engagement values that list_subscribers can filter on but does not return in its records.

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 Server AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/substack-mcp-server?style=directory)](https://allmcps.com/mcp/substack-mcp-server)
HTML Embed
<a href="https://allmcps.com/mcp/substack-mcp-server"><img src="https://allmcps.com/api/badge/substack-mcp-server?style=directory" alt="Substack MCP Server on AllMCPs" /></a>