package system import ( "context" "os" "path/filepath" "text/template" "github.com/go-kratos/kratos/v2/log" "kra/internal/conf" "kra/pkg/utils" "kra/pkg/utils/autocode" ) // AutoMcpTool MCP工具请求 type AutoMcpTool struct { Name string `json:"name"` // 工具名称 Description string `json:"description"` // 工具描述 Parameters string `json:"parameters"` // 参数定义 } // AutoCodeMCPUsecase MCP用例 type AutoCodeMCPUsecase struct { config *conf.AutoCodeMCPConfig log *log.Helper } // NewAutoCodeMCPUsecase 创建MCP用例 func NewAutoCodeMCPUsecase(config *conf.AutoCodeMCPConfig, logger log.Logger) *AutoCodeMCPUsecase { return &AutoCodeMCPUsecase{ config: config, log: log.NewHelper(logger), } } // CreateMcp 创建MCP工具文件 func (uc *AutoCodeMCPUsecase) CreateMcp(ctx context.Context, info AutoMcpTool) (toolFilePath string, err error) { mcpTemplatePath := filepath.Join(uc.config.Root, uc.config.Server, "resource", "mcp", "tools.tpl") mcpToolPath := filepath.Join(uc.config.Root, uc.config.Server, "mcp") var files *template.Template templateName := filepath.Base(mcpTemplatePath) files, err = template.New(templateName).Funcs(autocode.GetTemplateFuncMap()).ParseFiles(mcpTemplatePath) if err != nil { return "", err } fileName := utils.HumpToUnderscore(info.Name) toolFilePath = filepath.Join(mcpToolPath, fileName+".go") f, err := os.Create(toolFilePath) if err != nil { return "", err } defer f.Close() // 执行模板,将内容写入文件 err = files.Execute(f, info) if err != nil { return "", err } return toolFilePath, nil }