Mellos Mapping vs Substack MCP Server

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

Mellos Mapping logoMellos MappingDeveloper Tools · Local subprocess (stdio)Live layered dependency map for bottom-up development, drawn by the agent in a terminal pane.67GreatAuth: not declaredSubstack MCP Server logoSubstack MCP ServerDeveloper Tools · Local subprocess (stdio)Manage Substack publishing, subscribers, analytics, reader feeds, comments, and images through MCP.67GreatAuth: not declared

Verdict: choose Mellos Mapping for developer tools work as a local process; choose Substack MCP Server for developer tools as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Mellos Mapping logoChoose Mellos Mapping when

  • You need dedicated capabilities in the Developer Tools domain.
  • You prefer a local stdio subprocess transport.
  • You want tools like mmap_declare, mmap_update, mmap_read.
Explore Mellos Mapping

Substack MCP Server logoChoose Substack MCP Server when

  • You need dedicated capabilities in the Developer Tools domain.
  • You prefer a local stdio subprocess transport.
  • You have the keys it needs: SUBSTACK_PUBLICATION_URL, SUBSTACK_SESSION_TOKEN, SUBSTACK_USER_ID.
  • You want tools like create_draft_post, set_post_body, upload_image.
Explore Substack MCP Server

Feature & specification comparison

Rows where the two servers differ are marked.

SpecMellos Mapping logoMellos MappingSubstack MCP Server logoSubstack MCP Server
CategoryDeveloper ToolsDeveloper Tools
Quality signal67/100 · Great67/100 · Great
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthNot declaredNot declared
PricingNot declaredNot declared
Required env varsNone listedSUBSTACK_PUBLICATION_URLSUBSTACK_SESSION_TOKENSUBSTACK_USER_ID
Verified ownerCommunity listingCommunity listing
GitHub stars11487
Directory activity 2 views 0 installs 0 upvotes 2 views 0 installs 0 upvotes
Tools827

Tools & capabilities

