Skip to main content
Glama

Playwright MCP на Render

Разверните Playwright MCP на Render в один клик. Получите размещённый сервер MCP с headless-Chromium, которым ваши ИИ-инструменты могут управлять по HTTP — без локальной установки браузера и без npx на каждой машине.

Deploy to Render

https://github.com/user-attachments/assets/0f31c279-f2e0-431f-a854-560677bd800c5

Что он делает

Playwright MCP — это сервер Model Context Protocotol, который позволяет LLM открывать настоящий браузер, переходить по страницам, кликать, вводить текст и читать страницы через структурированные accessibility-снимки (не скриншоты). Обычно он запускается локально через npx @playwright/mcp. Этот шаблон вместо этого запускает его как единый веб-сервис Render, таk что любой MCP-клиент может подключаться к общему HTTP -URL.

Это тонкая обёртка над официальным образом mcr.microsoft.com/playwright/mcp (headless Chromium уже встроен) — без измений исходного кода. Обёртка добавляет флаги, которые нужны Render (--headless, --no-sandbox, плюс --port и --allowed-hosts из окружения) and небolш گуз с beaer-токеном перед сервером, потом у that Prote. У Playwright MCP нет Auth Authentcation.

Аутентификация по умолчанию. Playwright MCP не имеет встроенной аутентификацией в HTTP -режиме and предоставляет инстумент, эквеваленt RCE, поэтому этот шаблон не публикует его прямой. Запросы обязаны содержать Authorization: Bearer $MCP_TOKEN; Render генерирует этот токен for you in deploy.

For full list of инстументов, options config файлав и настройки клиентов см. upstream Readme.

Related MCP server: WebControl

Архитектура

Оdin веб-сервис Render заускает официальный обрас PlayWright MCP за шлузом с beaer-токеном. MCP-клиент говорит по Streamable HTTP с /mcp на TLS-еrmинирующем еdge Render; шлю3 проверяet токен and переeжет запрос к MCP-серуver on loopback, котorый правит headless Chromium in the same container and return accessability snapshot.

┌─────────────┐   HTTPS /mcp    ┌────────────────────────────────────────────────┐
│  MCP client │ ──────────────► │ Render web service  (Docker, standard plan)    │
│ (Claude,    │  + Bearer       │                                                │
│  Cursor, …) │    token        │  render-entrypoint.sh                          │
│             │                 │    │ reads PORT, allowed hosts                 │
│             │  Streamable     │    ▼                                           │
│             │ ◄────────────── │  render-auth-proxy.mjs   :$PORT  (public)      │
└─────────────┘   snapshots     │    │ 401 unless the Bearer token matches       │
                                │    ▼                                           │
                                │  node /app/cli.js  127.0.0.1:8931  (loopback)  │
                                │    │                                           │
                                │    ▼                                           │
                                │  headless Chromium  (baked into base image)    │
                                └────────────────────────────────────────────────┘

Из чего соstavlenа «дедploy а»:

Fайл

Роль

render.yaml

Blueprint. Описивает единstvenный Docker-веб-сервис, его план/регион, перменную orкужения PORT и сгенер ensuring MCP_TOKEN. Именно его читает правая Deploy.

Dockerfile.render

Тонкая обёртка над mcr.microsoft.com/playwright/mcp (headless CHrom um already baked in). Adds only entry-int and auth gate — no browser loading and no source.

render-entrypoint.sh

Read PORT, вычесляет значение allowed-hosts, then launches exec the auth gate with a MCP-server bound to loopback.

render-auth-proxy.mjs

Pid 1. He has only Net.js with standard library, no dependencies: reject any request without Authorization: Bearer $MCP_TOKEN, с-ограничивает reattempts подбоora, and remaining прохоживае на 127.0.0.1:8931, supervises the MCP-server, держить публичный порт закрытымым поka серurvн doesn't accept соъединения, and forwards SIGTERM.

render-auth-limiter.mjs

Лимит скорости шка, removed separately because this is the only piece with a state that is worth testing in isolation: a fixed window with a maximum number of failed auth,counted across all clients. Importted by proxy так that Dockerfile must keep it too.

render-smoke-test.sh

Собирает обрат и проверяет обёртку end to end: без MCP_TOKEN отказается, без of header — 401, after repeated unfortunate headers — 429, correct handshake and настоящий like a browser tool with a correct token, чистый SIGTERM. CI kick it off at every pull request.

[.env.example](./. env.example)

Документируест те же параметры для local run of the container.

Ключевые своййства:

  • **Тонкая обёртка, не форк. The version of the MCP is fixed in skripDockerfile; update of thист on одне строка tag (см. Обновление Playсros MCP).

  • Нет базы даных, ничего.** to fill in. Единственный секret MCP_TOKEN creates Render in the deploy time. Браузер preserve Upstream's default permanent profile, так that logins are preserved through haа requests for в "life of the instance — sufficiently for "сервера", only perceive him, и именно that this suppose "темплайт" (см. Configuration).

  • Auth and fail-to-lock. The gate is added by this template, not earlier. If MCP TOKEN unset container does not started, поэтому no such config, при котором server accessible anonymous (см. Security).

Preconditions

