@@ -22,9 +22,7 @@ $server = Server::builder()
2222
2323$transport = new SomeTransport();
2424
25- $server->connect($transport);
26-
27- $transport->listen(); // For STDIO, or handle response for HTTP
25+ $result = $server->run($transport); // Blocks for STDIO, returns a response for HTTP
2826```
2927
3028## STDIO Transport
@@ -70,9 +68,9 @@ $server = Server::builder()
7068
7169$transport = new StdioTransport();
7270
73- $server->connect ($transport);
71+ $status = $ server->run ($transport);
7472
75- $transport->listen();
73+ exit($status); // 0 on clean shutdown, non-zero if STDIN errored
7674```
7775
7876### Client Configuration
@@ -138,24 +136,20 @@ use Nyholm\Psr7\Factory\Psr17Factory;
138136use Nyholm\Psr7Server\ServerRequestCreator;
139137use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
140138
141- // Create PSR-7 request from globals
142139$psr17Factory = new Psr17Factory();
143140$creator = new ServerRequestCreator($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory);
144141$request = $creator->fromGlobals();
145142
146- // Build server
147143$server = Server::builder()
148144 ->setServerInfo('HTTP Server', '1.0.0')
149145 ->setDiscovery(__DIR__, ['.'])
150146 ->setSession(new FileSessionStore(__DIR__ . '/sessions')) // HTTP needs persistent sessions
151147 ->build();
152148
153- // Process request and get response
154149$transport = new StreamableHttpTransport($request, $psr17Factory, $psr17Factory);
155- $server->connect($transport);
156- $response = $transport->listen();
157150
158- // Emit response
151+ $response = $server->run($transport);
152+
159153(new SapiEmitter())->emit($response);
160154```
161155
@@ -187,7 +181,7 @@ use Mcp\Server\Transport\StreamableHttpTransport;
187181class McpController
188182{
189183 #[Route('/mcp', name: 'mcp_endpoint']
190- public function handle(Request $request, Server $mcpServer ): Response
184+ public function handle(Request $request, Server $server ): Response
191185 {
192186 // Create PSR-7 factories
193187 $psr17Factory = new Psr17Factory();
@@ -199,8 +193,7 @@ class McpController
199193
200194 // Process with MCP
201195 $transport = new StreamableHttpTransport($psrRequest, $psr17Factory, $psr17Factory);
202- $mcpServer->connect($transport);
203- $psrResponse = $transport->listen();
196+ $psrResponse = $server->run($transport);
204197
205198 // Convert PSR-7 response back to Symfony
206199 return $httpFoundationFactory->createResponse($psrResponse);
@@ -230,17 +223,16 @@ use Nyholm\Psr7\Factory\Psr17Factory;
230223
231224class McpController
232225{
233- public function handle(ServerRequestInterface $request, Server $mcpServer ): ResponseInterface
226+ public function handle(ServerRequestInterface $request, Server $server ): ResponseInterface
234227 {
235228 $psr17Factory = new Psr17Factory();
236229
237- // Create and connect the MCP HTTP transport
230+ // Create the MCP HTTP transport
238231 $transport = new StreamableHttpTransport($request, $psr17Factory, $psr17Factory);
239- $mcpServer->connect($transport);
240232
241233 // Process MCP request and return PSR-7 response
242234 // Laravel automatically handles PSR-7 responses
243- return $transport->listen( );
235+ return $server->run($transport );
244236 }
245237}
246238
@@ -255,33 +247,26 @@ Slim Framework works natively with PSR-7.
255247Create a route handler using Slim's built-in factories and container:
256248
257249``` php
258- use Psr\Container\ContainerInterface;
259250use Slim\Factory\AppFactory;
260251use Slim\Psr7\Factory\ResponseFactory;
261252use Slim\Psr7\Factory\StreamFactory;
262253use Mcp\Server;
263254use Mcp\Server\Transport\StreamableHttpTransport;
264255
265256$app = AppFactory::create();
266- $container = $app->getContainer();
267257
268- $container->set('mcpServer ', function (ContainerInterface $container ) {
269- return Server::builder()
258+ $app->any('/mcp ', function ($request, $response ) {
259+ $server = Server::builder()
270260 ->setServerInfo('My MCP Server', '1.0.0')
271261 ->setDiscovery(__DIR__, ['.'])
272262 ->build();
273- });
274-
275- $app->any('/mcp', function ($request, $response) {
276- $mcpServer = $this->get('mcpServer');
277263
278264 $responseFactory = new ResponseFactory();
279265 $streamFactory = new StreamFactory();
280266
281267 $transport = new StreamableHttpTransport($request, $responseFactory, $streamFactory);
282- $mcpServer->connect($transport);
283268
284- return $transport->listen( );
269+ return $server->run($transport );
285270});
286271```
287272
0 commit comments