Skip to main content
sentinel
Protocol8 tools

MCP server.

Expose all of Sentinel's browser automation capabilities directly to your AI assistant — no code required. Works with Cursor, Windsurf, and Claude Desktop.

What is MCP?

The Model Context Protocol (MCP) is an open standard that lets AI assistants call external tools. Sentinel implements an MCP server — once configured, your AI assistant can navigate pages, fill forms, extract data, and run autonomous agents, all from a natural language prompt.

💬
No code

Ask your AI to scrape a page or automate a flow — no scripts to write.

🔌
Drop-in

Add 5 lines to your MCP config. The browser session persists across tool calls.

Full API

All 8 Sentinel tools are exposed — goto, act, extract, observe, run, screenshot, and more.

Cursor

Add the following to your Cursor MCP configuration, then restart Cursor. The Sentinel tools will appear in the tool picker automatically.

json.cursor/mcp.json
// .cursor/mcp.json  (or Settings → MCP → Add server)
{
  "mcpServers": {
    "sentinel": {
      "command": "npx",
      "args":    ["@isoldex/sentinel/mcp"],
      "env": {
        "GEMINI_API_KEY":    "your-key-here",
        "SENTINEL_HEADLESS": "true"
      }
    }
  }
}

Alternatively: Settings → Features → MCP Servers → Add server and enter the command and args manually.

Windsurf

Edit the Windsurf MCP config file and restart the app.

jsonmcp_config.json
// ~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "sentinel": {
      "command": "npx",
      "args":    ["@isoldex/sentinel/mcp"],
      "env": {
        "GEMINI_API_KEY":    "your-key-here",
        "SENTINEL_HEADLESS": "true"
      }
    }
  }
}

Claude Desktop

Edit the Claude Desktop config file, then restart the app. Set SENTINEL_HEADLESS to false to watch the browser while Claude controls it.

jsonclaude_desktop_config.json
// macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
// Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "sentinel": {
      "command": "npx",
      "args":    ["@isoldex/sentinel/mcp"],
      "env": {
        "GEMINI_API_KEY":    "your-key-here",
        "SENTINEL_HEADLESS": "false"
      }
    }
  }
}

macOS

~/Library/Application Support/Claude/

Windows

%APPDATA%\Claude\

HTTP server mode

Run Sentinel as a standalone Streamable HTTP MCP server instead of a stdio subprocess. Useful when multiple editors / CI jobs should share one browser session, for Docker and Kubernetes deployments, or for local iteration where you want to rebuild Sentinel without restarting the MCP client — the client reconnects on its own.

🔁
Hot reload

Rebuild Sentinel and the client reconnects via exponential backoff — no IDE restart.

🤝
Shared session

One Sentinel process, one browser — used by multiple MCP clients.

🐳
Deploy friendly

Drop the server into a container or a remote VM. Any MCP client reaches it by URL.

1. Start the server

Two environment variables control the server: SENTINEL_MCP_HTTP=1 switches the transport to HTTP, SENTINEL_MCP_PORT sets the port (default 3333). The server listens on 127.0.0.1 by default; override with SENTINEL_MCP_HOST.

bashterminal
# Start Sentinel as a standalone HTTP MCP server
GEMINI_API_KEY=your-key-here \
SENTINEL_MCP_HTTP=1 \
SENTINEL_MCP_PORT=3333 \
  npx @isoldex/sentinel/mcp

# Or via the built-in dev script (from a cloned repo) — auto-restarts on rebuild:
# npm run build:watch    # terminal 1
# npm run mcp:dev        # terminal 2

2. Point the client at the URL

Replace the command/args block with a url entry. Works identically in Cursor, Windsurf, Claude Desktop, and any other MCP-compatible client.

json.cursor/mcp.json
// .cursor/mcp.json  (or any MCP client config)
{
  "mcpServers": {
    "sentinel": {
      "url": "http://127.0.0.1:3333/mcp"
    }
  }
}

Security note

The HTTP transport has no built-in authentication — bind it to 127.0.0.1 for local use, or put it behind a reverse proxy (nginx, Caddy, Traefik) with auth + TLS when exposing over a network.

Available tools

The browser session persists across tool calls within the same MCP server process. Errors are returned as structured isError: true responses — the server never crashes on a tool failure.

ToolParametersDescription
sentinel_gotourl: stringNavigate to a URL and wait for the page to settle.
sentinel_actinstruction: stringPerform a natural language action on the current page (click, fill, scroll, etc.).
sentinel_extractinstruction: string, schema: objectExtract structured data from the current page using a natural language instruction and JSON schema.
sentinel_observeinstruction?: stringList interactive elements on the page, optionally filtered by a natural language hint.
sentinel_rungoal: string, maxSteps?: numberRun the autonomous agent loop to achieve a high-level goal.
sentinel_screenshotTake a screenshot of the current page. Returns a base64-encoded PNG.
sentinel_closeClose the browser session and release all resources.
sentinel_token_usageGet accumulated token usage and estimated cost for the current session.

Development tips

Environment variables are passed via the env block in your MCP config file.

bash.env (MCP server env block)
# Show the browser window while Cursor / Claude controls it
SENTINEL_HEADLESS=false

# Use a different model
GEMINI_VERSION=gemini-3-flash-preview

# Use OpenAI instead of Gemini (set in the env block of your MCP config)
# OPENAI_API_KEY=sk-...
# Then change the provider in the MCP server config — or use the default Gemini.

Pro tip

Set SENTINEL_HEADLESS=false while building prompts so you can watch exactly what the browser is doing. Switch to true for production use.