NestDaddy

substack-ops

io.github.06ketan/substack-ops ยท v0.3.5

Substack CLI + 26-tool MCP server. Your IDE drafts replies via propose_reply. No API keys.

Connect Runs on your machine

Terminal
claude mcp add substack-ops -e SUBSTACK_PUBLICATION_URL=<SUBSTACK_PUBLICATION_URL> -e SUBSTACK_USER_ID=<SUBSTACK_USER_ID> -e SUBSTACK_SESSION_TOKEN=<SUBSTACK_SESSION_TOKEN> -e SUBSTACK_OPS_MCP_PATH=<SUBSTACK_OPS_MCP_PATH> -e SUBSTACK_OPS_LLM_CMD=<SUBSTACK_OPS_LLM_CMD> -- uvx substack-ops==0.3.5
claude_desktop_config.json
{
  "mcpServers": {
    "substack-ops": {
      "command": "uvx",
      "args": [
        "substack-ops==0.3.5"
      ],
      "env": {
        "SUBSTACK_PUBLICATION_URL": "<SUBSTACK_PUBLICATION_URL>",
        "SUBSTACK_USER_ID": "<SUBSTACK_USER_ID>",
        "SUBSTACK_SESSION_TOKEN": "<SUBSTACK_SESSION_TOKEN>",
        "SUBSTACK_OPS_MCP_PATH": "<SUBSTACK_OPS_MCP_PATH>",
        "SUBSTACK_OPS_LLM_CMD": "<SUBSTACK_OPS_LLM_CMD>"
      }
    }
  }
}
~/.cursor/mcp.json
{
  "mcpServers": {
    "substack-ops": {
      "command": "uvx",
      "args": [
        "substack-ops==0.3.5"
      ],
      "env": {
        "SUBSTACK_PUBLICATION_URL": "<SUBSTACK_PUBLICATION_URL>",
        "SUBSTACK_USER_ID": "<SUBSTACK_USER_ID>",
        "SUBSTACK_SESSION_TOKEN": "<SUBSTACK_SESSION_TOKEN>",
        "SUBSTACK_OPS_MCP_PATH": "<SUBSTACK_OPS_MCP_PATH>",
        "SUBSTACK_OPS_LLM_CMD": "<SUBSTACK_OPS_LLM_CMD>"
      }
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "substack-ops": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "substack-ops==0.3.5"
      ],
      "env": {
        "SUBSTACK_PUBLICATION_URL": "<SUBSTACK_PUBLICATION_URL>",
        "SUBSTACK_USER_ID": "<SUBSTACK_USER_ID>",
        "SUBSTACK_SESSION_TOKEN": "<SUBSTACK_SESSION_TOKEN>",
        "SUBSTACK_OPS_MCP_PATH": "<SUBSTACK_OPS_MCP_PATH>",
        "SUBSTACK_OPS_LLM_CMD": "<SUBSTACK_OPS_LLM_CMD>"
      }
    }
  }
}

Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.

Tools

This server runs locally, so its tools are listed by your MCP client once it starts.

Environment variables

NameDescription
SUBSTACK_PUBLICATION_URL
Optional
Your Substack publication URL (e.g. https://you.substack.com/). Optional if set in ~/.cursor/mcp.json's mcpServers.substack-api.env.
SUBSTACK_USER_ID
Optional
Your Substack numeric user id. Optional if set in ~/.cursor/mcp.json.
SUBSTACK_SESSION_TOKEN
Optional, secret
Your Substack session cookie value (the s%3A... string). Required for authenticated calls. Easier path: run `substack-ops auth login --browser chrome` and the cookie is auto-grabbed.
SUBSTACK_OPS_MCP_PATH
Optional
Override path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json.
SUBSTACK_OPS_LLM_CMD
Optional
Optional: override the host CLI used by the unattended daemon path (default: auto-detect claude / cursor-agent / codex on PATH). Use {prompt} placeholder if your CLI takes the prompt as an arg.

Details

Package[email protected] (PYPI, stdio)
First published3 May 2026
Last updated3 May 2026
Registry nameio.github.06ketan/substack-ops

More developer tools servers See all

Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.