Substack MCP vs Social → Context

A side-by-side look at the Substack MCP and Social → Context MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Substack MCP logoSubstack MCPSocial Media · Local subprocess (stdio)MCP server for Substack — read posts, manage drafts, publish Notes, get comments, and upload images. Safe by design: cannot publish or delete posts.68GreatAuth: otherSocial → Context logoSocial → ContextSocial Media · Remote HTTP/SSETurn a TikTok/Instagram/YouTube link into text for your AI: metadata, transcript and image OCR.55GoodAuth: not declared

Verdict: choose Substack MCP for social media work as a local process; choose Social → Context for social media over a hosted endpoint. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Substack MCP logoChoose Substack MCP when

  • You need dedicated capabilities in the Social Media domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: other.
  • You have the keys it needs: SUBSTACK_PUBLICATION_URL, SUBSTACK_SESSION_TOKEN, SUBSTACK_USER_ID, SUBSTACK_MCP_HOME.
  • You want tools like get_subscriber_count, list_published_posts, list_drafts.
Explore Substack MCP

Social → Context logoChoose Social → Context when

  • You need dedicated capabilities in the Social Media domain.
  • You prefer a remote HTTP/SSE transport.
  • You want tools like socialdl_extract, socialdl_metadata, socialdl_download.
Explore Social → Context

Feature & specification comparison

Rows where the two servers differ are marked.

SpecSubstack MCP logoSubstack MCPSocial → Context logoSocial → Context
CategorySocial MediaSocial Media
Quality signal68/100 · Great55/100 · Good
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Remote HTTP/SSE
AuthotherNot declared
PricingFreeNot declared
Required env varsSUBSTACK_PUBLICATION_URLSUBSTACK_SESSION_TOKENSUBSTACK_USER_IDSUBSTACK_MCP_HOMENone listed
Verified ownerCommunity listingCommunity listing
GitHub stars440
Directory activity 6 views 0 installs 0 upvotes 1 views 0 installs 0 upvotes
Tools149

Tools & capabilities

Substack MCP tools 14

  • get_subscriber_countGet the current subscriber count for your Substack publication. Returns `precision`: 'exact' when the API reports a true count, 'approximate' when only Substack's rounded value is available (the real number is that or higher — render it hedged, e.g. '1,000+'), or 'unavailable' with count -1. Never treat an approximate value as exact.
  • list_published_postsList published posts with pagination. Returns title, date, slug, and URL for each post.
  • list_draftsList draft posts. Returns title, creation date, and audience for each draft.
  • get_postGet the full content of a published post by ID. Returns title, body HTML, metadata.
  • get_draftGet the full content of a draft post by ID. Returns title, body, metadata.
  • get_post_commentsGet comments on a published post. Returns commenter name, comment body, date, and reaction counts.
  • get_sectionsList your publication's sections (categories). Returns each section's id and name. Use a section id as `section_id` when creating or updating a draft to file it under that section.
  • get_post_analyticsGet performance stats (views, emails sent/delivered/opened, signups, subscribes, estimated value, comments, reactions) for a published post by ID. Substack has no per-post stats endpoint, so this searches your 500 most recent published posts for the ID; returns a not-found note if it isn't among them.
  • list_scheduled_postsList posts scheduled for future publication, soonest first. Read-only visibility into what's queued — scheduling itself is done in Substack's editor (this server does not schedule, publish, or delete long-form posts). Returns id, title, audience, and scheduled time (`trigger_at`).
  • create_draftCreate a new draft post. Accepts markdown body which is converted to Substack's format. Does NOT publish — creates a draft only.
  • update_draftUpdate an existing draft post. Only works on unpublished drafts. Accepts markdown body.
  • upload_imageUpload an image to Substack's CDN. Provide exactly one of `image_base64` (a base64 data URI) or `image_path` (a local file path). Returns a hosted image URL that is publicly fetchable by anyone with the link (an unlisted asset — not attributed to you or added to your feed).
  • +2 more on the listing page

