Skip to main content
Glama
alxgntv
by alxgntv

Substack API MCP

Substack does not provide a native public API for publishing posts.

But authors who want to draft, publish, and schedule from AI agents (Cursor, Claude, and other MCP hosts) still need a way out. This is the MCP server to publish to Substack via any agent.

Will not start without a valid APISUBSTACK_API_KEY (ask_*). Get API key here: apisubstack.com.

Why this exists

Reality

What we built

No official Substack write/publish API for authors

A posting MCP so agents can create drafts, publish now, and schedule

Authors live in the browser editor

Authors publish through their agents instead

Session-cookie auth is the practical path today

substack.sid + your publication URL, gated by an API Substack key

Examples

Tools

Tool

Description

test_connection

Verify substack.sid and return profile

create_post

Create draft / publish now / schedule (+ optional tags)

get_draft

Fetch draft by id

pangram_detection

Pangram AI-text / AI-slop check on a draft

update_draft

Update draft fields

publish_post

Publish existing draft

schedule_post

Schedule existing draft

delete_draft

Delete draft

list_tags

List publication tags

create_tag

Create tag

set_tags

Ensure + attach tags

get_post_tags

List tags on a post/draft

create_note

Create a Substack Note (optional link attachment)

delete_note

Delete a Substack Note by id

Install

cd /path/to/Substack-API-MCP
python3 -m venv .venv
source .venv/bin/activate
pip install -e .

Auth env

  1. Sign in at apisubstack.com, start the free trial, generate an ask_* API key.

  2. Copy your Substack substack.sid cookie:

    • Open Chrome and sign in to Substack.

    • Open DevTools → ApplicationCookies.

    • Select https://substack.com (or your publication host, e.g. https://yourname.substack.com).

    • Find the cookie named substack.sid and copy its Value.

  3. Export:

export APISUBSTACK_API_KEY="ask_YOUR_KEY"
export SUBSTACK_PUBLICATION_URL="https://yourname.substack.com"
export SUBSTACK_SID="YOUR_SUBSTACK_SID_VALUE"
# optional
# export SUBSTACK_USER_ID="123456"

Cookies expire. If you get 401/403, refresh substack.sid and try again.

Run

substack-api-mcp
# or
python -m substack_api_mcp

Cursor / Claude Desktop config

See mcp.example.json:

{
  "mcpServers": {
    "substack-api": {
      "command": "/ABSOLUTE/PATH/TO/Substack-API-MCP/.venv/bin/substack-api-mcp",
      "args": [],
      "env": {
        "APISUBSTACK_API_KEY": "ask_YOUR_KEY",
        "SUBSTACK_PUBLICATION_URL": "https://yourname.substack.com",
        "SUBSTACK_SID": "YOUR_SUBSTACK_SID_VALUE"
      }
    }
  }
}

Use absolute paths. Restart the host after config changes.

License

Attribution-or-Royalty (source available). See LICENSE and COMMERCIAL_LICENSE.md.

  • Non-commercial use: allowed (keep copyright + license notice).

  • Commercial use: either visible attribution everywhere the software is used, or a paid royalty / commercial license via apisubstack.com.

Use at your own risk. Not affiliated with Substack. Built so authors can publish through their agents when Substack itself does not offer a native publishing API.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/alxgntv/substack-api-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server