Skip to main content
Glama
TrueNix
by TrueNix

kitesurf-bridge

어디서나 Cloudflare Kitesurf — Cloudflare Workers의 V8 isolate에서 실행되는 에이전트 우선 브라우저 — 를 구동하세요. 의존성 제로, 로컬 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

이것은 로컬에 브라우저가 설치되어 있지 않고 API 토큰도 없이, Cloudflare 네트워크에서 실제 브라우저 엔진으로 실제 페이지를 렌더링합니다.


왜 필요한가

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_*)을 설정하여 전환하세요. 토큰 없이 계정 ID를 제공하면 공유 플레이그라운드로 조용히 다운그레이드되는 대신 하드 오류가 발생합니다.

[!WARNING] 플레이그라운드는 무료, 공유, 인증되지 않은 리소스이며 SLA가 없습니다. 평가 및 로컬 에이전트 작업에는 적합하지만 — 프로덕션을 구축하지 마세요.

Kitesurf에 대해 알아두면 좋은 사항

이 내용은 문서에서 복사한 것이 아니라 실제 서비스에 대해 검증된 것입니다. kitesurf-bridge probe가 이를 재현합니다.

Kitesurf는 페이지 스크립트에 V8을 실행하지 않고 Boa — Rust JS 엔진 — 을 실행합니다. Boa는 훨씬 낮은 재귀 한도를 적용하며 RuntimeLimit: exceeded maximum number of recursive calls를 던집니다. 자연스러운 재귀 DOM 탐색은 큰 페이지(위키백과, 문서 사이트)에서 죽습니다. 따라서 이 패키지의 Markdown 변환기는 명시적 스택으로 DOM을 탐색하여 JS 호출 깊이를 O(1)로 유지합니다. kitesurf_evaluate를 사용한다면 반복 표현식을 선호하세요.

탐색 실패는 CDP 오류가 아닌 Cloudflare 엣지 상태 코드로 도착합니다. Page.navigate는 존재하지 않는 호스트에 대해서도 정상적인 frameId/loaderId를 반환하며 Network.loadingFailed는 발생하지 않습니다. 존재하지 않는 도메인은 HTTP 530으로, 손상된 오리진은 520으로 나타나며 ~16자짜리 플레이스홀더 문서가 남습니다. Page.navigate를 신뢰하면 에이전트가 빈 페이지를 받고 성공으로 처리합니다 — 그래서 이 패키지는 Network 도메인에서 결과를 분류하고 빈 문서와 함께 >=400 상태가 오면 예외를 던지며, 읽을 수 있는 콘텐츠가 있는 실제 오류 페이지(status 포함)는 계속 반환합니다.

기능 플래그(검증됨):

✅ canvas2d, WebAssembly, shadow DOM, localStorage, cookies, fetch/XHR, IntersectionObserver, MutationObserver

WebGL, ServiceWorker, 비디오/오디오 재생, 실제 TLS 핑거프린트 봇 챌린지 핸드셰이크, 장기 인증 세션

이러한 기능이 필요하면 대신 Browser Run의 기본 Chromium 브라우저를 사용하세요.

성능 트레이드오프(Cloudflare 자체 수치): Kitesurf는 웜 Chromium보다 CPU와 메모리를 3–7배 적게 사용하지만 벽시계 시간은 1.7–1.8배 느립니다. 이 이점은 버스트성 클라우드 에이전트 워크로드에 대한 Cloudflare의 청구서에 대한 것입니다 — 사용자 하드웨어에서는 아무것도 절약되지 않습니다. 로컬 브라우저 자동화만 원하고 이미 Chrome이 있다면 로컬 Playwright가 더 빠르고 WebGL과 비디오도 지원합니다.

의존성 제로

package.json에는 WebSocket 전송을 포함하여 dependencies 블록이 비어 있습니다.

Node의 전역 WebSocket(WHATWG)은 요청 헤더를 보낼 수 없으며, 계정 엔드포인트에는 Authorization: Bearer …가 필요합니다. undici는 독립 모듈로 가져올 수 없습니다. 따라서 src/ws.mjsnode:http(s) 위에서 RFC 6455 클라이언트를 직접 구현합니다 — 핸드셰이크, 마스킹, 연속 프래그먼트, 64비트 길이, ping/pong, close — CDP에 필요한 모든 것이며 헤더 지원이 포함됩니다.

테스트

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

이 스위트는 의도적으로 실제 서비스를 대상으로 합니다: 흥미로운 실패(Boa의 재귀 한도, 파이프 잘림, 엣지 상태 코드)는 실제 서비스에서만 나타납니다.

요구 사항

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