Skip to content

Commit f0a63bd

Browse files
committed
[McpBundle] Wire & configure services explicitly
1 parent d022fa1 commit f0a63bd

File tree

4 files changed

+48
-25
lines changed

4 files changed

+48
-25
lines changed

demo/config/services.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ services:
1919
- '../src/Entity/'
2020
- '../src/Kernel.php'
2121

22-
Symfony\AI\McpSdk\Capability\Tool\ToolExecutorInterface:
22+
mcp.tool_executor:
2323
class: Symfony\AI\McpSdk\Capability\ToolChain
2424
arguments:
2525
- ['@App\MCP\Tools\CurrentTimeTool']
2626

27-
Symfony\AI\McpSdk\Capability\Tool\CollectionInterface:
28-
alias: Symfony\AI\McpSdk\Capability\Tool\ToolExecutorInterface
27+
mcp.tool_collection:
28+
alias: mcp.tool_executor

src/mcp-bundle/config/services.php

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,36 +25,51 @@
2525

2626
return static function (ContainerConfigurator $container): void {
2727
$container->services()
28-
->defaults()
29-
->autowire()
30-
->autoconfigure()
3128
->instanceof(NotificationHandlerInterface::class)
3229
->tag('mcp.server.notification_handler')
3330
->instanceof(RequestHandlerInterface::class)
3431
->tag('mcp.server.request_handler')
35-
36-
->set(InitializedHandler::class)
37-
->set(InitializeHandler::class)
38-
->args([
39-
'$name' => param('mcp.app'),
40-
'$version' => param('mcp.version'),
41-
])
42-
->set(PingHandler::class)
43-
->set(ToolCallHandler::class)
44-
->set(ToolListHandler::class)
32+
->set('mcp.server.notification_handler.initialized', InitializedHandler::class)
33+
->args([])
34+
->tag('mcp.server.notification_handler')
35+
->set('mcp.server.request_handler.initialize', InitializeHandler::class)
36+
->args([
37+
param('mcp.app'),
38+
param('mcp.version'),
39+
])
40+
->tag('mcp.server.request_handler')
41+
->set('mcp.server.request_handler.ping', PingHandler::class)
42+
->args([])
43+
->tag('mcp.server.request_handler')
44+
->set('mcp.server.request_handler.tool_call', ToolCallHandler::class)
45+
->args([
46+
service('mcp.tool_executor'),
47+
])
48+
->tag('mcp.server.request_handler')
49+
->set('mcp.server.request_handler.tool_list', ToolListHandler::class)
50+
->args([
51+
service('mcp.tool_collection'),
52+
20,
53+
])
4554

4655
->set('mcp.message_factory', Factory::class)
56+
->args([])
4757
->set('mcp.server.json_rpc', JsonRpcHandler::class)
4858
->args([
49-
'$messageFactory' => service('mcp.message_factory'),
50-
'$requestHandlers' => tagged_iterator('mcp.server.request_handler'),
51-
'$notificationHandlers' => tagged_iterator('mcp.server.notification_handler'),
59+
service('mcp.message_factory'),
60+
tagged_iterator('mcp.server.request_handler'),
61+
tagged_iterator('mcp.server.notification_handler'),
62+
service('logger')->ignoreOnInvalid(),
5263
])
5364
->set('mcp.server', Server::class)
5465
->args([
55-
'$jsonRpcHandler' => service('mcp.server.json_rpc'),
66+
service('mcp.server.json_rpc'),
67+
service('logger')->ignoreOnInvalid(),
5668
])
5769
->alias(Server::class, 'mcp.server')
58-
->set(CachePoolStore::class)
70+
->set('mcp.server.sse.store.cache_pool', CachePoolStore::class)
71+
->args([
72+
service('cache.app'),
73+
])
5974
;
6075
};

src/mcp-bundle/src/McpBundle.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Symfony\Component\Config\Definition\Configurator\DefinitionConfigurator;
1818
use Symfony\Component\DependencyInjection\ContainerBuilder;
1919
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
20+
use Symfony\Component\DependencyInjection\Reference;
2021
use Symfony\Component\HttpKernel\Bundle\AbstractBundle;
2122

2223
final class McpBundle extends AbstractBundle
@@ -52,19 +53,25 @@ private function configureClient(array $transports, ContainerBuilder $container)
5253

5354
if ($transports['stdio']) {
5455
$container->register('mcp.server.command', McpCommand::class)
55-
->setAutowired(true)
56+
->setArguments([
57+
new Reference('mcp.server'),
58+
])
5659
->addTag('console.command');
5760
}
5861

5962
if ($transports['sse']) {
6063
$container->register('mcp.server.controller', McpController::class)
61-
->setAutowired(true)
64+
->setArguments([
65+
new Reference('mcp.server'),
66+
new Reference('mcp.server.sse.store.cache_pool'),
67+
new Reference('router'),
68+
])
6269
->setPublic(true)
6370
->addTag('controller.service_arguments');
6471
}
6572

6673
$container->register('mcp.server.route_loader', RouteLoader::class)
67-
->setArgument('$sseTransportEnabled', $transports['sse'])
74+
->setArgument(0, $transports['sse'])
6875
->addTag('routing.route_loader');
6976
}
7077
}

src/mcp-sdk/src/Server/JsonRpcHandler.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\AI\McpSdk\Server;
1313

1414
use Psr\Log\LoggerInterface;
15+
use Psr\Log\NullLogger;
1516
use Symfony\AI\McpSdk\Exception\ExceptionInterface;
1617
use Symfony\AI\McpSdk\Exception\HandlerNotFoundException;
1718
use Symfony\AI\McpSdk\Exception\InvalidInputMessageException;
@@ -45,7 +46,7 @@ public function __construct(
4546
private Factory $messageFactory,
4647
iterable $requestHandlers,
4748
iterable $notificationHandlers,
48-
private LoggerInterface $logger,
49+
private LoggerInterface $logger = new NullLogger(),
4950
) {
5051
$this->requestHandlers = $requestHandlers instanceof \Traversable ? iterator_to_array($requestHandlers) : $requestHandlers;
5152
$this->notificationHandlers = $notificationHandlers instanceof \Traversable ? iterator_to_array($notificationHandlers) : $notificationHandlers;

0 commit comments

Comments
 (0)