PluginBench
MCP Server
Maintained
MIT

substack-ops MCP Server

io.github.06ketan/substack-ops

What is the substack-ops MCP server?

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

How to install substack-ops

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
Environment / auth
  • SUBSTACK_PUBLICATION_URL

    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

    Your Substack numeric user id. Optional if set in ~/.cursor/mcp.json.

  • SUBSTACK_SESSION_TOKEN
    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

    Override path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json.

  • SUBSTACK_OPS_LLM_CMD

    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.

Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "substack-ops": {
      "command": "uvx",
      "args": [
        "substack-ops",
        "mcp",
        "serve"
      ],
      "env": {
        "SUBSTACK_PUBLICATION_URL": "<YOUR_SUBSTACK_PUBLICATION_URL>",
        "SUBSTACK_USER_ID": "<YOUR_SUBSTACK_USER_ID>",
        "SUBSTACK_SESSION_TOKEN": "<YOUR_SUBSTACK_SESSION_TOKEN>",
        "SUBSTACK_OPS_MCP_PATH": "<YOUR_SUBSTACK_OPS_MCP_PATH>",
        "SUBSTACK_OPS_LLM_CMD": "<YOUR_SUBSTACK_OPS_LLM_CMD>"
      }
    }
  }
}
Cursor
~/.cursor/mcp.json
{
  "mcpServers": {
    "substack-ops": {
      "command": "uvx",
      "args": [
        "substack-ops",
        "mcp",
        "serve"
      ],
      "env": {
        "SUBSTACK_PUBLICATION_URL": "<YOUR_SUBSTACK_PUBLICATION_URL>",
        "SUBSTACK_USER_ID": "<YOUR_SUBSTACK_USER_ID>",
        "SUBSTACK_SESSION_TOKEN": "<YOUR_SUBSTACK_SESSION_TOKEN>",
        "SUBSTACK_OPS_MCP_PATH": "<YOUR_SUBSTACK_OPS_MCP_PATH>",
        "SUBSTACK_OPS_LLM_CMD": "<YOUR_SUBSTACK_OPS_LLM_CMD>"
      }
    }
  }
}
Windsurf
~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "substack-ops": {
      "command": "uvx",
      "args": [
        "substack-ops",
        "mcp",
        "serve"
      ],
      "env": {
        "SUBSTACK_PUBLICATION_URL": "<YOUR_SUBSTACK_PUBLICATION_URL>",
        "SUBSTACK_USER_ID": "<YOUR_SUBSTACK_USER_ID>",
        "SUBSTACK_SESSION_TOKEN": "<YOUR_SUBSTACK_SESSION_TOKEN>",
        "SUBSTACK_OPS_MCP_PATH": "<YOUR_SUBSTACK_OPS_MCP_PATH>",
        "SUBSTACK_OPS_LLM_CMD": "<YOUR_SUBSTACK_OPS_LLM_CMD>"
      }
    }
  }
}
VS Code
.vscode/mcp.json
{
  "servers": {
    "substack-ops": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "substack-ops",
        "mcp",
        "serve"
      ],
      "env": {
        "SUBSTACK_PUBLICATION_URL": "<YOUR_SUBSTACK_PUBLICATION_URL>",
        "SUBSTACK_USER_ID": "<YOUR_SUBSTACK_USER_ID>",
        "SUBSTACK_SESSION_TOKEN": "<YOUR_SUBSTACK_SESSION_TOKEN>",
        "SUBSTACK_OPS_MCP_PATH": "<YOUR_SUBSTACK_OPS_MCP_PATH>",
        "SUBSTACK_OPS_LLM_CMD": "<YOUR_SUBSTACK_OPS_LLM_CMD>"
      }
    }
  }
}
Claude Code
claude mcp add substack-ops --env SUBSTACK_PUBLICATION_URL=<YOUR_SUBSTACK_PUBLICATION_URL> --env SUBSTACK_USER_ID=<YOUR_SUBSTACK_USER_ID> --env SUBSTACK_SESSION_TOKEN=<YOUR_SUBSTACK_SESSION_TOKEN> --env SUBSTACK_OPS_MCP_PATH=<YOUR_SUBSTACK_OPS_MCP_PATH> --env SUBSTACK_OPS_LLM_CMD=<YOUR_SUBSTACK_OPS_LLM_CMD> -- uvx substack-ops mcp serve

Related MCP servers

Convert HTML to PDF/PNG/WebP/PPTX slide carousels with 11 themes — for LinkedIn, decks, posts.

1
TypeScript
MIT
View repository →

medium-ops

Maintained

Medium CLI + 23-tool MCP server. Your IDE drafts replies. No API keys.

0
Python
MIT
View repository →