A Model Context Protocol (MCP) Server for Substack enabling LLM clients to interact with Substack's API for automations like creating posts, managing drafts, and more.
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 substack-mcp~/.codex/config.toml
[mcp_servers.substack]
command = "npx"
args = ["-y", "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 substack-mcp~/.cursor/mcp.json
{
"mcpServers": {
"substack": {
"command": "npx",
"args": [
"-y",
"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",
"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",
"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",
"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",
"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.