Skip to main content
Glama
TrueNix
by TrueNix

kitesurf-bridge

Управляйте Cloudflare Kitesurf — браузером, ориентированным на агентов, который работает в изолятах V8 на Cloudflare Workers — откуда угодно. Ноль зависимостей, без локального Chrome.

Поставляется с четырьмя способами использования одного движка:

Интерфейс

Установка

Использование

MCP-сервер

npx -y github:TrueNix/kitesurf-bridge mcp

Claude Code, Cursor, Codex, любой MCP-клиент

CLI

npx -y github:TrueNix/kitesurf-bridge markdown <url>

оболочки, скрипты, CI

Библиотека

import { withSession } from 'kitesurf-bridge'

ваш собственный код на Node

Плагин DSH / Cordis

строка композиции

нативные инструменты в среде DSH

Команды установки ниже используют GitHub-спецификацию, которая работает сегодня без учётной записи в реестре. После публикации в npm как @truenix/kitesurf-bridge каждый github:TrueNix/kitesurf-bridge сокращается до @truenix/kitesurf-bridge.

npx -y github:TrueNix/kitesurf-bridge markdown https://news.ycombinator.com

Это отображает реальную страницу в реальном браузерном движке, в сети Cloudflare, без установленного локального браузера и без API-токена.


Почему это существует

Kitesurf не является открытым исходным кодом и не может работать на вашей машине. Cloudflare говорит, что намерен открыть его исходный код «когда мы будем готовы», и даже тогда заявленная цель — чтобы клиенты «развернули собственную версию Kitesurf в своих аккаунтах» — всё ещё на Workers.

В цикле разработки также нет локального Kitesurf: wrangler dev запускает ваш локальный Chrome, а не Kitesurf. Kitesurf существует только за browser=kitesurf на удалённых конечных точках.

Поэтому практический вопрос не в том, «можно ли запустить его локально», а в том, «можно ли управлять им из локального кода». Этот пакет и есть такой мост.

Установка

Как MCP-сервер

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"
      }
    }
  }
}

Доступные инструменты: kitesurf_markdown, kitesurf_text, kitesurf_html, kitesurf_links, kitesurf_screenshot, kitesurf_evaluate, kitesurf_accessibility_tree, kitesurf_probe.

Как плагин DSH / Cordis

# in an agent preset composition
- '@truenix/kitesurf-bridge/cordis':
    cli: npx -y github:TrueNix/kitesurf-bridge
    timeoutMs: 120000

Плагин регистрирует те же инструменты на хосте. Он намеренно вызывает CLI: динамическая половина хоста Cordis не имеет доступа к WebSocket, fetch или node:*, поэтому CDP нельзя открыть внутри песочницы. См. cordis/plugin.mjs.

Как библиотека

npm install github:TrueNix/kitesurf-bridge
import { 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 stdio

Полезные опции: --main, --raw, --full, --width, --height, --json, --endpoint, --account, --token, --timeout.

Эндпоинты

Песочница (по умолчанию)

Аккаунт

URL

wss://kitesurf.cloudflare.app/devtools/page/kitesurf

wss://api.cloudflare.com/.../devtools/browser?browser=kitesurf

Аутентификация

нет

Authorization: Bearer <token>

Цель

страница

браузер (страница создаётся и подключается автоматически)

Подходит для

оценки

продакшна

Установите CLOUDFLARE_ACCOUNT_ID + CLOUDFLARE_API_TOKEN (или CF_*) для переключения. Передача идентификатора аккаунта без токена — это жёсткая ошибка, а не тихий переход на общую песочницу.

[!WARNING] Песочница — это бесплатный, общий, неаутентифицированный ресурс без SLA. Подходит для оценки и локальной работы агентов — не стройте на ней продакшн.

Что стоит знать о Kitesurf

Это проверено на живом сервисе, а не скопировано из документации. kitesurf-bridge probe воспроизводит это.

Kitesurf не использует V8 для скриптов страниц — он использует Boa, JS-движок на Rust. Boa устанавливает гораздо более низкий предел рекурсии и выбрасывает RuntimeLimit: exceeded maximum number of recursive calls. Естественный рекурсивный обход DOM умирает на любой большой странице (Wikipedia, сайты документации). Поэтому конвертер Markdown в этом пакете обходит DOM с явным стеком, сохраняя глубину вызовов JS на уровне O(1). Если вы используете kitesurf_evaluate, предпочитайте итеративные выражения.

Ошибки навигации приходят как коды состояния edge Cloudflare, а не как ошибки CDP. Page.navigate возвращает обычные frameId/loaderId даже для несуществующего хоста, и Network.loadingFailed не срабатывает. Отсутствующий домен проявляется как HTTP 530, сломанный origin — как 520, оставляя документ-заглушку длиной ~16 символов. Доверие к Page.navigate даёт агенту пустую страницу и называет это успехом — поэтому этот пакет классифицирует результаты из домена Network и выбрасывает ошибку, когда статус >=400 приходит с пустым документом, при этом возвращая реальные страницы ошибок (с status), у которых есть читаемый контент.

Флаги возможностей (проверено):

✅ canvas2d, WebAssembly, shadow DOM, localStorage, куки, fetch/XHR, IntersectionObserver, MutationObserver

WebGL, ServiceWorker, воспроизведение видео/аудио, реальные TLS-fingerprint рукопожатия bot-challenge, долгоживущие аутентифицированные сессии

Для этого используйте вместо него браузер Chromium по умолчанию из Browser Run.

Компромисс по производительности (собственные данные Cloudflare): Kitesurf использует в 3–7 раз меньше CPU и памяти, чем тёплый Chromium, но в 1.7–1.8 раза медленнее по реальному времени. Этот выигрыш — на счету Cloudflare для пиковых облачных нагрузок агентов — он ничего не экономит на вашем собственном оборудовании. Если вам просто нужна локальная автоматизация браузера и у вас уже есть Chrome, локальный Playwright быстрее и поддерживает WebGL и видео.

Ноль зависимостей

package.json имеет пустой блок dependencies, в том числе для транспорта WebSocket.

Глобальный WebSocket в Node (WHATWG) не может отправлять заголовки запросов, а конечной точке аккаунта нужен Authorization: Bearer …. undici нельзя импортировать как отдельный модуль. Поэтому src/ws.mjs реализует клиент RFC 6455 напрямую поверх node:http(s) — рукопожатие, маскирование, фрагменты продолжения, 64-битные длины, ping/pong, закрытие — всё, что нужно CDP, с поддержкой заголовков.

Тесты

npm test                        # live tests against the playground
KITESURF_SKIP_NETWORK=1 npm test   # offline only

Набор тестов намеренно обращается к реальному сервису: интересные сбои (предел рекурсии Boa, усечение pipe, edge-коды состояния) проявляются только при работе с реальным сервисом.

Требования

Node ≥ 18. Без браузера, без API-токена, без шага сборки.

Лицензия

MIT

-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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.

View all MCP Connectors

Latest Blog Posts

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