MCP 科普 + 实践:基于 HAP 的大模型外部交互协议应用与开发案例

article/2025/6/11 23:42:14

基础知识

Function Call

背景:以前的AI大模型,就像一个知识丰富但被困在屋子里的人,只能依靠自己已有的知识回答问题,没有办法获取实时的数据或者与外部的系统进行交互

Function Call 是 OPEN AI 在 2023 年推出的一个非常重要的概念: Function call (函数调用) 本质上就是提供了大模型与外部系统交互的能力,类似于给大模型安装一个“外挂工具箱”。

当大模型遇到自己无法直接回答的问题时,它会主动调用预设的函数(如查询天气、计算数据、访问数据库等),获取实时或精准信息后再生成回答

  • 比如说在 dify/coze上看到的插件,其实都是基于Function Call 思路来封装的,极大程度给予了大模型更多的可能性。
  • 在这里插入图片描述

背景:OPEN AI 最开始提出这个这种技术的时候,并没有想让他成为一项标准,虽然后续很多模型也支持了Function
Call调用,但是各自的实现方式都不太一样。

在这里插入图片描述

那也意味着如果我们想开发一个Function Call工具需要同时对不同的模型进行适配,比如参数的结构、触发逻辑、返回结构等。

  • 特点:能为大模型提供获取实时的数据或者与外部的系统进行交互的能力
  • 痛点:不同模型之间调用规范不一样
    ◦ 举个例子,把「大模型」当做「手机」,把「Function Call」当做「数据线」
    ◦ 以前不同品牌手机的充电口是不一样的,为此厂商需要做不同的数据线来适配不同的充电口
    ◦ 不同的大模型Function Call调用规则不一样,为此开发者需要对不同的大模型进行适配
    在这里插入图片描述

MCP

背景:以前要通过Function Call,每次要让模型对接新的数据源或者使用新的工具,都需要编写大量的代码来对接,既麻烦又容易出错,而
MCP 的出现,就是为了解决这个问题,不再重复造轮子

MCP(Model Context Protocol,模型上下文协议) 是由Anthropic公司推出的一个开放的标准协议,目的就是为了解决AI模型与外部数据源交互的难题

  • MCP 的诞生-不再重复造轮子
  • 传统方式将 AI 系统连接到外部工具涉及集成多个 API。每个 API 集成都意味着单独的代码、文档、身份验证方法、错误处理和维护。简单来说 LLM使用不同工具时,以前需要同时修改模型和工具, 因为各工具的API数据格式不统一,导致适配成本高、功能添加慢 。
  • MCP 就像是一个“通用插头"或者“USB 接口”,MCP协议制定了统一的规范,规定了应用向LLM传输数据的方式。 任何模型只要兼容MCP协议,就能与所有支持MCP的应用交互 。
  • 对于已有API的应用,第三方开发者也可基于其API进行MCP封装适配,无需官方支持。
    在这里插入图片描述
    在这里插入图片描述

MCP工作模式

客户端与服务器的交互模式
在这里插入图片描述

概念举个例子
MCP Host是运行 MCP 的主应用程序,通常是用户直接交互的界面,如 Claude 、Cursor或其他 AI 工具等(他们在内部实现了 MCP Client)。目前支持MCP的客户端:https://modelcontextprotocol.io/clientsHost 就像一个手机,
用户使用手机完成一些任务,比如播放歌曲、查询天气、或者访问互联网。
MCP Client通过标准的协议和MCP Server进行交互MCP Client就像手机中的音乐播放器/浏览器软件
用户点击播放音乐按钮时,它会连接到手机的音乐文件存储系统/互联网上的音乐服务(MCP Server)来获取并播放乐。
MCP Server与各种第三方数据源的交互,最后再通过标准的 MCP 协议返回给MCP ClientMCP Server就像手机内部的音乐文件存储系统/互联网上的音乐服务。
根据MCP Client的请求找到并传输音乐文件的数据

MCP vs Function Call vs Agent

