Unofficial Substack MCP server. Born from frustration, built with AI. 12 tools, browser auth, rich text support. Not affiliated with Substack Inc.
This server has serious definition quality gaps. While tool names follow verb_noun convention and most tools have descriptions, there are critical issues: (1) Missing input schemas for several tools visible in source, the schema property in UploadImageTool shows a different structure than the one presented in the evaluation prompt, suggesting schema inconsistency or outdated documentation. (2) Tool descriptions, while present, lack actionable detail on error conditions and recovery paths. (3) No output schemas are documented in the source code for any tool, critical for agent planning. (4) Confirmation pattern (confirm_create, confirm_update, confirm_publish, confirm_delete booleans) is non-standard for MCP and adds complexity; it should be replaced with proper error handling and dry-run support. (5) Parameters like 'image_path' in upload_image accept file paths but the description doesn't explain what happens if the path doesn't exist or file is invalid. (6) The create_formatted_post and update_post descriptions are verbose and warn about confirmation, but the actual MCP pattern for destructive operations is tool annotations + error recovery, not boolean flags. This is a workaround that violates single-responsibility and idempotent-operation patterns.
Create a new formatted draft post on Substack. Supports full markdown formatting. IMPORTANT: You MUST ALWAYS ask the user to confirm creation in a follow-up message BEFORE calling this tool with confirm_create=true. Never set confirm_create=true on the first request, even if the user explicitly asks to create. This ensures users have time to review the content before creating.
Delete a draft post. IMPORTANT: You MUST ALWAYS ask the user to confirm deletion in a follow-up message BEFORE calling this tool with confirm_delete=true. Never set confirm_delete=true on the first request, even if the user explicitly asks to delete. This ensures users have time to reconsider this permanent action.
List your recent draft posts with their titles and IDs. Use this to see what drafts are available for updating, publishing, or deleting. Returns basic info about each draft.
Publish a draft post immediately to your Substack publication. This makes the post publicly visible to subscribers and sends it via email if enabled. IMPORTANT: You MUST ALWAYS ask the user to confirm publishing in a follow-up message BEFORE calling this tool with confirm_publish=true. Never set confirm_publish=true on the first request, even if the user explicitly asks to publish. This action cannot be easily undone.
Missing output schemas for all tools, agents cannot plan downstream calls or extract necessary IDs/references
Confirmation pattern implemented as boolean parameters (confirm_create, confirm_update, confirm_publish, confirm_delete) instead of standard MCP tool annotations + proper error handling
Schema inconsistency: upload_image tool definition differs between evaluation prompt (image_path required) and source code (source required, plus optimize_for/caption optional), which is correct?
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | D | 59 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 54 | - | v1 |
Update an existing Substack draft post. WARNING: This tool COMPLETELY REPLACES the specified fields - it does NOT make partial edits. If you provide content, it will REPLACE ALL existing content. To make small edits, first use get_post_content to read the current content, make your changes, then provide the ENTIRE updated content. IMPORTANT: You MUST ALWAYS ask the user to confirm updates in a follow-up message BEFORE calling this tool with confirm_update=true. Never set confirm_update=true on the first request.
Upload an image file from your local computer to Substack's CDN and get a URL that can be used in posts. LIMITATION: Currently only supports uploading files from your local filesystem using a file path - cannot upload images directly from chat or clipboard. Supports common image formats (JPG, PNG, GIF, WebP). The returned URL can be used in markdown content as .
No error handling or recovery guidance documented, missing 'what to do if' scenarios (e.g., file not found, API auth failed, rate limit, invalid markdown)
list_drafts lacks pagination parameters (offset/limit visible, but no total_count or next_cursor return documented), agent cannot iterate over large draft lists
No per-parameter type enforcement visible in code, schema shows properties but validation logic not visible; LLMs could pass invalid values
Tool descriptions focus on workflow (confirmation required) rather than LLM-optimized WHAT/WHEN/HOW guidance, descriptions should be 50-200 chars, these are verbose and pedagogical