Medium MCP Server: Get Your Medium Stats in Claude Without an API
Medium has no public stats API. Here's how I turned medium.com into an MCP server with Weft so Claude Code can answer "which of my stories got the most views?" from my real account — in about two minutes.
I write on Medium, and I wanted to ask Claude simple questions about my own numbers: which stories are still pulling views, which ones people actually read, how this month compares. Medium doesn't offer an API for any of that — its official API only ever covered publishing and is no longer maintained — so a "Medium MCP server" has to come from somewhere else.
The Medium web app, though, loads all of those numbers from its own GraphQL API at medium.com/_/graphql, authenticated by the session cookie you already have. So I pointed Weft at it. Here's the whole thing, start to finish.
1. Convert medium.com
With the Weft app running and the extension installed (setup is in How to turn any website into an MCP server), I opened medium.com/me/stats, clicked the Weft button and chose Convert this site to MCP.

2. Use the stats pages once
I reloaded the tab and clicked between the Stories and Audience tabs. Weft recorded what Medium's front end called — most importantly POST /_/graphql, the endpoint that carries the stats queries. Cloudflare's bot-check and analytics beacons (/cdn-cgi/…) are filtered out automatically.

3. Connect Claude Code
Open in client → Claude Code adds the weft entry to ~/.claude.json. Then a new Claude Code session picks it up.
4. Ask about your Medium stats
I asked: "Using Weft, which of my Medium stories got the most views? Keep it short." Claude listed the sites Weft knows, looked at the Medium endpoints, and — because Weft doesn't store request bodies — wrote its own read-only GraphQL query against /_/graphql.
GraphQL sends even read-only queries as POST, and Weft treats every non-GET request as a potential write. So the call needs confirm: true, and Claude Code shows the exact query for approval before anything runs:

query reads; a mutation would change data.A few seconds later:

My most-viewed story — a Next.js server-side rendering tutorial — still leads with 42,195 views and 23,043 reads. Nothing was scraped, no cookie was copied anywhere, and the request ran inside my own Chrome tab. You can watch the whole run in the two-minute demo.
Questions worth asking next
- "Which story has the best read ratio (reads ÷ views)?"
- "Compare my views this month to last month."
- "Which older stories are still getting views — what do they have in common?"
- "Draft three title ideas in the style of my best-performing stories."
Limits to know
- Keep a Medium tab open. Weft runs requests inside a tab of the site so your session applies.
- It's your data. Use it for your own account and workflows; don't use it to bulk-download other people's content.
- Medium can change its API. If queries start failing, re-capture the site in Weft — it'll flag the site as Outdated when the endpoints drift.
Frequently asked questions
Is there an official Medium MCP server?
Medium doesn't publish an MCP server or a stats API. Weft builds one from the Medium web app you're logged into, so Claude can query your own stats through Medium's GraphQL endpoint.
Can Claude read my Medium stats without an API key?
Yes. With Weft, requests run inside your logged-in Medium tab, so your existing session is used — no API key or integration token is needed.
Why does Claude ask to confirm a Medium query?
Medium uses GraphQL, which sends queries as POST requests. Weft requires explicit confirmation for every non-GET request, so you can check that it's a read-only query before it runs.