| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- package system
- import (
- "fmt"
- "github.com/flipped-aurora/gin-vue-admin/server/global"
- "github.com/flipped-aurora/gin-vue-admin/server/mcp/client"
- "github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
- "github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
- "github.com/gin-gonic/gin"
- "github.com/mark3labs/mcp-go/mcp"
- )
- // Create
- // @Tags mcp
- // @Summary 自动McpTool
- // @Security ApiKeyAuth
- // @accept application/json
- // @Produce application/json
- // @Param data body request.AutoMcpTool true "创建自动代码"
- // @Success 200 {string} string "{"success":true,"data":{},"msg":"创建成功"}"
- // @Router /autoCode/mcp [post]
- func (a *AutoCodeTemplateApi) MCP(c *gin.Context) {
- var info request.AutoMcpTool
- err := c.ShouldBindJSON(&info)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- toolFilePath, err := autoCodeTemplateService.CreateMcp(c.Request.Context(), info)
- if err != nil {
- response.FailWithMessage("创建失败", c)
- global.GVA_LOG.Error(err.Error())
- return
- }
- response.OkWithMessage("创建成功,MCP Tool路径:"+toolFilePath, c)
- }
- // Create
- // @Tags mcp
- // @Summary 自动McpTool
- // @Security ApiKeyAuth
- // @accept application/json
- // @Produce application/json
- // @Param data body request.AutoMcpTool true "创建自动代码"
- // @Success 200 {string} string "{"success":true,"data":{},"msg":"创建成功"}"
- // @Router /autoCode/mcpList [post]
- func (a *AutoCodeTemplateApi) MCPList(c *gin.Context) {
- baseUrl := fmt.Sprintf("http://127.0.0.1:%d%s", global.GVA_CONFIG.System.Addr, global.GVA_CONFIG.MCP.SSEPath)
- testClient, err := client.NewClient(baseUrl, "testClient", "v1.0.0", global.GVA_CONFIG.MCP.Name)
- defer testClient.Close()
- toolsRequest := mcp.ListToolsRequest{}
- list, err := testClient.ListTools(c.Request.Context(), toolsRequest)
- if err != nil {
- response.FailWithMessage("创建失败", c)
- global.GVA_LOG.Error(err.Error())
- return
- }
- mcpServerConfig := map[string]interface{}{
- "mcpServers": map[string]interface{}{
- global.GVA_CONFIG.MCP.Name: map[string]string{
- "url": baseUrl,
- },
- },
- }
- response.OkWithData(gin.H{
- "mcpServerConfig": mcpServerConfig,
- "list": list,
- }, c)
- }
- // Create
- // @Tags mcp
- // @Summary 测试McpTool
- // @Security ApiKeyAuth
- // @accept application/json
- // @Produce application/json
- // @Param data body object true "调用MCP Tool的参数"
- // @Success 200 {object} response.Response "{"success":true,"data":{},"msg":"测试成功"}"
- // @Router /autoCode/mcpTest [post]
- func (a *AutoCodeTemplateApi) MCPTest(c *gin.Context) {
- // 定义接口请求结构
- var testRequest struct {
- Name string `json:"name" binding:"required"` // 工具名称
- Arguments map[string]interface{} `json:"arguments" binding:"required"` // 工具参数
- }
- // 绑定JSON请求体
- if err := c.ShouldBindJSON(&testRequest); err != nil {
- response.FailWithMessage("参数解析失败:"+err.Error(), c)
- return
- }
- // 创建MCP客户端
- baseUrl := fmt.Sprintf("http://127.0.0.1:%d%s", global.GVA_CONFIG.System.Addr, global.GVA_CONFIG.MCP.SSEPath)
- testClient, err := client.NewClient(baseUrl, "testClient", "v1.0.0", global.GVA_CONFIG.MCP.Name)
- if err != nil {
- response.FailWithMessage("创建MCP客户端失败:"+err.Error(), c)
- return
- }
- defer testClient.Close()
- ctx := c.Request.Context()
- // 初始化MCP连接
- initRequest := mcp.InitializeRequest{}
- initRequest.Params.ProtocolVersion = mcp.LATEST_PROTOCOL_VERSION
- initRequest.Params.ClientInfo = mcp.Implementation{
- Name: "testClient",
- Version: "v1.0.0",
- }
- _, err = testClient.Initialize(ctx, initRequest)
- if err != nil {
- response.FailWithMessage("初始化MCP连接失败:"+err.Error(), c)
- return
- }
- // 构建工具调用请求
- request := mcp.CallToolRequest{}
- request.Params.Name = testRequest.Name
- request.Params.Arguments = testRequest.Arguments
- // 调用工具
- result, err := testClient.CallTool(ctx, request)
- if err != nil {
- response.FailWithMessage("工具调用失败:"+err.Error(), c)
- return
- }
- // 处理响应结果
- if len(result.Content) == 0 {
- response.FailWithMessage("工具未返回任何内容", c)
- return
- }
- // 返回结果
- response.OkWithData(result.Content, c)
- }
|