MCP协议从入门到实战:手把手搭建AI Agent工具调用系统

📅 2026/7/7 17:55:21
MCP协议从入门到实战:手把手搭建AI Agent工具调用系统
MCP协议从入门到实战手把手搭建AI Agent工具调用系统一、背景为什么需要MCP说实话半年前我第一次接触AI Agent开发的时候最头疼的问题不是模型能力不够而是怎么让AI碰到真实世界。你想啊大模型再强它也只是一个会说话的脑子。你想让它查数据库、发邮件、调用API它做不到。除非你给它写一堆工具函数然后手动编排调用逻辑。但问题来了——每个Agent都要重新写一套工具集成每换一个模型就要重新适配API。这活儿干一次还行干十次就真的想骂人了。MCPModel Context Protocol就是来解决这个问题的。它是由Anthropic提出的一种开放协议目的是让AI模型和外部工具之间有一个标准化的通信方式。说白了就是给AI装一个USB接口你想插什么工具就插什么。二、MCP核心概念MCP的核心就三个东西Client、Server、Tool。2.1 Client客户端Client是宿主也就是运行AI模型的地方。它可以是一个CLI工具、一个IDE插件、或者一个Web应用。Client负责连接MCP Server把Server暴露的工具列表告诉模型把模型的工具调用请求转发给Server把Server的返回结果送回给模型2.2 Server服务器Server是工具提供方。每个MCP Server可以暴露一个或多个工具。比如一个文件系统Server可以提供读写文件、列目录等工具。2.3 Tool工具Tool是具体的能力单元。一个工具包含名称name描述description输入参数定义input schema执行函数handlermcp.tool()asyncdefsearch_web(query:str,max_results:int5)-str:搜索互联网并返回结果resultsawaitweb_search(query,max_results)returnformat_results(results)三、环境准备在开始之前你需要准备以下环境组件版本要求备注Python 3.10推荐3.12Node.js 18运行MCP Inspectorpip最新版安装Python包# 安装MCP Python SDKpipinstallmcp# 安装MCP CLI工具npminstall-gmodelcontextprotocol/inspector四、实战搭建一个文件搜索Agent接下来我们手写一个实战案例一个能搜索本地文件的AI Agent。4.1 创建MCP Server# file_search_server.pyfrommcp.serverimportServer,NotificationOptionsfrommcp.server.modelsimportInitializationOptionsimportmcp.server.stdioimportmcp.typesastypesimportosimportfnmatch# 创建Server实例serverServer(file-search)server.list_tools()asyncdefhandle_list_tools()-list[types.Tool]:return[types.Tool(namefind_files,description在指定目录中搜索文件支持通配符,inputSchema{type:object,properties:{directory:{type:string,description:要搜索的目录路径},pattern:{type:string,description:文件通配符模式如 *.py},max_results:{type:integer,description:最大返回结果数,default:20}},required:[directory,pattern]})]server.call_tool()asyncdefhandle_call_tool(name:str,arguments:dict)-list[types.TextContent]:ifnamefind_files:directoryarguments[directory]patternarguments[pattern]max_resultsarguments.get(max_results,20)results[]forroot,dirs,filesinos.walk(directory):forfilenameinfnmatch.filter(files,pattern):full_pathos.path.join(root,filename)results.append(full_path)iflen(results)max_results:breakiflen(results)max_results:breakreturn[types.TextContent(typetext,textf找到{len(results)}个匹配文件:\n\n.join(results))]raiseValueError(f未知工具:{name})asyncdefmain():asyncwithmcp.server.stdio.stdio_server()as(read_stream,write_stream):awaitserver.run(read_stream,write_stream,InitializationOptions(server_namefile-search,server_version1.0.0,capabilitiesserver.get_capabilities(notification_optionsNotificationOptions(),experimental_capabilities{},),),)if__name____main__:importasyncio asyncio.run(main())4.2 启动Server并测试# 启动MCP Serverpython file_search_server.py# 在另一个终端中用MCP Inspector测试npx modelcontextprotocol/inspector python file_search_server.py这样你就有了一个可以通过MCP协议暴露的文件搜索工具。任何支持MCP的AI Client都可以调用它。五、将MCP接入Claude Code如果你在用Claude Code只需要在配置文件里注册MCP Server// claude_desktop_config.json{mcpServers:{file-search:{command:python,args:[path/to/file_search_server.py]}}}重启Claude Code后它就能自动发现并调用file_search工具了。你可以直接说帮我找一下最近修改的Python文件Claude会自己调用find_files工具来完成。六、常见问题Q: MCP和Function Calling有什么区别A: Function Calling是模型的能力MCP是工具通信协议。两者是互补关系——MCP定义怎么暴露工具Function Calling定义模型怎么调用工具。Q: 一个Server可以暴露多个工具吗A: 可以在handle_list_tools里返回多个Tool对象就行。Q: MCP支持流式输出吗A: 支持。MCP协议支持text streamingServer可以逐步返回结果。Q: 安全性如何A: 每个Server都在独立的进程中运行Client控制权限。建议不要以root权限运行MCP Server。七、总结MCP协议让AI Agent的工具集成变得标准化了。你不用再为每个框架写一套工具适配层一套MCP Server走天下。说实话这玩意儿虽然刚出来不久但生态已经起来了——从文件系统到数据库到浏览器各种MCP Server层出不穷。下一步你可以试试自己写一个MCP Server连上你常用的内部API在MCP Hub上找别人写好的Server把MCP集成到你自己的AI应用里有问题欢迎在评论区留言一起交流。