Medium CLI + 23-tool MCP server. Your IDE drafts replies. No API keys.
Connect Runs on your machine
claude mcp add medium-ops -e MEDIUM_INTEGRATION_TOKEN=<MEDIUM_INTEGRATION_TOKEN> -e MEDIUM_SID=<MEDIUM_SID> -e MEDIUM_UID=<MEDIUM_UID> -e MEDIUM_XSRF=<MEDIUM_XSRF> -e MEDIUM_CF_CLEARANCE=<MEDIUM_CF_CLEARANCE> -e MEDIUM_USERNAME=<MEDIUM_USERNAME> -e MEDIUM_OPS_MCP_PATH=<MEDIUM_OPS_MCP_PATH> -e MEDIUM_OPS_LLM_CMD=<MEDIUM_OPS_LLM_CMD> -- uvx medium-ops==0.1.2
{
"mcpServers": {
"medium-ops": {
"command": "uvx",
"args": [
"medium-ops==0.1.2"
],
"env": {
"MEDIUM_INTEGRATION_TOKEN": "<MEDIUM_INTEGRATION_TOKEN>",
"MEDIUM_SID": "<MEDIUM_SID>",
"MEDIUM_UID": "<MEDIUM_UID>",
"MEDIUM_XSRF": "<MEDIUM_XSRF>",
"MEDIUM_CF_CLEARANCE": "<MEDIUM_CF_CLEARANCE>",
"MEDIUM_USERNAME": "<MEDIUM_USERNAME>",
"MEDIUM_OPS_MCP_PATH": "<MEDIUM_OPS_MCP_PATH>",
"MEDIUM_OPS_LLM_CMD": "<MEDIUM_OPS_LLM_CMD>"
}
}
}
}
{
"mcpServers": {
"medium-ops": {
"command": "uvx",
"args": [
"medium-ops==0.1.2"
],
"env": {
"MEDIUM_INTEGRATION_TOKEN": "<MEDIUM_INTEGRATION_TOKEN>",
"MEDIUM_SID": "<MEDIUM_SID>",
"MEDIUM_UID": "<MEDIUM_UID>",
"MEDIUM_XSRF": "<MEDIUM_XSRF>",
"MEDIUM_CF_CLEARANCE": "<MEDIUM_CF_CLEARANCE>",
"MEDIUM_USERNAME": "<MEDIUM_USERNAME>",
"MEDIUM_OPS_MCP_PATH": "<MEDIUM_OPS_MCP_PATH>",
"MEDIUM_OPS_LLM_CMD": "<MEDIUM_OPS_LLM_CMD>"
}
}
}
}
{
"servers": {
"medium-ops": {
"type": "stdio",
"command": "uvx",
"args": [
"medium-ops==0.1.2"
],
"env": {
"MEDIUM_INTEGRATION_TOKEN": "<MEDIUM_INTEGRATION_TOKEN>",
"MEDIUM_SID": "<MEDIUM_SID>",
"MEDIUM_UID": "<MEDIUM_UID>",
"MEDIUM_XSRF": "<MEDIUM_XSRF>",
"MEDIUM_CF_CLEARANCE": "<MEDIUM_CF_CLEARANCE>",
"MEDIUM_USERNAME": "<MEDIUM_USERNAME>",
"MEDIUM_OPS_MCP_PATH": "<MEDIUM_OPS_MCP_PATH>",
"MEDIUM_OPS_LLM_CMD": "<MEDIUM_OPS_LLM_CMD>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
MEDIUM_INTEGRATION_TOKENOptional, secret | Legacy Medium Integration Token (api.medium.com/v1/*). Optional. Generate at medium.com/me/settings → 'Integration tokens' (note: Medium stopped issuing new tokens in 2023). |
MEDIUM_SIDOptional, secret | Medium 'sid' cookie value from medium.com (Application → Cookies). Used for authenticated reads + dashboard GraphQL. |
MEDIUM_UIDOptional | Medium 'uid' cookie value. Required alongside sid for some authenticated endpoints. |
MEDIUM_XSRFOptional, secret | Medium 'xsrf' cookie value. Required for any dashboard write (post_response, publish_post, delete_post, draft updates). |
MEDIUM_CF_CLEARANCEOptional, secret | Cloudflare 'cf_clearance' cookie. Only required when Cloudflare challenges your IP for dashboard write calls. |
MEDIUM_USERNAMEOptional | Your Medium handle (without the @). Required for the public RSS read path so the client knows whose feed to fetch. |
MEDIUM_OPS_MCP_PATHOptional | Override path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json. |
MEDIUM_OPS_LLM_CMDOptional | Optional: override the host CLI used by the unattended daemon path (default: auto-detect claude / cursor-agent / codex on PATH). Use {prompt} placeholder if your CLI takes the prompt as an arg. |
Details
| Package | [email protected] (PYPI, stdio) |
| First published | 3 May 2026 |
| Last updated | 3 May 2026 |
| Registry name | io.github.06ketan/medium-ops |
More developer tools servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
