Skip to content

Commit d55f966

Browse files
feat(client/sse): add {EventSource,Request}Init options param
This enables users of the SSE client to optionally send cookie-based credentials to the event source MCP server using `EventSourceInit` [1] parameters and set the outgoing request headers for the POST call. [1]: https://developer.mozilla.org/en-US/docs/Web/API/EventSource/EventSource#options
1 parent 3164da6 commit d55f966

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

src/client/sse.ts

+15-8
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,17 @@ export class SSEClientTransport implements Transport {
1212
private _endpoint?: URL;
1313
private _abortController?: AbortController;
1414
private _url: URL;
15+
private _eventSourceInit?: EventSourceInit;
16+
private _requestInit?: RequestInit;
1517

1618
onclose?: () => void;
1719
onerror?: (error: Error) => void;
1820
onmessage?: (message: JSONRPCMessage) => void;
1921

20-
constructor(url: URL) {
22+
constructor(url: URL, opts?: { eventSourceInit?: EventSourceInit, requestInit?: RequestInit }) {
2123
this._url = url;
24+
this._eventSourceInit = opts?.eventSourceInit;
25+
this._requestInit = opts?.requestInit;
2226
}
2327

2428
start(): Promise<void> {
@@ -29,7 +33,7 @@ export class SSEClientTransport implements Transport {
2933
}
3034

3135
return new Promise((resolve, reject) => {
32-
this._eventSource = new EventSource(this._url.href);
36+
this._eventSource = new EventSource(this._url.href, this._eventSourceInit);
3337
this._abortController = new AbortController();
3438

3539
this._eventSource.onerror = (event) => {
@@ -90,14 +94,17 @@ export class SSEClientTransport implements Transport {
9094
}
9195

9296
try {
93-
const response = await fetch(this._endpoint, {
97+
const headers = new Headers(this._requestInit?.headers);
98+
headers.set("content-type", "application/json");
99+
const init = {
100+
...this._requestInit,
94101
method: "POST",
95-
headers: {
96-
"Content-Type": "application/json",
97-
},
102+
headers,
98103
body: JSON.stringify(message),
99-
signal: this._abortController?.signal,
100-
});
104+
signal: this._abortController?.signal
105+
};
106+
107+
const response = await fetch(this._endpoint, init);
101108

102109
if (!response.ok) {
103110
const text = await response.text().catch(() => null);

0 commit comments

Comments
 (0)