All integrations

Connecting an AI assistant over MCP

The hosted MCP server lets your AI assistant control a Guard.ch cloud browser. Add it to your client and sign in, then learn which tools and sessions are available.

Connect in three steps

Your AI assistant

Connect Claude Code

Install Claude Code and sign in. Use Bash or Zsh (macOS, Linux or WSL) for the command below.

  1. 1. Add the connection

    Run the command in your terminal. It adds Guard.ch to your personal Claude Code settings for all projects.

    Terminal

    Run in your terminal

    claude mcp add --scope user --transport http guardch https://api.guard.ch/mcp
  2. 2. Sign in and allow access

    In Claude Code, type /mcp, choose guardch and sign in on the Guard.ch page that opens.

    /mcp > guardch > Authenticate

  3. 3. Try it in a new chat

    Check in /mcp that guardch is connected. Then send the task below and approve the browser tools when asked.

    /mcp

    Open example.com in a Guard.ch browser and tell me what the page says.

0 of 3 steps marked done

Need help?

If guardch is missing, run claude mcp list in your terminal. If it asks for sign-in again, open /mcp in Claude Code, choose guardch and sign in.

Client configuration examples

MCP (Model Context Protocol) gives your assistant additional tools. With Guard.ch, it operates an isolated cloud browser like a person: real mouse and keyboard input with human timing, so the site sees a visitor, not automation. It can open and read pages, click, fill forms, upload files and take screenshots. You choose the exit location.

You don't need a local browser service or driver. Guard.ch provides the browser, manages the session and gives you a live view you can take over at any time. The model stays with your client; there is no model key to configure here.

What you need

Endpoint
https://api.guard.ch/mcp
Transport
Streamable HTTP, stateless per request
Authentication
Sign-in with your Guard.ch account (OAuth), or an app key in a request header
Plan
A plan with programmatic access; the 30-day trial includes it
Browsers
Any Chromium-family image your plan allows, Chrome by default
Concurrency
Up to three concurrent sessions per person, shared with their agents

Connected apps and app keys

  • Sign-in is the default. Almost every client signs in by itself through OAuth. Only the Guard.ch page asks for your account; the client never sees your password. The few that cannot sign in, and your own code, use an app key instead.
  • Check before you allow. The page names the app, who published it and where it returns to. An app that registered itself is marked as unverified; allow it only if you just started connecting it.
  • Disconnect at any time. Connected apps are listed on the Agents tab. Disconnecting one revokes all of its access at once, also in the middle of a conversation.
  • App keys for automation. Scripts, pipelines and clients that cannot sign in use an app key from the Apps tab. Create a separate key per client so you can revoke one without interrupting the others.
  • Keys expire and are shown once. A key expires after one year without use, or on a fixed date of your choice. It is shown only at creation; a lost key is revoked and replaced, not recovered.

Endpoint and authentication

The server speaks Model Context Protocol over Streamable HTTP. Each request stands on its own, so your client can restart without the server having to keep conversation state.

https://api.guard.ch/mcp

Clients that support MCP authorization connect with the URL alone: the server answers the first request with a sign-in challenge, and the client opens the Guard.ch sign-in page. For automation, send an app key in one of these headers instead. A key never belongs in the URL, and the server does not accept it there:

  • Authorization: Bearer YOUR_API_KEY as a Bearer token.
  • x-api-key: YOUR_API_KEY for clients that cannot set Authorization.

Client configuration examples

Show configuration examples for all clients

Claude

Setup guide for Claude

ChatGPT

Setup guide for ChatGPT

Vibe Work

Setup guide for Vibe Work

Perplexity

Setup guide for Perplexity

LM Studio

Use the one-click install link, or open the Program tab in the right sidebar, choose Install › Edit mcp.json and add this. If the file already lists MCP servers, add only the guardch entry.

{
  "mcpServers": {
    "guardch": {
      "url": "https://api.guard.ch/mcp"
    }
  }
}
Setup guide for LM Studio

