当前位置: 首页 > article >正文

2026年AI Agent实战一:MCP协议从入门到实践与3个真实应用场景

AI辅助创作 | 专栏《2026 AI编程效率革命》第07篇前言MCPModel Context Protocol是Anthropic在2024年底推出的开放协议旨在标准化AI模型与外部工具、数据源的交互方式。到2026年MCP已经成为AI Agent开发的事实标准协议。本文将从零开始带你理解MCP协议的核心概念并通过实战代码搭建一个完整的MCP服务。一、MCP协议是什么1.1 为什么需要MCP在MCP出现之前AI工具集成面临以下问题每个AI应用都要为每个工具写单独的集成代码工具接口没有统一标准重复造轮子模型切换时工具链需要重写MCP的核心理念像USB-C统一接口一样统一AI与工具的连接方式。1.2 MCP架构┌─────────────┐ MCP协议 ┌─────────────┐ │ AI应用 │ ◄──────────────► │ MCP Server │ │ (Host) │ │ (工具提供方) │ │ 如: Cursor │ │ │ └─────────────┘ └──────┬───────┘ │ ┌──────┴───────┐ │ 外部资源 │ │ 数据库/API │ │ 文件系统等 │ └──────────────┘MCP定义了三种核心能力能力说明示例Tools可调用的函数查询数据库、发送邮件Resources可读取的数据文件内容、数据库记录Prompts预定义提示词代码审查模板二、MCP开发环境搭建2.1 安装MCP SDK# 安装MCP Python SDKuvaddmcp# 安装官方示例依赖uvaddhttpx pydantic2.2 项目结构mcp-demo/ ├── pyproject.toml ├── .env ├── server/ │ ├── __init__.py │ ├── weather_server.py # 天气查询MCP服务 │ ├── file_server.py # 文件管理MCP服务 │ └── db_server.py # 数据库查询MCP服务 ├── client/ │ ├── __init__.py │ └── mcp_client.py # MCP客户端 └── tests/ └── test_server.py三、实战创建你的第一个MCP Server3.1 天气查询MCP服务# server/weather_server.pyimporthttpxfrommcp.serverimportServerfrommcp.typesimportTool,TextContent# 创建MCP Server实例serverServer(weather-service)server.list_tools()asyncdeflist_tools()-list[Tool]:声明服务提供的工具列表return[Tool(nameget_weather,description获取指定城市的当前天气信息,inputSchema{type:object,properties:{city:{type:string,description:城市名称如北京、上海},unit:{type:string,enum:[celsius,fahrenheit],description:温度单位默认摄氏度,default:celsius}},required:[city]}),Tool(nameget_forecast,description获取未来3天天气预报,inputSchema{type:object,properties:{city:{type:string,description:城市名称}},required:[city]})]server.call_tool()asyncdefcall_tool(name:str,arguments:dict)-list[TextContent]:处理工具调用请求ifnameget_weather:returnawaitget_weather(arguments[city],arguments.get(unit,celsius))elifnameget_forecast:returnawaitget_forecast(arguments[city])else:raiseValueError(f未知工具:{name})asyncdefget_weather(city:str,unit:strcelsius)-list[TextContent]:查询天气使用模拟数据# 实际项目中调用天气APIweather_data{北京:{temp:22,humidity:45,condition:晴},上海:{temp:25,humidity:72,condition:多云},深圳:{temp:30,humidity:80,condition:阵雨},}dataweather_data.get(city,{temp:20,humidity:50,condition:未知})ifunitfahrenheit:data[temp]data[temp]*9/532result(f{city}当前天气\nf️ 温度:{data[temp]}{°Cifunitcelsiuselse°F}\nf 湿度:{data[humidity]}%\nf️ 状况:{data[condition]})return[TextContent(typetext,textresult)]asyncdefget_forecast(city:str)-list[TextContent]:获取天气预报forecast(f{city}未来3天预报\nf明天: 晴18-26°C\nf后天: 多云17-24°C\nf大后天: 小雨15-22°C)return[TextContent(typetext,textforecast)]# 启动服务if__name____main__:importasynciofrommcp.server.stdioimportstdio_serverasyncdefmain():asyncwithstdio_server()as(read_stream,write_stream):awaitserver.run(read_stream,write_stream)asyncio.run(main())3.2 文件管理MCP服务# server/file_server.pyimportosimportjsonfrompathlibimportPathfrommcp.serverimportServerfrommcp.typesimportTool,TextContent serverServer(file-manager)WORKSPACEPath(./workspace)server.list_tools()asyncdeflist_tools()-list[Tool]:return[Tool(namelist_files,description列出指定目录下的文件,inputSchema{type:object,properties:{path:{type:string,description:目录路径相对于workspace}},required:[path]}),Tool(nameread_file,description读取文件内容,inputSchema{type:object,properties:{path:{type:string,description:文件路径}},required:[path]}),Tool(namewrite_file,description写入文件,inputSchema{type:object,properties:{path:{type:string},content:{type:string}},required:[path,content]}),Tool(namesearch_files,description按名称搜索文件,inputSchema{type:object,properties:{pattern:{type:string,description:搜索关键词}},required:[pattern]})]server.call_tool()asyncdefcall_tool(name:str,arguments:dict)-list[TextContent]:ifnamelist_files:targetWORKSPACE/arguments[path]files[str(f.relative_to(WORKSPACE))forfintarget.rglob(*)iff.is_file()]return[TextContent(typetext,textjson.dumps(files[:50],indent2))]elifnameread_file:targetWORKSPACE/arguments[path]contenttarget.read_text(encodingutf-8)return[TextContent(typetext,textcontent)]elifnamewrite_file:targetWORKSPACE/arguments[path]target.parent.mkdir(parentsTrue,exist_okTrue)target.write_text(arguments[content],encodingutf-8)return[TextContent(typetext,textf已写入:{arguments[path]})]elifnamesearch_files:results[str(f.relative_to(WORKSPACE))forfinWORKSPACE.rglob(f*{arguments[pattern]}*)iff.is_file()]return[TextContent(typetext,textjson.dumps(results[:20],indent2))]raiseValueError(f未知工具:{name})if__name____main__:importasynciofrommcp.server.stdioimportstdio_serverasyncdefmain():asyncwithstdio_server()as(read_stream,write_stream):awaitserver.run(read_stream,write_stream)asyncio.run(main())四、MCP客户端开发4.1 连接MCP Server# client/mcp_client.pyimportasynciofrommcpimportClientSession,StdioServerParametersfrommcp.client.stdioimportstdio_clientclassMCPClient:def__init__(self):self.session:ClientSession|NoneNoneself.available_tools:list[]asyncdefconnect(self,server_command:list[str]):连接到MCP Serverserver_paramsStdioServerParameters(commandserver_command[0],argsserver_command[1:],)self.stdio_contextstdio_client(server_params)read_stream,write_streamawaitself.stdio_context.__aenter__()self.sessionClientSession(read_stream,write_stream)awaitself.session.__aenter__()awaitself.session.initialize()# 获取可用工具列表resultawaitself.session.list_tools()self.available_toolsresult.toolsprint(f已连接可用工具:{[t.namefortinself.available_tools]})asyncdefcall_tool(self,tool_name:str,arguments:dict):调用工具ifnotself.session:raiseRuntimeError(未连接到MCP Server)resultawaitself.session.call_tool(tool_name,arguments)returnresult.contentasyncdefdisconnect(self):断开连接ifself.session:awaitself.session.__aexit__(None,None,None)awaitself.stdio_context.__aexit__(None,None,None)asyncdefmain():clientMCPClient()# 连接天气服务awaitclient.connect([python,server/weather_server.py])# 调用工具resultawaitclient.call_tool(get_weather,{city:北京})print(result[0].text)resultawaitclient.call_tool(get_forecast,{city:上海})print(result[0].text)awaitclient.disconnect()if__name____main__:asyncio.run(main())五、与AI模型集成5.1 将MCP工具接入LangChain Agent# integration/langchain_mcp_agent.pyimportasyncioimportjsonfromlangchain_openaiimportChatOpenAIfromlangchain.agentsimportcreate_tool_calling_agent,AgentExecutorfromlangchain_core.toolsimporttoolfromlangchain_core.promptsimportChatPromptTemplatefromclient.mcp_clientimportMCPClient# 创建MCP客户端mcp_clientMCPClient()toolasyncdefquery_weather(city:str)-str:查询指定城市的天气信息resultawaitmcp_client.call_tool(get_weather,{city:city})returnresult[0].texttoolasyncdefget_forecast(city:str)-str:获取城市未来3天天气预报resultawaitmcp_client.call_tool(get_forecast,{city:city})returnresult[0].textasyncdefrun_agent():# 连接MCP服务awaitmcp_client.connect([python,server/weather_server.py])# 创建LangChain AgentllmChatOpenAI(modelgpt-5.5,temperature0)tools[query_weather,get_forecast]promptChatPromptTemplate.from_messages([(system,你是一个天气助手可以查询天气和预报。用中文回复。),(human,{input}),(placeholder,{agent_scratchpad}),])agentcreate_tool_calling_agent(llm,tools,prompt)executorAgentExecutor(agentagent,toolstools,verboseTrue)# 测试resultawaitexecutor.ainvoke({input:北京和上海今天天气怎么样明天呢})print(result[output])awaitmcp_client.disconnect()if__name____main__:asyncio.run(run_agent())六、在Cursor中使用MCPCursor原生支持MCP协议配置方法// .cursor/mcp.json{mcpServers:{weather:{command:python,args:[server/weather_server.py]},file-manager:{command:python,args:[server/file_server.py]}}}配置完成后在Cursor的Agent模式中就可以直接调用这些MCP工具了。七、MCP生态与社区资源2026年MCP生态已经相当成熟MCP Hub官方工具市场数百个现成MCP Server常用MCP Server数据库(PostgreSQL/MySQL)、GitHub、Slack、Google Drive等多语言SDKPython、TypeScript、Java、Go总结MCP协议通过标准化AI与工具的交互方式解决了重复集成的问题。本文从协议原理讲到实战代码覆盖了MCP的核心概念Tools/Resources/PromptsMCP Server开发实战MCP客户端开发与LangChain Agent集成在Cursor中使用MCP下一篇我们将深入多Agent协作系统的搭建利用MCP协议构建更复杂的AI应用。免责声明本文为AI辅助创作内容代码示例仅供学习参考。MCP协议规范可能随版本更新而变化请以官方文档为准。实际项目中请注意API Key安全和数据隐私保护。专栏《2026 AI编程效率革命》| 第07篇发布日期2026-05-03

