项目简介

本项目是一个基于 Model Context Protocol (MCP) 的服务器实现,专注于提供“当前时间”工具。该服务器旨在演示如何构建符合 MCP 协议的后端服务,以便 LLM 客户端能够通过标准化的接口获取外部信息,例如当前时间。

主要功能点

  • MCP 协议兼容: 实现了 MCP 协议,能够处理来自 MCP 客户端的请求和返回符合协议的响应。
  • 当前时间工具: 提供一个名为 "current time" 的工具,允许客户端查询指定时区的当前时间。
  • 多传输协议支持: 支持 Stdio 和 SSE 两种传输协议,方便在不同场景下部署和使用。
  • 可配置时区: 工具允许客户端指定时区,以获取特定地区的当前时间。

安装步骤

  1. 环境准备: 确保已安装 Go 语言环境(版本 >= 1.16)。
  2. 下载仓库: 使用 Git 克隆仓库到本地:
    git clone https://github.com/songjiayang/eino-mcp.git
    cd eino-mcp
  3. 编译服务器: 进入 'tools/mcp-time' 目录(或 'tools/mcp-time-v2',两者实现类似,选择其一即可),执行编译命令:
    cd tools/mcp-time
    go build -o mcp-time-server
    cd tools/mcp-time-v2
    go build -o mcp-time-server-v2
    编译成功后,会在当前目录下生成可执行文件 'mcp-time-server' 或 'mcp-time-server-v2'。

服务器配置

MCP 服务器需要配置后才能被 MCP 客户端调用。以下是针对 'mcp-time' 服务器的客户端配置示例(JSON 格式):

{
  "serverName": "github.com/songjiayang/current-time",
  "command": "./mcp-time-server",
  "args": [],
  "transport": "stdio"
}

配置参数说明:

  • 'serverName': 服务器名称,用于客户端识别,应与服务器代码中定义的名称一致。
  • 'command': 启动服务器的可执行文件路径,根据实际情况填写。如果 'mcp-time-server' 可执行文件在 PATH 环境变量中,则只需填写文件名即可,否则需要填写完整路径。
  • 'args': 启动服务器的命令行参数,本项目 'mcp-time' 服务器默认使用 Stdio 传输,无需额外参数。如果需要使用 SSE 传输,请参考仓库 'tools/mcp-time/main.go' 中的 '-transport' 和 '-server_listen' 参数说明进行配置。
  • 'transport': 与客户端通信的传输协议,默认为 "stdio"。如果服务器配置为 SSE 传输,则此处应设置为 "sse"。

注意: 'tools/mcp-time-v2' 目录下的 'main.go' 示例默认使用 SSE 传输,监听地址为 'localhost:8080'。 如果使用 'mcp-time-v2' 版本,客户端配置可能需要调整 'transport' 为 '"sse"',并确保客户端能够连接到 'http://localhost:8080/sse'。 具体配置请参考客户端的 MCP 库文档。

基本使用方法

  1. 启动 MCP 服务器: 在 'tools/mcp-time' (或 'tools/mcp-time-v2') 目录下,运行编译生成的可执行文件:

    ./mcp-time-server

    ./mcp-time-server-v2

    服务器启动后,会监听来自客户端的 MCP 请求。

  2. 配置 MCP 客户端: 在 MCP 客户端应用中,根据上述 “服务器配置” 部分的说明,配置连接到 'mcp-time-server'。 客户端需要使用 MCP 客户端库,并按照库的文档进行配置和工具调用。

  3. 调用 "current time" 工具: 客户端成功连接到服务器后,即可发现并调用名为 "current time" 的工具。 调用时,可以传递 'timezone' 参数来指定时区,例如 '"Asia/Shanghai"' 或 '"America/New_York"'。 工具将返回指定时区的当前时间。

示例 (假设使用 MCP 客户端 SDK):

// 假设 client 是已配置好的 MCP 客户端实例
result, err := client.CallTool(context.Background(), "current time", map[string]interface{}{
    "timezone": "Asia/Shanghai",
})
if err != nil {
    // 处理错误
}
fmt.Println(result.GetTextContent()) // 输出:current time is ...

请参考仓库中的 'main.go' 文件,了解如何使用 'github.com/mark3labs/mcp-go/client' 库作为 MCP 客户端与本服务器进行交互。 根目录的 'main.go' 文件提供了一个简单的 Eino 框架结合 MCP 客户端的示例,可以帮助理解如何集成 MCP 服务器到 LLM 应用中。

信息

分类

AI与计算