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:

相关推荐
懂点Tech2 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
云和数据.ChenGuang2 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
美狐美颜SDK开放平台3 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq04243 小时前
C++小案例 - 日志实战
开发语言·c++
星夜离尘564 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
码匠许师傅4 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
Cosolar5 小时前
不收费、不加水印、数据归你:我做了个开源的在线简历工具
后端·面试·前端框架
码匠许师傅5 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++
bkspiderx6 小时前
基于Socket的广播通信及C语言实现详解
c语言·开发语言·socket·广播·socket的广播通信
小王C语言6 小时前
Qt常用控件:输入类控件,单行/多行输入框、下拉框、(日期)微调框、旋钮、滑动条
开发语言·qt