相关文章:

2026年AI Agent实战一:MCP协议从入门到实践与3个真实应用场景

AI辅助创作 | 专栏《2026 AI编程效率革命》第07篇前言 MCP(Model Context Protocol)是Anthropic在2024年底推出的开放协议,旨在标准化AI模型与外部工具、数据源的交互方式。到2026年,MCP已经成为AI Agent开发的事实标准协议。本文…...

开源AI对话聚合平台LibreChat:统一管理多模型,部署与实战指南

1. 项目概述:一个真正开源的AI对话聚合平台如果你和我一样,在过去一年里被各种AI聊天机器人搞得眼花缭乱,一会儿用这个查资料,一会儿用那个写代码,账号密码记了一堆,界面换来换去效率极低,那你一…...

力扣135分发糖果:代码随想录Day 29,掌握贪心算法的精髓

在算法学习过程中,力扣(LeetCode)的135题“分发糖果”是一个经典的题目,它考察了我们对于贪心算法的理解和运用。 这道题目源自实际应用场景,例如在团队绩效考核中,我们需要根据员工的表现来分配奖励。代码…...

VSCode光标增强:提升编码专注度的视觉优化方案

1. 项目概述:一个为开发者打造的专注光标 如果你和我一样,每天有超过8小时的时间是在代码编辑器里度过的,那你一定对那个闪烁的光标再熟悉不过了。它是指令的起点,是思维的锚点,但很多时候,它也是一个容易被…...

