MCP协议是什么?
随着 Agent 应用的快速普及,开发者在工具开发和接入方面普遍遇到一系列挑战,工具开发缺乏统一的规范,导致开发效率低下;重复适配不同平台,增加了开发成本和时间;开源社区组件质量参差不齐,高质量工具的整合和维护往往耗费大量精力。MCP 协议正是在这一需求下应运而生,为行业带来了新的解决思路和价值。
MCP(Model Context Protocol)协议是由 Anthropic 推出的业界领先的开放标准,旨在构建大模型与数据源之间的安全双向链接,解决了社区中工具实现风格不统一、难以跨模型共享的问题。
MCP与Agent关系
MCP工具是agent的工具箱。agent是工具人,MCP是工具都遵循的协议。写出来的Agent应用调用MCP工具。
MCP与function call
MCP的诞生标志着Prompt Engineering进入新阶段。结构化上下文能显著提升模型表现,但传统手动整合数据(如本地文件、数据库或网络信息)到prompt中的方式效率低下且难以扩展。
在MCP出现前,开发者通常需要:
- 人工筛选数据库内容
- 手动复制粘贴到prompt
- 随着问题复杂度增加,这一过程变得愈发困难
为解决这些问题,主流AI平台推出了function call功能,使模型能自动调用预设函数获取数据。然而,function call存在明显局限:
1. 平台绑定问题:不同厂商API互不兼容
2. 开发成本高:切换平台需重写代码
3. 安全性挑战:数据权限管理困难
MCP的创新之处在于:
- 即插即用:提供丰富的预制插件库
- 跨平台兼容:支持任意符合标准的AI模型
- 安全可控:支持本地数据处理,按需传输
这种设计使MCP成为连接AI模型与数据源的"智能桥梁",大幅降低了工具调用的技术门槛。
MCP架构
MCP协议的核心架构包含三个关键部分:Host、Client和Server。我们用一个日常场景来说明它们如何配合工作:
想象你在电脑上使用Claude桌面应用(Host)提问:"能帮我看看桌面上有哪些文件吗?"
1. Host角色
Claude桌面应用作为Host,主要负责接收用户问题并与AI模型进行沟通。
2. Client角色
当AI模型判断需要访问本地文件时,内置的MCP Client就会启动。它的职责是寻找并连接合适的MCP Server。
3. Server角色
在这个例子中,文件系统的MCP Server会被唤醒。它实际执行文件扫描任务,读取桌面文件夹内容,并将结果整理返回。
整个交互流程可以这样理解:
用户提问 → Claude应用(Host) → AI模型分析 → 确定需要文件信息 → MCP Client建立连接 → 文件系统Server响应 → 执行扫描 → 返回数据 → AI生成回答 → 最终呈现给用户。
这种模块化设计带来了显著优势:
- AI可以按需调用各类工具和数据源
- 开发者只需专注开发特定功能的Server
- 无需考虑Host和Client的具体实现
- 系统扩展性和维护性大大提升
通过这样的架构,MCP实现了AI能力的灵活扩展,让技术整合变得更加简单高效。
小白AI教程用mcp做简易天气交通查询助手
可用于电脑服务器端、手机移动端
需要上外网。。。
1 下载claude for desktop
App unavailable \ Anthropic 下载软件。需要外网。傻瓜式安装。
(关注+私聊我获取软件安装包)
2 获取百度地图Api key
使用百度地图MCP Server主要通过python和typescript两种形式。我这里选用typescript。更简单。
在选择两种方法之前,你需要在百度地图开放平台的控制台中创建一个服务端AK,通过AK你才能够调用百度地图API能力。
点击链接,登录账号,创建应用。
创建应用时,需要选择功能,填写自己的IP,用指令 ipconfig 即可获得自己电脑的IP。
完成配置后生成访问应用AK,复制。
3 配置claude for desktop
点击file --> settings --> edit config
在文件 claude_desktop_config.json加入
{"mcpServers": { "baidu-map": { "command": "cmd", "args": [ "/c", "npx", "-y", "@baidumap/mcp-server-baidu-map" ], "env": { "BAIDU_MAP_API_KEY": "#你的AK" } } }
重启claude for desktop
即可使用。
举例子:
Q:请查询最近上海的天气
A:申请使用map_weather 插件
request
{ `districtId`: `310100` }
response
{ "location": { "country": "中国", "province": "上海市", "city": "上海市", "name": "上海", "id": "310100" }, "now": { "text": "阴", "temp": 25, "feels_like": 26, "rh": 38, "wind_class": "1级", "wind_dir": "东北风", "uptime": "20250424133500" }, "forecasts": [ { "text_day": "小雨", "text_night": "小雨", "high": 26, "low": 15, "wc_day": "<3级", "wd_day": "北风", "wc_night": "3~4级", "wd_night": "北风", "date": "2025-04-24", "week": "星期四" }, { "text_day": "多云", "text_night": "阴", "high": 22, "low": 12, "wc_day": "<3级", "wd_day": "东北风", "wc_night": "<3级", "wd_night": "东南风", "date": "2025-04-25", "week": "星期五" }, { "text_day": "多云", "text_night": "多云", "high": 25, "low": 15, "wc_day": "<3级", "wd_day": "东南风", "wc_night": "<3级", "wd_night": "东南风", "date": "2025-04-26", "week": "星期六" }, { "text_day": "多云", "text_night": "多云", "high": 26, "low": 16, "wc_day": "<3级", "wd_day": "南风", "wc_night": "<3级", "wd_night": "北风", "date": "2025-04-27", "week": "星期日" }, { "text_day": "阴", "text_night": "多云", "high": 25, "low": 14, "wc_day": "<3级", "wd_day": "北风", "wc_night": "<3级", "wd_night": "南风", "date": "2025-04-28", "week": "星期一" } ] }
回答
明天(4月25日,星期五)上海天气预报:
- 白天:多云
- 夜间:阴
- 最高温度:22°C
- 最低温度:12°C
- 白天风力:东北风,小于3级
- 夜间风力:东南风,小于3级
温度会比今天略低,建议适当增添衣物。
Q:上海现在的交通拥堵情况如何?
A:我来帮您查询上海的交通拥堵情况。需要获取特定区域的拥堵信息,让我查询上海市中心区域的交通状况。
map_road_traffic
{ `city`: `上海`, `center`: `31.239692,121.499755`, `radius`: 5000 }
response
road traffic search failed: radius:必须是整数;最小值是1;最大值是2000
抱歉,我需要调整查询参数重试。让我使用更合适的半径范围。
map_road_traffic
request
{ `city`: `上海`, `center`: `31.239692,121.499755`, `radius`: 2000 }
response
{ "description": "该区域整体畅通。延安高架路:西向东,延安东路立交桥附近拥堵。汉口路:西向东,云南中路附近行驶缓慢。西藏南路:南向北,金陵东路附近拥堵。", "evaluation": { "status": 1, "status_desc": "畅通" }, "road_traffic": [ { "road_name": "UNKNOW" }, { "road_name": "七浦路" }, { "road_name": "三牌楼路" }, { "road_name": "世纪大道" }, { "road_name": "世纪大道辅路" }, { "road_name": "东余杭路" }, { "road_name": "东刘家弄" }, { "road_name": "东园路" }, { "road_name": "东城路" }, { "road_name": "东大名路" }, { "road_name": "东姚家弄" }, { "road_name": "东昌路" }, { "road_name": "东汉阳路" }, { "road_name": "东泰路" }, { "road_name": "东街" }, { "road_name": "东长治路" }, { "road_name": "东门路" }, { "road_name": "中华路" }, { "road_name": "中山东一路" }, { "road_name": "中山东二路" }, { "road_name": "中山南路" }, { "road_name": "中山南路地道" }, { "road_name": "丰和路" }, { "road_name": "乍浦路" }, { "road_name": "乍浦路桥" }, { "road_name": "乔家路" }, { "road_name": "九江路" }, { "road_name": "九龙路" }, { "road_name": "云南中路" }, { "road_name": "云南北路" }, { "road_name": "云南南路" }, { "road_name": "人民大道" }, { "road_name": "人民路" }, { "road_name": "人民路隧道" }, { "road_name": "会稽路" }, { "road_name": "会议中心" }, { "road_name": "会馆弄" }, { "road_name": "余杭路" }, { "road_name": "余杭路桥" }, { "road_name": "侯家路" }, { "road_name": "光启南路" }, { "road_name": "光启路" }, { "road_name": "六合路" }, { "road_name": "凝和路" }, { "road_name": "凤阳路" }, { "road_name": "北三角街" }, { "road_name": "北京东路" }, { "road_name": "北京西路" }, { "road_name": "北横通道" }, { "road_name": "北海路" }, { "road_name": "北石皮弄" }, { "road_name": "北苏州路" }, { "road_name": "南京西路" }, { "road_name": "南崇明路" }, { "road_name": "南浔路" }, { "road_name": "南苏州路" }, { "road_name": "即墨路" }, { "road_name": "厦门路" }, { "road_name": "县左街" }, { "road_name": "吉安路" }, { "road_name": "名商路" }, { "road_name": "启新路" }, { "road_name": "吴淞路" }, { "road_name": "唐山路" }, { "road_name": "商丘路" }, { "road_name": "商城路" }, { "road_name": "四川中路" }, { "road_name": "四川北路" }, { "road_name": "四川南路" }, { "road_name": "四川路桥" }, { "road_name": "四牌楼路" }, { "road_name": "圆明园路" }, { "road_name": "塘沽路" }, { "road_name": "复兴东路" }, { "road_name": "复兴东路地道" }, { "road_name": "复兴东路辅路" }, { "road_name": "复兴东路隧道上层" }, { "road_name": "复兴东路隧道下层" }, { "road_name": "复兴中路" }, { "road_name": "外咸瓜街" }, { "road_name": "外滩隧道" }, { "road_name": "外白渡桥" }, { "road_name": "外郎家桥街" }, { "road_name": "外马路" }, { "road_name": "大名路" }, { "road_name": "大境路" }, { "road_name": "天津路" }, { "road_name": "天潼路" }, { "road_name": "太仓路" }, { "road_name": "如意街" }, { "road_name": "孙家弄" }, { "road_name": "学前街" }, { "road_name": "学宫街" }, { "road_name": "学院路" }, { "road_name": "宁波路" }, { "road_name": "宁海东路" }, { "road_name": "安仁街" }, { "road_name": "富城路" }, { "road_name": "寿宁路" }, { "road_name": "小桃园街" }, { "road_name": "小石桥路" }, { "road_name": "尚文路" }, { "road_name": "山东中路" }, { "road_name": "山东北路" }, { "road_name": "山东南路" }, { "road_name": "山西北路" }, { "road_name": "山西南路" }, { "road_name": "峨眉路" }, { "road_name": "崇德路" }, { "road_name": "崇明支路" }, { "road_name": "崇明路" }, { "road_name": "广东路" }, { "road_name": "广西北路" }, { "road_name": "广西南路" }, { "road_name": "延安东路" }, { "road_name": "延安东路辅路" }, { "road_name": "延安东路隧道" }, { "congestion_sections": [ { "congestion_distance": 520, "speed": 27.49, "status": 3, "congestion_trend": "SAME", "section_desc": "西向东,延安东路立交桥附近", "congection_trend": null } ], "road_name": "延安高架路" }, { "road_name": "张杨路" }, { "road_name": "悦来街" }, { "road_name": "招远路" }, { "road_name": "拾步街" }, { "road_name": "文庙路" }, { "road_name": "新建路" }, { "road_name": "新建路隧道" }, { "road_name": "新开河路" }, { "road_name": "新永安路" }, { "road_name": "新码头街" }, { "road_name": "新菜场路" }, { "road_name": "新闸路" }, { "road_name": "方浜中路" }, { "road_name": "方浜西路" }, { "road_name": "旅顺路" }, { "road_name": "旧仓街" }, { "road_name": "昆山路" }, { "road_name": "昌邑路" }, { "road_name": "明珠塔路" }, { "road_name": "明珠环岛" }, { "road_name": "昭通路" }, { "road_name": "昼锦路" }, { "road_name": "普安路" }, { "road_name": "曲阜路" }, { "road_name": "望云路" }, { "road_name": "望亭路" }, { "road_name": "松雪街" }, { "road_name": "枫泾路" }, { "road_name": "柳林路" }, { "road_name": "栖霞路" }, { "road_name": "桃源路" }, { "road_name": "梦花街" }, { "road_name": "梧州路" }, { "road_name": "武昌路" }, { "road_name": "武胜路" }, { "road_name": "毛家园路" }, { "road_name": "永安路" }, { "road_name": "永寿路" }, { "congestion_sections": [ { "congestion_distance": 580, "speed": 12.25, "status": 2, "congestion_trend": "WORSE", "section_desc": "西向东,云南中路附近", "congection_trend": null } ], "road_name": "汉口路" }, { "road_name": "汉阳路" }, { "road_name": "汉阳路桥" }, { "road_name": "汕头路" }, { "road_name": "江西中路" }, { "road_name": "江西北路" }, { "road_name": "江西北路辅路" }, { "road_name": "江西南路" }, { "road_name": "沙场街" }, { "road_name": "河南中路" }, { "road_name": "河南北路" }, { "road_name": "河南南路" }, { "road_name": "河南路桥" }, { "road_name": "济南路" }, { "road_name": "浙江中路" }, { "road_name": "浙江北路" }, { "road_name": "浙江南路" }, { "road_name": "浙江路桥" }, { "road_name": "浦东南路" }, { "road_name": "浦东大道" }, { "road_name": "浦东大道地道" }, { "road_name": "浦城路" }, { "road_name": "浦明路" }, { "road_name": "海兴路" }, { "road_name": "海口路" }, { "road_name": "海宁路" }, { "road_name": "海平路" }, { "road_name": "淮海东路" }, { "road_name": "淮海中路" }, { "road_name": "湖北路" }, { "road_name": "湖滨路" }, { "road_name": "溧阳路" }, { "road_name": "溪口路" }, { "road_name": "滇池路" }, { "road_name": "滨江大道" }, { "road_name": "牛庄路" }, { "road_name": "牯岭路" }, { "road_name": "狮子街" }, { "road_name": "王家嘴角街" }, { "road_name": "王家码头路" }, { "road_name": "甘肃路" }, { "road_name": "白渡路" }, { "road_name": "百官街" }, { "road_name": "百步街" }, { "road_name": "盐城路" }, { "road_name": "盐码头街" }, { "road_name": "盛泽路" }, { "road_name": "福佑路" }, { "road_name": "福州路" }, { "road_name": "福建中路" }, { "road_name": "福建北路" }, { "road_name": "福建南路" }, { "road_name": "福建路桥" }, { "road_name": "福德路" }, { "road_name": "紫华路" }, { "road_name": "紫金路" }, { "road_name": "紫霞路" }, { "road_name": "老太平弄" }, { "road_name": "自忠路" }, { "road_name": "芝罘路" }, { "road_name": "花园石桥路" }, { "road_name": "茂林路" }, { "road_name": "蓬莱路" }, { "road_name": "虎丘路" }, { "road_name": "西姚家弄" }, { "road_name": "西安路" }, { "road_name": "西藏中路" }, { "congestion_sections": [ { "congestion_distance": 600, "speed": 10.2, "status": 3, "congestion_trend": "BETTER", "section_desc": "南向北,金陵东路附近", "congection_trend": null } ], "road_name": "西藏南路" }, { "road_name": "西街" }, { "road_name": "规二路" }, { "road_name": "豆市街" }, { "road_name": "贵州路" }, { "road_name": "迎勋北路" }, { "road_name": "金坛路" }, { "road_name": "金山路" }, { "road_name": "金洲街" }, { "road_name": "金门路" }, { "road_name": "金陵东路" }, { "road_name": "金陵中路" }, { "road_name": "银城中路" }, { "road_name": "银城中路地道" }, { "road_name": "银城路" }, { "road_name": "银洲街" }, { "road_name": "长沙路" }, { "road_name": "长治路" }, { "road_name": "闵行路" }, { "road_name": "陆家嘴东路" }, { "road_name": "陆家嘴环路" }, { "road_name": "陆家嘴环路地道" }, { "road_name": "陆家嘴西路" }, { "road_name": "露香园路" }, { "road_name": "青浦路" }, { "road_name": "青莲街" }, { "road_name": "靖远街" }, { "road_name": "馆驿街" }, { "road_name": "香港路" }, { "road_name": "高阳路" }, { "road_name": "黄家路" }, { "road_name": "黄浦路" }, { "road_name": "龙潭路" }, { "road_name": "龙门路" } ] }
根据查询结果,上海市中心区域当前的交通情况如下:
整体评估: 该区域整体畅通(状态评价为"畅通")
存在拥堵路段:
- 延安高架路:西向东方向,延安东路立交桥附近拥堵,拥堵距离约520米,平均车速27.49公里/小时
- 汉口路:西向东方向,云南中路附近行驶缓慢,拥堵距离约580米,平均车速12.25公里/小时,且拥堵情况有恶化趋势
- 西藏南路:南向北方向,金陵东路附近拥堵,拥堵距离约600米,平均车速10.2公里/小时,但拥堵情况正在好转
除以上几处路段外,上海市中心区域的其他道路目前基本畅通。
小白AI教程用mcp做简易论文查询助手
太长了 五一再写下一篇。。
还在探索场景应用中。。