Substack CLI + 26-tool MCP server. Your IDE drafts replies via propose_reply. No API keys.
Connect Runs on your machine
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
{
"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>"
}
}
}
}
{
"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>"
}
}
}
}
{
"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
| Name | Description |
|---|---|
SUBSTACK_PUBLICATION_URLOptional | Your Substack publication URL (e.g. https://you.substack.com/). Optional if set in ~/.cursor/mcp.json's mcpServers.substack-api.env. |
SUBSTACK_USER_IDOptional | Your Substack numeric user id. Optional if set in ~/.cursor/mcp.json. |
SUBSTACK_SESSION_TOKENOptional, 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_PATHOptional | Override path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json. |
SUBSTACK_OPS_LLM_CMDOptional | 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 published | 3 May 2026 |
| Last updated | 3 May 2026 |
| Registry name | io.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.
