最近很多人问我:Cherry Studio不是个AI聊天客户端吗?整天在群里看到有人用Cherry Studio玩MCP、跑自动化测试、做数据爬取,到底是怎么搞的?我自己也踩了不少坑,折腾了一两周,把整个链路摸了一遍,今天把整个过程整理出来。这篇文章不会讲那种玄乎的“AI将会改变一切”,而是切切实实地从工具安装、MCP配置、测试用例设计、爬虫脚本实现,一直讲到问题排查,尽量让你看完之后能直接照着做。
老规矩,先说清楚目标读者:已经安装了Cherry Studio、对AI辅助编程或测试有一点基础,但还没搞清楚MCP怎么用的人;或者是想做自动化测试但不想上来就写几百行Selenium脚本,想先借助AI快速验证流程的人。文章核心一句话:把MCP当成一个“万能工具插座”,Cherry Studio就是插座面板,你用自然语言让AI调用工具,它能帮你操作浏览器、抓网页、跑测试用例。
1. 为什么要把自动化测试和数据爬取交给Cherry Studio + MCP
1.1 先从Cherry Studio的定位说起
Cherry Studio本质上是一个多模型AI客户端,它本身不带推理能力,而是帮你集中管理各家大模型的API Key,统一对话入口。常见的用法是同时配置多个模型,比如日常问答用一个模型,写代码用另一个模型,然后在同一个会话里随时切换。
但这只是“聊天客户端”的维度。Cherry Studio的一个重要设计是支持MCP(Model Context Protocol,模型上下文协议)。这个协议最早由Anthropic提出,核心要解决的事情是:让AI模型可以调用外部工具、访问外部数据,而不是只靠训练时的知识回答你。打个比方,模型就像一个刚毕业的实习生,知识储备不错,但不会用公司内部系统;MCP就是给这个实习生配上各种工具和接口,他才能真的干活。
所以,Cherry Studio + MCP的组合,把“AI聊天”升级成了“AI Agent工作台”。你可以直接让AI打开某个网页、点击按钮、填写表单、检查页面返回结果、提取关键数据,甚至把结果整理成Excel。整个过程不用离开客户端,也不需要单独装什么复杂环境。
1.2 自动化测试、数据爬取为什么值得接入MCP
先说自动化测试。传统的UI自动化测试,你要写Selenium或Playwright脚本,定位元素、处理等待、写断言、跑用例。这套流程对熟练的开发或测试来说不算难,但对大多数人来说门槛在“写脚本”本身——你为了验证一个小功能,可能要先折腾半天环境。
接入MCP之后,流程变成了:你告诉AI“打开这个页面,点击登录按钮,输入账号密码,断言是否跳转到首页”。AI理解你的意图后,会通过Playwright MCP server去执行对应的浏览器操作,把它变成真实的浏览器指令,最后把操作结果反馈给你。相当于你把写脚本的过程交给了AI,自己只需要描述需求、审阅结果。
数据爬取也类似。传统爬虫要写HTTP请求、处理Cookie、解析HTML、提取字段,代码量不小。而MCP提供了一些现成的网页抓取工具server,AI可以自行决定访问哪个URL、抓取哪些内容、按什么结构整理数据。你只需要给一句“帮我抓取这个页面上所有商品标题和价格”,剩下的细节AI会拆解成工具调用去执行。
1.3 网络热词里那些玩法,到底哪些值得试
搜索相关关键词的时候,能看到大量和MCP相关的玩法:playwright mcp、figma mcp、blender mcp、codex配置mcp、chrome mcp server,甚至还有catia mcp、nxopen mcp这种工业设计软件的场景。这说明MCP协议本身已经成了一个比较通用的生态,不只是聊天玩具。
从实用角度来看,我个人觉得最值得优先尝试的是浏览器自动化类(Playwright MCP)、网页内容抓取类(Fetch / Chrome DevTools MCP)、文件读写类(Filesystem MCP)。这三个场景和日常开发、测试、数据处理关系最紧密,也是本文要重点展开的。
另外,如果你已经在用Cursor或Codex,会发现它们也能配置MCP server。这类工具的思路其实一样:把外部工具能力接入AI对话流,让AI不仅会“想”,还会“做”。所以本文讲的流程,换到别的支持MCP的客户端上也通用,只是配置入口不同。
2. MCP核心概念:先把这几个名字弄清楚再动手
2.1 MCP是什么,一句话说清楚
MCP的全称是Model Context Protocol,翻译过来是“模型上下文协议”。它的作用,是在AI模型和外部工具之间建立一套标准化的通信方式。
你可以把它理解为通用USB接口:以前每个设备都有自己的充电接口,现在统一成了Type-C,哪个设备都能插。MCP做的事情类似——如果没有MCP,你想让AI调用浏览器、数据库、文件系统,每个工具都得单独给AI写一套集成代码;有了MCP,工具方只需要实现一个标准的server,任何支持MCP的客户端(包括Cherry Studio)都能直接调用。
2.2 host、client、server的角色分工
在用MCP时,会涉及三个角色:MCP Host、MCP Client、MCP Server。
MCP Host是运行AI模型的上层应用,比如Cherry Studio就是Host。Host负责把用户的问题发给模型,并把模型要求调用的工具指令转发出去。
MCP Client在Host内部运行,作用是维护与各个Server的连接,可以把它理解为“调度中心”,客户端与服务器之间的会话管理、消息收发都由它负责。
MCP Server是实际干活的进程。每个Server提供一类或多类工具,比如Playwright Server提供了浏览器控制工具,Filesystem Server提供了文件读写工具。Server启动后通过标准输入输出(stdio)或HTTP与Client通信。
用一个生活场景来说明:你在餐厅点了菜(对AI描述需求),服务员(Host)把你的话记下来,后厨(Client)根据菜单安排各个厨师(Server)去做菜。每个厨师只负责自己的灶台,但他们通过后厨平台统一配合。
| 角色 | 作用 | 对应到Cherry Studio |
|---|---|---|
| MCP Host | 承载AI模型与用户交互 | Cherry Studio本体 |
| MCP Client | 管理MCP Server连接与消息转发 | Cherry Studio内置的MCP客户端模块 |
| MCP Server | 提供具体工具能力,如浏览器控制、网页抓取 | Playwright MCP、Fetch MCP等独立进程 |
2.3 MCP的调用链路:AI到底怎么“操作”工具的
MCP调用过程可以分成几段。第一步,用户输入自然语言需求,Host将消息传给大模型。第二步,模型根据内置的System Prompt和工具描述,判断应当调用哪个MCP Server的哪个工具,生成一个工具调用请求。第三步,Host中的MCP Client收到请求,将参数转发给对应的Server进程。第四步,Server执行真实操作——打开浏览器、点击按钮、读取文件等,然后把结果返回给Client。第五步,Client把结果回传给模型,模型基于结果决定下一步动作或生成最终回复。
这个过程最关键的一点是,模型是有“决策权”的,它不会一股脑把所有步骤都做完,而是边看结果边决定下一步。比如你让它“打开页面并搜索关键词”,它会先调用浏览器打开URL,等页面加载完成后看到结果,再决定调用点击或输入工具。这就是所谓的Agent循环。
2.4 动手之前先想清楚:你需要的工具集
在配置MCP之前,建议先列一下你要做的事情需要哪些能力,不然一股脑装一堆Server,不仅拉低启动速度,还会让模型决策变混乱。
我的经验是,做Web自动化测试和数据抓取,常用Server就这几个:
- Playwright MCP:核心主力,控制浏览器执行点击、输入、滚动、截图、读取DOM等操作。
- Fetch MCP:直接抓取URL内容并转为结构化文本,适合简单页面、接口数据。
- Chrome DevTools MCP:通过Chrome调试协议直接与浏览器交互,可以做性能分析和更底层的页面操作。
- Filesystem MCP:读写本地文件,方便把测试结果或爬取数据落盘。
- Memory MCP:跨会话保存一些常用配置或状态,比如登录态或常用选择器。
在Cherry Studio的MCP配置页里,你会看到一个已连接Server列表,每个Server下方列出了它提供的工具。我建议控制Server数量在两到三个,模型决策的准确率会明显更高。
3. 环境准备:Cherry Studio接MCP的完整步骤
3.1 安装Cherry Studio并找到MCP入口
如果你还没装Cherry Studio,去官网下载对应系统的版本即可。安装过程没什么特别的,普通应用程序安装流程。装完之后,重点找MCP配置入口。不同版本所在位置略有差异,但一般都在“设置”或“助手”区域里,有一个“MCP服务器”或“MCP工具”的选项。
有的版本MCP功能不是默认展开的,需要你先打开开发者模式或高级设置。具体位置是设置页右侧,往下翻能看到“MCP服务器”,点击“添加”就可以开始配置。我最初找不到入口,就是因为版本较老,升级到最新版之后才出现。
3.2 添加一个MCP Server配置
MCP Server可以通过命令行方式启动,也可以连接远程HTTP服务。最常用的方式是通过npx运行Node.js包,因为Playwright等工具都是Node生态的。
以添加Playwright MCP为例,配置项大概像这样:
{ "mcpServers": { "playwright": { "command": "npx", "args": ["-y", "@playwright/mcp@latest"], "env": { "HEADLESS": "false" } } } }这里有个细节:command是npx,args里传入包名。env字段可以设置环境变量,比如HEADLESS控制浏览器是否有头模式。如果你需要在抓取时观察浏览器画面,就设为false;如果只是跑批量测试、不需要人盯着,可以设成true,节省系统资源。
在Cherry Studio里,你不需要直接手写JSON文件,界面里有表单,但理解这个JSON结构仍然重要,因为在命令行调试、迁移配置时会频繁用到。
3.3 从npx启动到远程Server:三种典型连接方式
MCP Server的连接方式主要有三类,分别适合不同场景:
第一种是本地命令方式,通过npx或node执行一个本地程序,通信走标准输入输出(stdio)。这是最常用的方式,优点是简单、数据不出本机,缺点是需要本地装了对应的运行时(比如Node.js)。
第二种是HTTP / SSE方式,Server运行在远程服务器上,客户端通过URL连接。这种方式适合Server部署在容器或云主机上,多人共用一套工具。比如团队里有人把一个接口测试的MCP Server发布到内网地址,其他人直接填URL就能用。
第三种是带认证的远程方式,比如OAuth或Token鉴权。类似Figma MCP这类服务,需要你去开发者后台申请Token,然后在配置里填上,Server才能访问你的设计稿数据。
我的建议是,第一优先级用本地命令方式,因为它最稳定、最透明,出问题也容易调试。远程方式适合Server本身运行在别的地方,或者工具涉及多人共享。
3.4 验证连接与基本排错
添加完Server之后,Cherry Studio一般会显示连接状态。如果配置正常,状态会变成“已连接”,同时工具列表里会出现该Server支持的工具名。
如果连接失败,最常见的几个原因:
- 本地没有Node.js或npx不在PATH环境变量里。在命令行执行
npx --version验证一下,如果提示找不到命令,先去安装Node.js。 - 首次运行npx会下载包,速度可能很慢,甚至因为网络原因超时。可以先把包下载好,再配置Server。
- 端口冲突或权限问题,某些HTTP类Server会占用本地端口,换一个端口重试就好。
验证是否连通的最快方式,是在对话里直接问一句带有工具调用意图的话,比如“用playwright打开百度首页”。如果AI能调用browser_navigate工具并返回页面内容,说明链路已经通了。
4. 实操一:用MCP做自动化测试的完整过程
4.1 需求设定:一个可复现的测试场景
口说无凭,我拿一个实际例子来讲。假设你有一个Web页面,里面有一个登录表单,你需要验证三个点:空表单提交时是否弹出提示;错误密码时是否提示“密码错误”;正确账号密码时是否跳转成功。
用传统方式,你得写一个Playwright或Selenium脚本,几十行代码起步。用Cherry Studio + MCP,整个过程变成了对话式的。但这里要注意,不是简单说一句“帮我测一下登录”就能跑完,因为AI需要明确的操作对象和预期结果。你应当把步骤描述清楚,或者先在会话里约定好被测系统地址。
比如我首先输入:“使用Playwright MCP打开 https://example.com/login ,告诉我页面上有哪些输入框和按钮。”这一步是为了让AI先观察页面结构,后续选择器才能写准。然后你再一步步下达操作指令。
4.2 通过自然语言下达测试用例
拿到页面结构之后,接下来就是执行测试。像这样:
- 第一步,告诉AI:“点击登录按钮,不要填任何表单,然后查看页面上是否出现‘请输入账号’的提示。”
- 第二步,告诉AI:“在账号框输入test,密码框输入错误密码123456,点击登录,查看是否出现‘账号或密码错误’的提示。”
- 第三步,告诉AI:“在账号框输入正确账号,密码框输入正确密码,点击登录,观察页面是否跳转到首页,并截图保存。”
有趣的地方在于,AI会自己决定调用哪个工具。比如“点击登录按钮”,模型可能会先调用browser_snapshot获取当前页面可操作元素,再调用click工具点击对应位置。你在对话里看到的反馈,实际上是它一步步执行工具后返回的结果。
我在实测中发现,AI对模糊指令的处理有时比较机械。比如你说“点击登录按钮”,当页面有多个按钮时,它可能点错。这时候需要你描述得更精确,例如“点击type=submit且文本为‘登 录’的按钮”。所以在写测试用例时,比平时跟同事沟通还要再具体一点。
4.3 自动化测试中三个关键技巧
跑了几轮之后,我总结了三个对MCP自动化测试影响很大的技巧。
第一,页面元素定位要明确。MCP虽然能获取页面快照,但模型对视觉位置的理解不如人精准。如果你能在指令中给出CSS选择器或XPath,它的点击准确率会大幅上升。比如:“点击按钮 #login-submit”,比“点击登录按钮”成功率更高。
第二,等待策略很重要。页面加载、接口请求都需要时间,AI虽然会做一些自动等待,但遇到慢接口时容易在页面还没渲染完就断言失败。我通常会在指令里加上“等待2秒后再操作”或“等待页面完全加载,检查是否有加载中提示”。
第三,结果断言要具体。AI执行完操作后,如果只是问“页面正不正常”,它可能会回答得模棱两可。更好的做法是明确指定:“检查页面是否包含‘登录成功’字样,如果包含输出PASS,否则输出FAIL并截图。”这样把断言标准固化下来,测试结果才有意义。
4.4 结合Playwright MCP的踩坑记录
Playwright MCP本身很好用,但实际跑的时候,我踩了几个坑,值得说一下。
第一个坑是浏览器启动参数。默认情况下,Playwright MCP会启动一个带界面的浏览器,这在调试时很方便,但如果你在服务器上跑测试,没有图形界面,浏览器会启动失败。解决办法是在配置里设置HEADLESS=true。
第二个坑是iframe里的元素。MCP的快照功能有时候不会把iframe内部内容完整暴露给模型,导致AI找不到元素。我的处理办法是:先用工具定位到iframe,再让AI切换进去操作。虽然对话里多几个来回,但走一步看一步反而更稳。
第三个坑是登录态的保存。每次启动浏览器都是全新会话,一些需要登录的页面就要重新走一遍登录流程。后来我把登录流程做成一个“预热步骤”,先跑一遍登录,再让AI把Cookie保存到文件,下次启动时通过Playwright的storageState参数加载。
第四个坑是MCP工具调用的“幻觉”。有时候模型会编造一个不存在的工具名,比如它可能以为有一个click_by_text的工具,实际上不存在。这时候需要在对话里明确工具前缀,比如“使用playwright提供的click工具”,模型就不太会跑偏。
5. 实操二:用MCP做数据爬取的思路与实现
5.1 先分清爬取场景,选对工具
爬取数据之前,先判断目标页面的类型,这会决定你要用哪个MCP Server。
如果是纯静态页面,内容直接写在HTML里,用Fetch MCP就够。它能把页面整个抓下来,再让AI模型从文本中提取关键信息。优点是快、轻量,不依赖浏览器。
如果是单页应用,内容通过JavaScript动态渲染,Fetch MCP只能拿到空壳HTML,这时候就得用Playwright MCP。Playwright会真实启动浏览器渲染页面,等JS执行完再抓取内容,得到的才是真正可见的页面。
如果爬取目标有登录、分页、下滑加载等交互,Playwright也是必要选择,因为你能让AI模拟点击“下一页”按钮。
5.2 一个通用流程:搜索、打开、抽取、整理
我以爬取某个公开商品列表页为例,演示整个流程。假设目标页面是一个行业资讯列表,每页有20条数据,每条包含标题、发布时间、摘要,需要翻10页。
第一步,让AI打开列表页第一页:“用playwright打开目标URL,等待页面加载完成,列出当前页面所有列表项的标题和时间。”
第二步,检查AI返回的数据结构。如果它漏了某些字段,你可以追问:“只提取标题和发布时间,忽略摘要,按表格形式输出。”
第三步,翻页。发送指令“点击下一页按钮,等待2秒,继续提取同样的字段”。这里要注意,如果你一次性说“继续翻页抓取10页”,AI在长任务执行上可能会中断或者漏页,我建议分页指令,一页一页来,或者明确“重复这个操作直到没有下一页”。
第四步,整理数据。等所有页的数据抓完之后,你可以让AI对所有提取结果做结构化的汇总,比如合并去重、按时间排序,最后输出成表格。
5.3 数据落盘:导出Excel的那点事
很多人会搜“Cherry Studio能导出Excel表格吗”,其实这个问题的答案取决于你怎么理解“导出”。
Cherry Studio本身的对话记录导出格式主要是Markdown和文本,并不是表格软件。但是对话里产出的结构化数据,可以让AI把内容整理成CSV格式的代码块,然后你复制粘贴保存成.csv文件,用Excel直接打开就行。如果你装了Filesystem MCP,甚至可以让AI直接把CSV写入本地文件,都不用复制粘贴。
我在实践里的做法是,让AI生成CSV内容并调用filesystem.write_file写入到指定路径,再用Python脚本或Excel打开做进一步清洗。如果数据量大,比如几千行,建议分页抓取时就把每页结果追加到一个文件里,最后合并。
这里有一个小技巧:CSV编码问题。你抓取的中文内容,如果直接用Windows记事本打开,有可能会乱码,原因是CSV保存时用了UTF-8编码,而Excel默认用GBK。让AI在写入时指定UTF-8 with BOM,或者最后用Excel的“数据-自文本”导入并选择UTF-8编码,基本能解决乱码。
5.4 合规、频率控制与“别作死”的底线
数据爬取这件事,操作上不难,但合规一定要留心。我的原则是:只爬取公开数据;遵守目标网站的robots协议;控制请求频率,不给对方服务器造成压力;不破解登录限制或验证码;爬下来的数据不用于任何商业用途或公开传播。
具体到MCP实操层面,频率控制可以这样实现:在抓取指令里明确要求“每页请求完成后等待3秒再访问下一页”,或者设置在Playwright里模拟人的操作速度,比如滚动页面、随机延迟。这些虽然会拖慢速度,但从长期角度看更稳妥。
另外,目标网站如果明显有反爬措施,正常手段拿不到数据,那就说明这个数据本身不应该通过爬取获取,应该考虑官方API或授权渠道。MCP + AI再强,也不应该用在绕过访问控制的场景上。
6. 常见问题与排查技巧实录
6.1 一张表搞定八成故障
我把这段时间遇到的问题整理成了一个速查表,排查时先按这个顺序过一遍,大部分问题都能解决。
| 症状 | 可能原因 | 处理办法 |
|---|---|---|
| MCP Server显示“未连接” | 本地Node.js未安装或npx不在PATH | 命令行执行node -v、npx --version确认环境 |
| 首次连接特别慢 | npx正在下载依赖包 | 预先安装依赖或更换网络环境,后续启动会快 |
| AI说“找不到指定工具” | 模型生成的工具名与实际不符 | 在指令中明确“使用playwright中的xxx工具” |
| 浏览器没有弹出窗口 | HEADLESS被设成了true | 配置HEADLESS: false,或检查是否有隐藏的后台窗口 |
| 页面元素定位失败 | 页面结构变化,或iframe中内容不可见 | 先获取页面快照,再基于快照中的元素信息操作 |
| 抓取内容为空 | 页面是动态渲染,Fetch MCP拿不到HTML | 改用Playwright MCP,等页面JS执行完毕后再抓取 |
| 中文CSV打开乱码 | 编码不一致 | 写入时使用UTF-8 with BOM,或导入Excel时手动选择UTF-8编码 |
| 长任务执行到一半中断 | 单轮对话上下文或工具超时限制 | 拆分成短任务,分页多次执行,保留中间结果 |
6.2 哪个环节慢了?定位性能瓶颈
做自动化测试和数据抓取时,如果感觉很慢,慢在哪个环节要分清楚。
如果是AI“思考”慢,比如你提问后模型隔了很久才回复,这通常是模型本身的推理速度或API响应问题。你可以在Cherry Studio里换一个更快的小模型,或者限制回答长度。
如果是MCP Server执行慢,比如浏览器打开页面卡顿、页面脚本执行时间过长,那跟目标网站和本机性能有关。你可以观察状态栏上的工具调用耗时,确认耗时集中在哪个操作上。
如果是工具返回结果很大,比如抓了一大段HTML回传给模型,这会明显拖慢后续响应,因为模型要处理的内容变多了。解决办法是让MCP Server端先做筛选,比如使用Playwright提取文本而不是整页HTML,再让AI基于摘要处理。
6.3 进阶:把常用流程沉淀成模板和脚本
用对话方式完成一次测试或爬取之后,不要只在对话里跑一遍就完事,更高效的做法是把整个流程沉淀成一个可复用的模板。
我的习惯是,把成功的指令序列保存成Markdown笔记,按“打开页面-获取快照-输入表单-点击提交-断言结果”这样的结构记录。下次跑相同场景时,直接把整段指令复制进新对话,让AI按步骤执行。这样可以大大减少每次都要重新描述需求的时间和出错概率。
更进一步,如果MCP的对话流程很稳定了,可以考虑把核心步骤转成Python脚本,用Playwright库直接写自动化代码。MCP在这里扮演的角色是“快速验证测试步骤的脚手架”:先用自然语言验证一遍业务逻辑,确认选择器、断言点都没问题,再固化成真正的自动化回归脚本。这个思路比一上来就写脚本要快不少,也避免了大量因为选择器写错而反复调试的问题。
最后再分享一点我个人的体会。MCP这个东西,第一次用时觉得“也就是把工具调用包装了一下”,但真正跑起来之后,会明显感觉到它改变的是工作方式。以前做一个测试用例,先查文档、写代码、调试、跑通,至少半天;现在可以先在Cherry Studio里把流程快速过一遍,看到结果不对就马上调整指令,几分钟就能把方案确定下来。对于数据爬取也一样,需求确认的速度快了很多,剩下的工作量主要是数据处理和合规检查。
当然,MCP并不完美。界面上偶尔会卡,长任务容易断,模型偶尔会自作聪明选错工具,这些都还需要时间打磨。但就目前而言,它已经是一个值得认真研究的效率工具了。把Chat类客户端升级成真正能干活的Agent工作台,这条路已经走通了,接下来就看你能在它上面搭出多少自己的玩法。