模型上下文协议SDK

提供Go语言实现的模型上下文协议(MCP)SDK,支持客户端与服务器之间的双向通信,用于工具执行、资源访问和提示处理。

  • by SetiabudiResearch
  • Go
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 SetiabudiResearch/mcp-go-sdk

使用说明

MCP Go SDK

此SDK提供了模型上下文协议(MCP)的Go实现,实现了客户端和服务器之间的双向通信,用于工具执行、资源访问和提示处理。

特性

  • 传输层

    • 多种传输选项(stdio、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() {
    // Create a new server
    srv := server.NewServer("Example Server")

    // Add a tool
    srv.AddTool("greet", func(name string) string {
        return "Hello, " + name + "!"
    }, "Greet a person")

    // Create a session
    session := server.NewSession(context.Background(), srv)

    // Create and start a transport
    t := transport.NewStdioTransport(session)
    if err := t.Start(); err != nil {
        log.Fatal(err)
    }
}

使用指南

创建服务器

// Create a new server with a name
srv := server.NewServer("My Server")

// Optionally configure server capabilities
srv.WithCapabilities(protocol.ServerCapabilities{
    SupportsAsync: true,
})

添加工具

// Add a synchronous tool
srv.AddTool("myTool", func(arg1 string, arg2 int) (string, error) {
    return fmt.Sprintf("Processed %s with %d", arg1, arg2), nil
}, "Tool description")

// Add an asynchronous tool
srv.AddAsyncTool("longRunningTool", func(params string) error {
    // Long-running operation
    return nil
}, "Async tool description")

添加资源

// Add a resource with pattern matching
srv.AddResource("files/{path}", func(path string) ([]byte, error) {
    return ioutil.ReadFile(path)
}, "Access files")

// Resource patterns support multiple parameters
srv.AddResource("api/{version}/{endpoint}", func(version, endpoint string) (interface{}, error) {
    return callAPI(version, endpoint)
}, "API access")

添加提示

// Add a simple text prompt
srv.AddPrompt("confirm", func(action string) string {
    return fmt.Sprintf("Are you sure you want to %s?", action)
}, "Confirmation prompt")

// Add a multi-message prompt
srv.AddPrompt("chat", func(context string) []protocol.PromptMessage {
    return []protocol.PromptMessage{
        {
            Role: protocol.RoleAssistant,
            Content: protocol.TextContent{
                Type: "text",
                Text: "How can I help you with " + context + "?",
            },
        },
    }
}, "Chat prompt")

传输配置

// Create a session
session := server.NewSession(context.Background(), srv)

// Stdio transport (for CLI applications)
t := transport.NewStdioTransport(session)

// WebSocket transport (for web applications)
t := transport.NewWebSocketTransport(session, transport.WithAddress(":8080"))

// Server-Sent Events transport (for web browsers)
t := transport.NewSSETransport(session, transport.WithAddress(":8080"))

// Start the transport
if err := t.Start(); err != nil {
    log.Fatal(err)
}

示例应用程序

请参阅 示例 完整示例应用程序的目录:

贡献

欢迎投稿!请随时提交拉取请求。

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。