@@ -58,6 +58,14 @@ export class HttpStreamTransport extends AbstractTransport {
5858 try {
5959 const url = new URL ( req . url ! , `http://${ req . headers . host } ` ) ;
6060
61+ if ( req . method === 'OPTIONS' ) {
62+ this . setCorsHeaders ( res , true ) ;
63+ res . writeHead ( 204 ) . end ( ) ;
64+ return ;
65+ }
66+
67+ this . setCorsHeaders ( res ) ;
68+
6169 if ( req . method === 'GET' && url . pathname === '/.well-known/oauth-protected-resource' ) {
6270 if ( this . _oauthMetadata ) {
6371 this . _oauthMetadata . serve ( res ) ;
@@ -194,6 +202,20 @@ export class HttpStreamTransport extends AbstractTransport {
194202 } ) ;
195203 }
196204
205+ private setCorsHeaders ( res : ServerResponse , includeMaxAge : boolean = false ) : void {
206+ if ( ! this . _config . cors ) return ;
207+
208+ const cors = this . _config . cors ;
209+ res . setHeader ( 'Access-Control-Allow-Origin' , cors . allowOrigin || '*' ) ;
210+ res . setHeader ( 'Access-Control-Allow-Methods' , cors . allowMethods || 'GET, POST, OPTIONS' ) ;
211+ res . setHeader ( 'Access-Control-Allow-Headers' , cors . allowHeaders || 'Content-Type, Authorization, Mcp-Session-Id' ) ;
212+ res . setHeader ( 'Access-Control-Expose-Headers' , cors . exposeHeaders || 'Content-Type, Authorization, Mcp-Session-Id' ) ;
213+
214+ if ( includeMaxAge ) {
215+ res . setHeader ( 'Access-Control-Max-Age' , cors . maxAge || '86400' ) ;
216+ }
217+ }
218+
197219 private sendError ( res : ServerResponse , status : number , code : number , message : string ) : void {
198220 if ( res . headersSent ) return ;
199221
0 commit comments