项目简介
Taurus Pro HTTP是一个Go语言实现的高性能企业级HTTP服务框架,专门用于构建现代Web应用和API服务。它全面支持Model Context Protocol (MCP) 协议,旨在为大型语言模型(LLM)应用提供稳定、可扩展的上下文信息、功能调用及Prompt模板服务。
主要功能点
- MCP协议支持: 核心功能,允许LLM客户端通过JSON-RPC协议与服务器交互,请求资源、调用工具和获取Prompt模板。
- 多种传输协议: 支持Stdio、SSE(Server-Sent Events)和Streamable HTTP,适应不同部署场景和通信需求。
- 上下文管理: 支持有状态和无状态两种运行模式,灵活管理LLM会话上下文。
- 高性能HTTP服务: 提供标准化的请求/响应处理、灵活路由、WebSocket通信、JWT认证等,确保整体服务的高效稳定。
- 丰富的中间件: 内置CORS、恢复等中间件,并支持自定义,提升开发效率和安全性。
安装步骤
- 环境要求: 确保您的系统已安装Go 1.23.0或更高版本。
- 安装命令: 打开终端并执行以下命令:
go get github.com/stones-hub/taurus-pro-http - 依赖管理: 进入项目目录后,运行以下命令以管理依赖:
go mod tidy
MCP服务器配置 (面向MCP客户端)
MCP客户端需要通过启动命令来连接Taurus Pro MCP服务器。以下是一个MCP客户端配置Taurus Pro MCP服务器的JSON示例,以及其中参数的详细说明:
{ "server_name": "my-mcp-server", "command": "go", "args": [ "run", "main.go" // 假设您的MCP服务器入口文件是main.go,或者指定编译后的可执行文件路径 // 如果您的Taurus Pro MCP服务器运行在特定端口,可能需要在服务器启动代码中指定 ], "env": { "MCP_TRANSPORT": "streamable_http", // 可选: 指定MCP传输协议。可选值: stdio, sse, streamable_http (默认) "MCP_MODE": "stateless" // 可选: 指定MCP运行模式。可选值: stateful, stateless (默认) } }
参数注释:
- 'server_name': 您为MCP服务器定义的唯一名称,客户端将通过此名称识别服务器。
- 'command': 用于启动Taurus Pro MCP服务器的命令行程序。例如,'go'(如果您直接运行Go源码)或编译后的服务器可执行文件路径(如 './my_server')。
- 'args': 传递给 'command' 的命令行参数列表。这些参数将影响服务器的启动行为,例如指定配置文件路径、监听端口等。
- 'env': 环境变量,用于配置MCP服务器的行为。
- 'MCP_TRANSPORT': 指定MCP服务器使用的传输协议。
- 'stdio': 适合单机部署场景。
- 'sse': 单机和集群都适合,但在集群下需要维护有状态的会话。
- 'streamable_http': 适合集群部署场景(默认值)。
- 'MCP_MODE': 指定MCP服务器的会话管理模式。
- 'stateful': 服务器会保存LLM会话上下文。
- 'stateless': 服务器不会保存LLM会话上下文(默认值)。
- 'MCP_TRANSPORT': 指定MCP服务器使用的传输协议。
重要提示: 如果选择 'stdio' 以外的传输协议 (如 'sse' 或 'streamable_http'),Taurus Pro MCP服务器需要一个HTTP服务器实例来提供服务。您需要确保启动的服务器实例 ('command' 和 'args' 指定的程序) 已经集成了 'taurus-pro-http' 框架并正确创建了 'mcp.New' 实例,并且该HTTP服务器正在监听客户端期望连接的端口。
基本使用方法
以下是一个在Taurus Pro HTTP框架中创建并运行MCP服务器的简单示例:
package main import ( "context" "encoding/json" "log" "time" "github.com/stones-hub/taurus-pro-http/pkg/mcp" "github.com/stones-hub/taurus-pro-http/pkg/server" // 导入HTTP服务器包 "github.com/ThinkInAIXYZ/go-mcp/protocol" // 导入 go-mcp 协议定义,用于定义工具、资源等 mcp_server "github.com/ThinkInAIXYZ/go-mcp/server" // 导入 go-mcp server包,用于注册处理器 ) func main() { // 1. 创建Taurus Pro HTTP服务器实例 (用于托管MCP HTTP/SSE端点) httpSrv := server.New(server.Config{ Addr: ":8080", // MCP服务将通过此HTTP服务器端口暴露 // 根据需要配置其他HTTP服务器参数,如超时时间等 ReadTimeout: 60 * time.Second, WriteTimeout: 60 * time.Second, IdleTimeout: 300 * time.Second, }) // 2. 创建MCP服务器实例 // 这里我们配置为使用 Streamable HTTP 传输协议和无状态模式 mcpServer, cleanup, err := mcp.New( mcp.WithName("my-mcp-server"), mcp.WithVersion("1.0.0"), mcp.WithTransport(mcp.TransportStreamableHTTP), // 选择传输协议 mcp.WithMode(mcp.ModeStateless), // 选择会话管理模式 mcp.WithHttpServer(httpSrv), // 将HTTP服务器传递给MCP服务器,使其能注册HTTP路由 ) if err != nil { log.Fatalf("创建MCP服务器失败: %v", err) } defer cleanup() // 确保MCP服务器在程序退出时正确关闭 // 3. 注册MCP工具 (示例:注册一个获取当前时间的工具) mcpServer.RegisterTool(&protocol.Tool{ Name: "currentTime", Description: "获取当前的UTC时间", Parameters: '{}', // 工具参数定义为JSON Schema,这里表示无参数 }, func(ctx *protocol.ToolContext, args json.RawMessage) (json.RawMessage, error) { // 工具被LLM调用时将执行此函数 log.Printf("MCP Tool 'currentTime' 被调用,参数: %s", string(args)) return json.Marshal(map[string]string{"time": time.Now().UTC().String()}), nil }) // 4. 注册MCP资源 (示例:注册一个简单的配置资源) mcpServer.RegisterResource(&protocol.Resource{ Name: "config", Description: "应用程序配置信息", Schema: '{"type": "object", "properties": {"appName": {"type": "string"}}}', }, func(ctx *protocol.ResourceContext, id string, args json.RawMessage) (json.RawMessage, error) { // 资源被LLM客户端请求时将执行此函数 log.Printf("MCP Resource 'config' 被请求,ID: %s, 参数: %s", id, string(args)) return json.Marshal(map[string]string{"appName": "My LLM App", "version": "1.0"}), nil }) // 5. 启动Taurus Pro HTTP服务器,MCP服务将随之启动并监听8080端口 errChan := make(chan error, 1) httpSrv.Start(errChan) log.Printf("🚀 Taurus Pro HTTP & MCP 服务器已启动,监听地址: %s", httpSrv.GetConfig().Addr) // 等待服务器运行或发生错误 select { case err := <-errChan: log.Fatalf("服务器启动失败: %v", err) } }
信息
分类
AI与计算