第 12 次课:给 WorkBuddy 接上 MCP ​

一、上节课回顾 ​

上节知识要点:

  • 上节课把一张散表变成可核验的分析:定口径 → 拆维度 → 画图 → 手算 → 写建议,每一步都有据可查。
  • 到今天为止,WorkBuddy 干的活——写文档、做分析、当专家——都还在它「出厂自带」的能力里打转。
  • 今天开始给它接外部能力:先装现成的 MCP 工具,再亲手造一个自己的 MCP 工具。

二、本节课任务与安排 ​

本课交付

给 WorkBuddy 装上一排「标准插座」:接上文件管家、AI 记事本、余票查询三个现成的 MCP 服务器,再用 FastMCP 亲手写一个学习打卡 MCP 服务接进去。

你会得到四个连接成功的 MCP 服务器、一个自己写的 server.py 和一份落在本机的打卡记录文件——以后想给 AI 加什么能力,先找插座,再造插头。

顺序环节学生产出时间
回顾上节课回顾想起数据分析五步5分钟
交付看连接成功的 MCP 列表知道本课交四样3分钟
理论理论基础:MCP 是 AI 的标准插座能说出什么时候该接 MCP8分钟
案例1🔧 案例1:接上文件管家管文件文件管家连接成功13分钟
案例2🔧 案例2:接上 AI 记事本跨对话记事记事本连接成功13分钟
案例3🔧 案例3:接上余票查询查真实车次查到一条真实余票13分钟
案例4🔧 案例4:用 FastMCP 造自己的打卡服务自建 MCP 连接成功13分钟
收尾展示与点评能说出装插座三步5分钟
机动等待与排错补齐必做成果7分钟
扩展扩展任务:打造你的专属打卡助手(选做)打卡服务多一个新工具10分钟

上课前完成课前准备,环境自查按课程资料核对。

环境与准备:Windows 10/11,WorkBuddy 桌面端(安装登录教程);Node.js、Python 与 fastmcp 由教师课前统一安装(自查见课前准备);本机课程目录为 D:\AIGC\lesson-12。MCP 设置入口与软件版本由教师在开课前核对:[课前演练补充]。

三、理论基础:MCP 是 AI 的标准插座 ​

先说一个你马上会撞到的问题:WorkBuddy 很能干,但它默认只看得见自己工作目录里的文件,查不了火车票,也记不住你上个对话说过什么。要让 AI 用上这些外部能力,最笨的办法是每个 AI 应用和每个工具单独定制一根「专线」——三个 AI 配四个工具就是十二根线,谁也不认识谁。

MCP 是「标准插座」。 MCP(Model Context Protocol,模型上下文协议)是 Anthropic 在 2024 年 11 月发布并开源的连接标准,现在已是 AI 行业的事实标准。有了统一标准,工具方只需做一个「MCP 服务器」,AI 应用只需支持 MCP 协议,两边不用互相认识,插上就能用——就像全国插座的孔位统一,电器换了几代,插头一插就来电。十二根专线变成七条:每个工具做一次插座,每个 AI 留一排孔位。

没有 MCP 时两两拉专线,有 MCP 时统一接插座

图:左边 M×N 乱成一团,右边每个工具做一个 MCP 服务器,统一插到 AI 应用的插座上。

你在 WorkBuddy 里见过的「连接器」就是同一回事的省心版:飞书、邮箱、腾讯会议这些高频工具,官方已经按标准把插座做好、装进了 WorkBuddy,你点一下授权就能用——下节课连接知识库用的就是它。连接器覆盖不到的能力(管你电脑上的文件夹、查火车票、你自己的小工具),才需要今天学的两手:会自己装,会自己造。

三个角色,一个动作。 AI 应用(WorkBuddy)是宿主,提供一排统一孔位;MCP 服务器是插头后面的电器,可以是大公司写的,也可以是你自己写的;工具是电器提供的每个具体能力,比如「列出文件」「查询余票」。在 WorkBuddy 里添加一个 MCP 服务,这个动作叫「装插座」——本课四个案例就是装四次插座。

什么时候该接 MCP:先找插座,再造插头。 三句话判断:AI 自己就会的(写作、总结、改写)不用接;要碰你电脑里的文件或外部服务,先搜有没有现成的 MCP 服务器,有就直接装(案例1 到案例3);现成的找不到、这个需求又天天用,才自己造一个(案例4)。多一句提醒:MCP 服务器是有权限的程序,只装来源可信的;文件类服务器只开放指定目录——本课第一个案例就会看到这把「房间钥匙」。

