Reads Substack posts, manages drafts, publishes Notes, reads comments and analytics; long-form posts stay draft-only.
Setup
Choose your client, copy the config, then fill in any required environment variables.
claude mcp add substack --env SUBSTACK_PUBLICATION_URL='<SUBSTACK_PUBLICATION_URL>' --env SUBSTACK_SESSION_TOKEN='<SUBSTACK_SESSION_TOKEN>' --env SUBSTACK_USER_ID='<SUBSTACK_USER_ID>' -- npx -y @conorbronsdon/substack-mcp~/.codex/config.toml
[mcp_servers.substack]
command = "npx"
args = ["-y", "@conorbronsdon/substack-mcp"]
env = { SUBSTACK_PUBLICATION_URL = "<SUBSTACK_PUBLICATION_URL>", SUBSTACK_SESSION_TOKEN = "<SUBSTACK_SESSION_TOKEN>", SUBSTACK_USER_ID = "<SUBSTACK_USER_ID>" }
# codex mcp add substack --env SUBSTACK_PUBLICATION_URL='<SUBSTACK_PUBLICATION_URL>' --env SUBSTACK_SESSION_TOKEN='<SUBSTACK_SESSION_TOKEN>' --env SUBSTACK_USER_ID='<SUBSTACK_USER_ID>' -- npx -y @conorbronsdon/substack-mcp~/.cursor/mcp.json
{
"mcpServers": {
"substack": {
"command": "npx",
"args": [
"-y",
"@conorbronsdon/substack-mcp"
],
"env": {
"SUBSTACK_PUBLICATION_URL": "<SUBSTACK_PUBLICATION_URL>",
"SUBSTACK_SESSION_TOKEN": "<SUBSTACK_SESSION_TOKEN>",
"SUBSTACK_USER_ID": "<SUBSTACK_USER_ID>"
}
}
}
}.vscode/mcp.json
{
"servers": {
"substack": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@conorbronsdon/substack-mcp"
],
"env": {
"SUBSTACK_PUBLICATION_URL": "<SUBSTACK_PUBLICATION_URL>",
"SUBSTACK_SESSION_TOKEN": "<SUBSTACK_SESSION_TOKEN>",
"SUBSTACK_USER_ID": "<SUBSTACK_USER_ID>"
}
}
}
}~/.gemini/settings.json
{
"mcpServers": {
"substack": {
"command": "npx",
"args": [
"-y",
"@conorbronsdon/substack-mcp"
],
"env": {
"SUBSTACK_PUBLICATION_URL": "<SUBSTACK_PUBLICATION_URL>",
"SUBSTACK_SESSION_TOKEN": "<SUBSTACK_SESSION_TOKEN>",
"SUBSTACK_USER_ID": "<SUBSTACK_USER_ID>"
}
}
}
}claude_desktop_config.json
{
"mcpServers": {
"substack": {
"command": "npx",
"args": [
"-y",
"@conorbronsdon/substack-mcp"
],
"env": {
"SUBSTACK_PUBLICATION_URL": "<SUBSTACK_PUBLICATION_URL>",
"SUBSTACK_SESSION_TOKEN": "<SUBSTACK_SESSION_TOKEN>",
"SUBSTACK_USER_ID": "<SUBSTACK_USER_ID>"
}
}
}
}.trae/mcp.json
{
"mcpServers": {
"substack": {
"command": "npx",
"args": [
"-y",
"@conorbronsdon/substack-mcp"
],
"env": {
"SUBSTACK_PUBLICATION_URL": "<SUBSTACK_PUBLICATION_URL>",
"SUBSTACK_SESSION_TOKEN": "<SUBSTACK_SESSION_TOKEN>",
"SUBSTACK_USER_ID": "<SUBSTACK_USER_ID>"
}
}
}
}Environment variables
SUBSTACK_PUBLICATION_URLSUBSTACK_SESSION_TOKENSUBSTACK_USER_ID
Replace the placeholders with your own credentials and keep them out of version control.