Substack MCP
UnclaimedA 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.
Unclaimed listing
Is this your MCP server?
This listing was auto-indexed from the public record. Claim it to edit the page, set compatibility and unlock growth tools. Takes under two minutes.
Claim this serverTools (40)
active_only
(boolean, optional): exclude paused and expired subscriptions. Defaults to true.
after
(string, optional): the nextafter from a previous response. A timestamp, not an
audience
(everyone onlypaid onlyfree founding, optional)
body
(string): Body of the post. Plain text becomes one paragraph per line — Markdown is not
columns
(array, optional): which columns to include, defaulting to all of them
cover_image
(string, optional): the social preview image. A URL already on substack-post-media.s3.amazonaws.com or substackcdn.com is used as-is; anything else is downloaded and re-hosted on Substack first, under the same guards as uploadimage
create_if_missing
(boolean, optional): create the tag when no name matches. Defaults to true;
cursor
(string, optional): the nextcursor from a previous response
DateTime
ison isafter isonorafter isbefore isonorbefore
default_comment_sort
(bestfirst mostrecentfirst oldestfirst, optional)
description
(string, optional): the social preview description — not the subtitle
draft_id
(number): the id returned by listposts or createdraftpost
draft_subtitle
(string, optional)
draft_title
(string, optional)
filters
(array, optional): conditions combined with AND, each {column, operator, value}
full
(boolean, optional): return all 111 fields (~24 KB) instead of the projection.
include_body
(boolean, optional): defaults to true
include_hidden
(boolean, optional): include tags not shown in the navigation. Defaults to true.
include_tabs
(boolean, optional): also return the available tab ids
limit
(number, optional): 1–100, defaults to 25
max_wait_seconds
(number, optional): 1–600, defaulting to 120
offset
(number, optional): for paging
path
(string): absolute path to an image file on the machine running this server, read straight
post_id
(number, optional): the post the image belongs to; its effect is unconfirmed
search
(string, optional): free text matched against subscriber name and email
search_engine_description
(string, optional)
search_engine_title
(string, optional)
send
(boolean, optional): email the post to subscribers. Defaults to false, unlike the
slug
(string, optional): the post's URL slug
social_title
(string, optional): the title used when the post is shared elsewhere
sort_by
(string, optional): any filterable column
sort_direction
(asc desc, optional): defaults to desc
status
(drafts published scheduled): which list to read
subtitle
(string): Subtitle of the post
tab
(string, optional): tab id — for-you (default) or subscribed. Never the display name:
tag_name
(string): matched case-insensitively against existing tags
title
(string): Title of the post
url
(string): the http(s) URL of an image to download and re-host
user_id
(number, optional): defaults to SUBSTACKUSERID — your own account
write_comment_permissions
(everyone subscribers onlypaid none, optional): who may comment