mcp获取ux
使用真实浏览器获取网页的MCP服务器。渲染JavaScript,穿透Shadow DOM,返回干净的文本。可以与页面交互——点击按钮、填写表单、下载文件。
因为Claude Code的 WebFetch 无限期挂起 在没有超时的慢速站点上,现有的获取工具无法看到ShadowDOM内部。
运作原理
- 剧作家 启动无头Chromium并导航到URL
- 自动取消cookie/同意覆盖
- 等待JS渲染(轮询直到页面内容稳定)
- Ctrl+A、Ctrl+C -使用剪贴板API捕获所有可见文本,包括Shadow DOM中的内容
- 发现可用操作(按钮、链接、输入)并将其作为提示返回
- 可选地运行操作(单击、填充、等待)——如果单击触发下载,则返回文件内容
循环中没有LLM。无API成本。30秒超时。
快速启动
git clone https://github.com/bxxd/mcp-fetch-ux.git
cd mcp-fetch-ux
make install # install deps + Chromium + 'fetch' CLI to ~/.local/bin/# Basic fetch
fetch https://www.roche.com/solutions/pipeline
# Click a button to download CSV
fetch https://roche.com/solutions/pipeline --click "button:has-text('Download current view as CSV')"
# Save to file
fetch https://roche.com/solutions/pipeline --click "button:has-text('Download current view as CSV')" -o pipeline.csv
# More content (default 50K chars via MCP, unlimited via CLI)
fetch https://en.wikipedia.org/wiki/Likelihood_ratio --max 100000启动MCP服务器:
make server # start on port 5006MCP配置
{
"mcpServers": {
"fetch-ux": {
"type": "sse",
"url": "http://127.0.0.1:5006/sse"
}
}
}工具
fetch
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
url | string | 必需 | 要获取的URL |
actions | array | none | 捕获前要执行的操作(单击、填充、等待、选择、滚动) |
max_length | int | 5000 | 返回的最大字符数 |
start_index | int | 0 | 从此索引继续(分页) |
raw | bool | false | 返回原始HTML而不是文本 |
两步互动
第一次调用返回页面内容+可用操作:
Contents of https://www.roche.com/solutions/pipeline:
Title: Roche | Product Development Pipeline
RG7716
faricimab
Vabysmo
macular edema secondary to branch retinal vein occlusion (BRVO)
...
---
Available actions on this page:
- click: "button:has-text('Download current view as CSV')"
- click: "button:has-text('Phase')"
- fill: "search" (search)第二次调用操作会获取数据:
{
"url": "https://www.roche.com/solutions/pipeline",
"actions": [{"action": "click", "selector": "button:has-text('Download current view as CSV')"}]
}返回完整的CSV(51K个字符,131个带描述的管道条目)。
为什么不只是httpx/curl?
它们不渲染JavaScript。罗氏的流水线页面返回一个空壳——药物数据通过JS加载到Shadow DOM web组件中。 curl 什么也得不到。这个工具得到了人类看到的东西。
为什么不是innerText或可读性?
page.innerText('body') 和 document.getSelection() 不要跨越Shadow DOM边界。可读性无法看到JS渲染的内容。剪贴板API准确地捕捉用户在Chrome中按Ctrl+a、Ctrl+C时获得的内容,这是从现代网页中获取所有可见文本的唯一可靠方法。
为什么不crawl4ai?
已测试 crawl4ai (50K+颗星)在同一罗氏管道页面上。它返回7220个字符,其中没有药物名称——在Shadow DOM中看不到。此工具返回11224个字符和所有131种药物。
演出
浏览器在服务器启动时启动一次并保持活动状态。每次获取都会打开一个新的上下文,获取,关闭。
| 阶段 | 时间 |
|---|---|
| 导航 | ~1-2s |
| JS渲染+稳定 | ~1-3s |
| 每次取数总计 | ~3-5s |
并发限制为3次同时获取。
依赖项
许可证
麻省理工学院
