MCP 协议的架构包含多个关键组件:Host(宿主程序)、MCP Client(MCP 客户端)、MCP Server(MCP 服务器)、Local Data Source(本地数据源)和 Remote Service(远程服务)。对于普通用户而言,Host 是主要关注点;而开发者则可能更关注 MCP Server。
ingFang SC", MIUI, "Hiragino Sans GB", "Microsoft YaHei", sans-serif;font-optical-sizing: inherit;font-kerning: inherit;font-feature-settings: inherit;font-variation-settings: inherit;vertical-align: baseline;display: block;margin-block-end: 1em;margin-inline: 0px;color: rgb(6, 6, 7);letter-spacing: 0.5px;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">HostHost 通常是与用户直接交互的桌面应用程序,例如Claude 客户端、Chatbox、Cline 等。这些应用程序内置了 MCP Client,能够通过手动配置或 Host 提供的市场安装可用的 MCP Server。
内置的 MCP Client 可以与 MCP Server 建立连接,用于后续的 RPC 通信,协议为 JSON RPC。
ingFang SC", MIUI, "Hiragino Sans GB", "Microsoft YaHei", sans-serif;font-optical-sizing: inherit;font-kerning: inherit;font-feature-settings: inherit;font-variation-settings: inherit;vertical-align: baseline;display: block;margin-block-end: 1em;margin-inline: 0px;color: rgb(6, 6, 7);letter-spacing: 0.5px;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">MCP ServerMCP Server 主要通过 MCP 协议暴露其功能,供 Host 调用。其功能包括提示词模板构建和工具链方法调用等。MCP Server 可以提供三种主要类型的功能:
资源(Resources):可以被客户端读取的类文件数据,如 API 响应或文件内容。
工具(Tools):可以被 LLM 调用的函数,需要用户批准。
提示(Prompts):预先编写的模板,帮助用户完成特定任务。
MCP Server 是 MCP 架构中的关键组件,它通过标准化的模型上下文协议为 AI 应用提供丰富的上下文信息和操作能力,从而增强 LLM 的实用性和灵活性
packagemainimport("context""fmt""time""github.com/mark3labs/mcp-go/mcp""github.com/mark3labs/mcp-go/server")funcmain(){// Create MCP servers := server.NewMCPServer("Demo ?","1.0.0",)// Add tooltool := mcp.NewTool("current time",mcp.WithDescription("Get current time with timezone, Asia/Shanghai is default"),mcp.WithString("timezone",mcp.Required(),mcp.Description("current time timezone"),),)// Add tool handlers.AddTool(tool, currentTimeHandler)// Start the stdio serveriferr := server.ServeStdio(s); err !=nil{fmt.Printf("Server error: %v\n", err)}}funccurrentTimeHandler(ctx context.Context, request mcp.CallToolRequest)(*mcp.CallToolResult,error) {timezone, ok := request.Params.Arguments["timezone"].(string)if!ok {returnmcp.NewToolResultError("timezone must be a string"),nil}loc, err := time.LoadLocation(timezone)iferr !=nil{returnmcp.NewToolResultError(fmt.Sprintf("parse timezone with error: %v", err)),nil}returnmcp.NewToolResultText(fmt.Sprintf(`current time is %s`, time.Now().In(loc))),nil}
currentTimeHandler返回对应时区的当前时间。server.ServeStdio表示通过标准 I/O 进行 PRC 通信。
通过 go build 生成一个叫做 mcp-go-server 的可执行程序,后面手动配置会用到。告诉我北京时间
总结| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |