substack-ops MCP
A standalone Substack CLI and 26-tool MCP server that allows IDEs like Cursor to draft replies to Substack posts, notes, and comments. It uses a propose/confirm workflow where the host LLM drafts content, but the user confirms before posting, requiring no AI API keys.
Package and access
Local package with source-attributed installation metadata. Koskamo does not execute packages during review.
What you can do with it
- List unanswered comments on a specific post
- Draft a reply to a specific comment using the host LLM
- Post a new note or reply to an existing thread
- Search Substack posts and profiles
Source and maintenance
- Maintenance checked
Packages and installation
Source-provided package data. Koskamo has not executed or live-probed this package.
substack-ops 0.3.5
{
"version": "0.3.5",
"transport": "stdio",
"identifier": "substack-ops",
"runtimeHint": "uvx",
"registryType": "pypi",
"registryBaseUrl": "https://pypi.org",
"packageArguments": [
{
"type": "positional",
"value": "mcp"
},
{
"type": "positional",
"value": "serve"
}
],
"environmentVariables": [
{
"name": "SUBSTACK_PUBLICATION_URL",
"description": "Your Substack publication URL (e.g. https://you.substack.com/). Optional if set in ~/.cursor/mcp.json's mcpServers.substack-api.env."
},
{
"name": "SUBSTACK_USER_ID",
"description": "Your Substack numeric user id. Optional if set in ~/.cursor/mcp.json."
},
{
"name": "SUBSTACK_SESSION_TOKEN",
"description": "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."
},
{
"name": "SUBSTACK_OPS_MCP_PATH",
"description": "Override path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json."
},
{
"name": "SUBSTACK_OPS_LLM_CMD",
"description": "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."
}
]
}Tools
Reported by the attributed source; not independently observed by Koskamo.
Connect from your client
Each snippet configures the same source-provided package; replace placeholders before use.
Cursor
{
"mcpServers": {
"substack-ops-mcp": {
"command": "uvx",
"args": [
"substack-ops==0.3.5",
"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>"
}
}
}
}Cline
{
"mcpServers": {
"substack-ops-mcp": {
"command": "uvx",
"args": [
"substack-ops==0.3.5",
"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
{
"servers": {
"substack-ops-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"substack-ops==0.3.5",
"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 Desktop
{
"mcpServers": {
"substack-ops-mcp": {
"command": "uvx",
"args": [
"substack-ops==0.3.5",
"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>"
}
}
}
}Let your agent find its tools
Find servers like substack-ops MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.