模型上下文协议实现

一个基于Go语言的Model Context Protocol(MCP)实现,用于LLM应用中的客户端与服务器交互,提供资源、工具、提示和根目录管理功能。

  • by vishymakthal
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 vishymakthal/mcp

使用说明

Go中模型上下文协议(MCP)的实现

此存储库包含的Go实现 模型上下文协议(MCP),一种基于JSON-RPC的协议,用于LLM驱动的应用程序中客户端和服务器之间的交互。

目录

  • mcp/schema.go:MCP模式的Go结构定义,从TypeScript模式翻译而来
  • mcp/client.go:用于与MCP服务器交互的客户端实现
  • examples/mcp_client_example.go:显示如何使用客户端的简单示例

MCP概述

模型上下文协议(MCP)实现了模型“主机”(例如,LLM客户端或与LLM接口的系统)和“服务器”(提供上下文信息、工具、提示或资源以增强LLM功能的系统)之间的通信。

MCP的主要特征包括:

  • 资源:主机可以读取的文件、文档和其他数据
  • 工具:主机可以代表模型调用的函数
  • 鼓励:主机可以使用的模板或预定义的消息序列
  • 根:服务器可以操作的文件系统或数据根

入门指南

先决条件

  • 转到1.18或更高版本

运行示例

# Set the MCP server URL (optional, defaults to http://localhost:3000/jsonrpc)
export MCP_SERVER_URL=http://your-mcp-server/jsonrpc

# Run the example
go run examples/mcp_client_example.go

使用MCP客户端

import (
    "fmt"
    
    "path/to/mcp"
)

func main() {
    // Create a new client
    client := mcp.NewClient("http://your-mcp-server/jsonrpc")
    
    // Initialize the client
    clientInfo := mcp.Implementation{
        Name:    "My MCP Client",
        Version: "1.0.0",
    }
    
    capabilities := mcp.ClientCapabilities{
        // Specify the capabilities your client supports
    }
    
    err := client.Initialize(clientInfo, capabilities)
    if err != nil {
        // Handle error
    }
    
    // Now you can use various client methods:
    
    // List resources
    resources, err := client.ListResources("")
    
    // Read a resource
    resource, err := client.ReadResource("resource-uri")
    
    // Call a tool
    result, err := client.CallTool("tool-name", map[string]interface{}{
        "argument1": "value1",
        "argument2": 123,
    })
    
    // Get a prompt
    prompt, err := client.GetPrompt("prompt-name", map[string]string{
        "argName": "argValue",
    })
}

实现细节

模式

中的Go架构定义 mcp/schema.go 为MCP消息提供类型安全结构。这包括:

  • JSON-RPC协议结构
  • 资源、提示和工具定义
  • 文本、图像和嵌入式资源的内容结构
  • 通过以下方式处理多态类型的辅助函数 json.RawMessage

客户端

客户端实现 mcp/client.go 提供了以下方法:

  • 正在初始化与MCP服务器的连接
  • 发送请求和处理响应
  • 将Go结构转换为JSON-RPC消息
  • 常见MCP操作的辅助方法

贡献

欢迎投稿!以下是您可以做出贡献的一些方式:

  • 实现服务器
  • 为客户端添加WebSocket支持
  • 改进错误处理
  • 添加测试
  • 记录其他用例

许可证

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

参考文献