MCP协议从入门到实战:手把手搭建AI Agent工具调用系统
2026/7/7 17:55:13 网站建设 项目流程

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

一、背景:为什么需要MCP?

说实话,半年前我第一次接触AI Agent开发的时候,最头疼的问题不是模型能力不够,而是怎么让AI"碰到"真实世界。

你想啊,大模型再强,它也只是一个"会说话的脑子"。你想让它查数据库、发邮件、调用API,它做不到。除非你给它写一堆工具函数,然后手动编排调用逻辑。

但问题来了——每个Agent都要重新写一套工具集成,每换一个模型就要重新适配API。这活儿干一次还行,干十次就真的想骂人了。

MCP(Model 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)
  • 执行函数(handler)
@mcp.tool()asyncdefsearch_web(query:str,max_results:int=5)->str:"""搜索互联网并返回结果"""results=awaitweb_search(query,max_results)returnformat_results(results)

三、环境准备

在开始之前,你需要准备以下环境:

组件版本要求备注
Python>= 3.10推荐3.12
Node.js>= 18运行MCP Inspector
pip最新版安装Python包
# 安装MCP Python SDKpipinstallmcp# 安装MCP CLI工具npminstall-g@modelcontextprotocol/inspector

四、实战:搭建一个文件搜索Agent

接下来我们手写一个实战案例:一个能搜索本地文件的AI Agent。

4.1 创建MCP Server

# file_search_server.pyfrommcp.serverimportServer,NotificationOptionsfrommcp.server.modelsimportInitializationOptionsimportmcp.server.stdioimportmcp.typesastypesimportosimportfnmatch# 创建Server实例server=Server("file-search")@server.list_tools()asyncdefhandle_list_tools()->list[types.Tool]:return[types.Tool(name="find_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]:ifname=="find_files":directory=arguments["directory"]pattern=arguments["pattern"]max_results=arguments.get("max_results",20)results=[]forroot,dirs,filesinos.walk(directory):forfilenameinfnmatch.filter(files,pattern):full_path=os.path.join(root,filename)results.append(full_path)iflen(results)>=max_results:breakiflen(results)>=max_results:breakreturn[types.TextContent(type="text",text=f"找到{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_name="file-search",server_version="1.0.0",capabilities=server.get_capabilities(notification_options=NotificationOptions(),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 streaming,Server可以逐步返回结果。

Q: 安全性如何?
A: 每个Server都在独立的进程中运行,Client控制权限。建议不要以root权限运行MCP Server。

七、总结

MCP协议让AI Agent的工具集成变得标准化了。你不用再为每个框架写一套工具适配层,一套MCP Server走天下。说实话,这玩意儿虽然刚出来不久,但生态已经起来了——从文件系统到数据库到浏览器,各种MCP Server层出不穷。

下一步你可以试试:

  • 自己写一个MCP Server,连上你常用的内部API
  • 在MCP Hub上找别人写好的Server
  • 把MCP集成到你自己的AI应用里

有问题欢迎在评论区留言,一起交流。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询