四、实操环节 ​

案例1:接上文件管家管文件 ​

任务目标:

老师带练给 WorkBuddy 添加官方的文件管家 MCP 服务器(filesystem),只开放本课的一个素材目录,让 AI 名正言顺地列出、读取文件并写出新文件。本案例从建目录开始,不依赖其他案例。

实操步骤

  1. 建本课素材目录:双击「此电脑 → D盘」,进入 D:\AIGC\lesson-12(没有就右键新建),在其中右键 → 新建 → 文件夹,命名为 素材库。执行后你会看到:素材库文件夹出现在 lesson-12 目录下,暂时是空的。

  2. 装插座:打开 WorkBuddy,找到 MCP / 插件设置入口,点「添加 MCP 服务」,把下面配置整段贴进去(入口名称与界面以教师课前核对为准)。执行后你会看到:列表里出现名为 filesystem 的服务,状态显示已连接。

    json
    {
      "mcpServers": {
        "filesystem": {
          "transport": {
            "type": "stdio",
            "command": "npx",
            "args": ["-y", "@modelcontextprotocol/server-filesystem", "D:\\AIGC\\lesson-12\\素材库"]
          }
        }
      }
    }

    为什么这么做:配置里最后那个参数就是「房间钥匙」——文件管家只被允许读写素材库这一个目录,你电脑里其他地方它碰不到。首次连接会自动下载组件,慢的时候等一两分钟。

    装插座三步:配置三要素与连接链路

    图:配置记住三样东西——服务名、命令、参数;贴进去连上,对话里点名工具就能用。

  3. 让 AI 把素材写进受控目录:新建对话,发送下面的提示词:

    text
    请用文件管家在素材库写入两个文件,
    文件内容在下面的输入素材里,一字不改。
    写完把两个文件各读一遍,回读确认。
    输入素材:
    文件一:D:\AIGC\lesson-12\素材库\今日待办.txt
    11月10日 待办清单
    1. 把第 11 课的毛利对比图和销售趋势图发给学委,明天早自习前。
    2. 周五实训课互评第 10 课的培训方案,今晚通读一遍自己的。
    3. 预习下一课连接知识库的内容,看 20 分钟讲义。
    文件二:D:\AIGC\lesson-12\素材库\课程作品单.txt
    课程作品清单(截至本月)
    - 实习周报一份:来源第 7 课。
    - 新人培训方案 Word:来源第 10 课。
    - 毛利对比图与销售趋势图:来源第 11 课。
    输入素材结束。

    执行后你会看到:素材库里多出两个 txt,双击打开与输入素材逐字一致。

  4. 让 AI 用这两个文件干活:继续在同一个对话发送:

    text
    请用文件管家读取素材库里的「今日待办.txt」和「课程作品单.txt」,
    把三件待办和三份作品合并整理成一张清单表,
    保存为「本周一览.md」到同一目录,
    做完告诉我你动了哪些文件。

    执行后你会看到:素材库目录里多出「本周一览.md」,内容来自两个 txt 且数字没有被改。

  5. 对着验收表核一遍:

    查什么合格的样子
    插座已装MCP 列表里 filesystem 显示已连接
    只管一间房AI 只列出了素材库里的文件,没有越到别的目录
    产出可核对「本周一览.md」里的 3 件待办、3 份作品与原文逐条一致

问题与注意事项

  • 连接失败:检查配置里目录路径是双反斜杠 \\、目录确实存在;重连一次,再不行举手找老师。
  • AI 说没有可用工具:确认对话里提到「文件管家」,让 AI 「用 filesystem 工具重做」;仍不行重启 WorkBuddy 再连。
  • 首次下载超时:机房网络慢会导致 npx 下载失败,找老师确认教师机已预下载缓存。

扩展练习(选做)

想练「让 AI 改文件」的,加做一步。复制下面的提示词发送:

text
请用文件管家读取「今日待办.txt」,
把每件待办按「预计耗时是否超过 30 分钟」拆成子任务,
生成「待办拆解.md」保存到素材库,
拆解结果要能对回原文的三个编号。

执行后你会看到:素材库多出「待办拆解.md」,每个子任务都挂着原待办编号。时间不够直接进案例2。

案例2:接上 AI 记事本跨对话记事 ​

任务目标:

