From f7d6feed809e0baff6c782ab2a99bd97746c35fc Mon Sep 17 00:00:00 2001 From: camilleislasse Date: Sat, 15 Nov 2025 08:28:02 +0100 Subject: [PATCH] Make logger nullable in Transport constructors - BaseTransport: Accept ?LoggerInterface parameter and convert null to NullLogger - StdioTransport: Change logger parameter to nullable - StreamableHttpTransport: Change logger parameter to nullable - InMemoryTransport: Fix missing parent::__construct() call and add logging --- src/Server/Transport/BaseTransport.php | 9 ++++++--- src/Server/Transport/InMemoryTransport.php | 6 ++++++ src/Server/Transport/StdioTransport.php | 3 +-- src/Server/Transport/StreamableHttpTransport.php | 3 +-- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/Server/Transport/BaseTransport.php b/src/Server/Transport/BaseTransport.php index c2938b52..e5e495e4 100644 --- a/src/Server/Transport/BaseTransport.php +++ b/src/Server/Transport/BaseTransport.php @@ -14,6 +14,7 @@ use Mcp\Schema\JsonRpc\Error; use Mcp\Schema\JsonRpc\Response; use Psr\Log\LoggerInterface; +use Psr\Log\NullLogger; use Symfony\Component\Uid\Uuid; /** @@ -38,9 +39,11 @@ abstract class BaseTransport */ protected ?\Fiber $sessionFiber = null; - public function __construct( - protected readonly LoggerInterface $logger, - ) { + protected LoggerInterface $logger; + + public function __construct(?LoggerInterface $logger = null) + { + $this->logger = $logger ?? new NullLogger(); } public function initialize(): void diff --git a/src/Server/Transport/InMemoryTransport.php b/src/Server/Transport/InMemoryTransport.php index a9ffca97..d567d096 100644 --- a/src/Server/Transport/InMemoryTransport.php +++ b/src/Server/Transport/InMemoryTransport.php @@ -11,6 +11,7 @@ namespace Mcp\Server\Transport; +use Psr\Log\LoggerInterface; use Symfony\Component\Uid\Uuid; /** @@ -27,7 +28,9 @@ class InMemoryTransport extends BaseTransport implements TransportInterface */ public function __construct( private readonly array $messages = [], + ?LoggerInterface $logger = null, ) { + parent::__construct($logger); } public function initialize(): void @@ -51,10 +54,13 @@ public function send(string $data, array $context): void */ public function listen(): mixed { + $this->logger->info('InMemoryTransport is processing messages...'); + foreach ($this->messages as $message) { $this->handleMessage($message, $this->sessionId); } + $this->logger->info('InMemoryTransport finished processing.'); $this->handleSessionEnd($this->sessionId); $this->sessionId = null; diff --git a/src/Server/Transport/StdioTransport.php b/src/Server/Transport/StdioTransport.php index 5f0afbfb..cb994b94 100644 --- a/src/Server/Transport/StdioTransport.php +++ b/src/Server/Transport/StdioTransport.php @@ -13,7 +13,6 @@ use Mcp\Schema\JsonRpc\Error; use Psr\Log\LoggerInterface; -use Psr\Log\NullLogger; /** * @implements TransportInterface @@ -29,7 +28,7 @@ class StdioTransport extends BaseTransport implements TransportInterface public function __construct( private $input = \STDIN, private $output = \STDOUT, - LoggerInterface $logger = new NullLogger(), + ?LoggerInterface $logger = null, ) { parent::__construct($logger); } diff --git a/src/Server/Transport/StreamableHttpTransport.php b/src/Server/Transport/StreamableHttpTransport.php index 28ca547e..dcac42dd 100644 --- a/src/Server/Transport/StreamableHttpTransport.php +++ b/src/Server/Transport/StreamableHttpTransport.php @@ -18,7 +18,6 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\StreamFactoryInterface; use Psr\Log\LoggerInterface; -use Psr\Log\NullLogger; use Symfony\Component\Uid\Uuid; /** @@ -45,7 +44,7 @@ public function __construct( ?ResponseFactoryInterface $responseFactory = null, ?StreamFactoryInterface $streamFactory = null, array $corsHeaders = [], - LoggerInterface $logger = new NullLogger(), + ?LoggerInterface $logger = null, ) { parent::__construct($logger); $sessionIdString = $this->request->getHeaderLine('Mcp-Session-Id');