From 9654218e61ff58326e4524f34086822e6d7c2864 Mon Sep 17 00:00:00 2001 From: Amolith Date: Sun, 21 Sep 2025 16:17:50 -0600 Subject: [PATCH] feat(permissions): pretty-print MCP JSON Add pretty-printed JSON parameters to MCP tool permission dialogs so users can read more of the content. Co-Authored-By: Crush --- internal/llm/agent/mcp-tools.go | 2 +- .../dialogs/permissions/permissions.go | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/internal/llm/agent/mcp-tools.go b/internal/llm/agent/mcp-tools.go index 1043ca3b9820e72096a0aafe7cdb7868c8d29720..4a4435dccbdb48ea6d2d64bf7af9f257e8e3730b 100644 --- a/internal/llm/agent/mcp-tools.go +++ b/internal/llm/agent/mcp-tools.go @@ -176,7 +176,7 @@ func (b *McpTool) Run(ctx context.Context, params tools.ToolCall) (tools.ToolRes if sessionID == "" || messageID == "" { return tools.ToolResponse{}, fmt.Errorf("session ID and message ID are required for creating a new file") } - permissionDescription := fmt.Sprintf("execute %s with the following parameters: %s", b.Info().Name, params.Input) + permissionDescription := fmt.Sprintf("execute %s with the following parameters:", b.Info().Name) p := b.permissions.Request( permission.CreatePermissionRequest{ SessionID: sessionID, diff --git a/internal/tui/components/dialogs/permissions/permissions.go b/internal/tui/components/dialogs/permissions/permissions.go index 2633c0a2f1a50f78adf010214680c157f302073b..9e0a6b05d7385c354f8faba3110b1c0951f9a97d 100644 --- a/internal/tui/components/dialogs/permissions/permissions.go +++ b/internal/tui/components/dialogs/permissions/permissions.go @@ -1,6 +1,7 @@ package permissions import ( + "encoding/json" "fmt" "strings" @@ -614,6 +615,35 @@ func (p *permissionDialogCmp) generateDefaultContent() string { content := p.permission.Description + // Add pretty-printed JSON parameters for MCP tools + if p.permission.Params != nil { + var paramStr string + + // Ensure params is a string + if str, ok := p.permission.Params.(string); ok { + paramStr = str + } else { + paramStr = fmt.Sprintf("%v", p.permission.Params) + } + + // Try to parse as JSON for pretty printing + var parsed any + if err := json.Unmarshal([]byte(paramStr), &parsed); err == nil { + if b, err := json.MarshalIndent(parsed, "", " "); err == nil { + if content != "" { + content += "\n\n" + } + content += string(b) + } + } else { + // Not JSON, show as-is + if content != "" { + content += "\n\n" + } + content += paramStr + } + } + content = strings.TrimSpace(content) content = "\n" + content + "\n" lines := strings.Split(content, "\n")