[FEATURE] Render MCP tool `title` field in /mcp tool list and tool call headers

Resolved 💬 4 comments Opened Mar 22, 2026 by ArnaudKleinveld Closed Apr 20, 2026

Problem

MCP tools registered with a title field (per the MCP spec) display their raw snake_case registration name in Claude Code's /mcp tool list and tool call headers, not the human-readable title.

For example, an MCP server registers a tool:

mcp.registerTool("create_case_study", {
  title: "Create case study",
  description: "Submit a case study...",
  inputSchema: { ... },
});

Expected in /mcp tool list: Create case study
Actual in /mcp tool list: create_case_study

The MCP SDK (v1.12+) supports title in registerTool and includes it in the tools/list response. Claude Code receives it but doesn't render it.

Why This Matters

  • MCP servers following the convention of short, descriptive tool names (like health, create_process, event_log) display as raw identifiers — functional but not polished
  • The GitHub MCP server's tools appear more readable because their names happen to be human-parseable, but this is incidental, not by design
  • Tool title exists in the MCP spec specifically for human-readable display — honoring it would improve UX for all MCP servers that set it

Proposed Behavior

  1. In /mcp tool list: show title if available, fall back to tool name if not
  2. In tool call headers during execution: show title (with raw name available in verbose mode)
  3. In permission prompts: use title for readability

This is a minimal, non-breaking change — tools without title continue to show the raw name.

Related

  • #33004 proposed a broader display customization system (colors, icons, per-tool overrides). This issue is narrower: just render the title field that MCP servers already provide.

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