使用Gone MCP 组件编写MCP Server

简介

MCP(Model Context Protocol,模型上下文协议)是一个由 Anthropic 公司(Claude 模型的开发者)主导的开放协议。它的主要目标是为 AI 模型提供一个标准化的框架,使其能够方便地与外部数据源、工具和服务进行交互。

Gone MCP 组件是基于 github.com/mark3labs/mcp-go 进行封装的工具包,它能帮助开发者快速构建 MCP 的服务端和客户端应用。通过使用 Gone MCP 组件,您可以轻松地将 AI 模型与您的业务系统进行集成。

快速开始

完整代码参考:mcp/quick_start

1.创建项目,安装依赖
go mod init quickstart
go get github.com/gone-io/goner/mcp
2.基于stdio创建服务端,创建文件 `server/main.go`
// 这是一个基于MCP(Model-Controller-Provider)的服务器端示例程序
// 展示了如何创建一个简单的MCP工具,该工具可以接收一个名字参数并返回问候语

package main

import (
	"context"
	"errors"
	"fmt"
	"os"

	"github.com/gone-io/gone/v2"
	goneMcp "github.com/gone-io/goner/mcp"
	"github.com/mark3labs/mcp-go/mcp"
)

// main 函数初始化并启动MCP服务器
// 加载必要的组件并注册helloTool工具
func main() {
   
   
	_ = os.Setenv("GONE_MCP", `{"name":"quick-start", "version": "0.0.1"}`)
	gone.
		Loads(goneMcp.ServerLoad). // 加载MCP服务器组件
		Load(&helloTool{
   
   }). // 加载helloTool工具
		Serve() // 启动服务
}

// helloTool 实现了一个简单的问候工具
// 继承gone.Flag以支持MCP工具的基本功能
type helloTool struct {
   
   
	gone.Flag
}

// Define 定义了工具的名称、描述和参数
// 返回值: goneMcp.Tool - 工具的定义信息
func (h helloTool) Define() goneMcp.Tool {
   
   
	return mcp.NewTool("hello_world",
		mcp.WithDescription("Say hello to someone"), // 工具描述
		mcp.WithString("name", // 定义字符串类型的name参数
			mcp.Required(),                                 // 将name参数设置为必填
			mcp.Description("Name of the person to greet"), // name参数的描述
		),
	)
}

// Handler 处理工具的调用请求
// 参数:
//   - ctx: 上下文信息
//   - request: 调用请求,包含参数信息
//
// 返回值:
//   - *mcp.CallToolResult: 调用结果
//   - error: 错误信息
func (h helloTool) Handler(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
   
   
	// 获取并验证name参数
	name, ok := request.Params.Arguments["name"].(string)
	if !ok {
   
   
		return nil, errors.New("name must be a string") // 参数类型错误时返回错误
	}
	// 返回格式化的问候语
	return mcp.NewToolResultText(fmt.Sprintf("Hello, %s!", name)), nil
}

// 编译时类型检查,确保helloTool实现了goneMcp.ITool接口
var _ goneMcp.ITool = (*helloTool)(nil)

3.基于stdio创建客户端,创建文件 `client/main.go`
package main

import (
	"context"
	"encoding/json"
	"fmt"
	"log"
	"time"

	"github.com/gone-io/gone/v2"
	goneMcp "github.com/gone-io/goner/mcp"
	"github.com/mark3labs/mcp-go/client"
	"github.com/mark3labs/mcp-go/mcp"
)

// main 函数是程序的入口点
// 这是一个基于MCP(Message Communication Protocol)的客户端示例程序
// 演示了如何初始化MCP客户端、连接服务器、列出可用工具并调用工具
func main() {
   
   
	gone.
		NewApp(goneMcp.ClientLoad). // 创建一个新的Gone应用,使用MCP客户端加载器
		Run(func(in struct {
   
   
			// 注入MCP客户端,使用stdio类型通信,并通过本地服务器运行,运行命令为:go run ./server
			client *client.Client `gone:"*,type=stdio,param=go run ./server"`
		}) {
   
   
			c := in.client
			// 创建一个带30秒超时的上下文
			ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
			defer cancel()

			// 启动客户端
			err := c.Start(ctx)
			if err != nil {
   
   
				log.Fatalf("Failed to start client: %v", err)
			}

			// 准备初始化请求
			initReques
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dapeng-大鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值