Hybrid Python and Node.js MCP server for Fourth platform automation
Fourth Playwright MCP Server
Remote MCP server combining FastMCP v3 (Python) orchestration with @playwright/mcp (Node.js) browser automation. Designed for deployment to Railway as a Claude.ai Custom Connector.
Architecture
FastMCP v3 (Python) ─── SSE/Streamable HTTP ──→ Claude.ai
│
└── subprocess (stdio) ──→ @playwright/mcp (Node.js)
- FastMCP v3: OAuth 2.1 proxy, Skills system, custom tools, HTTP transport
- @playwright/mcp: 70+ browser automation tools via stdio subprocess
- Custom tools: Fourth-specific authentication, navigation, data extraction
Setup
Prerequisites
- Python 3.11+
- Node.js 18+
- uv (Python package manager)
Install
# Python dependencies
uv sync
# Node dependencies (installs @playwright/mcp + Chromium)
npm install
Run locally
uv run python src/server.py
# Server starts on http://localhost:8000
# Health check: curl http://localhost:8000/health
# MCP endpoint: http://localhost:8000/mcp
List tools
uv run fastmcp list src/server.py
Deployment (Railway)
- Connect this repo to Railway
- Railway auto-detects the Dockerfile
- Set environment variables (see
.env.example) - Railway sets
PORTautomatically
Claude.ai Custom Connector
- Go to Claude.ai → Settings → Connectors → Add Custom
- SSE URL:
https://<app>.railway.app/mcp - Configure OAuth with your Client ID/Secret
Custom Fourth Tools
| Tool | Description |
|---|---|
fourth_login |
Automated login with credentials/SSO |
fourth_navigate_module |
Navigate to Fourth module by name |
fourth_extract_table |
Extract structured data from tables |
fourth_extract_report |
Generate structured report from page |
fourth_wait_for_load |
Smart wait for Fourth SPA |
fourth_get_user_context |
Get current user/permissions/restaurant |
Skills
Skills are exposed as MCP resources from the skills/ directory:
browser-automation- General browser automation patternsfourth-workflows- Fourth-specific workflow instructions
Environment Variables
See .env.example for all configuration options.
Tools (6)
fourth_loginAutomated login with credentials or SSOfourth_navigate_moduleNavigate to Fourth module by namefourth_extract_tableExtract structured data from tablesfourth_extract_reportGenerate structured report from pagefourth_wait_for_loadSmart wait for Fourth SPAfourth_get_user_contextGet current user, permissions, and restaurant contextEnvironment Variables
FOURTH_USERNAMErequiredUsername for Fourth platform authenticationFOURTH_PASSWORDrequiredPassword for Fourth platform authenticationPORTPort for the SSE server (set automatically by Railway)Configuration
{"mcpServers": {"fourth-playwright": {"command": "uv", "args": ["run", "src/server.py"], "env": {"FOURTH_USERNAME": "your_user", "FOURTH_PASSWORD": "your_pass"}}}}