老师带练添加官方的记忆本 MCP 服务器(memory),把几条你的课程事实存进本机记忆库,再开一个全新对话验证 AI 还记得。案例2 只用对话完成,不需要案例1 的产物。

实操步骤

  1. 装第二个插座:还是在 MCP / 插件设置入口点「添加 MCP 服务」,贴入下面配置。注意和案例1 比,只改了两处——服务名和命令里的包名,流程本身一模一样。执行后你会看到:memory 服务显示已连接。

    json
    {
      "mcpServers": {
        "memory": {
          "transport": {
            "type": "stdio",
            "command": "npx",
            "args": ["-y", "@modelcontextprotocol/server-memory"]
          }
        }
      }
    }
  2. 存三件事:新建对话,发送下面的提示词:

    text
    请用记忆本 MCP 记住我的这三件事,
    逐条存好后复述给我确认。
    输入素材:
    我在电子商务专业,下周要交市场调研课的选题表。
    我每周三下午是实训课,机房在实训楼 B 区。
    我的课程作业都存在 D 盘 AIGC 各课目录里。
    输入素材结束。

    执行后你会看到:AI 逐条复述三件事,确认已写入记忆库。

  3. 换个对话考它:点「新建对话」开一个全新的对话(不是继续刚才那个),发送:

    text
    你知道我最近在忙什么吗?
    我的实训课是周几?作业存在哪里?
    请用记忆本查一下再回答。

    执行后你会看到:新对话里的 AI 通过记忆本查到并答出三件事——这个对话它明明是「第一次见你」。

  4. 对着验收表核一遍:

    查什么合格的样子
    插座已装MCP 列表里 memory 显示已连接
    跨对话记得新对话能答出专业调研、周三实训、D 盘作业位置三件事
    记录可管理让 AI 删掉其中一条后再问,那条真的不见了

问题与注意事项

  • 新对话答不上来:提醒它「用记忆本的搜索工具查」,MCP 工具不是每轮自动用的,点名它才会调。
  • 记错了内容:让 AI 先列出记忆里关于你的全部条目,指名删掉错的,再重存一条对的。
  • 记忆存在本机文件里,不是玄学:想让 AI「忘光」,删掉对应条目即可,别去删配置。

扩展练习(选做)

想把记忆本变成课程表助手的,加做一步。复制下面的提示词发送:

text
请用记忆本 MCP 帮我建一张本学期课程表记忆:
周一上午网页设计、周二上午数据结构、周三下午 AIGC 实训、
周四下午英语、周五上午体育,
全部存好后,回答我「明天该带什么资料」,
答案要能对回表里今天的下一门课。

执行后你会看到:AI 存入五条课程记忆,并按今天星期几给出带资料建议。时间不够直接进案例3。

案例3:接上余票查询查真实车次 ​

任务目标:

老师带练添加社区的 12306 余票查询 MCP 服务器(12306-mcp),查一条真实的火车票余票,体会「现成的插座」能直接带来真实世界的数据。案例3 独立成案,装不上时按兜底路径处理。

实操步骤

  1. 装第三个插座:添加 MCP 服务,贴入下面配置。执行后你会看到:12306 服务显示已连接(首次同样要等组件下载)。

    json
    {
      "mcpServers": {
        "rail-query": {
          "transport": {
            "type": "stdio",
            "command": "npx",
            "args": ["-y", "12306-mcp"]
          }
        }
      }
    }
  2. 查一条真实余票:新建对话,发送下面的提示词(日期就写「明天」,让 AI 自己换算成具体日期;它要是反问,把今天的日期告诉它):

    text
    请用 12306 余票查询工具查车票,
    查询要素在下面的输入素材里,
    只报查询到的结果,查不到的不要编。
    输入素材:
    出发站:长沙南
    到达站:武汉
    日期:明天
    车型席位:高铁二等座
    要列出:车次、出发到达时间、余票数量
    输入素材结束。

    执行后你会看到:一张真实车次列表,车次号、时刻和余票数来自 12306 的实时数据。

  3. 查你自己的线路:把出发站和到达站换成你家到学校(或任意两个城市)再查一次,体验「同一个插座,换参数就换任务」。

    查什么合格的样子
    插座已装MCP 列表里 12306 服务显示已连接
    数据真实车次与余票数字与 12306 官网/app 同日查询结果一致
    不编造让它查一条不存在的线路(如「长沙南到长沙南」),它明确说查不到而不是瞎编

