diff --git a/application.go b/application.go index a32fafa..29248c6 100644 --- a/application.go +++ b/application.go @@ -502,7 +502,24 @@ func (app *Application) saveConversationHistory() { } func (app *Application) generateProgressSummary(funcName string, args string) string { - return fmt.Sprintf("Calling %s...", funcName) + if args == "" || args == "{}" { + return fmt.Sprintf("%s()", funcName) + } + var m map[string]any + if err := json.Unmarshal([]byte(args), &m); err != nil || len(m) == 0 { + return fmt.Sprintf("%s()", funcName) + } + // json.Marshal sorts map keys for consistent output + compact, err := json.Marshal(m) + if err != nil { + return fmt.Sprintf("%s()", funcName) + } + argsStr := string(compact) + runes := []rune(argsStr) + if len(runes) > 50 { + argsStr = string(runes[:47]) + "..." + } + return fmt.Sprintf("%s %s", funcName, argsStr) } // clearProgress clears the progress line from stderr if one is currently displayed @@ -620,7 +637,8 @@ func (app *Application) handleToolCalls(toolCalls []openai.ToolCall, opts CLIOpt // handleMCPToolCall handles tool calls for MCP servers func (app *Application) handleMCPToolCall(toolCall openai.ToolCall, opts CLIOptions) { - app.showToolProgress(toolCall.Function.Name, toolCall.Function.Arguments) + displayName := app.mcpManager.GetToolDisplayName(toolCall.Function.Name) + app.showToolProgress(displayName, toolCall.Function.Arguments) // Parse the arguments var arguments any @@ -648,7 +666,7 @@ func (app *Application) handleMCPToolCall(toolCall openai.ToolCall, opts CLIOpti // Format arguments for display argsDisplay := formatArgsForDisplay(arguments) - displayCommand := fmt.Sprintf("# %s(%s)", toolCall.Function.Name, argsDisplay) + displayCommand := fmt.Sprintf("# %s(%s)", displayName, argsDisplay) app.appendToolResult(toolCall, result, displayCommand, result) } diff --git a/mcp.go b/mcp.go index b51f634..eeb9e79 100644 --- a/mcp.go +++ b/mcp.go @@ -514,6 +514,20 @@ func (m *MCPManager) GetAllTools() []openai.Tool { return allTools } +// GetToolDisplayName returns a human-friendly display name for an MCP tool, +// stripping the internal "mcp__" prefix and using "server:tool" format. +func (m *MCPManager) GetToolDisplayName(toolName string) string { + m.mu.RLock() + defer m.mu.RUnlock() + for serverName := range m.clients { + prefix := fmt.Sprintf("mcp_%s_", serverName) + if strings.HasPrefix(toolName, prefix) { + return fmt.Sprintf("%s:%s", serverName, strings.TrimPrefix(toolName, prefix)) + } + } + return toolName +} + // CallTool calls a tool on the appropriate MCP server func (m *MCPManager) CallTool(toolName string, arguments interface{}, askLevel string) (string, error) { m.mu.RLock()