Skip to main content
Glama

Arthur

面向 AI 代理的轻量级无头 Chromium 运行时与 MCP 服务器

License: MIT Python 3.10+ MCP Standard Built with uv


Arthur 是什么?

Arthur 是一个面向 AI 代理的单命令无头浏览器运行时和模型上下文协议(MCP)服务器。

它通过 Chrome DevTools 协议(CDP)WebSocket 直接连接 Chromium,无需浏览器扩展、虚拟显示(X11/VNC)或重型自动化驱动程序。一条命令即可启动 MCP 服务器、引导一个隔离的无头 Chromium 进程,并为你的 AI 代理提供完整的过程式浏览器控制能力。

Agent / MCP Client
       │
       ▼  execute_python(code)
FastMCP Server (stdio / Streamable HTTP)
       │
       ▼
Python REPL Session (stateful memory & auto-snapshots)
       │
       ▼
Arthur Browser API (synchronous facade)
       │
       ▼  CDP WebSockets
Headless Chromium (--headless=new)

Related MCP server: selenium-mcp

快速开始

你无需克隆仓库或手动安装依赖。Arthur 可通过 uvx 即时运行。

1. 本地桌面端(Claude Desktop、Cursor、Goose)

将 Arthur 添加到你的 MCP 设置文件中(例如 claude_desktop_config.json):

{
  "mcpServers": {
    "arthur": {
      "command": "uvx",
      "args": ["arthur-runtime", "mcp"]
    }
  }
}

当你的 AI 代理调用浏览器时,Arthur 会自动发现本地 Chrome/Chromium,启动无头浏览器,执行操作,并在完成后自动清理。


2. Docker 容器(自包含流式 HTTP)

在轻量级、自包含的 Debian Slim 容器中运行 Arthur,内置无头 Chromium、tini PID 1 进程管理,并原生支持多架构(amd64 / arm64):

通过 Docker 运行:

docker run -d \
  --name arthur \
  -p 8000:8000 \
  --shm-size=1g \
  --restart unless-stopped \
  sh7vansh/arthur:latest

或通过 Docker Compose 运行:

docker compose up -d

连接你的 MCP 客户端:

{
  "mcpServers": {
    "arthur": {
      "url": "http://localhost:8000/mcp"
    }
  }
}

3. 远程服务器 / 云端(通过 uvx 直接运行 Python)

无需 Docker,在远程虚拟机、VPS 或云服务器上运行 Arthur:

启动服务器:

uvx arthur-runtime mcp --transport streamable-http --stateless --host 0.0.0.0 --port 8000

连接你的 MCP 客户端:

{
  "mcpServers": {
    "arthur": {
      "url": "http://YOUR_SERVER_IP:8000/mcp"
    }
  }
}

无状态流式 HTTP 对网络中断具有弹性,可在 Nginx、Cloudflare Tunnels 和 AWS ALB 之后无缝运行,同时将浏览器标签页和 Python 变量保存在服务器内存中。


4. 交互式终端 Shell(用于测试)

直接从终端测试浏览器:

uvx arthur-runtime repl
Arthur Interactive REPL (Type 'exit()' or press Ctrl+D to exit)
Global 'browser' instance is available.
arthur> browser.navigate('https://example.com')
arthur> print(browser.snapshot())
arthur> browser.click(1)

工作原理

Arthur 在单个自包含进程中处理完整的浏览器生命周期:

  1. 自动发现:在 Linux、macOS 或 Windows 上定位已安装的 Chrome、Chromium、Brave 或 Edge。

  2. 临时沙箱:使用 --headless=new 和隔离的临时用户数据目录启动 Chromium。

  3. CDP WebSocket:通过本地 WebSocket 直接通信,实现低延迟的元素定位和输入模拟。

  4. 自动清理:会话结束时优雅关闭 Chromium 子进程并清除临时文件。


Python API 参考

当你的 AI 代理使用 execute_python 工具时,同步的 browser 实例会被预先注入:

# Navigation & Page State
browser.navigate("https://example.com", timeout=30.0)
print(browser.snapshot())                # Semantic Ref-ID outline ([#1], [#2])
print(browser.url, browser.title)

# Interactions (Ref-ID, String Ref, or CSS Selector)
browser.click(1)                         # Click Ref-ID #1
browser.click("button.submit-btn")       # CSS selector fallback
browser.type(2, "search query", press_enter=True)
browser.select(3, "Option Value")
browser.hover(1)
browser.scroll(x=0, y=500)

# Waiting & Synchronization
browser.wait_for(1, state="visible", timeout=10.0)
browser.wait_for_url(r"^https://example\.com/dashboard", timeout=15.0)

# Page Evaluation & Inspection
result = browser.eval_js("window.innerWidth")
png_bytes = browser.screenshot()
text = browser.get_text(1)
attr = browser.get_attribute(1, "data-custom")

# Fast Native Media Control (Zero-DOM)
state = browser.media.status()           # HTML5 media state & player metadata
browser.media.toggle()                   # Toggle play/pause
browser.media.play()                     # Resume playback
browser.media.pause()                    # Pause playback
browser.media.seek(15.0)                 # Seek relative seconds (+15s / -10s)
browser.media.set_volume(0.8)            # Set volume level (0.0 to 1.0)

# Multi-Tab Control & Help
new_tab = browser.new_tab("https://google.com")
all_tabs = browser.tabs
active = browser.active_tab
browser.close_tab(2)
print(browser.help())                    # Built-in formatted SDK quick reference

主要特性

  • 语义化 Ref-ID 快照:生成紧凑、节省 token 的可访问 DOM 树,并分配编号([#1]、[#2]),避免脆弱的 XPath 或冗长的 CSS 选择器。

  • 快速媒体控制器(browser.media):零 DOM 媒体播放控制,可穿透开放的 Shadow DOM 根节点,无需昂贵的快照重算。

  • 持久化 Python REPL:状态、变量、导入和自定义函数在代理工具调用之间持续保留。

  • 单轮自愈:出错时自动附加诊断性 DOM 快照([diagnostic_auto_snapshot])和模糊建议,使代理能够在单轮内自我修复。

  • MCP 资源与提示:内置 MCP 资源(arthur://docs/api、arthur://docs/workflow)和结构化提示(browser_automation、media_control),用于智能代理引导。

  • Token 预算与净化:截断大型输出以防止上下文窗口膨胀,并清理跟踪像素信标([IMAGE_BLOCKED])。


本地开发

如果你想贡献代码或从源码构建:

# Clone and install dependencies
git clone https://github.com/sh7vansh/arthur.git
cd arthur
uv sync --all-extras

# Run tests
uv run pytest

# Run type checker
uv run mypy src

许可证

本项目采用 MIT 许可证 授权——详情请参阅 LICENSE 文件。

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to automate web tasks such as browsing, clicking, typing, and taking screenshots via the Model Context Protocol.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to control a stealthy browser via the Model Context Protocol, supporting navigation, screenshots, clicking, typing, and more.
    88
    Do What The F*ck You Want To Public