Go语言Stdio传输MCP Server示例【Cline、Roo Code】

Go语言 Stdio 传输 MCP Server 示例

AI 应用开发正处于加速发展阶段,新技术和新方法不断涌现。Model Context Protocol (MCP) 作为一个开放标准,正在改变 AI 应用与数据源和工具集成的方式。

Go-MCP 是一个 MCP 协议的 GO 实现,此 SDK 采用清晰的分层架构设计,确保代码模块化、可扩展性和可维护性。通过深入了解这一架构,开发者可以更好地利用 Go-MCP 的所有功能,甚至根据自己的需求进行定制和扩展。

https://github.com/ThinkInAIXYZ/go-mcp

Go-MCP 的架构可以抽象为三个主要层次:

  1. 传输层(Transport Layer):处理底层通信,支持不同的传输协议;
  2. 协议层(Protocol Layer):实现所有 MCP 协议数据结构定义;
  3. 用户层(User Layer):包括服务器和客户端实现,提供面向用户的 API。

这种分层设计使各层彼此解耦,允许独立演化和替换,同时保持整体功能一致性。

Jack码原理说明

Jack码是一种基于北京时间的编码方式,具体规则如下:

  1. 获取当前北京时间,格式为 yyyyMMddHHmm,如 202505050829,类型为 int64。
  2. 将该时间值加上常数 1314520
  3. 对结果进行 Base64 编码,得到最终的 Jack码。

示例:

  • 当前北京时间:2025年5月5日08时29分 → 202505050829

  • 加上常数:202505050829 + 1314520 = 202506865349

  • Base64 编码:MjAyNTA2ODY1MzQ5

(以上内容是作者为了练习开发一个自定义MCP服务临时想出的概念,仅供娱乐)

代码实现

复制代码
go mod init jack_stdio_server

main.go

go 复制代码
package main

import (
	"context"
	"encoding/base64"
	"fmt"
	"strconv"
	"time"

	"github.com/ThinkInAIXYZ/go-mcp/protocol"
	"github.com/ThinkInAIXYZ/go-mcp/server"
	"github.com/ThinkInAIXYZ/go-mcp/transport"
)

type JackRequest struct{}

func handleJackRequest(ctx context.Context, req *protocol.CallToolRequest) (*protocol.CallToolResult, error) {
	// 解析参数(如有)
	// 获取当前北京时间
	now := time.Now().In(time.FixedZone("CST", 8*3600))
	base := now.Format("200601021504")
	baseInt, err := strconv.Atoi(base)
	if err != nil {
		return nil, err
	}
	jackValue := baseInt + 1314520
	jackStr := strconv.Itoa(jackValue)
	jackCode := base64.StdEncoding.EncodeToString([]byte(jackStr))
	// 构造文本内容
	content := &protocol.TextContent{
		Type: "text",
		Text: fmt.Sprintf("Jack码: %s\n原始值: %s\n基准时间: %s", jackCode, jackStr, base),
	}
	// 返回结果,Content 字段为 Content 接口切片
	return &protocol.CallToolResult{
		Content: []protocol.Content{content},
		IsError: false,
	}, nil
}

func main() {
	transportServer := transport.NewStdioServerTransport()
	mcpServer, _ := server.NewServer(transportServer)
	tool, _ := protocol.NewTool("get_jack_code", "获取当前Jack码", JackRequest{})
	mcpServer.RegisterTool(tool, handleJackRequest)
	mcpServer.Run()
}

go.mod

复制代码
module jack_stdio_server

go 1.24.1

require github.com/ThinkInAIXYZ/go-mcp v0.2.2

require (
	github.com/google/uuid v1.6.0 // indirect
	github.com/orcaman/concurrent-map/v2 v2.0.1 // indirect
	github.com/tidwall/gjson v1.18.0 // indirect
	github.com/tidwall/match v1.1.1 // indirect
	github.com/tidwall/pretty v1.2.0 // indirect
	github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
)

然后编译

复制代码
go mod tidy
go build

Cline (Roo Code)配置mcp Json文件(Windows)

json 复制代码
{
  "mcpServers": {
    "jack_stdio": {
      "command": "./jack_stdio_server.exe",
      "args": [],
      "env": {},
      "disabled": false,
      "autoApprove": [],
      "alwaysAllow": []
    }
  }
}

如果mcp服务文件不在项目目录下的话请写完整路径,如C:\\mcpServer\\jack_stdio_server.exe

配置好后提问AI:

复制代码
当前的jack码是多少?

AI:

相关推荐
wudl55662 分钟前
python字符串处理与正则表达式--之八
开发语言·python·正则表达式
程序员爱钓鱼6 分钟前
Python编程实战 - 面向对象与进阶语法 - 继承与多态
后端·python·ipython
程序员爱钓鱼12 分钟前
Python编程实战 - 面向对象与进阶语法 - 封装与私有属性
后端·python·ipython
nvd1113 分钟前
python异步编程 -- 理解协程函数和协程对象
开发语言·python
IT_陈寒17 分钟前
Spring Boot 3.2性能翻倍!我仅用5个技巧就让接口响应时间从200ms降到50ms
前端·人工智能·后端
陌路2021 分钟前
Linux22 进程与线程以及内核级线程
linux·开发语言
风象南28 分钟前
Spring Boot 手撸一个自助报表系统
后端
donotshow30 分钟前
Spring Boot 整合 ShedLock 处理定时任务重复
java·后端
木土雨成小小测试员30 分钟前
简单创建一个flask项目
后端·python·flask
鄃鳕39 分钟前
pyside6 qt 事件循环
开发语言·qt