{"servers":[{"server":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"io.github.06ketan/medium-ops","description":"Medium CLI + 23-tool MCP server. Your IDE drafts replies. No API keys.","title":"medium-ops","repository":{"url":"https://github.com/06ketan/medium-ops","source":"github"},"version":"0.1.0","websiteUrl":"https://medium-ops.chavan.in","packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"medium-ops","version":"0.1.0","runtimeHint":"uvx","transport":{"type":"stdio"},"packageArguments":[{"value":"mcp","type":"positional"},{"value":"serve","type":"positional"}],"environmentVariables":[{"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).","isSecret":true,"name":"MEDIUM_INTEGRATION_TOKEN"},{"description":"Medium 'sid' cookie value from medium.com (Application → Cookies). Used for authenticated reads + dashboard GraphQL.","isSecret":true,"name":"MEDIUM_SID"},{"description":"Medium 'uid' cookie value. Required alongside sid for some authenticated endpoints.","name":"MEDIUM_UID"},{"description":"Medium 'xsrf' cookie value. Required for any dashboard write (post_response, publish_post, delete_post, draft updates).","isSecret":true,"name":"MEDIUM_XSRF"},{"description":"Cloudflare 'cf_clearance' cookie. Only required when Cloudflare challenges your IP for dashboard write calls.","isSecret":true,"name":"MEDIUM_CF_CLEARANCE"},{"description":"Your Medium handle (without the @). Required for the public RSS read path so the client knows whose feed to fetch.","name":"MEDIUM_USERNAME"},{"description":"Override path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json.","name":"MEDIUM_OPS_MCP_PATH"},{"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.","name":"MEDIUM_OPS_LLM_CMD"}]}],"_meta":{"io.modelcontextprotocol.registry/publisher-provided":{"tool":"manual","version":"0.1.0"}}},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","statusChangedAt":"2026-04-21T18:34:02.556235Z","publishedAt":"2026-04-21T18:34:02.556235Z","updatedAt":"2026-04-21T18:34:02.556235Z","isLatest":false}}},{"server":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"io.github.06ketan/medium-ops","description":"Medium CLI + 23-tool MCP server. Your IDE drafts replies. No API keys.","title":"medium-ops","repository":{"url":"https://github.com/06ketan/medium-ops","source":"github"},"version":"0.1.1","websiteUrl":"https://medium-ops.chavan.in","packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"medium-ops","version":"0.1.1","runtimeHint":"uvx","transport":{"type":"stdio"},"packageArguments":[{"value":"mcp","type":"positional"},{"value":"serve","type":"positional"}],"environmentVariables":[{"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).","isSecret":true,"name":"MEDIUM_INTEGRATION_TOKEN"},{"description":"Medium 'sid' cookie value from medium.com (Application → Cookies). Used for authenticated reads + dashboard GraphQL.","isSecret":true,"name":"MEDIUM_SID"},{"description":"Medium 'uid' cookie value. Required alongside sid for some authenticated endpoints.","name":"MEDIUM_UID"},{"description":"Medium 'xsrf' cookie value. Required for any dashboard write (post_response, publish_post, delete_post, draft updates).","isSecret":true,"name":"MEDIUM_XSRF"},{"description":"Cloudflare 'cf_clearance' cookie. Only required when Cloudflare challenges your IP for dashboard write calls.","isSecret":true,"name":"MEDIUM_CF_CLEARANCE"},{"description":"Your Medium handle (without the @). Required for the public RSS read path so the client knows whose feed to fetch.","name":"MEDIUM_USERNAME"},{"description":"Override path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json.","name":"MEDIUM_OPS_MCP_PATH"},{"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.","name":"MEDIUM_OPS_LLM_CMD"}]}],"_meta":{"io.modelcontextprotocol.registry/publisher-provided":{"tool":"manual","version":"0.1.1"}}},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","statusChangedAt":"2026-05-02T12:54:30.413197Z","publishedAt":"2026-05-02T12:54:30.413197Z","updatedAt":"2026-05-02T12:54:30.413197Z","isLatest":false}}},{"server":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"io.github.06ketan/medium-ops","description":"Medium CLI + 23-tool MCP server. Your IDE drafts replies. No API keys.","title":"medium-ops","repository":{"url":"https://github.com/06ketan/medium-ops","source":"github"},"version":"0.1.2","websiteUrl":"https://medium-ops.chavan.in","packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"medium-ops","version":"0.1.2","runtimeHint":"uvx","transport":{"type":"stdio"},"packageArguments":[{"value":"mcp","type":"positional"},{"value":"serve","type":"positional"}],"environmentVariables":[{"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).","isSecret":true,"name":"MEDIUM_INTEGRATION_TOKEN"},{"description":"Medium 'sid' cookie value from medium.com (Application → Cookies). Used for authenticated reads + dashboard GraphQL.","isSecret":true,"name":"MEDIUM_SID"},{"description":"Medium 'uid' cookie value. Required alongside sid for some authenticated endpoints.","name":"MEDIUM_UID"},{"description":"Medium 'xsrf' cookie value. Required for any dashboard write (post_response, publish_post, delete_post, draft updates).","isSecret":true,"name":"MEDIUM_XSRF"},{"description":"Cloudflare 'cf_clearance' cookie. Only required when Cloudflare challenges your IP for dashboard write calls.","isSecret":true,"name":"MEDIUM_CF_CLEARANCE"},{"description":"Your Medium handle (without the @). Required for the public RSS read path so the client knows whose feed to fetch.","name":"MEDIUM_USERNAME"},{"description":"Override path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json.","name":"MEDIUM_OPS_MCP_PATH"},{"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.","name":"MEDIUM_OPS_LLM_CMD"}]}],"_meta":{"io.modelcontextprotocol.registry/publisher-provided":{"tool":"manual","version":"0.1.2"}}},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","statusChangedAt":"2026-05-03T06:02:58.252062Z","publishedAt":"2026-05-03T06:02:58.252062Z","updatedAt":"2026-05-03T06:02:58.252062Z","isLatest":true}}},{"server":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"io.github.06ketan/slideshot","description":"Convert HTML to PDF/PNG/WebP/PPTX slide carousels with 11 themes — for LinkedIn, decks, posts.","repository":{"url":"https://github.com/06ketan/slideshot","source":"github"},"version":"4.4.0","packages":[{"registryType":"npm","identifier":"slideshot-mcp","version":"4.4.0","transport":{"type":"stdio"}}]},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","statusChangedAt":"2026-05-01T13:33:07.797052Z","publishedAt":"2026-05-01T13:33:07.797052Z","updatedAt":"2026-05-01T13:33:07.797052Z","isLatest":true}}},{"server":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"io.github.06ketan/substack-ops","description":"Substack CLI + 26-tool MCP server. Your IDE drafts replies via propose_reply. No API keys.","title":"substack-ops","repository":{"url":"https://github.com/06ketan/substack-ops","source":"github"},"version":"0.3.1","websiteUrl":"https://substack-ops.chavan.in","packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"substack-ops","version":"0.3.1","runtimeHint":"uvx","transport":{"type":"stdio"},"packageArguments":[{"value":"mcp","type":"positional"},{"value":"serve","type":"positional"}],"environmentVariables":[{"description":"Your Substack publication URL (e.g. https://you.substack.com/). Optional if set in ~/.cursor/mcp.json's mcpServers.substack-api.env.","name":"SUBSTACK_PUBLICATION_URL"},{"description":"Your Substack numeric user id. Optional if set in ~/.cursor/mcp.json.","name":"SUBSTACK_USER_ID"},{"description":"Your Substack session cookie value (the s%3A... string). Required for authenticated calls. Easier path: run `substack-ops auth login --browser chrome` and the cookie is auto-grabbed.","isSecret":true,"name":"SUBSTACK_SESSION_TOKEN"},{"description":"Override path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json.","name":"SUBSTACK_OPS_MCP_PATH"},{"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.","name":"SUBSTACK_OPS_LLM_CMD"}]}],"_meta":{"io.modelcontextprotocol.registry/publisher-provided":{"tool":"manual","version":"0.3.1"}}},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","statusChangedAt":"2026-04-21T12:33:40.632015Z","publishedAt":"2026-04-21T12:33:40.632015Z","updatedAt":"2026-04-21T12:33:40.632015Z","isLatest":false}}},{"server":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"io.github.06ketan/substack-ops","description":"Substack CLI + 26-tool MCP server. Your IDE drafts replies via propose_reply. No API keys.","title":"substack-ops","repository":{"url":"https://github.com/06ketan/substack-ops","source":"github"},"version":"0.3.4","websiteUrl":"https://substack-ops.chavan.in","packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"substack-ops","version":"0.3.4","runtimeHint":"uvx","transport":{"type":"stdio"},"packageArguments":[{"value":"mcp","type":"positional"},{"value":"serve","type":"positional"}],"environmentVariables":[{"description":"Your Substack publication URL (e.g. https://you.substack.com/). Optional if set in ~/.cursor/mcp.json's mcpServers.substack-api.env.","name":"SUBSTACK_PUBLICATION_URL"},{"description":"Your Substack numeric user id. Optional if set in ~/.cursor/mcp.json.","name":"SUBSTACK_USER_ID"},{"description":"Your Substack session cookie value (the s%3A... string). Required for authenticated calls. Easier path: run `substack-ops auth login --browser chrome` and the cookie is auto-grabbed.","isSecret":true,"name":"SUBSTACK_SESSION_TOKEN"},{"description":"Override path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json.","name":"SUBSTACK_OPS_MCP_PATH"},{"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.","name":"SUBSTACK_OPS_LLM_CMD"}]}],"_meta":{"io.modelcontextprotocol.registry/publisher-provided":{"tool":"manual","version":"0.3.4"}}},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","statusChangedAt":"2026-05-02T12:54:15.231429Z","publishedAt":"2026-05-02T12:54:15.231429Z","updatedAt":"2026-05-02T12:54:15.231429Z","isLatest":false}}},{"server":{"$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","name":"io.github.06ketan/substack-ops","description":"Substack CLI + 26-tool MCP server. Your IDE drafts replies via propose_reply. No API keys.","title":"substack-ops","repository":{"url":"https://github.com/06ketan/substack-ops","source":"github"},"version":"0.3.5","websiteUrl":"https://substack-ops.chavan.in","packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"substack-ops","version":"0.3.5","runtimeHint":"uvx","transport":{"type":"stdio"},"packageArguments":[{"value":"mcp","type":"positional"},{"value":"serve","type":"positional"}],"environmentVariables":[{"description":"Your Substack publication URL (e.g. https://you.substack.com/). Optional if set in ~/.cursor/mcp.json's mcpServers.substack-api.env.","name":"SUBSTACK_PUBLICATION_URL"},{"description":"Your Substack numeric user id. Optional if set in ~/.cursor/mcp.json.","name":"SUBSTACK_USER_ID"},{"description":"Your Substack session cookie value (the s%3A... string). Required for authenticated calls. Easier path: run `substack-ops auth login --browser chrome` and the cookie is auto-grabbed.","isSecret":true,"name":"SUBSTACK_SESSION_TOKEN"},{"description":"Override path to the mcp.json file the auth layer reads. Defaults to ~/.cursor/mcp.json.","name":"SUBSTACK_OPS_MCP_PATH"},{"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.","name":"SUBSTACK_OPS_LLM_CMD"}]}],"_meta":{"io.modelcontextprotocol.registry/publisher-provided":{"tool":"manual","version":"0.3.5"}}},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","statusChangedAt":"2026-05-03T06:30:21.883331Z","publishedAt":"2026-05-03T06:30:21.883331Z","updatedAt":"2026-05-03T06:30:21.883331Z","isLatest":true}}}],"metadata":{"count":7}}
