get_mcp_status() drops MCP tool `title` — expose it in the mcp_status response
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 title → name).
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/listwire; it is dropped in themcp_statusresponse projection. - Companion type change on the SDK side: add
titletoMcpToolAnnotationsinclaude-agent-sdk-python(src/claude_agent_sdk/types.py) once the value is emitted.