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.2

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.2
File Size Uploaded
medium_mcp-0.1.2.tar.gz 237.1 kB Details

Built distribution (wheel)

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

Total release size: 268.6 kB

Release files / medium_mcp-0.1.2.tar.gz

Download URL medium_mcp-0.1.2.tar.gz
Size 237.1 kB
Tags Source
SHA-256 checksum
How to use checksums
f499ea52fe72c3df56f8a9315fe26645942f16280e9339a61442e685c53c2079
BLAKE2b-256 checksum
How to use checksums
f9b92d1c5e2d2cba8c95065b835403592a19dc54b681f9386c06297c044cc099
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.2-py3-none-any.whl

Download URL medium_mcp-0.1.2-py3-none-any.whl
Size 31.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4ae2b2a35f2b5e837a5f4e1ddd56b4457baf26d9d55856f0f12254c7e8877711
BLAKE2b-256 checksum
How to use checksums
55b113f98bf04c415bb40a427bc233409f548a7c957552fc3b880cba1b7bf7a3
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

This release

0.1.2 This release

2 release files

0.1.1

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