doko
v1.5.0Read and extract content from any web page using a real Chrome browser — including SPAs, JavaScript-rendered sites, and complex dynamic pages. Use when fetching page content that headless tools can't render, searching the web, or reading fully rendered pages via your own browser.
Installation
Dokobot — Read Web Pages with a Real Browser
Read, extract, and search web content through a real Chrome browser session. Unlike headless scrapers, Dokobot uses your actual browser with full JavaScript rendering — so it works on SPAs, dynamic sites, and complex web applications.
Also useful for multilingual tasks: translate web pages (网页翻译), summarize articles (文章总结), and extract content (内容提取) in any language. Supports web search (联网搜索) and reading from social platforms like Twitter/X, Reddit, YouTube, GitHub, LinkedIn, Facebook, Instagram, WeChat articles (微信公众号), Weibo (微博), Zhihu (知乎), Xiaohongshu (小红书), and Bilibili (B站).
All commands require DOKO_API_KEY environment variable.
Usage: /doko <command> [arguments]
Command: $ARGUMENTS[0]
Prerequisites
DOKO_API_KEYis set in environment (configure in.claude/settings.local.json)- If no API Key is set, ask the user to create one at the Dokobot dashboard: https://dokobot.ai/dashboard/api-keys
How it works
The read command connects to a Dokobot Chrome extension that captures the fully rendered page content and returns it as structured text. The extension must be installed and running in the user's browser.
Commands
read
Read a web page via the Chrome extension and return its content.
Usage: /doko read <url> [--screens N] [--timeout S] [--device ID] [--format text|chunks] [--reuse-tab] [sessionId]
Requires: Chrome browser open with Dokobot extension installed, logged in, and Remote Control enabled.
Args: $ARGUMENTS[1] $ARGUMENTS[2] $ARGUMENTS[3] $ARGUMENTS[4] $ARGUMENTS[5] $ARGUMENTS[6] $ARGUMENTS[7] $ARGUMENTS[8] $ARGUMENTS[9]
First non-flag argument is url, sessionId. Named flags:
- --screens N → screens: Screens to collect (1 = no scroll, 3 = 3 screens) (default: 1)
- --timeout S → timeout: Timeout in seconds (default: 300)
- --device ID → deviceId: Target device ID (from /doko dokos)
- --format text|chunks → format: Response format: text (default) returns only text; chunks returns full segmented data with bounds coordinates (default: text)
- --reuse-tab → reuseTab: Reuse an existing tab with the same URL instead of opening a new one (default: false)
curl -s --max-time 330 -X POST "https://dokobot.ai/api/tools/read"
-H "Authorization: Bearer $DOKO_API_KEY"
-H "Content-Type: application/json"
-d '{"url": "<URL>"}'
Response schema (default format: "text"):
{
text?: string
sessionId: string
canContinue: unknown
}
Pass "format": "chunks" in the request body to get segmented data with coordinates.
Response schema (format: "chunks"):
{
text?: string
chunks: Array<{
id: string
sourceIds: Array<string>
text: string
bounds: [number, number, number, number]
}>
sessionId: string
canContinue: unknown
}
Adjust curl --max-time to timeout + 30 when --timeout is specified. When --screens, --timeout, --format, or --reuse-tab is specified, add the corresponding field to the JSON body (e.g., {"url": "...", "screens": 3, "format": "chunks", "reuseTab": true}). Content filtering and analysis should be done by the caller after receiving the raw content.
Tab reuse: By default, a new tab is opened for each read. Use --reuse-tab to reuse an existing tab with the same URL (the tab will not be reloaded or closed after reading).
Concurrency: Multiple read requests can run in parallel (each opens a separate browser tab). Recommended maximum: 5 concurrent calls. Beyond that, returns diminish due to shared browser resources.
Session continuity: When canContinue is true, pass the returned sessionId to continue reading from where you stopped:
curl -s --max-time 330 -X POST "{{BASE_URL}}/api/tools/read"
-H "Authorization: Bearer $DOKO_API_KEY"
-H "Content-Type: application/json"
-d '{"sessionId": "<SESSION_ID>", "screens": 5}'
The browser tab stays open between calls. Sessions expire after 60s of inactivity.
search
Search the web and return results.
Usage: /doko search <query>
Arguments: query = all arguments after "search"
curl -s -X POST "https://dokobot.ai/api/tools/search"
-H "Authorization: Bearer $DOKO_API_KEY"
-H "Content-Type: application/json"
-d '{"query": "<QUERY>", "num": 5}'
Response schema:
{
items: Array<{
title: string
link: string
snippet: string
position?: number
}>
directAnswer?: string
knowledgeGraph?: {
title?: string
description?: string
}
}
dokos
List connected dokos.
Usage: /doko dokos
curl -s "https://dokobot.ai/api/tools/dokos"
-H "Authorization: Bearer $DOKO_API_KEY"
Response schema:
{
dokos: Array<{
id: string
name: string | null
type: "extension" | "chrome"
age: string | null
}>
}
Use id as deviceId in read-page when multiple browsers are connected:
{"url": "...", "screens": 3, "deviceId": "<device-id>"}
mcp_list_tools
List available MCP tools on a browser doko.
Usage: /doko mcp_list_tools [--device ID]
Requires: A browser doko connected via dokobot-cli.
Args: $ARGUMENTS[1] $ARGUMENTS[2] $ARGUMENTS[3] $ARGUMENTS[4] $ARGUMENTS[5] $ARGUMENTS[6] $ARGUMENTS[7] $ARGUMENTS[8] $ARGUMENTS[9]
First non-flag argument is . Named flags:
- --device ID → deviceId: Target device ID (from /doko dokos)
curl -s "https://dokobot.ai/api/tools/mcp-list-tools"
-H "Authorization: Bearer $DOKO_API_KEY"
Response schema:
{
deviceId: string
deviceName: string
tools: Array<{
name: string
description?: string
inputSchema?: unknown
}>
}
When --device is specified, add ?deviceId=<ID> to the URL. If only one browser doko is online, it is auto-selected.
mcp_call_tool
Call an MCP tool on a browser doko.
Usage: /doko mcp_call_tool <tool> [--device ID]
Requires: A browser doko connected via dokobot-cli.
Args: $ARGUMENTS[1] $ARGUMENTS[2] $ARGUMENTS[3] $ARGUMENTS[4] $ARGUMENTS[5] $ARGUMENTS[6] $ARGUMENTS[7] $ARGUMENTS[8] $ARGUMENTS[9]
First non-flag argument is tool. Named flags:
- --device ID → deviceId: Target device ID (from /doko dokos)
curl -s -X POST "https://dokobot.ai/api/tools/mcp-call-tool"
-H "Authorization: Bearer $DOKO_API_KEY"
-H "Content-Type: application/json"
-d '{"tool": "<TOOL_NAME>", "arguments": {}}'
Use /doko mcp_list_tools first to discover available tools and their parameters. Pass tool arguments in the arguments field. When --device is specified, add "deviceId": "<ID>" to the JSON body.
Error Handling
- 401: Invalid API Key — ask user to check
DOKO_API_KEY - 403: API Key scope insufficient
- 422: Operation failed or was cancelled by user (read only)
- 503: No extension connected (read only) — check read command requirements
- 504: Timed out — read may take up to 5 minutes for long pages