Для deployment are needed:

  • Аккаунт Render, registration is free; service and уer works on платном типа instanses standard (see [Run «Deploy»(#deploy)).

  • GitHub-аккаунт to сделать fork of repository (кнопка Deploy читает render.yaml из repository, owned by you).

Никаки API keeys or strangers. Only one secret, MCP_TOKEN, you generated during deployment — you need only copy it to your MCP-client (см. Запурить).

Also run locally (optional — ** см. Run local):

  • Docker with buildkit (Docker Desptop 4.x+, or Doker Engine 23+). Dockerfile.render uses # yakti directive and COPY --chmod, both are Buildicket features.

  • MCP-client that can туренте прино, е.g. Claude Code, Cersor) or just curl.

You do not required Node.js, Playwright, or local Chromium — базовый обраs includes it all.

Deploy

  1. Нажмите Deploy to Renndre выше and vice versus in naск.

  2. Render preposes render.yaml and provisioned edin **Docker-web service (playwright-mcp) on standard plan.

  3. Pодите, until deploy no live. Ваш сервисях по адресу https://<your-service>.onrender.com/mcp.

  4. Cкопируйте MCP_TOKEN со one page Environment in Dashboard — Render generated for it. Ваш MCP client must send it as Authorization: Bearer <token> (см. Испольова. Пользования ion); without no every query get 401.

  5. Read Securекть before sent what-либо sensing at в neго. Tокен is единственный barring между internet and the code execution in this contein—apply as password — and outside secure в меру.

**Javerage hopping. Headless chromium OOOMs on placed with free/staterTariff (512 МВ), because this is what Blueprint means — standard (2 GB). Set the size only after you sure in your workload often footprint.

Using приложения

Van их

**Pприложение из launch. "Notable any MCP client on /mcp endpoint вашего service, sending MCP_TOKEN as a bearer token. Например, in Claude Code:

claude mcp add --transport http playwright https://<your-service>.onrender.com/mcp \
  --header "Authorization: Bearer <your-MCP_TOKEN>"

...

Else can записать him my enable "client config:

{
  "mcpServers": {
    "playwright": {
      "url": "https://<your-service>.onrender.com/mcp",
      "headers": {
        "Authorization": "Bearer <your-MCP_TOKEN>"
      }
    }
  }
}

**Starting at 401, then on a МCP клиенте — missing headers or token does not match the current value in Dashboard.

**Then ask you to the assistant to see sites from: *"Open example.com and tell me the title of the page and the heading of the main во ходный heading"` He will call your server computer MCP tools and return result.

Unlock недодимо run

**Lockal

** Вопnote, no do it not. If you need to change render-entrypoint.sh and see the effect before push.

git clone https://github.com/render-examples/playwright-mcp-render.git
cd playwright-mcp-render
cp .env.example .env          # then set MCP_TOKEN, e.g. to `openssl rand -hex 32`
docker build -f Dockerfile.render -t playwright-mcp-render .
docker run --rm --env-file .env -p 10000:10000 playwright-mcp-render

Когда гоументов, container prints upstream's own oracle Listening on …, and decrease for first line [аuth] Bearer-token gate listening … — в exactly this order: the "node" between —the public port closed until the server behind it has accept conesso. A [starter] line above outputit with an https:// URL — this scheme for the deployed server; local, use hart//.) Check server with MCP-handshake — Запомine the token from the .env, then the header below will resolve:

curl -sS -X POST http://localhost:10000/mcp \
  -H "Authorization: Bearer $MCP_TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'

Вы should receive serverInfo — block with name Playwright; Remove Authorization header — and get 401. Direct client to http://localhost:10000/mcp — the same as to deployed URL.

MCP_TOKEN is the only variable which you need to specify — container immediately stopped without it. The rest .envRENDER_DETERAL_HOSTNAME is absent outside Render, so the entrypoint already** additionally falls over PORT=10000 and stored **--allowed-hosts *.

**Ppreta skip Docker run the continuously? The upstream server running the same: npx @playwright/mcp@lastest --port 10000 — note this resolves to best that npm published in this snapshot, not the image tag fixed snapshot, and there in it no auth gate (this is snap appendix). That path does not the same at Render, that why you need to check modifications in container before «закрутив».

Configuring

All is set in render.yaml; .env.example dкомент the same options for local running.

Переменная

По умолчанию

На academе "задала"

PORT

``10000`

Порт, for which the authproxy is binding; Render routes to it.

MCP_TOKEN

генер.

**Обязателен. Bearer-token, which each query must have. The container without no will not be started. Rotate: измените значения (или нажмите Generate again) in Dashboardt and update it in clients.

UPSTREAM_PORT

10000

Loopback-port, on which the MCP after server is listening. requires TemporaryIf is conflicting deliver the container.

Произвите, но что-то помешато переводу. Пожалуйста, повторите запрос.

A
license - permissive license
B
quality
C
maintenance

Maintenance

0Releases (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

  • Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.

  • Live browser debugging for AI assistants — DOM, console, network via MCP.

  • Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.

  • Reliable web access for AI agents: smart HTTP, rotating proxies, and full-browser rendering.

View all MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to automate web tasks such as browsing, clicking, typing, and taking screenshots via the Model Context Protocol.
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Headless browser automation for LLM agents via REST API or MCP tools. Enables navigating pages, reading structured content, clicking elements, filling forms, and executing JavaScript.

View all related MCP servers

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/erlanov2023e/playwright-mcp-render-mt8x2ig6'

If you have feedback or need assistance with the MCP directory API, please join our Discord server