Social → Context tools 9

  • socialdl_extractDownload a social-media link (TikTok, Instagram reel/post/carousel, YouTube, or any direct .mp4) and return it as usable text context: metadata (author, caption, duration), the audio/video transcript, and a vision description (OCR + summary) of each image in a carousel/post. YouTube uses its existing captions when available. Use this to give Claude the content of a video or post the user pasted.
  • socialdl_metadataLightweight lookup: resolve a social-media link to its metadata (author, caption, duration, counts) and media URLs WITHOUT transcribing or running vision. Cheaper than socialdl_extract — use when the caption/context alone is enough.
  • socialdl_downloadResolve a TikTok / Instagram / YouTube link (or direct .mp4/image URL) to its DIRECT download URLs from the source CDN — every video quality, audio track and image, with quality labels. Use when the user wants to DOWNLOAD/save the media instead of transcribing it. No transcription/vision.
  • show_versionShow the current MCP platform and adapter versions.
  • report_bugReport a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction.
  • connectReturns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns connect_url for the toolkit and per-install URLs.
  • toolkit_infoReturns the current toolkit state: installed MCPs, their connection status, the accounts connected to each one, and how many catalog tools each exposes.
  • marketplaceThe official mcp.ai marketplace — the in-platform catalog of every MCP/tool, AND the way to run them. Covers capability requests like "find an MCP that does X", "consulta um CPF", "is there a tool for Y". Core flow: action=search discovers MCPs by intent → describe returns one MCP's full profile (every tool with its id + params, pricing, auth) so you pick the right tool_id → invoke RUNS that tool. KEY: invoke works even when the MCP is NOT installed — it runs the tool pontualmente (one-off), without adding the MCP to the toolkit and without bloating the tool list. If the MCP needs a credential/login, invoke returns a connect link; if it is paid and the wallet is empty, invoke returns a checkout/top-up link (the user opens it, then you retry). Use install only to make an MCP PERMANENT in the active toolkit (its tools then show up natively in future sessions); prefer invoke for a single/occasional use. list_tools lists what is callable right now. subscribe/cancel handle per-MCP billing; report_bug sends feedback; request_mcp asks us to build a NEW MCP when nothing fits. Search/describe flag installed_in_toolkit vs installed_in_workspace. Writes (install/uninstall/subscribe/cancel and the one-off install behind invoke) require workspace owner/admin. It also carries the mcp.ai PROMPT LIBRARY, which is about ready-made prompt TEXT rather than MCPs: search_prompts finds one, get_prompt returns its full text with {{variables}} filled, and publish_prompt saves a prompt and returns a shareable mcp.ai/p/<slug> link that opens without login.
  • authenticateMCP.AI for IDE agents (Cursor, etc.): log in in the browser, copy the access token. Best: add it to this server's config as a header `Authorization: Bearer <token>` for a permanent, non-expiring connection. Or paste it here for a session-only login: call with { token: "<jwt>" } after the user pastes, or with no args to get the link.

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

Substack MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "conorbronsdon-substack-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@conorbronsdon/substack-mcp"
      ],
      "env": {
        "SUBSTACK_PUBLICATION_URL": "YOUR_SUBSTACK_PUBLICATION_URL_HERE",
        "SUBSTACK_SESSION_TOKEN": "YOUR_SUBSTACK_SESSION_TOKEN_HERE",
        "SUBSTACK_USER_ID": "YOUR_SUBSTACK_USER_ID_HERE",
        "SUBSTACK_MCP_HOME": "YOUR_SUBSTACK_MCP_HOME_HERE"
      }
    }
  }
}

Social → Context

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "social-context": {
      "url": "https://api.mcp.ai/p_socialdl"
    }
  }
}

Frequently asked questions

Substack MCP is categorized under Social Media and uses a local stdio subprocess. Social → Context belongs to Social Media and uses a remote HTTP/SSE transport. Pick Substack MCP for social media work and Social → Context for social media.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

Substack MCP is listed as free. Auth: other. Social → Context has no declared pricing — check the project's own site. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add conorbronsdon-substack-mcp and social-context as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Substack MCP has a quality signal of 68/100 (Great) with 6 views, 0 installs and 44 GitHub stars. Social → Context has 55/100 (Good) with 1 views, 0 installs and 0 GitHub stars.