使用说明

项目简介

go-mcp 是一个基于 Go 语言开发的 MCP 服务器实现,它提供了资源管理、工具注册与执行以及 Prompt 模板定义等核心 MCP 功能,旨在帮助开发者构建可扩展、安全的 LLM 应用后端。该项目代码结构清晰,包含客户端和服务端实现,并提供了详细的集成测试用例,方便用户理解和使用。

主要功能点

  • 资源 (Resources) 管理: 支持托管和管理各种类型的数据资源,并提供客户端数据访问能力。
  • 工具 (Tools) 注册与执行: 允许注册外部功能为工具,并通过 JSON-RPC 协议供 LLM 客户端调用,扩展 LLM 的能力边界。
  • Prompt 模板 (Prompts) 定义与渲染: 支持定义可参数化的 Prompt 模板,客户端可以根据需求获取并使用这些模板与 LLM 进行交互。
  • JSON-RPC 通信: 采用标准的 JSON-RPC 协议与客户端进行通信,实现请求-响应和通知机制。
  • 多传输协议支持: 通过抽象的 Transport 接口,理论上支持 Stdio, SSE, WebSocket 等多种传输协议(仓库目前主要实现了 Stdio 和 SSE 传输)。
  • 会话管理与能力声明: 服务器端负责会话管理,并在初始化过程中声明自身 capabilities,与客户端进行能力协商。

安装步骤

  1. 安装 Go 环境: 确保您的机器上已安装 Go 语言环境 (>= 1.20)。
  2. 获取仓库: 使用 'go get' 命令下载 'go-mcp' 仓库:
    go get github.com/nalbion/go-mcp
  3. 编译服务器: 进入仓库目录,编译 'cli.go' 文件以生成服务器可执行文件:
    cd $GOPATH/github.com/nalbion/go-mcp/pkg/mcp
    go build cli.go -o mcp-server
    编译成功后,会在当前目录下生成 'mcp-server' 可执行文件。

服务器配置

MCP 服务器的配置主要在代码层面完成,例如注册工具、Prompt 和资源。对于 MCP 客户端而言,配置的关键在于指定如何启动和连接到 MCP 服务器。通常,MCP 客户端需要配置服务器的启动命令及其参数。

以下是一个 MCP 客户端可能需要的服务器启动配置示例 (JSON 格式),客户端会使用 'command' 和 'args' 来启动 go-mcp 服务器进程:

{
  "serverName": "go-mcp-server",
  "command": "./mcp-server",
  "args": [
    "server",
    "8080"
  ],
  "description": "启动本地 go-mcp MCP 服务器,监听 8080 端口"
}

配置参数说明:

  • 'serverName': 服务器的名称,客户端用于标识连接的服务器,可以自定义。
  • 'command': MCP 服务器的可执行文件路径。 根据上面的安装步骤,如果您在 '$GOPATH/github.com/nalbion/go-mcp/pkg/mcp' 目录下执行了 'go build' 命令,且当前工作目录也在该目录下,则可以使用 '"./mcp-server"'。请根据实际情况修改可执行文件的路径。
  • 'args': 启动服务器进程时需要传递的命令行参数。 示例中 '"server"' 参数指定运行服务器模式,'"8080"' 指定服务器监听的端口号。 'go-mcp' 服务器接受 'server [port]' 命令,'port' 参数可选,默认为 '8080'。
  • 'description': 服务器配置的描述信息,方便客户端用户理解其用途。

注意: 上述 JSON 配置仅为示例,实际 MCP 客户端如何读取和使用这些配置信息取决于具体的客户端实现。 'go-mcp' 仓库本身主要关注服务器端的实现。

基本使用方法

  1. 启动 MCP 服务器: 在服务器端机器上,打开终端,进入 '$GOPATH/github.com/nalbion/go-mcp/pkg/mcp' 目录,执行以下命令启动 go-mcp 服务器(默认监听 8080 端口):

    ./mcp-server server
    # 或者指定端口
    ./mcp-server server 9090

    服务器成功启动后,将开始监听指定端口,等待 MCP 客户端连接。

  2. 配置 MCP 客户端: 在 MCP 客户端应用中,根据客户端的要求,配置连接到 go-mcp 服务器所需的信息。 这通常包括服务器的启动命令 (command) 和参数 (args),以便客户端能够启动服务器进程并建立连接。

  3. 客户端与服务器交互: MCP 客户端启动后,将通过 JSON-RPC 协议与 go-mcp 服务器进行通信。客户端可以发送请求,例如:

    • 'tools/list': 获取服务器注册的工具列表。
    • 'tools/call': 调用服务器提供的工具,并传递相应的参数。
    • 'prompts/list': 获取服务器提供的 Prompt 模板列表。
    • 'prompts/get': 获取指定名称的 Prompt 模板。
    • 'resources/list': 获取服务器管理的资源列表。
    • 'resources/read': 读取指定 URI 的资源内容。

    具体的操作和请求参数,请参考 Model Context Protocol 的官方文档以及 'go-mcp' 仓库中 'pkg/mcp/mcp_models.go' 文件定义的 MCP 消息结构。

示例: 您可以参考 'go-mcp' 仓库中的 'pkg/mcp/integration_test.go' 文件,该文件包含了完整的客户端与服务器集成测试用例,展示了如何使用 go-mcp 客户端与服务器进行交互,例如列出工具、调用工具等。

开发者提示: 'go-mcp' 仓库主要提供了 MCP 协议的基础框架和服务器端实现。 实际应用中,您需要根据具体的 LLM 应用场景,扩展和定制 go-mcp 服务器的功能,例如:

  • 实现具体的工具 Handler 函数,连接到外部 API 或服务。
  • 实现 Prompt 模板的 MessageProvider 函数,根据参数动态生成 Prompt 消息。
  • 实现 Resource 的 ReadHandler 函数,从文件系统、数据库或其他数据源读取资源内容。
  • 根据需要添加和配置更多的 MCP capabilities。

信息

分类

AI与计算