Reads Substack data, manages drafts, uploads images, and publishes Notes through MCP with long-form post safeguards.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
This server is confirmed live β we successfully called its tools/list endpoint directly (see the verified badge above). We haven't yet sandbox-tested the stdio install command below specifically, which is a separate, ongoing check.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Substack MCP.
get_subscriber_countGet the current subscriber count for your Substack publication. Returns `precision`: 'exact' when the API reports a true count, 'approximate' when only Substack's rounded value is available (the real number is that or higher β render it hedged, e.g. '1,000+'), or 'unavailable' with count -1. Never treat an approximate value as exact.
list_published_postsList published posts with pagination. Returns title, date, slug, and URL for each post.
list_draftsList draft posts. Returns title, creation date, and audience for each draft.
get_postGet the full content of a published post by ID. Returns title, body HTML, metadata.
get_draftGet the full content of a draft post by ID. Returns title, body, metadata.
get_post_commentsGet comments on a published post. Returns commenter name, comment body, date, and reaction counts.
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.
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.
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.
The available operations include:
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.
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.
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/conorbronsdon-substack-mcp)<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>