返回市场
MCP-go软件开发工具包

MCP-go软件开发工具包

作者:SetiabudiResearch6 星标更新:2025-02-15

项目介绍

MCP Go SDK

此SDK提供了Model Context Protocol (MCP)的Go实现,支持客户端与服务器之间的双向通信,用于工具执行、资源访问和提示处理。

功能

  • 传输层

    • 多种传输选项(标准输入输出、服务器发送事件(SSE)、WebSocket)
    • 双向通信
    • 可配置的端点和设置
  • 服务器实现

    • 工具注册和执行
    • 资源模式匹配和访问
    • 提示模板渲染
    • 会话管理
    • 基于反射的处理器调用
  • 核心协议类型

    • JSON-RPC消息处理
    • MCP特定类型(工具、资源、提示)
    • 功能和初始化

安装

go get github.com/SetiabudiResearch/mcp-go-sdk

快速开始

这是一个创建MCP服务器的简单示例:

package main

import (
    "context"
    "log"
    "github.com/SetiabudiResearch/mcp-go-sdk/pkg/mcp/server"
    "github.com/SetiabudiResearch/mcp-go-sdk/pkg/mcp/transport"
)

func main() {
    // 创建一个新的服务器
    srv := server.NewServer("示例服务器")

    // 添加一个工具
    srv.AddTool("greet", func(name string) string {
        return "你好," + name + "!"
    }, "问候一个人")

    // 创建一个会话
    session := server.NewSession(context.Background(), srv)

    // 创建并启动一个传输
    t := transport.NewStdioTransport(session)
    if err := t.Start(); err != nil {
        log.Fatal(err)
    }
}

使用指南

创建服务器

// 使用名称创建一个新的服务器
srv := server.NewServer("我的服务器")

// 可选地配置服务器功能
srv.WithCapabilities(protocol.ServerCapabilities{
    SupportsAsync: true,
})

添加工具

// 添加一个同步工具
srv.AddTool("myTool", func(arg1 string, arg2 int) (string, error) {
    return fmt.Sprintf("处理了 %s 和 %d", arg1, arg2), nil
}, "工具描述")

// 添加一个异步工具
srv.AddAsyncTool("longRunningTool", func(params string) error {
    // 长时间运行的操作
    return nil
}, "异步工具描述")

添加资源

// 添加一个具有模式匹配的资源
srv.AddResource("files/{path}", func(path string) ([]byte, error) {
    return ioutil.ReadFile(path)
}, "访问文件")

// 资源模式支持多个参数
srv.AddResource("api/{version}/{endpoint}", func(version, endpoint string) (interface{}, error) {
    return callAPI(version, endpoint)
}, "API访问")

添加提示

// 添加一个简单的文本提示
srv.AddPrompt("确认", func(action string) string {
    return fmt.Sprintf("您确定要 %s 吗?", action)
}, "确认提示")

// 添加一个多消息提示
srv.AddPrompt("聊天", func(context string) []protocol.PromptMessage {
    return []protocol.PromptMessage{
        {
            Role: protocol.RoleAssistant,
            Content: protocol.TextContent{
                Type: "text",
                Text: "我如何帮助您处理 " + context + "?",
            },
        },
    }
}, "聊天提示")

传输配置

// 创建一个会话
session := server.NewSession(context.Background(), srv)

// 标准输入输出传输(适用于CLI应用程序)
t := transport.NewStdioTransport(session)

// WebSocket传输(适用于Web应用程序)
t := transport.NewWebSocketTransport(session, transport.WithAddress(":8080"))

// 服务器发送事件传输(适用于Web浏览器)
t := transport.NewSSETransport(session, transport.WithAddress(":8080"))

// 启动传输
if err := t.Start(); err != nil {
    log.Fatal(err)
}

示例应用

查看示例目录中的完整示例应用:

贡献

欢迎贡献!请随意提交Pull Request。

许可证

本项目采用MIT许可证——详情见LICENSE文件。 </中文翻译>