medium-ops MCP
A standalone Medium CLI and 23-tool MCP server that allows IDEs like Cursor to draft and reply to Medium posts. It uses a hybrid authentication approach combining public RSS for reads and undocumented dashboard GraphQL for writes, requiring no API keys for basic usage. The server features a propose/confirm reply engine, SQLite deduplication, and JSONL audit logging to ensure safe and audited interactions with Medium.
Package and access
Local package with source-attributed installation metadata. Koskamo does not execute packages during review.
What you can do with it
- List posts and responses from Medium via RSS or GraphQL
- Draft replies to Medium responses using IDE LLMs
- Publish or delete Medium posts via dashboard GraphQL
- View post stats and archive content
Source and maintenance
- Last repository push
- Latest release
- v0.1.2
- Maintenance checked
Packages and installation
Source-provided package data. Koskamo has not executed or live-probed this package.
medium-ops 0.1.2
{
"version": "0.1.2",
"transport": "stdio",
"identifier": "medium-ops",
"runtimeHint": "uvx",
"registryType": "pypi",
"registryBaseUrl": "https://pypi.org",
"packageArguments": [
{
"type": "positional",
"value": "mcp"
},
{
"type": "positional",
"value": "serve"
}
],
"environmentVariables": [
{
"name": "MEDIUM_INTEGRATION_TOKEN",
"description": "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)."
},
{
"name": "MEDIUM_SID",
"description": "Medium 'sid' cookie value from medium.com (Application → Cookies). Used for authenticated reads + dashboard GraphQL."
},
{
"name": "MEDIUM_UID",
"description": "Medium 'uid' cookie value. Required alongside sid for some authenticated endpoints."
},
{
"name": "MEDIUM_XSRF",
"description": "Medium 'xsrf' cookie value. Required for any dashboard write (post_response, publish_post, delete_post, draft updates)."
},
{
"name": "MEDIUM_CF_CLEARANCE",
"description": "Cloudflare 'cf_clearance' cookie. Only required when Cloudflare challenges your IP for dashboard write calls."
},
{
"name": "MEDIUM_USERNAME",
"description": "Your Medium handle (without the @). Required for the public RSS read path so the client knows whose feed to fetch."
},
{
"name": "MEDIUM_OPS_MCP_PATH",
"description": "Override path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json."
},
{
"name": "MEDIUM_OPS_LLM_CMD",
"description": "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."
}
]
}Tools
Reported by the attributed source; not independently observed by Koskamo.
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · repository · passed · metadata changed · updated
- · backfill · recorded · Pre-expansion baseline; unobserved rich metadata remains unknown
Connect from your client
Each snippet configures the same source-provided package; replace placeholders before use.
Cursor
{
"mcpServers": {
"medium-ops-mcp": {
"command": "uvx",
"args": [
"medium-ops==0.1.2",
"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>"
}
}
}
}Cline
{
"mcpServers": {
"medium-ops-mcp": {
"command": "uvx",
"args": [
"medium-ops==0.1.2",
"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
{
"servers": {
"medium-ops-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"medium-ops==0.1.2",
"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 Desktop
{
"mcpServers": {
"medium-ops-mcp": {
"command": "uvx",
"args": [
"medium-ops==0.1.2",
"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>"
}
}
}
}Let your agent find its tools
Find servers like medium-ops MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.