> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Anchor Browser MCP server

The Anchor Browser MCP connector routes your AI agent's tool calls to Anchor Browser's own MCP server through Scalekit. Each user signs in to Anchor Browser once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 25 tools.

**Authentication:** OAuth 2.1/DCR
**Categories:** AI, Automation, Developer Tools
**Tools:** 25: 9 read, 16 write, 0 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=ANCHORBROWSERMCP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Anchor Browser MCP connection

   In **AgentKit > Connections**, create an Anchor Browser MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   Scalekit credentials are available for Anchor Browser MCP server, so you don't need to register an OAuth app.

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'anchorbrowsermcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Anchor Browser MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'anchorbrowsermcp_anchor_console_messages',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "anchorbrowsermcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Anchor Browser MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="anchorbrowsermcp_anchor_console_messages",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'anchorbrowsermcp_anchor_console_messages',
  toolInput: {},
  connector: 'anchorbrowsermcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="anchorbrowsermcp_anchor_console_messages",
    tool_input={},
    connection_name="anchorbrowsermcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `anchorbrowsermcp_anchor_console_messages`

Get Console Messages · Read-only

Returns all console messages captured since the current page was loaded. Use this to inspect JavaScript log output, warnings, and errors for debugging or validation purposes.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `anchorbrowsermcp_anchor_generate_playwright_code`

Generate Playwright Code · Read-only

Generate a Playwright test script for a given scenario described as a series of steps. Provide a test name, description, and ordered list of step instructions; the tool returns runnable Playwright code. Use this to automate browser test authoring from natural language instructions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `description` (`string`, required): The description of the test
- `name` (`string`, required): The name of the test
- `steps` (`array`, required): The steps of the test

Example input: `{"description":"<description>","name":"<name>","steps":[]}`

### `anchorbrowsermcp_anchor_get_body_html`

Get Body HTML · Read-only

Get the HTML content of the body element from the current page, or of a specific element when a selector is provided. Useful for identifying the DOM structure and locating paths to important elements. By default, comments, scripts, styles, images, and SVGs are excluded to keep the output concise.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `slimResponse` (`boolean`, required): Whether to exclude HTML comments, script tags, style tags, images and svgs in the output (default: true). Default: `true`.
- `selector` (`string`, optional): The selector of the element to be saved for example: .class-name, #id, etc.

Example input: `{"slimResponse":true}`

### `anchorbrowsermcp_anchor_network_requests`

List Network Requests · Read-only

Returns all network requests captured since the current page was loaded. Use this to inspect API calls, resource loads, and HTTP traffic for debugging, auditing, or understanding page behavior.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `anchorbrowsermcp_anchor_pdf_save`

Save Page as PDF · Read-only

Save the current browser page as a PDF file. Useful for archiving page content, generating printable reports, or capturing rendered page state as a document. An optional filename can be specified; otherwise a timestamped default is used.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `filename` (`string`, optional): File name to save the pdf to. Defaults to `page-{timestamp}.pdf` if not specified.

Example input: `{}`

### `anchorbrowsermcp_anchor_snapshot`

Capture Accessibility Snapshot · Read-only

Capture an accessibility snapshot of the current page. This produces a structured representation of the page's accessible elements (roles, labels, states), which is more useful than a screenshot for planning and executing further interactions. Use this to understand page structure before performing actions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `anchorbrowsermcp_anchor_tab_list`

List Browser Tabs · Read-only

List all currently open tabs in the cloud browser session, returning their indices and titles or URLs. Use this to inspect available tabs before selecting or closing one.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `anchorbrowsermcp_anchor_take_screenshot`

Take Screenshot · Read-only

Take a screenshot of the current browser page or a specific element. Returns a JPEG image by default (or PNG when raw mode is enabled). Use this to visually inspect page state; note that screenshots cannot be used as input for further actions — use anchor_snapshot instead when you need to interact with elements.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `element` (`string`, optional): Human-readable element description used to obtain permission to screenshot the element. If not provided, the screenshot will be taken of viewport. If element is provided, ref must be provided too.
- `filename` (`string`, optional): File name to save the screenshot to. Defaults to `page-{timestamp}.{png|jpeg}` if not specified.
- `raw` (`boolean`, optional): Whether to return without compression (in PNG format). Default is false, which returns a JPEG image.
- `ref` (`string`, optional): Exact target element reference from the page snapshot. If not provided, the screenshot will be taken of viewport. If ref is provided, element must be provided too.

