Files
Lesstime/src/DependencyInjection/Compiler/McpSchemaGeneratorPass.php
T
Matthieu c528067c79
Auto Tag Develop / tag (push) Successful in 11s
fix(mcp) : accepter les arguments scalaires stringifiés (coercition string->int/bool)
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.
2026-05-27 10:36:06 +02:00

29 lines
867 B
PHP

<?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)])
;
}
}