PluginBench
MCP Server
Maintained
MIT

medium-ops MCP Server

io.github.06ketan/medium-ops

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.

transport: stdio
Config generated by PluginBench — verify against the source before use.
Environment / auth
  • MEDIUM_INTEGRATION_TOKEN
    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_SID
    secret

    Medium 'sid' cookie value from medium.com (Application → Cookies). Used for authenticated reads + dashboard GraphQL.

  • MEDIUM_UID

    Medium 'uid' cookie value. Required alongside sid for some authenticated endpoints.

  • MEDIUM_XSRF
    secret

    Medium 'xsrf' cookie value. Required for any dashboard write (post_response, publish_post, delete_post, draft updates).

  • MEDIUM_CF_CLEARANCE
    secret

    Cloudflare 'cf_clearance' cookie. Only required when Cloudflare challenges your IP for dashboard write calls.

  • MEDIUM_USERNAME

    Your Medium handle (without the @). Required for the public RSS read path so the client knows whose feed to fetch.

  • MEDIUM_OPS_MCP_PATH

    Override path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json.

  • MEDIUM_OPS_LLM_CMD

    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.

Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "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>"
      }
    }
  }
}
Cursor
~/.cursor/mcp.json
{
  "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>"
      }
    }
  }
}
Windsurf
~/.codeium/windsurf/mcp_config.json
{
  "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>"
      }
    }
  }
}
VS Code
.vscode/mcp.json
{
  "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 Code
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 serve

Related MCP servers

Convert HTML to PDF/PNG/WebP/PPTX slide carousels with 11 themes — for LinkedIn, decks, posts.

1
TypeScript
MIT
View repository →

substack-ops

Maintained

Substack CLI + 26-tool MCP server. Your IDE drafts replies via propose_reply. No API keys.

0
Python
MIT
View repository →