🚀大模型落地开发实战指南!请关注微信公众号:「AGI启程号」 深入浅出,助你轻松入门!
📚 数据分析、深度学习、大模型与算法的综合进阶,尽在CSDN博客主页


在这里插入图片描述

让大模型真正“触达现实世界”,关键不在提示词,而在标准化连接外部数据与服务。本文带你用 MCP(Model Context Protocol) 跑通一条“地图检索 → 行程生成 → 一键发布网页”的端到端链路,并给出与 Function Calling 的工程差异、场景清单、最小代码模板与踩坑建议。

看完本篇文章你将收获:

  • **一眼看懂:**MCP 是什么、为何像 AI 的 USB-C
  • **工程视角对比:**MCP vs Function Calling(可转内部评审)
  • **实操模板:**Cursor 配置 + Qwen Agent 代码
  • **落地案例:**旅游攻略智能体(可生成可转发网页)
  • **风险与治理:**Key 管理、SSE 稳定性、审计与权限

本期代码运行实例详见 GitHub:
https://github.com/SWUSTcyt/qwen-agent


01 什么是 MCP(速读)

MCP(Model Context Protocol)是一个让大模型与外部系统通用对接的开放协议。

  • **目标:**提供统一接口,标准化调用多种工具/数据源/服务
  • **类比:**像 USB-C 统一物理接口,MCP 统一“智能体接外部世界”的方式
  • **收益:**一次接入,多场景复用;降低扩展与维护成本

没有 MCP:为每个任务各写一套函数,难以复用;
有了 MCP:不同服务按统一协议“排队接入”,跨模型、跨平台可互操作。


02 核心概念与组件

  • **MCP Server:**提供具体能力的“工具端”(地图、搜索、数据库、网页发布…)
  • **MCP Client:**使用能力的“应用端/智能体”(Cursor、Claude Desktop、自研 Agent)
  • **Tool / Resource:**Server 暴露的可调用能力与可读资源
  • **连接形态:**SSE / WebSocket / HTTP 等;常见需配置 API Key + URL
  • **审计与权限:**标准化请求/响应,便于日志与最小权限治理

03 MCP vs Function Calling(工程对比表)

维度MCP(协议化)Function Calling(函数化)
定位统一接入协议(跨模型、跨平台)在某模型内定义并调用函数
扩展性高:动态增删工具,跨项目复用中:新增函数常改提示/推理流
维护成本低:一次对接,多端可复用高:多场景多套函数易分叉
互操作强:标准化消息格式、可移植弱:常绑定某模型生态
适用范围企业级、多数据源、多工具编排单点任务(天气、日历、查询…)
上手速度首接略多,长远更稳起步快,但扩展成本上升

**结论:**小而快 → Function Calling 即可;
要走企业级/多工具链路 → 优先考虑 MCP。


04 CASE:旅游攻略 MCP(cursor)

在 Cursor 中配置高德 MCP:

1)申请 Key(免费):高德开放平台
注册成为开发者 => 创建应用 => 应用服务平台 选择 Web服务 => 获取 API KEY
https://lbs.amap.com/

2)在 Cursor → Settings → MCP 新增 mcp.json

{
  "mcpServers": {
    "amap-maps-streamableHTTP": {
      "url": "https://mcp.amap.com/mcp?key=您在高德官网上申请的key"
    }
  }
}

3)切到 Agent 模式 提问示例:

“用高德 mcp,帮我做一份北京一日游攻略

**效果展示:**可见 Agent 自动调用高德能力,返回路线、时长、站点与餐饮建议。

**图片**


05 CASE:旅游攻略 MCP(qwen agent框架)

1)安装依赖)

pip install -U "qwen-agent[gui,mcp]"

2)配置 MCP 服务(示例)

以高德地图与网页部署 MCP 服务器为例。前往ModelScope的MCP 广场,分别找到高德地图与EdgeOne Pages,通过右侧的通过SSE URL连接服务获取专属URL。

高德地图可以完成路径规划、天气查询等功能;EdgeOne Pages 可以将 HTML 内容部署为可公网访问的链接。

用 MCP 服务的专属 URL 替换tools中的对应位置并运行代码。

{
  "mcpServers": {
    "amap-maps": {
      "type": "sse",
      "url": "YOUR_AMAP_MCP_SSE_URL"
    },
    "pages-deploy": {
      "type": "sse",
      "url": "YOUR_PAGES_MCP_SSE_URL"
    }
  }
}

最小可用代码(可直接跑)

import os
from qwen_agent.agents import Assistant

llm_cfg = {
    "model": "qwen-plus-latest",
    "model_server": "https://dashscope.aliyuncs.com/compatible-mode/v1",
    "api_key": os.getenv("DASHSCOPE_API_KEY"),  # 用环境变量管理
}

system = "你是会查询地图/天气,并能把 HTML 部署到公网的旅行助手。"

tools = [{
    "mcpServers": {
        "amap-maps":   {"type": "sse", "url": "YOUR_AMAP_MCP_SSE_URL"},
        "pages-deploy":{"type": "sse", "url": "YOUR_PAGES_MCP_SSE_URL"}
    }
}]

bot = Assistant(
    llm=llm_cfg,
    name="旅行助手",
    description="高德地图、天气查询、公网页面部署",
    system_message=system,
    function_list=tools,
)

messages = []
while True:
    q = input("\n你的问题:").strip()
    if not q:
        continue
    messages.append({"role":"user","content":q})

    buf, in_tool = "", False
    for chunk in bot.run(messages):
        last = chunk[-1]
        if "function_call" in last:
            in_tool = True
            print("\n[工具调用] ->", last["function_call"].get("name",""))
        elif in_tool and "function_call" not in last:
            in_tool = False
            print("\n[工具结果] <-", str(last)[:300], " ...")
        elif last.get("role")=="assistant" and "content" in last:
            delta = last["content"][len(buf):]
            print(delta, end="", flush=True)
            buf += delta
    messages.extend(chunk)

示例提问

“我爸妈今天下午到萧山机场,请规划去阿里巴巴云谷园区的公共交通路线(地铁/巴士均可),并生成可访问的网页链接让我转发。”

纯代码版结果

**图片**

使用带gui版本的代码,运行结果如下

**图片**


06 附录:配置清单与模板

(1)环境变量示例(.env)

DASHSCOPE_API_KEY=YOUR_DASHSCOPE_API_KEY
AMAP_KEY=YOUR_AMAP_KEY

(2)Cursor 的 mcp.json(合集示例)

{
  "mcpServers": {
    "amap-maps-streamableHTTP": {
      "url": "https://mcp.amap.com/mcp?key=${AMAP_KEY}"
    },
    "amap-maps": {
      "type": "sse",
      "url": "YOUR_AMAP_MCP_SSE_URL"
    },
    "pages-deploy": {
      "type": "sse",
      "url": "YOUR_PAGES_MCP_SSE_URL"
    }
  }
}

如果你觉得这篇 MCP 实战 有帮助,欢迎转发/在看/收藏。


**🤖 讨论区互动:**你想用agent解决什么问题?

更多推荐