Skip to content

Commit 5738bb7

Browse files
committed
feat: implement variadic parameter handling in ReferenceHandler
- Add support for variadic parameters (...) in prepareArguments method - Collect all numeric-indexed arguments starting from parameter position - Add proper error handling for variadic parameter processing - Remove TODO comment and complete the implementation - Maintain backward compatibility with existing parameter handling Fixes the TODO item in ReferenceHandler.php line 88 and enables proper handling of functions with variadic parameters in MCP tools and resources.
1 parent 9590e9c commit 5738bb7

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

src/Capability/Registry/ReferenceHandler.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,28 @@ private function prepareArguments(\ReflectionFunctionAbstract $reflection, array
8585
$finalArgs = [];
8686

8787
foreach ($reflection->getParameters() as $parameter) {
88-
// TODO: Handle variadic parameters.
8988
$paramName = $parameter->getName();
9089
$paramPosition = $parameter->getPosition();
9190

91+
// Handle variadic parameters
92+
if ($parameter->isVariadic()) {
93+
// For variadic parameters, collect all remaining arguments
94+
$variadicArgs = [];
95+
foreach ($arguments as $key => $value) {
96+
if (is_numeric($key) && $key >= $paramPosition) {
97+
try {
98+
$variadicArgs[] = $this->castArgumentType($value, $parameter);
99+
} catch (InvalidArgumentException $e) {
100+
throw RegistryException::invalidParams($e->getMessage(), $e);
101+
} catch (\Throwable $e) {
102+
throw RegistryException::internalError("Error processing variadic parameter `{$paramName}`: {$e->getMessage()}", $e);
103+
}
104+
}
105+
}
106+
$finalArgs[$paramPosition] = $variadicArgs;
107+
continue;
108+
}
109+
92110
if (isset($arguments[$paramName])) {
93111
$argument = $arguments[$paramName];
94112
try {

0 commit comments

Comments
 (0)