One MCP server that combines Cloudflare Tunnels with Firecrawl. Expose localhost publicly, launch browser sandboxes, deploy autonomous QA agents, all from your AI assistant.
Tell your AI assistant to expose a port. It tunnels it, grabs the URL, launches a browser sandbox, runs an agent, and tears it all down. Zero friction.
Expose a local port. Auto-patches Vite configs.
tunnel_start(port: 5173) Cloudflare edge routes traffic. Instant HTTPS.
→ https://abc.trycloudflare.com Scrape, screenshot, crawl, flow test with JS.
qa_flow_test(url, steps) Persistent sessions or autonomous AI agent.
browser_execute(code) Tear down. Vite config auto-reverts.
tunnel_stop(label: "app") Persistent browser sessions, autonomous navigation agents, and zero-config Vite tunneling. Powered by Firecrawl.
Tunneling a Vite dev server? Porthook MCP detects it, patches allowedHosts: true into your config, and reverts on stop. No more 403 errors.
Persistent browser sessions with live-view URLs and a pre-initialized Playwright page object. Navigate, fill forms, screenshot. All stateful.
Give it a prompt and optional JSON schema. The agent navigates, clicks, fills forms, and returns structured data autonomously.
Tunnel tools powered by cloudflared. QA, browser sandbox, and agent tools powered by Firecrawl. All in one MCP interface.
Powered by cloudflared
cloudflared_status Check install status, version, active tunnels cloudflared_install Install via Homebrew or npm tunnel_start Expose a port · auto-patches Vite configs tunnel_stop Stop a running tunnel · reverts Vite tunnel_stop_all Stop all running tunnels at once tunnel_list List named tunnels on your CF account tunnel_create Create a persistent named tunnel tunnel_run Run a named tunnel (with credentials) tunnel_delete Delete a named tunnel permanently Powered by Firecrawl
qa_scrape Scrape to markdown · verify content qa_screenshot Visual QA · layout check · before/after qa_crawl Crawl site · find broken links, check routes qa_check HTTP status, title, links. Instant qa_flow_test Multi-step UI flows with JS · pass/fail Autonomous AI
qa_agent Navigate, interact, extract structured data All QA, browser, and agent tools work with any public URL, not just tunnel URLs.
Persistent sessions
browser_create Create session, get live-view URL browser_execute Run code with Playwright page object browser_list List active browser sessions browser_close Close session, see credits billed Drop into any MCP-compatible AI assistant.
Node.js ≥ 18
Required runtime
cloudflared
Auto-installable via tool
Firecrawl API key
Free tier: 500 credits
Let your AI install it
Paste this into Cursor, Claude Code, or any agent. It will clone, build, and wire up the config automatically.
1. Clone the repo
git clone https://github.com/kwestradotcom/Porthook_MCP.git 2. Build the server
cd Porthook_MCP/mcp-servers/cloudflared && npm install && npm run build 3. Add to your MCP config
.cursor/mcp.json
{
"mcpServers": {
"porthook": {
"command": "node",
"args": ["/path/to/mcp-servers/cloudflared/dist/index.js"],
"env": { "FIRECRAWL_API_KEY": "fc-..." }
}
}
} 4. Restart your editor and try it
"Tunnel my Vite app on port 5173, take a screenshot, and scrape the homepage"
"Open a browser sandbox, go to my staging URL, fill out the signup form, and check that it redirects to the dashboard"
"Run a flow test on the login page: enter [email protected] / password123 and assert the URL ends with /dashboard"
"Crawl my site and find any pages returning 4xx or 5xx errors"
"Use the agent to navigate to the pricing page and extract all plan names, prices, and features as JSON"
Everything you need to use Porthook MCP effectively. Each tool is self-documented in the MCP interface. These are the key patterns.
Expose any local port as a public HTTPS URL. Quick tunnels need no auth. Named tunnels persist across sessions.
Create a persistent browser with a Playwright page object. State persists between browser_execute calls. Sessions auto-expire after TTL.
Multi-step browser automation with assertions. Click, type, press keys, execute JavaScript, and check results. Returns PASS/FAIL with evidence.
Give a natural-language prompt. The agent navigates, clicks, fills forms, and extracts data. Optionally provide a JSON schema for structured output.
When you tunnel_start a port running Vite 6+, Porthook MCP automatically detects the Vite process, finds the config file, and injects allowedHosts: true into the server block. Vite's file watcher picks up the change and restarts automatically. The config is reverted to its original state when the tunnel stops.
Install the Porthook MCP skill to teach your AI assistant decision trees, workflow patterns, and tool chaining sequences for all 19 tools. Includes the /porthook slash command.
tunnel_start) work without any account or login. They give you a temporary *.trycloudflare.com URL. Named (persistent) tunnels require cloudflared tunnel login.
Host headers by default. Porthook MCP automatically detects Vite and patches the config. If auto-detection doesn't work (e.g. custom Vite setup), manually add server: { allowedHosts: true } to your Vite config.
No Cloudflare account needed for quick tunnels. Instant HTTPS, globally distributed edge.
Tunnels auto-terminate on server exit. No orphaned cloudflared processes littering your system.
Designed for agent workflows. Natural language to tool call to structured result. No babysitting.
QA tools are URL-agnostic. Scrape production, staging, or any public endpoint — not just tunnels.
Screenshot any URL via Firecrawl. Verify layout, catch regressions, compare before/after.
No SaaS overhead. Run it locally, fork it, own it. Free Firecrawl tier covers most workflows.
A Kwestra open-source project Porthook MCP is one piece of the AI-native dev toolkit we're building at Kwestra. We help engineering teams design, build, and operate AI-powered workflows, from agentic tooling to production automation.