Mellos Mapping tools 8

  • mmap_declareGrow the Mellos map: set the title and diagram kind, add layer bands, lanes and groups (labeled subsystems within ONE band — declare them when a single band grows crowded, roughly five or more nodes in that band; a group must be a strict subset of its band, and a map spread thin across many bands needs none), add nodes, add dependency edges. Declare the missing design after reading existing pages with mmap_read; reuse verified nodes. Edges must point strictly downward (a node may only use nodes on lower layers); the batch is all-or-nothing. Title and kind can also be changed with mmap_update; this legacy form remains supported. Revising what already exists (moving, renaming, relabeling, clearing) is mmap_update.
  • mmap_updateThe revision tool, all-or-nothing. Record progress on nodes: in-progress when starting a node (the pane spins), done with evidence when its verification passes, regressed with evidence when a done node breaks. Revise what the ghost design got wrong: move a node to another band, join or leave a group or lane, rename a band (or re-rank it, which reorders the whole map), relabel a group or a lane. Every clearable field takes null to empty it — that is how a field is cleared, never an empty string. Bands, groups and lanes are applied before the node updates, and within one node update `layer` moves the node before its other fields. The map is a ledger: report honestly, it never blocks you.
  • mmap_readRead existing pages before creating a map. Returns structured IDs, revisions and bounded results. pages lists summaries; map reads page metadata/context; nodes/edges/layers/groups/lanes read editable records; neighborhood reads related nodes; changes compares saved source hashes with local files. New conversations and compacted context should resume the existing effort. mmap_view remains the picture.
  • mmap_batchAtomically combine additions, updates and removals on ONE page. Checks the final graph, so a coordinated move or edge replacement needs no intermediate saves. Read IDs and revision with mmap_read first. Cross-page deletion is excluded.
  • mmap_removeRemove edges, nodes, groups and empty layer bands (in that order, all-or-nothing). Removing a node also removes every edge touching it; removing a group merely ungroups its members. Use when the ghost design turns out wrong — the map is a hypothesis, revising it is honest work. `pages` is the other scale: it DELETES whole page files, so a finished effort can be cleaned up instead of accumulating tabs forever. A bare `{pages: ["slug"]}` with no other field is the normal form; combined with map edits, the edits are applied first and the pages are deleted after. The deletion is permanent and cannot be undone, so delete only pages whose effort is over — and only ever with the user behind it. An unknown slug is refused with the project's real page list (naming a page that does not exist is a typo, not a request). The default page has no slug and is not deletable here. A node elsewhere still pointing at a deleted page with `submap` stays legal — a submap reference has no existence invariant — but it has nowhere to dive until the page comes back.
  • mmap_setupGet or set the mapping policy — WHEN the assistant opens a Mellos map. Call with no arguments to read it: the reply names the policy chosen for the USER (every project), the one this PROJECT overrides it with if any, and which of them is in effect. If it reports "not set", ask the USER to choose (never pick for them): always = map every structured task — workflows, designs, architecture, technical dependencies; complex = map only medium or complex tasks — several modules, a new subsystem, roughly an hour or more; on-request = map only when the user explicitly asks. Then call again with their choice to persist it. It defaults to user scope, which is the normal one — the question is about how someone works, so it is asked once ever, not once per repository. Pass scope: "project" only when the user wants THIS project to differ from that habit. The policy guides you; it never blocks the tools, and an explicit user request for a map always wins.
  • mmap_viewRender the current Mellos map as monochrome text — the same picture the split-pane watcher shows live. Use it to check the map state or to show it inline in conversation. Every response ends with a `pages:` line naming the pages this project actually has and which one you are looking at, so this is also how you discover whether a map exists at all and under which slugs — never probe the files.
  • mmap_openFor automatic display beside the current ChatGPT desktop conversation in Codex mode, use surface: "web-terminal", then call open_in_codex with the returned browser hostOpen object. No paste or Computer Use is needed. For the native host terminal, use surface: "codex-terminal": prepare absolute watcher commands for the current project, then ask the host to open its right terminal. This does not launch the watcher or type into that terminal. Agent exec PTYs cannot be attached using their numeric session ids. For a document panel, use surface: "markdown": generate MD + SVG files, enable automatic preview updates after successful map writes, then use the HOST file-opening tool to display the returned absolute Markdown path on the right of the current conversation. Generated does not mean visible: this server cannot open or observe the desktop side panel. For interactive maps, choose surface: "web": start or reuse a project-local web viewer and pass the returned URL to the host browser-opening tool. Markdown and terminal remain available. The default surface is "terminal", preserving the terminal workflow. Put the live map on the user's screen: a terminal pane beside this conversation that redraws on every write. Call it whenever a result says `pane: CLOSED` — and do NOT ask permission first, because a user who has set a mapping policy has already said they want to see the map. With a pane already open this RETARGETS it to `page` instead of opening a second one, so it is also how you show the user a particular page when they ask for one. It never closes a pane: taking the map off the screen belongs to the user (the `q` key in the pane, or typing `mmap` in a terminal). The reply says whether a pane actually reported itself in afterwards, not merely that a command was run. Automatic terminal opening supports Windows Terminal, tmux on Linux/macOS, and Pebrel, which splits the conversation's own pane. omp (Oh My Pi) has no side panel of its own: there the routes are this same terminal pane (a Windows Terminal split, or a tmux split on Linux/macOS) and the web viewer, whose URL the session opens with its own browser tool. If opening fails, relay the reason and copyable command; retry only after the environment changes or the user asks.