Raycast

Setup guide for Raycast

Msty Studio

Setup guide for Msty Studio

Claude Code

Run the command in your terminal. It adds Guard.ch to your personal Claude Code settings for all projects.

claude mcp add --scope user --transport http guardch https://api.guard.ch/mcp
Setup guide for Claude Code

Codex

Run this command in your terminal. It registers Guard.ch in your Codex configuration.

codex mcp add guardch --url https://api.guard.ch/mcp
codex mcp login guardch
Setup guide for Codex

Gemini CLI

Run this command in your terminal. It registers Guard.ch in your personal Gemini CLI settings.

gemini mcp add --scope user --transport http guardch https://api.guard.ch/mcp
Setup guide for Gemini CLI

GitHub Copilot CLI

Run this command in your terminal. It saves guardch in ~/.copilot/mcp-config.json.

copilot mcp add --transport http guardch https://api.guard.ch/mcp
Setup guide for GitHub Copilot CLI

OpenCode

Add this to opencode.json in your project or to ~/.config/opencode/opencode.json. If the file already has an mcp section, add only the guardch entry.

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "guardch": {
      "type": "remote",
      "url": "https://api.guard.ch/mcp"
    }
  }
}
Setup guide for OpenCode

Goose

Add this to ~/.config/goose/config.yaml; if the file already has an extensions section, add only the guardch entry. Alternatively, run goose configure and choose Add Extension › Remote Extension (Streamable HTTP).

extensions:
  guardch:
    name: guardch
    type: streamable_http
    uri: https://api.guard.ch/mcp
    enabled: true
    timeout: 300
Setup guide for Goose

Amp

Run this command in your terminal. It adds guardch to your Amp settings.

amp mcp add guardch https://api.guard.ch/mcp
Setup guide for Amp

Qwen Code

Run this command in your terminal. It adds guardch to your user settings in ~/.qwen/settings.json.

qwen mcp add --scope user --transport http guardch https://api.guard.ch/mcp
Setup guide for Qwen Code

Factory Droid

Run this command in your terminal. It adds guardch to your user config in ~/.factory/mcp.json.

droid mcp add guardch https://api.guard.ch/mcp --type http
Setup guide for Factory Droid

Crush

Add this to crush.json or .crush.json in your project, or to ~/.config/crush/crush.json. If the file already lists MCP servers, add only the guardch entry.

{
  "mcp": {
    "guardch": {
      "type": "http",
      "url": "https://api.guard.ch/mcp",
      "oauth": true
    }
  }
}
Setup guide for Crush

Junie

Add this to ~/.junie/mcp/mcp.json to use it in all projects, or to .junie/mcp/mcp.json in one project. If the file already lists MCP servers, add only the guardch entry.

{
  "mcpServers": {
    "guardch": {
      "url": "https://api.guard.ch/mcp"
    }
  }
}
Setup guide for Junie

Warp

Open Settings › Agents › MCP servers, click + Add and paste this.

{
  "guardch": {
    "url": "https://api.guard.ch/mcp"
  }
}
Setup guide for Warp

Cursor

Put this configuration in ~/.cursor/mcp.json and save the file. If it already lists MCP servers, add only the guardch entry.

{
  "mcpServers": {
    "guardch": {
      "url": "https://api.guard.ch/mcp"
    }
  }
}
Setup guide for Cursor

VS Code

Install it with the one-click VS Code link, or run MCP: Open User Configuration in the Command Palette and add this. If the file already lists servers, add only the guardch entry.

{
  "servers": {
    "guardch": {
      "type": "http",
      "url": "https://api.guard.ch/mcp"
    }
  }
}
Setup guide for VS Code

Devin Desktop

For Devin Local, run the command below in your terminal. It adds guardch to your user settings. If you use existing Cascade chats, select Cascade above instead.

devin mcp add --scope user guardch https://api.guard.ch/mcp
devin mcp login guardch
Setup guide for Devin Desktop

