Browser Use
Browser agents and stealth cloud browsers for AI: run web tasks, fill forms, extract data.
제작자가 쓴 설명(영어 원문)
Read, crawl and act on websites, signed in as the user, and turn any site into an API.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
WRIT_API_KEY비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
웹, 데스크톱, 모바일의 Claude에서 쓸 수 있어요:
https://api.usewrit.app/mcpClaude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"writ-cloud": {
"command": "npx",
"args": [
"-y",
"writ-mcp"
],
"env": {
"WRIT_API_KEY": "your-value"
}
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add --transport http writ-cloud https://api.usewrit.app/mcpclaude mcp add writ-cloud --env WRIT_API_KEY=your-value -- npx -y writ-mcp실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"writ-cloud": {
"url": "https://api.usewrit.app/mcp"
}
}
}프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"writ-cloud": {
"command": "npx",
"args": [
"-y",
"writ-mcp"
],
"env": {
"WRIT_API_KEY": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"writ-cloud": {
"type": "http",
"url": "https://api.usewrit.app/mcp"
}
}
}프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"writ-cloud": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"writ-mcp"
],
"env": {
"WRIT_API_KEY": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요:
https://api.usewrit.app/mcp메뉴 이름은 요금제나 시기에 따라 조금 다를 수 있어요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
아직 이 서버의 도구 목록을 읽지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 7일 점검
레지스트리 이름이 도메인 usewrit.app 기준으로 확인되었어요(레지스트리가 도메인 소유를 확인해요)
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요
아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요
아직 점검하지 않았어요. 엔드포인트를 점검할 때 도구 목록을 읽어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: WRIT_API_KEY
둘 다 가능해요. 내 컴퓨터에 설치해도 되고, 클라우드 버전에 연결해도 돼요.
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(1.0.0)은 27일 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되기 때문에, 원격 MCP 서버를 지원하는 앱(예: 개발자 모드의 ChatGPT)에서도 쓸 수 있어요.
같은 카테고리에는: Browser Use, Chrome DevTools MCP, MCP Server Browser
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
Browser agents and stealth cloud browsers for AI: run web tasks, fill forms, extract data.
MCP server for Chrome DevTools
MCP server for browser use access
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
Your saved browser workflows, as tools your assistant can call.
Quick start · Tools · Configuration · Security · Troubleshooting · Contributing
writ-mcp connects a stdio MCP client — Claude Code, Claude Desktop, Cursor, Windsurf, Codex — to Writ, so the browser workflows you already recorded become tools your assistant can call: run them, read the data they collected, search past results, schedule them, expose them as REST endpoints, and kick off site crawls.
It is a transparent stdio↔HTTP proxy and nothing else. Every tool, schema and rule lives server-side, so what you get always matches what your instance can do — and a new tool never requires upgrading this package. Zero dependencies, one file, Node core only.
Clients that speak Streamable HTTP natively don't need this at all — point them
straight at the
/mcpendpoint with anAuthorization: Bearerheader.
1. Get an API key. In the Writ app: Settings → Developers → API keys. Keys look like wt_….
2. Add the server.
Against a self-hosted coordinator:
claude mcp add writ-selfhost -e WRIT_API_KEY=<YOUR_API_KEY> -- npx -y writ-mcp --url https://writ.example.com
Against a coordinator on this machine:
claude mcp add writ-selfhost -e WRIT_API_KEY=<YOUR_API_KEY> -- npx -y writ-mcp --url http://localhost:8000
Against a published per-workflow endpoint (an "Expose as MCP" slug URL is used verbatim — no path rewriting):
claude mcp add my-tools -e WRIT_API_KEY=<YOUR_API_KEY> -- npx -y writ-mcp --url https://mcp.example.com/mcp/my-tools
3. Check it.
claude mcp list
Writ Cloud is the default target when you pass no
--url
(
https://api.usewrit.app). Pass--urlto point the connector at your own
coordinator instead. See Status.
Pass the key through the environment, not the command line.
--api-key
works, but it puts your key in the process's argument list where any local
process can read it via
ps, and your shell records it in history. The
connector prints a note when you use it.
Your running coordinator also hands out these one-liners, pre-filled, on its Connect page and at GET /api/mcp/connect-info:
Add to claude_desktop_config.json (Claude Desktop) or ~/.cursor/mcp.json (Cursor). The env form is recommended — it keeps the key out of the argument list:
{
"mcpServers": { "writ-selfhost": { "command": "npx", "args": ["-y", "writ-mcp"], "env": { "WRIT_COORDINATOR_URL": "https://writ.example.com", "WRIT_API_KEY": " " } } } }
A self-host install bundles this connector at connectors/writ-mcp. There is no build step, so you can run it straight from disk:
node /path/to/writ/connectors/writ-mcp/index.js --url https://writ.example.com
It coexists with the other Writ servers. Each surface registers under its
own slug on purpose — the desktop app is
writ, Writ Cloud iswrit-cloud, a
self-hosted coordinator is
writ-selfhost— and each identifies itself to the
assistant with a distinct title. Keep any combination connected at once.
Served by the server you connect to, not by this package, so a new server tool reaches you without a connector update. Writ Cloud lists the 39 tools below; a self-hosted coordinator lists the ones marked in its column.
| Tool | What it does | Writ Cloud | Self-hosted |
|---|---|---|---|
writ_list_workflows | Your saved workflows (a run_ tool is added only for workflows you pin) | yes | yes |
writ_run_workflow | Run one and wait for the extracted data | yes | yes |
writ_pin_workflow_tool | Pin or unpin a workflow as its own run_ tool — off by default, capped; everything still runs via writ_run_workflow | yes | yes |
writ_update_workflow | Read a workflow's outline or edit it in place (settings, steps, functions, its agent skill) | yes | yes |
writ_diagnose_http_workflow | Show what every request of a run was answered with, and whether it ran without a browser | yes | no |
writ_create_http_extraction | Author a multi-request browserless extraction from captured requests | yes | no |
writ_workflow_data | Read a workflow's accumulated data table | yes | yes |
writ_search_data | Search across everything already collected | yes | yes |
writ_export_data | Export a workflow's data as CSV/JSON | yes | yes |
writ_workflow_runs | Run history and status | yes | yes |
writ_set_schedule | Schedule a workflow (interval / daily / weekly) | yes | yes |
writ_expose_workflow_api | Publish a workflow as a callable REST endpoint | yes | yes |
writ_scrape | Read a page, or several, as clean markdown (Cloud also reads a listing's top N) | yes | yes |
writ_crawl_site / writ_crawl_status | Start and poll a distributed site crawl | yes | yes |
writ_crawl_files | The original documents a crawl captured (PDFs, office files, images) | yes | no |
writ_saved_crawls / writ_run_saved_crawl / writ_saved_crawl_data | Saved crawls (see below) | yes | yes |
writ_update_saved_crawl | Inspect or change a saved crawl's settings | yes | no |
writ_personas | See your saved sign-in identities and get them ready (see below) | yes | yes |
writ_payment | Pay with a card the user approves; Writ places the order once they confirm | yes | no |
writ_devices | Your linked Writ desktops: list them, or point this connection at one | yes | no |
writ_create_automation | Event or clock → run a workflow, notify, or wake an agent | yes | yes |
writ_list_webhooks | Your inbound webhook URLs and the automations they fire | yes | yes |
writ_create_monitor / writ_wire_monitor | Watch a page and react to changes | yes | yes |
writ_browser_use | Open a real browser your assistant drives turn by turn | yes | yes |
writ_record_website | Record a repeatable task as a workflow | yes | yes |
writ_website_to_api | Turn a website into a callable API | yes | yes |
writ_discovery_status | Follow an API build to its result | yes | no |
writ_browser_act / _context / _network / _save / _cancel | Act in the browser, read the page and its network calls, save or close the session | yes | yes |
writ_browser_compose | Define named functions, inputs and explicit steps in a session | yes | no |
writ_browser_ask_user | Hand a CAPTCHA, a code or a decision to the user in the live browser | yes | no |
writ_browser_sessions | Open browser sessions you can resume | yes | no |
writ_record_start / _act / _context / _network / _save / _cancel | Older names of the browser loop, kept for compatibility | no | yes |
The build tools (writ_browser_use, writ_record_website, writ_website_to_api, then writ_browser_act / _context / _network / _save / _cancel) are on both targets; neither has a writ_build tool, so use writ_record_website. Your assistant opens a real browser, drives it turn by turn, and saves the session as a reusable workflow that afterwards replays with no model in the loop. Writ Cloud runs it on Writ's fleet; a self-hosted coordinator runs it on your own fleet agent. Either way your assistant is the brain — no second model key is involved.
max_age)Running a workflow drives a real browser, so asking the same question twice in one session costs two full runs and two waits. Every workflow tool takes an optional `max_age` (seconds) meaning *a recent answer is good enough*:
{ "name": "run_price_check", "arguments": { "sku": "B0C123", "max_age": 300 } }
N seconds, otherwise run.A reused answer carries _cache: {hit: true, age_seconds: N} so the assistant can tell how current it is.
max_age works identically against Writ Cloud and a self-hosted coordinator, and on a pinned workflow's own run_ tool as well as writ_run_workflow.
writ_run_saved_crawl)A whole-site crawl is slow and metered, so re-crawling to answer the same question is the most expensive mistake an assistant can make. A saved crawl is a stored crawl configuration with a stable name, and the same max_age contract applies to it:
{ "name": "writ_run_saved_crawl", "arguments": { "crawl": "docs", "max_age": 86400 } }
writ_crawl_status (a crawl outlives a single tool call).Three tools cover the surface:
| Tool | What it does |
|---|---|
writ_saved_crawls | List saved crawls. Check here before crawling a site again. |
writ_run_saved_crawl | Run one, reusing recent data when max_age allows. |
writ_saved_crawl_data | Read what one already collected, at any age. Never crawls. |
To create one, pass save_as to writ_crawl_site — that saves the settings *and* runs them, so the crawl becomes callable by REST as well. Re-using the same save_as updates that saved crawl instead of piling up duplicates. Saving needs an admin-scoped credential (it creates reusable, callable configuration); running one needs only run.
writ_personas)A persona is a saved sign-in identity — username, credentials sealed server-side, optional 2FA, and a warm signed-in session. writ_personas lists yours (with per-persona readiness), inspects one (get), refreshes its session by running its login workflow (sign_in), or has the AI record the sign-in flow once so the persona can sign itself in from then on (record_login). The assistant then passes a persona_id to writ_run_workflow (and each pinned run_ tool), writ_crawl_site, or writ_scrape — p
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요