MCP协议 目录一、MCP概念二、MCP ServerHost三、实现一个MCP Server四、MCP和Function Call五、Host和Server的通信协议这个UP主讲的是真好 参考视频链接MCP终极指南 带你深入掌握MCP一、MCP概念类似于豆包手机用户输入一条指令例如搜索相关新闻并整理成word文档Agent会依次调用网页搜索、文件生成工具由于不同工具数据输入输出格式不同所以必须由开发者根据工具的输入分别编写调用google、wps的Tool函数可以基于任何语言编写。Tools是由多个Toll函数main函数组成的源代码文件被添加到Host后作为独立进程运行本质是想实现可插拔的特性。开发者在网上开源了对于各种应用程序的Tools文件。但是这时候就出现问题了1.不同的Host例如Cursor、Trac、自己编写的项目向Tolls的请求格式不同。2.不同Tools对Host的响应格式不同。例如有的Host和Tolls支持JSON类型的数据、有的支持XML类型的数据且JSON的格式还不一样导致开源的Tolls复用性很差。于是Model Context Protocol模型上下文协议制定了Host与Tolls的进程通信规范为JSON且JSON每一行分别是什么字段也有严格限制此时Tools又叫做Server。这样一来只要Server基于MCP协议编写函数那么就能在支持MCP协议的Host上实现可插拔。除了约束了进程通信的规范MCP还规定了Host与Server进程建立连接的过程在建立连接后Server会将自己的Toll和描述信息发给Host。建立连接过程Host将自己的信息发给Server-Server返回自己的信息给Host-Host询问Server可用的函数-Server返回自己的Toll及描述信息给Host目前大多数语言都封装了MCP框架如下图所示以python为例编写Server时只要在在函数上加mcp.toll()注解由框架通过动态代理对函数返回值进行格式化后再发给Host。二、MCP ServerHostMCPServer是一个由Python或Node编写的遵循MCP协议的本地文件封装了基于MCP协议访问应用的Tool函数一个main函数Host遵循MCP格式请求ServerServer调用函数操作本地、远程的应用程序获取结果返回遵循MCP格式的结果给Host。MCPHost是调用LLM、MCP Server并接收用户请求的后台服务器项目。三、实现一个MCP ServerMCP Server就是一个源代码文件只不过有main函数所以添加到Host中时会创建独立进程并运行所以可以通过命令行直接与该进程通信。importio.modelcontextprotocol.server.McpServer;importio.modelcontextprotocol.server.transport.StdioServerTransport;importjava.net.URI;importjava.net.http.HttpClient;importjava.net.http.HttpRequest;importjava.net.http.HttpResponse;publicclassAmapMcpMiniServer{privatestaticfinalStringAMAP_KEY你的高德key;publicstaticvoidmain(String[]args)throwsException{// 创建 MCP 服务器varserverMcpServer.create(amap-mini-server)// 注册工具获取当前IP位置.tool(get_location,获取当前IP地理位置,(params)-{HttpClientclientHttpClient.newHttpClient();HttpRequestreqHttpRequest.newBuilder().uri(URI.create(https://restapi.amap.com/v3/ip?keyAMAP_KEYoutputjson)).GET().build();HttpResponseStringrespclient.send(req,HttpResponse.BodyHandlers.ofString());returnresp.body();// 直接返回位置信息}).build();// 启动服务server.start(newStdioServerTransport()).join();}}四、MCP和Function Call根据上面的内容你应该理解了MCP是规定Host与Server之间的数据传输规范Host向Server发请求由Server调用自己的Toll函数访问高德地图等应用程序。Server用于向高德地图等应用程序发送请求。而Function Call就是Host直接调用Toll函数访问高德地图等应用程序不涉及Server适用于简单开发。五、Host和Server的通信协议StdioHost和Server进程之间使用管道通信本质是共享一块内核内存由内核线程提供同步机制。OSSSESSE基于HTTP协议所以Host和Server需要分别监听一个端口进行网络通信。