|
|
@@ -33,6 +33,15 @@ func registerFileTools(s *server.MCPServer) {
|
|
|
handleFileRead,
|
|
|
)
|
|
|
|
|
|
+ s.AddTool(
|
|
|
+ mcp.NewTool("storage_file_write",
|
|
|
+ mcp.WithDescription("将文本内容写入文件存储(MinIO)。可用于保存分析结果、生成报告等。文件路径会自动添加 /uploads/ 前缀。"),
|
|
|
+ mcp.WithString("path", mcp.Required(), mcp.Description("文件路径,格式为 /uploads/{filename}(如 /uploads/report.csv)")),
|
|
|
+ mcp.WithString("content", mcp.Required(), mcp.Description("要写入的文本内容")),
|
|
|
+ ),
|
|
|
+ handleFileWrite,
|
|
|
+ )
|
|
|
+
|
|
|
s.AddTool(
|
|
|
mcp.NewTool("storage_file_list",
|
|
|
mcp.WithDescription("列出当前会话中用户上传的所有文件,返回文件名、路径、大小等信息。"),
|
|
|
@@ -75,3 +84,32 @@ func handleFileList(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallTool
|
|
|
|
|
|
return helper.JSONResult(files), nil
|
|
|
}
|
|
|
+
|
|
|
+func handleFileWrite(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
|
|
+ path, err := req.RequireString("path")
|
|
|
+ if err != nil {
|
|
|
+ return helper.ParamError("path"), nil
|
|
|
+ }
|
|
|
+ content, err := req.RequireString("content")
|
|
|
+ if err != nil {
|
|
|
+ return helper.ParamError("content"), nil
|
|
|
+ }
|
|
|
+
|
|
|
+ if mcpFileStore == nil {
|
|
|
+ return helper.ServiceError("文件存储", fmt.Errorf("未初始化")), nil
|
|
|
+ }
|
|
|
+
|
|
|
+ // 写入文件(userId 和 sessionId 使用固定值,MCP 模式下无用户上下文)
|
|
|
+ record, err := mcpFileStore.WriteFile("mcp-agent", "mcp-session", path, content)
|
|
|
+ if err != nil {
|
|
|
+ return helper.ServiceError("写入文件", err), nil
|
|
|
+ }
|
|
|
+
|
|
|
+ return helper.JSONResult(map[string]any{
|
|
|
+ "message": "文件写入成功",
|
|
|
+ "path": record.Path,
|
|
|
+ "fileName": record.FileName,
|
|
|
+ "size": record.Size,
|
|
|
+ "key": record.Key,
|
|
|
+ }), nil
|
|
|
+}
|