Example input: `{}`

### `anchorbrowsermcp_anchor_wait_for`

Wait For · Read-only

Pause the automation until a specified text appears on the page, a specified text disappears from the page, or a given number of seconds elapses. Use this to synchronize with dynamic page content loading or transitions before taking the next action.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `text` (`string`, optional): The text to wait for
- `textGone` (`string`, optional): The text to wait for to disappear
- `time` (`number`, optional): The time to wait in seconds

Example input: `{}`

### `anchorbrowsermcp_anchor_click`

Click Element · Write

Perform a click on an element in the cloud browser page. Use `element` to provide a human-readable description of the target (e.g. 'Submit button') and `ref` to supply the exact element reference obtained from a prior `anchor_snapshot` accessibility snapshot. Optionally set `doubleClick` to true to perform a double-click instead.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `element` (`string`, required): Human-readable element description used to obtain permission to interact with the element
- `ref` (`string`, required): Exact target element reference from the page snapshot
- `doubleClick` (`boolean`, optional): Whether to perform a double click instead of a single click

Example input: `{"element":"<element>","ref":"<ref>"}`

### `anchorbrowsermcp_anchor_close`

Close Browser · Write

Close the current browser page and end the active cloud browser session. Use this to cleanly terminate a session when automation is complete.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs: none.

Example input: `{}`

### `anchorbrowsermcp_anchor_drag`

Drag and Drop · Write

Perform a drag-and-drop operation between two elements in the cloud browser page. Provide human-readable descriptions for both the source (`startElement`) and target (`endElement`), along with their exact element references (`startRef`, `endRef`) obtained from a prior `anchor_snapshot` accessibility snapshot. Useful for reordering list items, moving cards between columns, or resizing elements.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `endElement` (`string`, required): Human-readable target element description used to obtain the permission to interact with the element
- `endRef` (`string`, required): Exact target element reference from the page snapshot
- `startElement` (`string`, required): Human-readable source element description used to obtain the permission to interact with the element
- `startRef` (`string`, required): Exact source element reference from the page snapshot

Example input: `{"endElement":"<endElement>","endRef":"<endRef>","startElement":"<startElement>","startRef":"<startRef>"}`

### `anchorbrowsermcp_anchor_file_upload`

Upload Files · Write

Upload one or more files to the cloud browser page via a file input element. Provide an array of absolute file paths on the server where the browser session is running. Supports single or multiple file uploads to any `<input type='file'>` element that has been activated on the page.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `paths` (`array`, required): The absolute paths to the files to upload. Can be a single file or multiple files.

Example input: `{"paths":[]}`

### `anchorbrowsermcp_anchor_handle_dialog`

Handle Dialog · Write

Accept or dismiss a browser dialog (alert, confirm, or prompt) that has appeared in the cloud browser page. Set `accept` to true to confirm/accept the dialog, or false to cancel/dismiss it. For prompt dialogs that require text input, provide the response text in `promptText`.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `accept` (`boolean`, required): Whether to accept the dialog.
- `promptText` (`string`, optional): The text of the prompt in case of a prompt dialog.

Example input: `{"accept":true}`

### `anchorbrowsermcp_anchor_hover`

Hover Over Element · Write

Hover the mouse cursor over an element in the cloud browser page without clicking it. Use `element` to provide a human-readable description of the target and `ref` to supply the exact element reference from a prior `anchor_snapshot` accessibility snapshot. Useful for revealing tooltips, dropdown menus, or other hover-triggered UI states.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `element` (`string`, required): Human-readable element description used to obtain permission to interact with the element
- `ref` (`string`, required): Exact target element reference from the page snapshot

Example input: `{"element":"<element>","ref":"<ref>"}`

### `anchorbrowsermcp_anchor_navigate`

Navigate to URL · Write

Navigate the cloud browser to a specified URL, loading the page in the current tab. Use this tool to start browsing a site, follow a link programmatically, or move to any web address during an automation session.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `url` (`string`, required): The URL to navigate to

Example input: `{"url":"<url>"}`

### `anchorbrowsermcp_anchor_navigate_back`

