Project Info
Inspiration
MCP (Model Context Protocol) is the emerging standard for connecting AI agents to external tools and data sources. But creating an MCP server today requires deep technical knowledge — you need to understand the protocol, write tool definitions, handle browser automation, and figure out hosting. We asked ourselves: what if any website could become an MCP server with a single click? We were inspired by the idea that the internet is full of useful tools trapped behind UIs — airline booking, e-commerce search, data lookups, government portals. If AI agents could interact with these sites programmatically through MCP, it would unlock an entirely new layer of capability. So we built MCP-Forge: a platform that automatically discovers what a website can do, generates a full MCP server with tools for each capability, deploys it live, and lists it in a marketplace for anyone to use.
What it does
MCP-Forge turns any website into a fully functional MCP server through an automated pipeline: Discovery — An AI agent powered by Claude Sonnet launches a cloud browser (via Browserbase) and autonomously explores the target website. It navigates pages, identifies interactive elements like search forms, filters, and data tables, and maps out the site's capabilities. Discovery — An AI agent powered by Claude Sonnet launches a cloud browser (via Browserbase) and autonomously explores the target website. It navigates pages, identifies interactive elements like search forms, filters, and data tables, and maps out the site's capabilities. Code Generation — The discovery results are fed to an LLM that generates a complete Python MCP server. Each discovered capability becomes a tool function that uses Stagehand (AI browser automation) to replay the interactions programmatically. Code Generation — The discovery results are fed to an LLM that generates a complete Python MCP server. Each discovered capability becomes a tool function that uses Stagehand (AI browser automation) to replay the interactions programmatically. Deployment — The generated server is automatically deployed to Modal as a serverless endpoint, instantly accessible via the MCP Streamable HTTP transport. Deployment — The generated server is automatically deployed to Modal as a serverless endpoint, instantly accessible via the MCP Streamable HTTP transport. Marketplace — The deployed server is registered in our MCP Marketplace, where users can browse available servers, test them with our built-in MCP Inspector, and connect them to any MCP-compatible AI client (Poke, Cursor, Claude Desktop etc.). Marketplace — The deployed server is registered in our MCP Marketplace, where users can browse available servers, test them with our built-in MCP Inspector, and connect them to any MCP-compatible AI client (Poke, Cursor, Claude Desktop etc.). The entire pipeline is itself exposed as an MCP server (the "MCP Factory"), which means you can trigger server generation from within Poke or any MCP client — an MCP server that creates MCP servers.
How we built it
The project has four major components: Discovery Engine (Browserbase + Stagehand + Claude) We use Browserbase to spin up cloud Chrome sessions and Stagehand's AI-powered browser automation SDK to give our Claude agent tools like observe, act, and extract. The orchestrator agent receives a URL and a turn budget, then autonomously explores the site — clicking through navigation, filling forms, extracting data — building a structured map of the site's capabilities as endpoint definitions with parameterized steps. Code Generation & Deployment Pipeline Discovery results are passed to Claude Sonnet, which generates Python MCP server code using the FastMCP framework. Each endpoint becomes an @mcp.tool() decorated async function that replays the browser interactions via Stagehand. The generated code includes a Modal deployment script that packages everything into a serverless ASGI app with Browserbase secrets injected. We call modal deploy programmatically and parse the live URL from the output. MCP Factory (Meta-MCP Server) The entire pipeline is wrapped as an MCP server with tools: discover, generate, deploy, replay, and full_pipeline. This server is containerized and hosted on Google Cloud Run, accepting JSON-RPC requests over Streamable HTTP. This is what powers both the web UI's "Generate from Website" feature and the Poke integration — Poke can call full_pipeline directly as an MCP tool. Marketplace UI (Next.js + Vercel Postgres) A Next.js 14 web app with a neo-brutalist design, featuring user authentication, a dashboard for managing your MCP servers, an API with key-based access control, and a built-in MCP Inspector for testing connections. The marketplace is backed by Vercel Postgres for persistent, globally accessible data.
Challenges we ran into
Non-deterministic browser exploration — Every website is different. Getting the AI agent to reliably discover useful capabilities without getting lost in infinite scroll, popups, or auth walls required careful prompt engineering and budget constraints on browser turns. Non-deterministic browser exploration — Every website is different. Getting the AI agent to reliably discover useful capabilities without getting lost in infinite scroll, popups, or auth walls required careful prompt engineering and budget constraints on browser turns. Reliable code generation — Generated MCP server code needs to actually work. We iterated on strict templates and validation steps (type-checking in sandboxes) to minimize broken deployments. Getting the LLM to produce correct Stagehand action instructions with proper parameter placeholders was particularly tricky. Reliable code generation — Generated MCP server code needs to actually work. We iterated on strict templates and validation steps (type-checking in sandboxes) to minimize broken deployments. Getting the LLM to produce correct Stagehand action instructions with proper parameter placeholders was particularly tricky. MCP protocol handling — Implementing the full MCP handshake (initialize → initialized → tools/call) with both SSE and JSON responses, plus session management, required careful attention to the spec — especially when proxying through our API layer. MCP protocol handling — Implementing the full MCP handshake (initialize → initialized → tools/call) with both SSE and JSON responses, plus session management, required careful attention to the spec — especially when proxying through our API layer. End-to-end latency — The full pipeline (browser discovery + code generation + Modal deployment) can take 2-10 minutes. We had to design the UX to keep users engaged during the wait and handle timeouts gracefully across multiple async services. End-to-end latency — The full pipeline (browser discovery + code generation + Modal deployment) can take 2-10 minutes. We had to design the UX to keep users engaged during the wait and handle timeouts gracefully across multiple async services.
Accomplishments we're proud of
An MCP server that creates MCP servers — The recursive nature of the Factory MCP is genuinely cool. You can use Poke to tell our MCP to generate a new MCP server for any website, and minutes later it's live. An MCP server that creates MCP servers — The recursive nature of the Factory MCP is genuinely cool. You can use Poke to tell our MCP to generate a new MCP server for any website, and minutes later it's live. Fully automated discovery — The AI agent genuinely explores websites it has never seen before and figures out what they can do. Watching it navigate Amazon, fill search boxes, and map out product search as an MCP tool is magical. Fully automated discovery — The AI agent genuinely explores websites it has never seen before and figures out what they can do. Watching it navigate Amazon, fill search boxes, and map out product search as an MCP tool is magical. Live deployments in minutes — Going from a URL to a deployed, globally accessible MCP server with zero human intervention. Live deployments in minutes — Going from a URL to a deployed, globally accessible MCP server with zero human intervention. Built-in MCP Inspector — Users can test any MCP server directly in the browser, making the marketplace actually useful rather than just a listing. Built-in MCP Inspector — Users can test any MCP server directly in the browser, making the marketplace actually useful rather than just a listing.
What we learned
Browserbase + Stagehand is incredibly powerful for AI-driven web automation. The observe/act/extract paradigm maps naturally to how you'd describe website capabilities. Browserbase + Stagehand is incredibly powerful for AI-driven web automation. The observe/act/extract paradigm maps naturally to how you'd describe website capabilities. LLM-generated code is viable for narrow domains — when you constrain the template tightly enough, code generation is surprisingly reliable. The key is giving the model a strict skeleton and only asking it to fill in the variable parts. LLM-generated code is viable for narrow domains — when you constrain the template tightly enough, code generation is surprisingly reliable. The key is giving the model a strict skeleton and only asking it to fill in the variable parts.
What's next
Smarter discovery — Multi-session exploration that can handle auth flows, pagination, and dynamic content more robustly. Server versioning & updates — Re-run discovery to update tools when websites change. Community curation — Ratings, reviews, and verified servers in the marketplace. Self-healing servers — Monitor deployed MCP servers and automatically re-generate when they break due to site changes.
Pokeforge
Automatic MCP server generation for browser automation.
Projects
This repo contains two Cloudflare Workers:
orchestrator-workers/- Cloudflare Worker with:- MCP endpoint (
/mcp) - automation endpoints (
/automate,/automate/:id) - workflows + codegen + GitHub publish
- MCP endpoint (
stagehand-service/- Browserbase + Stagehand execution service (/execute)
Architecture
orchestrator-workers:- Exposes MCP tool
automate_websiteat/mcp - Calls
stagehand-servicevia Cloudflare Service Binding - Codegens MCP server from discovered actions/cache
- Tests generated code in Cloudflare Sandbox
- Pushes to GitHub and returns repo URL
- Exposes MCP tool
stagehand-service:- Executes browser steps using Stagehand + Browserbase
- Returns step logs + artifacts (screenshots/html/cache)
Local Development (Bun)
1) Stagehand service
cd stagehand-service
cp .env.example .env
# Set BROWSERBASE_PROJECT_ID, BROWSERBASE_API_KEY, AI_PROVIDER, AI_API_KEY
bun install
bun run dev
Runs on http://localhost:8788
2) Orchestrator workers
cd orchestrator-workers
bun install
# Optional for local fallback only (without Service Binding):
# set STAGEHAND_SERVICE_URL=http://localhost:8788
bun run dev
Runs on http://localhost:8787
Cloudflare Deployment
Deploy in this order:
- Deploy
stagehand-service - Deploy
orchestrator-workers(depends on service binding to stagehand)
A) Cloudflare Worker Build Settings
For both Workers in Cloudflare:
- Install command:
bun install --frozen-lockfile - Build command:
bun run build - Deploy command:
npx wrangler deploy - Root directory:
stagehand-serviceproject:stagehand-serviceorchestrator-workersproject:orchestrator-workers
B) Required Secrets / Vars
Set these in Cloudflare for stagehand-service:
BROWSERBASE_PROJECT_ID(secret)BROWSERBASE_API_KEY(secret)AI_PROVIDER(var; example:openaiorgoogle)AI_API_KEY(secret)
Set these in Cloudflare for orchestrator-workers:
AI_PROVIDER(var; currently codegen supportsopenaiandgoogle)AI_API_KEY(secret)GITHUB_TOKEN(secret; required for repo creation)GITHUB_OWNER(optional; auto-resolved from token if omitted)STAGEHAND_SERVICE_URL(optional var; only for non-binding fallback)
B.1) Copy/Paste Setup Commands
Run from repo root:
# Stagehand service secrets
cd stagehand-service
bunx wrangler secret put BROWSERBASE_PROJECT_ID
bunx wrangler secret put BROWSERBASE_API_KEY
bunx wrangler secret put AI_API_KEY
# Orchestrator workers secrets
cd ../orchestrator-workers
bunx wrangler secret put AI_API_KEY
bunx wrangler secret put GITHUB_TOKEN
Non-secret vars (AI_PROVIDER, optional GITHUB_OWNER, optional STAGEHAND_SERVICE_URL) should be set in each project's wrangler.jsonc vars section (or in the Cloudflare dashboard for the Worker).
C) Service Binding Requirement
orchestrator-workers/wrangler.jsonc includes:
servicesbindingSTAGEHAND_SERVICE -> stagehand-service
The target script name must exactly match the deployed script name in Cloudflare.
If Cloudflare renames scripts in CI, update binding service to that exact deployed name.
D) Durable Object Migration Requirement
orchestrator-workers uses Sandbox DO and must keep migration configured:
"migrations": [{ "tag": "v1", "new_sqlite_classes": ["Sandbox"] }]
E) Post-deploy Smoke Test
After both deploy successfully:
curl -X POST "https://<orchestrator-domain>/debug/stagehand-smoke" \
-H "Content-Type: application/json" \
-d '{"websiteUrl":"https://example.com","task":"Observe the page and summarize content"}'
Expect:
ok: truetransport: "service-binding"(orurl-fallbackwhen using fallback URL mode)
Common Deployment Issues
Could not resolve service binding STAGEHAND_SERVICE:- Stagehand worker not deployed yet, wrong account, or wrong target script name.
STAGEHAND_SERVICE_URLfallback errors:- URL is wrong, host is down, or
/executeroute not reachable.
- URL is wrong, host is down, or
lockfile is frozen:- run
bun installlocally in that project, commit updatedbun.lock, redeploy.
- run
- Worker name mismatch warning in CI:
- align Cloudflare project worker name and
wrangler.jsoncname to avoid confusion.
- align Cloudflare project worker name and
Repo
Set your repository URL here after deployment.
Analysis
View
Metric
- 7
- 1
- 1
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- TypeScriptIn code
- Next.jsClaimed
- PythonClaimed
- Tailwind CSSClaimed
- VercelClaimed
2 of 6 appear in the indexed code. 4 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- CursorCommits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
481 KB
Source files
32
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
devnull03/pokeforge
49 files · 834 KB · @ b35e453
Structure
Application logic
30 files · 61%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript98%
- Markdown2%
- Shell0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
orchestrator-workers/package.json
npm · 13- @cloudflare/sandbox
- @modelcontextprotocol/sdk
- agents
- hono
- zod
- +8 more
stagehand-service/package.json
npm · 7- @browserbasehq/stagehand
- hono
- +5 more
discovery/package.json
npm · 5- @anthropic-ai/sdk
- @browserbasehq/stagehand
- dotenv
- +2 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.