Substack MCP Server

Create and manage your Substack newsletter from your AI assistant or terminal. Prepare rich drafts, search your archive, publish Notes, inspect analytics, and manage explicitly consented free…

Local serverstdioMIT

What is the Substack MCP Server?

substack-mcp is an MCP project maintained in the conorbronsdon/substack-mcp repository. The maintainer describes its purpose as “Create and manage your Substack newsletter from your AI assistant or terminal. Prepare rich drafts, search your archive, publish Notes, inspect analytics, and manage explicitly…”. Read the project documentation for the complete scope.

Installation

The documented npm package is @conorbronsdon/substack-mcp. The configuration below comes from the maintainer’s example; adapt its paths and account values to your environment.

Configuration values

The example declares SUBSTACK_PUBLICATION_URL, SUBSTACK_SESSION_TOKEN, SUBSTACK_USER_ID. Secret-looking values have been replaced with placeholders. Required and optional labels are shown only when the documentation states them.

Source

Project documentation · Repository · Discovery listing. This profile records the public documentation checked on 2026-10-08.

Recorded tools

Check the linked publisher documentation and your connected client's tool list. Names and availability can vary with the server version and account permissions.

ToolWhat it does
DeleteToo destructive for an AI tool
ScheduleUse Substack's editor for scheduling. (list_scheduled_posts reads what you've queued there, but this server never creates, edits, or cancels a schedule.)
get_subscriber_countGet your publication's current subscriber count
list_subscribersRead a bounded page of private subscriber records
search_subscribersFilter and page private subscriber records; optional activity, date, flags and revenue fields
get_subscriberLook up membership by exact email; reconcile pending additions
list_published_postsList published posts with pagination
get_publicationRead projected publication identity/settings, verify the configured host, and report missing fields; does not verify account identity or role
list_publication_tagsRead tag definitions, including hidden tags by default, with bounded local pagination
get_post_tagsResolve post tag associations; preserves unresolved IDs and reports empty-result identity uncertainty. Draft coverage is currently live-verified only for empty
search_postsSearch a publication archive by query and status; bounded pages with continuation metadata
plan_draft_updateReview proposed changes, preflight and a receipt for best-effort stale detection; no writes
export_draftEditable Markdown, exact original body, conversion diagnostics, preflight and editor link
preflight_draftRead-only checks for title, audience, body structure, images, and paywalls, with an editor link
list_draftsList draft posts
get_postGet full content of a published post by ID
get_draftGet full content of a draft by ID
get_post_commentsGet comments on a published post
get_sectionsList your publication's sections (categories) with their IDs
get_post_analyticsGet a published post's stats (views, opens, signups, subscribes, reactions) by ID
rank_postsRank posts by views, opens, sends, rates, signups, subscribes, estimated value or date, keeping null and missing values distinct
get_publication_statsRead dashboard summary and ranged publication metrics, with missing and unavailable states
get_growth_sourcesRead bounded growth source attribution and optional events
list_incoming_recommendationsList publications that recommend yours, with start date, active state and dashboard-attributed subscribers
list_outgoing_recommendationsList whom your publication recommends (can be partial). This is not who recommends it; use list_incoming_recommendations for that
list_outgoing_recommendation_statsList subscribers your publication has sent to the publications it recommends
list_scheduled_postsList posts scheduled for future publication (read-only; scheduling stays in Substack's editor)
get_user_profileRead a minimal public user profile by handle, anonymously
get_profile_feedRead one public profile feed page with cursor continuation, anonymously
get_note_threadRead a public Note, ancestors and one replies page, anonymously
list_public_postsRead a bounded public archive page, anonymously
get_public_postRead an anonymous public post by URL with body status and truncation flags
create_draftCreate a new draft from markdown (private)
update_draftApply a reviewed change receipt; recheck unpublished state and report readback outcomes
update_draft_tagsPlan or change draft tags; dry-run by default, draft-only, with one readback after writes
upload_imageUpload an image to Substack's CDN from a file, data URI or public HTTPS URL — returns a publicly-fetchable (unlisted) URL
create_notePublish a Substack Note (short-form, publishes immediately)
create_note_with_linkPublish a Note with a link card attachment (publishes immediately)

How to install the Substack MCP Server

{
  "mcpServers": {
    "substack": {
      "command": "npx",
      "args": [
        "-y",
        "@conorbronsdon/substack-mcp"
      ],
      "env": {
        "SUBSTACK_PUBLICATION_URL": "https://yourblog.substack.com",
        "SUBSTACK_SESSION_TOKEN": "YOUR_SUBSTACK_SESSION_TOKEN",
        "SUBSTACK_USER_ID": "your-user-id"
      }
    }
  }
}

From the project documentation. Replace placeholders and example paths before connecting.

Configuration

VariableDescriptionRequired
SUBSTACK_PUBLICATION_URLDeclared in the maintainer’s client configuration.Check documentation
SUBSTACK_SESSION_TOKENDeclared in the maintainer’s client configuration.Check documentation
SUBSTACK_USER_IDDeclared in the maintainer’s client configuration.Check documentation