Unofficial Substack MCP — read and publish to Substack, single binary, no runtime required.
14 tools with complete input schemas and descriptions. Naming follows verb_noun convention (get_, create_, update_, list_, like_, publish_). Descriptions are concise (10-100 chars) but lack LLM-optimized context about when to use each tool vs. alternatives. Parameter descriptions are minimal or absent for many fields (e.g., 'publication_url' lacks format guidance; 'limit' and 'offset' lack range documentation). No output schemas documented. Error handling and recovery guidance absent. Irreversible operations (publish_post) lack confirmation/dry-run patterns. Security: credentials injected server-side (good), but no tool-level permission declarations or audit trail guidance.
Append an inline image to the body of an existing draft.
Create a newsletter draft on the publication in SUBSTACK_PUBLICATION_URL.
Publish a short Note to your Substack feed.
List comments on a post by numeric post ID.
List Notes for a user by numeric user ID.
Get a single post by slug from a publication.
List posts from a Substack publication archive.
No output schemas documented. LLMs cannot predict response structure, forcing them to guess field names for downstream tool calls. E.g., get_posts returns what fields? Does it include post_id for get_post chaining?
Parameter descriptions lack constraints. 'limit' and 'offset' appear in 5+ tools but never specify ranges (1-50 stated in description text, not schema). 'publication_url' lacks format guidance (hostname vs full URL?). LLMs cannot validate inputs without explicit constraints.
Irreversible operation (publish_post) lacks confirmation or dry-run pattern. Description warns 'IRREVERSIBLE' but tool has no safety gate. Agents can accidentally publish to all subscribers without confirmation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Get a Substack user profile by slug.
Like a post by numeric post ID.
List draft posts for the publication in SUBSTACK_PUBLICATION_URL.
IRREVERSIBLE: sends email to all subscribers. Publishes a draft.
Set the cover image of an existing draft using a URL (e.g. returned by upload_image).
Update an existing draft by ID.
Submit a publicly accessible image URL to Substack. Substack fetches the image and returns its permanent CDN URL.
No error recovery guidance. Tools lack descriptions of failure modes, retryability, or next steps. E.g., if get_posts fails with 'publication not found', should agent try search_publications? No guidance provided.
Tool descriptions lack context about when to use each tool vs. alternatives. E.g., get_posts vs list_drafts, when does agent choose one? Descriptions do not explain the distinction or prerequisites.