1. 从网页抓数据到 Excel 落盘,为什么手动复制粘贴总是出错
做数据采集和运营报表的朋友大概率都经历过这个循环:打开目标网页,找到需要的那几列信息,Ctrl+C、切到 Excel、Ctrl+V,然后发现格式乱了、数字变成文本了、多抓了一行表头。数据量小还能忍,一旦要盯十几个页面、每天更新一次,手动操作基本等于给自己挖坑。
我最近在折腾一套自动化链路,核心思路是用 browser-tools-mcp 负责“看网页”,用 excel-mcp-server 负责“写表格”,中间用 cursor 当调度台,把自然语言指令翻译成 MCP 工具调用。整套流程跑通之后,从网页读取结构化信息到 Excel 落盘,基本可以做到一句话触发、结果直接进文件。
这套方案适合谁?一是需要定期从固定网页抓取信息做报表的运营和数据分析同学;二是想入门 MCP 协议、找一个真实可跑案例的开发者;三是已经在用 cursor 写代码、想把浏览器和本地文件系统也接进 AI 工作流的人。它不依赖复杂的爬虫框架,也不需要你手写解析逻辑,核心是把三个 MCP 服务配置好,剩下的交给 cursor 里的对话来完成。
需要提前说明的是,browser-tools-mcp 抓取的是浏览器当前打开页面的内容,适合结构相对稳定、需要登录态或者动态渲染的页面;excel-mcp-server 操作的是本地 Excel 文件,支持读写单元格、创建 sheet、追加行等操作。两者通过 cursor 的 MCP 客户端串联,形成“读取—映射—写入”的闭环。下面我会把三个服务的配置片段、调用顺序、字段映射示例,以及一次完整的验证动作拆开讲清楚,你可以直接照着复现。
2. TaoToken 前置准备:给 cursor 配一个稳定的模型入口
在配置 MCP 服务之前,有一个容易被忽略但很关键的前置环节:cursor 里的 AI 对话需要调用大模型,而模型入口的稳定性直接决定了整条链路能不能跑通。我试过直接用默认配置,遇到过高频请求被限流、响应中断的情况,后来换成 TaoToken 的 API 入口,整体稳定了不少。
TaoToken 在这里的角色是提供兼容 OpenAI 协议的模型调用服务,cursor 通过自定义 Base URL 和 API Key 接入。你需要先拿到一个可用的 Key,然后把它填到 cursor 的模型配置里。具体操作路径是:访问 TaoToken 官网注册账号,进入控制台创建 API Key,然后在 cursor 的 Settings 里找到 Models 配置项,把 Base URL 填成https://taotoken.net/api,API Key 填你刚创建的那串字符,Model ID 根据你的需求选一个支持工具调用的模型。
这里有个细节要注意:cursor 的 MCP 工具调用依赖模型具备 function calling 能力,所以选模型时尽量挑支持工具调用的版本。配置完成后,你可以在 cursor 对话框里发一句简单指令测试连通性,比如“列出当前可用的 MCP 工具”,如果模型能正常返回工具列表,说明模型入口和 MCP 客户端都就绪了。
如果你后续要做长期的编码或 Agent 任务,可以考虑 TaoToken 的 Coding Plan,它在高频调用场景下更划算;如果只是临时验证模型效果,用模型对话页面直接测试也行。接入文档里有针对不同客户端的配置说明,遇到 Base URL 或 Key 格式问题可以对照排查。这一步看起来是准备工作,但实际决定了后面 MCP 调用会不会因为模型超时而中断,建议先把它跑通再往下走。
3. 三个 MCP 服务的可复制配置片段与 cursor 接入
这一节是整篇的核心,我会把 browser-tools-mcp、excel-mcp-server 以及 cursor 的 MCP 配置文件完整贴出来,路径和参数都保持和实际运行一致,你可以直接复制修改。
先看 cursor 的 MCP 配置文件。在 macOS 上,路径通常是~/.cursor/mcp.json,如果目录不存在就手动创建。配置文件内容如下:
{ "mcpServers": { "browser-tools": { "command": "npx", "args": ["-y", "@agentdeskai/browser-tools-mcp@latest"], "transport": "stdio" }, "excel-mcp": { "command": "uv", "args": ["run", "excel-mcp-server", "stdio"], "env": { "EXCEL_FILES_PATH": "/Users/yourname/Downloads/ExcelMcp/files" } } } }这里有两个关键点。第一,browser-tools用的是npx直接拉取最新版,transport指定为stdio,表示通过标准输入输出通信。第二,excel-mcp的EXCEL_FILES_PATH必须指向一个真实存在的目录,excel-mcp-server 只会在这个目录下读写 Excel 文件,这是它的安全边界。你需要把/Users/yourname/Downloads/ExcelMcp/files替换成自己机器上的实际路径,并且提前用mkdir -p创建好。
browser-tools-mcp 还需要一个 Chrome 扩展配合。你需要克隆它的仓库,然后在 Chrome 的扩展程序管理页面开启开发者模式,加载browser-tools-mcp/chrome-extension文件夹。扩展装好后,浏览器右上角会出现 BrowserTools 图标。接着在终端启动 Browser Tools Server:
npx @agentdeskai/browser-tools-mcp@latest启动成功后,终端会输出类似Successfully discovered server at 127.0.0.1:3025的日志。这时候打开 Chrome,按 F12 进入控制台,找到 browserToolsMcp 面板,点一下 Test connection,确认连接状态正常。这一步是很多人的踩坑点:如果扩展没装或者 Server 没启动,cursor 里的 browser-tools 工具调用会直接报连接失败。
excel-mcp-server 的安装稍微多几步。它依赖 Python 3.10+ 和 uv 包管理器。你可以用 Homebrew 装 Python 3.11,然后用 pip3 安装 uv:
brew install python@3.11 pip3 install uv接着克隆仓库并创建虚拟环境:
git clone https://github.com/haris-musa/excel-mcp-server.git cd excel-mcp-server uv venv uv pip install -e .安装完成后,用uvx excel-mcp-server stdio可以单独测试服务是否能启动。如果终端没有报错并进入等待状态,说明 excel-mcp-server 本身没问题。注意,cursor 配置里用的是uv run excel-mcp-server stdio,这和单独测试的命令略有不同,前者是在项目虚拟环境里运行,后者是全局拉取。两种方式都能跑,但建议保持和配置文件一致,避免环境错乱。
三个服务都配好之后,重启 cursor,在对话框里输入“列出当前可用的 MCP 工具”,你应该能看到 browser-tools 和 excel-mcp 两组工具。browser-tools 通常提供getCurrentPageContent、getConsoleLogs等工具,excel-mcp 提供createWorkbook、writeData、readData等工具。工具列表能正常返回,说明整条链路的前置配置已经完成。
4. 从网页读取到 Excel 落盘的完整验证请求
配置就绪后,我们来做一次端到端的验证。目标很明确:用 browser-tools-mcp 读取一个网页上的结构化信息,通过 cursor 的模型做字段映射,再用 excel-mcp-server 写入本地 Excel 文件。
先准备一个测试网页。你可以打开任意一个包含列表信息的页面,比如一个商品列表、一篇文章的目录、或者一个公开的数据表格。为了演示方便,我假设页面上有一个包含“标题、作者、发布时间”的列表。在 Chrome 里打开这个页面,确保 BrowserTools 扩展处于激活状态。
然后在 cursor 对话框里输入这样的指令:
请用 browser-tools 读取当前浏览器页面的内容,提取页面中所有列表项的标题、作者和发布时间,然后用 excel-mcp 把这些数据写入 /Users/yourname/Downloads/ExcelMcp/files/web_data.xlsx,表头分别是 Title、Author、PublishTime。cursor 收到指令后,会先调用 browser-tools 的getCurrentPageContent工具,把页面 DOM 或文本内容拉回来。接着模型会根据你的字段要求,从页面内容里解析出对应的数据。这一步依赖模型的解析能力,如果页面结构比较规范,提取准确率会很高;如果页面结构混乱,你可能需要在指令里补充更具体的定位描述,比如“标题在 class 为 item-title 的元素里”。
解析完成后,cursor 会调用 excel-mcp 的工具。通常的调用顺序是:先createWorkbook创建文件(如果文件已存在则跳过),再writeData写入表头和数据行。excel-mcp-server 的writeData工具一般接受文件路径、sheet 名称、起始单元格和数据数组这几个参数。模型会自动把解析出的数据组装成二维数组,比如:
[ ["Title", "Author", "PublishTime"], ["示例文章一", "张三", "2024-06-01"], ["示例文章二", "李四", "2024-06-02"] ]写入成功后,cursor 会返回类似“已成功写入 2 行数据到 web_data.xlsx”的提示。这时候你打开EXCEL_FILES_PATH目录下的web_data.xlsx,应该能看到表头和三列数据已经正确落盘。如果文件之前不存在,excel-mcp-server 会自动创建;如果已存在,默认是追加还是覆盖取决于你调用的工具和参数,建议在指令里明确说“追加到现有 sheet”或“新建 sheet 写入”。
整个验证过程的关键在于字段映射。网页上的字段名和 Excel 表头往往不一致,比如网页显示“发布日期”,Excel 要求“PublishTime”,你需要在指令里把映射关系说清楚。cursor 的模型会根据你的描述做转换,如果映射逻辑复杂,可以分两步:先让模型输出解析后的 JSON,确认无误后再让它写入 Excel。这样即使解析出错,也不会污染已有文件。
5. 常见报错排查:401、local proxy failed 与 reading choices
即使配置看起来没问题,实际跑的时候还是会遇到各种报错。这一节我整理了几个高频错误和对应的排查思路,你可以对照自己的终端日志和 cursor 提示来定位。
第一个常见错误是401 Unauthorized。这个通常出现在模型调用环节,说明 cursor 里的 API Key 无效或者 Base URL 配错了。排查步骤是:打开 cursor 的 Models 设置,确认 Base URL 是https://taotoken.net/api,Key 没有多余空格,Model ID 拼写正确。如果 Key 刚创建不久,可以到 TaoToken 控制台的 API Keys 页面确认状态是否正常。另外,有些模型需要单独开通工具调用权限,如果返回 401 的同时提示权限不足,检查一下所选模型是否支持 function calling。
第二个错误是local proxy failed或connection refused。这个多半是 browser-tools-mcp 的 Server 没启动,或者 Chrome 扩展没连上。排查顺序是:先在终端确认npx @agentdeskai/browser-tools-mcp@latest还在运行,没有意外退出;然后打开 Chrome 控制台的 browserToolsMcp 面板,点 Test connection 看是否显示已连接;如果扩展图标是灰色的,重新加载一次扩展。还有一个容易忽略的点:browser-tools-mcp 默认扫描 3025 到 3035 端口,如果这些端口被其他程序占用,Server 可能启动失败,你可以换一个端口范围或者关掉占用端口的程序。
第三个错误是reading choices相关的报错,通常表现为模型返回格式不符合预期,比如Cannot read properties of undefined (reading 'choices')。这说明模型接口返回的结构和 cursor 期望的不一致,常见原因是 Base URL 后面多加了/v1或者少加了路径。TaoToken 的 API 入口是https://taotoken.net/api,cursor 会自动拼接后续路径,你不需要手动加/v1/chat/completions。如果确认 URL 没问题,检查一下模型名称是否在 TaoToken 的支持列表里,有些模型别名不兼容 OpenAI 格式,换一个标准模型名再试。
第四个错误和 excel-mcp-server 有关,比如File not found或Permission denied。这通常是EXCEL_FILES_PATH指向的目录不存在,或者 cursor 进程没有该目录的写权限。解决办法是手动创建目录,并确保当前用户有读写权限。另外,excel-mcp-server 只允许操作EXCEL_FILES_PATH下的文件,如果你在指令里写了绝对路径但不在这个目录内,它会拒绝执行。建议在指令里只写文件名,让服务自己在EXCEL_FILES_PATH下查找。
如果遇到 Claude Code 相关的 OAuth 报错,比如OAuth token expired,那说明你用的是 Claude Code 的接入方式,需要重新走一遍授权流程。不过本文的链路是基于 cursor 的 MCP 配置,不涉及 Claude Code 的 OAuth,所以这个错误一般不会出现。如果你同时配了多个客户端,注意区分各自的配置文件,避免 Key 混用。
6. 把这条链路用起来:从一次性验证到日常自动化
跑通一次验证之后,你可以把这套流程固化下来,变成日常可复用的自动化任务。我的做法是在 cursor 里保存几个常用的指令模板,比如“抓取当前页面表格并追加到日报.xlsx”“读取商品列表页并更新库存表.xlsx”,每次需要的时候打开对应网页,切换 cursor 粘贴指令即可。
如果你需要定时执行,可以结合系统的定时任务或者 CI 工具,但要注意 browser-tools-mcp 依赖浏览器当前打开的页面,纯后台定时抓取需要配合无头浏览器方案,这就超出了本文的范围。对于大多数运营和数据分析场景,手动触发一次、几秒钟完成写入,已经比纯手工复制粘贴快很多了。
另外,excel-mcp-server 支持的不只是写入,你还可以用它读取现有 Excel 的数据,让模型做对比、去重或者生成汇总。比如先让 browser-tools 抓取最新数据,再让 excel-mcp 读取历史文件,模型对比后只写入新增行。这种“读取—比对—写入”的模式在去重场景下很实用。
最后提醒一点:MCP 工具调用会消耗模型 token,页面内容越长、字段映射越复杂,消耗越大。如果只是简单抓取,可以在指令里限定“只提取列表区域的前 20 条”,避免把整个页面塞给模型。TaoToken 的 Coding Plan 在高频调用下成本更可控,适合需要长期跑这类任务的用户。接入文档和 API Keys 管理都在控制台里,遇到配置问题可以随时对照检查。