嵌入式系统调试技术:从基础到高级实践

1. 嵌入式系统调试的现状与挑战在当今电子产品开发中,嵌入式系统调试已成为决定项目成败的关键因素。作为一名从业十余年的嵌入式系统工程师,我见证了调试技术从简单的断点调试发展到如今复杂的多核追踪系统的演进过程。1.1 为什么调试如此重要&#xff…...

娱乐圈天降紫微星贵在自立,海棠山铁哥不靠投喂靠自我成就

内娱最虚伪的封神方式莫过于资本投喂式走红01|投喂式造星全景图投喂方投喂内容明星姿态平台热度坐等上榜团队人设直接换装资本资源全盘接收IP情怀一键继承宣发口碑无痛镀金 他们无需深耕创作,无需打磨作品,无需沉淀心性, 只需站在…...

发票查验验证码OCR识别接口(新版旧版兼容+本地部署)

一. 发票查验验证码OCR识别-API (/mobile/recognize) Mobile版使用多颜色专用模型(各颜色使用独立模型)。 关联视频: https://www.bilibili.com/video/BV1mkQ8BoEaE/ (2026年最新发票查验验证码OCR模型) https://www.bilibili.com/video/B…...

钉钉AI助理直通模式集成Dify:低门槛构建企业级智能机器人

