mcp-simple-gateway
Version:
MCP Simple Gateway
50 lines (49 loc) • 1.6 kB
JavaScript
import { getRPCErrorFromError } from '../helpers/index.js';
export class SSEMcpProxy {
serverTransport;
proxyTransport;
logger;
constructor(params) {
this.serverTransport = params.serverTransport;
this.proxyTransport = params.proxyTransport;
this.logger = params.logger;
}
get sessionId() {
return this.proxyTransport.sessionId;
}
start = async () => {
await this.serverTransport.start();
await this.proxyTransport.start();
this.serverTransport.onmessage = (msg) => {
this.proxyTransport.send(msg);
};
this.serverTransport.onerror = async (err) => {
const rpcError = getRPCErrorFromError(err);
try {
await this.proxyTransport.send(rpcError);
}
catch (error) {
this.logger?.error(error, 'Failed to send error');
}
};
this.proxyTransport.onmessage = async (msg) => {
try {
await this.serverTransport.send(msg);
}
catch (error) {
const rpcError = getRPCErrorFromError(error);
await this.proxyTransport.send({
...rpcError,
id: rpcError.id || msg.id,
});
}
};
};
handleMessage = (req, res, parsedBody) => {
return this.proxyTransport.handlePostMessage(req, res, parsedBody);
};
close = async () => {
await this.serverTransport.close();
await this.proxyTransport.close();
};
}