Zed

Run zed: open settings file from the command palette and add this to settings.json. If it already has a context_servers section, add only the guardch entry.

{
  "context_servers": {
    "guardch": {
      "url": "https://api.guard.ch/mcp"
    }
  }
}
Setup guide for Zed

Visual Studio

Add this to .mcp.json in your user folder (%USERPROFILE%\.mcp.json) and save. If the file already lists servers, add only the guardch entry.

{
  "servers": {
    "guardch": {
      "url": "https://api.guard.ch/mcp"
    }
  }
}
Setup guide for Visual Studio

Cline

In the Cline panel, click the MCP Servers icon, open the Configure tab and click Configure MCP Servers, then add this. If the file already lists MCP servers, add only the guardch entry.

{
  "mcpServers": {
    "guardch": {
      "type": "streamableHttp",
      "url": "https://api.guard.ch/mcp"
    }
  }
}
Setup guide for Cline

Kilo Code

Add this to ~/.config/kilo/kilo.jsonc for all projects, or to kilo.jsonc in your project. If the file already has an mcp section, add only the guardch entry.

{
  "mcp": {
    "guardch": {
      "type": "remote",
      "url": "https://api.guard.ch/mcp"
    }
  }
}
Setup guide for Kilo Code

Continue

Create a YAML file in .continue/mcpServers in your project and add the complete configuration below. The Authorization header belongs under requestOptions.headers. Switch the chat to Agent mode.

name: guardch
version: 1.0.0
schema: v1
mcpServers:
  - name: guardch
    type: streamable-http
    url: https://api.guard.ch/mcp
    requestOptions:
      headers:
        Authorization: "Bearer YOUR_API_KEY"
Setup guide for Continue

Kiro

Run Kiro: Open user MCP config (JSON) from the Command Palette, which opens ~/.kiro/settings/mcp.json, and add this. If it already lists MCP servers, add only the guardch entry.

{
  "mcpServers": {
    "guardch": {
      "url": "https://api.guard.ch/mcp",
      "oauthScopes": [
        "mcp"
      ]
    }
  }
}
Setup guide for Kiro

JetBrains AI Assistant

Open Settings > Tools > AI Assistant > Model Context Protocol (MCP) > Add. Paste the JSON below into New MCP Server, save with OK and Apply.

