Skip to content

MCP Servers

Six MCP servers shared by all runners plus Ghost MCP for blog publishing.

Server Summary

Server Container Port Transport Image
Reddit reddit-mcp 127.0.0.1:8080 SSE (streamable HTTP) mcp-reddit-proxy:latest (local build)
Playwright playwright-mcp 127.0.0.1:8931 HTTP mcr.microsoft.com/playwright/mcp:latest
Runware runware-mcp 127.0.0.1:8081 HTTP mcp-runware:latest (local build)
Twitter/X twitter-mcp 127.0.0.1:8083 HTTP x-twitter-mcp:latest (local build)
Stock Images stockimages-mcp 127.0.0.1:8084 HTTP mcp-stock-images:latest (local build)
Memes memes-mcp 127.0.0.1:8085 HTTP mcp-memes:latest (local build)

Reddit MCP

Provides Reddit search and posting capabilities.

Build: ./mcp-servers/reddit/Dockerfile - Base: node:20-slim + Python 3 + uvx - Runs mcp-proxy wrapping uvx mcp-server-reddit - Transport: streamable HTTP on port 8080

Environment Variables:

Variable Purpose
REDDIT_CLIENT_ID Reddit app client ID
REDDIT_CLIENT_SECRET Reddit app client secret
REDDIT_USERNAME Reddit account username
REDDIT_PASSWORD Reddit account password

Runner Connection: http://reddit-mcp:8080/sse (type: sse)

Verify:

curl http://localhost:8080/sse

Playwright MCP

Provides browser automation (web scraping, screenshots).

Image: mcr.microsoft.com/playwright/mcp:latest (official Microsoft image) - Runs with --port 8931 for HTTP mode (not stdio) - No custom Dockerfile needed

Runner Connection: http://playwright-mcp:8931/mcp (type: http)

Verify:

curl -X POST http://localhost:8931/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Runware MCP

Provides AI image generation via the Runware API.

Build: ./mcp-servers/runware/Dockerfile - Base: python:3.11-slim - Clones github.com/Runware/MCP-Runware - Wraps with streamable HTTP transport via uvicorn - Health check: POST to /mcp

Environment Variables:

Variable Purpose
RUNWARE_API_KEY Runware API key (also passed to runners)

Runner Connection: http://runware-mcp:8081/mcp (type: http)

Health Check:

The healthcheck uses POST (not GET) because the MCP protocol expects POST requests:

curl -X POST http://localhost:8081/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"ping"}'

Twitter/X MCP

Provides Twitter/X search, posting, and engagement capabilities.

Build: ./mcp-servers/twitter/Dockerfile - Base: python:3.13-slim - FastMCP-based HTTP server - Serves on port 8081 (internal)

Environment Variables:

Variable Purpose
TWITTER_API_KEY Twitter API key
TWITTER_API_SECRET Twitter API secret
TWITTER_ACCESS_TOKEN OAuth access token
TWITTER_ACCESS_TOKEN_SECRET OAuth access token secret
TWITTER_BEARER_TOKEN Bearer token for read operations
TWITTER_CLIENT_ID OAuth 2.0 client ID
TWITTER_CLIENT_SECRET OAuth 2.0 client secret

Runner Connection: http://twitter-mcp:8081/mcp (type: http)

Stock Images MCP

Provides stock photo search across Pexels, Unsplash, and Pixabay.

Build: ./mcp-servers/stock-images/Dockerfile - Base: python:3.11-slim + Node.js 20 - Uses mcp-proxy for streamable HTTP transport on port 8000

Environment Variables:

Variable Purpose
PEXELS_API_KEY Pexels API key
UNSPLASH_API_KEY Unsplash API key
PIXABAY_API_KEY Pixabay API key

Runner Connection: http://stockimages-mcp:8000/mcp (type: http)

Memes MCP

Provides meme generation via Imgflip.

Build: ./mcp-servers/memes/Dockerfile - Base: node:20-slim - Uses mcp-proxy for streamable HTTP transport on port 3000

Environment Variables:

Variable Purpose
IMGFLIP_USERNAME Imgflip account username
IMGFLIP_PASSWORD Imgflip account password

Runner Connection: http://memes-mcp:3000/mcp (type: http)

Troubleshooting

# Check all MCP containers
docker compose ps reddit-mcp playwright-mcp runware-mcp twitter-mcp stockimages-mcp memes-mcp

# View logs
docker compose logs --tail 50 reddit-mcp
docker compose logs --tail 50 twitter-mcp
docker compose logs --tail 50 stockimages-mcp
docker compose logs --tail 50 memes-mcp

# Restart
docker compose restart reddit-mcp

Common Issues

  • Reddit rate limiting: Check for 429 errors in logs. Wait and retry.
  • Playwright crash-looping: Ensure --port 8931 is set in the command. Without it, Playwright defaults to stdio mode.
  • Runware "unhealthy": Previously used GET healthcheck; now uses POST. If still unhealthy after the fix, check API key validity.
  • Twitter rate limiting: Twitter/X API has strict rate limits. Check for 429 errors in logs.
  • Stock Images 404: Verify API keys are still valid for Pexels, Unsplash, and Pixabay.