Transports
Transports handle the communication layer between client and server.
STDIO Transport
Spawns a server process and communicates via standard input/output:
use Mcp\Client\Transport\StdioTransport;
$transport = new StdioTransport(
command: 'php',
args: ['/path/to/server.php'],
cwd: '/working/directory', // Optional working directory
env: ['KEY' => 'value'], // Optional environment variables
);
Parameters:
- command (string): The command to execute
- args (array): Command arguments
- cwd (string|null): Working directory for the process
- env (array|null): Environment variables
- logger (LoggerInterface|null): Optional PSR-3 logger
- maxBufferSize (int): Maximum buffered bytes per message before the transport gives up
HTTP Transport
Communicates with remote MCP servers over HTTP:
use Mcp\Client\Transport\HttpTransport;
$transport = new HttpTransport(
endpoint: 'http://localhost:8000',
headers: ['Authorization' => 'Bearer token'],
);
Parameters:
- endpoint (string): The MCP server URL
- headers (array): Additional HTTP headers
- httpClient (ClientInterface|null): PSR-18 HTTP client (auto-discovered)
- requestFactory (RequestFactoryInterface|null): PSR-17 request factory (auto-discovered)
- streamFactory (StreamFactoryInterface|null): PSR-17 stream factory (auto-discovered)
- logger (LoggerInterface|null): Optional PSR-3 logger
- maxSseBufferBytes (int): Maximum buffered bytes for a streamed SSE response
PSR-18 Auto-Discovery:
The transport automatically discovers PSR-18 HTTP clients from:
- php-http/guzzle7-adapter
- php-http/curl-client
- symfony/http-client
- And other PSR-18 compatible implementations
# Install any PSR-18 client - discovery works automatically
composer require php-http/guzzle7-adapter