{
  "mcpServers": {
    "guardch": {
      "url": "https://api.guard.ch/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
Setup guide for JetBrains AI Assistant

Roo Code

In Roo Code's settings, open MCP, turn on Enable MCP Servers and click Edit Global MCP, or Edit Project MCP for .roo/mcp.json. Add this with your app key in place of YOUR_API_KEY; if the file already lists MCP servers, add only the guardch entry.

{
  "mcpServers": {
    "guardch": {
      "type": "streamable-http",
      "url": "https://api.guard.ch/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
Setup guide for Roo Code

Trae

Open Settings > MCP > Add > Add Manually. Paste the JSON below in Configure Manually and Confirm. For an existing server, use Raw Config (JSON).

{
  "mcpServers": {
    "guardch": {
      "url": "https://api.guard.ch/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
Setup guide for Trae

n8n

Setup guide for n8n

Copilot Studio

Setup guide for Copilot Studio

Open WebUI

Setup guide for Open WebUI

LibreChat

Setup guide for LibreChat

OpenAI API

Add this tool to a Responses API request and put your app key in place of YOUR_API_KEY. OpenAI does not store the key, so send it with every request.

{
  "tools": [
    {
      "type": "mcp",
      "server_label": "guardch",
      "server_url": "https://api.guard.ch/mcp",
      "authorization": "YOUR_API_KEY",
      "require_approval": "never"
    }
  ]
}
Setup guide for OpenAI API

Claude API

Add this to a Messages API request, put your app key in place of YOUR_API_KEY and send the header anthropic-beta: mcp-client-2025-11-20.

{
  "mcp_servers": [
    {
      "type": "url",
      "url": "https://api.guard.ch/mcp",
      "name": "guardch",
      "authorization_token": "YOUR_API_KEY"
    }
  ],
  "tools": [
    {
      "type": "mcp_toolset",
      "mcp_server_name": "guardch"
    }
  ]
}
Setup guide for Claude API

OpenAI Agents SDK

Create the server in your code with your app key in place of YOUR_API_KEY. Open it with async with guardch: and pass mcp_servers=[guardch] to your Agent.

from agents.mcp import MCPServerStreamableHttp

guardch = MCPServerStreamableHttp(
    name="guardch",
    params={"url": "https://api.guard.ch/mcp", "headers": {"Authorization": "Bearer YOUR_API_KEY"}},
)
Setup guide for OpenAI Agents SDK

AI SDK

Create the client in your server code with your app key in place of YOUR_API_KEY. Pass await guardch.tools() as tools to generateText or streamText and close the client with guardch.close() when you are done.

import { createMCPClient } from "@ai-sdk/mcp";

const guardch = await createMCPClient({
  transport: {
    type: "http",
    url: "https://api.guard.ch/mcp",
    headers: { Authorization: "Bearer YOUR_API_KEY" },
  },
});
Setup guide for AI SDK

LangChain

Create the client in your code with your app key in place of YOUR_API_KEY, load the tools with await client.get_tools() and pass them to your agent, for example with create_agent.

from langchain_mcp_adapters.client import MultiServerMCPClient

client = MultiServerMCPClient({
    "guardch": {
        "transport": "http",
        "url": "https://api.guard.ch/mcp",
        "headers": {"Authorization": "Bearer YOUR_API_KEY"},
    }
})
Setup guide for LangChain

Other client

Add guardch as a Streamable HTTP server with this URL and the Authorization header, with your app key in place of YOUR_API_KEY. The field names differ between clients, so follow your client's format.

{
  "mcpServers": {
    "guardch": {
      "type": "http",
      "url": "https://api.guard.ch/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
Setup guide for Other client

Choosing a browser and an exit location

image selects an available Chromium browser when you create a session. Chrome is the default. Firefox and Tor cannot be driven programmatically; a request for either returns the supported browser IDs. screen, language and keyboard_layout set the screen size, browser language and keyboard layout when the session starts.

Use country to choose an exit country or city (us, de, us-dal). residential uses a residential address where available; proxy uses your own proxy. browser_session_update can change the location during a session.

Watching a session, and taking it over

Every session comes with a live view URL, and the sessions your agents are running are listed on the Agents tab of your dashboard. Open one in the same viewer you use for your own sessions: the page streams live, and you can end the session from there.

Control is automatic: the assistant's actions drive the browser. To step in, take over with the button in the live view. The assistant then stops and tells you: its actions report user_in_control, and reading still works. When you're done, hand control back and ask it to continue in the same browser. For a sign-in or captcha, it asks you with browser_ask_user.

Live analysis beside the page

On a Chromium browser, Guard.ch's analysis lane can run beside the page: requests, redirect chains, response headers, console output, security issues, downloads, forms, cookies and storage, the technologies and trackers it recognises, WHOIS, IP and certificate look-ups on demand, and a verdict per host that shows its sources.

browser_session_update with analysis: true or analysis: false turns analysis on or off for a session on your account, whether you started it in the app or the assistant started it. You can also switch it in the live view. When it is on, you can follow the findings live and the dashboard lists the session as an investigation. A session on a browser without analysis support returns analysis_unavailable.

How the sessions behave

  • Sessions can start automatically. The first page tool opens a session when none is running for that connection. If several sessions are running, Guard.ch refuses a call without a session_id instead of guessing which browser you mean.
  • Sessions end automatically. You do not set a lifetime. A session ends a few minutes after the last tool call or CDP disconnect, and 18 hours after it started at the latest. Closing it yourself frees the slot immediately.
  • Retries are safe. An idempotency key returns the successful creation response on a retry instead of opening a second browser. This helps with queues and retried jobs.
  • People and agents share one account. Your assistant can list, drive and close the sessions you started in the app, and you can do the same with its own. Closing one of yours closes the window you are watching, which is a good reason to name sessions.
  • Access stays within your account. Every tool works on your own sessions only. No other member's sessions are visible or reachable through the server.

Limits and refusals

  • Programmatic access is a plan feature. Without it every call answers with an upgrade notice instead of a tool result. Both paid plans include it, and so does the 30-day trial.
  • Up to three concurrent sessions per person. Agent sessions share this limit with your own sessions. Once all three slots are in use, new sessions are rejected rather than queued.
  • No per-tool charge. Your plan must include programmatic access. Individual tool calls carry no additional fee. Residential egress counts against your workspace data allowance.
  • Creation is rate-limited. Per-minute, hourly and daily limits protect the platform from excessive session creation. Check the response status and delay further attempts if you reach a limit.
  • Nothing is stored. A closed session is gone with everything it saw. The session list keeps 30 days of entries (what ran, when and for how long), never the pages themselves.

The tools your assistant gets

The server provides 28 browser_ tools that operate the browser like a person: every click, keystroke and scroll is real mouse and keyboard input with human timing, so sites see a visitor, not automation. An assistant can start with browser_navigate: Guard.ch opens a session if needed and returns an accessibility snapshot with references for later actions, and browser_screenshot's pixels are the x/y coordinates browser_click, browser_hover, browser_drag and browser_scroll take.

Show all 28 tools

Sessions and account

These tools let the assistant choose a browser, screen and exit location, read its sessions and account, and end sessions.

ToolDescription
browser_session_createStart a session and get its handle: browser image, name, exit country, residential or custom-proxy egress, screen size, language, keyboard layout, an initial URL and a retry key.
browser_session_listList every session on the account, newest first; each row says whether an agent or a person started it. With a session_id it reads that one session: status, image, current URL, whether analysis is on, and its live view URL.
browser_session_updateChange a running session without restarting it: its name, its exit location (country or residential) or, with analysis true or false, the live analysis.
browser_session_closeStop a session and free its slot at once, instead of waiting for it to end on its own.
browser_accountRead the account in one call: profile and feature access, the browser images available for sessions, the concurrency quota and 30 days of usage.
browser_ask_userHand the browser to the person in the live view with a message, for a sign-in, a captcha or anything only they can do. Each call waits a while for them; the assistant calls again until they hand control back.

Navigation

Open websites, move through the history and manage tabs.

ToolDescription
browser_navigateOpen a site through the address bar, search in the search field of the page in front as a person does (a site's own search, or the web from a page without one), do both in one call, or go back, forward or reload with action; the page comes back as an accessibility snapshot. This is the entry point: it opens a session when there is none.
browser_tabsList, open, switch and close tabs; every page tool takes a tab id.

Reading the page

Read the page as a compact structure or a screenshot, and the developer data behind it.

ToolDescription
browser_snapshotThe accessibility snapshot of the page, with the ref ids the interaction tools act on.
browser_findSearch the page for text or a regular expression and get the matching refs back.
browser_screenshotCapture the whole screen, including the browser toolbar, menus and native dialogs; its pixels are exactly the x/y coordinates that browser_click, browser_hover, browser_drag and browser_scroll take.
browser_devtoolsDeveloper reads that browsing does not need: the console, the recorded requests, one request in full with headers and body, the cookies (including HttpOnly) or localStorage and sessionStorage.

Interaction

Real mouse and keyboard input, by element reference or by the screen coordinates from browser_screenshot.

ToolDescription
browser_clickClick an element by ref, or a screen point x/y from browser_screenshot, with modifiers and double-click. The mouse moves there like a hand, scrolling first if needed.
browser_typeType into a field by ref: it is clicked and its value replaced, key by key like a person. Without a ref it types wherever the keyboard focus is, including the address bar.
browser_fill_formFill several fields in one call, one after another like a person.
browser_select_optionOpen a native dropdown and choose an option with the keyboard.
browser_press_keyPress a key or combination, such as Enter or Control+A, on an element or wherever the keyboard focus is. Also answers a JavaScript dialog (alert, confirm, prompt) with Enter or Escape.
browser_scrollTurn the mouse wheel by pixels, over the page or a screen point x/y; with a ref it scrolls until that element is in view.
browser_hoverMove the mouse over an element by ref, or a screen point x/y, to reveal a hover menu or tooltip.
browser_dragPress the mouse on one element or point and drag it onto another, like a hand would.
browser_wait_forWait until text appears or disappears, the URL matches, or a fixed time passes.

Files

Hand files to a page and collect what the session downloaded.

ToolDescription
browser_file_uploadClick a file input, or a button that opens a file chooser, and answer it with your files.
browser_downloadsList what this session downloaded, with a signed link per completed file that opens it for 15 minutes.

Guard.ch analysis

Read what the live analysis found on the current page, run look-ups and get the verdict.

ToolDescription
browser_guard_inspectRead Guard.ch's live evidence for the current page without navigating: overview, security, network, storage, activity or site.
browser_guard_overviewGuard.ch's compact overview of the current page: mood, verdict, indicators and findings. It starts the analysis if needed; repeat the call while it is still running.
browser_guard_lookupLook up the current host or a given hostname by kind: whois, ipinfo, certificate, reputation or ranking.
browser_guard_moodWhat people on the internet say about the site, researched on the web; repeat the call while it is pending.
browser_guard_verdictGuard.ch's overall verdict on the current page with its findings and indicators; repeat the call while it is pending.

Security

  • Allow only apps you connected yourself. A connected app acts for your account until you disconnect it on the Agents tab.
  • An app key is a credential: keep it in your client's secret store or an environment variable, never in a shared config file or a link. Send it only in a header; the server refuses keys in a URL. If one is exposed, revoke it on the Apps tab.
  • Pages load in our infrastructure, never on the machine running the assistant and never in a browser profile of yours: every session is a throwaway container.
  • The MCP server uses no model of its own. It returns the requested results to your client, where you decide which model processes them.
  • An agent's session is as visible as a person's. It is listed in the dashboard, watchable live, and can be ended by hand at any moment.
  • Everything runs over TLS, and the sessions are covered by the same DPA as the rest of the product.

Troubleshooting

If something goes wrong, check these common causes first:

The client lists no tools. It has not reloaded its configuration. Restart it after adding the server, and check the URL is the /mcp endpoint above rather than the REST base.

Every call answers with an upgrade notice. The signed-in account has no plan with programmatic access. Start the trial, or ask a workspace manager for a seat.

A call is refused as an ambiguous session. Two or more sessions are running on that connection, so Guard.ch will not guess which one you mean. List them and pass the session_id explicitly from then on.

Creating a session is refused. Either all three of the account's running sessions are in use, or the image asked for cannot be driven programmatically. The refusal says which, and names the ids you may use.

Access stopped working mid-conversation. The app was disconnected, or its app key was revoked, reached its expiry date or went unused for a year. Sign in again from the client, or create a new key.

The sign-in page cannot continue. A sign-in request expires after a few minutes and can be answered only once. Start connecting again from your client.

The same browsers without MCP

A client that does not speak MCP can create the same sessions over REST and attach Playwright or Puppeteer to the CDP endpoint each one returns. The API integration guide covers that path.

Next steps

Add the endpoint to your client, sign in and ask the assistant to open a page. You can watch or end its sessions, and disconnect apps, on the Agents tab. For scripts, create a key under Apps. If your client is missing from this guide, get in touch.

Try Guard.ch for 30 days.

Start without a card and add one for the trial. You will only be charged after it ends.

Start 30-day trial