1. 项目概述:打通钉钉与Dify的智能桥梁如果你正在寻找一种方法,将你在Dify平台上精心构建的智能体(Agent)无缝对接到钉钉工作台,让团队在日常沟通中就能直接调用,那么你找对地方了。chzealot/dingtalk-dify…...

开发者PPT自动化工具:模板+数据驱动技术报告生成

1. 项目概述:一个面向开发者的PPT模板编辑器最近在GitHub上看到一个挺有意思的项目,叫RainJayTsai/ppt-template-editor。光看名字,你可能会觉得这又是一个普通的PPT制作工具,但点进去仔细研究后,我发现它的定位非常独…...

智能体管理平台:从概念到实践,构建高效AI协作系统

1. 项目概述:从“围栏”到“智能体牧场”的构想最近在开源社区里,一个名为llrowat/agent-corral的项目引起了我的注意。初看这个名字,可能会觉得有些抽象——“Corral”在英文里是“畜栏”或“围栏”的意思,而“Agent”则是当下AI…...

基于Docker Compose的Web应用部署:从架构设计到生产运维实战

1. 项目概述:一个轻量级、高可用的Web应用部署方案最近在折腾一个个人项目,需要快速部署一个前后端分离的Web应用。我的需求很明确:轻量、快速、稳定,并且能让我完全掌控部署的每一个环节。我不想用那些“一键部署”的云服务&…...

1 虚拟文件系统

1.Linux 内核核心作用 Linux 内核是操作系统的核心底层程序,介于硬件和应用程序之间,是整个系统的「大管家」,核心作用分 7 大类: 1. 进程管理(任务调度) 1.负责创建、销毁、暂停、恢复进程 / 线程 2.时间片…...

工程师如何讲好技术故事:从设计案例到个人品牌构建

