* fix(mcp): make tools/list resilient to an empty registry
tools/list reads from the SDK registry, which is populated once, when
mcp.server is built. Under a persistent runtime (e.g. FrankenPHP worker
mode) that single build can capture an empty registry and stay empty for
the whole process, so tools/list returns [] while tools/call keeps
working through the request-time Handler.
Add a ListHandler (tagged mcp.request_handler, so it precedes the SDK's
registry-backed list handlers) that loads API Platform elements into the
registry on first use and reads back through the shared registry, so
runtime registrations and registry decorators are preserved.
Refs #8370
* Apply suggestions from code review
Co-authored-by: Antoine Bluchet <soyuka@users.noreply.github.com>