使用说明

项目简介

mcp-golang 是一个非官方的 Model Context Protocol (MCP) 的 Golang 实现库,它允许开发者使用 Go 语言快速构建 MCP 服务器。该库提供了类型安全、自定义传输协议、低样板代码和模块化设计等特性,旨在简化 MCP 服务器的开发过程。

主要功能点

  • 资源管理 (Resources):支持注册和托管资源,并提供客户端访问能力。
  • 工具注册与执行 (Tools):允许注册外部工具函数,并支持客户端通过 MCP 协议调用执行。工具参数支持 Go 原生结构体,并自动生成 JSON Schema。
  • Prompt 模板 (Prompts):支持注册 Prompt 模板,允许客户端获取并使用预定义的 Prompt 消息。
  • 多种传输协议 (Transports):内置支持 Stdio 和 SSE 传输协议,并允许自定义传输协议。
  • 会话管理:服务器端负责会话管理。
  • 能力声明:声明服务器提供的工具、Prompt 和资源能力。
  • 分页 (Pagination):支持工具、Prompt 和资源列表的分页返回。
  • 变更通知 (Change Notifications):支持工具、Prompt 和资源列表变更时向客户端发送通知。

安装步骤

  1. 确保已安装 Go 语言环境。
  2. 使用 'go get' 命令安装 mcp-golang 库:
    go get github.com/metoro-io/mcp-golang

服务器配置

MCP 服务器主要通过命令行启动,无需复杂的配置文件。对于 MCP 客户端(例如 Claude Desktop),需要配置服务器的启动命令。以下是 Claude Desktop 客户端的 'claude_desktop_config.json' 配置文件示例,用于配置 mcp-golang 服务器:

{
  "mcpServers": {
    "golang-mcp-server": {
      "command": "<your path to golang MCP server go executable>",
      "args": [],
      "env": {}
    }
  }
}

配置参数说明

  • server name: 'golang-mcp-server' (服务器名称,客户端用于标识和引用,可以自定义)
  • command: '<your path to golang MCP server go executable>' (必填):指向您编译后的 mcp-golang 服务器 Go 可执行文件的绝对路径。例如:'/path/to/your/mcp-golang-server'。 请根据您的实际构建路径进行替换。
  • args: '[]' (可选):启动服务器可执行文件时需要传递的命令行参数,本例中为空数组,表示没有额外的参数。
  • env: '{}' (可选): 启动服务器可执行文件时需要设置的环境变量,本例中为空对象,表示没有需要设置的环境变量。

注意: 请将 '<your path to golang MCP server go executable>' 替换为您实际的 mcp-golang 服务器可执行文件路径。

基本使用方法

  1. 编写 Go 代码: 参考仓库提供的示例代码 'examples' 目录下的示例,例如 'readme_server/readme_server.go' 或 'basic_tool_server/basic_tool_server.go',定义您的工具、Prompt 和资源处理逻辑。
  2. 注册工具、Prompt 和资源: 使用 'server.RegisterTool', 'server.RegisterPrompt', 'server.RegisterResource' 方法注册您的功能。
  3. 实现处理函数: 为注册的工具、Prompt 和资源编写相应的处理函数。
  4. 启动服务器: 创建 'mcp_golang.Server' 实例,配置传输协议(例如 'stdio.NewStdioServerTransport()'),调用 'server.Serve()' 启动服务器。
  5. 编译和运行: 使用 'go build' 命令编译您的 Go 代码,生成可执行文件。然后根据 Claude Desktop 的配置示例,配置客户端指向该可执行文件,即可将您的 mcp-golang 服务器连接到 MCP 客户端。

示例代码 (参考 'examples/readme_server/readme_server.go'):

package main

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

// ... (Content 和 MyFunctionsArguments 结构体定义) ...

func main() {
	done := make(chan struct{})

	server := mcp_golang.NewServer(stdio.NewStdioServerTransport())
	// 注册工具
	err := server.RegisterTool("hello", "Say hello to a person", func(arguments MyFunctionsArguments) (*mcp_golang.ToolResponse, error) {
		return mcp_golang.NewToolResponse(mcp_golang.NewTextContent(fmt.Sprintf("Hello, %server!", arguments.Submitter))), nil
	})
	// ... (错误处理) ...

	// 注册 Prompt
	err = server.RegisterPrompt("promt_test", "This is a test prompt", func(arguments Content) (*mcp_golang.PromptResponse, error) {
		return mcp_golang.NewPromptResponse("description", mcp_golang.NewPromptMessage(mcp_golang.NewTextContent(fmt.Sprintf("Hello, %server!", arguments.Title)), mcp_golang.RoleUser)), nil
	})
	// ... (错误处理) ...

	// 注册资源
	err = server.RegisterResource("test://resource", "resource_test", "This is a test resource", "application/json", func() (*mcp_golang.ResourceResponse, error) {
		return mcp_golang.NewResourceResponse(mcp_golang.NewTextEmbeddedResource("test://resource", "This is a test resource", "application/json")), nil
	})
	// ... (错误处理) ...

	// 启动服务器
	err = server.Serve()
	// ... (错误处理) ...

	<-done
}

信息

分类

AI与计算