Skip to content

Commit cbfbda7

Browse files
committed
Update CompletionComplete to return an empty array instead of throwing an exception when primitive does not support completion
1 parent 7030b35 commit cbfbda7

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

src/Server/Methods/CompletionComplete.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Illuminate\Support\Arr;
99
use InvalidArgumentException;
1010
use Laravel\Mcp\Server;
11+
use Laravel\Mcp\Server\Completions\CompletionResponse;
1112
use Laravel\Mcp\Server\Contracts\HasUriTemplate;
1213
use Laravel\Mcp\Server\Contracts\Method;
1314
use Laravel\Mcp\Server\Contracts\SupportsCompletion;
@@ -53,11 +54,11 @@ public function handle(JsonRpcRequest $request, ServerContext $context): JsonRpc
5354
}
5455

5556
if (! $primitive instanceof SupportsCompletion) {
56-
throw new JsonRpcException(
57-
'The referenced primitive does not support completion.',
58-
-32601,
59-
$request->id,
60-
);
57+
$result = CompletionResponse::empty();
58+
59+
return JsonRpcResponse::result($request->id, [
60+
'completion' => $result->toArray(),
61+
]);
6162
}
6263

6364
$argumentName = Arr::get($argument, 'name');

tests/Unit/Methods/CompletionCompleteTest.php

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ public function handle(\Laravel\Mcp\Request $request): Response
226226
$method->handle($request, $context);
227227
})->throws(JsonRpcException::class, 'Resource [file://non-existent] not found');
228228

229-
it('throws exception when primitive does not support completion', function (): void {
229+
it('return empty array when primitive does not support completion', function (): void {
230230
$server = new class(new FakeTransporter) extends Server
231231
{
232232
protected string $name = 'Test';
@@ -244,8 +244,16 @@ public function handle(\Laravel\Mcp\Request $request): Response
244244

245245
$context = $server->createContext();
246246

247-
$method->handle($request, $context);
248-
})->throws(JsonRpcException::class, 'does not support completion');
247+
$response = $method->handle($request, $context);
248+
249+
expect($response->toArray())
250+
->toHaveKey('result')
251+
->and($response->toArray()['result'])
252+
->toHaveKey('completion')
253+
->and($response->toArray()['result']['completion']['values'])
254+
->toBe([]);
255+
256+
});
249257

250258
it('completes for prompt', function (): void {
251259
$method = new CompletionComplete;

0 commit comments

Comments
 (0)