Skip to content

Commit edbc2b1

Browse files
docs: add CORS configuration documentation for HTTP transport
1 parent 501fa28 commit edbc2b1

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

docs/transports.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ $transport = new StreamableHttpTransport(
110110
- **`request`** (required): `ServerRequestInterface` - The incoming PSR-7 HTTP request
111111
- **`responseFactory`** (optional): `ResponseFactoryInterface` - PSR-17 factory for creating HTTP responses. Auto-discovered if not provided.
112112
- **`streamFactory`** (optional): `StreamFactoryInterface` - PSR-17 factory for creating response body streams. Auto-discovered if not provided.
113+
- **`corsHeaders`** (optional): `array` - Custom CORS headers to override defaults. Merges with secure defaults. Defaults to `[]`.
113114
- **`logger`** (optional): `LoggerInterface` - PSR-3 logger for debugging. Defaults to `NullLogger`.
114115

115116
### PSR-17 Auto-Discovery
@@ -136,6 +137,48 @@ $psr17Factory = new Psr17Factory();
136137
$transport = new StreamableHttpTransport($request, $psr17Factory, $psr17Factory);
137138
```
138139

140+
### CORS Configuration
141+
142+
The transport sets secure CORS defaults that can be customized or disabled:
143+
144+
```php
145+
// Default CORS headers (backward compatible)
146+
$transport = new StreamableHttpTransport($request, $responseFactory, $streamFactory);
147+
148+
// Restrict to specific origin
149+
$transport = new StreamableHttpTransport(
150+
$request,
151+
$responseFactory,
152+
$streamFactory,
153+
['Access-Control-Allow-Origin' => 'https://myapp.com']
154+
);
155+
156+
// Disable CORS for proxy scenarios
157+
$transport = new StreamableHttpTransport(
158+
$request,
159+
$responseFactory,
160+
$streamFactory,
161+
['Access-Control-Allow-Origin' => '']
162+
);
163+
164+
// Custom headers with logger
165+
$transport = new StreamableHttpTransport(
166+
$request,
167+
$responseFactory,
168+
$streamFactory,
169+
[
170+
'Access-Control-Allow-Origin' => 'https://api.example.com',
171+
'Access-Control-Max-Age' => '86400'
172+
],
173+
$logger
174+
);
175+
```
176+
177+
Default CORS headers:
178+
- `Access-Control-Allow-Origin: *`
179+
- `Access-Control-Allow-Methods: GET, POST, DELETE, OPTIONS`
180+
- `Access-Control-Allow-Headers: Content-Type, Mcp-Session-Id, Mcp-Protocol-Version, Last-Event-ID, Authorization, Accept`
181+
139182
### Architecture
140183

141184
The HTTP transport doesn't run its own web server. Instead, it processes PSR-7 requests and returns PSR-7 responses that

0 commit comments

Comments
 (0)