TabRunner

app.tabrunner由 tabrunner.app 发布v0.17.3更新于 Nov 4, 2026

Give browser tasks to TabRunner, an agent in your own Chrome that uses your logins.

概览

AI 生成的概览

TabRunner 通过本地桥接驱动用户自己的 Chrome,让助手可以委派浏览器任务,或逐步点击操作页面。

可以做什么
  • 检查连接状态,并跟踪委派任务的计划、进度、提问与中途调整
  • 开启和结束对某个标签页的直接控制会话,获取截图与页面快照
  • 在受控标签页中导航、点击、输入、填写字段、按键和滚动
  • 查看网络请求与控制台消息,并在页面中执行 JavaScript
  • 列出并切换用户已打开的标签页
  • 重置或压缩每个客户端各自的对话历史
适用场景
当任务需要用户真实的浏览器会话、已有登录状态和已打开的标签页时适用,例如读取登录后的页面、填写表单或验证某个流程。既可以把自然语言任务交给 TabRunner 自带的智能体,也可以由助手逐步控制。
运行要求
通过 bunx 以 stdio 在本地运行,需要安装 bun。需安装 TabRunner Chrome 扩展并在“设置 → MCP”中开启桥接,且 TABRUNNER_BRIDGE_PORT 需与该设置一致。仅支持桌面端。
安装前请注意
它在用户已登录的 Chrome 中操作,读取的页面和数据可能属于隐私。任务可以点击、输入、填写表单并提交,停止任务不会撤销任何操作。TabRunner 在付款、代发消息、删除等有后果的操作前会暂停提问,助手应把问题转达给用户而不是自行决定。browser_evaluate 会在页面中执行任意 JavaScript。

安装

在 SourceWeft 中

  1. 打开 控制台中的 TabRunner,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

tabrunner-mcp

The MCP server for TabRunner, the browser agent that works in your own Chrome, with your tabs and the accounts you're already signed in to. Claude Code, Claude Desktop, Codex or any other MCP client can give TabRunner a task and follow it to the answer, or click through a page itself.

It needs bun and the TabRunner extension, with the bridge turned on in Settings → MCP.

bash
claude mcp add --scope user tabrunner -- bunx tabrunner-mcp@latest

Or install the plugin, which adds this server plus a skill that teaches the model how to use it:

bash
claude plugin marketplace add tabrunner/tabrunnerclaude plugin install tabrunner@tabrunner

Call health first: it says whether the extension is connected, and what to do if it isn't. The tools and settings are in docs/mcp.md.

来源:packages/mcp/README.md,提交 949a120

工具

23

health

TabRunner health

Check that the browser agent is reachable before driving it. Reports whether the TabRunner extension is connected to this bridge, which extension it is, whether it has a provider ready to think with, and what to do when any of that is missing. Call this first, and again after any connection error.

无需输入参数。

run

Run a browser task

Give TabRunner a task to do in the user's real Chrome, with their existing logins and sessions to navigate, read pages, click, type, fill forms and extract data. Describe the goal in plain language, as you would to a person; TabRunner plans and executes the steps itself. Returns immediately: follow the task with get_status. By default the task works in its own background tab (reusing this chat's tab while it lives, or opening url / the start page) and leaves the user's current page alone; pass background: false only when the task is explicitly about what the user is looking at.

输入参数urltask必填imagesbackground

get_status

Follow the task

Where the current task stands: the plan and the steps taken; when it ends, the answer, the question it stopped on or the error. By default this WAITS for the next change instead of returning immediately, so following a ten-minute task costs one call per real event. Keep calling it until state is done, error, or question.

输入参数waitwaitSeconds

answer

Answer TabRunner's question

