kitesurf-bridge
kitesurf-bridge
Treibe Cloudflare Kitesurf an — den agent-first Browser, der in V8-Isolaten auf Cloudflare Workers läuft — von überall. Null Abhängigkeiten, kein lokales Chrome.
Vier Wege, eine Engine zu nutzen:
Oberfläche | Installation | Verwendung |
MCP-Server |
| Claude Code, Cursor, Codex, jeder MCP-Client |
CLI |
| Shells, Skripte, CI |
Bibliothek |
| eigener Node-Code |
DSH / Cordis-Plugin | Kompositionszeile | native Tools in einer DSH-Umgebung |
Die Installationsbefehle unten verwenden die GitHub-Spezifikation, die heute ohne Registry-Konto funktioniert. Sobald als
@truenix/kitesurf-bridgeauf npm veröffentlicht, wird jedesgithub:TrueNix/kitesurf-bridgezu@truenix/kitesurf-bridgeverkürzt.
npx -y github:TrueNix/kitesurf-bridge markdown https://news.ycombinator.comDas rendert eine echte Seite in einer echten Browser-Engine, im Netzwerk von Cloudflare, ohne lokal installierten Browser und ohne API-Token.
Warum es das gibt
Kitesurf ist nicht Open Source und kann nicht auf deinem Rechner laufen. Cloudflare sagt, sie beabsichtigen, es "sobald wir bereit sind" als Open Source zu veröffentlichen, und selbst dann ist das erklärte Ziel, dass Kunden "ihre eigene Version von Kitesurf auf ihren eigenen Konten bereitstellen" — weiterhin auf Workers.
Es gibt auch kein lokales Kitesurf im Entwicklungszyklus: wrangler dev startet dein lokales Chrome, nicht Kitesurf. Kitesurf existiert nur hinter browser=kitesurf auf entfernten Endpunkten.
Die praktische Frage ist also nicht "kann ich es lokal ausführen", sondern "kann ich es von lokalem Code aus steuern". Dieses Paket ist diese Brücke.
Installation
Als MCP-Server
claude mcp add kitesurf -- npx -y github:TrueNix/kitesurf-bridge mcp{
"mcpServers": {
"kitesurf": {
"command": "npx",
"args": ["-y", "github:TrueNix/kitesurf-bridge", "mcp"]
}
}
}{
"mcpServers": {
"kitesurf": {
"command": "npx",
"args": ["-y", "github:TrueNix/kitesurf-bridge", "mcp"],
"env": {
"CLOUDFLARE_ACCOUNT_ID": "your-account-id",
"CLOUDFLARE_API_TOKEN": "your-browser-run-token"
}
}
}
}Bereitgestellte Tools: kitesurf_markdown, kitesurf_text, kitesurf_html, kitesurf_links, kitesurf_screenshot, kitesurf_evaluate, kitesurf_accessibility_tree, kitesurf_probe.
Als DSH / Cordis-Plugin
# in an agent preset composition
- '@truenix/kitesurf-bridge/cordis':
cli: npx -y github:TrueNix/kitesurf-bridge
timeoutMs: 120000Das Plugin registriert dieselben Tools auf dem Host. Es ruft bewusst die CLI auf: Eine dynamische Cordis-Host-Hälfte hat keinen Zugriff auf WebSocket, fetch oder node:*, daher kann CDP nicht innerhalb der Sandbox geöffnet werden. Siehe cordis/plugin.mjs.
Als Bibliothek
npm install github:TrueNix/kitesurf-bridgeimport { withSession } from '@truenix/kitesurf-bridge';
const md = await withSession({}, async (session) => {
await session.navigate('https://example.com');
return session.markdown();
});CLI
kitesurf-bridge <command> [options]
markdown <url> Extract the page as Markdown (main content by default)
text <url> Visible text only
html <url> Full serialized DOM after JS runs
links <url> Every anchor as JSON
screenshot <url> PNG/JPEG (-o file, --full)
pdf <url> PDF (-o file)
a11y <url> Filtered accessibility tree
eval <url> <expr> Evaluate JS in the page
probe Endpoint + engine capability report
mcp Run as an MCP server on stdioNützliche Optionen: --main, --raw, --full, --width, --height, --json, --endpoint, --account, --token, --timeout.
Endpunkte
Playground (Standard) | Konto | |
URL |
|
|
Auth | keine |
|
Ziel | Seite | Browser (eine Seite wird automatisch erstellt und angehängt) |
Geeignet für | Evaluierung | Produktion |
Setze CLOUDFLARE_ACCOUNT_ID + CLOUDFLARE_API_TOKEN (oder CF_*), um zu wechseln. Die Angabe einer Kontonummer ohne Token ist ein harter Fehler und kein stilles Downgrade auf den gemeinsamen Playground.
[!WARNUNG] Der Playground ist eine kostenlose, gemeinsame, nicht authentifizierte Ressource ohne SLA. Für Evaluierung und lokale Agentenarbeit in Ordnung — baue keine Produktion darauf auf.
Wissenswertes über Kitesurf
Diese Punkte sind gegen den Live-Dienst verifiziert, nicht aus Dokumentationen kopiert. kitesurf-bridge probe reproduziert sie.
Kitesurf führt für Seiten-Skripte nicht V8 aus — es läuft Boa, eine Rust-JS-Engine. Boa erzwingt ein viel niedrigeres Rekursionslimit und wirft RuntimeLimit: exceeded maximum number of recursive calls. Ein natürlicher rekursiver DOM-Durchlauf stirbt auf jeder großen Seite (Wikipedia, Doku-Seiten). Der Markdown-Konverter dieses Pakets durchläuft das DOM daher mit einem expliziten Stack und hält die JS-Aufruftiefe bei O(1). Wenn du kitesurf_evaluate verwendest, bevorzuge iterative Ausdrücke.
Navigationsfehler erscheinen als Cloudflare-Edge-Statuscodes, nicht als CDP-Fehler. Page.navigate gibt selbst für einen nicht existierenden Host eine normale frameId/loaderId zurück, und kein Network.loadingFailed wird ausgelöst. Eine fehlende Domain erscheint als HTTP 530, eine defekte Origin als 520, wobei ein ~16 Zeichen langes Platzhalterdokument zurückbleibt. Wenn man Page.navigate vertraut, bekommt ein Agent eine leere Seite und nennt das Erfolg — daher klassifiziert dieses Paket Ergebnisse aus der Network-Domain und wirft einen Fehler, wenn ein >=400-Status mit einem leeren Dokument einhergeht, während echte Fehlerseiten (mit status) mit lesbarem Inhalt weiterhin zurückgegeben werden.
Fähigkeits-Flags (verifiziert):
✅ canvas2d, WebAssembly, Shadow DOM, localStorage, Cookies, | |
❌ WebGL, ServiceWorker, Video-/Audio-Wiedergabe, echte TLS-Fingerprint-Bot-Challenge-Handshakes, langlebige authentifizierte Sitzungen |
Verwende dafür stattdessen den Standard-Chromium-Browser von Browser Run.
Leistungsabwägung (Cloudflares eigene Zahlen): Kitesurf verbraucht 3–7× weniger CPU und Speicher als warmes Chromium, ist aber 1,7–1,8× langsamer in der Wanduhrzeit. Dieser Gewinn liegt auf Cloudflares Rechnung für stoßweise Cloud-Agent-Workloads — er spart nichts auf deiner eigenen Hardware. Wenn du nur lokale Browser-Automatisierung willst und bereits Chrome hast, ist lokales Playwright schneller und kann WebGL und Video.
Null Abhängigkeiten
package.json hat einen leeren dependencies-Block, einschließlich für den WebSocket-Transport.
Node's globales WebSocket (WHATWG) kann keine Request-Header senden, und der Konto-Endpunkt benötigt Authorization: Bearer …. undici ist nicht als eigenständiges Modul importierbar. Daher implementiert src/ws.mjs den RFC-6455-Client direkt über node:http(s) — Handshake, Maskierung, Fortsetzungsfragmente, 64-Bit-Längen, Ping/Pong, Close — was alles ist, was CDP mit Header-Unterstützung braucht.
Tests
npm test # live tests against the playground
KITESURF_SKIP_NETWORK=1 npm test # offline onlyDie Suite trifft absichtlich den echten Dienst: Die interessanten Fehler (Boas Rekursionslimit, Pipe-Trunkierung, Edge-Statuscodes) treten nur gegen das echte System auf.
Anforderungen
Node ≥ 18. Kein Browser, kein API-Token, kein Build-Schritt.
Lizenz
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/TrueNix/kitesurf-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server