Skip to content

Latest commit

 

History

History
40 lines (30 loc) · 5.42 KB

File metadata and controls

40 lines (30 loc) · 5.42 KB

Changelog

All notable changes to mcp-medium-reader will be documented in this file.

The format follows Keep a Changelog and this project adheres to Semantic Versioning.

[1.1.2] - 2026-05-10

Fixed

  • ZMediumToMarkdown 4.0.0 compatibility. The gem's new first-run Terms-of-Use gate refuses to run on a non-TTY stream, which is exactly what the MCP stdio transport gives it. spawnGemOnce now sets ZMTM_TOS_ACCEPTED=1 in the child process's environment so the gate's documented non-interactive escape hatch fires automatically. On gem versions < 4.0.0 the env var is silently ignored (forward-compatible). README adds a "Terms of Use note" section explaining that installing this server constitutes acceptance of the gem's Terms on the operator's behalf — read TERMS.md before installing if that's surprising.

1.0.0 - 2026-05-07

First public release.

Removed (BREAKING)

  • Dropped all bulk-by-username MCP tools. list_user_posts, read_user_posts, and download_user_posts are gone — the only article tools exposed via MCP are read_medium_post and download_medium_post. The username helpers (normalizeUsername, UserNotFoundError, paywall counters, bulk fallback notice) were pruned along with them. If you need several posts from a user, ask them for the individual URLs and call the per-URL tools.
  • Dropped Cloudflare Worker proxy support entirely. The set_credentials MCP tool, the mcp-medium-reader setup subcommand, the medium_host / miro_medium_host accounts, the credentials JSON file backend, and the MCP_MEDIUM_READER_DISABLE_SET_CREDENTIALS env var are all gone. mcp-medium-reader now stores no Medium-side state of its own.
  • Recovery flow simplified. When Cloudflare blocks repeatedly the response now recommends running ZMediumToMarkdown --auth (or ZMediumToMarkdown -p <url> directly) in a Terminal instead of suggesting a Worker proxy deploy. A real Terminal lets the gem re-drive Chrome interactively to clear Cloudflare; MCP cannot.
  • init no longer prompts for proxy URLs. It now does dependency check + Ruby runtime bind + MCP client install — no interactive credential entry.
  • doctor no longer reports Worker proxy URLs.
  • validate_setup no longer reports Worker proxy URLs.

Changed (BREAKING from earlier drafts)

  • mcp-medium-reader does not manage Medium login cookies. The gem (ZMediumToMarkdown ≥ 3.5.2) keeps sid / uid / cf_clearance / _cfuvid in its own AES-256-GCM encrypted cache at ~/.zmediumtomarkdown (mode 0600). MCP injects no cookie env vars, no cookie CLI flags, and runs --non-interactive so the gem never attempts its own Chrome auto-login under the MCP transport. To populate the cache, run the gem standalone once: ZMediumToMarkdown --auth.
  • Required gem version bumped to 3.5.2 (was 3.1.0). Picks up the --auth flag (3.3.0), single-Worker proxy dispatch + MEDIUM_HOST_SECRET (3.5.0), the OG-image fix (3.3.3), and the GraphQL nil-vs-false skip-existing fix (3.4.0). MCP doesn't surface any of the proxy plumbing — it's the gem's concern — but the version pin protects users from the older skip bug.
  • Tightened MCP url schemas. read_medium_post and download_medium_post now use z.string().url() (was min(1)), matching validate_setup's test_url. Defense-in-depth against an LLM passing a flag-shaped string into the -p argv slot; the gem's --non-interactive already neutralises the obvious paths.
  • Cross-platform. cross-spawn for Windows .bat shims; runtime.json POSIX-atomic-write vs Windows direct-write; install.ts has per-OS Claude Desktop config paths.

Added

  • setup.sh — one-shot bootstrap: detects platform (macOS / Linux / Windows-Git-Bash), probes Ruby (>= 3.2) and Node.js (>= 18) with platform-aware install hints (offers brew install automatically on macOS), runs gem install ZMediumToMarkdown and npm install -g mcp-medium-reader (or upgrades), runs mcp-medium-reader init and doctor, then walks the user through ZMediumToMarkdown --auth so the gem cookie cache is populated in the same session. Flags: --no-init, --no-gem, --no-npm, --no-auth, --yes, --help. Falls through gracefully when stdin isn't a TTY (curl-pipe-bash) by deferring init (and --auth) to a manual run.
  • mcp-medium-reader init — one-shot guided setup: dependency check + Ruby runtime bind + MCP client install.
  • mcp-medium-reader install [--clients=...] — adds the server registration to four MCP clients by default (Claude Desktop, Claude Code, OpenAI Codex, Gemini CLI). Preserves existing keys; reports added / updated / unchanged / error per target.
  • mcp-medium-reader doctor reports the gem cookie cache status (path + size + mode, or "not present").
  • Reader tool: read_medium_post.
  • Download tool: download_medium_post (plain non-Jekyll layout, defaults output_dir to process.cwd(), accepts ~/...).
  • validate_setup tool — inspects dependencies and (with test_url) runs an optional live test.
  • LLM-directed recovery flows in tool responses: paywall recovery script that points users at ZMediumToMarkdown --auth; Cloudflare escalation (first block this session: refresh gem cookie cache via --auth; repeat blocks: drop MCP and run the gem CLI directly).