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.
npx agentmods add instructions/marcomoauro/substack-mcp/claude-mdgit clone --depth 1 https://github.com/marcomoauro/substack-mcpWhat 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.
| Model | Per session | Once 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 |
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.
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.
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.
- 3d ago First seen · 664 lines · 12,303 tokens per session scan A c1fbdef7bf79
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.
Other instructions, from other repositories
substack-mcp AGENTS.md
AGENTS.md instructions for damienbenveniste/substack-mcp, covering agent instructions, project orientation, working style, delegation and external context and typescript tooling.
mcp-server-excel coverage-prevention-strategy.instructions.md
Instructions for sbroenne/mcp-server-excel, covering generated surface coverage, contract change workflow, required checks and common incomplete changes.
mcp-server-excel mcp-llm-guidance.instructions.md
Instructions for sbroenne/mcp-server-excel, a project described as: Automate real Microsoft Excel with AI via MCP Server or CLI — Power Query, DAX, VBA, PivotTables, charts, and 326 operations.
openrouter-mcp-multimodal AGENTS.md
Instructions for stabgan/openrouter-mcp-multimodal, covering agent instructions, before you ship, releasing (read this before publishing), short version and version files (must all match package.json).
ntfy-mcp-server AGENTS.md
Instructions for cyanheads/ntfy-mcp-server, covering developer protocol, what's next?, core rules, patterns and tool.
Plonk AGENTS.md
Instructions for ostapondo/Plonk, covering agent rules, layout, adding a module, build & verify and code style.