@@ -93,6 +93,18 @@ export class McpClient implements INodeType {
9393 default : 'cmd' ,
9494 description : 'Choose the transport type to connect to MCP server' ,
9595 } ,
96+ {
97+ displayName : 'Uri Override' ,
98+ name : 'uriOverride' ,
99+ type : 'string' ,
100+ displayOptions : {
101+ show : {
102+ connectionType : [ 'sse' , 'http' ] ,
103+ } ,
104+ } ,
105+ default : '' ,
106+ description : 'Override the URL from credentials with a custom URL' ,
107+ } ,
96108 {
97109 displayName : 'Operation' ,
98110 name : 'operation' ,
@@ -297,7 +309,21 @@ export class McpClient implements INodeType {
297309 // Dynamically import the HTTP client
298310 const { StreamableHTTPClientTransport } = await import ( '@modelcontextprotocol/sdk/client/streamableHttp.js' ) ;
299311
300- const httpStreamUrl = httpCredentials . httpStreamUrl as string ;
312+ // Get URI override or use credentials URL
313+ const uriOverride = this . getNodeParameter ( 'uriOverride' , 0 ) as string ;
314+ let httpStreamUrl : string ;
315+
316+ if ( uriOverride && uriOverride . trim ( ) ) {
317+ try {
318+ // Validate URL format
319+ new URL ( uriOverride . trim ( ) ) ;
320+ httpStreamUrl = uriOverride . trim ( ) ;
321+ } catch ( error ) {
322+ throw new NodeOperationError ( this . getNode ( ) , `Invalid URI override format: ${ uriOverride } ` ) ;
323+ }
324+ } else {
325+ httpStreamUrl = httpCredentials . httpStreamUrl as string ;
326+ }
301327 const messagesPostEndpoint = ( httpCredentials . messagesPostEndpoint as string ) || '' ;
302328 timeout = httpCredentials . httpTimeout as number || 60000 ;
303329
@@ -335,7 +361,20 @@ export class McpClient implements INodeType {
335361 // Dynamically import the SSE client to avoid TypeScript errors
336362 const { SSEClientTransport } = await import ( '@modelcontextprotocol/sdk/client/sse.js' ) ;
337363
338- const sseUrl = sseCredentials . sseUrl as string ;
364+ // Get URI override or use credentials URL
365+ const uriOverride = this . getNodeParameter ( 'uriOverride' , 0 ) as string ;
366+ let sseUrl : string ;
367+ if ( uriOverride && uriOverride . trim ( ) ) {
368+ try {
369+ // Validate URL format
370+ new URL ( uriOverride . trim ( ) ) ;
371+ sseUrl = uriOverride . trim ( ) ;
372+ } catch ( error ) {
373+ throw new NodeOperationError ( this . getNode ( ) , `Invalid URI override format: ${ uriOverride } ` ) ;
374+ }
375+ } else {
376+ sseUrl = sseCredentials . sseUrl as string ;
377+ }
339378 const messagesPostEndpoint = ( sseCredentials . messagesPostEndpoint as string ) || '' ;
340379 timeout = sseCredentials . sseTimeout as number || 60000 ;
341380
0 commit comments