jackyckma

Medium MCP Server (Browser-Based)

Community jackyckma
Updated

Browser-based MCP server for Medium content management - no API tokens required! Built with AI in hours.

Medium MCP Server (Browser-Based)

Overview

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.

๐Ÿ”„ Why Browser-Based?

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

๐Ÿ“– Deep Dive Article

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

Key Features

  • ๐Ÿค– 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

Technology Stack

  • TypeScript
  • Model Context Protocol (MCP)
  • Playwright Browser Automation
  • Advanced Content Parsing

Getting Started

Prerequisites

  • Node.js (v16 or later)
  • npm or yarn
  • A Medium account (no API credentials needed!)

Installation

# 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 build

Configuration

No API keys needed! The server will prompt you to login to Medium in your browser on first use.

Usage

Test the Browser Client
# Test the browser automation (optional)
node test-browser.js
Start the MCP Server
npm start
Add to Claude Configuration

Add 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"
    }
  }
}

Available MCP Tools

1. publish-article

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)
}

2. get-my-articles

Retrieve your published Medium articles

// No parameters needed
// Returns: Array of your articles with titles, URLs, and dates

3. get-article-content

Get full content of any Medium article

{
  url: string  // Medium article URL
}

4. search-medium

Search Medium for articles by keywords

{
  keywords: string[]  // Array of search terms
}

5. login-to-medium

Manually trigger login process

// No parameters needed
// Opens browser for login if not already authenticated

How It Works

First Time Setup

  1. Run the server - It will open a Chrome browser window
  2. Login to Medium - Complete login in the opened browser
  3. Session saved - Your login session is saved locally
  4. Future runs - No login required, runs headlessly

Browser Automation Flow

User Request โ†’ MCP Server โ†’ Playwright Browser โ†’ Medium Website โ†’ Response

Session Management

  • Login session stored in medium-session.json
  • Automatically reused on subsequent runs
  • Re-login only if session expires

Example Usage with Claude

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

Troubleshooting

Browser Issues

  • Browser won't open: Check if Chromium is installed (npx playwright install chromium)
  • Login fails: Clear medium-session.json and try again
  • Slow performance: Browser automation takes 10-30 seconds per operation

Medium Changes

  • Selectors outdated: Medium occasionally changes their website structure
  • Login blocked: Use your regular browser to login first, then try again

Common Errors

  • Browser not initialized: Restart the server
  • Login timeout: Increase timeout in browser-client.ts
  • Element not found: Medium may have changed their UI

Development

Project Structure

src/
โ”œโ”€โ”€ index.ts           # Main MCP server
โ”œโ”€โ”€ browser-client.ts  # Playwright automation
โ”œโ”€โ”€ auth.ts           # Legacy auth (unused)
โ””โ”€โ”€ client.ts         # Legacy API client (unused)

Testing

# Test browser automation
node test-browser.js

# Run MCP server
npm start

# Build project
npm run build

Security Notes

  • โœ… 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

Limitations

  • 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

Contributing

Contributions welcome! Please read CONTRIBUTING.md for guidelines.

License

MIT License - see LICENSE file for details.

Support

  • ๐Ÿ› Issues: GitHub Issues
  • ๐Ÿ’ฌ Discussions: GitHub Discussions
  • ๐Ÿ“ง Email: [Contact Author]

๐Ÿค– CREDIT and DISCLAIMER

AI-Powered Development

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.

What This Demonstrates

  • โœ… 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

Current Status & Limitations

  • โœ… 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

Honest Assessment

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

Feedback Welcome

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.

MCP Server ยท Populars

MCP Server ยท New