Skip to content

Commit c39f808

Browse files
committed
Update client transports
1 parent 87ae7ff commit c39f808

File tree

3 files changed

+36
-14
lines changed

3 files changed

+36
-14
lines changed

src/client/sse.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,19 @@ export class SSEClientTransport implements Transport {
1111
private _eventSource?: EventSource;
1212
private _endpoint?: URL;
1313
private _abortController?: AbortController;
14+
private _url: URL;
1415

1516
onclose?: () => void;
1617
onerror?: (error: Error) => void;
1718
onmessage?: (message: JSONRPCMessage) => void;
1819

19-
connect(url: URL): Promise<void> {
20+
constructor(url: URL) {
21+
this._url = url;
22+
}
23+
24+
start(): Promise<void> {
2025
return new Promise((resolve, reject) => {
21-
this._eventSource = new EventSource(url.href);
26+
this._eventSource = new EventSource(this._url.href);
2227
this._abortController = new AbortController();
2328

2429
this._eventSource.onerror = (event) => {
@@ -35,8 +40,8 @@ export class SSEClientTransport implements Transport {
3540
const messageEvent = event as MessageEvent;
3641

3742
try {
38-
this._endpoint = new URL(messageEvent.data, url);
39-
if (this._endpoint.origin !== url.origin) {
43+
this._endpoint = new URL(messageEvent.data, this._url);
44+
if (this._endpoint.origin !== this._url.origin) {
4045
throw new Error(
4146
`Endpoint origin does not match connection origin: ${this._endpoint.origin}`,
4247
);

src/client/stdio.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,34 @@ export class StdioClientTransport implements Transport {
3131
private _process?: ChildProcess;
3232
private _abortController: AbortController = new AbortController();
3333
private _readBuffer: ReadBuffer = new ReadBuffer();
34+
private _serverParams: StdioServerParameters;
3435

3536
onclose?: () => void;
3637
onerror?: (error: Error) => void;
3738
onmessage?: (message: JSONRPCMessage) => void;
3839

40+
constructor(server: StdioServerParameters) {
41+
this._serverParams = server;
42+
}
43+
3944
/**
40-
* Spawns the server process and prepare to communicate with it.
45+
* Starts the server process and prepares to communicate with it.
4146
*/
42-
spawn(server: StdioServerParameters): Promise<void> {
47+
async start(): Promise<void> {
4348
return new Promise((resolve, reject) => {
44-
this._process = spawn(server.command, server.args ?? [], {
45-
// The parent process may have sensitive secrets in its env, so don't inherit it automatically.
46-
env: server.env === undefined ? {} : { ...server.env },
47-
stdio: ["pipe", "pipe", "inherit"],
48-
signal: this._abortController.signal,
49-
});
49+
this._process = spawn(
50+
this._serverParams.command,
51+
this._serverParams.args ?? [],
52+
{
53+
// The parent process may have sensitive secrets in its env, so don't inherit it automatically.
54+
env:
55+
this._serverParams.env === undefined
56+
? {}
57+
: { ...this._serverParams.env },
58+
stdio: ["pipe", "pipe", "inherit"],
59+
signal: this._abortController.signal,
60+
},
61+
);
5062

5163
this._process.on("error", (error) => {
5264
if (error.name === "AbortError") {

src/client/websocket.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,19 @@ const SUBPROTOCOL = "mcp";
88
*/
99
export class WebSocketClientTransport implements Transport {
1010
private _socket?: WebSocket;
11+
private _url: URL;
1112

1213
onclose?: () => void;
1314
onerror?: (error: Error) => void;
1415
onmessage?: (message: JSONRPCMessage) => void;
1516

16-
connect(url: URL): Promise<void> {
17+
constructor(url: URL) {
18+
this._url = url;
19+
}
20+
21+
start(): Promise<void> {
1722
return new Promise((resolve, reject) => {
18-
this._socket = new WebSocket(url, SUBPROTOCOL);
23+
this._socket = new WebSocket(this._url, SUBPROTOCOL);
1924

2025
this._socket.onerror = (event) => {
2126
const error =

0 commit comments

Comments
 (0)