1515use Mcp \Capability \Registry \ReferenceProviderInterface ;
1616use Mcp \Exception \PromptGetException ;
1717use Mcp \Exception \PromptNotFoundException ;
18- use Mcp \Exception \RegistryException ;
1918use Mcp \Schema \Request \GetPromptRequest ;
2019use Mcp \Schema \Result \GetPromptResult ;
20+ use Psr \Log \LoggerInterface ;
21+ use Psr \Log \NullLogger ;
2122
2223/**
2324 * @author Pavel Buchnev <butschster@gmail.com>
@@ -27,27 +28,41 @@ final class PromptGetter implements PromptGetterInterface
2728 public function __construct (
2829 private readonly ReferenceProviderInterface $ referenceProvider ,
2930 private readonly ReferenceHandlerInterface $ referenceHandler ,
30- ) {}
31+ private readonly LoggerInterface $ logger = new NullLogger (),
32+ ) {
33+ }
3134
32- /**
33- * @throws RegistryException
34- * @throws \JsonException
35- */
3635 public function get (GetPromptRequest $ request ): GetPromptResult
3736 {
38- $ reference = $ this ->referenceProvider ->getPrompt ($ request ->name );
37+ $ promptName = $ request ->name ;
38+ $ arguments = $ request ->arguments ?? [];
39+
40+ $ this ->logger ->debug ('Getting prompt ' , ['name ' => $ promptName , 'arguments ' => $ arguments ]);
41+
42+ $ reference = $ this ->referenceProvider ->getPrompt ($ promptName );
3943
4044 if (null === $ reference ) {
45+ $ this ->logger ->warning ('Prompt not found ' , ['name ' => $ promptName ]);
4146 throw new PromptNotFoundException ($ request );
4247 }
4348
4449 try {
45- return new GetPromptResult (
46- $ reference ->formatResult (
47- $ this ->referenceHandler ->handle ($ reference , $ request ->arguments ?? []),
48- ),
49- );
50+ $ result = $ this ->referenceHandler ->handle ($ reference , $ arguments );
51+ $ formattedResult = $ reference ->formatResult ($ result );
52+
53+ $ this ->logger ->debug ('Prompt retrieved successfully ' , [
54+ 'name ' => $ promptName ,
55+ 'result_type ' => \gettype ($ result ),
56+ ]);
57+
58+ return new GetPromptResult ($ formattedResult );
5059 } catch (\Throwable $ e ) {
60+ $ this ->logger ->error ('Prompt retrieval failed ' , [
61+ 'name ' => $ promptName ,
62+ 'exception ' => $ e ->getMessage (),
63+ 'trace ' => $ e ->getTraceAsString (),
64+ ]);
65+
5166 throw new PromptGetException ($ request , $ e );
5267 }
5368 }
0 commit comments