Substack MCP Server tools 27

  • create_draft_postcreate a draft post on your Substack account.
  • set_post_bodyreplace the body of a draft with a Substack document. This is the only way to write structured content — headings, lists, links, code blocks, images, buttons and a paywall. Create the draft first with create_draft_post, then call this with its id. The result reports how many nodes of each type were stored, so a caller can confirm that what it asked for is there. An image must already be hosted by Substack: this cannot upload one.
  • upload_imageHost an image on your Substack publication and get back a Substack URL — the one thing image2.src in set_post_body and cover_image in update_draft will actually render. The source is either an http(s) URL, which the server downloads and re-hosts, or `path`, an absolute path to a local file on the machine running this server, which is read straight from disk: use that for an image you generated or edited locally, with no need to publish it anywhere first. Private and loopback hosts are refused, HEIC is not accepted, max 10 MB.
  • list_subscribersList and filter the subscribers of your Substack publication. Supports the same 48 columns and operators as the Subscribers dashboard, combined with AND, plus free-text search, sorting and pagination. Returns `count`, the total matching the filters regardless of `limit`, so a call with limit 1 is a cheap way to size a segment. Engagement columns (email opens, post views, comments, shares, activity rating) can be filtered on here but are not part of the records this tool returns — use export_subscribers to read their values.
  • export_subscribersExport subscribers with their full column values, including the engagement metrics list_subscribers can filter on but not return: email opens over 7d/30d/6mo, unique emails seen, post views, unique posts seen, comments, shares, links clicked, days active and activity rating. Takes the same filters as list_subscribers and covers the whole matching set — there is no paging. Substack generates the file asynchronously, so this waits for it and returns the parsed records. One column cannot be exported and is reported in `missing_columns` rather than failing: tag_ids.
  • list_postsList the posts of your Substack publication: drafts, published posts or scheduled posts. Supports free-text search, pagination and sort direction. Each post is returned as a summary; use get_draft for the full content of an unpublished one.
  • get_draftRead one draft post of your Substack publication in full, including its body and its audience and email settings. Take the id from list_posts or create_draft_post.
  • update_draftChange an existing draft's title, subtitle or any of its Post settings: audience, who may comment, comment order, cover image, social preview title and description, SEO title and description, and URL slug. The update is partial: only the fields you pass change, everything else — including the body — is left alone. A cover_image not already hosted by Substack is downloaded and re-hosted first. Take the id from list_posts or create_draft_post.
  • publish_draftPublish a draft. The post goes live on the web; `send` additionally emails it to subscribers and defaults to false, because an email cannot be recalled. Publishing cannot be undone from this server — there is no unpublish tool.
  • delete_draftDelete an unpublished draft. Refuses if the id belongs to a published post: Substack deletes both through the same endpoint, and removing a live post is irreversible, so that is left to the dashboard.
  • get_publicationRead the settings and identity of your Substack publication: name, subdomain, custom domain, hero text, copyright, sender name, logo, plans and payment state. Returns a projection by default; pass full: true for all 111 fields.
  • get_user_profileRead the account behind the session: id, handle, name, bio, and every publication you have a role on. This is how to discover which publications the session can reach, beyond the one SUBSTACK_PUBLICATION_URL points at.
  • +15 more on the listing page

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.

Mellos Mapping

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "mellos-mapping": {
      "command": "npx",
      "args": [
        "-y",
        "mellos-mapping"
      ]
    }
  }
}

Substack MCP Server

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "substack-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "substack-mcp@latest"
      ],
      "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"
      }
    }
  }
}

Frequently asked questions

Mellos Mapping is categorized under Developer Tools and uses a local stdio subprocess. Substack MCP Server belongs to Developer Tools and uses a local stdio subprocess. Pick Mellos Mapping for developer tools work and Substack MCP Server for developer tools.

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.

Mellos Mapping has no declared pricing — check the project's own site. Substack MCP Server 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 mellos-mapping and substack-mcp-server as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Mellos Mapping has a quality signal of 67/100 (Great) with 2 views, 0 installs and 114 GitHub stars. Substack MCP Server has 67/100 (Great) with 2 views, 0 installs and 87 GitHub stars.