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: openmcp

快速开始

你无需克隆仓库或手动安装依赖。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/apiarthur://docs/workflow)和结构化提示(browser_automationmedia_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 文件。

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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
  • F
    license
    A
    quality
    D
    maintenance
    Enables AI-powered browser automation controlled through natural language, integrating Playwright with the Model Context Protocol to perform web interactions like navigation, form filling, and screenshots.
    10

View all related MCP servers

Related MCP Connectors

  • Provides cloud browser automation capabilities using Stagehand and Browserbase, enabling LLMs to i…

  • Live browser debugging for AI assistants — DOM, console, network via MCP.

  • Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sh7vansh/arthur'

If you have feedback or need assistance with the MCP directory API, please join our Discord server