摘要:AI 只会聊天不够,还得能操作你的系统。今天用 MCP(Model Context Protocol)协议,把商城的商品查询、下单、物流追踪包装成 AI 可调用的工具。AI Agent 接到一句"帮我买两瓶精华水",就能自动查商品、创订单。全篇零成本,GLM-4.7-Flash 免费调用,代码开箱即用。
AI 只会聊天?那它只是个嘴
前几天我们把商城的 AI 搜索做好了,用户说"200 块以内的护肤品"就能精准推荐商品。
但你有没有发现一个问题——
AI 能帮用户找到商品,却不能帮他下单。
就像你去商场,导购小姐姐热情地带你到了柜台前,然后说:“您自己扫码付款吧,我下班了。”
这不是智能助手,这是智能解说员。
真正的 AI 助手应该是什么样的?
- 用户说"帮我买两瓶玫瑰精华水" → AI 自动查询商品、确认库存、创建订单
- 用户说"我的快递到哪了" → AI 自动查询物流状态
- 用户说"把上次买的那个面霜再来一单" → AI 查历史订单、复制下单
要做到这些,AI 需要一双能操作系统的"手"。
而 2026 年,给 AI 装手的标准方式,就是MCP。
MCP 到底是什么
一句话解释
MCP(Model Context Protocol,模型上下文协议)是 AI 与外部工具之间的标准化接口。
听着有点抽象?换个说法:
MCP 就是 AI 世界的"USB 接口"。
在 USB 出现之前,打印机用并口线、鼠标用 PS/2 接口、手机用 Mini-USB,每个设备一根线,乱得要死。USB 的出现统一了标准——所有设备用同一种接口,即插即用。
MCP 做的事情一样:
| 类比 | USB | MCP |
|---|---|---|
| 连接什么 | 硬件设备(键盘、鼠标、打印机) | 软件工具(数据库、API、商城系统) |
| 谁在用 | 电脑 | AI 模型 / AI Agent |
| 解决的问题 | 设备接口不统一 | AI 调用外部工具的方式不统一 |
| 效果 | 即插即用 | AI 即连即用 |
为什么 2026 年人人都在聊 MCP
2024 年 Anthropic 开源了 MCP 协议,2025 年各大厂商跟进,到 2026 年,MCP 已经成为 AI Agent 生态的基础设施。
为什么这么火?因为 MCP 解决了三个痛点:
① AI 终于能"动手"了
以前让 AI 帮你查快递,你得先打开快递网站,复制单号,粘贴到查询页面。现在 AI 通过 MCP 直接调用物流工具,一步到位。
② 工具提供方不用关心 AI 是谁
你写了一个 MCP Server,不管是 Coze 的 Agent、Claude、ChatGPT 还是其他任何 AI 产品,只要支持 MCP 协议就能连上来用。一次开发,到处对接。
③ 安全可控
MCP 有明确的权限模型——你定义哪些工具暴露出去,AI 就只能调用哪些。不会出现"AI 乱操作"的情况。
MCP 的三个核心概念
| 角色 | 说明 | 商城的例子 |
|---|---|---|
| MCP Server | 提供工具的一方(服务提供者) | 我们写的商城后端 |
| MCP Client | 连接 MCP Server 的一方(服务消费者) | 扣子 Coze Agent |
| Tool | MCP Server 暴露的具体功能 | 搜索商品、创建订单、查物流 |
除了 Tool,MCP Server 还可以提供Resource(资源)——AI 可以主动读取的静态信息,比如商城公告、商品分类。
打个比方:
- Tool是"帮用户做事"的能力(下单、查物流)
- Resource是"给用户提供信息"的能力(商城介绍、分类列表)
工作流程一览
用户(微信/小程序) │ │ "帮我买两瓶精华水" ▼ AI Agent(扣子 Coze) │ │ ① 分析意图 → 需要调用工具 │ ② 通过 MCP 调用 search_products("精华水") ▼ MCP Server(商城后端) │ │ 返回:[{id:2, name:"玫瑰精华水", price:189, stock:200}] ▼ AI Agent │ │ ③ 确认商品信息 │ ④ 调用 create_order(product_id=2, quantity=2) ▼ MCP Server │ │ 返回:订单创建成功,订单号 MYD202604270001 ▼ AI Agent → 用户 │ │ "已帮您下单玫瑰精华水 ×2,共 ¥378, │ 订单号 MYD202604270001,请确认支付~"看到了吗?用户全程只说了一句话,AI 自己完成了"理解需求 → 查商品 → 下单 → 返回结果"的全链路操作。
MCP vs 传统 API:有什么区别
你可能会问:这不就是调 API 吗?有什么新鲜的?
区别在于:谁来决定怎么调。
传统方式:你得在前端写好逻辑——用户点了搜索按钮,前端调用/api/products?keyword=面霜,拿到结果渲染。每一步都需要程序员预先写好。
MCP 方式:AI 自己决定调什么工具、传什么参数。你说"帮我看看有什么面霜",AI 自己判断应该调用search_products,参数填keyword="面霜"。程序员不需要为每种对话场景写一套逻辑。
传统 API 是"程序员写好剧本,用户照着演"。MCP + AI 是"用户说一句话,AI 自己编剧本"。
动手:用 FastMCP 搭建商城 MCP Server
安装依赖
Python 生态中最流行的 MCP Server 实现是fastmcp:
pipinstallfastmcp httpxfastmcp 的设计很 Pythonic——你只需要定义函数,加个装饰器,它就自动变成一个 MCP 工具。
创建 MCP Server
fromfastmcpimportFastMCP# name 会展示给 AI Agent,让它知道这是谁mcp=FastMCP(name="商城 MCP Server",protocol_version="2026-06-18",instructions=""" 商城的 AI 助手后端。 你可以帮用户查询商品、创建订单、查询物流。 所有价格单位为人民币(元)。 """)instructions很重要——AI Agent 会读这段描述来决定什么时候调用你的工具。写得越清楚,AI 行为越准确。
定义第一个工具:搜索商品
@mcp.tool()defsearch_products(keyword:str="",category:str="",max_price:float=0,)->str:""" 搜索商城的商品。 Args: keyword: 搜索关键词,匹配商品名称(如"面霜"、"精华") category: 按分类筛选 max_price: 最高价格限制,0 表示不限 """# 模拟商品数据库(实际项目替换为 ORM 查询)results=[pforpinPRODUCTS_DBif(notkeywordorkeywordinp["name"])and(notcategoryorp["category"]==category)and(max_price==0orp["price"]<=max_price)]ifnotresults:return"未找到符合条件的商品,换个关键词试试?"# 格式化输出 —— AI 更容易理解结构化的文本lines=[f"找到{len(results)}件商品:\n"]forpinresults:lines.append(f" [{p['id']}]{p['name']}— ¥{p['price']:.2f}| 库存{p['stock']}")return"\n".join(lines)注意几个关键点:
@mcp.tool()装饰器:加上这个,普通 Python 函数就变成了 MCP 工具。fastmcp 自动读取函数名、docstring、参数类型,生成 MCP 协议需要的 JSON Schema。- docstring 非常重要:AI Agent 通过读 docstring 理解"这个工具是干嘛的、参数怎么传"。写得越清楚,AI 调用越准。
- 返回值是字符串:MCP 工具返回值统一是字符串。故意返回结构化文本而不是 JSON,因为 AI 更容易理解自然语言。
定义核心工具:创建订单
下单工具是 AI 操作商城的关键(核心框架,完整实现见配套代码):
@mcp.tool()defcreate_order(product_id:int,quantity:int=1,customer_name:str="匿名用户",address:str="",)->str:""" 创建订单。 Args: product_id: 要购买的商品 ID quantity: 购买数量,默认 1 customer_name: 收货人姓名 address: 收货地址 """# ① 查找商品,不存在返回失败# ② 检查库存,不足返回失败# ③ 扣减库存 + 生成订单号 + 记录订单# ④ 返回结构化的成功信息(订单号/商品/总价/状态)return"✅ 订单创建成功!订单号:..., 商品:... × N, 总价:¥..., 请前往支付页面完成付款。"查询订单 & 物流
@mcp.tool()defquery_order(order_id:str="",customer_name:str="")->str:""" 查询订单状态和物流信息。 Args: order_id: 订单号(如 MYD202604270001) customer_name: 按收货人姓名查询(模糊匹配) """# 按订单号或收货人过滤订单列表# 返回格式化的订单信息(订单号/商品/金额/状态/物流/下单时间)...声明资源:让 AI 了解商城
除了工具,MCP 还支持"资源"——AI 可以主动读取的信息:
@mcp.resource("shop://info")defshop_info()->str:"""商城的基本信息"""return"商城 v2.0\n主营:护肤品、化妆品\n营业时间:24 小时"@mcp.resource("shop://categories")defshop_categories()->str:"""商城商品分类列表"""return"商品分类:"+"、".join(set(p["category"]forpinPRODUCTS_DB))启动服务
if__name__=="__main__":# Streamable HTTP 模式(MCP 2026 标准传输方式)mcp.run(transport="streamable-http",host="0.0.0.0",port=8000)一行mcp.run(),一个完整的 MCP Server 就跑起来了。
transport="streamable-http"是 MCP 2026 年推荐的传输方式,替代早期的 SSE(Server-Sent Events)。它支持双向通信、断线重连,兼容主流 HTTP 框架。如果 AI 客户端比较老,也可以换成transport="sse",向后兼容。
接入扣子 Coze Agent:用自然语言操作商城
MCP Server 搭好了,接下来让 AI Agent 连上来。
在扣子中配置 MCP 连接
打开扣子(Coze)的 Agent 编排页面:
- 进入插件 / 工具面板
- 选择添加 MCP Server
- 填入 MCP Server 地址:
http://你的服务器IP:8000/mcp - 传输协议选择Streamable HTTP
- 点击连接 → 自动识别出所有工具和资源
配置 System Prompt
给 Agent 写一段提示词,让它知道自己是商城客服:
你是商城的智能客服助手。 你的能力: - 帮用户搜索商品、查看商品详情 - 帮用户下单(创建订单) - 帮用户查询订单状态和物流 规则: 1. 下单前必须确认商品名称、数量、价格 2. 询问用户收货人姓名和地址 3. 订单创建后告知订单号,提醒支付 4. 查物流时先通过姓名或订单号查询 5. 语气亲切,适当使用 emoji体验效果
配置好后,在对话框测试:
你:有没有 200 块以内的护肤品?
AI 自动调用search_products(keyword="护肤", max_price=200),返回结果。
你:帮我买两瓶精华水
AI 自动调用create_order(product_id=2, quantity=2),返回订单号、总价,追问收货信息。
你:我的快递到哪了?
AI 调用query_order(customer_name="..."),返回订单状态和物流。
从搜索 → 下单 → 查物流,全程一句话搞定。这就是 MCP 的力量。
在小程序里嵌入 AI 对话入口
MCP Server 在后台跑起来了,现在要让小程序用户也能用上。
前端集成思路
在小程序底部加一个 AI 客服入口,点击后弹出对话窗口,对话内容通过后端转发给 Coze Agent:
小程序用户 → 对话接口 → 你的后端 → Coze Agent API → AI 回复 ↕ MCP Server(你的商城)小程序端骨架(wxml)
<!-- 页面底部浮动 AI 入口 --><viewclass="ai-entry"bindtap="openAIChat"><imagesrc="/images/ai-icon.png"class="ai-icon"/><text>AI 助手</text></view><!-- 弹出式对话窗口 --><viewclass="chat-panel"wx:if="{{showChat}}"><scroll-viewscroll-yclass="chat-messages"><viewwx:for="{{messages}}"wx:key="index"class="msg {{item.role === 'user' ? 'msg-right' : 'msg-left'}}">{{item.content}}</view></scroll-view><viewclass="chat-input"><inputplaceholder="问我任何问题..."bindinput="onInput"bindconfirm="sendMessage"/><buttonbindtap="sendMessage">发送</button></view></view>小程序端逻辑(js 核心)
asyncsendMessage(){consttext=this.data.inputText.trim();if(!text)return;this.setData({messages:[...this.data.messages,{role:'user',content:text}],inputText:''});// 调用后端接口,转发给 Coze Agentconstres=awaitwx.request({url:'https://your-backend.com/api/ai-chat/',method:'POST',data:{message:text,session_id:this.data.sessionId},});this.setData({messages:[...this.data.messages,{role:'assistant',content:res.data.reply}]});}后端转发(Django View 核心框架)
@csrf_exemptdefai_chat(request):"""小程序 AI 对话接口"""data=json.loads(request.body)user_message=data.get('message','')session_id=data.get('session_id','')# 调用扣子 Coze Agent API(Agent 内部通过 MCP 调用商城工具)coze_response=httpx.post('https://api.coze.cn/v3/chat',headers={'Authorization':f'Bearer{settings.COZE_API_KEY}'},json={'bot_id':settings.COZE_BOT_ID,'user_id':session_idor'default','additional_messages':[{'role':'user','content':user_message,'content_type':'text'}],},timeout=30,)ai_reply=extract_reply(coze_response.json())returnJsonResponse({'reply':ai_reply,'session_id':session_id})整个链路跑通后,用户在小程序里说一句"帮我看看有什么面膜",AI 就会通过 MCP 调用商城工具搜索面膜,然后返回结果。
用户感知:和 AI 聊天一样简单。
实际发生:AI 理解意图 → 调用 MCP 工具 → 获取商城数据 → 组织回复。
你可能会担心:用户乱说话怎么办?比如"帮我攻击竞品网站"这种离谱要求。放心,AI Agent 只会调用你注册的 MCP 工具,它没有"超纲发挥"的能力。你定义了搜索商品、创建订单、查物流,它就只会做这三件事。这就是 MCP 安全模型的核心——白名单机制。
而且所有的工具调用都有日志记录,你可以回溯每一次 AI 调用了什么工具、传了什么参数、返回了什么结果。出了问题,一查便知。
学完来练练手
给 MCP Server 加"优惠券"工具:用户下单时可领取优惠券并抵扣。定义
apply_coupon(order_id, coupon_code),让 AI 在下单流程中自动询问用户是否有优惠券。加"商品推荐"工具:根据用户购买历史推荐相关商品。买过面霜的用户推荐精华水,实现简单关联推荐逻辑。
把模拟数据库替换为真实 Django ORM:今天用内存列表模拟数据,改成真实的 Django Model 查询,连接 Day10 的订单系统。
加"售后退换货"工具:用户说"我想退货",AI 自动查订单、发起退款流程、更新订单状态。
在小程序里加"语音输入":调用微信小程序的
wx.getRecorderManager()实现语音输入,让 AI 客服支持语音对话——真正的"动口不动手"。
配套文件day14_mcp_server.py(商品搜索、订单创建、物流查询、资源声明完整实现)可参考学习。
本系列为梅雅达编程笔记原创,首发于 CSDN。有问题?评论区见