
substack-ops
Ketan Chavan's server wraps Substack's platform with 26 tools that work through your IDE's LLM, no additional API keys required. The `propose_reply` flow lets Claude or Cursor draft comment responses inline while you manage posts, notes, reactions, restacks, and search. Auth runs on a Substack session cookie, writes default to dry-run and log to a local audit file, and every command doubles as a standalone CLI. The repo includes a Textual TUI and Chrome cookie auto-grab for macOS Keychain. Install with `uvx substack-ops mcp install cursor` and the MCP host calls Python tools over stdio. Ships with deduplication checks, Markdown conversion for paywalled content, and a 20-step quickstart tour.
- tools
- 7
- auth
- Secret needed
- transport
- STDIO
- env vars
- 5
- last updated
- May 3, 2026
Tools
7 toolsPublic tool metadata for what this MCP can expose to an agent.
get_unanswered_commentsReturns the worklist: comments where you have not yet replied (any depth).
Returns the worklist: comments where you have not yet replied (any depth).
No parameter schema in public metadata yet.
propose_replyDry-run only. Returns a token + payload preview. No write.
Dry-run only. Returns a token + payload preview. No write.
No parameter schema in public metadata yet.
confirm_replyPosts a previously-proposed reply by token. Idempotent via dedup DB. Token TTL 5 min.
Posts a previously-proposed reply by token. Idempotent via dedup DB. Token TTL 5 min.
No parameter schema in public metadata yet.
bulk_draft_replies
No parameter schema in public metadata yet.
send_approved_drafts
No parameter schema in public metadata yet.
audit_search
No parameter schema in public metadata yet.
dedup_status
No parameter schema in public metadata yet.
Sponsors
Configuration
SUBSTACK_PUBLICATION_URLYour Substack publication URL (e.g. https://you.substack.com/). Optional if set in ~/.cursor/mcp.json's mcpServers.substack-api.env.
SUBSTACK_USER_IDYour Substack numeric user id. Optional if set in ~/.cursor/mcp.json.
SUBSTACK_SESSION_TOKENsecretYour 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_PATHOverride path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json.
SUBSTACK_OPS_LLM_CMDOptional: 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.
Readme
Details
- Repository
- github.com/06ketan/substack-ops
- Website
- substack-ops.chavan.in
- Package
substack-ops- Transport
- STDIO
- Auth
- Required
- Registry
- MCP registry, active