A monorepo hosting multiple MCP (Model Context Protocol) servers on Railway, each exposed over Streamable HTTP via Supergateway.
| Service | Source | Description | Endpoint |
|---|---|---|---|
| brave-search | @modelcontextprotocol/server-brave-search | Web search via Brave Search API | https://<service>.railway.app/mcp |
| crawl4ai | crawl4ai | Open-source LLM-optimized web crawler & Playwright scraper | https://<service>.railway.app/mcp |
| google-maps | @modelcontextprotocol/server-google-maps | Location search, directions, and place details via Google Maps API | https://<service>.railway.app/mcp |
| grubhub | aserper/grubhub-mcp | Search restaurants, browse menus, manage cart, place orders | https://<service>.railway.app/mcp |
| puppeteer | @modelcontextprotocol/server-puppeteer | Browser automation using headless Chromium | https://<service>.railway.app/mcp |
Each service is a Docker container that:
- Installs the underlying MCP server (npm package or pip package)
- Runs Supergateway to bridge stdio → Streamable HTTP
- Exposes a
/mcpendpoint on Railway's assigned port
┌─────────────────────────────────────────────┐
│ Railway Service │
│ │
│ Supergateway (HTTP :$PORT) │
│ │ │
│ └── stdio ──▶ MCP Server │
│ (brave-search/crawl4ai/ │
│ google-maps/grubhub/ │
│ puppeteer) │
│ │
│ Endpoint: https://svc.railway.app/mcp │
└─────────────────────────────────────────────┘
git clone https://github.com/<your-username>/mcps.git
cd mcps
cp .env.example .env
# Edit .env with your API keys| Service | Variable | Required | Description |
|---|---|---|---|
| brave-search | BRAVE_API_KEY |
✅ | Get from brave.com/developers |
| crawl4ai | (none) | — | Open-source, runs Playwright locally out-of-the-box |
| google-maps | GOOGLE_MAPS_API_KEY |
✅ | Get from console.cloud.google.com |
| grubhub | GRUBHUB_EMAIL |
Required for account access, cart & ordering | |
| grubhub | GRUBHUB_PASSWORD |
Required for account access, cart & ordering | |
| puppeteer | (none) | — | Runs headless Chromium out-of-the-box |
- Create a new project on Railway
- Connect this GitHub repo
- Add services pointing to their subdirectories:
brave-search/→ service name:brave-searchcrawl4ai/→ service name:crawl4aigoogle-maps/→ service name:google-mapsgrubhub/→ service name:grubhubpuppeteer/→ service name:puppeteer
- Set environment variables on each service
- Railway auto-detects the Dockerfile and deploys
Use the Railway-assigned URLs in your MCP client config:
{
"mcpServers": {
"brave-search": {
"url": "https://brave-search-production-e850.up.railway.app/mcp"
},
"crawl4ai": {
"url": "https://crawl4ai-production-64f5.up.railway.app/mcp"
},
"google-maps": {
"url": "https://google-maps-production-4cff.up.railway.app/mcp"
},
"grubhub": {
"url": "https://grubhub-production.up.railway.app/mcp"
},
"puppeteer": {
"url": "https://puppeteer-production-88ab.up.railway.app/mcp"
}
}
}- Create a new directory (e.g.,
my-new-mcp/) - Add a
Dockerfilefollowing the same pattern (install MCP + supergateway, wrap withCMD) - Add a new service in Railway pointing to the directory
- Deploy
MIT