From cfb8a384916144d254ee240920fc02a85547161a Mon Sep 17 00:00:00 2001 From: camilleislasse Date: Sat, 20 Sep 2025 09:15:11 +0200 Subject: [PATCH] Add getRegistry() method to Server class for debugging access Expose the Registry through the Server class to enable debugging and monitoring tools like Symfony Web Profiler to access discovered capabilities (tools, resources, prompts, and resource templates). Changes: - Add ReferenceProviderInterface parameter to Server constructor - Add getRegistry() method to Server class - Update ServerBuilder to pass registry to Server - Update example to use new Server constructor signature - Add test coverage for getRegistry() method Resolves #74 --- examples/09-standalone-cli/index.php | 6 +++++- src/Server.php | 7 +++++++ src/Server/ServerBuilder.php | 1 + tests/ServerTest.php | 16 +++++++++++++++- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/examples/09-standalone-cli/index.php b/examples/09-standalone-cli/index.php index f7a67423..b8abd059 100644 --- a/examples/09-standalone-cli/index.php +++ b/examples/09-standalone-cli/index.php @@ -13,6 +13,7 @@ use Symfony\Component\Console as SymfonyConsole; use Symfony\Component\Console\Output\OutputInterface; +use Mcp\Capability\Registry; $debug = (bool) ($_SERVER['DEBUG'] ?? false); @@ -20,6 +21,9 @@ $output = new SymfonyConsole\Output\ConsoleOutput($debug ? OutputInterface::VERBOSITY_VERY_VERBOSE : OutputInterface::VERBOSITY_NORMAL); $logger = new SymfonyConsole\Logger\ConsoleLogger($output); +// Configure the registry (empty for this standalone example) +$registry = new Registry(); + // Configure the JsonRpcHandler and build the functionality $jsonRpcHandler = new Mcp\JsonRpc\Handler( Mcp\JsonRpc\MessageFactory::make(), @@ -28,7 +32,7 @@ ); // Set up the server -$sever = new Mcp\Server($jsonRpcHandler, $logger); +$sever = new Mcp\Server($jsonRpcHandler, $registry, $logger); // Create the transport layer using Stdio $transport = new Mcp\Server\Transport\StdioTransport(logger: $logger); diff --git a/src/Server.php b/src/Server.php index fc81382d..93837b43 100644 --- a/src/Server.php +++ b/src/Server.php @@ -11,6 +11,7 @@ namespace Mcp; +use Mcp\Capability\Registry\ReferenceProviderInterface; use Mcp\JsonRpc\Handler; use Mcp\Server\ServerBuilder; use Mcp\Server\TransportInterface; @@ -24,6 +25,7 @@ final class Server { public function __construct( private readonly Handler $jsonRpcHandler, + private readonly ReferenceProviderInterface $registry, private readonly LoggerInterface $logger = new NullLogger(), ) { } @@ -33,6 +35,11 @@ public static function make(): ServerBuilder return new ServerBuilder(); } + public function getRegistry(): ReferenceProviderInterface + { + return $this->registry; + } + public function connect(TransportInterface $transport): void { $transport->initialize(); diff --git a/src/Server/ServerBuilder.php b/src/Server/ServerBuilder.php index 4075cdba..352bc2f4 100644 --- a/src/Server/ServerBuilder.php +++ b/src/Server/ServerBuilder.php @@ -302,6 +302,7 @@ public function build(): Server promptGetter: $promptGetter, logger: $logger, ), + registry: $registry, logger: $logger, ); } diff --git a/tests/ServerTest.php b/tests/ServerTest.php index 19177112..fb5560ce 100644 --- a/tests/ServerTest.php +++ b/tests/ServerTest.php @@ -11,6 +11,7 @@ namespace Mcp\Tests; +use Mcp\Capability\Registry\ReferenceProviderInterface; use Mcp\JsonRpc\Handler; use Mcp\Server; use Mcp\Server\Transport\InMemoryTransport; @@ -41,7 +42,20 @@ public function testJsonExceptions() ->getMock(); $transport->expects($this->once())->method('send')->with('success'); - $server = new Server($handler, $logger); + $registry = $this->createMock(ReferenceProviderInterface::class); + + $server = new Server($handler, $registry, $logger); $server->connect($transport); } + + public function testGetRegistry() + { + $handler = $this->createMock(Handler::class); + $registry = $this->createMock(ReferenceProviderInterface::class); + $logger = new NullLogger(); + + $server = new Server($handler, $registry, $logger); + + $this->assertSame($registry, $server->getRegistry()); + } }