@@ -7,17 +7,29 @@ import { fileURLToPath } from "url";
7
7
import { randomBytes } from "crypto" ;
8
8
9
9
const __dirname = dirname ( fileURLToPath ( import . meta. url ) ) ;
10
+ const DEFAULT_MCP_PROXY_LISTEN_PORT = "6277" ;
10
11
11
12
function delay ( ms ) {
12
13
return new Promise ( ( resolve ) => setTimeout ( resolve , ms , true ) ) ;
13
14
}
14
15
15
- function getClientUrl ( port , authDisabled , sessionToken ) {
16
+ function getClientUrl ( port , authDisabled , sessionToken , serverPort ) {
16
17
const host = process . env . HOST || "localhost" ;
17
18
const baseUrl = `http://${ host } :${ port } ` ;
18
- return authDisabled
19
- ? baseUrl
20
- : `${ baseUrl } /?MCP_PROXY_AUTH_TOKEN=${ sessionToken } ` ;
19
+
20
+ if ( authDisabled ) {
21
+ return baseUrl ;
22
+ }
23
+
24
+ const params = new URLSearchParams ( ) ;
25
+ params . set ( "MCP_PROXY_AUTH_TOKEN" , sessionToken ) ;
26
+
27
+ // Add server port if it's not the default
28
+ if ( serverPort && serverPort !== DEFAULT_MCP_PROXY_LISTEN_PORT ) {
29
+ params . set ( "MCP_PROXY_PORT" , serverPort ) ;
30
+ }
31
+
32
+ return `${ baseUrl } /?${ params . toString ( ) } ` ;
21
33
}
22
34
23
35
async function startDevServer ( serverOptions ) {
@@ -107,8 +119,14 @@ async function startProdServer(serverOptions) {
107
119
}
108
120
109
121
async function startDevClient ( clientOptions ) {
110
- const { CLIENT_PORT , authDisabled, sessionToken, abort, cancelled } =
111
- clientOptions ;
122
+ const {
123
+ CLIENT_PORT ,
124
+ SERVER_PORT ,
125
+ authDisabled,
126
+ sessionToken,
127
+ abort,
128
+ cancelled,
129
+ } = clientOptions ;
112
130
const clientCommand = "npx" ;
113
131
const host = process . env . HOST || "localhost" ;
114
132
const clientArgs = [ "vite" , "--port" , CLIENT_PORT , "--host" , host ] ;
@@ -122,7 +140,12 @@ async function startDevClient(clientOptions) {
122
140
123
141
// Auto-open browser after vite starts
124
142
if ( process . env . MCP_AUTO_OPEN_ENABLED !== "false" ) {
125
- const url = getClientUrl ( CLIENT_PORT , authDisabled , sessionToken ) ;
143
+ const url = getClientUrl (
144
+ CLIENT_PORT ,
145
+ authDisabled ,
146
+ sessionToken ,
147
+ SERVER_PORT ,
148
+ ) ;
126
149
127
150
// Give vite time to start before opening browser
128
151
setTimeout ( ( ) => {
@@ -146,8 +169,14 @@ async function startDevClient(clientOptions) {
146
169
}
147
170
148
171
async function startProdClient ( clientOptions ) {
149
- const { CLIENT_PORT , authDisabled, sessionToken, abort, cancelled } =
150
- clientOptions ;
172
+ const {
173
+ CLIENT_PORT ,
174
+ SERVER_PORT ,
175
+ authDisabled,
176
+ sessionToken,
177
+ abort,
178
+ cancelled,
179
+ } = clientOptions ;
151
180
const inspectorClientPath = resolve (
152
181
__dirname ,
153
182
"../.." ,
@@ -158,7 +187,12 @@ async function startProdClient(clientOptions) {
158
187
159
188
// Only auto-open browser if not cancelled
160
189
if ( process . env . MCP_AUTO_OPEN_ENABLED !== "false" && ! cancelled ) {
161
- const url = getClientUrl ( CLIENT_PORT , authDisabled , sessionToken ) ;
190
+ const url = getClientUrl (
191
+ CLIENT_PORT ,
192
+ authDisabled ,
193
+ sessionToken ,
194
+ SERVER_PORT ,
195
+ ) ;
162
196
open ( url ) ;
163
197
}
164
198
@@ -210,7 +244,7 @@ async function main() {
210
244
}
211
245
212
246
const CLIENT_PORT = process . env . CLIENT_PORT ?? "6274" ;
213
- const SERVER_PORT = process . env . SERVER_PORT ?? "6277" ;
247
+ const SERVER_PORT = process . env . SERVER_PORT ?? DEFAULT_MCP_PROXY_LISTEN_PORT ;
214
248
215
249
console . log (
216
250
isDev
@@ -255,6 +289,7 @@ async function main() {
255
289
try {
256
290
const clientOptions = {
257
291
CLIENT_PORT ,
292
+ SERVER_PORT ,
258
293
authDisabled,
259
294
sessionToken,
260
295
abort,
0 commit comments