Smth——浏览器MCP服务器
****
一个本地MCP服务器,为Claude提供了一个完整的浏览器:屏幕截图、DOM检查、WCAG颜色分析和页面交互——所有这些都是通过在Docker中运行的持久Puppeteer/Chromium会话实现的。
它做什么
smth在三个区域展示了16个MCP工具:
看 --在不与网页交互的情况下阅读和分析任何网页 browser_see_visual · browser_read_text · browser_see_dom · browser_see_fonts · browser_see_colors · browser_see_color_pairs
w法案 --像用户一样驱动浏览器 browser_launch · browser_goto · browser_click · browser_hover · browser_type
比较 --捕获和区分DOM快照 browser_remember_dom · browser_doms · browser_dom_compare · fetch_dom_content · browser_list_devices
需求
- Docker(桌面或引擎)
- Claude Code(或任何支持流式HTTP或SSE传输的MCP客户端)
安装
git clone https://github.com/maxvolkel/smth.git
cd smth
docker compose up -d集装箱从3000号港口出发。添加 .mcp.json 对于任何应该使用它的项目:
{
"mcpServers": {
"smth": { "type": "http", "url": "http://localhost:3000/mcp" }
}
}然后重新启动Claude Code。这 mcp__smth__* 工具将立即可用。
可选:公开本地文件
要让smth从项目目录打开本地HTML文件,请执行以下操作:
PAGES_DIR=/path/to/your/project docker compose up -d --force-recreate文件以只读方式装载在 /pages.用它们的宿主路径打开它们或 file:///pages/filename.html.
用法示例
示例1——审核页面的可访问性对比问题
browser_launch url="https://example.com"
browser_see_color_pairs返回页面上具有WCAG 2.2对比度和AA/AAA通过/失败标志的每个文本/背景颜色对。立即显示哪些组合不符合可访问性要求。
示例2——提取没有导航/页脚噪声的页面内容
fetch_dom_content url="https://example.com/article/123"打开URL,自动查找同一网站上的对等页面,计算共享内容(导航、页眉、页脚、侧边栏),并仅返回目标页面的唯一内容。不需要手动排除CSS。
示例3——检查移动设备上的页面外观
browser_launch url="https://example.com"
browser_list_devices
browser_see_visual device="iPhone 15 Pro"模拟iPhone 15 Pro(视口、像素比、用户代理),并返回模型直接可见的嵌入式屏幕截图。
示例4——填写表格前检查表格
browser_launch url="https://example.com/login"
browser_see_dom lens=["code"]
browser_type id="username" text="myuser"
browser_type id="password" text="mypass"
browser_click selector="input[type=submit]"
browser_read_text这 code 镜头显示表单字段、名称、操作和事件处理程序,没有布局噪音。在填写并提交之后, browser_read_text 读取结果页面。
示例5——在交互前后区分页面
browser_launch url="https://example.com/settings"
browser_remember_dom name="before" lens=["text"]
browser_click selector="#enable-toggle"
browser_remember_dom name="after" lens=["text"]
browser_dom_compare a="before" b="after"准确显示单击切换后出现或消失的文本,这对于验证UI操作是否具有预期效果非常有用。
工具参考
每个工具的完整文档 doc/smth.md.
| 工具 | 只读 | 说明 |
|---|---|---|
browser_list_devices | yes | 列出的设备名称 browser_see_visual |
browser_launch | no | 启动会话,打开URL |
browser_goto | no | 导航到现有会话中的新URL |
browser_read_text | yes | 页面文本为Markdown+交互式元素选择器 |
browser_see_fonts | 是 | 按系列、大小、重量分组的所有字体 |
browser_see_colors | 是 | 所有计算出的颜色和使用次数 |
browser_see_color_pairs | 是 | 具有WCAG对比度的文本/背景对 |
browser_see_dom | 是 | 镜头过滤的紧凑型HTML或文本搜索 |
browser_click | no | 按id或CSS选择器单击元素 |
browser_hover | no | 悬停并返回前后差异 |
browser_type | no | 在表单字段中键入文本 |
browser_remember_dom | no | 保存命名DOM快照 |
browser_doms | yes | 列出所有已保存的快照 |
browser_dom_compare | yes | 区分两个快照或减去一个背景 |
fetch_dom_content | no | 打开URL并仅返回其前台内容 |
browser_see_visual | 是 | 屏幕截图(视口或整页,任何设备) |
集装箱管理
docker compose up -d # start
docker compose down # stop
docker compose up -d --build # restart after code changes
docker compose logs -f # tail logs之后 --force-recreate,MCP会话令牌无效。第一次工具调用将获得 Session not found error——只需重试一次;Claude Code会自动重新建立会话。
访问本地开发服务器
Docker无法访问主机 localhost.使用 host.docker.internal 相反:
# Wrong
browser_launch url="http://localhost:4000/"
# Correct
browser_launch url="http://host.docker.internal:4000/"隐私
smth完全在您的本地计算机上运行。它不向外部服务传输任何数据。浏览器会话被隔离在Docker容器中。没有遥测,没有分析,没有超出您访问的页面本身的网络调用。
