💥新功能速递!Go 语言如何优雅地管理你的 MCP 服务器?`mcp-client-go` 来帮你!


💥新功能速递!Go 语言如何优雅地管理你的 MCP 服务器?mcp-client-go 来帮你!

大家好,我是你们的老朋友,热衷于探索 Go 语言各种新奇好用库的 tech enthusiast!最近在 GitHub 上发现一个非常有潜力的 Go 库------yincongcyincong/mcp-client-go)。它最近迭代了一个非常棒的功能,极大地提升了我们管理 MCP (Microservice Communication Protocol) 服务器的效率和灵活性。今天就来给大家详细介绍一下这个新功能,并强烈安利这个库!

为什么要关注 MCP 和 mcp-client-go

随着微服务架构的普及,我们经常需要与各种各样的服务和工具进行交互。这些服务可能是本地运行的,也可能是远程部署的,它们可能通过不同的协议进行通信(HTTP/SSE, WebSocket, 或者自定义协议)。而 MCP 协议正是为了规范这种微服务间的通信而生,旨在提供一种统一的、可扩展的方式来发现和调用服务。

然而,管理这些五花八门的 MCP 服务器本身就是个不小的挑战。手动启动、配置、管理这些服务,不仅繁琐,而且容易出错。mcp-client-go 正是为了解决这个痛点而诞生的。它提供了一个 Go 语言的客户端,让你能够以代码的方式统一管理和调用不同的 MCP 服务器

🚀 新功能亮点:配置驱动的 MCP 服务器管理!

这次 mcp-client-go 更新的重磅功能,就是通过配置文件来灵活添加和管理 MCP 服务器!这意味着你不再需要硬编码服务器的启动命令或连接地址,一切都可以通过一个简单的 JSON 文件搞定。这大大提高了项目的可配置性和可维护性。

让我们通过一个具体的例子来看看它是怎么做到的。

示例配置:test.json

假设你需要与 GitHub 的 MCP 服务器、Playwright 的 MCP 服务器以及一个自定义的 Amap MCP 服务器进行交互。你可以这样配置 test.json 文件:

JSON

json 复制代码
{
    "mcpServers": {
       "github": {
          "command": "docker",
          "args": [
             "run",
             "-i",
             "--rm",
             "-e",
             "GITHUB_PERSONAL_ACCESS_TOKEN",
             "ghcr.io/github/github-mcp-server"
          ],
          "env": {
             "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>" // 请替换为你的 GitHub Token
          }
       },
       "playwright": {
          "url": "http://localhost:8931/sse" // 假设 Playwright MCP 服务器运行在 8931 端口
       },
       "amap-mcp-server": {
          "url": "http://localhost:8000/mcp" // 假设 Amap MCP 服务器运行在 8000 端口
       }
    }
}

从这个配置中我们可以看出,mcp-client-go 支持两种主要的 MCP 服务器启动/连接方式:

  1. 通过 command 字段指定外部命令启动 (e.g., Docker):

    对于像 github 这样的 MCP 服务器,它可能以 Docker 容器的形式提供。你只需要在配置中指定 command 为 docker,然后在 args 中传入相应的 Docker 命令和参数,甚至可以通过 env 字段设置环境变量(比如 GitHub Personal Access Token)。mcp-client-go 会负责帮你启动和管理这个 Docker 容器。

  2. 通过 url 字段连接现有服务 (HTTP/SSE):

    对于已经运行的 MCP 服务器,比如 playwright 和 amap-mcp-server,你只需要提供它们的访问 url 即可。库会通过这个 URL 进行连接,并获取服务信息。

这种声明式的配置方式,让 MCP 服务器的管理变得前所未有的简单和直观!

示例代码:Go 语言中的优雅使用

配置好了 test.json,接下来我们看看如何在 Go 代码中利用它:

Go

go 复制代码
package main

import (
    "context"
    "encoding/json"
    "fmt"
    "log"
    "time"

    "github.com/yincongcyincong/mcp-client-go/clients" // 引入 mcp-client-go 库
)

