home / mcp / medium mcp server (browser-based) mcp server

Medium MCP Server (Browser-Based) MCP Server

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

Installation
Add the following to your MCP client configuration file.

Configuration

View docs
{
  "mcpServers": {
    "jackyckma-medium-mcp-server": {
      "command": "node",
      "args": [
        "path/to/medium-mcp-server/dist/index.js"
      ]
    }
  }
}

You run a browser-based MCP server that automates Medium interactions through a Playwright browser session. It lets you publish articles, fetch your Medium content, search for articles, and log in once to reuse your session securely, all without API tokens.

How to use

To use this MCP server, first start the local server and then connect your MCP client to it. The server launches a browser window for your initial login, saves your session locally, and then operates headlessly for subsequent requests. You can publish articles, retrieve your articles, search Medium, and trigger login when needed.

Typical usage patterns include: creating a new article with a title and content, optionally tagging it and saving as a draft; retrieving a list of your published articles; getting the full content of a specific article by URL; and performing keyword-based searches to discover Medium posts. Each request is handled by the corresponding MCP tool exposed by the server.

How to install

# 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

Additional setup and usage notes

Configuration requires no API keys. On first run, the server will open a browser window prompting you to log in to your Medium account. After you log in, the session is saved locally and will be reused on subsequent runs.

Add the MCP server to Claude configuration using the following example. This config runs the local server instance using Node and points to the built index file.

{
  "mcpServers": {
    "medium-mcp": {
      "command": "node",
      "args": ["path/to/medium-mcp-server/dist/index.js"],
      "cwd": "path/to/medium-mcp-server"
    }
  }
}

Troubleshooting and tips

If the browser does not open, ensure Chromium is installed by running: npx playwright install chromium. If login fails, clear the local session file and try again. Expect browser automation to be slower (roughly 10–30 seconds per operation) compared to direct API calls. Medium UI changes can require updates to selectors used by the automation.

Common errors include: Browser not initialized (restart the server), Login timeout (increase timeout in the browser client), and Element not found (Medium may have updated its UI). For login-related issues, perform a fresh login when prompted and verify the session is saved locally.

Security and limitations

This setup is local-only and does not send data to external servers. The session is stored locally in a browser-driven JSON file and is used to authenticate your actions. There are no API keys involved. Be aware that browser automation is slower and dependent on Medium’s website structure, which may change.

Development and testing notes

Project structure includes a main server, a browser client module, and supporting scripts. You can test the browser automation, run the MCP server, and build the project with the following commands.

# Test browser automation
node test-browser.js

# Run MCP server
npm start

# Build project
npm run build

Available tools

publish-article

Publish a new article to Medium including title, content, optional tags, and the option to save as a draft.

get-my-articles

Retrieve your published Medium articles with titles, URLs, and dates.

get-article-content

Get the full content of a Medium article by URL.

search-medium

Search Medium for articles by keywords.

login-to-medium

Manually trigger the login process to start or refresh your session.