Skip to content

Support overriding tool annotations (title) in aggregation config #4282

@jerm-dro

Description

@jerm-dro

Summary

When using manual conflict resolution with tool overrides, the ToolOverride struct supports overriding name and description, but not annotations.title. MCP clients (e.g., Claude Desktop) display the title annotation as the primary label for tools, so overridden tools still show the original backend's title.

Problem

In a vMCP aggregating 8 backends that all run the same Slack MCP server image (for demo purposes), each backend's tools are renamed via overrides to give them unique, domain-specific identities:

- workload: jira
  overrides:
    channels_list:
      name: jira_list_projects
      description: "List Jira projects and boards"

The tool name becomes jira_list_projects and the description becomes "List Jira projects and boards", but the UI still displays "List Channels" as the tool's label — because that's the annotations.title from the original Slack MCP server, which passes through unchanged.

Expected behavior

ToolOverride should support a title field (or a broader annotations override) so that the human-readable label displayed by MCP clients can be customized:

- workload: jira
  overrides:
    channels_list:
      name: jira_list_projects      
      description: "List Jira projects and boards"
      annotations:
        # override only the title annotation - all others pass through.
        title: "List Jira Projects"        

Current ToolOverride struct

type ToolOverride struct {
    Name        string `json:"name,omitempty" yaml:"name,omitempty"`
    Description string `json:"description,omitempty" yaml:"description,omitempty"`
}

Suggested change

Add a Title field to ToolOverride and apply it to Annotations.Title during processBackendTools / resolveToolWithOverride.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestvmcpVirtual MCP Server related issues

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions