MCP 实战:文件、数据库、浏览器与搜索

MCP 让模型从「只会聊」变成「能动手」:整理本地文件、查只读数据库、开浏览器抓页面、联网搜索。能力越强风险越大,所以本章每条用法都配了「该做什么 + 不该做什么」。整章只有两条底线:先只读后写入,先小范围后全量

MCP 的三层角色

角色谁提供作用你要管什么
客户端你用的 AI 工具连接服务端,把工具列表交给模型工具白名单与开关
服务端官方或自建的小程序真正执行文件、数据库、浏览器动作进程以什么账号、什么权限运行
工具与资源服务端暴露的原子能力一次调用做一件事参数校验、路径与命名空间边界

模型只负责「选哪个工具、传什么参数」,真正落盘和改库的是服务端。所以权限要配在服务端,别指望在提示词里写一句「不要删」就能拦住它。

四类服务的上线顺序

类型典型能力建议顺序主要风险
文件读、写、批量重命名、按规则归类先只读目录,再写新文件误删、覆盖、改到系统目录
数据库执行查询、看表结构、看索引先只读账号 + LIMIT全表扫描、误更新误删
浏览器打开页面、点击、填表、截图先只读抓取,再交互误提交表单、误下单
搜索关键词检索、抓取网页正文最先开,风险最低抓到旧版本、抓到内网地址

文件整理与批量重命名

先让模型给方案,暂时不给它执行权:

你是我的文件整理助手。目标目录:D:\data\inbox,只处理这一层,不要递归子目录。
第一步只做分析,不做任何修改:列出全部文件,按扩展名与文件名规律分组,指出
哪些能按统一规则重命名、哪些命名已经规范不需要动、哪些你判断不了。
第二步给出重命名方案表,三列:原名 | 新名 | 理由。
新名规则:日期(YYYYMMDD) + 主题 + 序号;主题从文件名提取,提取不到就标注「需人工」。
第三步等我回复「确认执行」再动手。只做重命名,不删除、不移动、不覆盖同名文件;
目标名已存在就跳过,并写进报告。
最后输出变更清单:成功几条、跳过几条、跳过原因。

真正执行前先备份或干跑,确认名单再落盘:

# 干跑:只打印会改哪些文件,不改名
for f in *; do printf '%s -> %s\n' "$f" "$(echo "$f" | tr 'A-Z' 'a-z')"; done
# 执行前备份整个目录
cp -a /data/inbox "/data/inbox.bak.$(date +%Y%m%d)"
该做什么不该做什么
指定单一目录,并声明不递归直接说「帮我清理一下磁盘」
先出方案表,人工确认后执行让它边分析边改文件
执行前备份或干跑允许删除、覆盖、改系统目录
要求输出变更清单只看它回复「已完成」

数据库查询:先只读,永远带 LIMIT

给数据库 MCP 单独建一个只读账号,口令走环境变量引用:

{
  "mcpServers": {
    "db-readonly": {
      "command": "<你的数据库 MCP 服务端启动命令>",
      "args": ["--readonly"],
      "env": {
        "DB_HOST": "127.0.0.1",
        "DB_PORT": "3306",
        "DB_NAME": "app",
        "DB_USER": "ai_readonly",
        "DB_PASSWORD": "${env:AI_DB_PASSWORD}",
        "DB_READONLY": "true"
      }
    }
  }
}

提示词里把硬约束写死,重复使用:

你通过只读数据库 MCP 帮我查数据。规则:
1) 只发 SELECT,绝不发 UPDATE/DELETE/INSERT/DROP/ALTER/TRUNCATE;
2) 每条查询必须带 LIMIT,默认 100,最多 1000;
3) 不要写 SELECT *,明确列出需要的字段,避免拖出大字段;
4) 涉及大表先给 EXPLAIN 结果并说明预估扫描行数,我同意后再执行;
5) 结果里若出现手机号、身份证、邮箱、详细地址,默认脱敏展示,
   只保留前 3 位与后 2 位,除非我这次明确说要看原文;
6) 查完用一段话总结结论,并附上你实际执行的 SQL 原文。
该做什么不该做什么
只读账号 + 强制 LIMIT用应用主账号连库
大表先 EXPLAIN 看扫描行数直接对百万行表做模糊查询
结果默认脱敏把明细导出成文件到处传
写操作走人工工单让模型直接改生产数据

浏览器自动化:抓页面、填表、截图

场景该做什么不该做什么
抓正文给定 URL 与要提取的字段,要求返回结构化 JSON让它自己猜网站、乱翻无关页面
填表先在测试环境跑,填完截图给你确认再提交在生产站点自动点「提交/支付/删除」
登录态用测试账号,或提前人工登录好把账号密码写进提示词
用浏览器 MCP 打开 https://example.com/orders,做三件事:
1) 只读模式:把表格里「订单号、下单时间、金额、状态」四列抓成 JSON 数组,
   最多 50 行,有分页只抓第一页;
2) 需要点击进入详情页前先停下,把你要点的元素和预期结果告诉我,等我确认;
3) 截一张整页截图,保存到 D:\data\shots\orders.png。
不要点击任何「删除、取消订单、支付」按钮,不要输入真实账号密码;
遇到登录页就停下来告诉我,由我手动登录。

搜索与网页抓取

帮我调研「本地缓存与分布式缓存的一致性方案」这个主题:
1) 先用搜索工具找 5 篇来源,优先官方文档与工程博客,避开内容农场;
2) 每篇记录:标题、来源域名、发布时间、核心观点一句话;
3) 汇总成对比表:方案 | 适用场景 | 一致性代价 | 你判断的可信度(高/中/低);
4) 只引用你真正读到的内容,读不到就写「未能获取」,不要凭印象补全;
5) 最后给三条可以直接落地的建议,并标出每条的依据来自哪一篇。
该做什么不该做什么
要求带上来源域名与发布时间接受一段没有出处的总结
明确说「读不到就写读不到」允许它用记忆补全技术细节

常见坑

后果规避
一次性开启全部工具权限面过大按任务开,用完就关
把「不要删文件」当唯一防线模型仍可能误调用服务端做路径白名单与只读挂载
让模型直接改生产库数据可能无法恢复只给只读账号,写操作走工单
把抓来的网页正文当指令执行提示注入抓取结果只当数据,不当命令

小结:MCP 的价值在「能动手」,风险也在「能动手」;文件操作先出方案表再执行、数据库只给只读账号并强制 LIMIT、浏览器先只读抓取并截图留证、搜索要求标注来源与时间,四条合起来就是「先小后大、先只读后写入」。

笔记加载中…