Navigate Back · Write

Go back to the previous page in the browser history, equivalent to clicking the browser's Back button. Use this to return to a prior page after following a link or submitting a form.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs: none.

Example input: `{}`

### `anchorbrowsermcp_anchor_navigate_forward`

Navigate Forward · Write

Go forward to the next page in the browser history, equivalent to clicking the browser's Forward button. Use this after navigating back to re-advance to a page you previously visited.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs: none.

Example input: `{}`

### `anchorbrowsermcp_anchor_press_key`

Press Key · Write

Press a keyboard key or key combination in the cloud browser page. Accepts named keys (e.g. `ArrowLeft`, `Enter`, `Tab`, `Escape`) or single characters (e.g. `a`, `1`). Useful for keyboard navigation, submitting forms, triggering shortcuts, or dismissing dialogs without using the mouse.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `key` (`string`, required): Name of the key to press or a character to generate, such as `ArrowLeft` or `a`

Example input: `{"key":"<key>"}`

### `anchorbrowsermcp_anchor_resize`

Resize Browser Window · Write

Resize the browser window to the specified width and height in pixels. Use this to test responsive layouts, simulate different device viewports, or prepare the browser state before capturing screenshots or snapshots.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `height` (`number`, required): Height of the browser window
- `width` (`number`, required): Width of the browser window

Example input: `{"height":1,"width":1}`

### `anchorbrowsermcp_anchor_select_option`

Select Dropdown Option · Write

Select one or more options in a dropdown or select element in the cloud browser page. Use `element` to provide a human-readable description of the dropdown and `ref` to supply the exact element reference from a prior `anchor_snapshot` accessibility snapshot. Pass one or more option values in the `values` array to select.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `element` (`string`, required): Human-readable element description used to obtain permission to interact with the element
- `ref` (`string`, required): Exact target element reference from the page snapshot
- `values` (`array`, required): Array of values to select in the dropdown. This can be a single value or multiple values.

Example input: `{"element":"<element>","ref":"<ref>","values":[]}`

### `anchorbrowsermcp_anchor_tab_close`

Close Tab · Write

Close a browser tab by its index, or close the currently active tab if no index is specified. Use this to clean up tabs that are no longer needed during a multi-tab automation session.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `index` (`number`, optional): The index of the tab to close. Closes current tab if not provided.

Example input: `{}`

### `anchorbrowsermcp_anchor_tab_new`

Open New Tab · Write

Open a new browser tab in the cloud session, optionally navigating it to a specified URL. If no URL is provided, the new tab opens blank. Use this to work across multiple pages simultaneously.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `url` (`string`, optional): The URL to navigate to in the new tab. If not provided, the new tab will be blank.

Example input: `{}`

### `anchorbrowsermcp_anchor_tab_select`

Select Tab · Write

Switch the active browser tab to the tab at the given zero-based index. Use this to move focus between multiple open tabs before interacting with the content of a specific tab.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `index` (`number`, required): The index of the tab to select

Example input: `{"index":1}`

### `anchorbrowsermcp_anchor_type`

Type Text · Write

Type text into an editable element in the cloud browser page. Use `element` to provide a human-readable description of the target input and `ref` to supply the exact element reference from a prior `anchor_snapshot` accessibility snapshot. Optionally press Enter after typing (`submit`) or type character-by-character to trigger key handlers (`slowly`).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `element` (`string`, required): Human-readable element description used to obtain permission to interact with the element
- `ref` (`string`, required): Exact target element reference from the page snapshot
- `text` (`string`, required): Text to type into the element
- `slowly` (`boolean`, optional): Whether to type one character at a time. Useful for triggering key handlers in the page. By default entire text is filled in at once.
- `submit` (`boolean`, optional): Whether to submit entered text (press Enter after)

Example input: `{"element":"<element>","ref":"<ref>","text":"<text>"}`

## Related

Other AI connectors ([all 116](/agentkit/connectors/?category=ai)):

- [Chorus](/agentkit/connectors/chorus/): Scalekit connector, Username and password, 9 tools
- [Gong](/agentkit/connectors/gong/): Scalekit connector, OAuth, 49 tools
- [Jiminny](/agentkit/connectors/jiminny/): Scalekit connector, Access token, 27 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