1. 从“设计故事换iPad”看工程师的软实力营销前几天翻看一些老资料,偶然又看到了EE Times在2011年刊登的这篇小短文,标题挺有意思,叫“用设计故事换一台iPad?”。内容很简单,讲的是当时一家叫AWR(现在已被…...

2026年程序员破局之路:转智能体开发,不用卷算法也能拿高薪

文章目录前言2026年的程序员圈,一半是海水一半是火焰一边是地狱:只会CRUD的程序员,正在被时代无情抛弃一边是天堂:智能体开发岗位,正在疯狂撒钱抢人别被劝退了!智能体开发,根本不用死磕算法八股…...

基于MCP协议实现私有部署Azure DevOps与AI编程助手的安全集成

1. 项目概述:当本地开发遇上云端智能最近在折腾一个挺有意思的玩意儿,叫burcusipahioglu/azure-devops-mcp-onprem。乍一看这名字,又是 Azure DevOps,又是 MCP,还带个 on-prem,感觉有点绕。简单来说&#x…...

别再卷传统开发了!程序员转大模型,薪资直接翻2倍的真实路径

文章目录前言一、2026年,传统开发的内卷已经走到了死胡同1.1 35岁危机提前到30岁,CRUD正在被AI批量替代1.2 面试的灵魂拷问,正在击碎传统开发的薪资幻想1.3 传统开发的薪资天花板,正在被大模型狠狠砸穿二、别被忽悠了!…...

基于Reveal.js的Markdown幻灯片工具:技术分享与文档演示的高效解决方案

1. 项目概述:一个将Markdown转换为精美幻灯片的工具如果你经常需要在技术分享、产品演示或者教学培训中制作幻灯片,那么你一定对在PPT、Keynote或者Google Slides里反复调整格式、对齐文本框、设置动画感到厌倦。尤其是当你的内容主体是技术文档、代码示…...

清华AlignBench:首个中文大模型对齐评测基准深度解析与实战指南

1. 项目概述:为什么我们需要一个中文对齐评测基准?如果你最近在关注大语言模型(LLM)的发展,尤其是中文模型,可能会发现一个现象:各家厂商都在宣传自己的模型“能力强大”、“理解深刻”、“逻辑…...

Arm DynamIQ CTI寄存器架构与多核调试实践

1. Arm DynamIQ Shared Unit-110 CTI寄存器架构解析在Arm CoreSight调试架构中,交叉触发接口(CTI)扮演着关键角色。作为DynamIQ共享单元-110的重要组成部分,CTI通过硬件级的事件触发机制,实现了多核处理器间的高效调试协同。CTI的核心功能由一…...

5G波形技术革新:块滤波OFDM与同频全双工实战验证

1. 项目概述:一次面向未来的5G波形技术实地验证2017年初,当全球通信产业还在为5G的最终标准争论不休时,法国格勒诺布尔的CEA-Leti研究所已经准备将他们的研究成果从实验室推向真实的天空。这不仅仅是一次普通的“外场测试”,而是一…...

使用Taotoken CLI工具一键配置多开发环境下的AI助手接入

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken CLI工具一键配置多开发环境下的AI助手接入 对于需要在不同项目、不同机器上工作的开发者而言,为每个AI助…...

多模态AI框架MMClaw:从编码融合到实战部署全解析

1. 项目概述:一个面向多模态内容理解的“机械爪” 最近在折腾一些多模态项目时,发现一个挺有意思的仓库,叫 leadersboat/MMClaw 。光看名字, MM 大概率指的是 Multimodal(多模态) ,而 Cl…...

AI智能体配置管理:从硬编码到声明式配置的工程实践

1. 项目概述:一个为AI智能体“立规矩”的配置库如果你最近也在折腾AI智能体(Agent),特别是用LangChain、AutoGPT这类框架来构建自己的自动化助手,那你大概率会遇到一个共同的烦恼:配置太散了,管…...

Go跨平台获取光标所在显示器索引:displayindex库实战指南

1. 项目概述与核心价值在开发跨平台的桌面应用时,我们常常会遇到一个看似简单却颇为棘手的问题:如何准确判断用户的鼠标光标当前位于哪一个物理显示器上?无论是开发一个需要根据光标位置动态调整UI布局的编辑器,还是一个在多显示器…...

14.凌晨三点的月光

凌晨三点十七分,陈远从代码的深海中浮出水面。他保存文件,运行测试。绿色的进度条在屏幕上平稳推进,一个接一个的测试用例通过,像一排沉默的、尽职的士兵,在确认他刚刚构建的防线的稳固性。这是优惠券发放模块的压力测…...

百元级GPT-2复现指南:nanochat框架下的低成本大语言模型训练实践

1. 项目概述:从零到一,亲手打造你的百元级GPT-2如果你对大型语言模型(LLM)充满好奇,想亲手训练一个属于自己的模型,但又对动辄数万行代码、需要数十张GPU的庞大项目望而却步,那么nanochat就是你…...

保姆级教程:用IntelliJ IDEA 2021.3.2搞定泛微ecology9后端二开环境(附避坑清单)

从零构建泛微ecology9后端开发环境:IntelliJ IDEA全流程避坑指南 第一次接触泛微ecology9后端开发时,最令人头疼的莫过于环境搭建。不同于常规Java项目,这套系统有着独特的目录结构和依赖管理方式。记得我最初尝试时,光是解决编译…...

FFmpeg视频裁剪工具:原理、封装与自动化实践

1. 项目概述:一个基于FFmpeg的精准视频裁剪工具在视频内容创作和后期处理的日常工作中,我们经常会遇到一个看似简单却颇为繁琐的需求:从一段长视频中,精准地裁剪出我们需要的片段。无论是制作短视频、提取会议重点,还是…...

TMS320C6000平台H.263解码器优化实现

1. H.263解码器在TMS320C6000平台上的实现架构1.1 系统整体设计H.263视频解码器在TMS320C6000数字信号处理器上的实现采用了分层模块化设计架构。该架构基于ITU-T H.263标准规范,针对DSP平台的特性进行了深度优化。系统核心由比特流解析、运动补偿、反离散余弦变换(…...

Vidura开源框架:模块化AI对话编排与自动化评估实战指南

1. 项目概述:一个开源的AI对话编排与评估框架最近在折腾AI应用开发,特别是涉及到多模型对话、复杂工作流编排和效果评估时,总感觉市面上现成的工具要么太重,要么太零散。直到我发现了Vidura这个项目,它像是一套为AI对话…...