Skip to main content

medium-mcp

MCP server for Medium content via the unofficial medium2 RapidAPI.

Capabilities

13 tools + the free budget readout:

  • user_info (one-of user_id / username)
  • user_articles
  • article_metadata
  • article_content (full text opt-in, see Content policy below)
  • article_responses
  • publication_info (one-of publication_id / slug)
  • publication_articles
  • tag_info
  • tag_latest
  • search_articles
  • search_users
  • search_publications
  • budget_remaining — local read, never hits RapidAPI

Source

Data comes from the unofficial medium2 API on RapidAPI. The official Medium API was archived March 2023 and does not accept new integrations; medium-mcp is the project that documents what shape the unofficial API returns and how the budget guard turns it into a metered-but-capped service.

Setup

  1. Sign up at https://rapidapi.com and subscribe to medium2 (free tier: 150 calls / month).

  2. Export the key:

    export MEDIUM_MCP_RAPIDAPI_KEY=<your-key>
    
  3. Install + run:

    uv pip install -e ".[dev]"
    medium-mcp
    

Health

Two routes, answering different questions:

  • /health — always HTTP 200. Reports per-feed detail in components. For orchestrators and curl smoke probes.
  • /readyz — HTTP 503 when a required feed has not yet returned data, 200 otherwise. For readiness probes.

dhara is a required feed (the budget counter rides on it), so a freshly started server returns 503 on /readyz until a tool call succeeds. That is intentional: a server whose counter has never been touched cannot guarantee its budget, and lies would defeat the only guard we have.

Budget

The server enforces a strict monthly budget (medium_mcp.budget.monthly_budget, default 150 metered calls / period) under a Dhara-backed advisory lock. Once exhausted, metered calls are refused with this payload:

{
  "error": "budget_exhausted",
  "remaining_calls": 0,
  "requested_calls": 1,
  "period": "2026-09",
  "resets_at": "2026-10-01T00:00:00Z",
  "retryable": false,
  "cached_alternatives": ["user_info", "article_metadata", "tag_info"]
}

budget_remaining is always free; it reads the counter locally and reports calls_used, remaining_calls, monthly_budget, period, resets_at so the caller can decide whether to make the call themselves.

Content policy

article_content returns the full body only when the caller passes include_full_text=True. Five rules govern what the tool does and does not return, in order:

  1. Default-deny. article_content returns excerpt only when include_full_text=False, regardless of cache state. The cache may hold full_text under the content_key prefix; the gate is at the return point, not the cache key.
  2. Opt-in body. Set include_full_text=True to receive full_text alongside the excerpt. The cache hit path also honors the flag — a cached body is only returned when the flag was set.
  3. Truncation. excerpt is capped at excerpt_max_chars (default 500, max 2000) so a caller never receives an unbounded body. The truncated: bool field tells the caller whether the cap fired.
  4. Format. format is one of "markdown", "html", or "text". The tool does not transcode between formats; what the upstream returned is what the tool returns, gated only by the include flag.
  5. No export. allow_content_export: bool (default false) is a hard-stop on writing full text to disk or to a downstream store. Treat the body as in-memory-only; do not persist it.

The settings section (MEDIUM_MCP_* env vars, prefix-defined) carries excerpt_max_chars, allow_content_export, monthly_budget, and the rest. See settings/medium-mcp.yaml for the full list.

License

BSD-3-Clause.

Release files for medium-mcp 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for medium-mcp 0.1.1
File Size Uploaded
medium_mcp-0.1.1.tar.gz 237.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for medium-mcp 0.1.1
File Interpreter ABI Platform
medium_mcp-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 268.6 kB

Release files / medium_mcp-0.1.1.tar.gz

Download URL medium_mcp-0.1.1.tar.gz
Size 237.1 kB
Tags Source
SHA-256 checksum
How to use checksums
54e8719ab7b8b053354d7efca772fffd33758d08c77a38ffab2ae9fe214c1bf3
BLAKE2b-256 checksum
How to use checksums
8317c2ccdc30836849afca2fa057042f6ce35afac4aa09791171582791ab84af
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / medium_mcp-0.1.1-py3-none-any.whl

Download URL medium_mcp-0.1.1-py3-none-any.whl
Size 31.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
560a3830779b91d21852cf3b52762f7cce5560619bbc78f2ca748e88d0ad78c3
BLAKE2b-256 checksum
How to use checksums
29a74a3c0efdc55d994deb56784e3bd88efcb5e3de3c7a6a606cfacc59d3ecba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

0.1.3

2 release files

0.1.2

2 release files

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page