substack-mcp CLAUDE.md

A project instruction file for a Substack automation service, which provides tools for working with Substack, a publishing and newsletter platform. It documents runtime versions, language rules, commands, releases, and layout.

In plain words
What is it for?
Use it when developing, testing, releasing, or maintaining the service and its npm package.
Why use it?
It gives contributors and coding agents one place to follow the project’s supported Node.js versions and development conventions.

Instructions file

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add instructions/marcomoauro/substack-mcp/claude-md
Clone the repo
git clone --depth 1 https://github.com/marcomoauro/substack-mcp
Per session 12,303 This file is loaded in full into every session.
When invoked 12,303 The same file — it is already loaded in full.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.12303 $0.12303
Opus 5 $0.06152 $0.06152
Sonnet 5 $0.02461 $0.02461
Haiku 4.5 $0.01230 $0.01230

Measured 3d ago against content hash c1fbdef7bf79, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

substack-mcp CLAUDE.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

CLAUDE.md · 664 lines

How it starts

The opening of the file, as written. The whole thing — 664 lines — stays where its author put it; the contents beside it link to each section on GitHub.

CLAUDE.md

MCP server exposing Substack automation to LLM clients. ESM, npm. Development, CI and the image run Node 24.nvmrc and Dockerfile pin 24.19.0 exactly — while engines declares >=22, so src/ may use nothing newer than Node 22 offers.

That floor is deliberate, not inherited: 22 is the oldest Node line still receiving security patches (18 went EOL 2025-04-30, 20 on 2026-04-30), and it is the lowest version every production dependency accepts — @hono/node-server asks for >=20, everything else >=18. Raising it breaks anyone running npx substack-mcp@latest on an older runtime, so it is a major bump; the honest ceiling is the oldest supported LTS, not the version that happens to be installed locally.

Two CI jobs run the suite: one on .nvmrc, one on the floor. The floor job derives its version from engines (node -p "require('./package.json').engines.node.match(/\d+/)[0]") rather than repeating it, so the promise and the test cannot drift. Developing two majors above the floor is precisely how an unexercised engines rots into a lie — the runtime differences are real and silent, as the fetch stack below shows.

Language

Everything in the repository is written in English — source, comments, test names, commit messages, PR titles and descriptions, docs. This holds regardless of the language used in the chat: do not mirror the conversation language into the codebase.

Commands

Command Purpose
npm ci Install from package-lock.json (never npm install in CI or Docker)
npm test Run the suite (node --test 'src/**/*.spec.js')
npm run test:watch Same, in watch mode
npm run test:coverage Coverage report, spec files excluded
npm pack --dry-run Verify what ships to npm

npm test runs in under a second, but its output shape depends on the Node version: on 24 it is the spec reporter (tally ℹ pass, failures marked ), on the 22 floor it is TAP — five times noisier, tally # pass, failures not ok. Grep for both, or a perfectly green run on the wrong version comes back empty and reads as a broken command: grep -E '^(#|ℹ) (tests|pass|fail)' for the tally, grep -E '^(not ok|✖)' for what broke.

Read the full file on GitHub · 664 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 3d ago First seen · 664 lines · 12,303 tokens per session scan A c1fbdef7bf79

Subscribe to this mod's changes

substack-mcp CLAUDE.md is an instructions file published in the GitHub repository marcomoauro/substack-mcp (70 stars, last pushed 4d ago), licensed MIT. It adds 12,303 tokens to every session, about $0.0615 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.