1212namespace Mcp \Server \Transport ;
1313
1414use Http \Discovery \Psr17FactoryDiscovery ;
15+ use Mcp \Exception \InvalidArgumentException ;
1516use Mcp \Schema \JsonRpc \Error ;
17+ use Mcp \Server \Transport \Http \MiddlewareRequestHandler ;
1618use Psr \Http \Message \ResponseFactoryInterface ;
1719use Psr \Http \Message \ResponseInterface ;
1820use Psr \Http \Message \ServerRequestInterface ;
@@ -39,19 +41,19 @@ class StreamableHttpTransport extends BaseTransport
3941 private array $ corsHeaders ;
4042
4143 /** @var list<MiddlewareInterface> */
42- private array $ middlewares = [];
44+ private array $ middleware = [];
4345
4446 /**
45- * @param array<string, string> $corsHeaders
46- * @param iterable<MiddlewareInterface> $middlewares
47+ * @param array<string, string> $corsHeaders
48+ * @param iterable<MiddlewareInterface> $middleware
4749 */
4850 public function __construct (
4951 private ServerRequestInterface $ request ,
5052 ?ResponseFactoryInterface $ responseFactory = null ,
5153 ?StreamFactoryInterface $ streamFactory = null ,
5254 array $ corsHeaders = [],
5355 ?LoggerInterface $ logger = null ,
54- iterable $ middlewares = [],
56+ iterable $ middleware = [],
5557 ) {
5658 parent ::__construct ($ logger );
5759
@@ -65,11 +67,11 @@ public function __construct(
6567 'Access-Control-Expose-Headers ' => 'Mcp-Session-Id ' ,
6668 ], $ corsHeaders );
6769
68- foreach ($ middlewares as $ middleware ) {
69- if (!$ middleware instanceof MiddlewareInterface) {
70- throw new \ InvalidArgumentException ('Streamable HTTP middleware must implement Psr \\Http \\Server \\MiddlewareInterface. ' );
70+ foreach ($ middleware as $ m ) {
71+ if (!$ m instanceof MiddlewareInterface) {
72+ throw new InvalidArgumentException ('Streamable HTTP middleware must implement Psr \\Http \\Server \\MiddlewareInterface. ' );
7173 }
72- $ this ->middlewares [] = $ middleware ;
74+ $ this ->middleware [] = $ m ;
7375 }
7476 }
7577
@@ -289,32 +291,9 @@ private function createRequestHandler(): RequestHandlerInterface
289291 /**
290292 * @see self::handleRequest
291293 */
292- $ handler = new class (\Closure::fromCallable ([$ this , 'handleRequest ' ])) implements RequestHandlerInterface {
293- public function __construct (private \Closure $ handler )
294- {
295- }
296-
297- public function handle (ServerRequestInterface $ request ): ResponseInterface
298- {
299- return ($ this ->handler )($ request );
300- }
301- };
302-
303- foreach (array_reverse ($ this ->middlewares ) as $ middleware ) {
304- $ handler = new class ($ middleware , $ handler ) implements RequestHandlerInterface {
305- public function __construct (
306- private MiddlewareInterface $ middleware ,
307- private RequestHandlerInterface $ handler ,
308- ) {
309- }
310-
311- public function handle (ServerRequestInterface $ request ): ResponseInterface
312- {
313- return $ this ->middleware ->process ($ request , $ this ->handler );
314- }
315- };
316- }
317-
318- return $ handler ;
294+ return new MiddlewareRequestHandler (
295+ $ this ->middleware ,
296+ \Closure::fromCallable ([$ this , 'handleRequest ' ]),
297+ );
319298 }
320299}
0 commit comments