Skip to main content
Glama

OpenFGA MCP

ConfigurableHttpServerTransportTest.php5.94 kB
<?php declare(strict_types=1); use OpenFGA\MCP\ConfigurableHttpServerTransport; use Psr\Log\NullLogger; beforeEach(function (): void { // Clear $_ENV before each test foreach (array_keys($_ENV) as $key) { if (str_starts_with($key, 'OPENFGA_MCP_')) { unset($_ENV[$key]); } } }); describe('ConfigurableHttpServerTransport', function (): void { describe('applyConfiguration method', function (): void { it('applies configuration from valid JSON', function (): void { $transport = new ConfigurableHttpServerTransport( host: '127.0.0.1', port: 8080, mcpPath: '/mcp', logger: new NullLogger, ); $json = json_encode([ 'OPENFGA_MCP_API_URL' => 'https://api.example.com', 'OPENFGA_MCP_API_TOKEN' => 'test-token', ]); $result = $transport->applyConfiguration($json); expect($result->isSuccessful())->toBeTrue(); expect($result->getErrors())->toBeEmpty(); expect($_ENV['OPENFGA_MCP_API_URL'])->toBe('https://api.example.com'); expect($_ENV['OPENFGA_MCP_API_TOKEN'])->toBe('test-token'); }); it('returns error for invalid JSON configuration', function (): void { $transport = new ConfigurableHttpServerTransport( host: '127.0.0.1', port: 8080, mcpPath: '/mcp', logger: new NullLogger, ); $result = $transport->applyConfiguration('invalid json {'); expect($result->isSuccessful())->toBeFalse(); expect($result->hasErrors())->toBeTrue(); expect($result->getErrors())->toContain('Invalid JSON: Syntax error'); }); it('preserves existing environment variables when empty config provided', function (): void { // Set an environment variable $_ENV['OPENFGA_MCP_API_URL'] = 'https://existing.example.com'; $transport = new ConfigurableHttpServerTransport( host: '127.0.0.1', port: 8080, mcpPath: '/mcp', logger: new NullLogger, ); $result = $transport->applyConfiguration('{}'); expect($result->isSuccessful())->toBeTrue(); // Environment variable should remain unchanged expect($_ENV['OPENFGA_MCP_API_URL'])->toBe('https://existing.example.com'); }); it('overrides existing environment variables with new config', function (): void { // Set environment variables $_ENV['OPENFGA_MCP_API_URL'] = 'https://existing.example.com'; $_ENV['OPENFGA_MCP_API_TOKEN'] = 'existing-token'; $transport = new ConfigurableHttpServerTransport( host: '127.0.0.1', port: 8080, mcpPath: '/mcp', logger: new NullLogger, ); $json = json_encode([ 'OPENFGA_MCP_API_URL' => 'https://override.example.com', // Note: not overriding API_TOKEN ]); $result = $transport->applyConfiguration($json); expect($result->isSuccessful())->toBeTrue(); // URL should be overridden expect($_ENV['OPENFGA_MCP_API_URL'])->toBe('https://override.example.com'); // Token should remain unchanged expect($_ENV['OPENFGA_MCP_API_TOKEN'])->toBe('existing-token'); }); it('handles configuration with validation errors', function (): void { $transport = new ConfigurableHttpServerTransport( host: '127.0.0.1', port: 8080, mcpPath: '/mcp', logger: new NullLogger, ); // OAuth2 config missing required fields $json = json_encode([ 'OPENFGA_MCP_API_CLIENT_ID' => 'client-id', // Missing CLIENT_SECRET, ISSUER, AUDIENCE ]); $result = $transport->applyConfiguration($json); expect($result->isSuccessful())->toBeFalse(); expect($result->hasErrors())->toBeTrue(); expect($result->getErrors())->toContain('OAuth2 client credentials require all of: OPENFGA_MCP_API_CLIENT_ID, OPENFGA_MCP_API_CLIENT_SECRET, OPENFGA_MCP_API_ISSUER, OPENFGA_MCP_API_AUDIENCE'); }); }); describe('constructor parameters', function (): void { it('accepts all parent constructor parameters', function (): void { $transport = new ConfigurableHttpServerTransport( host: '0.0.0.0', port: 9999, mcpPath: '/custom', sslContext: null, enableJsonResponse: false, stateless: true, eventStore: null, logger: new NullLogger, ); expect($transport)->toBeInstanceOf(ConfigurableHttpServerTransport::class); }); it('uses default values when not specified', function (): void { $transport = new ConfigurableHttpServerTransport; expect($transport)->toBeInstanceOf(ConfigurableHttpServerTransport::class); }); }); describe('listen method', function (): void { it('can be called without errors', function (): void { $transport = new ConfigurableHttpServerTransport( host: '127.0.0.1', port: 0, // Use port 0 to avoid binding issues logger: new NullLogger, ); // We can't actually test the full listen() method without starting a server // but we can verify the transport is properly instantiated expect($transport)->toBeInstanceOf(ConfigurableHttpServerTransport::class); }); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/evansims/openfga-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server