loading…
Search for a command to run...
loading…
Create, manage, and publish Substack posts with full rich text formatting directly from Claude Desktop or any MCP-compatible client.
Create, manage, and publish Substack posts with full rich text formatting directly from Claude Desktop or any MCP-compatible client.
npm version npm downloads License: MIT MCP Python Tests
The most advanced Substack MCP server available. Create publication-ready posts in minutes with full rich text formatting, manage drafts, schedule posts, and more - all from Claude Desktop or any MCP-compatible client.
This is an UNOFFICIAL tool with no affiliation to Substack Inc.
→ See all known issues and limitations
npm install -g substack-mcp-plus
substack-mcp-plus-setup
The setup wizard will:
Add to your Claude Desktop configuration:
{
"mcpServers": {
"substack-mcp-plus": {
"command": "substack-mcp-plus",
"env": {
"SUBSTACK_PUBLICATION_URL": "https://yourpublication.substack.com"
}
}
}
}
That's it! Automatic Python detection, virtual environment setup, and dependency installation.
Create, update, publish, duplicate posts and more. The most comprehensive Substack automation toolkit available.
All 12 tools at a glance:
Here's what you can say to Claude Desktop and what each tool will do:
You say: "Create a new Substack draft about AI and the future of work"
What happens: Creates a draft post with your content, returns the post ID and URL
Claude shows: "I've created a draft post titled 'AI and the Future of Work' (ID: 123456)"
You say: "Write a post with a paywall after the introduction"
What happens: Creates a draft with free preview content and premium content separated by <!--paywall-->
Claude shows: "Draft created with paywall marker. Free readers will see the intro, subscribers get full access."
You say: "Show me my last 5 drafts"
What happens: Lists your most recent draft posts with titles, IDs, and dates
Claude shows: A formatted list like:
1. "AI and the Future of Work" (ID: 123456) - Created 2 hours ago
2. "Weekly Newsletter #42" (ID: 123455) - Created yesterday
3. "Book Review: Deep Work" (ID: 123454) - Created 3 days ago
You say: "Update the subtitle of draft 123456 to 'How automation will reshape careers'"
What happens: Updates only the subtitle field of the specified draft
Claude shows: "Updated post subtitle. Note: This replaces the entire subtitle field."
You say: "Publish my latest draft"
What happens: Publishes the draft immediately to your subscribers
Claude shows: "Post published! It's now live at: https://yourpub.substack.com/p/ai-and-future-work"
You say: "Show me what's in my published post about remote work"
What happens: Retrieves and displays the full formatted content of the post
Claude shows: The complete post content in readable markdown format
You say: "Make a copy of my most popular post to use as a template"
What happens: Creates a new draft with identical content but titled "Copy of [original]"
Claude shows: "Created draft 'Copy of Your Popular Post' (ID: 123457)"
You say: "Upload the chart image from my desktop"
What happens: Uploads the image to Substack's CDN and returns the URL
Claude shows: "Image uploaded successfully: https://substackcdn.com/image/..."
You say: "How many subscribers do I have?"
What happens: Retrieves your current subscriber count
Claude shows: "You have 1,234 subscribers on https://yourpub.substack.com"
You say: "What sections does my publication have?"
What happens: Lists all your publication's sections/categories
Claude shows: "Your publication has these sections: Newsletter, Essays, Book Reviews, Podcast"
You say: "Generate a preview link for draft 123456"
What happens: Creates an author-only preview URL for sharing
Claude shows: "Preview link: https://yourpub.substack.com/p/ai-and-future-work?preview=true"
You say: "Delete that test draft I created earlier"
What happens: Asks for confirmation, then permanently deletes the draft
Claude shows: "Are you sure you want to delete 'Test Post'? Please confirm."
"So many ideas, little time to actually publish them."
I'm a product guy with countless ideas swirling in my head. Before LLMs, writing was the bottleneck. Now with Claude and ChatGPT producing detailed articles in minutes, I realized publishing had become the new constraint.
After spending 2-3 frustrating hours trying to set up an existing Substack MCP server (involving stealing session tokens from browser dev tools!), we finally got it working. We were ecstatic... until we tried to publish our first post.
All formatting was gone. Plain text only.
Our hopes were crushed, but from that disappointment came determination. Why hadn't anyone built on the battle-tested python-substack library? This was our opportunity.
As someone who hadn't written production code since 2018, I wanted to test a theory: Could AI agents build production-quality software with proper planning and TDD?
The answer was a resounding yes. Using Claude Code with strict Test-Driven Development:
The result? In under 24 hours, we built the most powerful Substack MCP server available. And I didn't write a single line of code.
This isn't just about one tool. It's about:
Because when publishing is frictionless, ideas flow freely.
→ Read our full vision | → See the development roadmap
For detailed guides and documentation, see the docs directory:
→ See detailed documentation in KNOWN_ISSUES.md
**bold**, *italic*) instead of formatted text[text](url) instead of clickable links  instead of rendered images> prefix instead of styled blocksWorkaround: Create drafts with this tool, then use Substack's web editor for final formatting touches before publishing.
Never commit your .env file to version control
.env.example as a template.env file with your actual credentials.env file is already in .gitignore for your protectionUse strong, unique passwords
Rotate credentials regularly
When configuring your MCP client:
Found a security vulnerability? Please DO NOT create a public issue. Instead:
For more security information, see our Security Policy.
# Main Title (H1)
## Section Header (H2)
### Subsection (H3)
Regular text with **bold**, *italic*, and ***bold italic*** formatting.
Unordered list:
- First item
- Second item
- Third item
Ordered list:
1. First step
2. Second step
3. Third step
```python
def greet(name):
return f"Hello, {name}!"
```
[Visit my website](https://example.com)

Free content here...
<!--paywall-->
Premium content here...
# Run all tests
pytest
# Run with coverage
pytest --cov=src
# Run specific test file
pytest tests/unit/test_markdown_converter.py
# Format code
black src tests
# Type checking
mypy src
substack-mcp-plus/
├── src/
│ ├── converters/ # Format converters (Markdown → Substack JSON)
│ ├── handlers/ # API handlers (auth, posts, images)
│ ├── tools/ # MCP tool implementations
│ └── server.py # Main MCP server
├── tests/
│ ├── unit/ # Unit tests for components
│ └── integration/ # End-to-end workflow tests
└── pyproject.toml # Project configuration
We welcome contributions! Check out:
Quick steps:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')This project is licensed under the MIT License - see the LICENSE file for details.
Выполни в терминале:
claude mcp add substack-mcp-plus -- npx Безопасность
Низкий рискАвтоматическая эвристика по публичным данным — не гарантия безопасности.