问题与注意事项

  • 查询超时或报错:12306 接口偶尔限流,等半分钟重查;还失败就换一条线路,仍不行找老师看服务状态。
  • 查不到不是编一个:合格的标准是「查不到就说查不到」。谁的车次列表里有明显编造的车次号,回炉案例2 的「不编造」提醒。
  • 社区服务更新快:这个包由社区维护,装不上时由教师现场核对替代包:[课前演练补充]。

扩展练习(选做)

想练「让 AI 替你做决策」的,加做一步。复制下面的提示词发送:

text
请再查一遍明天长沙南到武汉的高铁,
从结果里挑出二等座有票、
16 点以后出发的两个车次,
说明你推荐哪一个并给出依据,
依据只能来自查询结果本身。

执行后你会看到:AI 给出推荐车次和基于余票与时间的依据。时间不够直接进案例4。

案例4:用 FastMCP 造自己的打卡服务 ​

任务目标:

老师带练用 Python 的 FastMCP 框架,写一个自己的「学习打卡」MCP 服务器:两个工具——记一条打卡、查最近打卡,在本机跑起来后装进 WorkBuddy,完成一次真实打卡。现成的插座找不到你要的能力时,就自己造一个。

实操步骤

  1. 建服务目录:进入 D:\AIGC\lesson-12,右键 → 新建 → 文件夹,命名为 study-log。

  2. 写服务器代码:进入 study-log,右键 → 新建 → 文本文档,用记事本打开,整段粘贴下面的代码,点「文件 → 另存为」,文件名输入 "server.py"(带英文双引号,防止记事本自动加 .txt),编码选 UTF-8 保存:

    python
    from fastmcp import FastMCP
    import json
    import os
    from datetime import date
    
    mcp = FastMCP("study-log")
    RECORDS = os.path.join(os.path.dirname(os.path.abspath(__file__)), "records.json")
    
    def load_records():
        if os.path.exists(RECORDS):
            with open(RECORDS, "r", encoding="utf-8") as f:
                return json.load(f)
        return []
    
    def save_records(records):
        with open(RECORDS, "w", encoding="utf-8") as f:
            json.dump(records, f, ensure_ascii=False, indent=2)
    
    @mcp.tool
    def add_record(content: str) -> str:
        """记一条学习打卡,content 写今天学了什么"""
        records = load_records()
        records.append({"日期": date.today().isoformat(), "内容": content})
        save_records(records)
        return f"已记录第 {len(records)} 条:{content}"
    
    @mcp.tool
    def list_records(limit: int = 5) -> str:
        """查最近几条学习打卡,默认返回 5 条"""
        records = load_records()
        if not records:
            return "还没有打卡记录,先让我记一条吧。"
        recent = records[-limit:]
        lines = [f"{r['日期']}:{r['内容']}" for r in reversed(recent)]
        return "最近的学习打卡:\n" + "\n".join(lines)
    
    if __name__ == "__main__":
        mcp.run()

    代码里两个 @mcp.tool 就是两个插座孔:add_record 记打卡,list_records 查打卡。打卡数据存进同目录的 records.json——能力是你写的,数据落在你自己的电脑里。

  3. 装 FastMCP 框架:这里必须用一次命令行,因为给 Python 装包没有图形界面可点。打开资源管理器进入 D:\AIGC\lesson-12\study-log,点一下窗口顶部的地址栏,删掉里面的路径、输入 cmd 回车,在弹出的黑色窗口里执行:

    bat
    pip install fastmcp

    教师课前一般已装好,这里再执行一次只会提示「已满足」。执行后你会看到:出现 Successfully installed 或 Requirement already satisfied 字样。

    如果提示 pip 不是内部命令或超时:找老师确认课前安装项(见课前准备),不要自己另装 Python。

  4. 试跑一次:还是在刚才的命令行窗口执行:

    bat
    python server.py

    执行后你会看到:窗口出现 FastMCP 的启动字样并停住等待——这表示服务器已在待命。按 Ctrl+C 先退出,接下来交给 WorkBuddy 去启动它。

  5. 把自己的插座装进 WorkBuddy:添加 MCP 服务,贴入下面配置。注意 args 里是你机器上的真实路径,反斜杠要写成两个。执行后你会看到:study-log 服务显示已连接。

    json
    {
      "mcpServers": {
        "study-log": {
          "transport": {
            "type": "stdio",
            "command": "python",
            "args": ["D:\\AIGC\\lesson-12\\study-log\\server.py"]
          }
        }
      }
    }
  6. 完成一次真实打卡:新建对话,先记一条再查一遍:

    text
    请用我的学习打卡服务记录下面这条打卡,
    记完查一下最近的打卡记录,报给我。
    输入素材:
    打卡内容:今天学会了用 FastMCP 写自己的 MCP 服务器
    输入素材结束。

    执行后你会看到:AI 回报「已记录第 1 条」并附上查询结果。

  7. 打开原始档案:回到资源管理器,双击打开 D:\AIGC\lesson-12\study-log\records.json。执行后你会看到:文件里躺着刚才那条打卡的日期和内容——AI 说的和文件里记的是同一件事。

  8. 对着验收表核一遍:

    查什么合格的样子
    插座已装MCP 列表里 study-log 显示已连接
    记得进文件records.json 里出现刚才那一条,日期正确
    查得出来新对话让 AI 查打卡,能报出记录条数和内容