对比维度MCP(Model Context Protocol)Function CallAgent
定位对比被动的工具箱
被动服务,仅响应调用请求
为大模型提供外部数据和能力支持
不参与决策或推理过程
像工具箱,等待别人挑选使用
瑞士军刀
被动服务,仅响应调用请求
允许模型生成请求参数并整合结果
与模型绑定部署,紧密集成
像瑞士军刀,小巧多功能,随身携带
具备自主决策能力的AI实体
具备自主决策能力的AI实体
能感知环境、规划任务并执行
可调用各种工具(包括MCP/Function Call)
像熟练工人,选择合适工具完成复杂任务
交互方式单向响应
采用被动服务模式,仅在接收请求时响应
通过HTTP/SSE协议接收请求,返回数据
数据流向:模型→MCP Server→模型
模型内部触发
由模型运行时环境直接执行
开发者需预先定义函数并打包到模型服务中
数据流向:模型→函数执行环境→模型
双向交互
具备高自主性,可主动调用工具
能与用户进行双向交互,澄清需求
数据流向:用户-Agent-各种工具/服务
应用场景适合复杂、异步任务
场景:企业内部系统(CRM、ERP)封装为MCP Server
处理:多个Agent可以安全调用统一接口的数据
适合简单、同步任
场景:用户询问"北京今天的天气如何"
处理:模型直接调用get _weather()函数获取结果
适合端到端复杂任务
客户服务自动化
处理:自动监控用户反馈、分析问题、生成解决方案
协议标准开放协议(JSON-PRC 2.0)私有协议(各模型自定义规则)依赖底层工具
部署灵活性可独立扩展需与模型绑定需集成多种模块
任务复杂度复杂数据整合任务简单低延迟任务自主决策多步任务

MCP 资源

  • 大量MCP 服务和安装地址:https://github.com/appcypher/awesome-mcp-servers?tab=readme-ov-file
  • Anthropic 官网MCP文档
    ◦ https://modelcontextprotocol.io/quickstart/server
    ◦ MCP中文文档
  • 开源的 MCP 服务:https://glama.ai/mcp/servers

实践案例(动手做)

制作好的应用/插件,可以上架到HAP市场中,完成知识变现

Cursor+高德 MCP+HAP 十分钟制作一份旅游攻略

⭐简单验证下 MCP 的能力

  1. 获取高德 MCP配置
    • 进入高德控制台,创建应用,类型选择出行
    在这里插入图片描述
    • 添加 Key,选择 web服务
    在这里插入图片描述

• 将生成的 key 复制下来
在这里插入图片描述

  1. 设置 Cursor
    • 打开Cursor-首选项-Cursor Settings-MCP,Add new globle MCP server
    在这里插入图片描述

• 将高德 MCP 配置粘贴到mcp.json文件里

{   "mcpServers": {        "amap-amap-sse": { "url":"https://mcp.amap.com/sse?key=这里这里!!!粘贴您在高德官网上申请的key"      }    }
}

在这里插入图片描述
• 保存并关闭,回到 MCP 配置,这里变绿则配置成功,如果没绿点击右侧刷新按钮
在这里插入图片描述

• 点击MCP上面的 Features,找到 Enable auto-run mode 。一定要“不勾选”MCP tools protection,如果勾选了,每次行动,都要我们点同意
在这里插入图片描述

  1. HAP 创建插件视图项目,并通过 Cursor 打开
    在这里插入图片描述

  2. 开始对话
    • 在右侧对话框,我们可以直接输入指令,可以加上你一些个性化的需求

用高德MCP,帮我做个上海一日游攻略指南,我对摄影很感兴趣,希望能去一些适合拍照的地方。
  • 保存为 shanghaitravel.md• 会根据我的指令,自动发起 MCP 服务请求。获取到请求后的数据后,会自动帮我生成一份md 格式的攻略文档

在这里插入图片描述
在这里插入图片描述

  1. 生成页面
  • 接下来,我们让他生成一个旅游指南页面。新建一个空白文件,命名为:prompt.md ,复制一下我的提示词,粘贴到文件里
