What is the medium-ops MCP server?
Medium CLI + 23-tool MCP server. Your IDE drafts replies. No API keys.
How to install medium-ops
Copy-paste configuration for popular MCP clients.
MEDIUM_INTEGRATION_TOKENsecretLegacy 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_SIDsecretMedium 'sid' cookie value from medium.com (Application → Cookies). Used for authenticated reads + dashboard GraphQL.
MEDIUM_UIDMedium 'uid' cookie value. Required alongside sid for some authenticated endpoints.
MEDIUM_XSRFsecretMedium 'xsrf' cookie value. Required for any dashboard write (post_response, publish_post, delete_post, draft updates).
MEDIUM_CF_CLEARANCEsecretCloudflare 'cf_clearance' cookie. Only required when Cloudflare challenges your IP for dashboard write calls.
MEDIUM_USERNAMEYour Medium handle (without the @). Required for the public RSS read path so the client knows whose feed to fetch.
MEDIUM_OPS_MCP_PATHOverride path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json.
MEDIUM_OPS_LLM_CMDOptional: 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.
{
"mcpServers": {
"medium-ops": {
"command": "uvx",
"args": [
"medium-ops",
"mcp",
"serve"
],
"env": {
"MEDIUM_INTEGRATION_TOKEN": "<YOUR_MEDIUM_INTEGRATION_TOKEN>",
"MEDIUM_SID": "<YOUR_MEDIUM_SID>",
"MEDIUM_UID": "<YOUR_MEDIUM_UID>",
"MEDIUM_XSRF": "<YOUR_MEDIUM_XSRF>",
"MEDIUM_CF_CLEARANCE": "<YOUR_MEDIUM_CF_CLEARANCE>",
"MEDIUM_USERNAME": "<YOUR_MEDIUM_USERNAME>",
"MEDIUM_OPS_MCP_PATH": "<YOUR_MEDIUM_OPS_MCP_PATH>",
"MEDIUM_OPS_LLM_CMD": "<YOUR_MEDIUM_OPS_LLM_CMD>"
}
}
}
}{
"mcpServers": {
"medium-ops": {
"command": "uvx",
"args": [
"medium-ops",
"mcp",
"serve"
],
"env": {
"MEDIUM_INTEGRATION_TOKEN": "<YOUR_MEDIUM_INTEGRATION_TOKEN>",
"MEDIUM_SID": "<YOUR_MEDIUM_SID>",
"MEDIUM_UID": "<YOUR_MEDIUM_UID>",
"MEDIUM_XSRF": "<YOUR_MEDIUM_XSRF>",
"MEDIUM_CF_CLEARANCE": "<YOUR_MEDIUM_CF_CLEARANCE>",
"MEDIUM_USERNAME": "<YOUR_MEDIUM_USERNAME>",
"MEDIUM_OPS_MCP_PATH": "<YOUR_MEDIUM_OPS_MCP_PATH>",
"MEDIUM_OPS_LLM_CMD": "<YOUR_MEDIUM_OPS_LLM_CMD>"
}
}
}
}{
"mcpServers": {
"medium-ops": {
"command": "uvx",
"args": [
"medium-ops",
"mcp",
"serve"
],
"env": {
"MEDIUM_INTEGRATION_TOKEN": "<YOUR_MEDIUM_INTEGRATION_TOKEN>",
"MEDIUM_SID": "<YOUR_MEDIUM_SID>",
"MEDIUM_UID": "<YOUR_MEDIUM_UID>",
"MEDIUM_XSRF": "<YOUR_MEDIUM_XSRF>",
"MEDIUM_CF_CLEARANCE": "<YOUR_MEDIUM_CF_CLEARANCE>",
"MEDIUM_USERNAME": "<YOUR_MEDIUM_USERNAME>",
"MEDIUM_OPS_MCP_PATH": "<YOUR_MEDIUM_OPS_MCP_PATH>",
"MEDIUM_OPS_LLM_CMD": "<YOUR_MEDIUM_OPS_LLM_CMD>"
}
}
}
}{
"servers": {
"medium-ops": {
"type": "stdio",
"command": "uvx",
"args": [
"medium-ops",
"mcp",
"serve"
],
"env": {
"MEDIUM_INTEGRATION_TOKEN": "<YOUR_MEDIUM_INTEGRATION_TOKEN>",
"MEDIUM_SID": "<YOUR_MEDIUM_SID>",
"MEDIUM_UID": "<YOUR_MEDIUM_UID>",
"MEDIUM_XSRF": "<YOUR_MEDIUM_XSRF>",
"MEDIUM_CF_CLEARANCE": "<YOUR_MEDIUM_CF_CLEARANCE>",
"MEDIUM_USERNAME": "<YOUR_MEDIUM_USERNAME>",
"MEDIUM_OPS_MCP_PATH": "<YOUR_MEDIUM_OPS_MCP_PATH>",
"MEDIUM_OPS_LLM_CMD": "<YOUR_MEDIUM_OPS_LLM_CMD>"
}
}
}
}claude mcp add medium-ops --env MEDIUM_INTEGRATION_TOKEN=<YOUR_MEDIUM_INTEGRATION_TOKEN> --env MEDIUM_SID=<YOUR_MEDIUM_SID> --env MEDIUM_UID=<YOUR_MEDIUM_UID> --env MEDIUM_XSRF=<YOUR_MEDIUM_XSRF> --env MEDIUM_CF_CLEARANCE=<YOUR_MEDIUM_CF_CLEARANCE> --env MEDIUM_USERNAME=<YOUR_MEDIUM_USERNAME> --env MEDIUM_OPS_MCP_PATH=<YOUR_MEDIUM_OPS_MCP_PATH> --env MEDIUM_OPS_LLM_CMD=<YOUR_MEDIUM_OPS_LLM_CMD> -- uvx medium-ops mcp serveRelated MCP servers
io.github.06ketan/slideshot
Convert HTML to PDF/PNG/WebP/PPTX slide carousels with 11 themes — for LinkedIn, decks, posts.
substack-ops
Substack CLI + 26-tool MCP server. Your IDE drafts replies via propose_reply. No API keys.