MCP Servers
Six MCP servers shared by all runners plus Ghost MCP for blog publishing.
Server Summary
| Server | Container | Port | Transport | Image |
|---|---|---|---|---|
| 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:
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 8931is 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.