Medium MCP (Model Context Protocol) is a browser-based solution for programmatically interacting with Medium's content ecosystem. Since Medium discontinued their public API for new users, this server uses browser automation to provide intelligent and context-aware content management.
Medium stopped issuing new API tokens in 2023, making traditional API integration impossible for new developers. This implementation uses Playwright browser automation to:
- ✅ Work without API tokens - Uses your existing Medium login session
- ✅ Full functionality - Publish, search, and manage your Medium content
- ✅ Secure - Saves your login session locally for reuse
- ✅ Interactive - Opens browser for initial login, then runs headlessly
Want to understand the full story behind Medium MCP? Check out the comprehensive article:
From Thought to Published: How MediumMCP Streamlines the AI-to-Medium Platform Workflow
- 🤖 Browser automation for Medium interaction
- 📝 Article publishing with title, content, and tags
- 📚 Retrieve your articles from your Medium profile
- 🔍 Search Medium articles by keywords
- 💾 Session persistence - login once, use everywhere
- 🎯 Claude integration via Model Context Protocol
- TypeScript
- Model Context Protocol (MCP)
- Playwright Browser Automation
- Advanced Content Parsing
- Node.js (v16 or later)
- npm or yarn
- A Medium account (no API credentials needed!)
# Clone the repository
git clone https://github.com/jackyckma/medium-mcp-server.git
# Navigate to the project directory
cd medium-mcp-server
# Install dependencies
npm install
# Install browser for automation
npx playwright install chromium
# Build the project
npm run buildNo API keys needed! The server will prompt you to login to Medium in your browser on first use.
# Test the browser automation (optional)
node test-browser.jsnpm startAdd this to your Claude MCP configuration:
{
"mcpServers": {
"medium-mcp": {
"command": "node",
"args": ["path/to/medium-mcp-server/dist/index.js"],
"cwd": "path/to/medium-mcp-server"
}
}
}Publish a new article to Medium
{
title: string, // Article title
content: string, // Article content (markdown supported)
tags?: string[], // Optional tags
isDraft?: boolean // Save as draft (default: false)
}Retrieve your published Medium articles
// No parameters needed
// Returns: Array of your articles with titles, URLs, and datesGet full content of any Medium article
{
url: string // Medium article URL
}Search Medium for articles by keywords
{
keywords: string[] // Array of search terms
}Manually trigger login process
// No parameters needed
// Opens browser for login if not already authenticated- Run the server - It will open a Chrome browser window
- Login to Medium - Complete login in the opened browser
- Session saved - Your login session is saved locally
- Future runs - No login required, runs headlessly
User Request → MCP Server → Playwright Browser → Medium Website → Response
- Login session stored in
medium-session.json - Automatically reused on subsequent runs
- Re-login only if session expires
User: "Publish an article titled 'AI in 2025' with content about recent developments"
Claude: Uses publish-article tool →
- Opens Medium editor
- Fills in title and content
- Publishes article
- Returns success with article URL
- Browser won't open: Check if Chromium is installed (
npx playwright install chromium) - Login fails: Clear
medium-session.jsonand try again - Slow performance: Browser automation takes 10-30 seconds per operation
- Selectors outdated: Medium occasionally changes their website structure
- Login blocked: Use your regular browser to login first, then try again
Browser not initialized: Restart the serverLogin timeout: Increase timeout in browser-client.tsElement not found: Medium may have changed their UI
src/
├── index.ts # Main MCP server
├── browser-client.ts # Playwright automation
├── auth.ts # Legacy auth (unused)
└── client.ts # Legacy API client (unused)
# Test browser automation
node test-browser.js
# Run MCP server
npm start
# Build project
npm run build- ✅ Local only - No data sent to external servers
- ✅ Session encryption - Browser handles all security
- ✅ No API keys - Uses your existing Medium login
⚠️ Browser storage - Session saved locally in JSON file
- Speed: Browser automation is slower than API calls (10-30s vs 1-2s)
- Reliability: Dependent on Medium's website structure
- Headless: Requires display for initial login (can run headless after)
- Rate limits: Subject to Medium's normal usage limits
Contributions welcome! Please read CONTRIBUTING.md for guidelines.
MIT License - see LICENSE file for details.
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
- 📧 Email: [Contact Author]
This entire Medium MCP Server was developed by AI (Claude/Cursor AI) in just a few hours, demonstrating the remarkable power of AI-assisted development. The complete rewrite from deprecated API to browser automation, including all TypeScript code, documentation, error handling, and testing strategies, was generated through AI collaboration.
- ✅ AI-First Development: Complex browser automation and MCP integration built rapidly
- ✅ Real-world Problem Solving: Adapted to Medium's API deprecation with working solution
- ✅ Production-Ready Code: TypeScript, error handling, session management, comprehensive docs
- ✅ Community Standards: Contributing guidelines, changelog, proper licensing
- ✅ Functional: Works well in Claude MCP integration for core features
⚠️ Google Login Sessions: Couldn't solve persistent Google login sessions (use email/password instead)⚠️ Short Development Time: Rapid development may have overlooked edge cases⚠️ Medium UI Changes: Selectors may break if Medium updates their interface
This tool is useful and functional for AI-powered content workflows, but comes with the inherent limitations of:
- Rapid AI development - may miss nuanced edge cases that human developers would catch
- Browser automation complexity - dependent on Medium's website structure
- Session management challenges - Google's anti-automation measures
Given the accelerated AI development process, I welcome any feedback, bug reports, or improvements. This serves as both a working tool and a demonstration of AI development capabilities and limitations.
Use at your own discretion - this is provided "as-is" with the understanding that rapid AI development, while powerful, may not cover all production scenarios.
Note: This is an unofficial tool and is not affiliated with Medium. Use responsibly and in accordance with Medium's Terms of Service.