Skip to content

Commit 9a73f80

Browse files
committed
refactor: remove DispatchableRegistry
1 parent 7f7c2a0 commit 9a73f80

File tree

5 files changed

+23
-445
lines changed

5 files changed

+23
-445
lines changed

src/Capability/Registry.php

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,16 @@
1717
use Mcp\Capability\Registry\ResourceReference;
1818
use Mcp\Capability\Registry\ResourceTemplateReference;
1919
use Mcp\Capability\Registry\ToolReference;
20+
use Mcp\Event\PromptListChangedEvent;
21+
use Mcp\Event\ResourceListChangedEvent;
22+
use Mcp\Event\ResourceTemplateListChangedEvent;
23+
use Mcp\Event\ToolListChangedEvent;
2024
use Mcp\Schema\Prompt;
2125
use Mcp\Schema\Resource;
2226
use Mcp\Schema\ResourceTemplate;
2327
use Mcp\Schema\ServerCapabilities;
2428
use Mcp\Schema\Tool;
29+
use Psr\EventDispatcher\EventDispatcherInterface;
2530
use Psr\Log\LoggerInterface;
2631
use Psr\Log\NullLogger;
2732

@@ -56,6 +61,7 @@ final class Registry implements ReferenceProviderInterface, ReferenceRegistryInt
5661
private array $resourceTemplates = [];
5762

5863
public function __construct(
64+
private readonly ?EventDispatcherInterface $eventDispatcher = null,
5965
private readonly LoggerInterface $logger = new NullLogger(),
6066
) {
6167
}
@@ -68,12 +74,12 @@ public function getCapabilities(): ServerCapabilities
6874

6975
return new ServerCapabilities(
7076
tools: [] !== $this->tools,
71-
toolsListChanged: false,
77+
toolsListChanged: $this->eventDispatcher instanceof EventDispatcherInterface,
7278
resources: [] !== $this->resources || [] !== $this->resourceTemplates,
7379
resourcesSubscribe: false,
74-
resourcesListChanged: false,
80+
resourcesListChanged: $this->eventDispatcher instanceof EventDispatcherInterface,
7581
prompts: [] !== $this->prompts,
76-
promptsListChanged: false,
82+
promptsListChanged: $this->eventDispatcher instanceof EventDispatcherInterface,
7783
logging: false,
7884
completions: true,
7985
);
@@ -93,6 +99,8 @@ public function registerTool(Tool $tool, callable|array|string $handler, bool $i
9399
}
94100

95101
$this->tools[$toolName] = new ToolReference($tool, $handler, $isManual);
102+
103+
$this->eventDispatcher?->dispatch(new ToolListChangedEvent());
96104
}
97105

98106
public function registerResource(Resource $resource, callable|array|string $handler, bool $isManual = false): void
@@ -109,6 +117,8 @@ public function registerResource(Resource $resource, callable|array|string $hand
109117
}
110118

111119
$this->resources[$uri] = new ResourceReference($resource, $handler, $isManual);
120+
121+
$this->eventDispatcher?->dispatch(new ResourceListChangedEvent());
112122
}
113123

114124
public function registerResourceTemplate(
@@ -134,6 +144,8 @@ public function registerResourceTemplate(
134144
$isManual,
135145
$completionProviders,
136146
);
147+
148+
$this->eventDispatcher?->dispatch(new ResourceTemplateListChangedEvent());
137149
}
138150

139151
public function registerPrompt(
@@ -154,6 +166,8 @@ public function registerPrompt(
154166
}
155167

156168
$this->prompts[$promptName] = new PromptReference($prompt, $handler, $isManual, $completionProviders);
169+
170+
$this->eventDispatcher?->dispatch(new PromptListChangedEvent());
157171
}
158172

159173
public function clear(): void

src/Schema/ServerCapabilities.php

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,6 @@ public function __construct(
4545
) {
4646
}
4747

48-
public function withEvents(): self
49-
{
50-
return new self(
51-
tools: $this->tools,
52-
toolsListChanged: true,
53-
resources: $this->resources,
54-
resourcesSubscribe: $this->resourcesSubscribe,
55-
resourcesListChanged: true,
56-
prompts: $this->prompts,
57-
promptsListChanged: true,
58-
logging: $this->logging,
59-
completions: $this->completions,
60-
);
61-
}
62-
6348
/**
6449
* @param array{
6550
* logging?: mixed,

src/Server/ServerBuilder.php

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -279,16 +279,12 @@ public function build(): Server
279279
$logger = $this->logger ?? new NullLogger();
280280

281281
$container = $this->container ?? new Container();
282-
$referenceProvider = new Registry($logger);
283-
$registry = new DispatchableRegistry(
284-
referenceProvider: new Registry($logger),
285-
eventDispatcher: $this->eventDispatcher,
286-
);
282+
$registry = new Registry($this->eventDispatcher, $logger);
287283

288284
$referenceHandler = new ReferenceHandler($container);
289-
$toolExecutor = $this->toolExecutor ??= new ToolExecutor($referenceProvider, $referenceHandler, $logger);
290-
$resourceReader = $this->resourceReader ??= new ResourceReader($referenceProvider, $referenceHandler);
291-
$promptGetter = $this->promptGetter ??= new PromptGetter($referenceProvider, $referenceHandler);
285+
$toolExecutor = $this->toolExecutor ??= new ToolExecutor($registry, $referenceHandler, $logger);
286+
$resourceReader = $this->resourceReader ??= new ResourceReader($registry, $referenceHandler);
287+
$promptGetter = $this->promptGetter ??= new PromptGetter($registry, $referenceHandler);
292288

293289
$this->registerManualElements($registry, $logger);
294290

@@ -300,7 +296,7 @@ public function build(): Server
300296
return new Server(
301297
jsonRpcHandler: Handler::make(
302298
registry: $registry,
303-
referenceProvider: $referenceProvider,
299+
referenceProvider: $registry,
304300
implementation: $this->serverInfo,
305301
toolExecutor: $toolExecutor,
306302
resourceReader: $resourceReader,

0 commit comments

Comments
 (0)