fix(mcp) : accepter les arguments scalaires stringifiés (coercition string->int/bool)
Auto Tag Develop / tag (push) Successful in 11s
Auto Tag Develop / tag (push) Successful in 11s
Certains clients MCP sérialisent tous les arguments JSON-RPC en string (ex: "22" au lieu de 22). Le SDK valide les arguments contre le schéma JSON AVANT de les caster (CallToolHandler), donc un schéma integer strict rejetait "22" en 422 alors que ReferenceHandler::castArgumentType sait le coercer ensuite. CoercingSchemaGenerator enveloppe le SchemaGenerator du SDK et ajoute "string" aux types scalaires integer/number/boolean (et aux items de tableaux), de sorte que opis accepte la valeur stringifiée ; le type PHP réel du paramètre pilote toujours la coercition. Branché sur le builder MCP via McpSchemaGeneratorPass (enregistrée dans Kernel::build). Corrige le rejet 422 sur groupId/effortId/priorityId/statusId/etc. lors de l'appel des tools depuis Claude.
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\DependencyInjection\Compiler;
|
||||
|
||||
use App\Mcp\Schema\CoercingSchemaGenerator;
|
||||
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
|
||||
/**
|
||||
* Wires the CoercingSchemaGenerator into the MCP server builder so that
|
||||
* generated tool input schemas accept stringified scalar arguments.
|
||||
*/
|
||||
final class McpSchemaGeneratorPass implements CompilerPassInterface
|
||||
{
|
||||
public function process(ContainerBuilder $container): void
|
||||
{
|
||||
if (!$container->hasDefinition('mcp.server.builder')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$container->getDefinition('mcp.server.builder')
|
||||
->addMethodCall('setSchemaGenerator', [new Reference(CoercingSchemaGenerator::class)])
|
||||
;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user