Feature Request: Support MCP tools/list_changed notification for dynamic tool discovery
Summary
Claude Code does not currently support the MCP tools/list_changed notification, which means it only sees tools that exist at the moment the MCP server connection is established. Tools registered dynamically after connection are invisible to Claude Code.
Problem
When using MCP servers that dynamically discover and register tools (e.g., from agent registries, service discovery, plugin systems, etc.), there's a race condition:
- Claude Code spawns the MCP server (stdio transport)
- MCP server initializes and connects to backend services
- Claude Code queries available tools - list is empty or incomplete
- Backend services register and MCP server sends
tools/list_changednotification - Claude Code ignores the notification - tools remain invisible
- User sees no tools or only partial tools
Expected Behavior
Claude Code should listen for tools/list_changed notifications (per MCP spec) and refresh its tool list when received. This would enable proper support for MCP servers with dynamic tool registration.
Current Workaround
The only workaround requires being the MCP server author and implementing initialization delays to wait for tools to register before completing startup. This is:
- Not always possible - users of third-party MCP servers cannot modify them
- Fragile - hardcoded delays may be too short or unnecessarily long
- Adds latency - every connection is delayed even when tools register quickly
Users who don't control the MCP server source have no workaround available.
Impact
This limitation affects any MCP server that:
- Discovers tools from external services
- Loads plugins dynamically
- Connects to agent registries
- Has tools that depend on async initialization
Environment
- Claude Code CLI
- MCP servers using stdio transport with dynamic tool registration
- Tested with FastMCP-based servers
References
- MCP Specification:
tools/list_changednotification - https://modelcontextprotocol.io/docs/concepts/tools#tool-discovery-and-updates
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