MCP Server实战:手把手从零用Go快速构建完整教程详解
MCP协议为大型语言模型与外部数据源提供统一通信标准,架构含Host与MCPServer等组件。使用Go语言可快速构建MCPServer,通过定义工具实现当前时间查询功能,并集成到Cline等客户端中调用。
快速掌握MCP协议,使用Go语言构建功能强大的服务器。 核心内容: 1. MCP协议简介及其在大型语言模型通信中的关键作用 2. MCP协议架构深度解析,涵盖Host、MCP Server等核心组件 3. 基于Go语言开发MCP Server的实战操作指南
首先,我们来深入理解MCP协议究竟是什么。这场技术变革始于2024年11月,Anthropic正式推出了MCP协议——Model Context Protocol,即模型上下文协议。它的目标十分明确:为大型语言模型与外部数据源、工具之间的交互提供一套统一的通信标准。
官方地址:https://modelcontextprotocol.io,下方展示了其架构图。
从架构层面来看,MCP协议定义了若干关键角色:Host(宿主程序)、MCP Client(客户端)、MCP Server(服务器)、Local Data Source(本地数据源)以及Remote Service(远程服务)。普通用户主要关注Host,而开发者则需要将重心放在MCP Server的开发与集成上。
Host
Host是与用户直接交互的桌面应用程序——例如Claude客户端、Chatbox、Cline等。这些应用内部嵌入了MCP Client,用户可以通过手动配置或内置市场安装可用的MCP Server。一旦MCP Client与Server建立连接,双方将基于JSON RPC协议进行高效通信。
MCP Server
MCP Server的核心职责是通过MCP协议向外暴露功能,供Host调用。它能够提供三种主要类型的能力:
资源(Resources):可被客户端读取的类文件数据,比如API响应或文件内容。
工具(Tools):可被LLM调用的函数,需要经过用户审批。
提示(Prompts):预先编写的模板,帮助用户高效完成特定任务。
MCP Server是整个架构的关键节点——它通过标准化协议为AI应用提供丰富的上下文信息和操作能力,极大提升了LLM的实用性与灵活性。
在Host方面,官方首推的是Claude客户端。不过本文选用Cline进行演示。在VSCode中搜索Cline并安装最新版即可(当前使用的是v3.4.0)。安装完成后需要配置大模型,这里选用了阿里云的deepseek-r1满血版。

完成LLM配置后,点击Cline顶部的第二个按钮(MCP Servers),即可看到内置的MCP Server市场——是不是颇有App Store的感觉?

当然,今天的目的并非仅仅体验Cline的市场。更重要的是让大家直观感受MCP协议的强大之处——它把整个生态做了清晰的分层:有人负责开发各类Host,各种扩展能力或远程服务则通过MCP Server快速集成到你喜爱的Host中,从而实现统一的UI体验。
官方提供了TS、Python、Java、Kotlin SDK。本次我采用了社区Go SDK——mark3labs/mcp-go,其更新速度令人满意。下面这个MCP Server实现了当前时间查询功能,支持任意时区,具体代码如下:
package main
import (
"context"
"fmt"
"time"
"github.com/mark3labs/mcp-go/mcp"
"github.com/mark3labs/mcp-go/server"
)
func main() {
// Create MCP server
s := server.NewMCPServer(
"Demo ?",
"1.0.0",
)
// Add tool
tool := 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 handler
s.AddTool(tool, currentTimeHandler)
// Start the stdio server
if err := server.ServeStdio(s); err != nil {
fmt.Printf("Server error: %v\n", err)
}
}
func currentTimeHandler(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
timezone, ok := request.Params.Arguments["timezone"].(string)
if !ok {
return mcp.NewToolResultError("timezone must be a string"), nil
}
loc, err := time.LoadLocation(timezone)
if err != nil {
return mcp.NewToolResultError(fmt.Sprintf("parse timezone with error: %v", err)), nil
}
return mcp.NewToolResultText(fmt.Sprintf(`current time is %s`, time.Now().In(loc))), nil
}
代码解读:
- 通过
mcp.NewTool定义了一个名为“current time”的工具,接收一个timezone参数,默认值为Asia/Shanghai。 currentTimeHandler返回对应时区的当前时间。server.ServeStdio表示通过标准I/O进行RPC通信。
通过go build生成一个名为mcp-go-server的可执行程序,后续手动配置时会用到。
配置Server
按照下图所示的步骤进行MCP Server的配置。

将编译好的可执行程序添加到Cline的配置中,点击保存后它会自动启动一个mcp-go-server进程,并通过MCP协议发现我们定义的“current time”工具。

工具使用
接下来,我们来验证current time工具是否好用。点击Cline上方的“+”号创建一个新的任务。
告诉我北京时间
输入任务后,Cline开始与大型语言模型交互——发现可以调用current time tool,并携带由大模型解析出的timezone参数,通过RPC远程调用该工具。工具成功返回了上海当前时间(大模型认为上海与北京属于同一时区,因此使用了默认值),最后大模型对结果进行了润色。整个过程如下图所示。


润色后的结果为:“当前北京时间是:2025年2月25日 22:33:58(UTC+8)”。当继续询问芝加哥当前时间时,它也能迅速给出准确答案。

总结
至此,本次示例圆满结束。从实践体验来看,利用MCP SDK开发一个MCP服务非常便捷,并且该服务能够轻松集成到任何支持MCP协议的客户端程序中——这极大降低了服务与应用程序之间的集成难度。随着MCP生态系统持续壮大与完善,可以预见的是,MCP协议未来将展现出更加广阔的应用前景与潜力,为人工智能领域带来更多创新与可能性。
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:MCP Server实战:手把手从零用Go快速构建完整教程详解要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点Daetama是面向数据科学面试和SQL能力提升的练习平台,已收录超100个覆盖基础到进阶的SQL题目,求职板块与课程模块在开发中,团队保持每周更新节奏,提供系统性刷题与模拟面试场景。
SpeakMulti是一款AI驱动的配音平台,可将YouTube视频翻译成多种语言,保留原始说话者的音色和语调,降低本地化成本。用户提交视频并选择目标语言后,AI自动完成配音,并由专家团队审核,确保准确自然。
需求人群 如果你经常需要从图片中提取文字——例如整理截图内容、翻译图片里的外语文本、识别带有水印的图片信息——那么 Umi-OCR 无疑是一款相当实用的工具。它完全在本地运行,无需联网,对隐私保护极为友好。 产品特色 这款工具的核心亮点都集中在实用性上。截屏识别操作非常顺手,按下快捷键即可框选区域,
艺术创作与人工智能的融合,正在开启一个全新的创作时代。moonlightai 正是这样一款AI绘画工具,能够帮助用户通过人工智能快速生成不同风格的绘画作品——无论你想复刻文艺复兴时期的古典优雅,还是为画作注入梵高般炽热的笔触,甚至从艾沃佐夫斯基的海浪星空中汲取灵感,它都能轻松实现。 需求人群 简单来
- 日榜
- 周榜
- 月榜
热点快看
