Deploy browser automations from any MCP client in one call

TL;DR
đ Kernel MCP Server (open source)
â One server to deploy browser automations, spin up hosted browsers, search our docs, and more
â Works with Cursor, Goose, Claude, and all major MCP clients
Try it: https://mcp.onkernel.com/mcp
Star it: github.com/onkernel/kernel-mcp-server
Why we built this
Kernel is a developer platform to deploy and invoke browser automations without managing infrastructure. We wanted to give MCP clients instant access to deploy apps, spin up cloud-hosted browsers, and search docsâno CLI, no Docker, no local setup.
What you get
- Deploy / invoke Kernel apps
- Launch cloud browsers (headless/headful)
- Stream logs over HTTP
- Search Kernel docs inline
- Works with Cursor, Goose, Claude, and other major MCP clients
What it exposes
Apps
list_apps
: List all apps in your organizationdeploy_app
: Deploy a TypeScript or Python Kernel app
Actions
invoke_action
: Trigger an action and stream logsget_invocation
: Fetch the final result of an invocation
Deployments
list_deployments
: View all app deployments in your orgget_deployment
: Get details on a specific deployment
Browsers
create_browser
: Launch a browser instance (headless or headful)list_browsers
: List active browser sessionsget_browser
: Get browser statedelete_browser
: Shut down a browser
Docs
search_docs
: Search Kernelâs API docs inline from chat
The path we took
Early attempts with FastMCP
We initially started with the Typescript version of fastmcp
. It was lightweight and clean, but it didnât support Clerk OAuth out-of-the-box. In particular, we wanted a UI for selecting an org post-login, custom token handling, and cookie/session flows. Next.js gave us everything we needed in one placeâauth UI, backend routes, edge deployabilityâso we made the switch early and didnât look back.
Linear-level UX
Once we had the basics live, we wanted to develop a seamless install flow. Linear has been a team favorite for how easy it is to connect and use in our Cursor IDEs. We weren't alone in noticing how smooth their flow is.
As it turns out, they were fully compliant with the OAuth flow defined in the MCP spec. We did the same and got the magical âone click installâ button in Cursor tooâfor free.

Adding docs search
Mintlify offers its own MCP server for docs search. We first considered running both that and our platformâs MCP server side-by-side, but that felt clunky. So we added search_docs
directly into our server. Agents building on Kernelâs platform can query Kernel docs inline without leaving their IDE or chat window.

Fileless deployments are currently a necessary hack
Our deploy flow expects a file tree, but remote MCP servers canât access the local filesystem. So we specified the deploy tool to enumerate all required files and pass them as raw source in a dict: { "src/index.ts": "...", "package.json": "..." }
. Itâs slowâespecially for larger projectsâbut it works. Some tool calls take 10â30 seconds to get parameters built. Not ideal, but it allows MCP clients to deploy agent-generated code.
Clerk doesnât support org-aware OAuth (yet)
Clerk's out-of-the-box OAuth is user-scoped, but Kernelâs schema is org-first. To solve this, we added an additional onboarding screen:
- After installing the MCP server, the user is redirected to authenticate with Kernel through Clerk
- Then we redirect users to a
/select-org
screen, cache theirorg_id
in Redis, and inject it into their JWT for all future requests.

This allows us to distinguish the userâs selected org in MCP tool calls. Bonus: the Clerk team saw what we built and added org-scoped OAuth to their roadmap.
Under the hood

- Built in Next.js, deployed on Vercel
- All MCP logic runs through
@vercel/mcp-adapter
in a single routeâit handlesevery tool call - Clerk OAuth powers auth
- If you donât need org-scoped flows, Clerk gives you everything out of the box
- They recently added Dynamic Client Registration, which makes setup with MCP clients dead simple
- We added a custom
/select-org
step post-login and store the mapping in Redis for lookup on our backend - JSZip builds an in-memory project zip during deploys
- Tool responses stream back via HTTP
- Mintlify search wired into
search_docs
Limitations & roadmap
- Org-scoped OAuth isnât yet supported
- Agents writing source code to build tool params works but is brittle.
- The better long-term answer is probably via MCP resources once more clients support them. That would let us reference file handles instead of injecting entire files inline.
Ready to deploy
This server powers our own Kernel agentsâbut itâs fully open source and ready for yours too.
Compatible with Cursor, Goose, Claude, and any MCP client.
đ Deploy your first app
â Star the repo if this saved you a weekend