问题与注意事项

  • 连接失败先查三处:server.py 路径是否双反斜杠、文件扩展名是不是被记事本存成了 server.py.txt、命令行里 python server.py 能不能正常启动。
  • 出现中文乱码:server.py 和 records.json 都要求 UTF-8,记事本另存时别选 ANSI。
  • 改了代码不生效:MCP 服务器是 WorkBuddy 启动的常驻程序,改完 server.py 要在 MCP 设置里停用再启用 study-log,才会加载新代码。

扩展练习(选做)

想给打卡服务加统计能力的,加做一步。复制下面的提示词发送(工作目录选 D:\AIGC\lesson-12\study-log):

text
请打开 server.py,给我的打卡 MCP 新增一个工具 count_records,
功能是统计 records.json 里一共有多少条打卡记录,
返回总条数和最早一条的日期。
改完告诉我怎么重启验证,并给出一句验证用的提示词。

执行后你会看到:server.py 多出第三个工具,按它给的提示词验证能报出总条数。时间不够直接进收尾。

扩展任务:打造你的专属打卡助手(选做) ​

任务目标:

先跟老师把下面的基线提示词完整跑一遍,给打卡服务加一个「坚持天数」工具;跑通后,把功能描述换成你自己最想要的一个小工具再改一次。选做不计入必做时间。

实操步骤

  1. 复制下面的提示词发送(工作目录选 D:\AIGC\lesson-12\study-log):

    text
    请打开 server.py,给我的打卡 MCP 新增一个工具 days_streak,
    功能是从 records.json 里找出最早的打卡日期,
    算出从那一天到今天一共坚持了多少天,
    返回一句话:已连续记录 N 天,最早一条是某年某月某日。
    改完告诉我怎么重启验证,
    并给出一句验证用的提示词。

    执行后你会看到:server.py 多出 days_streak 工具,按 AI 给的验证提示词能查到「已连续记录 N 天」。

  2. 换成你自己的需求:把提示词里 days_streak 的功能描述换成你想要的小工具(比如统计本周打卡几次、按关键词找某条记录),重跑一遍。改坏了不要紧,把 server.py 删掉,回案例4 第 2 步重新粘贴一份完整代码即可。

五、总结与巩固 ​

随机请两位同学打开自己的 MCP 列表,展示四个已连接的服务,并说一说其中一个是干嘛用的。

回想本课的方法:装插座三步——找到入口、贴配置、发消息验证。配置里的三样东西记住就行:服务名(插座叫什么)、命令(用什么程序起服务)、参数(给它的目录或脚本路径)。装现成的和造自己的,走的是同一条流程。

说一说:你的哪件日常琐事适合做成一个自己的 MCP?打算给它起什么工具名?

保留素材库、四个已连接的 MCP 服务和 records.json。下节课连接飞书和 ima 知识库——用的正是今天「装插座」的思路:WorkBuddy 把那些高频插座预装成了「连接器」,点授权就能用;你今天亲手装过的配置,就是连接器背后的东西。

六、资料与下载 ​

  • 课前准备:环境自查、Node.js 与 Python 检查、教师课前实测项。
  • 课程资料:本课资料清单与下载位置。
  • 官方示例服务器仓库:https://github.com/modelcontextprotocol/servers(案例1、案例2 的来源,还有更多现成插座)。
  • FastMCP 官方文档:https://gofastmcp.com(案例4 的框架,想加新工具先查这里)。