Reply to the question a task stopped on (state: question) and let it continue. TabRunner stops to ask before consequential actions (paying, sending on the user's behalf, deleting or submitting), so relay the question to the user and send THEIR decision, never your own.

输入参数text必填

steer

Steer the running task

Send a note into a task that is already running, such as a correction, an extra constraint or a change of approach. It lands between tool calls, so the task absorbs it without restarting. Use this instead of stop+run when the goal is still the same.

输入参数text必填

stop

Stop the task

Stop this client's current task, or pass runId to cancel one of its queued tasks. It cannot stop another client's task. Stopping leaves the browser as it is. Nothing is undone.

输入参数runId

screenshot

See the browser

A picture of the tab this client's task or direct-control session is driving. Start one with run or browser_start first. It never captures another client's tab or the user's current page as a fallback.

无需输入参数。

new_conversation

Start a fresh chat

Forget the current chat and start clean. TabRunner keeps a separate chat for each connected client. Each task continues the previous ones, so it remembers the pages it visited and what it found. Reset only when the new task has nothing to do with the old one.

无需输入参数。

compact

Compact the chat

Summarize this chat's history so far, so every task replays a summary instead of the whole transcript. The raw messages stay in the user's panel; only what the model re-reads changes, and nothing is deleted. Reach for it when a long chat's tasks get slow or one dies on a context-length error. Cannot run while a task is in flight.

无需输入参数。

browser_start

Start driving the browser yourself

Open a direct-control session and get the first page snapshot. Use this instead of run when you want to drive step by step rather than hand TabRunner the whole task. run is still the better choice for anything long or open-ended, because TabRunner's own model plans it. Like run, it works in a background tab of its own (reusing the tab the previous session drove while it lives, or opening url / the start page) and leaves the page the user is reading alone; pass url to open a specific page. Pass background: false only when the task is about the page the user is on. State the goal: it names the chat the user will see in TabRunner's history, and every action you take is recorded under it. IMPORTANT: driving directly bypasses TabRunner's own model and its rule of stopping to ask before consequential actions, so paying, sending on the user's behalf, deleting, or submitting is yours to put to the user first.

输入参数urlgoal必填background

browser_snapshot

Read the page

The current page as an accessibility tree with a ref on every interactive element. This is how you see, and where every ref you click comes from. Refs belong to the snapshot that produced them: after anything changes the page, re-read before acting.

无需输入参数。

browser_network_requests

List network requests

The requests the driven tab has made since the session attached, with method, URL, status and failures. Tells 'the server answered with an error' apart from 'the page never sent it'. Response bodies are not captured; re-fetch a GET with browser_evaluate when the payload matters.

输入参数limiturl_filter

browser_console_messages

Read console output

The driven tab's console messages and uncaught exceptions since the session attached. When a page misbehaves for no visible reason, the JavaScript error usually names the broken piece.

输入参数limitonly_errors

browser_navigate

Go to a URL

Navigate the driven tab and return the new page's snapshot.

输入参数url必填snapshot

browser_click

Click an element

Click by ref with a real trusted event, not a synthetic dispatch a site can ignore. Returns the resulting page. Take the ref from the most recent snapshot.

输入参数ref必填snapshot

browser_type

Type text

Type into whatever is focused. Click the field first. Real keystrokes, so a site's own handlers fire. Returns the resulting page.

输入参数text必填snapshot

browser_fill

Set a field's value

Set the value of a field by ref. Supports text inputs, textareas, selects (by option label or value) and contenteditable. The value is set the way the page's own code notices, so it lands where typed keystrokes don't (pages that swallow key events, focus that won't stick). Pass an empty string to clear a field. Returns the resulting page.

输入参数ref必填text必填snapshot

browser_evaluate

Run JavaScript in the page

Run JavaScript in the driven tab's page context and get the result back. Promises are awaited; return only JSON-serializable values, not DOM nodes. For what the other tools cannot do: reading an attribute the tree omits, piercing shadow DOM, calling the page's own functions, fetching an endpoint the page itself uses. Results are bounded and credential-shaped values are stripped. A direct session has no plan gate. The code runs exactly as written, so the consequential-action rule (paying, sending on the user's behalf, deleting, submitting, by fetch or any other means) is yours to put to the user first. Returns the resulting page.

输入参数snapshotexpression必填

browser_press_key

Press a key

A single key press: "Enter" to submit, "Escape" to dismiss, "Tab" to move on. Returns the resulting page.

输入参数key必填snapshot

browser_scroll

Scroll the page

Scroll the driven tab and return what is now in view. Content below the fold is not in a snapshot until you scroll to it.

输入参数amountsnapshotdirection必填

browser_tabs

List open tabs

Open tabs with their id, title and URL. These are all the tabs the user has open, so pass query to get only the ones you need. Find the one you need, then switch.

输入参数query

browser_switch_tab

Switch tabs

Point every later action at another tab. The tab does not need to be on screen: actions work on background tabs too. It comes to the front only while the user is watching the tab you leave; otherwise the work goes on without moving their screen.

输入参数tab_id必填

browser_end

Stop driving

Close this client's direct-control session and remove its on-page badge. Call it when you're done. Other clients and the panel keep their own tasks. A session left open expires after a few idle minutes.

无需输入参数。

版本历史

8
  1. v0.17.3最新Nov 4, 2026
  2. v0.17.1Nov 4, 2026
  3. v0.17.0Nov 3, 2026
  4. v0.16.1Oct 30, 2026
  5. v0.15.0Oct 23, 2026
  6. v0.14.2Oct 22, 2026
  7. v0.14.0Oct 21, 2026
  8. v0.13.0Oct 17, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分