get_mcp_status() drops MCP tool `title` — expose it in the mcp_status response

Status Open
Maintainer reply None cached
Activity 0 comments · opened Aug 7, 2026

Summary

get_mcp_status() (the mcp_status control response) returns each tool as {name, description?, annotations:{readOnly?, destructive?, openWorld?}} and omits the tool's human-readable title, even when the MCP server advertises one. There is currently no way for a client to read a tool's title from server status.

Request

Include the tool title in the mcp_status per-tool payload — e.g. inside annotations (matching the field the CLI already accepts on input) or as a top-level title, following the MCP precedence for tools (annotations.title → top-level titlename).

Current behavior

For a server that advertises titles, every tool comes back title-less:

// get_mcp_status() -> mcpServers[].tools[]
{ "name": "example-tool", "annotations": {} }
{ "name": "read-thing",   "annotations": { "readOnly": true } }
{ "name": "delete-thing", "annotations": { "destructive": true } }

Union of tool keys across all tools: ["annotations", "name"]. Union of annotation keys: ["readOnly", "destructive"].

Expected behavior

The title the server advertised is present, e.g.:

{ "name": "example-tool", "annotations": { "title": "Example Tool" } }

Notes

  • The MCP server sends the title on the standard tools/list wire; it is dropped in the mcp_status response projection.
  • Companion type change on the SDK side: add title to McpToolAnnotations in claude-agent-sdk-python (src/claude_agent_sdk/types.py) once the value is emitted.

View original on GitHub ↗