A side-by-side look at the Substack MCP and Taplio Linkedin MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Substack MCP for social media work as a local process; choose Taplio Linkedin MCP for social media over a hosted endpoint. You can also run both side by side in one mcpServers block.
SUBSTACK_PUBLICATION_URL, SUBSTACK_SESSION_TOKEN, SUBSTACK_USER_ID, SUBSTACK_MCP_HOME.get_subscriber_count, list_published_posts, list_drafts.get_me, create_draft, get_draft.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Social Media | Social Media |
| Quality signal | 68/100 · Great | 49/100 · Fair |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Remote HTTP/SSE |
| Auth | other | Not declared |
| Pricing | Free | Not declared |
| Required env vars | SUBSTACK_PUBLICATION_URLSUBSTACK_SESSION_TOKENSUBSTACK_USER_IDSUBSTACK_MCP_HOME | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 43 | 3 |
| Directory activity | 5 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 14 | 14 |
| Full listing | View Substack MCP | View Taplio Linkedin MCP |
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).get_meRead this first to orient. Returns the user's identity and content preferences so you can tailor output to themcreate_draftCreate a new LinkedIn post draft (unpublished). Publish it later with `schedule_draft` or `publish_draft`.get_draftFetch a single LinkedIn post draft by id.list_draftsList the user's unpublished LinkedIn post drafts.update_draftUpdate the content of an existing draft. Only drafts can be edited: published or scheduled posts cannot.delete_draftPermanently delete a LinkedIn post draft.publish_draftPublish a draft to LinkedIn immediately. This goes live now and cannot be undone.schedule_draftSchedule a draft to be published automatically at a future time.unscheduleUnschedule a scheduled post, returning it to drafts so you can edit, reschedule, or delete it.list_postsList the user's LinkedIn posts (status `scheduled`, `sending`, or `sent`), most recent first. A draft becomes aget_postFetch a single LinkedIn post by id. A post has status `scheduled`, `sending`, or `sent`; drafts are separateget_analytics_overviewGet the user's LinkedIn analytics overview (followers, impressions, engagement). Defaults to today when no datePaste 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.
{
"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"
}
}
}
}
{
"mcpServers": {
"taplio-linkedin-mcp": {
"url": "https://mcp.taplio.com"
}
}
}