[Server] Keep injectable parameters out of the published inputSchema (#482)

This commit is contained in:
Christopher Hertel 2026-08-25 01:12:29 +02:00 • committed by GitHub
commit e173367c5f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 156 additions and 18 deletions

View file

@ -13,6 +13,8 @@ namespace Mcp\Tests\Unit\Capability\Discovery;
use Mcp\Capability\Attribute\McpTool;
use Mcp\Capability\Attribute\Schema;
use Mcp\Server\ClientGateway;
use Mcp\Server\RequestContext;
use Mcp\Tests\Unit\Fixtures\Enum\BackedIntEnum;
use Mcp\Tests\Unit\Fixtures\Enum\BackedStringEnum;
use Mcp\Tests\Unit\Fixtures\Enum\UnitEnum;
@ -519,6 +521,13 @@ class SchemaGeneratorFixture
{
}
/**
* @param string $query The search query
*/
public function withInjectableParameters(string $query, ClientGateway $gateway, RequestContext $context, int $limit = 10): void
{
}
// ===== OUTPUT SCHEMA FIXTURES =====
#[McpTool(
outputSchema: [

View file

@ -413,6 +413,17 @@ final class SchemaGeneratorTest extends TestCase
$this->assertEquals(['inferredParam'], $schema['required']);
}
public function testExcludesInjectableParameterTypesFromSchema(): void
{
$method = new \ReflectionMethod(SchemaGeneratorFixture::class, 'withInjectableParameters');
$schema = $this->schemaGenerator->generate($method);
$this->assertArrayNotHasKey('gateway', $schema['properties']);
$this->assertArrayNotHasKey('context', $schema['properties']);
$this->assertEquals(['type' => 'string', 'description' => 'The search query'], $schema['properties']['query']);
$this->assertEquals(['type' => 'integer', 'default' => 10], $schema['properties']['limit']);
$this->assertEquals(['query'], $schema['required']);
}
public static function methodsWithForbiddenParameter(): array
{
return [