MCP Golang

mcp-golang 是一个非官方的 Go 语言实现的 Model Context Protocol(MCP)库,支持快速构建服务端与客户端,具备类型安全、低代码量、模块化和双向通信等特性,适用于与 AI 模型进行高效交互。

45 浏览
2025-12-15 发布

详细介绍

mcp-golang 是一个基于 Go 语言的 Model Context Protocol(MCP)实现,旨在简化与 AI 模型的交互过程。该库提供类型安全、异步支持、多协议兼容等特性,支持通过 stdio 和 HTTP 传输方式与 AI 服务进行通信,并内置错误处理机制,帮助开发者专注于业务逻辑的实现。

核心功能

mcp-golang 提供了丰富的功能模块,包括工具调用、提示调用和资源管理,支持客户端与服务端的双向通信。

  • 工具调用:支持用户通过定义的工具接口进行功能扩展,使用原生 Go 结构体作为参数,保障数据传递的安全性和类型安全。同时提供程序化生成工具列表端点,客户端可动态获取可用工具信息,并支持分页功能。
  • 提示调用:用户可通过预设的提示模板与服务端进行交互,同样使用 Go 结构体作为参数,确保数据的一致性和安全性。支持自动生成提示列表端点,客户端可动态获取可用提示信息,并支持分页功能。
  • 资源管理:支持资源的增删改查操作,方便用户管理各类配置和数据。自动生成资源列表端点,客户端能够实时获取最新资源信息,并支持分页功能。

安装方法

mcp-golang 可通过 Go 的模块管理工具进行安装。开发者只需使用 Go 模块管理命令,即可将该库集成到项目中。

go get github.com/metoro-io/mcp-golang

安装完成后,开发者需要创建并编辑配置文件 config.json,指定服务监听地址、端口等参数,以完成服务的初始化配置。

使用方法

mcp-golang 提供了客户端和服务端的双向通信能力,开发者可以通过定义处理函数并注册到服务容器中,实现具体的业务逻辑。

工具调用示例

package main

import (
    "context"
    "log"
    mcp "github.com/metoro-io/mcp-golang"
    "github.com/metoro-io/mcp-golang/transport/stdio"
)

// 定义工具调用的参数结构体
type CalculateArgs struct {
    Operation string `json:"operation"`
    A         int    `json:"a"`
    B         int    `json:"b"`
}

func main() {
    // 创建并初始化客户端
    transport := stdio.NewStdioServerTransport()
    client := mcp.NewClient(transport)

    if _, err := client.Initialize(context.Background()); err != nil {
        log.Fatalf("Failed to initialize: %v", err)
    }

    // 调用工具示例
    args := CalculateArgs{
        Operation: "add",
        A:         10,
        B:         5,
    }
    
    response, err := client.CallTool(context.Background(), "calculate", args)
    if err != nil {
        log.Fatalf("Failed to call tool: %v", err)
    }

    if response != nil && len(response.Content) > 0 {
        log.Printf("Result: %s", response.Content[0].TextContent.Text)
    }
}

提示调用示例

package main

import (
    "context"
    "log"
    mcp "github.com/metoro-io/mcp-golang"
    "github.com/metoro-io/mcp-golang/transport/stdio"
)

// 定义提示调用的参数结构体
type QueryArgs struct {
    Keywords    []string `json:"keywords"`
    PageSize   int      `json:"page_size"`
    PageNumber int      `json:"page_number"`
}

func main() {
    transport := stdio.NewStdioServerTransport()
    client := mcp.NewClient(transport)

    if _, err := client.Initialize(context.Background()); err != nil {
        log.Fatalf("Failed to initialize: %v", err)
    }

    // 调用提示示例
    args := QueryArgs{
        Keywords:    []string{"大数据", "分析"},
        PageSize:   10,
        PageNumber: 1,
    }
    
    response, err := client.CallPrompt(context.Background(), "data_analysis", args)
    if err != nil {
        log.Fatalf("Failed to call prompt: %v", err)
    }

    if response != nil && len(response.Content) > 0 {
        log.Printf("Result: %s", response.Content[0].TextContent.Text)
    }
}

使用场景

mcp-golang 可广泛应用于以下场景:

  • 与 AI 模型进行交互,如文本生成、数学计算等。
  • 集成到桌面工具(如 Claude Desktop)中,实现本地 AI 服务的调用。
  • 构建模块化、可扩展的 AI 服务,支持工具调用、提示调用和资源管理。

注意事项

在使用 mcp-golang 时,开发者需要注意以下事项:

  • HTTP 传输方式不支持通知功能,建议使用 stdio 以获得完整的功能支持。
  • 对于复杂任务,可能需要额外的性能调优。
  • 目前仅支持文本和轻量级计算任务。

mcp-golang 通过其简洁的接口和强大的功能,为开发者提供了一个高效、安全的 AI 服务交互平台。

go mcp ai protocol

相关服务推荐

查看更多