medium-writer-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MEDIUM_BROWSER | No | Default browser for open_in_medium. Any app name from /Applications, or `default` for your system browser. Uses Safari unless told otherwise. | Safari |
| MEDIUM_INTEGRATION_TOKEN | No | Legacy Medium integration token created before January 2025. Setting one enables direct publishing tools such as get_medium_profile, list_my_publications, upload_image and create_post. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Tools for reading Medium and preparing articles for it.
Reading uses Medium's public RSS feeds, which return only the ~10 newest stories for a user, publication or tag. Use include_content=true only when you need the full text (it is much longer).
Before publishing or pasting anything into Medium, run prepare_article on the Markdown and show the user its warnings. Medium has no tables, no nested lists, no footnotes and only two heading sizes.
Without a token (the usual case), "publishing" is a hand-off: on macOS use open_in_medium, which puts the article on the clipboard and opens a new Medium story in the user's browser; they press Cmd+V and publish themselves. Elsewhere, use export_article, which writes an HTML page to copy from. Never try to log in to Medium or automate the browser.
Publishing tools exist only if the user configured a legacy integration token. create_post defaults to publish_status="draft". Never use "public" or "unlisted" unless the user explicitly asked for that in this conversation. Medium's API cannot edit or delete a post after it is created.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_user_storiesA | Get the most recent stories by a Medium author (newest first). |
| get_publication_storiesA | Get the most recent stories from a Medium publication. |
| get_tag_storiesA | Get the latest stories Medium lists under a tag. Useful for spotting what's being written about a topic. |
| prepare_articleA | Check Markdown against what Medium supports and return a cleaned version. Converts tables to aligned text, demotes extra/deep headings, turns checklists into emoji, and reports anything it can't fix (nested lists, footnotes, raw HTML, missing alt text, title length, tags). Also returns word count and reading time. |
| export_articleA | Write the article as an HTML page to copy-paste into Medium's editor (no token needed). Runs prepare_article first, then converts to HTML. The user opens the file in a browser, selects all, copies, and pastes into medium.com/new-story; Medium keeps headings, bold, links, lists, quotes, images and code blocks. Tell the user the output path and pass on the warnings. |
| open_in_mediumA | Copy the article to the clipboard as formatted text and open a new Medium story (macOS). No login or browser automation: it opens medium.com/new-story in the user's normal browser, where they're already signed in, and they press Cmd+V. Replaces whatever is on the clipboard. Show the user the warnings, and the tags/subtitle to enter in Medium's publish dialog. Nothing is published. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| draft_from_code | Turn code in the current project into a Medium article draft. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 6 tools
The three story-fetching tools are clearly differentiated by source (author, publication, tag), and the article pipeline tools have distinct roles. There is some overlap between export_article and open_in_medium since both prepare content for pasting into Medium, but their descriptions make the file-vs-clipboard distinction clear.
All six tools follow a consistent snake_case verb_noun pattern: get_user_stories, get_publication_stories, get_tag_stories, prepare_article, export_article, open_in_medium. The convention is predictable throughout.
Six tools is well-scoped for a Medium writing and publishing workflow. Each tool maps to a distinct step: research, validation, export, and clipboard delivery.
The surface covers the core workflow from story discovery to article preparation and delivery into Medium's editor. Direct publishing is intentionally excluded, and minor gaps like retrieving a single story's full content are not essential for the stated purpose.