| 79 | } |
| 80 | |
| 81 | func (ts *ToolSet) WriteFile(_ context.Context, |
| 82 | _ *mcp.CallToolRequest, args msi.WriteFileParams, |
| 83 | ) (*mcp.CallToolResult, *msi.WriteFileResult, error) { |
| 84 | if ts.inst == nil { |
| 85 | return nil, nil, errors.New("instance not registered") |
| 86 | } |
| 87 | guestPath, err := ts.TranslateHostPath(args.Path) |
| 88 | if err != nil { |
| 89 | return nil, nil, err |
| 90 | } |
| 91 | dir := filepath.Dir(guestPath) |
| 92 | err = ts.sftp.MkdirAll(dir) |
| 93 | if err != nil { |
| 94 | return nil, nil, err |
| 95 | } |
| 96 | f, err := ts.sftp.Create(guestPath) |
| 97 | if err != nil { |
| 98 | return nil, nil, err |
| 99 | } |
| 100 | defer f.Close() |
| 101 | _, err = f.Write([]byte(args.Content)) |
| 102 | if err != nil { |
| 103 | return nil, nil, err |
| 104 | } |
| 105 | res := &msi.WriteFileResult{} |
| 106 | return &mcp.CallToolResult{ |
| 107 | // Gemini: |
| 108 | // A success message, e.g., `Successfully overwrote file: /path/to/your/file.txt` |
| 109 | // or `Successfully created and wrote to new file: /path/to/new/file.txt.` |
| 110 | StructuredContent: res, |
| 111 | }, res, nil |
| 112 | } |
| 113 | |
| 114 | func (ts *ToolSet) Glob(_ context.Context, |
| 115 | _ *mcp.CallToolRequest, args msi.GlobParams, |