[Server] add a reference handler setter to server builder (#265)
* feat: add setReferenceHandler to Builder Allow consumers to provide a custom ReferenceHandlerInterface implementation (e.g. a security-aware decorator) instead of always using the default ReferenceHandler. * test: add BuilderTest for setReferenceHandler - Fluent API returns builder instance - build() succeeds with and without custom handler - Integration test verifies custom handler intercepts tool calls * style: fix codestyle in BuilderTest * style: use imports instead of inline FQCNs in BuilderTest * docs: add changelog entry for setReferenceHandler
This commit is contained in:
parent
eac6f01d58
commit
faac4a525c
1 changed files with 123 additions and 1 deletions
|
|
@ -22,6 +22,7 @@ use Mcp\Capability\Registry\Loader\ArrayLoader;
|
|||
use Mcp\Capability\Registry\Loader\DiscoveryLoader;
|
||||
use Mcp\Capability\Registry\Loader\LoaderInterface;
|
||||
use Mcp\Capability\Registry\ReferenceHandler;
|
||||
use Mcp\Capability\Registry\ReferenceHandlerInterface;
|
||||
use Mcp\Capability\RegistryInterface;
|
||||
use Mcp\Exception\InvalidArgumentException;
|
||||
use Mcp\JsonRpc\MessageFactory;
|
||||
|
|
@ -69,6 +70,8 @@ final class Builder
|
|||
|
||||
private ?SchemaGeneratorInterface $schemaGenerator = null;
|
||||
|
||||
private ?ReferenceHandlerInterface $referenceHandler = null;
|
||||
|
||||
private ?DiscovererInterface $discoverer = null;
|
||||
|
||||
private ?SessionManagerInterface $sessionManager = null;
|
||||
|
|
@ -305,6 +308,13 @@ final class Builder
|
|||
return $this;
|
||||
}
|
||||
|
||||
public function setReferenceHandler(ReferenceHandlerInterface $referenceHandler): self
|
||||
{
|
||||
$this->referenceHandler = $referenceHandler;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setDiscoverer(DiscovererInterface $discoverer): self
|
||||
{
|
||||
$this->discoverer = $discoverer;
|
||||
|
|
@ -537,7 +547,7 @@ final class Builder
|
|||
|
||||
$serverInfo = $this->serverInfo ?? new Implementation();
|
||||
$configuration = new Configuration($serverInfo, $capabilities, $this->paginationLimit, $this->instructions, $this->protocolVersion);
|
||||
$referenceHandler = new ReferenceHandler($container);
|
||||
$referenceHandler = $this->referenceHandler ?? new ReferenceHandler($container);
|
||||
|
||||
$requestHandlers = array_merge($this->requestHandlers, [
|
||||
new Handler\Request\CallToolHandler($registry, $referenceHandler, $logger),
|
||||
|
|
|
|||
Loading…
Reference in a new issue