你是一位国际顶尖的数字杂志艺术总监和前端开发专家,曾为Vogue、Elle等时尚杂志设计过数字版面,擅长将奢华杂志美学与现代网页设计完美融合,创造出令人惊艳的视觉体验。请设计高级时尚杂志风格的手机app旅行攻略,将旅行信息以精致奢华的杂志编排呈现,让用户感受到如同翻阅高端杂志般的视觉享受。**可选设计风格:**波普艺术风格 (Pop Art)
采用波普艺术风格设计,重现60年代艺术运动的大胆美学。必须使用亮丽原色(红、黄、蓝)和黑色轮廓线,色彩应平面且不含渐变。排版应大胆且戏剧化,使用漫画风格字体和夸张的感叹词,文字可放置在对话气泡中。图像处理是关键,应使用半调网点(Halftone)效果模拟印刷(不遮挡文字),将图像简化为点阵和色块。装饰元素应包含漫画风格的线条、爆炸形状和拟声词。可使用重复图案和网格排列增强视觉冲击。整体设计应呈现出鲜明、直接且充满流行文化引用的视觉效果,仿佛一页来自60年代漫画或安迪·沃霍尔的艺术作品,参考Roy Lichtenstein的绘画和经典漫画书的视觉语言。**每种风格都应包含以下元素,但视觉表现各不相同:**1. **行程标题区**:- 目的地名称(主标题,醒目位置)- 旅行日期和总天数- 旅行者姓名/团队名称(可选)- 天气信息摘要2. **行程概览区**:- 按日期分区的行程简表- 每天主要活动/景点的概览- 使用图标标识不同类型的活动3. **详细时间表区**:- 以表格或时间轴形式呈现详细行程- 包含时间、地点、活动描述- 每个景点的停留时间- 标注门票价格和必要预订信息4. **交通信息区**:- 主要交通换乘点及方式- 地铁/公交线路和站点信息- 预计交通时间- 使用箭头或连线表示行程路线5. **住宿与餐饮区**:- 酒店/住宿地址和联系方式- 入住和退房时间- 推荐餐厅列表(标注特色菜和价格区间)- 附近便利设施(如超市、药店等)6. **实用信息区**:- 紧急联系电话- 重要提示和注意事项- 预算摘要- 行李清单提醒**技术规范:*** 使用HTML5、Font Awesome、Tailwind CSS和必要的JavaScript* Font Awesome: [https://lf6-cdn-tos.bytecdntp.com/cdn/expire-100-M/font-awesome/6.0.0/css/all.min.css](https://lf6-cdn-tos.bytecdntp.com/cdn/expire-100-M/font-awesome/6.0.0/css/all.min.css)* Tailwind CSS: [https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css](https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css)* 中文字体: [https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap](https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap)
* 确保代码简洁高效,注重性能和可维护性
* 使用CSS变量管理颜色和间距,便于风格统一
* 对于液态数字形态主义风格,必须添加流体动态效果和渐变过渡
* 对于超感官极简主义风格,必须精确控制每个像素和微妙的交互反馈
* 对于新表现主义数据可视化风格,必须将数据以视觉化方式融入设计**输出要求:*** 按照我的项目框架生成一个完整的js文件,并在 index.js中引用,包含所有设计风格的卡片
* 代码应当优雅且符合最佳实践,CSS应体现出对细节的极致追求
* 设计的宽度根据手机宽度自适应
* 永远用中文输出,装饰元素可用法语、英语等其他语言显得有逼格
* 注意文字的可阅读性,保持文字背景干净和字体颜色不一致请以国际顶尖杂志艺术总监的眼光和审美标准,创造风格迥异但同样令人惊艳的手机app旅行攻略,让用户感受到"这不是普通的信息卡片,而是一件可收藏的数字艺术品"
  • 然后告诉AI,根据生成的攻略,按照提示提示词规则,生成页面
清除现有 @App.js 页面内容 将 @shanghaitravel.md  内容,
按照我的提示词规则 @prompt.md 生成代码,写入@App.js 中 
  1. 页面示例
    https://058c04c1b5d639e2.share.mingdao.net/public/view/6836d7854d5c74f48bd4f3f9? 行程单-上海一日游示例

Cursor+APIfox MCP+HAP 30分钟完成自动化表单搭建与数据读写

前段时间我们在 APIfox 上配置了应用 API 文档,用于API 的在线调试。APIfox 也支持 MCP Server,
可用在Cursor 客户端,请求 APIfox MCP Server来获取API 文档信息。

**⭐主要能力:**通过语义化的问答,使用APIfox MCP Server 获取明道云应用 API 文档,来实现自动化流程的搭建,数据的读写

  • 流程编排:能实现根据语义化描述,识别需要调用那些接口,获取到API文档信息后,在代码中编排好功能请求
  • 数据操作:如果想在直接操作应用数据,还需要告诉AI应用密钥信息(可以把密钥写在配置文件中),这样通过APIfox MCP获取到API文档信息后,AI可以自动执行数据的读写
  1. 获取APIfox MCP 配置
    • 进入我们公开分享的 应用API 地址,点击任意一个 API,右上方会展示 MCP 入口,复制下方配置即可使用整个项目的 MCP Server
    在这里插入图片描述

  2. 设置 Cursor
    • 打开Cursor-首选项-Cursor Settings-MCP,Add new globle MCP server
    在这里插入图片描述
    • 将 MCP 配置粘贴到mcp.json文件里,如果有多个 MCP 逗号隔开即可
    在这里插入图片描述

  3. 简单验证
    • 通过对话获取API文档,并生成功能发起API请求
    在这里插入图片描述

• 实现效果:点击按钮-展示API需要输入的参数-发起对外API请求-获取到响应数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 探索玩法
    这一步,探索了通过 MCP 语义化完成了表单管理搭建,表单数据管理功能

• 通过 MCP 进行功能搭建:验证了可以通过 APIfox 获取应用 API 结构后,我在想能不能通过语义化的描述,帮我搭建一个表单管理功能。于是我这样问,仅通过一句指令,一个简单的表单管理页面就出来了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

• 继续让他理解我的需求:现在有了表单,还需要把数据也同步过来。于是我继续问(其实也不需要告诉他需要调哪些接口)无需任何其他操作,就实现了一个简单的应用管理功能。
在这里插入图片描述
在这里插入图片描述

  • 语义化进行数据操作:有了表单及数据管理功能后,我尝试让他AI我对数据录入。这里AI询问我是需要直接录入数据,还是生成录入数据的功能。(这里我要求直接帮我录入数据,并生成数据增删改查功能)
  • 录入数据:通过APIfox MCP 只能获取到需要使用的API文档,并不能直接发起应用API请求。如果想直接录入数据,这里还需要我提供密钥信息(appkey 和sign)后才能直接执行请求。
    • 数据已经成功录入到【员工档案】表单。(表单映射规则还需要写的详细些,才能保证特殊字段数据写入的更加准确
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

在这里插入图片描述

  • 数据增删改查功能编排:上一步我要求生成数据增删改查功能后,页面上新增了操作按钮,并能够正确执行对应API
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 语义化直接操作数据:如果想通过APIfox MCP直接操作应用数据,需提前告知密钥信息(比如告知AI应用密钥信息可以去哪里读取)
    在这里插入图片描述

    • 这一步,我将测试密钥写在配置里后,再去对话中要求直接操作数据,就可以直接实现数据自动化读写了
      * 实现效果
      ▪ 先查应用信息,获取到应用下所有的表在这里插入图片描述

      ▪ 再根据我的数据分析找到需要写入的工作表id
      在这里插入图片描述
      在这里插入图片描述
      ▪ 再查询工作表结构,构建新增行记录的请求参数
      在这里插入图片描述
      ▪ 再直接调用新增行记录API,写入数据
      在这里插入图片描述
      在这里插入图片描述

  1. 示例页面
    https://058c04c1b5d639e2.share.mingdao.net/public/view/6837f888a03ac19291d0031d

引用及学习资源
• https://www.bilibili.com/video/BV12nRzYPEiK/?spm_id_from=333.1391.0.0&vd_source=ccbc97805e9798dc788e38fa8865c023
• https://waytoagi.feishu.cn/wiki/XkVNw0w91ieXEmkyoR8c2KPZnSh
• https://waytoagi.feishu.cn/wiki/FEgvwGO9giVp72kWEsxckE1Qnte


http://www.hkcw.cn/article/hmuPHJwjyU.shtml

相关文章

颈部的 “异常坚持”

生活中,有些人的颈部会突然变得 “异常坚持”—— 头部不受控制地偏向一侧,或是不自主地旋转、后仰,仿佛被无形的力量牵引着。这种情况不仅影响外观,还会带来强烈的不适感,颈部肌肉紧绷、酸痛,像被一根绳索…

Windows应用-音视频捕获

下载“Windows应用-音视频捕获”项目 本应用可以同时捕获4个视频源和4个音频源,可以监视视频源图像,监听音频源;可以将视频源图像写入MP4文件,将音频源写入MP3或WAV文件;还可以录制系统播放的声音。本应用使用MFC对话框…

Linux账号和权限管理

1 Linux用户账号和组账号 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪&…

Linux——初步认识Shell、深刻理解Linux权限

文章目录 文章引入初步认识Shell深入理解Linux下的权限用户的切换使用sudo进行短暂提权权限的深入理解权限的本质权限的意义如何控制权限Linux下的权限属性的分类Linux下对于角色的分类文件的权限查询权限的具体表现普通文件的权限表现chmod指令、chown指令和chgrp指令chmod——…

Redis底层数据结构之深入理解跳表(1)

在上一篇文章中我们详细的介绍了一下Redis中跳表的结构以及为什么Redis要引入跳表而不是平衡树或红黑树。这篇文章我们就来详细梳理一下跳表的增加、搜索和删除步骤。 SkipList的初始化 跳表初始化时,将每一层链表的头尾节点创建出来并使用集合将头尾节点进行存储&…

嵌入式硬件篇---龙芯2k1000串口

针对串口错误 “device reports readiness to read but returned no data (Device disconnected or multiple access on port?)” 的排查和解决方法 硬件方面 检查连接 确认串口设备(如串口线、连接的模块等)与龙芯设备之间的物理连接是否牢固&#xf…

Ubuntu安装Docker命令清单(以20.04为例)

在你虚拟机上完成Ubuntu的下载后打开终端!!! Ubuntu安装Docker终极命令清单(以20.04为例) # 1. 卸载旧版本(全新系统可跳过) sudo apt-get remove docker docker-engine docker.io containerd …

数据结构:递归:自然数之和

目录 递归解法 🔹第一步:定义本质问题 🔹第二步:分解问题结构 🔹第三步:定义初始条件 🔹第四步:递归思想的自然生成 循环解法 🔹第 1 步:定义问题最小…

Pandas 技术解析:从数据结构到应用场景的深度探索

序 我最早用Python做大数据项目时,接触最早的就是Pandas了。觉得对于IT技术人员而言,它是可以属于多场景的存在,因为它的本身就是数据驱动的技术生态中,对于软件工程师而言,它是快速构建数据处理管道的基石&#xff1…

CRM管理软件的数据可视化功能使用技巧:让数据驱动决策

在当今数据驱动的商业环境中,CRM管理系统的数据可视化功能已成为企业优化客户管理、提升销售效率的核心工具。据企销客研究显示,具备优秀可视化能力的CRM系统,用户决策效率可提升47%。本文将深入解析如何通过数据可视化功能最大化CRM管理软件…

数据结构:递归的种类(Types of Recursion)

目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…

Redis底层数据结构之字典(Dict)

Dict基本结构 Dict我们可以想象成目录,要翻看什么内容,直接通过目录能找到页数,翻过去看。如果没有目录,我们需要一页一页往后翻,这样时间复杂度就与遍历的O(n)一样了,而用了Dict我们就可以在O(1)的时间复杂…

高通SoC阵列服务器

高通SoC阵列服务器是基于高通系统级芯片(SoC)构建的高密度计算解决方案,核心特点为低功耗、高算力集成与模块化设计,主要应用于边缘计算和云服务场景。以下是其技术特性和应用方向的综合分析: 一、核心技术特性 架构…

Linux系统下Google浏览器无法使用中文输入的临时解决方案

文章目录 前言方案描述Edge如何兼容 前言 这个AlamaLinux的ibus-libpinyin确实是让人琢磨不透,就只是无法在Chrome浏览器中、Edge浏览器中使用,而在VSCode、Xfce4-Terminal中使用良好。尝试了很多办法都没有效果,最后在Reddit里面找到了相应…

【AI论文】空间多模态大型语言模型(Spatial-MLLM):增强基于视觉的空间智能中多模态大型语言模型(MLLM)的能力

摘要:多模态大语言模型(MLLM)的最新进展显著提高了2D视觉任务的性能。 然而,提高他们的空间智能仍然是一个挑战。 现有的3D MLLM总是依赖于额外的3D或2.5D数据来加入空间感知,限制了它们在只有2D输入(如图像…

黑马Java面试笔记之 微服务篇(业务)

一. 限流 你们项目中有没有做过限流?怎么做的? 为什么要限流呢? 一是并发的确大(突发流量) 二是防止用户恶意刷接口 限流的实现方式: Tomcat:可以设置最大连接数 可以通过maxThreads设置最大Tomcat连接数,实现限流,但是适用于单体架构 Nginx:漏桶算法网关,令牌桶算法自定…

AWS App Mesh实战:构建可观测、安全的微服务通信解决方案

摘要:本文详解如何利用AWS App Mesh统一管理微服务间通信,实现精细化流量控制、端到端可观测性与安全通信,提升云原生应用稳定性。 一、什么是AWS App Mesh? AWS App Mesh 是一种服务网格(Service Mesh)解…

《云原生安全攻防》-- K8s网络策略:通过NetworkPolicy实现微隔离

默认情况下,K8s集群的网络是没有任何限制的,所有的Pod之间都可以相互访问。这就意味着,一旦攻击者入侵了某个Pod,就能够访问到集群中任意Pod,存在比较大的安全风险。 在本节课程中,我们将详细介绍如何通过N…

吃透 Golang 基础:数据结构之 Map

文章目录 Map概述初始化删除访问不存在的 key 返回 value 的零值遍历 mapmap 自身的零值map 索引时返回的第二个参数使用 map 实现 set Map Hash Map 是无序的 key/value 对集合,其中所有的 key 都是不同的。通过给定的 key 可以在常数时间复杂度内完成检索、更新或…

手机邮箱APP操作

收发电子邮件方式 邮箱可以在网络段登录,也可以在手机端登录。 大学网络服务 收发电子邮件有三种方式: 1、Web方式: 1)登录“网络服务”(https://its.pku.edu.cn),点页面顶端“邮箱”。 2&…