// 请确保在运行前,你已经按照注释启动了相应的 MCP 服务器
// For Playwright MCP Server: `npx @playwright/mcp@latest --port 8931`
// For Amap MCP Server: `uvx amap-mcp-server streamable-http` (或类似命令)
func main() {
    // 1. 创建带有超时的上下文,用于控制整个操作的生命周期
    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
    defer cancel() // 确保在 main 函数结束时取消上下文

    // 2. 从配置文件初始化 MCP 服务器客户端管理器
    mcs, err := clients.InitByConfFile(ctx, "./test.json")
    if err != nil {
       log.Fatalf("从配置文件初始化失败: %v", err)
    }

    // 3. 注册所有配置的 MCP 客户端
    // 这一步会根据配置启动 Docker 容器或连接到 URL
    errs := clients.RegisterMCPClient(ctx, mcs)
    if len(errs) > 0 {
       log.Fatalf("注册 MCP 客户端失败: %v", errs)
    }
    fmt.Println("所有 MCP 客户端已成功注册!")

    // 4. 获取并使用 "github" MCP 客户端
    fmt.Println("\n--- 从 GitHub MCP 客户端获取工具 ---")
    c, err := clients.GetMCPClient("github")
    if err != nil {
       log.Fatalf("获取 GitHub 客户端失败: %v", err)
    }
    for _, tool := range c.Tools {
       toolByte, _ := json.MarshalIndent(tool, "", "  ") // 美化输出
       fmt.Println(string(toolByte))
    }
    fmt.Println("-------------------------------------------------------")

    // 5. 获取并使用 "playwright" MCP 客户端
    fmt.Println("\n--- 从 Playwright MCP 客户端获取工具 ---")
    c, err = clients.GetMCPClient("playwright")
    if err != nil {
       log.Fatalf("获取 Playwright 客户端失败: %v", err)
    }
    for _, tool := range c.Tools {
       toolByte, _ := json.MarshalIndent(tool, "", "  ")
       fmt.Println(string(toolByte))
    }
    fmt.Println("-------------------------------------------------------")

    // 6. 获取并使用 "amap-mcp-server" MCP 客户端
    fmt.Println("\n--- 从 Amap MCP 客户端获取工具 ---")
    c, err = clients.GetMCPClient("amap-mcp-server")
    if err != nil {
       log.Fatalf("获取 Amap 客户端失败: %v", err)
    }
    for _, tool := range c.Tools {
       toolByte, _ := json.MarshalIndent(tool, "", "  ")
       fmt.Println(string(toolByte))
    }
    fmt.Println("-------------------------------------------------------")

    fmt.Println("\n所有 MCP 服务器的工具信息已打印完毕!")
}

代码的逻辑非常清晰:

  1. 通过 context.WithTimeout 设置一个操作超时,这是一个 Go 编程的好习惯。

  2. clients.InitByConfFile 会读取 test.json 文件,并根据里面的定义加载所有的 MCP 服务器配置。

  3. clients.RegisterMCPClient 是关键一步,它会根据配置:

    • 如果配置了 command (例如 docker),它会尝试启动相应的进程或 Docker 容器
    • 如果配置了 url,它会尝试连接到该 URL。 成功后,所有的 MCP 客户端都会被注册到内部管理器中。
  4. 最后,你可以通过 clients.GetMCPClient("客户端名称") 来获取任何一个已注册的 MCP 客户端实例,并访问其 Tools 字段,获取该 MCP 服务器所提供的所有工具信息。

这个新功能带来的好处

  • 极高的灵活性:无论是 Docker 容器还是通过 URL 暴露的服务,都能通过统一的配置进行管理。
  • 简化部署与维护:不再需要编写复杂的脚本来启动和连接不同的服务,只需维护一个简单的 JSON 配置文件。
  • 提高可移植性:项目在不同环境中部署时,只需修改配置文件,而无需改动代码。
  • 更清晰的服务管理:通过名称就能获取到对应的 MCP 客户端,代码逻辑更清晰。

强烈推荐 mcp-client-go

如果你在 Go 语言项目中需要与多个 MCP 服务器进行交互,或者希望以一种更优雅、更灵活的方式管理你的微服务依赖,那么我强烈推荐你尝试一下 mcp-client-go

它不仅仅是一个客户端库,更是一个帮助你构建健壮、可维护、易于扩展的微服务应用的利器。

快速开始

  1. 安装库

    Bash

    go 复制代码
    go get github.com/yincongcyincong/mcp-client-go
  2. 创建 test.json 配置文件(参考上述示例)。

  3. 编写 Go 代码(参考上述示例)。

  4. 运行

    Bash

    go 复制代码
    go run your_main_file.go

    (请确保你根据 test.json 的配置,预先启动了 Playwright 和 Amap 的 MCP 服务器,或者 Docker 环境已就绪。)

项目地址: github.com/yincongcyin...

希望这篇文章能帮助大家了解 mcp-client-go 的这个强大新功能。如果你有任何疑问或者使用心得,欢迎在评论区留言交流!👍


相关推荐
Linux内核拾遗2 小时前
人人都在聊 MCP,它到底解决了什么?
aigc·ai编程·mcp
谷哥的小弟4 小时前
SQLite MCP服务器安装以及客户端连接配置
服务器·数据库·人工智能·sqlite·大模型·源码·mcp
tyw155 小时前
解决 Trae MySQL MCP 连接失败(Fail to start)
mcp·trae·fail to start·mysql mcp·mcp兼容
谷哥的小弟5 小时前
File System MCP服务器安装以及客户端连接配置
服务器·人工智能·大模型·file system·mcp·ai项目
啊湘1 天前
vscode 使用 github (适用CURSOR等使用)
ide·vscode·github·cursor·mcp
小小呱呱蛙1 天前
Claude Code 自下而上分析(Slash/Sub Agents/Skills/MCP)带来的启发
agent·claude·mcp
callJJ1 天前
MCP配置与实战:深入理解现代开发工具链
javascript·node.js·vue·mcp·windsurf
谷哥的小弟1 天前
Brave Search MCP服务器安装以及客户端连接配置
搜索引擎·大模型·spring ai·mcp·brave search
太空眼睛1 天前
【MCP】使用SpringBoot基于Streamable-HTTP构建MCP-Client
spring boot·ai·llm·sse·mcp·mcp-client·streamable
kaizq2 天前
AI-MCP-SQLite-SSE本地服务及CherryStudio便捷应用
python·sqlite·llm·sse·mcp·cherry studio·fastmcp