@mcp-use/cli 3.0.1 → 3.0.2-canary.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.9_tsx@4.21.0_typescript@5.9.3_yaml@2.8.3/node_modules/tsup/assets/esm_shims.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js","../src/index.ts","../../../node_modules/.pnpm/open@11.0.0/node_modules/open/index.js","../../../node_modules/.pnpm/wsl-utils@0.3.1/node_modules/wsl-utils/index.js","../../../node_modules/.pnpm/is-wsl@3.1.0/node_modules/is-wsl/index.js","../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.js","../../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.js","../../../node_modules/.pnpm/powershell-utils@0.1.0/node_modules/powershell-utils/index.js","../../../node_modules/.pnpm/wsl-utils@0.3.1/node_modules/wsl-utils/utilities.js","../../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/index.js","../../../node_modules/.pnpm/default-browser@5.5.0/node_modules/default-browser/index.js","../../../node_modules/.pnpm/default-browser-id@5.0.1/node_modules/default-browser-id/index.js","../../../node_modules/.pnpm/run-applescript@7.1.0/node_modules/run-applescript/index.js","../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js","../../../node_modules/.pnpm/default-browser@5.5.0/node_modules/default-browser/windows.js","../../../node_modules/.pnpm/is-in-ssh@1.0.0/node_modules/is-in-ssh/index.js","../src/utils/config.ts","../src/utils/api.ts","../src/commands/auth.ts","../src/commands/client.ts","../src/utils/format.ts","../src/utils/session-storage.ts","../src/commands/deploy.ts","../src/utils/git.ts","../src/utils/cloud-urls.ts","../src/utils/project-link.ts","../src/commands/deployments.ts","../src/commands/servers.ts","../src/commands/org.ts","../src/commands/skills.ts","../src/utils/update-check.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","#!/usr/bin/env node\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport \"dotenv/config\";\nimport { spawn } from \"node:child_process\";\nimport { readFileSync } from \"node:fs\";\nimport { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport open from \"open\";\nimport { viteSingleFile } from \"vite-plugin-singlefile\";\nimport { toJSONSchema } from \"zod\";\nimport { loginCommand, logoutCommand, whoamiCommand } from \"./commands/auth.js\";\nimport { createClientCommand } from \"./commands/client.js\";\nimport { deployCommand } from \"./commands/deploy.js\";\nimport { createDeploymentsCommand } from \"./commands/deployments.js\";\nimport { createServersCommand } from \"./commands/servers.js\";\nimport {\n orgCurrentCommand,\n orgListCommand,\n orgSwitchCommand,\n} from \"./commands/org.js\";\nimport { createSkillsCommand } from \"./commands/skills.js\";\nimport { notifyIfUpdateAvailable } from \"./utils/update-check.js\";\nconst program = new Command();\n\nconst packageContent = readFileSync(\n path.join(__dirname, \"../package.json\"),\n \"utf-8\"\n);\nconst packageJson = JSON.parse(packageContent);\nconst packageVersion = packageJson.version || \"unknown\";\n\nprogram\n .name(\"mcp-use\")\n .description(\"Create and run MCP servers with ui resources widgets\")\n .version(packageVersion);\n\n/**\n * Helper to display all package versions\n *\n * @param projectPath - Optional path to user's project directory.\n * When provided, resolves packages from the project's node_modules (standalone installation).\n * When omitted, falls back to relative paths (monorepo development).\n */\nfunction displayPackageVersions(projectPath?: string) {\n const packages = [\n { name: \"@mcp-use/cli\", relativePath: \"../package.json\" },\n {\n name: \"@mcp-use/inspector\",\n relativePath: \"../../inspector/package.json\",\n },\n {\n name: \"create-mcp-use-app\",\n relativePath: \"../../create-mcp-use-app/package.json\",\n },\n {\n name: \"mcp-use\",\n relativePath: \"../../mcp-use/package.json\",\n highlight: true,\n },\n ];\n\n console.log(chalk.gray(\"mcp-use packages:\"));\n\n for (const pkg of packages) {\n const paddedName = pkg.name.padEnd(22);\n\n try {\n let pkgPath: string;\n\n if (projectPath) {\n // Standalone installation: Try to resolve from user's project node_modules\n try {\n const projectRequire = createRequire(\n path.join(projectPath, \"package.json\")\n );\n pkgPath = projectRequire.resolve(`${pkg.name}/package.json`);\n } catch (resolveError) {\n // Package not found in project node_modules, try relative path as fallback\n pkgPath = path.join(__dirname, pkg.relativePath);\n }\n } else {\n // Monorepo development: Use relative paths\n pkgPath = path.join(__dirname, pkg.relativePath);\n }\n\n const pkgContent = readFileSync(pkgPath, \"utf-8\");\n const pkgJson = JSON.parse(pkgContent);\n const version = pkgJson.version || \"unknown\";\n\n if (pkg.highlight) {\n console.log(\n ` ${chalk.cyan.bold(paddedName)} ${chalk.cyan.bold(`v${version}`)}`\n );\n } else {\n console.log(chalk.gray(` ${paddedName} v${version}`));\n }\n } catch (error) {\n // Log debug message when package is not found (aids troubleshooting)\n if (process.env.DEBUG || process.env.VERBOSE) {\n console.log(chalk.dim(` ${paddedName} (not found)`));\n }\n }\n }\n}\n\n// Helper to check if port is available\nasync function isPortAvailable(\n port: number,\n host: string = \"localhost\"\n): Promise<boolean> {\n try {\n await fetch(`http://${host}:${port}`);\n return false; // Port is in use\n } catch {\n return true; // Port is available\n }\n}\n\n// Helper to find an available port\nasync function findAvailablePort(\n startPort: number,\n host: string = \"localhost\"\n): Promise<number> {\n for (let port = startPort; port < startPort + 100; port++) {\n if (await isPortAvailable(port, host)) {\n return port;\n }\n }\n throw new Error(\"No available ports found\");\n}\n\n// Helper to check if server is ready\nasync function waitForServer(\n port: number,\n host: string = \"localhost\",\n maxAttempts = 30\n): Promise<boolean> {\n for (let i = 0; i < maxAttempts; i++) {\n const controller = new AbortController();\n try {\n // Use /inspector/health endpoint for cleaner health checks\n // This avoids 400 errors from the MCP endpoint which requires session headers\n const response = await fetch(`http://${host}:${port}/inspector/health`, {\n signal: controller.signal,\n });\n\n if (response.ok) {\n return true;\n }\n } catch {\n // Server not ready yet\n } finally {\n controller.abort();\n }\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n return false;\n}\n\n// Helper to normalize host for browser connections\n// 0.0.0.0 is valid for server binding but browsers cannot connect to it\nfunction normalizeBrowserHost(host: string): string {\n return host === \"0.0.0.0\" ? \"localhost\" : host;\n}\n\n// Helper to run a command\nfunction runCommand(\n command: string,\n args: string[],\n cwd: string,\n env?: NodeJS.ProcessEnv,\n filterStderr: boolean = false\n): { promise: Promise<void>; process: any } {\n const proc = spawn(command, args, {\n cwd,\n stdio: filterStderr ? ([\"inherit\", \"inherit\", \"pipe\"] as const) : \"inherit\",\n shell: process.platform === \"win32\",\n env: env ? { ...process.env, ...env } : process.env,\n });\n\n // Filter stderr to suppress tsx's \"Force killing\" messages\n if (filterStderr && proc.stderr) {\n proc.stderr.on(\"data\", (data: Buffer) => {\n const text = data.toString();\n // Filter out tsx's force killing message\n if (\n !text.includes(\"Previous process hasn't exited yet\") &&\n !text.includes(\"Force killing\")\n ) {\n process.stderr.write(data);\n }\n });\n }\n\n const promise = new Promise<void>((resolve, reject) => {\n proc.on(\"error\", reject);\n proc.on(\"exit\", (code: number | null) => {\n if (code === 0 || code === 130 || code === 143) {\n // Exit codes: 0 = normal, 130 = SIGINT/SIGTERM, 143 = SIGTERM (alternative)\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n });\n\n return { promise, process: proc };\n}\n\n// Helper to start tunnel and get the URL\nasync function startTunnel(\n port: number,\n subdomain?: string\n): Promise<{ url: string; subdomain: string; process: any }> {\n return new Promise((resolve, reject) => {\n console.log(chalk.gray(`Starting tunnel for port ${port}...`));\n\n const tunnelArgs = [\"--yes\", \"@mcp-use/tunnel\", String(port)];\n\n // Pass subdomain as CLI flag if provided\n if (subdomain) {\n tunnelArgs.push(\"--subdomain\", subdomain);\n }\n\n const proc = spawn(\"npx\", tunnelArgs, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n shell: process.platform === \"win32\",\n });\n\n let resolved = false;\n let isShuttingDown = false;\n\n proc.stdout?.on(\"data\", (data) => {\n const text = data.toString();\n const isShutdownMessage =\n text.includes(\"Shutting down\") || text.includes(\"🛑\");\n const isErrorMessage = text.includes(\"✖\") || text.includes(\"Error:\");\n\n if (!isShuttingDown && !isShutdownMessage && !isErrorMessage) {\n process.stdout.write(text);\n }\n\n // Look for the tunnel URL in the output\n // Expected format: https://subdomain.tunnel-domain.com\n const urlMatch = text.match(/https?:\\/\\/([a-z0-9-]+\\.[a-z0-9.-]+)/i);\n if (urlMatch && !resolved) {\n const url = urlMatch[0];\n // Extract subdomain from URL (e.g., \"happy-cat.local.mcp-use.run\" -> \"happy-cat\")\n const fullDomain = urlMatch[1];\n // Try to extract the subdomain using a case-insensitive regex.\n // If the regex fails, fallback to splitting by '.' and taking the first label.\n // Validate that the extracted subdomain matches the expected format (letters, numbers, hyphens).\n const subdomainMatch = fullDomain.match(/^([a-z0-9-]+)\\./i);\n let extractedSubdomain = subdomainMatch\n ? subdomainMatch[1]\n : fullDomain.split(\".\")[0];\n if (!/^[a-z0-9-]+$/i.test(extractedSubdomain)) {\n console.warn(\n chalk.yellow(\n `Warning: Extracted subdomain \"${extractedSubdomain}\" does not match expected format.`\n )\n );\n extractedSubdomain = \"\";\n }\n resolved = true;\n clearTimeout(setupTimeout);\n console.log(chalk.green.bold(`✓ Tunnel established: ${url}/mcp`));\n resolve({ url, subdomain: extractedSubdomain, process: proc });\n }\n });\n\n proc.stderr?.on(\"data\", (data) => {\n const text = data.toString();\n // Filter out bore debug logs and shutdown messages\n if (\n !isShuttingDown &&\n !text.includes(\"INFO\") &&\n !text.includes(\"bore_cli\") &&\n !text.includes(\"Shutting down\")\n ) {\n process.stderr.write(data);\n }\n });\n\n proc.on(\"error\", (error) => {\n if (!resolved) {\n clearTimeout(setupTimeout);\n reject(new Error(`Failed to start tunnel: ${error.message}`));\n }\n });\n\n proc.on(\"exit\", (code) => {\n if (code !== 0 && !resolved) {\n clearTimeout(setupTimeout);\n reject(new Error(`Tunnel process exited with code ${code}`));\n }\n });\n\n // Add method to mark shutdown state\n (proc as any).markShutdown = () => {\n isShuttingDown = true;\n };\n\n // Timeout after 30 seconds - only for initial setup\n const setupTimeout = setTimeout(() => {\n if (!resolved) {\n proc.kill();\n reject(new Error(\"Tunnel setup timed out\"));\n }\n }, 30000);\n });\n}\n\nasync function findServerFile(projectPath: string): Promise<string> {\n const candidates = [\"index.ts\", \"src/index.ts\", \"server.ts\", \"src/server.ts\"];\n for (const candidate of candidates) {\n try {\n await access(path.join(projectPath, candidate));\n return candidate;\n } catch {\n continue;\n }\n }\n throw new Error(\"No server file found\");\n}\n\nasync function generateToolRegistryTypesForServer(\n projectPath: string,\n serverFileRelative: string\n): Promise<boolean> {\n const serverFile = path.join(projectPath, serverFileRelative);\n const serverFileExists = await access(serverFile)\n .then(() => true)\n .catch(() => false);\n\n if (!serverFileExists) {\n throw new Error(`Server file not found: ${serverFile}`);\n }\n\n const previousHmrMode = (globalThis as any).__mcpUseHmrMode;\n\n try {\n // Prevent server startup side effects while importing registrations.\n (globalThis as any).__mcpUseHmrMode = true;\n (globalThis as any).__mcpUseLastServer = undefined;\n\n const { tsImport } = await import(\"tsx/esm/api\");\n await tsImport(pathToFileURL(serverFile).href, {\n parentURL: import.meta.url,\n tsconfig: path.join(projectPath, \"tsconfig.json\"),\n });\n\n const server = (globalThis as any).__mcpUseLastServer;\n if (!server) {\n throw new Error(\n \"No MCPServer instance found. Make sure your server file creates an MCPServer instance.\"\n );\n }\n\n const mcpUsePath = path.join(projectPath, \"node_modules\", \"mcp-use\");\n const { generateToolRegistryTypes } = await import(\n pathToFileURL(path.join(mcpUsePath, \"dist\", \"src\", \"server\", \"index.js\"))\n .href\n ).then((mod) => mod);\n\n if (!generateToolRegistryTypes) {\n throw new Error(\"generateToolRegistryTypes not found in mcp-use package\");\n }\n\n const success = await generateToolRegistryTypes(\n server.registrations.tools,\n projectPath\n );\n return success;\n } finally {\n (globalThis as any).__mcpUseHmrMode = previousHmrMode ?? false;\n }\n}\n\nasync function buildWidgets(\n projectPath: string,\n options: { inline?: boolean } = {}\n): Promise<Array<{ name: string; metadata: any }>> {\n const { inline = true } = options; // Default to true for VS Code compatibility\n const { promises: fs } = await import(\"node:fs\");\n const { build } = await import(\"vite\");\n const resourcesDir = path.join(projectPath, \"resources\");\n\n // Get base URL from environment or use default\n const mcpUrl = process.env.MCP_URL;\n\n // Check if resources directory exists\n try {\n await access(resourcesDir);\n } catch {\n console.log(\n chalk.gray(\"No resources/ directory found - skipping widget build\")\n );\n return [];\n }\n\n // Find all TSX widget files and folders with widget.tsx\n const entries: Array<{ name: string; path: string }> = [];\n try {\n const files = await fs.readdir(resourcesDir, { withFileTypes: true });\n for (const dirent of files) {\n // Exclude macOS resource fork files and other hidden/system files\n if (dirent.name.startsWith(\"._\") || dirent.name.startsWith(\".DS_Store\")) {\n continue;\n }\n\n if (\n dirent.isFile() &&\n (dirent.name.endsWith(\".tsx\") || dirent.name.endsWith(\".ts\"))\n ) {\n // Single file widget\n entries.push({\n name: dirent.name.replace(/\\.tsx?$/, \"\"),\n path: path.join(resourcesDir, dirent.name),\n });\n } else if (dirent.isDirectory()) {\n // Check for widget.tsx in folder\n const widgetPath = path.join(resourcesDir, dirent.name, \"widget.tsx\");\n try {\n await fs.access(widgetPath);\n entries.push({\n name: dirent.name,\n path: widgetPath,\n });\n } catch {\n // widget.tsx doesn't exist in this folder, skip it\n }\n }\n }\n } catch (error) {\n console.log(chalk.gray(\"No widgets found in resources/ directory\"));\n return [];\n }\n\n if (entries.length === 0) {\n console.log(chalk.gray(\"No widgets found in resources/ directory\"));\n return [];\n }\n\n console.log(\n chalk.gray(\n `Building ${entries.length} widget(s)${inline ? \" (inline mode for VS Code compatibility)\" : \"\"}...`\n )\n );\n\n const react = (await import(\"@vitejs/plugin-react\")).default;\n // @ts-ignore - @tailwindcss/vite may not have type declarations\n const tailwindcss = (await import(\"@tailwindcss/vite\")).default;\n\n // Read favicon config from package.json\n const packageJsonPath = path.join(projectPath, \"package.json\");\n let favicon = \"\";\n try {\n const pkgContent = await fs.readFile(packageJsonPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent);\n favicon = pkg.mcpUse?.favicon || \"\";\n } catch {\n // No package.json or no mcpUse config, that's fine\n }\n\n // Helper function to build a single widget\n const buildSingleWidget = async (entry: { name: string; path: string }) => {\n const widgetName = entry.name;\n const entryPath = entry.path.replace(/\\\\/g, \"/\");\n\n console.log(chalk.gray(` - Building ${widgetName}...`));\n\n // Create temp directory for build artifacts\n const tempDir = path.join(projectPath, \".mcp-use\", widgetName);\n await fs.mkdir(tempDir, { recursive: true });\n\n // Create CSS file with Tailwind directives\n const relativeResourcesPath = path\n .relative(tempDir, resourcesDir)\n .replace(/\\\\/g, \"/\");\n\n // Calculate relative path to mcp-use package dynamically\n const mcpUsePath = path.join(projectPath, \"node_modules\", \"mcp-use\");\n const relativeMcpUsePath = path\n .relative(tempDir, mcpUsePath)\n .replace(/\\\\/g, \"/\");\n\n const cssContent = `@import \"tailwindcss\";\\n\\n/* Configure Tailwind to scan the resources directory and mcp-use package */\\n@source \"${relativeResourcesPath}\";\\n@source \"${relativeMcpUsePath}/**/*.{ts,tsx,js,jsx}\";\\n`;\n await fs.writeFile(path.join(tempDir, \"styles.css\"), cssContent, \"utf8\");\n\n // Create entry file\n const entryContent = `import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport './styles.css'\nimport Component from '${entryPath}'\n\nconst container = document.getElementById('widget-root')\nif (container && Component) {\n const root = createRoot(container)\n root.render(<Component />)\n}\n`;\n\n // Create HTML template\n const htmlContent = `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n <title>${widgetName} Widget</title>${\n favicon\n ? `\n <link rel=\"icon\" href=\"/mcp-use/public/${favicon}\" />`\n : \"\"\n }\n </head>\n <body>\n <div id=\"widget-root\"></div>\n <script type=\"module\" src=\"/entry.tsx\"></script>\n </body>\n</html>`;\n\n await fs.writeFile(path.join(tempDir, \"entry.tsx\"), entryContent, \"utf8\");\n await fs.writeFile(path.join(tempDir, \"index.html\"), htmlContent, \"utf8\");\n\n // Build with Vite\n const outDir = path.join(\n projectPath,\n \"dist\",\n \"resources\",\n \"widgets\",\n widgetName\n );\n\n // Set base URL: use MCP_URL if set, otherwise relative path\n const baseUrl = mcpUrl\n ? `${mcpUrl}/${widgetName}/`\n : `/mcp-use/widgets/${widgetName}/`;\n\n // Extract metadata from widget before building\n let widgetMetadata: any = {};\n try {\n // Use a completely isolated temp directory for metadata extraction to avoid conflicts\n const metadataTempDir = path.join(\n projectPath,\n \".mcp-use\",\n `${widgetName}-metadata`\n );\n await fs.mkdir(metadataTempDir, { recursive: true });\n\n const { createServer } = await import(\"vite\");\n\n // Plugin to provide browser stubs for Node.js-only packages\n const nodeStubsPlugin = {\n name: \"node-stubs\",\n enforce: \"pre\" as const,\n resolveId(id: string) {\n if (id === \"posthog-node\" || id.startsWith(\"posthog-node/\")) {\n return \"\\0virtual:posthog-node-stub\";\n }\n return null;\n },\n load(id: string) {\n if (id === \"\\0virtual:posthog-node-stub\") {\n return `\nexport class PostHog {\n constructor() {}\n capture() {}\n identify() {}\n alias() {}\n flush() { return Promise.resolve(); }\n shutdown() { return Promise.resolve(); }\n}\nexport default PostHog;\n`;\n }\n return null;\n },\n };\n\n const metadataServer = await createServer({\n root: metadataTempDir,\n cacheDir: path.join(metadataTempDir, \".vite-cache\"),\n plugins: [nodeStubsPlugin, tailwindcss(), react()],\n resolve: {\n alias: {\n \"@\": resourcesDir,\n },\n },\n server: {\n middlewareMode: true,\n },\n optimizeDeps: {\n // Exclude Node.js-only packages from browser bundling\n exclude: [\"posthog-node\"],\n },\n ssr: {\n // Force Vite to transform these packages in SSR instead of using external requires\n noExternal: [\"@openai/apps-sdk-ui\", \"react-router\"],\n // Mark Node.js-only packages as external in SSR mode\n external: [\"posthog-node\"],\n },\n define: {\n // Define process.env for SSR context\n \"process.env.NODE_ENV\": JSON.stringify(\n process.env.NODE_ENV || \"development\"\n ),\n \"import.meta.env.DEV\": true,\n \"import.meta.env.PROD\": false,\n \"import.meta.env.MODE\": JSON.stringify(\"development\"),\n \"import.meta.env.SSR\": true,\n },\n clearScreen: false,\n logLevel: \"silent\",\n customLogger: {\n info: () => {},\n warn: () => {},\n error: () => {},\n clearScreen: () => {},\n hasErrorLogged: () => false,\n hasWarned: false,\n warnOnce: () => {},\n },\n });\n\n try {\n const mod = await metadataServer.ssrLoadModule(entryPath);\n if (mod.widgetMetadata) {\n // Handle props (preferred) or inputs (deprecated) field\n const schemaField =\n mod.widgetMetadata.props || mod.widgetMetadata.inputs;\n\n // Check if schemaField is a Zod v4 schema (has ~standard property from Standard Schema)\n // and convert to JSON Schema for serialization using Zod v4's built-in toJsonSchema\n let inputsValue = schemaField || {};\n if (\n schemaField &&\n typeof schemaField === \"object\" &&\n \"~standard\" in schemaField\n ) {\n // Convert Zod schema to JSON Schema for manifest serialization\n try {\n inputsValue = toJSONSchema(schemaField);\n } catch (conversionError) {\n console.warn(\n chalk.yellow(\n ` ⚠ Could not convert schema for ${widgetName}, using raw schema`\n )\n );\n }\n }\n\n // Destructure to exclude props (raw Zod schema) from being serialized\n const {\n props: _rawProps,\n inputs: _rawInputs,\n ...restMetadata\n } = mod.widgetMetadata;\n\n widgetMetadata = {\n ...restMetadata,\n title: mod.widgetMetadata.title || widgetName,\n description: mod.widgetMetadata.description,\n // Store the converted JSON Schema (props field is used by production mount)\n props: inputsValue,\n inputs: inputsValue,\n };\n }\n // Give a moment for any background esbuild operations to complete\n await new Promise((resolve) => setTimeout(resolve, 50));\n } catch (error) {\n console.warn(\n chalk.yellow(` ⚠ Could not extract metadata for ${widgetName}`)\n );\n } finally {\n await metadataServer.close();\n // Clean up metadata temp directory\n try {\n await fs.rm(metadataTempDir, { recursive: true, force: true });\n } catch {\n // Ignore cleanup errors\n }\n }\n } catch (error) {\n // Silently skip metadata extraction if it fails\n }\n\n try {\n // Enhanced plugin to stub Node.js-only packages and built-ins\n const buildNodeStubsPlugin = {\n name: \"node-stubs-build\",\n enforce: \"pre\" as const,\n resolveId(id: string) {\n // Stub posthog-node\n if (id === \"posthog-node\" || id.startsWith(\"posthog-node/\")) {\n return \"\\0virtual:posthog-node-stub\";\n }\n // Stub path module for browser builds\n if (id === \"path\" || id === \"node:path\") {\n return \"\\0virtual:path-stub\";\n }\n return null;\n },\n load(id: string) {\n if (id === \"\\0virtual:posthog-node-stub\") {\n return `\nexport class PostHog {\n constructor() {}\n capture() {}\n identify() {}\n alias() {}\n flush() { return Promise.resolve(); }\n shutdown() { return Promise.resolve(); }\n}\nexport default PostHog;\n`;\n }\n if (id === \"\\0virtual:path-stub\") {\n return `\nexport function join(...paths) {\n return paths.filter(Boolean).join(\"/\").replace(/\\\\/\\\\//g, \"/\").replace(/\\\\/$/, \"\");\n}\nexport function resolve(...paths) {\n return join(...paths);\n}\nexport function dirname(filepath) {\n const parts = filepath.split(\"/\");\n parts.pop();\n return parts.join(\"/\") || \"/\";\n}\nexport function basename(filepath, ext) {\n const parts = filepath.split(\"/\");\n let name = parts[parts.length - 1] || \"\";\n if (ext && name.endsWith(ext)) {\n name = name.slice(0, -ext.length);\n }\n return name;\n}\nexport function extname(filepath) {\n const name = basename(filepath);\n const index = name.lastIndexOf(\".\");\n return index > 0 ? name.slice(index) : \"\";\n}\nexport function normalize(filepath) {\n return filepath.replace(/\\\\/\\\\//g, \"/\");\n}\nexport function isAbsolute(filepath) {\n return filepath.startsWith(\"/\");\n}\nexport const sep = \"/\";\nexport const delimiter = \":\";\nexport const posix = {\n join,\n resolve,\n dirname,\n basename,\n extname,\n normalize,\n isAbsolute,\n sep,\n delimiter,\n};\nexport default {\n join,\n resolve,\n dirname,\n basename,\n extname,\n normalize,\n isAbsolute,\n sep,\n delimiter,\n posix,\n};\n`;\n }\n return null;\n },\n };\n\n // Build plugins array - add viteSingleFile when inlining for VS Code compatibility\n const buildPlugins = inline\n ? [\n buildNodeStubsPlugin,\n tailwindcss(),\n react(),\n viteSingleFile({ removeViteModuleLoader: true }),\n ]\n : [buildNodeStubsPlugin, tailwindcss(), react()];\n\n await build({\n root: tempDir,\n base: baseUrl,\n plugins: buildPlugins,\n // Only use renderBuiltUrl for non-inline builds (external assets need runtime URL resolution)\n ...(inline\n ? {}\n : {\n experimental: {\n renderBuiltUrl: (\n filename: string,\n { hostType }: { hostType: string }\n ) => {\n if ([\"js\", \"css\"].includes(hostType)) {\n return {\n runtime: `window.__getFile(${JSON.stringify(filename)})`,\n };\n } else {\n return { relative: true };\n }\n },\n },\n }),\n resolve: {\n alias: {\n \"@\": resourcesDir,\n },\n },\n optimizeDeps: {\n // Exclude Node.js-only packages from browser bundling\n exclude: [\"posthog-node\"],\n },\n build: {\n outDir,\n emptyOutDir: true,\n // Disable source maps to avoid CSP eval violations\n // Source maps can use eval-based mappings which break strict CSP policies\n sourcemap: false,\n // Minify for smaller bundle size\n minify: true,\n // Widgets bundle React+Zod; suppress expected chunk size warning\n chunkSizeWarningLimit: 1024,\n // For inline builds, disable CSS code splitting and inline all assets\n ...(inline\n ? {\n cssCodeSplit: false,\n assetsInlineLimit: 100000000, // Inline all assets under 100MB (effectively all)\n }\n : {}),\n rolldownOptions: {\n input: path.join(tempDir, \"index.html\"),\n external: (id) => {\n return false;\n },\n },\n },\n });\n\n // Post-process JS bundles to patch Zod's JIT compilation\n // This prevents CSP eval violations in sandboxed iframes (MCP Apps hosts)\n // See: https://github.com/colinhacks/zod/issues/4461\n try {\n const assetsDir = path.join(outDir, \"assets\");\n const assetFiles = await fs.readdir(assetsDir);\n const jsFiles = assetFiles.filter((f) => f.endsWith(\".js\"));\n\n for (const jsFile of jsFiles) {\n const jsPath = path.join(assetsDir, jsFile);\n let content = await fs.readFile(jsPath, \"utf8\");\n\n // Patch Zod's globalConfig to disable JIT compilation\n // Zod 4.x uses: const globalConfig={};function config(o){return globalConfig}\n // After minification: const X={};function Y(o){return X}\n // We match the pattern where an empty object const is followed by a function returning it\n const zodConfigPatterns = [\n // Non-minified: export const globalConfig = {}\n /export\\s+const\\s+globalConfig\\s*=\\s*\\{\\s*\\}/g,\n // Minified pattern: ZodEncodeError\"}}const X={};function followed by return X\n // This is the unique signature of Zod's globalConfig\n /ZodEncodeError[^}]*\\}\\}const\\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*=\\s*\\{\\s*\\}/g,\n ];\n\n let patched = false;\n for (const pattern of zodConfigPatterns) {\n if (pattern.test(content)) {\n // Reset lastIndex for global regex\n pattern.lastIndex = 0;\n content = content.replace(pattern, (match) => {\n return match.replace(/=\\s*\\{\\s*\\}/, \"={jitless:true}\");\n });\n patched = true;\n }\n }\n\n if (patched) {\n await fs.writeFile(jsPath, content, \"utf8\");\n console.log(chalk.gray(` → Patched Zod JIT in ${jsFile}`));\n }\n }\n } catch (error) {\n // Assets directory might not exist for some builds, that's okay\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n console.warn(chalk.yellow(` ⚠ Failed to patch Zod JIT: ${error}`));\n }\n }\n\n // Post-process HTML for static deployments (e.g., Supabase)\n // If MCP_SERVER_URL is set, inject window globals at build time\n const mcpServerUrl = process.env.MCP_SERVER_URL;\n if (mcpServerUrl) {\n try {\n const htmlPath = path.join(outDir, \"index.html\");\n let html = await fs.readFile(htmlPath, \"utf8\");\n\n // Inject window.__mcpPublicUrl and window.__getFile into <head>\n // Note: __mcpPublicUrl uses standard format for useWidget to derive mcp_url\n // __mcpPublicAssetsUrl points to where public files are actually stored\n const injectionScript = `<script>window.__getFile = (filename) => { return \"${mcpUrl}/${widgetName}/\"+filename }; window.__mcpPublicUrl = \"${mcpServerUrl}/mcp-use/public\"; window.__mcpPublicAssetsUrl = \"${mcpUrl}/public\";</script>`;\n\n // Check if script tag already exists in head\n if (!html.includes(\"window.__mcpPublicUrl\")) {\n html = html.replace(\n /<head[^>]*>/i,\n `<head>\\n ${injectionScript}`\n );\n }\n\n // Update base href if it exists, or inject it\n if (/<base\\s+[^>]*\\/?>/i.test(html)) {\n // Replace existing base tag\n html = html.replace(\n /<base\\s+[^>]*\\/?>/i,\n `<base href=\"${mcpServerUrl}\">`\n );\n } else {\n // Inject base tag after the injection script\n html = html.replace(\n injectionScript,\n `${injectionScript}\\n <base href=\"${mcpServerUrl}\">`\n );\n }\n\n await fs.writeFile(htmlPath, html, \"utf8\");\n console.log(\n chalk.gray(` → Injected MCP_SERVER_URL into ${widgetName}`)\n );\n } catch (error) {\n console.warn(\n chalk.yellow(\n ` ⚠ Failed to post-process HTML for ${widgetName}:`,\n error\n )\n );\n }\n }\n\n console.log(chalk.green(` ✓ Built ${widgetName}`));\n return { name: widgetName, metadata: widgetMetadata };\n } catch (error) {\n console.error(chalk.red(` ✗ Failed to build ${widgetName}:`), error);\n return null;\n }\n };\n\n // Build all widgets in parallel\n const buildResults = await Promise.all(\n entries.map((entry) => buildSingleWidget(entry))\n );\n\n // Filter out failed builds (null results)\n const builtWidgets = buildResults.filter(\n (result): result is { name: string; metadata: any } => result !== null\n );\n\n return builtWidgets;\n}\n\n/**\n * Collect TypeScript files from tsconfig include/exclude patterns using only\n * Node.js built-ins (no globby/fast-glob, which break in ESM bundles).\n */\nasync function collectTsFiles(\n projectPath: string,\n includePatterns: string[],\n excludePatterns: string[]\n): Promise<string[]> {\n const { promises: fs } = await import(\"node:fs\");\n\n // Separate literal files from directory globs\n const literalFiles: string[] = [];\n const dirPrefixes: string[] = [];\n\n for (const pattern of includePatterns) {\n if (pattern.includes(\"*\")) {\n // Extract directory prefix before the first wildcard\n const prefix = pattern.split(\"*\")[0].replace(/\\/+$/, \"\") || \".\";\n dirPrefixes.push(prefix);\n } else {\n literalFiles.push(pattern);\n }\n }\n\n const files: string[] = [];\n\n // Add literal files that exist and are .ts/.tsx (not .d.ts)\n for (const file of literalFiles) {\n if (/\\.tsx?$/.test(file) && !file.endsWith(\".d.ts\")) {\n try {\n await access(path.join(projectPath, file));\n files.push(file);\n } catch {\n // File doesn't exist, skip\n }\n }\n }\n\n // Recursively scan directories\n const excludeSet = new Set(excludePatterns.map((e) => e.replace(/\\*+/g, \"\")));\n for (const prefix of dirPrefixes) {\n const dirPath = path.join(projectPath, prefix);\n try {\n const entries = await fs.readdir(dirPath, { recursive: true });\n for (const entry of entries) {\n const entryStr = String(entry);\n const rel = path.join(prefix, entryStr);\n if (\n /\\.tsx?$/.test(entryStr) &&\n !entryStr.endsWith(\".d.ts\") &&\n !excludeSet.has(rel.split(path.sep)[0])\n ) {\n files.push(rel);\n }\n }\n } catch {\n // Directory doesn't exist, skip\n }\n }\n\n return files;\n}\n\n/**\n * Transpile TypeScript files using esbuild instead of tsc.\n * esbuild strips types without analyzing them, so it cannot OOM on complex types.\n * Reads the project's tsconfig.json to determine source files, outDir, and compiler options.\n */\nasync function transpileWithEsbuild(projectPath: string): Promise<void> {\n const esbuild = await import(\"esbuild\");\n const { promises: fs } = await import(\"node:fs\");\n\n const tsconfigPath = path.join(projectPath, \"tsconfig.json\");\n let tsconfig: any = {};\n try {\n const raw = await fs.readFile(tsconfigPath, \"utf-8\");\n tsconfig = JSON.parse(raw);\n } catch {\n // No tsconfig — use defaults\n }\n\n const compilerOptions = tsconfig.compilerOptions || {};\n const outDir = compilerOptions.outDir || \"./dist\";\n const includePatterns = tsconfig.include || [\"**/*.ts\", \"**/*.tsx\"];\n const excludePatterns = tsconfig.exclude || [\"node_modules\", \"dist\"];\n\n const files = await collectTsFiles(\n projectPath,\n includePatterns,\n excludePatterns\n );\n\n if (files.length === 0) {\n console.log(chalk.yellow(\" No TypeScript files found to transpile.\"));\n return;\n }\n\n // Map tsconfig jsx setting to esbuild equivalent\n const jsxMap: Record<string, \"automatic\" | \"transform\" | \"preserve\"> = {\n \"react-jsx\": \"automatic\",\n \"react-jsxdev\": \"automatic\",\n react: \"transform\",\n preserve: \"preserve\",\n };\n const jsx = jsxMap[compilerOptions.jsx] || undefined;\n\n const target = (compilerOptions.target || \"ES2022\").toLowerCase();\n\n const moduleStr = (compilerOptions.module || \"ESNext\").toLowerCase();\n const format: \"esm\" | \"cjs\" = moduleStr.includes(\"commonjs\") ? \"cjs\" : \"esm\";\n\n // Match tsc's rootDir behavior: when set, esbuild's outbase should map to it\n // so that `src/index.ts` → `dist/index.js` (not `dist/src/index.js`).\n const outbase = compilerOptions.rootDir\n ? path.resolve(projectPath, compilerOptions.rootDir)\n : projectPath;\n\n await esbuild.build({\n entryPoints: files.map((f) => path.join(projectPath, f)),\n outdir: path.join(projectPath, outDir),\n outbase,\n bundle: false,\n format,\n target,\n jsx,\n sourcemap: compilerOptions.sourceMap ?? true,\n tsconfig: tsconfigPath,\n platform: \"node\",\n logLevel: \"warning\",\n });\n}\n\nprogram\n .command(\"build\")\n .description(\"Build TypeScript and MCP UI widgets\")\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--with-inspector\", \"Include inspector in production build\")\n .option(\n \"--inline\",\n \"Inline all JS/CSS into HTML (required for VS Code MCP Apps)\"\n )\n .option(\"--no-inline\", \"Keep JS/CSS as separate files (default)\")\n .option(\"--no-typecheck\", \"Skip TypeScript type checking (faster builds)\")\n .action(async (options) => {\n try {\n const projectPath = path.resolve(options.path);\n const { promises: fs } = await import(\"node:fs\");\n\n displayPackageVersions(projectPath);\n\n // Build widgets first (this generates schemas)\n // Use --inline flag for VS Code compatibility (VS Code's CSP blocks external scripts)\n const builtWidgets = await buildWidgets(projectPath, {\n inline: options.inline ?? false,\n });\n\n // Find the source server file before building\n let sourceServerFile: string | undefined;\n try {\n sourceServerFile = await findServerFile(projectPath);\n } catch {\n // No server file found, that's okay for widget-only projects\n }\n\n if (sourceServerFile) {\n console.log(chalk.gray(\"Generating tool registry types...\"));\n const typeGenOk = await generateToolRegistryTypesForServer(\n projectPath,\n sourceServerFile\n );\n if (typeGenOk) {\n console.log(chalk.green(\"✓ Tool registry types generated\"));\n } else {\n console.log(\n chalk.yellow(\n \"⚠ Tool registry type generation had errors (non-blocking)\"\n )\n );\n }\n }\n\n // Transpile TypeScript with esbuild (fast, no OOM on complex types).\n // Type checking is a separate step via tsc --noEmit (skippable with --no-typecheck).\n console.log(chalk.gray(\"Building TypeScript...\"));\n await transpileWithEsbuild(projectPath);\n console.log(chalk.green(\"✓ TypeScript build complete!\"));\n\n // Type-check with tsc --noEmit (separate from transpilation).\n // Uses the locally installed typescript binary directly rather than npx to\n // prevent npx from auto-installing the unrelated `tsc@2.0.4` package.\n if (options.typecheck !== false) {\n console.log(chalk.gray(\"Type checking...\"));\n try {\n await runCommand(\n \"node\",\n [\n \"--max-old-space-size=4096\",\n path.join(\n projectPath,\n \"node_modules\",\n \"typescript\",\n \"bin\",\n \"tsc\"\n ),\n \"--noEmit\",\n ],\n projectPath\n ).promise;\n console.log(chalk.green(\"✓ Type check passed!\"));\n } catch {\n console.error(\n chalk.red(\"✗ Type check failed.\") +\n chalk.gray(\" Use --no-typecheck to skip.\")\n );\n process.exit(1);\n }\n }\n\n // Determine where the entry point was compiled to\n let entryPoint: string | undefined;\n if (sourceServerFile) {\n // Check possible output locations based on common tsconfig patterns\n // tsc may or may not preserve the src/ prefix depending on rootDir setting\n const baseName = path.basename(sourceServerFile, \".ts\") + \".js\";\n const possibleOutputs = [\n `dist/${baseName}`, // rootDir set to project root or src\n `dist/src/${baseName}`, // no rootDir, source in src/\n `dist/${sourceServerFile.replace(/\\.ts$/, \".js\")}`, // exact path preserved\n ];\n\n for (const candidate of possibleOutputs) {\n try {\n await access(path.join(projectPath, candidate));\n entryPoint = candidate;\n break;\n } catch {\n continue;\n }\n }\n }\n\n // Copy public folder if it exists\n const publicDir = path.join(projectPath, \"public\");\n try {\n await fs.access(publicDir);\n console.log(chalk.gray(\"Copying public assets...\"));\n await fs.cp(publicDir, path.join(projectPath, \"dist\", \"public\"), {\n recursive: true,\n });\n console.log(chalk.green(\"✓ Public assets copied\"));\n } catch {\n // Public folder doesn't exist, skip\n }\n\n // Create build manifest\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n\n // Read existing manifest to preserve tunnel subdomain and other fields\n let existingManifest: any = {};\n try {\n const existingContent = await fs.readFile(manifestPath, \"utf-8\");\n existingManifest = JSON.parse(existingContent);\n } catch {\n // File doesn't exist, that's okay\n }\n\n // Transform builtWidgets array into widgets object with metadata\n const widgetsData: Record<string, any> = {};\n for (const widget of builtWidgets) {\n widgetsData[widget.name] = widget.metadata;\n }\n\n // Convert to boolean: true if flag is present, false otherwise\n const includeInspector = !!options.withInspector;\n\n // Generate a build ID (hash of build time + random component for uniqueness)\n const buildTime = new Date().toISOString();\n const { createHash } = await import(\"node:crypto\");\n const buildId = createHash(\"sha256\")\n .update(buildTime + Math.random().toString())\n .digest(\"hex\")\n .substring(0, 16); // Use first 16 chars for shorter IDs\n\n // Merge with existing manifest, preserving tunnel and other fields\n const manifest = {\n ...existingManifest, // Preserve existing fields like tunnel\n includeInspector,\n buildTime,\n buildId,\n entryPoint, // Server entry point for `mcp-use start`\n widgets: widgetsData,\n };\n\n await fs.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.writeFile(\n manifestPath,\n JSON.stringify(manifest, null, 2),\n \"utf8\"\n );\n console.log(chalk.green(\"✓ Build manifest created\"));\n\n console.log(chalk.green.bold(`\\n✓ Build complete!`));\n if (builtWidgets.length > 0) {\n console.log(chalk.gray(` ${builtWidgets.length} widget(s) built`));\n }\n if (options.withInspector) {\n console.log(chalk.gray(\" Inspector included\"));\n }\n process.exit(0);\n } catch (error) {\n console.error(chalk.red(\"Build failed:\"), error);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"dev\")\n .description(\"Run development server with auto-reload and inspector\")\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--port <port>\", \"Server port\", \"3000\")\n .option(\n \"--host <host>\",\n \"Server host (use 0.0.0.0 to listen on all interfaces)\",\n \"0.0.0.0\"\n )\n .option(\"--no-open\", \"Do not auto-open inspector\")\n .option(\"--no-hmr\", \"Disable hot module reloading (use tsx watch instead)\")\n .option(\"--tunnel\", \"Expose server through a tunnel\")\n .action(async (options) => {\n try {\n process.env.MCP_USE_CLI_DEV = \"1\";\n const projectPath = path.resolve(options.path);\n let port = parseInt(options.port, 10);\n const host = options.host;\n const useHmr = options.hmr !== false;\n\n displayPackageVersions(projectPath);\n\n // Check if port is available, find alternative if needed\n if (!(await isPortAvailable(port, host))) {\n console.log(chalk.yellow.bold(`⚠️ Port ${port} is already in use`));\n const availablePort = await findAvailablePort(port, host);\n console.log(chalk.green.bold(`✓ Using port ${availablePort} instead`));\n port = availablePort;\n }\n\n // Find the main source file\n const serverFile = await findServerFile(projectPath);\n\n // Start tunnel if requested\n let tunnelProcess: any = undefined;\n let tunnelSubdomain: string | undefined = undefined;\n let tunnelUrl: string | undefined = undefined;\n\n if (options.tunnel) {\n try {\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n let existingSubdomain: string | undefined;\n\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n const manifest = JSON.parse(manifestContent);\n existingSubdomain = manifest.tunnel?.subdomain;\n if (existingSubdomain) {\n console.log(\n chalk.gray(`Found existing subdomain: ${existingSubdomain}`)\n );\n const apiBase =\n process.env.MCP_USE_TUNNEL_API || \"https://local.mcp-use.run\";\n try {\n await fetch(`${apiBase}/api/tunnels/${existingSubdomain}`, {\n method: \"DELETE\",\n });\n } catch {\n // Best-effort cleanup; ignore DELETE failures\n }\n }\n } catch {\n // Manifest doesn't exist or is invalid, that's okay\n }\n\n let tunnelInfo: Awaited<ReturnType<typeof startTunnel>>;\n try {\n tunnelInfo = await startTunnel(port, existingSubdomain);\n } catch (e) {\n if (existingSubdomain) {\n console.log(\n chalk.yellow(\n `Subdomain \"${existingSubdomain}\" unavailable, requesting a new one…`\n )\n );\n tunnelInfo = await startTunnel(port);\n } else {\n throw e;\n }\n }\n tunnelUrl = tunnelInfo.url;\n tunnelProcess = tunnelInfo.process;\n tunnelSubdomain = tunnelInfo.subdomain;\n\n // Persist subdomain for reuse across restarts\n try {\n let manifest: any = {};\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n manifest = JSON.parse(manifestContent);\n } catch {\n // File doesn't exist, create new manifest\n }\n\n if (!manifest.tunnel) {\n manifest.tunnel = {};\n }\n manifest.tunnel.subdomain = tunnelSubdomain;\n\n await mkdir(path.dirname(manifestPath), { recursive: true });\n await writeFile(\n manifestPath,\n JSON.stringify(manifest, null, 2),\n \"utf-8\"\n );\n } catch (error) {\n console.warn(\n chalk.yellow(\n `⚠️ Failed to save subdomain to mcp-use.json: ${error instanceof Error ? error.message : \"Unknown error\"}`\n )\n );\n }\n } catch (error) {\n console.error(chalk.red(\"Failed to start tunnel:\"), error);\n process.exit(1);\n }\n }\n\n // Set environment variables for the server\n const mcpUrl = `http://${host}:${port}`;\n process.env.PORT = String(port);\n process.env.HOST = host;\n process.env.NODE_ENV = \"development\";\n // Tunnel URL takes priority; otherwise preserve user-provided MCP_URL (e.g., for reverse proxy setups)\n if (tunnelUrl) {\n process.env.MCP_URL = tunnelUrl;\n } else if (!process.env.MCP_URL) {\n process.env.MCP_URL = mcpUrl;\n }\n if (!useHmr) {\n // Fallback: Use tsx watch (restarts process on changes)\n console.log(chalk.gray(\"HMR disabled, using tsx watch (full restart)\"));\n\n const processes: any[] = [];\n const env: NodeJS.ProcessEnv = {\n PORT: String(port),\n HOST: host,\n NODE_ENV: \"development\",\n // Preserve user-provided MCP_URL (e.g., for reverse proxy setups)\n MCP_URL: process.env.MCP_URL || mcpUrl,\n };\n\n // Use local tsx if available, otherwise fall back to npx\n const { createRequire } = await import(\"node:module\");\n let cmd: string;\n let args: string[];\n try {\n const projectRequire = createRequire(\n path.join(projectPath, \"package.json\")\n );\n // Resolve tsx bin from package.json instead of hardcoding internal path\n const tsxPkgPath = projectRequire.resolve(\"tsx/package.json\");\n const tsxPkg = JSON.parse(await readFile(tsxPkgPath, \"utf-8\"));\n // Handle both string and object forms of the bin field\n let binPath: string;\n if (typeof tsxPkg.bin === \"string\") {\n binPath = tsxPkg.bin;\n } else if (tsxPkg.bin && typeof tsxPkg.bin === \"object\") {\n // Use 'tsx' entry or the first entry\n binPath = tsxPkg.bin.tsx || Object.values(tsxPkg.bin)[0];\n } else {\n throw new Error(\"No bin field found in tsx package.json\");\n }\n const tsxBin = path.resolve(path.dirname(tsxPkgPath), binPath);\n cmd = \"node\";\n args = [tsxBin, \"watch\", serverFile];\n } catch (error) {\n // tsx not found locally or bin resolution failed, use npx\n console.log(\n chalk.yellow(\n `Could not resolve local tsx: ${error instanceof Error ? error.message : \"unknown error\"}`\n )\n );\n cmd = \"npx\";\n args = [\"tsx\", \"watch\", serverFile];\n }\n\n const serverCommand = runCommand(cmd, args, projectPath, env, true);\n processes.push(serverCommand.process);\n\n // Auto-open inspector if enabled\n if (options.open !== false) {\n const startTime = Date.now();\n const browserHost = normalizeBrowserHost(host);\n const ready = await waitForServer(port, browserHost);\n if (ready) {\n const mcpEndpoint = `http://${browserHost}:${port}/mcp`;\n const autoConnectEndpoint = tunnelUrl\n ? `${tunnelUrl}/mcp`\n : mcpEndpoint;\n const inspectorUrl = `http://${browserHost}:${port}/inspector?autoConnect=${encodeURIComponent(autoConnectEndpoint)}`;\n\n const readyTime = Date.now() - startTime;\n console.log(chalk.green.bold(`✓ Ready in ${readyTime}ms`));\n console.log(\n chalk.whiteBright(`Local: http://${browserHost}:${port}`)\n );\n console.log(chalk.whiteBright(`Network: http://${host}:${port}`));\n console.log(chalk.whiteBright(`MCP: ${mcpEndpoint}`));\n if (tunnelUrl) {\n console.log(chalk.whiteBright(`Tunnel: ${tunnelUrl}/mcp`));\n }\n console.log(chalk.whiteBright(`Inspector: ${inspectorUrl}\\n`));\n await open(inspectorUrl);\n }\n }\n\n // Handle cleanup\n let noHmrCleanupInProgress = false;\n const cleanup = async () => {\n if (noHmrCleanupInProgress) return;\n noHmrCleanupInProgress = true;\n\n console.log(chalk.gray(\"\\n\\nShutting down...\"));\n\n if (\n tunnelProcess &&\n typeof (tunnelProcess as any).markShutdown === \"function\"\n ) {\n (tunnelProcess as any).markShutdown();\n }\n\n if (tunnelSubdomain) {\n try {\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n await fetch(`${apiBase}/api/tunnels/${tunnelSubdomain}`, {\n method: \"DELETE\",\n });\n } catch {\n // Ignore cleanup errors\n }\n }\n\n processes.forEach((proc) => {\n if (proc && typeof proc.kill === \"function\") {\n proc.kill(\"SIGINT\");\n }\n });\n\n if (tunnelProcess && typeof tunnelProcess.kill === \"function\") {\n tunnelProcess.kill(\"SIGINT\");\n }\n\n setTimeout(() => process.exit(0), 2000);\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n await new Promise(() => {});\n return;\n }\n\n // HMR mode: Use chokidar to watch files and sync registrations\n console.log(\n chalk.gray(\n \"HMR enabled - changes will hot reload without dropping connections\"\n )\n );\n\n const chokidarModule = await import(\"chokidar\");\n const chokidar = (chokidarModule as any).default || chokidarModule;\n const { fileURLToPath } = await import(\"node:url\");\n const { createRequire } = await import(\"node:module\");\n\n // Try to get tsx's tsImport function for TypeScript support\n let tsImport:\n | ((\n specifier: string,\n parentUrlOrOptions:\n | string\n | {\n parentURL: string;\n onImport?: (file: string) => void;\n tsconfig?: string | false;\n }\n ) => Promise<any>)\n | null = null;\n try {\n const projectRequire = createRequire(\n path.join(projectPath, \"package.json\")\n );\n // Resolve tsx/esm/api from the user's project\n const tsxApiPath = projectRequire.resolve(\"tsx/esm/api\");\n const tsxApi = await import(pathToFileURL(tsxApiPath).href);\n tsImport = tsxApi.tsImport;\n } catch {\n // tsx not found - continue without it (JS files only, or tsx might be globally available)\n console.log(\n chalk.yellow(\n \"Warning: tsx not found in project dependencies. TypeScript HMR may not work.\\n\" +\n \"Add tsx to your devDependencies: npm install -D tsx\"\n )\n );\n }\n\n const serverFilePath = path.join(projectPath, serverFile);\n const serverFileUrl = pathToFileURL(serverFilePath).href;\n\n // Set HMR mode flag - this tells MCPServer.listen() to skip during imports\n // CLI manages the server lifecycle instead\n (globalThis as any).__mcpUseHmrMode = true;\n\n // Helper to import server module with cache busting\n const importServerModule = async () => {\n // Clear the global reference so we can detect if a new instance was created\n const previousServer = (globalThis as any).__mcpUseLastServer;\n (globalThis as any).__mcpUseLastServer = null;\n\n // Use tsx's tsImport if available for TypeScript support\n // Otherwise fall back to native import (for JS files or if tsx is globally loaded)\n if (tsImport) {\n // tsImport handles TypeScript compilation and does not cache loaded modules,\n // so the entire dependency tree is re-evaluated on each call.\n // The ?t= timestamp is kept as a safety measure for edge cases.\n await tsImport(`${serverFileUrl}?t=${Date.now()}`, {\n parentURL: import.meta.url,\n onImport: (file: string) => {\n const filePath = file.startsWith(\"file://\")\n ? fileURLToPath(file)\n : file;\n if (\n !filePath.includes(\"node_modules\") &&\n filePath.startsWith(projectPath)\n ) {\n console.debug(`[HMR] Loaded: ${file}`);\n }\n },\n });\n } else {\n // Native import - works for JS files or if tsx is already loaded via --import.\n // WARNING: Native import() caches modules by URL. The ?t= timestamp busts\n // the cache for the entry file only; sub-imports will use cached versions.\n await import(`${serverFileUrl}?t=${Date.now()}`);\n }\n\n // Get the server instance from the global registry\n // No export required - MCPServer tracks itself when created via globalThis\n const instance = (globalThis as any).__mcpUseLastServer;\n\n if (!instance) {\n // No new instance was created - restore the previous one\n (globalThis as any).__mcpUseLastServer = previousServer;\n console.warn(\n chalk.yellow(\n \"[HMR] Warning: Module re-import did not create a new MCPServer instance. \" +\n \"The module may be cached. Check that your server file creates an MCPServer.\"\n )\n );\n return null;\n }\n\n if (instance === previousServer) {\n // Same instance reference - the module was cached and not re-evaluated\n console.warn(\n chalk.yellow(\n \"[HMR] Warning: Module re-import returned the same server instance. \" +\n \"The module may not have been re-evaluated. \" +\n (!tsImport\n ? \"Install tsx as a devDependency for reliable TypeScript HMR.\"\n : \"This may be a tsx caching issue.\")\n )\n );\n return null;\n }\n\n return instance;\n };\n\n // Initial import\n console.log(chalk.gray(`Loading server from ${serverFile}...`));\n let runningServer: any;\n\n try {\n runningServer = await importServerModule();\n\n if (!runningServer) {\n console.error(\n chalk.red(\n \"Error: Could not find MCPServer instance.\\n\" +\n \"Make sure your server file creates an MCPServer:\\n\" +\n \" const server = new MCPServer({ name: 'my-server', version: '1.0.0' });\"\n )\n );\n process.exit(1);\n }\n\n // Check if it has the required methods\n if (typeof runningServer.listen !== \"function\") {\n console.error(\n chalk.red(\"Error: MCPServer instance must have a listen() method\")\n );\n process.exit(1);\n }\n\n // Start the server - temporarily disable HMR flag so listen() works\n const startTime = Date.now();\n (globalThis as any).__mcpUseHmrMode = false;\n await runningServer.listen(port);\n (globalThis as any).__mcpUseHmrMode = true;\n\n // Auto-open inspector if enabled\n if (options.open !== false) {\n const browserHost = normalizeBrowserHost(host);\n const ready = await waitForServer(port, browserHost);\n if (ready) {\n const mcpEndpoint = `http://${browserHost}:${port}/mcp`;\n const autoConnectEndpoint = tunnelUrl\n ? `${tunnelUrl}/mcp`\n : mcpEndpoint;\n const inspectorUrl = `http://${browserHost}:${port}/inspector?autoConnect=${encodeURIComponent(autoConnectEndpoint)}`;\n\n const readyTime = Date.now() - startTime;\n console.log(chalk.green.bold(`✓ Ready in ${readyTime}ms`));\n console.log(\n chalk.whiteBright(`Local: http://${browserHost}:${port}`)\n );\n console.log(chalk.whiteBright(`Network: http://${host}:${port}`));\n console.log(chalk.whiteBright(`MCP: ${mcpEndpoint}`));\n if (tunnelUrl) {\n console.log(chalk.whiteBright(`Tunnel: ${tunnelUrl}/mcp`));\n }\n console.log(chalk.whiteBright(`Inspector: ${inspectorUrl}`));\n console.log(chalk.gray(`Watching for changes...\\n`));\n await open(inspectorUrl);\n }\n }\n } catch (error: any) {\n console.error(\n chalk.red(\"Failed to start server:\"),\n error?.message || error\n );\n if (error?.stack) {\n console.error(chalk.gray(error.stack));\n }\n process.exit(1);\n }\n\n // Log success when --no-open is used\n if (options.open === false) {\n const mcpEndpoint = `http://${host}:${port}/mcp`;\n console.log(chalk.green.bold(`✓ Server ready`));\n console.log(chalk.whiteBright(`Local: http://${host}:${port}`));\n console.log(chalk.whiteBright(`MCP: ${mcpEndpoint}`));\n if (tunnelUrl) {\n console.log(chalk.whiteBright(`Tunnel: ${tunnelUrl}/mcp`));\n }\n console.log(chalk.gray(`Watching for changes...\\n`));\n }\n\n // Watch for file changes - watch .ts/.tsx files in project directory\n let watcher = chokidar.watch(\".\", {\n cwd: projectPath,\n ignored: (path: string, stats?: any) => {\n // Normalize path separators for cross-platform compatibility\n const normalizedPath = path.replace(/\\\\/g, \"/\");\n\n // Ignore dotfiles and dot directories (hidden files)\n if (/(^|\\/)\\.[^/]/.test(normalizedPath)) {\n return true;\n }\n\n // Ignore node_modules directory and all its contents\n if (\n normalizedPath.includes(\"/node_modules/\") ||\n normalizedPath.endsWith(\"/node_modules\")\n ) {\n return true;\n }\n\n // Ignore dist directory and all its contents\n if (\n normalizedPath.includes(\"/dist/\") ||\n normalizedPath.endsWith(\"/dist\")\n ) {\n return true;\n }\n\n // Ignore resources directory (widgets watched separately by vite)\n if (\n normalizedPath.includes(\"/resources/\") ||\n normalizedPath.endsWith(\"/resources\")\n ) {\n return true;\n }\n\n // Ignore .d.ts files (TypeScript declaration files)\n if (stats?.isFile() && normalizedPath.endsWith(\".d.ts\")) {\n return true;\n }\n\n return false;\n },\n persistent: true,\n ignoreInitial: true,\n depth: 3, // Limit depth to avoid watching too many files\n });\n\n watcher\n .on(\"ready\", () => {\n const watched = watcher.getWatched();\n const dirs = Object.keys(watched);\n console.log(\n chalk.gray(`[HMR] Watcher ready, watching ${dirs.length} paths`)\n );\n })\n .on(\"error\", (error: unknown) => {\n console.error(\n chalk.red(\n `[HMR] Watcher error: ${error instanceof Error ? error.message : String(error)}`\n )\n );\n });\n\n // Debounce rapid changes\n let reloadTimeout: NodeJS.Timeout | null = null;\n let isReloading = false;\n\n const hmrOnChange = async (filePath: string) => {\n // Only handle .ts and .tsx files (not .d.ts)\n if (\n (!filePath.endsWith(\".ts\") && !filePath.endsWith(\".tsx\")) ||\n filePath.endsWith(\".d.ts\")\n ) {\n return;\n }\n if (isReloading) return;\n\n // Debounce multiple rapid changes\n if (reloadTimeout) {\n clearTimeout(reloadTimeout);\n }\n\n reloadTimeout = setTimeout(async () => {\n isReloading = true;\n // filePath is already relative due to cwd option\n console.log(chalk.yellow(`\\n[HMR] File changed: ${filePath}`));\n\n try {\n // Re-import the server module (this creates a new MCPServer instance)\n const newServer = await importServerModule();\n\n if (!newServer) {\n console.warn(\n chalk.yellow(\n \"[HMR] Warning: No MCPServer instance found after reload, skipping\"\n )\n );\n isReloading = false;\n return;\n }\n\n // Check if the running server has syncRegistrationsFrom\n if (typeof runningServer.syncRegistrationsFrom !== \"function\") {\n console.warn(\n chalk.yellow(\n \"[HMR] Warning: Server does not support hot reload (missing syncRegistrationsFrom)\"\n )\n );\n isReloading = false;\n return;\n }\n\n // Sync registrations from the new server to the running server\n const syncResult = runningServer.syncRegistrationsFrom(newServer);\n\n if (syncResult && syncResult.totalChanges > 0) {\n const parts: string[] = [];\n if (\n syncResult.tools.updated > 0 ||\n syncResult.tools.added > 0 ||\n syncResult.tools.removed > 0\n ) {\n const details: string[] = [];\n if (syncResult.tools.updated > 0)\n details.push(`${syncResult.tools.updated} updated`);\n if (syncResult.tools.added > 0)\n details.push(`${syncResult.tools.added} added`);\n if (syncResult.tools.removed > 0)\n details.push(`${syncResult.tools.removed} removed`);\n parts.push(`tools (${details.join(\", \")})`);\n }\n if (\n syncResult.prompts.updated > 0 ||\n syncResult.prompts.added > 0 ||\n syncResult.prompts.removed > 0\n ) {\n const details: string[] = [];\n if (syncResult.prompts.updated > 0)\n details.push(`${syncResult.prompts.updated} updated`);\n if (syncResult.prompts.added > 0)\n details.push(`${syncResult.prompts.added} added`);\n if (syncResult.prompts.removed > 0)\n details.push(`${syncResult.prompts.removed} removed`);\n parts.push(`prompts (${details.join(\", \")})`);\n }\n if (\n syncResult.resources.updated > 0 ||\n syncResult.resources.added > 0 ||\n syncResult.resources.removed > 0\n ) {\n const details: string[] = [];\n if (syncResult.resources.updated > 0)\n details.push(`${syncResult.resources.updated} updated`);\n if (syncResult.resources.added > 0)\n details.push(`${syncResult.resources.added} added`);\n if (syncResult.resources.removed > 0)\n details.push(`${syncResult.resources.removed} removed`);\n parts.push(`resources (${details.join(\", \")})`);\n }\n console.log(chalk.green(`[HMR] ✓ Reloaded: ${parts.join(\", \")}`));\n } else {\n console.log(\n chalk.gray(\n `[HMR] No changes detected (${runningServer.registeredTools?.length || 0} tools, ` +\n `${runningServer.registeredPrompts?.length || 0} prompts, ` +\n `${runningServer.registeredResources?.length || 0} resources registered)`\n )\n );\n }\n } catch (error: any) {\n console.error(chalk.red(`[HMR] Reload failed: ${error.message}`));\n // Keep running with old registrations\n }\n\n isReloading = false;\n }, 100);\n };\n watcher.on(\"change\", hmrOnChange);\n\n // Expose project path so tunnel.ts can read the manifest for subdomain reuse\n process.env.MCP_USE_PROJECT_PATH = projectPath;\n\n // Expose in-process restart hook for the inspector tunnel toggle.\n // Tears down the running server and re-sets up everything as if\n // `mcp-use dev` was called with or without --tunnel.\n (globalThis as any).__mcpUseDevRestart = async (withTunnel: boolean) => {\n console.log(\n chalk.yellow(\n `\\n[DEV] Restarting ${withTunnel ? \"with\" : \"without\"} tunnel…`\n )\n );\n\n // Suppress noise from in-flight requests terminated during teardown\n const origStderrWrite = process.stderr.write.bind(process.stderr);\n const stderrFilter = (chunk: any, ...args: any[]) => {\n const str =\n typeof chunk === \"string\" ? chunk : (chunk?.toString?.() ?? \"\");\n if (\n str.includes(\"TypeError: terminated\") ||\n str.includes(\"SocketError\") ||\n str.includes(\"UND_ERR_SOCKET\")\n ) {\n return true;\n }\n return origStderrWrite(chunk, ...args);\n };\n process.stderr.write = stderrFilter as typeof process.stderr.write;\n\n // 1. Tear down\n watcher.close();\n if (tunnelProcess && typeof tunnelProcess.kill === \"function\") {\n if (typeof (tunnelProcess as any).markShutdown === \"function\") {\n (tunnelProcess as any).markShutdown();\n }\n const dyingProc = tunnelProcess;\n tunnelProcess = undefined;\n dyingProc.kill(\"SIGINT\");\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n try {\n dyingProc.kill(\"SIGKILL\");\n } catch {\n /* ignore */\n }\n resolve();\n }, 5000);\n dyingProc.on(\"exit\", () => {\n clearTimeout(timeout);\n resolve();\n });\n });\n }\n if (tunnelSubdomain) {\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n try {\n await fetch(`${apiBase}/api/tunnels/${tunnelSubdomain}`, {\n method: \"DELETE\",\n });\n } catch {\n /* ignore */\n }\n tunnelSubdomain = undefined;\n }\n if (runningServer && typeof runningServer.forceClose === \"function\") {\n await runningServer.forceClose();\n } else if (runningServer && typeof runningServer.close === \"function\") {\n await runningServer.close();\n }\n\n // 2. Start tunnel if requested\n tunnelUrl = undefined;\n if (withTunnel) {\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n let existingSubdomain: string | undefined;\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n const manifest = JSON.parse(manifestContent);\n existingSubdomain = manifest.tunnel?.subdomain;\n if (existingSubdomain) {\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n try {\n await fetch(`${apiBase}/api/tunnels/${existingSubdomain}`, {\n method: \"DELETE\",\n });\n } catch {\n /* ignore */\n }\n }\n } catch {\n /* ignore */\n }\n let tunnelInfo: Awaited<ReturnType<typeof startTunnel>>;\n try {\n tunnelInfo = await startTunnel(port, existingSubdomain);\n } catch {\n if (existingSubdomain) {\n console.log(\n chalk.yellow(\n `Subdomain \"${existingSubdomain}\" unavailable, requesting a new one…`\n )\n );\n tunnelInfo = await startTunnel(port);\n } else {\n throw new Error(\"Failed to start tunnel\");\n }\n }\n tunnelUrl = tunnelInfo.url;\n tunnelProcess = tunnelInfo.process;\n tunnelSubdomain = tunnelInfo.subdomain;\n process.env.MCP_URL = tunnelUrl;\n\n // Persist subdomain\n try {\n const mPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n let manifest: any = {};\n try {\n manifest = JSON.parse(await readFile(mPath, \"utf-8\"));\n } catch {\n /* ignore */\n }\n if (!manifest.tunnel) manifest.tunnel = {};\n manifest.tunnel.subdomain = tunnelSubdomain;\n await mkdir(path.dirname(mPath), { recursive: true });\n await writeFile(mPath, JSON.stringify(manifest, null, 2), \"utf-8\");\n } catch {\n /* ignore */\n }\n } else {\n process.env.MCP_URL = `http://${host}:${port}`;\n }\n\n // 3. Re-import server module (HMR mode stays true so user's listen() is a no-op)\n console.log(chalk.gray(`Loading server from ${serverFile}...`));\n runningServer = await importServerModule();\n if (!runningServer) {\n console.error(\n chalk.red(\"Error: Could not find MCPServer instance after restart.\")\n );\n return;\n }\n // Temporarily disable HMR flag so our listen() actually starts the server\n (globalThis as any).__mcpUseHmrMode = false;\n await runningServer.listen(port);\n (globalThis as any).__mcpUseHmrMode = true;\n\n const browserHost = normalizeBrowserHost(host);\n const mcpEndpoint = `http://${browserHost}:${port}/mcp`;\n const autoConnectEndpoint = tunnelUrl\n ? `${tunnelUrl}/mcp`\n : mcpEndpoint;\n console.log(chalk.green.bold(`✓ Restarted`));\n console.log(chalk.whiteBright(`MCP: ${mcpEndpoint}`));\n if (tunnelUrl) {\n console.log(chalk.whiteBright(`Tunnel: ${tunnelUrl}/mcp`));\n }\n console.log(\n chalk.whiteBright(\n `Inspector: http://${browserHost}:${port}/inspector?autoConnect=${encodeURIComponent(autoConnectEndpoint)}`\n )\n );\n console.log(chalk.gray(`Watching for changes...\\n`));\n\n // 4. Re-create watcher (reuses same config)\n watcher = chokidar.watch(\".\", {\n cwd: projectPath,\n ignored: (p: string, stats?: any) => {\n const np = p.replace(/\\\\/g, \"/\");\n if (/(^|\\/)\\.[^/]/.test(np)) return true;\n if (np.includes(\"/node_modules/\") || np.endsWith(\"/node_modules\"))\n return true;\n if (np.includes(\"/dist/\") || np.endsWith(\"/dist\")) return true;\n if (np.includes(\"/resources/\") || np.endsWith(\"/resources\"))\n return true;\n if (stats?.isFile() && np.endsWith(\".d.ts\")) return true;\n return false;\n },\n persistent: true,\n ignoreInitial: true,\n depth: 3,\n });\n watcher\n .on(\"ready\", () => console.log(chalk.gray(`[HMR] Watcher ready`)))\n .on(\"error\", (err: unknown) =>\n console.error(\n chalk.red(\n `[HMR] Watcher error: ${err instanceof Error ? err.message : String(err)}`\n )\n )\n )\n .on(\"change\", hmrOnChange);\n\n // Restore stderr once the new server is stable\n setTimeout(() => {\n process.stderr.write = origStderrWrite;\n }, 2000);\n };\n\n // Handle cleanup\n let hmrCleanupInProgress = false;\n const cleanup = async () => {\n if (hmrCleanupInProgress) return;\n hmrCleanupInProgress = true;\n\n console.log(chalk.gray(\"\\n\\nShutting down...\"));\n watcher.close();\n\n if (\n tunnelProcess &&\n typeof (tunnelProcess as any).markShutdown === \"function\"\n ) {\n (tunnelProcess as any).markShutdown();\n }\n\n if (tunnelSubdomain) {\n try {\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n await fetch(`${apiBase}/api/tunnels/${tunnelSubdomain}`, {\n method: \"DELETE\",\n });\n } catch {\n // Ignore cleanup errors\n }\n }\n\n if (tunnelProcess && typeof tunnelProcess.kill === \"function\") {\n tunnelProcess.kill(\"SIGINT\");\n setTimeout(() => process.exit(0), 2000);\n } else {\n process.exit(0);\n }\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n // Keep the process running\n await new Promise(() => {});\n } catch (error) {\n console.error(chalk.red(\"Dev mode failed:\"), error);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"start\")\n .description(\"Start production server\")\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--port <port>\", \"Server port\", \"3000\")\n .option(\"--tunnel\", \"Expose server through a tunnel\")\n .action(async (options) => {\n try {\n const projectPath = path.resolve(options.path);\n // Priority: --port flag > process.env.PORT > default\n // Check if --port or -p was explicitly provided in command line\n const portFlagProvided =\n process.argv.includes(\"--port\") ||\n process.argv.includes(\"-p\") ||\n process.argv.some((arg) => arg.startsWith(\"--port=\")) ||\n process.argv.some((arg) => arg.startsWith(\"-p=\"));\n\n const port = portFlagProvided\n ? parseInt(options.port, 10) // Flag explicitly provided, use it\n : parseInt(process.env.PORT || options.port || \"3000\", 10); // Check env, then default\n\n console.log(\n `\\x1b[36m\\x1b[1mmcp-use\\x1b[0m \\x1b[90mVersion: ${packageJson.version}\\x1b[0m\\n`\n );\n\n // Start tunnel if requested\n let mcpUrl: string | undefined;\n let tunnelProcess: any = undefined;\n let tunnelSubdomain: string | undefined = undefined;\n if (options.tunnel) {\n try {\n // Read existing subdomain from mcp-use.json if available\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n let existingSubdomain: string | undefined;\n\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n const manifest = JSON.parse(manifestContent);\n existingSubdomain = manifest.tunnel?.subdomain;\n if (existingSubdomain) {\n console.log(\n chalk.gray(`Found existing subdomain: ${existingSubdomain}`)\n );\n // Release the stale subdomain so the first attempt can reclaim it\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n try {\n await fetch(`${apiBase}/api/tunnels/${existingSubdomain}`, {\n method: \"DELETE\",\n });\n } catch {\n // Best-effort cleanup; ignore DELETE failures\n }\n }\n } catch (error) {\n // Manifest doesn't exist or is invalid, that's okay\n console.debug(\n chalk.gray(\n `Debug: Failed to read or parse mcp-use.json: ${error instanceof Error ? error.message : String(error)}`\n )\n );\n }\n\n let tunnelInfo: Awaited<ReturnType<typeof startTunnel>>;\n try {\n tunnelInfo = await startTunnel(port, existingSubdomain);\n } catch (e) {\n if (existingSubdomain) {\n console.log(\n chalk.yellow(\n `Subdomain \"${existingSubdomain}\" unavailable, requesting a new one…`\n )\n );\n tunnelInfo = await startTunnel(port);\n } else {\n throw e;\n }\n }\n mcpUrl = tunnelInfo.url;\n tunnelProcess = tunnelInfo.process;\n const subdomain = tunnelInfo.subdomain;\n tunnelSubdomain = subdomain;\n\n // Update mcp-use.json with the subdomain\n try {\n let manifest: any = {};\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n manifest = JSON.parse(manifestContent);\n } catch {\n // File doesn't exist, create new manifest\n }\n\n // Update or add tunnel subdomain\n if (!manifest.tunnel) {\n manifest.tunnel = {};\n }\n manifest.tunnel.subdomain = subdomain;\n\n // Ensure dist directory exists\n await mkdir(path.dirname(manifestPath), { recursive: true });\n\n // Write updated manifest\n await writeFile(\n manifestPath,\n JSON.stringify(manifest, null, 2),\n \"utf-8\"\n );\n } catch (error) {\n console.warn(\n chalk.yellow(\n `⚠️ Failed to save subdomain to mcp-use.json: ${error instanceof Error ? error.message : \"Unknown error\"}`\n )\n );\n }\n } catch (error) {\n console.error(chalk.red(\"Failed to start tunnel:\"), error);\n process.exit(1);\n }\n }\n\n // Find the built server file\n // First try to read from manifest (set during build)\n let serverFile: string | undefined;\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n const manifest = JSON.parse(manifestContent);\n if (manifest.entryPoint) {\n // Verify the entry point exists\n await access(path.join(projectPath, manifest.entryPoint));\n serverFile = manifest.entryPoint;\n }\n } catch {\n // Manifest doesn't exist or entryPoint not set, fall back to searching\n }\n\n // Fall back to checking common locations if manifest didn't help\n if (!serverFile) {\n const serverCandidates = [\n \"dist/index.js\",\n \"dist/server.js\",\n \"dist/src/index.js\",\n \"dist/src/server.js\",\n ];\n\n for (const candidate of serverCandidates) {\n try {\n await access(path.join(projectPath, candidate));\n serverFile = candidate;\n break;\n } catch {\n continue;\n }\n }\n }\n\n if (!serverFile) {\n console.error(\n chalk.red(\n `No built server file found. Run 'mcp-use build' first.\\n\\nLooked for:\\n - dist/mcp-use.json (manifest with entryPoint)\\n - dist/index.js\\n - dist/server.js\\n - dist/src/index.js\\n - dist/src/server.js`\n )\n );\n process.exit(1);\n }\n\n console.log(\"Starting production server...\");\n\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n PORT: String(port),\n NODE_ENV: \"production\",\n };\n\n if (mcpUrl) {\n env.MCP_URL = mcpUrl;\n console.log(chalk.whiteBright(`Tunnel: ${mcpUrl}/mcp`));\n } else if (!env.MCP_URL) {\n env.MCP_URL = `http://localhost:${port}`;\n }\n\n const serverProc = spawn(\"node\", [serverFile], {\n cwd: projectPath,\n stdio: \"inherit\",\n env,\n });\n\n // Handle cleanup\n let cleanupInProgress = false;\n const cleanup = async () => {\n if (cleanupInProgress) {\n return; // Prevent double cleanup\n }\n cleanupInProgress = true;\n\n console.log(chalk.gray(\"\\n\\nShutting down...\"));\n\n // Mark tunnel as shutting down to suppress output\n if (\n tunnelProcess &&\n typeof (tunnelProcess as any).markShutdown === \"function\"\n ) {\n (tunnelProcess as any).markShutdown();\n }\n\n // Clean up tunnel via API if subdomain is available\n if (tunnelSubdomain) {\n try {\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n await fetch(`${apiBase}/api/tunnels/${tunnelSubdomain}`, {\n method: \"DELETE\",\n });\n } catch (err) {\n // Ignore cleanup errors\n }\n }\n\n const processesToKill = 1 + (tunnelProcess ? 1 : 0);\n let killedCount = 0;\n\n const checkAndExit = () => {\n killedCount++;\n if (killedCount >= processesToKill) {\n process.exit(0);\n }\n };\n\n // Handle server process\n serverProc.on(\"exit\", checkAndExit);\n serverProc.kill(\"SIGTERM\");\n\n // Handle tunnel process if it exists\n if (tunnelProcess && typeof tunnelProcess.kill === \"function\") {\n tunnelProcess.on(\"exit\", checkAndExit);\n // Use SIGINT for better cleanup of npx/node processes\n tunnelProcess.kill(\"SIGINT\");\n } else {\n checkAndExit();\n }\n\n // Fallback timeout in case processes don't exit\n setTimeout(() => {\n if (serverProc.exitCode === null) {\n serverProc.kill(\"SIGKILL\");\n }\n if (tunnelProcess && tunnelProcess.exitCode === null) {\n tunnelProcess.kill(\"SIGKILL\");\n }\n process.exit(0);\n }, 2000); // Increase timeout to 2 seconds to allow graceful shutdown\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n serverProc.on(\"exit\", async (code) => {\n // Server exited - cleanup tunnel before exiting CLI\n if (!cleanupInProgress) {\n await cleanup();\n }\n process.exit(code || 0);\n });\n } catch (error) {\n console.error(\"Start failed:\", error);\n process.exit(1);\n }\n });\n\n// Authentication commands\nprogram\n .command(\"login\")\n .description(\"Login to mcp-use cloud\")\n .option(\n \"--api-key <key>\",\n \"Login with an API key directly (non-interactive, for CI/CD)\"\n )\n .action(async (opts: { apiKey?: string }) => {\n try {\n await loginCommand({ apiKey: opts.apiKey });\n process.exit(0);\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Login failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n });\n\nprogram\n .command(\"logout\")\n .description(\"Logout from Manufact cloud\")\n .action(async () => {\n await logoutCommand();\n });\n\nprogram\n .command(\"whoami\")\n .description(\"Show current user information\")\n .action(async () => {\n await whoamiCommand();\n });\n\n// Organization commands\nconst orgCommand = program.command(\"org\").description(\"Manage organizations\");\n\norgCommand\n .command(\"list\")\n .description(\"List your organizations\")\n .action(async () => {\n await orgListCommand();\n });\n\norgCommand\n .command(\"switch\")\n .description(\"Switch the active organization\")\n .action(async () => {\n await orgSwitchCommand();\n });\n\norgCommand\n .command(\"current\")\n .description(\"Show the currently active organization\")\n .action(async () => {\n await orgCurrentCommand();\n });\n\n// Deployment command\nprogram\n .command(\"deploy\")\n .description(\"Deploy MCP server from GitHub to Manufact cloud\")\n .option(\"--open\", \"Open deployment in browser after successful deploy\")\n .option(\"--name <name>\", \"Custom deployment name\")\n .option(\"--port <port>\", \"Server port\", \"3000\")\n .option(\"--runtime <runtime>\", \"Runtime (node or python)\")\n .option(\n \"--new\",\n \"Force creation of new deployment instead of reusing linked deployment\"\n )\n .option(\n \"--env <key=value...>\",\n \"Environment variables (can be used multiple times)\"\n )\n .option(\"--env-file <path>\", \"Path to .env file with environment variables\")\n .option(\n \"--root-dir <path>\",\n \"Root directory within repo to deploy from (for monorepos)\"\n )\n .option(\n \"--org <slug-or-id>\",\n \"Deploy to a specific organization (by slug or ID)\"\n )\n .option(\"-y, --yes\", \"Skip confirmation prompts\")\n .option(\"--region <region>\", \"Deploy region: US, EU, or APAC (default: US)\")\n .option(\n \"--build-command <cmd>\",\n \"Custom build command (overrides auto-detection)\"\n )\n .option(\n \"--start-command <cmd>\",\n \"Custom start command (overrides auto-detection)\"\n )\n .action(async (options) => {\n await deployCommand({\n open: options.open,\n name: options.name,\n port: options.port ? parseInt(options.port, 10) : undefined,\n runtime: options.runtime,\n new: options.new,\n env: options.env,\n envFile: options.envFile,\n rootDir: options.rootDir,\n org: options.org,\n yes: options.yes,\n region: options.region,\n buildCommand: options.buildCommand,\n startCommand: options.startCommand,\n });\n });\n\n// Client command\nprogram.addCommand(createClientCommand());\n\n// Deployments command\nprogram.addCommand(createDeploymentsCommand());\n\n// Servers command\nprogram.addCommand(createServersCommand());\n\n// Skills command\nprogram.addCommand(createSkillsCommand());\n\n// Generate types command\nprogram\n .command(\"generate-types\")\n .description(\n \"Generate TypeScript type definitions for tools (writes .mcp-use/tool-registry.d.ts)\"\n )\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--server <file>\", \"Server entry file\", \"index.ts\")\n .action(async (options) => {\n const projectPath = path.resolve(options.path);\n\n try {\n console.log(chalk.blue(\"Generating tool registry types...\"));\n const success = await generateToolRegistryTypesForServer(\n projectPath,\n options.server\n );\n if (success) {\n console.log(\n chalk.green(\"✓ Tool registry types generated successfully\")\n );\n } else {\n console.log(chalk.yellow(\"⚠ Tool registry type generation had errors\"));\n }\n process.exit(0);\n } catch (error) {\n console.error(\n chalk.red(\"Failed to generate types:\"),\n error instanceof Error ? error.message : String(error)\n );\n if (error instanceof Error && error.stack) {\n console.error(chalk.gray(error.stack));\n }\n process.exit(1);\n }\n });\n\nprogram.hook(\"preAction\", async (_thisCommand, actionCommand) => {\n const projectPath = actionCommand.opts().path as string | undefined;\n await notifyIfUpdateAvailable(projectPath);\n});\n\nprogram.parse();\n","import process from 'node:process';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport {\n\tisWsl,\n\tpowerShellPath,\n\tconvertWslPathToWindows,\n\tcanAccessPowerShell,\n\twslDefaultBrowser,\n} from 'wsl-utils';\nimport {executePowerShell} from 'powershell-utils';\nimport defineLazyProperty from 'define-lazy-prop';\nimport defaultBrowser, {_windowsBrowserProgIdMap} from 'default-browser';\nimport isInsideContainer from 'is-inside-container';\nimport isInSsh from 'is-in-ssh';\n\nconst fallbackAttemptSymbol = Symbol('fallbackAttempt');\n\n// Path to included `xdg-open`.\nconst __dirname = import.meta.url ? path.dirname(fileURLToPath(import.meta.url)) : '';\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\nconst tryEachApp = async (apps, opener) => {\n\tif (apps.length === 0) {\n\t\t// No app was provided\n\t\treturn;\n\t}\n\n\tconst errors = [];\n\n\tfor (const app of apps) {\n\t\ttry {\n\t\t\treturn await opener(app); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\terrors.push(error);\n\t\t}\n\t}\n\n\tthrow new AggregateError(errors, 'Failed to open in all supported apps');\n};\n\n// eslint-disable-next-line complexity\nconst baseOpen = async options => {\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options,\n\t};\n\n\tconst isFallbackAttempt = options[fallbackAttemptSymbol] === true;\n\tdelete options[fallbackAttemptSymbol];\n\n\tif (Array.isArray(options.app)) {\n\t\treturn tryEachApp(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp,\n\t\t\t[fallbackAttemptSymbol]: true,\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app ?? {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn tryEachApp(app, appName => baseOpen({\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments,\n\t\t\t},\n\t\t\t[fallbackAttemptSymbol]: true,\n\t\t}));\n\t}\n\n\tif (app === 'browser' || app === 'browserPrivate') {\n\t\t// IDs from default-browser for macOS and windows are the same.\n\t\t// IDs are lowercased to increase chances of a match.\n\t\tconst ids = {\n\t\t\t'com.google.chrome': 'chrome',\n\t\t\t'google-chrome.desktop': 'chrome',\n\t\t\t'com.brave.browser': 'brave',\n\t\t\t'org.mozilla.firefox': 'firefox',\n\t\t\t'firefox.desktop': 'firefox',\n\t\t\t'com.microsoft.msedge': 'edge',\n\t\t\t'com.microsoft.edge': 'edge',\n\t\t\t'com.microsoft.edgemac': 'edge',\n\t\t\t'microsoft-edge.desktop': 'edge',\n\t\t\t'com.apple.safari': 'safari',\n\t\t};\n\n\t\t// Incognito flags for each browser in `apps`.\n\t\tconst flags = {\n\t\t\tchrome: '--incognito',\n\t\t\tbrave: '--incognito',\n\t\t\tfirefox: '--private-window',\n\t\t\tedge: '--inPrivate',\n\t\t\t// Safari doesn't support private mode via command line\n\t\t};\n\n\t\tlet browser;\n\t\tif (isWsl) {\n\t\t\tconst progId = await wslDefaultBrowser();\n\t\t\tconst browserInfo = _windowsBrowserProgIdMap.get(progId);\n\t\t\tbrowser = browserInfo ?? {};\n\t\t} else {\n\t\t\tbrowser = await defaultBrowser();\n\t\t}\n\n\t\tif (browser.id in ids) {\n\t\t\tconst browserName = ids[browser.id.toLowerCase()];\n\n\t\t\tif (app === 'browserPrivate') {\n\t\t\t\t// Safari doesn't support private mode via command line\n\t\t\t\tif (browserName === 'safari') {\n\t\t\t\t\tthrow new Error('Safari doesn\\'t support opening in private mode via command line');\n\t\t\t\t}\n\n\t\t\t\tappArguments.push(flags[browserName]);\n\t\t\t}\n\n\t\t\treturn baseOpen({\n\t\t\t\t...options,\n\t\t\t\tapp: {\n\t\t\t\t\tname: apps[browserName],\n\t\t\t\t\targuments: appArguments,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tthrow new Error(`${browser.name} is not supported as a default browser`);\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\t// Determine if we should use Windows/PowerShell behavior in WSL.\n\t// We only use Windows integration if PowerShell is actually accessible.\n\t// This allows the package to work in sandboxed WSL environments where Windows access is restricted.\n\tlet shouldUseWindowsInWsl = false;\n\tif (isWsl && !isInsideContainer() && !isInSsh && !app) {\n\t\tshouldUseWindowsInWsl = await canAccessPowerShell();\n\t}\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || shouldUseWindowsInWsl) {\n\t\tcommand = await powerShellPath();\n\n\t\tcliArguments.push(...executePowerShell.argumentsPrefix);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\t// Convert WSL Linux paths to Windows paths\n\t\tif (isWsl && options.target) {\n\t\t\toptions.target = await convertWslPathToWindows(options.target);\n\t\t}\n\n\t\t// Suppress PowerShell progress messages that are written to stderr\n\t\tconst encodedArguments = ['$ProgressPreference = \\'SilentlyContinue\\';', 'Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(app));\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.push(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(options.target));\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(argument => executePowerShell.escapeArgument(argument));\n\t\t\tencodedArguments.push('-ArgumentList', appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = executePowerShell.encodeCommand(encodedArguments.join(' '));\n\n\t\tif (!options.wait) {\n\t\t\t// PowerShell will keep the parent process alive unless stdio is ignored.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t}\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron\n\t\t\t\t?? (platform === 'android' || isBundled || !exeLocalXdgOpen);\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\t// IMPORTANT: On macOS, the target MUST come AFTER '--args'.\n\t// When using --args, ALL following arguments are passed to the app.\n\t// Example: open -a \"chrome\" --args --incognito https://site.com\n\t// This passes BOTH --incognito AND https://site.com to Chrome.\n\t// Without this order, Chrome won't open in incognito. See #332.\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (!options.allowNonzeroExitCode && exitCode !== 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\t// When we're in a fallback attempt, we need to detect launch failures before trying the next app.\n\t// Wait for the close event to check the exit code before unreffing.\n\t// The launcher (open/xdg-open/PowerShell) exits quickly (~10-30ms) even on success.\n\tif (isFallbackAttempt) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('spawn', () => {\n\t\t\t\t// Keep error handler active for post-spawn errors\n\t\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\t\tsubprocess.off('error', reject);\n\n\t\t\t\t\tif (exitCode !== 0) {\n\t\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tsubprocess.unref();\n\t\t\t\t\tresolve(subprocess);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\t// Handle spawn errors before the caller can attach listeners.\n\t// This prevents unhandled error events from crashing the process.\n\treturn new Promise((resolve, reject) => {\n\t\tsubprocess.once('error', reject);\n\n\t\t// Wait for the subprocess to spawn before resolving.\n\t\t// This ensures the process is established before the caller continues,\n\t\t// preventing issues when process.exit() is called immediately after.\n\t\tsubprocess.once('spawn', () => {\n\t\t\tsubprocess.off('error', reject);\n\t\t\tresolve(subprocess);\n\t\t});\n\t});\n};\n\nconst open = (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\ttarget,\n\t});\n};\n\nexport const openApp = (name, options) => {\n\tif (typeof name !== 'string' && !Array.isArray(name)) {\n\t\tthrow new TypeError('Expected a valid `name`');\n\t}\n\n\tconst {arguments: appArguments = []} = options ?? {};\n\tif (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {\n\t\tthrow new TypeError('Expected `appArguments` as Array type');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\tapp: {\n\t\t\tname,\n\t\t\targuments: appArguments,\n\t\t},\n\t});\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl} = {}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nexport const apps = {\n\tbrowser: 'browser',\n\tbrowserPrivate: 'browserPrivate',\n};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\t// `chromium-browser` is the older deb package name used by Ubuntu/Debian before snap.\n\tlinux: ['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'brave', () => detectPlatformBinary({\n\tdarwin: 'brave browser',\n\twin32: 'brave',\n\tlinux: ['brave-browser', 'brave'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe',\n\t\tx64: ['/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe', '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: String.raw`C:\\Program Files\\Mozilla Firefox\\firefox.exe`,\n\tlinux: 'firefox',\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe',\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: ['microsoft-edge', 'microsoft-edge-dev'],\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe',\n}));\n\ndefineLazyProperty(apps, 'safari', () => detectPlatformBinary({\n\tdarwin: 'Safari',\n}));\n\nexport default open;\n","import {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport isWsl from 'is-wsl';\nimport {powerShellPath as windowsPowerShellPath, executePowerShell} from 'powershell-utils';\nimport {parseMountPointFromConfig} from './utilities.js';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const wslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst parsedMountPoint = parseMountPointFromConfig(configContent);\n\n\t\tif (parsedMountPoint === undefined) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = parsedMountPoint;\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nexport const powerShellPathFromWsl = async () => {\n\tconst mountPoint = await wslDrivesMountPoint();\n\treturn `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`;\n};\n\nexport const powerShellPath = isWsl ? powerShellPathFromWsl : windowsPowerShellPath;\n\n// Cache for PowerShell accessibility check\nlet canAccessPowerShellPromise;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessPowerShellPromise ??= (async () => {\n\t\ttry {\n\t\t\tconst psPath = await powerShellPath();\n\t\t\tawait fs.access(psPath, fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\t// PowerShell is not accessible (either doesn't exist, no execute permission, or other error)\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessPowerShellPromise;\n};\n\nexport const wslDefaultBrowser = async () => {\n\tconst psPath = await powerShellPath();\n\tconst command = String.raw`(Get-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice\").ProgId`;\n\n\tconst {stdout} = await executePowerShell(command, {powerShellPath: psPath});\n\n\treturn stdout.trim();\n};\n\nexport const convertWslPathToWindows = async path => {\n\t// Don't convert URLs\n\tif (/^[a-z]+:\\/\\//i.test(path)) {\n\t\treturn path;\n\t}\n\n\ttry {\n\t\tconst {stdout} = await execFile('wslpath', ['-aw', path], {encoding: 'utf8'});\n\t\treturn stdout.trim();\n\t} catch {\n\t\t// If wslpath fails, return the original path\n\t\treturn path;\n\t}\n};\n\nexport {default as isWsl} from 'is-wsl';\n","import process from 'node:process';\nimport os from 'node:os';\nimport fs from 'node:fs';\nimport isInsideContainer from 'is-inside-container';\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isInsideContainer()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\treturn fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft')\n\t\t\t? !isInsideContainer() : false;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default process.env.__IS_WSL_TEST__ ? isWsl : isWsl();\n","import fs from 'node:fs';\nimport isDocker from 'is-docker';\n\nlet cachedResult;\n\n// Podman detection\nconst hasContainerEnv = () => {\n\ttry {\n\t\tfs.statSync('/run/.containerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default function isInsideContainer() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (cachedResult === undefined) {\n\t\tcachedResult = hasContainerEnv() || isDocker();\n\t}\n\n\treturn cachedResult;\n}\n","import fs from 'node:fs';\n\nlet isDockerCached;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport default function isDocker() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (isDockerCached === undefined) {\n\t\tisDockerCached = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDockerCached;\n}\n","import process from 'node:process';\nimport {Buffer} from 'node:buffer';\nimport {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const powerShellPath = () => `${process.env.SYSTEMROOT || process.env.windir || String.raw`C:\\Windows`}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe`;\n\n// Cache for PowerShell accessibility check\nlet canAccessCache;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessCache ??= (async () => {\n\t\ttry {\n\t\t\tawait fs.access(powerShellPath(), fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessCache;\n};\n\nexport const executePowerShell = async (command, options = {}) => {\n\tconst {\n\t\tpowerShellPath: psPath,\n\t\t...execFileOptions\n\t} = options;\n\n\tconst encodedCommand = executePowerShell.encodeCommand(command);\n\n\treturn execFile(\n\t\tpsPath ?? powerShellPath(),\n\t\t[\n\t\t\t...executePowerShell.argumentsPrefix,\n\t\t\tencodedCommand,\n\t\t],\n\t\t{\n\t\t\tencoding: 'utf8',\n\t\t\t...execFileOptions,\n\t\t},\n\t);\n};\n\nexecutePowerShell.argumentsPrefix = [\n\t'-NoProfile',\n\t'-NonInteractive',\n\t'-ExecutionPolicy',\n\t'Bypass',\n\t'-EncodedCommand',\n];\n\nexecutePowerShell.encodeCommand = command => Buffer.from(command, 'utf16le').toString('base64');\n\nexecutePowerShell.escapeArgument = value => `'${String(value).replaceAll('\\'', '\\'\\'')}'`;\n","export function parseMountPointFromConfig(content) {\n\tfor (const line of content.split('\\n')) {\n\t\t// Skip comment lines\n\t\tif (/^\\s*#/.test(line)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Match root at start of line (after optional whitespace)\n\t\tconst match = /^\\s*root\\s*=\\s*(?<mountPoint>\"[^\"]*\"|'[^']*'|[^#]*)/.exec(line);\n\t\tif (!match) {\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn match.groups.mountPoint\n\t\t\t.trim()\n\t\t\t// Strip surrounding quotes\n\t\t\t.replaceAll(/^[\"']|[\"']$/g, '');\n\t}\n}\n","export default function defineLazyProperty(object, propertyName, valueGetter) {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = valueGetter();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\nimport defaultBrowserId from 'default-browser-id';\nimport bundleName from 'bundle-name';\nimport windows from './windows.js';\n\nexport {_windowsBrowserProgIdMap} from './windows.js';\n\nconst execFileAsync = promisify(execFile);\n\n// Inlined: https://github.com/sindresorhus/titleize/blob/main/index.js\nconst titleize = string => string.toLowerCase().replaceAll(/(?:^|\\s|-)\\S/g, x => x.toUpperCase());\n\nexport default async function defaultBrowser() {\n\tif (process.platform === 'darwin') {\n\t\tconst id = await defaultBrowserId();\n\t\tconst name = await bundleName(id);\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'linux') {\n\t\tconst {stdout} = await execFileAsync('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);\n\t\tconst id = stdout.trim();\n\t\tconst name = titleize(id.replace(/.desktop$/, '').replace('-', ' '));\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn windows();\n\t}\n\n\tthrow new Error('Only macOS, Linux, and Windows are supported');\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport default async function defaultBrowserId() {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst {stdout} = await execFileAsync('defaults', ['read', 'com.apple.LaunchServices/com.apple.launchservices.secure', 'LSHandlers']);\n\n\t// `(?!-)` is to prevent matching `LSHandlerRoleAll = \"-\";`.\n\tconst match = /LSHandlerRoleAll = \"(?!-)(?<id>[^\"]+?)\";\\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout);\n\n\tconst browserId = match?.groups.id ?? 'com.apple.Safari';\n\n\t// Correct the case for Safari's bundle identifier\n\tif (browserId === 'com.apple.safari') {\n\t\treturn 'com.apple.Safari';\n\t}\n\n\treturn browserId;\n}\n","import process from 'node:process';\nimport {promisify} from 'node:util';\nimport {execFile, execFileSync} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport async function runAppleScript(script, {humanReadableOutput = true, signal} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst execOptions = {};\n\tif (signal) {\n\t\texecOptions.signal = signal;\n\t}\n\n\tconst {stdout} = await execFileAsync('osascript', ['-e', script, outputArguments], execOptions);\n\treturn stdout.trim();\n}\n\nexport function runAppleScriptSync(script, {humanReadableOutput = true} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst stdout = execFileSync('osascript', ['-e', script, ...outputArguments], {\n\t\tencoding: 'utf8',\n\t\tstdio: ['ignore', 'pipe', 'ignore'],\n\t\ttimeout: 500,\n\t});\n\n\treturn stdout.trim();\n}\n","import {runAppleScript} from 'run-applescript';\n\nexport default async function bundleName(bundleId) {\n\treturn runAppleScript(`tell application \"Finder\" to set app_path to application file id \"${bundleId}\" as string\\ntell application \"System Events\" to get value of property list item \"CFBundleName\" of property list file (app_path & \":Contents:Info.plist\")`);\n}\n","import {promisify} from 'node:util';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\n// TODO: Fix the casing of bundle identifiers in the next major version.\n\n// Windows doesn't have browser IDs in the same way macOS/Linux does so we give fake\n// ones that look real and match the macOS/Linux versions for cross-platform apps.\nconst windowsBrowserProgIds = {\n\tMSEdgeHTM: {name: 'Edge', id: 'com.microsoft.edge'}, // The missing `L` is correct.\n\tMSEdgeBHTML: {name: 'Edge Beta', id: 'com.microsoft.edge.beta'},\n\tMSEdgeDHTML: {name: 'Edge Dev', id: 'com.microsoft.edge.dev'},\n\tAppXq0fevzme2pys62n3e0fbqa7peapykr8v: {name: 'Edge', id: 'com.microsoft.edge.old'},\n\tChromeHTML: {name: 'Chrome', id: 'com.google.chrome'},\n\tChromeBHTML: {name: 'Chrome Beta', id: 'com.google.chrome.beta'},\n\tChromeDHTML: {name: 'Chrome Dev', id: 'com.google.chrome.dev'},\n\tChromiumHTM: {name: 'Chromium', id: 'org.chromium.Chromium'},\n\tBraveHTML: {name: 'Brave', id: 'com.brave.Browser'},\n\tBraveBHTML: {name: 'Brave Beta', id: 'com.brave.Browser.beta'},\n\tBraveDHTML: {name: 'Brave Dev', id: 'com.brave.Browser.dev'},\n\tBraveSSHTM: {name: 'Brave Nightly', id: 'com.brave.Browser.nightly'},\n\tFirefoxURL: {name: 'Firefox', id: 'org.mozilla.firefox'},\n\tOperaStable: {name: 'Opera', id: 'com.operasoftware.Opera'},\n\tVivaldiHTM: {name: 'Vivaldi', id: 'com.vivaldi.Vivaldi'},\n\t'IE.HTTP': {name: 'Internet Explorer', id: 'com.microsoft.ie'},\n};\n\nexport const _windowsBrowserProgIdMap = new Map(Object.entries(windowsBrowserProgIds));\n\nexport class UnknownBrowserError extends Error {}\n\nexport default async function defaultBrowser(_execFileAsync = execFileAsync) {\n\tconst {stdout} = await _execFileAsync('reg', [\n\t\t'QUERY',\n\t\t' HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\Shell\\\\Associations\\\\UrlAssociations\\\\http\\\\UserChoice',\n\t\t'/v',\n\t\t'ProgId',\n\t]);\n\n\tconst match = /ProgId\\s*REG_SZ\\s*(?<id>\\S+)/.exec(stdout);\n\tif (!match) {\n\t\tthrow new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`);\n\t}\n\n\tconst {id} = match.groups;\n\n\t// Windows can append a hash suffix to ProgIds using a dot or hyphen\n\t// (e.g., `ChromeHTML.ABC123`, `FirefoxURL-6F193CCC56814779`).\n\t// Try exact match first, then try without the suffix.\n\tconst dotIndex = id.lastIndexOf('.');\n\tconst hyphenIndex = id.lastIndexOf('-');\n\tconst baseIdByDot = dotIndex === -1 ? undefined : id.slice(0, dotIndex);\n\tconst baseIdByHyphen = hyphenIndex === -1 ? undefined : id.slice(0, hyphenIndex);\n\n\treturn windowsBrowserProgIds[id] ?? windowsBrowserProgIds[baseIdByDot] ?? windowsBrowserProgIds[baseIdByHyphen] ?? {name: id, id};\n}\n","import process from 'node:process';\n\nconst isInSsh = Boolean(process.env.SSH_CONNECTION\n\t|| process.env.SSH_CLIENT\n\t|| process.env.SSH_TTY);\n\nexport default isInSsh;\n","import { promises as fs } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport interface McpConfig {\n apiKey?: string;\n apiUrl?: string;\n orgId?: string;\n orgName?: string;\n orgSlug?: string;\n /** @deprecated Use orgId. Read for backward compat with old config files. */\n profileId?: string;\n /** @deprecated Use orgName. */\n profileName?: string;\n /** @deprecated Use orgSlug. */\n profileSlug?: string;\n}\n\nconst CONFIG_DIR = path.join(os.homedir(), \".mcp-use\");\nconst CONFIG_FILE = path.join(CONFIG_DIR, \"config.json\");\n\n// Backend API URL (where /api/v1 endpoints are)\nconst DEFAULT_API_URL = process.env.MCP_API_URL\n ? process.env.MCP_API_URL.replace(/\\/api\\/v1$/, \"\") + \"/api/v1\" // Ensure /api/v1 suffix\n : \"https://cloud.mcp-use.com/api/v1\";\n\n// Frontend/Web URL (where /auth/cli page is)\nconst DEFAULT_WEB_URL = process.env.MCP_WEB_URL\n ? process.env.MCP_WEB_URL\n : \"https://manufact.com\";\n\n/**\n * Ensure config directory exists\n */\nasync function ensureConfigDir(): Promise<void> {\n try {\n await fs.mkdir(CONFIG_DIR, { recursive: true });\n } catch (error) {\n // Ignore error if directory already exists\n }\n}\n\n/**\n * Read config from disk, migrating legacy `profile*` keys to `org*`.\n */\nexport async function readConfig(): Promise<McpConfig> {\n try {\n const content = await fs.readFile(CONFIG_FILE, \"utf-8\");\n const raw = JSON.parse(content) as McpConfig;\n return {\n ...raw,\n orgId: raw.orgId ?? raw.profileId,\n orgName: raw.orgName ?? raw.profileName,\n orgSlug: raw.orgSlug ?? raw.profileSlug,\n };\n } catch (error) {\n return {};\n }\n}\n\n/**\n * Write config to disk. Persists only the new `org*` keys and removes legacy `profile*` keys.\n */\nexport async function writeConfig(config: McpConfig): Promise<void> {\n await ensureConfigDir();\n const { profileId: _a, profileName: _b, profileSlug: _c, ...clean } = config;\n await fs.writeFile(CONFIG_FILE, JSON.stringify(clean, null, 2), \"utf-8\");\n}\n\n/**\n * Delete config file\n */\nexport async function deleteConfig(): Promise<void> {\n try {\n await fs.unlink(CONFIG_FILE);\n } catch (error) {\n // Ignore error if file doesn't exist\n }\n}\n\n/**\n * Get API URL from config or use default\n */\nexport async function getApiUrl(): Promise<string> {\n const config = await readConfig();\n return config.apiUrl || DEFAULT_API_URL;\n}\n\n/**\n * Get API key from config\n */\nexport async function getApiKey(): Promise<string | null> {\n const config = await readConfig();\n return config.apiKey || null;\n}\n\n/**\n * Check if user is logged in\n */\nexport async function isLoggedIn(): Promise<boolean> {\n const apiKey = await getApiKey();\n return !!apiKey;\n}\n\n/**\n * Get the stored organization ID from config\n */\nexport async function getOrgId(): Promise<string | null> {\n const config = await readConfig();\n return config.orgId || null;\n}\n\n/**\n * Get web URL (for browser-based auth)\n * This is the frontend URL where /device verification page lives\n */\nexport async function getWebUrl(): Promise<string> {\n return DEFAULT_WEB_URL;\n}\n\n/**\n * Derive the auth base URL from the API URL.\n * Better Auth endpoints live at /api/auth/*, not under /api/v1/.\n * e.g. \"http://localhost:8000/api/v1\" -> \"http://localhost:8000\"\n */\nexport async function getAuthBaseUrl(): Promise<string> {\n const apiUrl = await getApiUrl();\n return apiUrl.replace(/\\/api\\/v1$/, \"\");\n}\n","import { getApiKey, getApiUrl, getAuthBaseUrl, getOrgId } from \"./config.js\";\n\nexport class GitHubAuthRequiredError extends Error {\n readonly authorizeUrl: string;\n constructor(message: string, authorizeUrl: string) {\n super(message);\n this.name = \"GitHubAuthRequiredError\";\n this.authorizeUrl = authorizeUrl;\n }\n}\n\nexport interface OrgInfo {\n id: string;\n name: string;\n slug: string | null;\n role: string;\n}\n\nexport interface AuthTestResponse {\n message: string;\n user_id: string;\n email: string;\n orgs: OrgInfo[];\n default_org_id: string | null;\n}\n\n/** Wire format returned by GET /test-auth (cli-compat route). */\ninterface AuthTestWireResponse {\n message: string;\n user_id: string;\n email: string;\n profiles: Array<{\n id: string;\n profile_name: string;\n slug: string | null;\n role: string;\n }>;\n default_profile_id: string | null;\n}\n\n// ── Server creation ────────────────────────────────────────────────\n\nexport interface CreateServerBody {\n type: \"github\";\n organizationId: string;\n installationId: string;\n name: string;\n repoFullName: string;\n branch?: string;\n rootDir?: string;\n port?: number;\n buildCommand?: string;\n startCommand?: string;\n env?: Record<string, string>;\n description?: string;\n tags?: string[];\n region?: string;\n}\n\nexport interface CreateServerResponse {\n server: { id: string; slug: string | null };\n deploymentId: string | null;\n}\n\n/** Connected GitHub repository (subset of OpenAPI server payload). */\nexport interface CloudServerConnectedRepository {\n id: string;\n repoFullName: string;\n productionBranch: string;\n isActive: boolean;\n userId: string;\n githubInstallationId: string;\n createdAt: string;\n updatedAt: string;\n}\n\n/** Server record from `GET /servers` or `GET /servers/{id}` (fields used by CLI). */\nexport interface CloudServer {\n id: string;\n slug: string | null;\n organizationId: string;\n userId: string | null;\n connectedRepositoryId: string;\n connectedRepository?: CloudServerConnectedRepository;\n name: string | null;\n description: string | null;\n tags?: string[];\n config?: unknown;\n createdAt: string;\n updatedAt: string;\n displayPreferences?: { icon?: string; color?: string };\n status: string;\n latestDeploymentStatus: string | null;\n activeDeploymentId: string | null;\n previousDeploymentId: string | null;\n region: string;\n providerRegion?: string;\n runProvider?: string;\n buildProvider?: string;\n /** Public MCP endpoint when provisioned (preferred over synthesizing from id/slug). */\n mcpUrl?: string | null;\n domains?: unknown[];\n deployments?: unknown[];\n _count?: { deployments?: number };\n}\n\n// ── Deployments ────────────────────────────────────────────────────\n\nexport interface CreateDeploymentInput {\n serverId: string;\n name?: string;\n branch?: string;\n commitSha?: string;\n commitMessage?: string;\n trigger?: \"manual\" | \"webhook\" | \"redeploy\" | \"rollback\";\n prNumber?: number;\n}\n\nexport interface CreateDeploymentResponse {\n id: string;\n}\n\nexport interface Deployment {\n id: string;\n userId: string;\n name: string;\n source: unknown;\n status: \"pending\" | \"building\" | \"running\" | \"stopped\" | \"failed\";\n port: number | null;\n healthCheckPath: string | null;\n provider: string;\n appName: string;\n error: string | null;\n gitCommitSha: string | null;\n gitBranch: string | null;\n gitCommitMessage: string | null;\n isProductionDeployment: boolean | null;\n deploymentTrigger: string | null;\n serverId: string | null;\n createdAt: string;\n updatedAt: string;\n buildStartedAt: string | null;\n buildCompletedAt: string | null;\n archivedAt: string | null;\n mcpUrl?: string;\n}\n\nexport interface BuildLogsResponse {\n logs: string;\n offset: number;\n totalLength: number;\n status: string;\n}\n\n// ── GitHub ──────────────────────────────────────────────────────────\n\nexport interface GitHubInstallation {\n id: string;\n installation_id: string;\n account_login: string;\n account_type: string;\n}\n\nexport interface GitHubConnectionStatus {\n is_connected: boolean;\n installations?: GitHubInstallation[];\n}\n\nexport interface GitHubRepo {\n id: number;\n name: string;\n full_name: string;\n private: boolean;\n owner: {\n login: string;\n };\n}\n\nexport interface GitHubReposResponse {\n user: {\n login: string;\n id: number;\n avatar_url: string;\n };\n repos: GitHubRepo[];\n}\n\n// ── API client ─────────────────────────────────────────────────────\n\nexport class McpUseAPI {\n private baseUrl: string;\n private apiKey: string | undefined;\n private orgId: string | undefined;\n\n constructor(baseUrl?: string, apiKey?: string, orgId?: string) {\n this.baseUrl = baseUrl || \"\";\n this.apiKey = apiKey;\n this.orgId = orgId;\n }\n\n static async create(): Promise<McpUseAPI> {\n const baseUrl = await getApiUrl();\n const apiKey = await getApiKey();\n const orgId = await getOrgId();\n return new McpUseAPI(baseUrl, apiKey ?? undefined, orgId ?? undefined);\n }\n\n setOrgId(orgId: string): void {\n this.orgId = orgId;\n }\n\n private async request<T>(\n endpoint: string,\n options: {\n method?: string;\n headers?: Record<string, string>;\n body?: string;\n timeout?: number;\n } = {}\n ): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`;\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...((options.headers as Record<string, string>) || {}),\n };\n\n if (this.apiKey) {\n headers[\"x-api-key\"] = this.apiKey;\n }\n\n if (this.orgId) {\n headers[\"x-profile-id\"] = this.orgId;\n }\n\n const timeout = options.timeout || 30000;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const response = await fetch(url, {\n ...options,\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (response.status === 401) {\n const err = new Error(\n \"Your session has expired or your API key is invalid.\"\n );\n (err as any).status = 401;\n throw err;\n }\n\n if (!response.ok) {\n const errorText = await response.text();\n try {\n const parsed = JSON.parse(errorText);\n if (parsed.code === \"GITHUB_AUTH_REQUIRED\" && parsed.authorizeUrl) {\n throw new GitHubAuthRequiredError(\n parsed.error || \"GitHub authorization required\",\n parsed.authorizeUrl\n );\n }\n } catch (e) {\n if (e instanceof GitHubAuthRequiredError) throw e;\n }\n throw new Error(`API request failed: ${response.status} ${errorText}`);\n }\n\n return response.json() as Promise<T>;\n } catch (error: any) {\n clearTimeout(timeoutId);\n if (error.name === \"AbortError\") {\n throw new Error(`Request timeout after ${timeout / 1000}s.`);\n }\n throw error;\n }\n }\n\n /**\n * Create a persistent API key using a Better Auth access token.\n */\n async createApiKeyWithAccessToken(\n accessToken: string,\n name: string = \"CLI\"\n ): Promise<{ key: string }> {\n const authBase = await getAuthBaseUrl();\n const url = `${authBase}/api/auth/api-key/create`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${accessToken}`,\n },\n body: JSON.stringify({ name, prefix: \"mcp_\" }),\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to create API key: ${response.status} ${error}`);\n }\n\n return response.json() as Promise<{ key: string }>;\n }\n\n // ── Auth ────────────────────────────────────────────────────────\n\n async testAuth(): Promise<AuthTestResponse> {\n const wire = await this.request<AuthTestWireResponse>(\"/test-auth\");\n return {\n message: wire.message,\n user_id: wire.user_id,\n email: wire.email,\n default_org_id: wire.default_profile_id,\n orgs: (wire.profiles ?? []).map((p) => ({\n id: p.id,\n name: p.profile_name,\n slug: p.slug,\n role: p.role,\n })),\n };\n }\n\n async setDefaultOrg(orgId: string): Promise<void> {\n await this.request(`/organizations/${orgId}/set-default`, {\n method: \"POST\",\n });\n }\n\n // ── Organization ID resolution ──────────────────────────────────\n\n async resolveOrganizationId(): Promise<string> {\n if (this.orgId) return this.orgId;\n const auth = await this.testAuth();\n const id = auth.default_org_id;\n if (!id) {\n throw new Error(\n \"No organization set. Run `mcp-use org switch` or use --org to specify one.\"\n );\n }\n return id;\n }\n\n // ── Servers ─────────────────────────────────────────────────────\n\n async createServer(body: CreateServerBody): Promise<CreateServerResponse> {\n return this.request<CreateServerResponse>(\"/servers\", {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n }\n\n async listServers(params?: {\n organizationId?: string;\n limit?: number;\n skip?: number;\n sort?: string;\n }): Promise<CloudServer[]> {\n const search = new URLSearchParams();\n if (params?.organizationId) {\n search.set(\"organizationId\", params.organizationId);\n }\n if (params?.limit != null) {\n search.set(\"limit\", String(params.limit));\n }\n if (params?.skip != null) {\n search.set(\"skip\", String(params.skip));\n }\n if (params?.sort) {\n search.set(\"sort\", params.sort);\n }\n const q = search.toString();\n return this.request<CloudServer[]>(`/servers${q ? `?${q}` : \"\"}`);\n }\n\n async getServer(idOrSlug: string): Promise<CloudServer> {\n const path = encodeURIComponent(idOrSlug);\n return this.request<CloudServer>(`/servers/${path}`);\n }\n\n async deleteServer(id: string): Promise<void> {\n await this.request<{ success: boolean }>(\n `/servers/${encodeURIComponent(id)}`,\n {\n method: \"DELETE\",\n }\n );\n }\n\n // ── Deployments ─────────────────────────────────────────────────\n\n async createDeployment(\n input: CreateDeploymentInput\n ): Promise<CreateDeploymentResponse> {\n return this.request<CreateDeploymentResponse>(\"/deployments\", {\n method: \"POST\",\n body: JSON.stringify(input),\n });\n }\n\n async getDeployment(deploymentId: string): Promise<Deployment> {\n return this.request<Deployment>(`/deployments/${deploymentId}`);\n }\n\n async listDeployments(): Promise<Deployment[]> {\n return this.request<Deployment[]>(\"/deployments\");\n }\n\n async deleteDeployment(deploymentId: string): Promise<void> {\n await this.request(`/deployments/${deploymentId}`, {\n method: \"DELETE\",\n });\n }\n\n async stopDeployment(deploymentId: string): Promise<void> {\n await this.request(`/deployments/${deploymentId}/stop`, {\n method: \"POST\",\n });\n }\n\n async getDeploymentLogs(\n deploymentId: string,\n lines: number = 500\n ): Promise<string> {\n const resp = await this.request<{ logs: string }>(\n `/deployments/${deploymentId}/logs?lines=${lines}`,\n { timeout: 60000 }\n );\n return resp.logs;\n }\n\n async getDeploymentBuildLogs(\n deploymentId: string,\n offset: number = 0\n ): Promise<BuildLogsResponse> {\n return this.request<BuildLogsResponse>(\n `/deployments/${deploymentId}/build-logs?offset=${offset}`,\n { timeout: 60000 }\n );\n }\n\n // ── GitHub ──────────────────────────────────────────────────────\n\n async getGitHubConnectionStatus(): Promise<GitHubConnectionStatus> {\n const orgId = await this.resolveOrganizationId();\n const resp = await this.request<{\n installations: Array<{\n id: string;\n installationId: string;\n account: {\n login: string;\n avatar_url: string | null;\n type: string;\n } | null;\n }>;\n }>(`/github/installations?organizationId=${orgId}`);\n return {\n is_connected: resp.installations.length > 0,\n installations: resp.installations.map((i) => ({\n id: i.id,\n installation_id: i.installationId,\n account_login: i.account?.login ?? \"\",\n account_type: i.account?.type ?? \"User\",\n })),\n };\n }\n\n async getGitHubRepos(_refresh?: boolean): Promise<GitHubReposResponse> {\n const orgId = await this.resolveOrganizationId();\n const installResp = await this.request<{\n installations: Array<{\n id: string;\n installationId: string;\n account: {\n login: string;\n avatar_url: string | null;\n type: string;\n } | null;\n }>;\n }>(`/github/installations?organizationId=${orgId}`);\n\n if (installResp.installations.length === 0) {\n return { user: { login: \"\", id: 0, avatar_url: \"\" }, repos: [] };\n }\n\n const inst = installResp.installations[0];\n const reposResp = await this.request<{\n repos: Array<{\n id: number;\n name: string;\n fullName: string;\n private: boolean;\n ownerAvatarUrl: string | null;\n }>;\n }>(`/github/installations/${inst.installationId}/repos`);\n\n return {\n user: {\n login: inst.account?.login ?? \"\",\n id: 0,\n avatar_url: inst.account?.avatar_url ?? \"\",\n },\n repos: reposResp.repos.map((r) => ({\n id: r.id,\n name: r.name,\n full_name: r.fullName,\n private: r.private,\n owner: { login: r.fullName.split(\"/\")[0] ?? \"\" },\n })),\n };\n }\n\n async getGitHubAppName(): Promise<string> {\n if (process.env.MCP_GITHUB_APP_NAME) return process.env.MCP_GITHUB_APP_NAME;\n if (this.baseUrl.includes(\"localhost\")) return \"mcp-use-local\";\n if (this.baseUrl.includes(\".dev.\")) return \"mcp-use-dev\";\n return \"mcp-use\";\n }\n\n /**\n * Returns the GitHub numeric installation ID (not the DB UUID) for the org.\n * Used for building direct installation settings URLs.\n */\n async getGitHubInstallationId(): Promise<string | null> {\n const status = await this.getGitHubConnectionStatus();\n return status.installations?.[0]?.installation_id ?? null;\n }\n\n async createGitHubRepo(opts: {\n installationId: string;\n name: string;\n private?: boolean;\n org?: string;\n }): Promise<{ fullName: string; cloneUrl: string; htmlUrl: string }> {\n return this.request<{\n fullName: string;\n cloneUrl: string;\n htmlUrl: string;\n }>(`/github/installations/${opts.installationId}/repos`, {\n method: \"POST\",\n body: JSON.stringify({\n name: opts.name,\n private: opts.private ?? true,\n org: opts.org,\n }),\n });\n }\n\n async getGitHubOAuthUrl(): Promise<{ url: string; state: string }> {\n return this.request<{ url: string; state: string }>(\n \"/github/oauth/authorize\"\n );\n }\n\n async exchangeGitHubOAuthToken(\n code: string\n ): Promise<{ success: boolean; installationsUpdated: number }> {\n return this.request<{ success: boolean; installationsUpdated: number }>(\n \"/github/oauth/token\",\n {\n method: \"POST\",\n body: JSON.stringify({ code }),\n }\n );\n }\n}\n","import chalk from \"chalk\";\nimport open from \"open\";\nimport { McpUseAPI } from \"../utils/api.js\";\nimport {\n deleteConfig,\n getApiKey,\n getAuthBaseUrl,\n isLoggedIn,\n readConfig,\n writeConfig,\n} from \"../utils/config.js\";\nimport type { OrgInfo } from \"../utils/api.js\";\n\nconst DEVICE_CLIENT_ID = \"mcp-use-cli\";\nconst DEVICE_POLL_TIMEOUT = 1800000; // 30 minutes\n\ninterface DeviceCodeResponse {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete?: string;\n expires_in: number;\n interval: number;\n}\n\ninterface DeviceTokenResponse {\n access_token?: string;\n error?: string;\n error_description?: string;\n}\n\nasync function requestDeviceCode(\n authBaseUrl: string\n): Promise<DeviceCodeResponse> {\n const url = `${authBaseUrl}/api/auth/device/code`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n client_id: DEVICE_CLIENT_ID,\n scope: \"openid profile email\",\n }),\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(\n `Failed to request device code: ${response.status} ${error}`\n );\n }\n\n return response.json() as Promise<DeviceCodeResponse>;\n}\n\nasync function pollForDeviceToken(\n authBaseUrl: string,\n deviceCode: string,\n intervalSeconds: number\n): Promise<string> {\n let pollingInterval = intervalSeconds;\n const deadline = Date.now() + DEVICE_POLL_TIMEOUT;\n\n while (Date.now() < deadline) {\n const delayMs = pollingInterval * 1000;\n await new Promise((r) => setTimeout(r, delayMs));\n\n const url = `${authBaseUrl}/api/auth/device/token`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n grant_type: \"urn:ietf:params:oauth:grant-type:device_code\",\n device_code: deviceCode,\n client_id: DEVICE_CLIENT_ID,\n }),\n });\n\n const data = (await response.json()) as DeviceTokenResponse;\n\n if (data.access_token) {\n return data.access_token;\n }\n\n if (data.error) {\n switch (data.error) {\n case \"authorization_pending\":\n break;\n case \"slow_down\":\n pollingInterval += 5;\n break;\n case \"access_denied\":\n throw new Error(\"Authorization was denied by the user.\");\n case \"expired_token\":\n throw new Error(\"The device code has expired. Please try again.\");\n default:\n throw new Error(\n data.error_description || `Device auth error: ${data.error}`\n );\n }\n }\n }\n\n throw new Error(\"Login timed out. Please try again.\");\n}\n\n/**\n * Prompt user to pick an organization from a numbered list.\n */\nexport async function promptOrgSelection(\n orgs: OrgInfo[],\n defaultOrgId?: string | null\n): Promise<OrgInfo | null> {\n if (orgs.length === 0) return null;\n\n if (orgs.length === 1) {\n return orgs[0];\n }\n\n console.log(chalk.cyan.bold(\"\\n🏢 Select an organization:\\n\"));\n\n for (let i = 0; i < orgs.length; i++) {\n const o = orgs[i];\n const marker = o.id === defaultOrgId ? chalk.green(\" (current)\") : \"\";\n const slug = o.slug ? chalk.gray(` (${o.slug})`) : \"\";\n console.log(` ${chalk.white(`${i + 1}.`)} ${o.name}${slug}${marker}`);\n }\n\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n const defaultIdx = defaultOrgId\n ? orgs.findIndex((o) => o.id === defaultOrgId)\n : 0;\n const defaultDisplay = defaultIdx >= 0 ? defaultIdx + 1 : 1;\n\n rl.question(\n chalk.gray(`\\nEnter number [${defaultDisplay}]: `),\n (answer) => {\n rl.close();\n const trimmed = answer.trim();\n const idx = trimmed === \"\" ? defaultIdx : parseInt(trimmed, 10) - 1;\n if (idx >= 0 && idx < orgs.length) {\n resolve(orgs[idx]);\n } else {\n console.log(chalk.yellow(\"Invalid selection, using default.\"));\n resolve(orgs[defaultIdx >= 0 ? defaultIdx : 0]);\n }\n }\n );\n });\n}\n\n/**\n * Login command using OAuth 2.0 Device Authorization Grant (RFC 8628).\n */\nexport async function loginCommand(options?: {\n silent?: boolean;\n apiKey?: string;\n}): Promise<void> {\n try {\n const directKey = options?.apiKey || process.env.MCP_USE_API_KEY;\n if (directKey) {\n await writeConfig({ apiKey: directKey });\n if (!options?.silent) {\n console.log(chalk.green.bold(\"✓ API key saved.\"));\n try {\n const api = await McpUseAPI.create();\n const authInfo = await api.testAuth();\n console.log(chalk.gray(` Authenticated as ${authInfo.email}`));\n } catch {\n console.log(\n chalk.gray(\n \" (could not verify key — will be checked on next command)\"\n )\n );\n }\n }\n return;\n }\n\n if (await isLoggedIn()) {\n if (!options?.silent) {\n console.log(\n chalk.yellow(\n \"You are already logged in. Run 'npx mcp-use logout' first if you want to login with a different account.\"\n )\n );\n }\n return;\n }\n\n console.log(chalk.cyan.bold(\"Logging in to mcp-use cloud...\\n\"));\n\n const authBaseUrl = await getAuthBaseUrl();\n\n const deviceResp = await requestDeviceCode(authBaseUrl);\n const {\n device_code,\n user_code,\n verification_uri,\n verification_uri_complete,\n interval,\n } = deviceResp;\n\n const displayCode =\n user_code.length === 8\n ? `${user_code.slice(0, 4)}-${user_code.slice(4)}`\n : user_code;\n\n console.log(chalk.white(\" Visit: \") + chalk.cyan(verification_uri));\n console.log(chalk.white(\" Code: \") + chalk.bold.white(displayCode));\n console.log();\n\n const urlToOpen = verification_uri_complete || verification_uri;\n try {\n await open(urlToOpen);\n console.log(chalk.gray(\" Browser opened. Waiting for approval...\"));\n } catch {\n console.log(chalk.gray(\" Open the URL above in your browser.\"));\n }\n\n const accessToken = await pollForDeviceToken(\n authBaseUrl,\n device_code,\n interval || 5\n );\n\n console.log(chalk.gray(\"\\n Creating persistent API key...\"));\n\n const api = await McpUseAPI.create();\n const keyResp = await api.createApiKeyWithAccessToken(accessToken, \"CLI\");\n\n await writeConfig({ apiKey: keyResp.key });\n\n console.log(chalk.green.bold(\"\\n✓ Successfully logged in!\"));\n\n try {\n const freshApi = await McpUseAPI.create();\n const authInfo = await freshApi.testAuth();\n\n console.log(chalk.cyan.bold(\"\\nCurrent user:\\n\"));\n console.log(chalk.white(\" Email: \") + chalk.cyan(authInfo.email));\n console.log(chalk.white(\" User ID: \") + chalk.gray(authInfo.user_id));\n\n const storedKey = await getApiKey();\n if (storedKey) {\n const masked = storedKey.substring(0, 8) + \"...\";\n console.log(chalk.white(\" API Key: \") + chalk.gray(masked));\n }\n\n const orgs = authInfo.orgs ?? [];\n if (orgs.length > 0) {\n let selectedOrg: OrgInfo | null = null;\n\n if (orgs.length === 1) {\n selectedOrg = orgs[0];\n } else {\n selectedOrg = await promptOrgSelection(orgs, authInfo.default_org_id);\n }\n\n if (selectedOrg) {\n const config = await readConfig();\n await writeConfig({\n ...config,\n orgId: selectedOrg.id,\n orgName: selectedOrg.name,\n orgSlug: selectedOrg.slug ?? undefined,\n });\n\n const slug = selectedOrg.slug\n ? chalk.gray(` (${selectedOrg.slug})`)\n : \"\";\n console.log(\n chalk.white(\" Org: \") + chalk.cyan(selectedOrg.name) + slug\n );\n }\n }\n } catch {\n console.log(\n chalk.gray(\n `\\n Your API key has been saved to ${chalk.white(\"~/.mcp-use/config.json\")}`\n )\n );\n }\n\n console.log(\n chalk.gray(\n \"\\n Deploy your MCP servers with \" + chalk.white(\"npx mcp-use deploy\")\n )\n );\n console.log(\n chalk.gray(\" To logout, run \" + chalk.white(\"npx mcp-use logout\"))\n );\n } catch (error) {\n throw new Error(\n `Login failed: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\n/**\n * Logout command - revokes API key and deletes config\n */\nexport async function logoutCommand(): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.yellow(\"⚠️ You are not logged in.\"));\n return;\n }\n\n console.log(chalk.cyan.bold(\"🔓 Logging out...\\n\"));\n\n await deleteConfig();\n\n console.log(chalk.green.bold(\"✓ Successfully logged out!\"));\n console.log(\n chalk.gray(\n \"\\nYour local config has been deleted. The API key will remain active until revoked from the web interface.\"\n )\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Logout failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Whoami command - shows current user info\n */\nexport async function whoamiCommand(): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.yellow(\"⚠️ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n return;\n }\n\n console.log(chalk.cyan.bold(\"👤 Current user:\\n\"));\n\n const api = await McpUseAPI.create();\n const authInfo = await api.testAuth();\n\n console.log(chalk.white(\"Email: \") + chalk.cyan(authInfo.email));\n console.log(chalk.white(\"User ID: \") + chalk.gray(authInfo.user_id));\n\n const apiKey = await getApiKey();\n if (apiKey) {\n const masked = apiKey.substring(0, 6) + \"...\";\n console.log(chalk.white(\"API Key: \") + chalk.gray(masked));\n }\n\n const config = await readConfig();\n const orgs = authInfo.orgs ?? [];\n if (orgs.length > 0) {\n const activeOrg = orgs.find(\n (o) => o.id === (config.orgId || authInfo.default_org_id)\n );\n\n if (activeOrg) {\n const slug = activeOrg.slug ? chalk.gray(` (${activeOrg.slug})`) : \"\";\n console.log(\n chalk.white(\"Org: \") + chalk.cyan(activeOrg.name) + slug\n );\n }\n\n if (orgs.length > 1) {\n console.log(\n chalk.gray(\n `\\n ${orgs.length} organizations available. Use ` +\n chalk.white(\"npx mcp-use org list\") +\n \" to see all.\"\n )\n );\n }\n }\n } catch (error: any) {\n if (error?.status === 401) {\n console.error(\n chalk.red(\"\\nYour session has expired or your API key is invalid.\")\n );\n console.log(\n chalk.gray(`Run ${chalk.white(\"mcp-use login\")} to re-authenticate.\\n`)\n );\n } else {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get user info:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n }\n process.exit(1);\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport type { MCPSession } from \"mcp-use/client\";\nimport { MCPClient } from \"mcp-use/client\";\nimport { getPackageVersion } from \"mcp-use/server\";\nimport { createInterface } from \"node:readline\";\nimport {\n formatError,\n formatHeader,\n formatInfo,\n formatJson,\n formatKeyValue,\n formatPromptMessages,\n formatResourceContent,\n formatSchema,\n formatSuccess,\n formatTable,\n formatToolCall,\n formatWarning,\n} from \"../utils/format.js\";\nimport {\n getActiveSession,\n getSession,\n listAllSessions,\n saveSession,\n setActiveSession,\n updateSessionInfo,\n} from \"../utils/session-storage.js\";\n\n// In-memory session map\nconst activeSessions = new Map<\n string,\n { client: MCPClient; session: MCPSession }\n>();\n\n/**\n * Get or restore a session by name\n */\nasync function getOrRestoreSession(\n sessionName: string | null\n): Promise<{ name: string; session: MCPSession } | null> {\n // If no session name provided, use active session\n if (!sessionName) {\n const active = await getActiveSession();\n if (!active) {\n console.error(\n formatError(\"No active session. Connect to a server first.\")\n );\n console.error(\n formatInfo(\"Use: npx mcp-use client connect <url> --name <name>\")\n );\n return null;\n }\n sessionName = active.name;\n }\n\n // Check if session is already connected in memory\n if (activeSessions.has(sessionName)) {\n const { session } = activeSessions.get(sessionName)!;\n return { name: sessionName, session };\n }\n\n // Try to restore from storage\n const config = await getSession(sessionName);\n if (!config) {\n console.error(formatError(`Session '${sessionName}' not found`));\n return null;\n }\n\n // Reconnect\n try {\n const client = new MCPClient();\n const cliClientInfo = getCliClientInfo();\n\n if (config.type === \"http\") {\n client.addServer(sessionName, {\n url: config.url!,\n headers: config.authToken\n ? { Authorization: `Bearer ${config.authToken}` }\n : undefined,\n clientInfo: cliClientInfo,\n });\n } else if (config.type === \"stdio\") {\n client.addServer(sessionName, {\n command: config.command!,\n args: config.args || [],\n env: config.env,\n clientInfo: cliClientInfo,\n });\n } else {\n console.error(formatError(`Unknown session type: ${config.type}`));\n return null;\n }\n\n const session = await client.createSession(sessionName);\n activeSessions.set(sessionName, { client, session });\n\n console.error(formatInfo(`Reconnected to session '${sessionName}'`));\n return { name: sessionName, session };\n } catch (error: any) {\n console.error(formatError(`Failed to restore session: ${error.message}`));\n return null;\n }\n}\n\n/**\n * Connect command\n */\n/**\n * Default clientInfo for mcp-use CLI\n */\nfunction getCliClientInfo() {\n return {\n name: \"mcp-use CLI\",\n title: \"mcp-use CLI\",\n version: getPackageVersion(),\n description: \"mcp-use CLI - Command-line interface for MCP servers\",\n icons: [\n {\n src: \"https://manufact.com/logo.png\",\n },\n ],\n websiteUrl: \"https://manufact.com\",\n };\n}\n\nexport async function connectCommand(\n urlOrCommand: string,\n options: {\n name?: string;\n stdio?: boolean;\n auth?: string;\n }\n): Promise<void> {\n try {\n const sessionName = options.name || `session-${Date.now()}`;\n\n const client = new MCPClient();\n let session: MCPSession;\n const cliClientInfo = getCliClientInfo();\n\n if (options.stdio) {\n // Parse stdio command\n const parts = urlOrCommand.split(\" \");\n const command = parts[0];\n const args = parts.slice(1);\n\n console.error(\n formatInfo(`Connecting to stdio server: ${command} ${args.join(\" \")}`)\n );\n\n client.addServer(sessionName, {\n command,\n args,\n clientInfo: cliClientInfo,\n });\n\n session = await client.createSession(sessionName);\n\n // Save session config\n await saveSession(sessionName, {\n type: \"stdio\",\n command,\n args,\n lastUsed: new Date().toISOString(),\n });\n } else {\n // HTTP connection\n console.error(formatInfo(`Connecting to ${urlOrCommand}...`));\n\n client.addServer(sessionName, {\n url: urlOrCommand,\n headers: options.auth\n ? { Authorization: `Bearer ${options.auth}` }\n : undefined,\n clientInfo: cliClientInfo,\n });\n\n session = await client.createSession(sessionName);\n\n // Save session config\n await saveSession(sessionName, {\n type: \"http\",\n url: urlOrCommand,\n authToken: options.auth,\n lastUsed: new Date().toISOString(),\n });\n }\n\n // Store in memory\n activeSessions.set(sessionName, { client, session });\n\n // Update session info\n const serverInfo = session.serverInfo;\n const capabilities = session.serverCapabilities;\n\n if (serverInfo) {\n await updateSessionInfo(sessionName, serverInfo, capabilities);\n }\n\n // Display connection info\n console.log(formatSuccess(`Connected to ${sessionName}`));\n\n if (serverInfo) {\n console.log(\"\");\n console.log(formatHeader(\"Server Information:\"));\n console.log(\n formatKeyValue({\n Name: serverInfo.name,\n Version: serverInfo.version || \"unknown\",\n })\n );\n }\n\n if (capabilities) {\n console.log(\"\");\n console.log(formatHeader(\"Capabilities:\"));\n const caps = Object.keys(capabilities).join(\", \");\n console.log(` ${caps || \"none\"}`);\n }\n\n // Count available resources\n const tools = session.tools;\n console.log(\"\");\n console.log(\n formatInfo(\n `Available: ${tools.length} tool${tools.length !== 1 ? \"s\" : \"\"}`\n )\n );\n } catch (error: any) {\n console.error(formatError(`Connection failed: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Disconnect command\n */\nexport async function disconnectCommand(\n sessionName?: string,\n options?: { all?: boolean }\n): Promise<void> {\n try {\n if (options?.all) {\n // Disconnect all sessions\n for (const [name, { client }] of activeSessions.entries()) {\n await client.closeAllSessions();\n activeSessions.delete(name);\n console.log(formatSuccess(`Disconnected from ${name}`));\n }\n return;\n }\n\n if (!sessionName) {\n const active = await getActiveSession();\n if (!active) {\n console.error(formatError(\"No active session to disconnect\"));\n return;\n }\n sessionName = active.name;\n }\n\n const sessionData = activeSessions.get(sessionName);\n if (sessionData) {\n await sessionData.client.closeAllSessions();\n activeSessions.delete(sessionName);\n console.log(formatSuccess(`Disconnected from ${sessionName}`));\n } else {\n console.log(formatInfo(`Session '${sessionName}' is not connected`));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to disconnect: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * List sessions command\n */\nexport async function listSessionsCommand(): Promise<void> {\n try {\n const sessions = await listAllSessions();\n\n if (sessions.length === 0) {\n console.log(formatInfo(\"No saved sessions\"));\n console.log(\n formatInfo(\"Connect to a server with: npx mcp-use client connect <url>\")\n );\n return;\n }\n\n console.log(formatHeader(\"Saved Sessions:\"));\n console.log(\"\");\n\n const tableData = sessions.map((s) => ({\n name: s.isActive ? chalk.green.bold(`${s.name} *`) : s.name,\n type: s.config.type,\n target:\n s.config.type === \"http\"\n ? s.config.url || \"\"\n : `${s.config.command} ${(s.config.args || []).join(\" \")}`,\n server: s.config.serverInfo?.name || \"unknown\",\n status: activeSessions.has(s.name)\n ? chalk.green(\"connected\")\n : chalk.gray(\"disconnected\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"name\", header: \"Name\" },\n { key: \"type\", header: \"Type\" },\n { key: \"target\", header: \"Target\", width: 40 },\n { key: \"server\", header: \"Server\" },\n { key: \"status\", header: \"Status\" },\n ])\n );\n\n console.log(\"\");\n console.log(chalk.gray(\"* = active session\"));\n } catch (error: any) {\n console.error(formatError(`Failed to list sessions: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Switch session command\n */\nexport async function switchSessionCommand(name: string): Promise<void> {\n try {\n await setActiveSession(name);\n console.log(formatSuccess(`Switched to session '${name}'`));\n } catch (error: any) {\n console.error(formatError(`Failed to switch session: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * List tools command\n */\nexport async function listToolsCommand(options: {\n session?: string;\n json?: boolean;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const tools = await session.listTools();\n\n if (options.json) {\n console.log(formatJson(tools));\n return;\n }\n\n if (tools.length === 0) {\n console.log(formatInfo(\"No tools available\"));\n return;\n }\n\n console.log(formatHeader(`Available Tools (${tools.length}):`));\n console.log(\"\");\n\n const tableData = tools.map((tool) => ({\n name: chalk.bold(tool.name),\n description: tool.description || chalk.gray(\"No description\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"name\", header: \"Tool\", width: 25 },\n { key: \"description\", header: \"Description\", width: 50 },\n ])\n );\n } catch (error: any) {\n console.error(formatError(`Failed to list tools: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Describe tool command\n */\nexport async function describeToolCommand(\n toolName: string,\n options: { session?: string }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const tools = session.tools;\n const tool = tools.find((t) => t.name === toolName);\n\n if (!tool) {\n console.error(formatError(`Tool '${toolName}' not found`));\n console.log(\"\");\n console.log(formatInfo(\"Available tools:\"));\n tools.forEach((t) => console.log(` • ${t.name}`));\n return;\n }\n\n console.log(formatHeader(`Tool: ${tool.name}`));\n console.log(\"\");\n\n if (tool.description) {\n console.log(tool.description);\n console.log(\"\");\n }\n\n if (tool.inputSchema) {\n console.log(formatHeader(\"Input Schema:\"));\n console.log(formatSchema(tool.inputSchema));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to describe tool: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Call tool command\n */\nexport async function callToolCommand(\n toolName: string,\n argsJson?: string,\n options?: { session?: string; timeout?: number; json?: boolean }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options?.session || null);\n if (!result) return;\n\n const { session } = result;\n\n // Parse arguments\n let args: Record<string, any> = {};\n if (argsJson) {\n try {\n args = JSON.parse(argsJson);\n } catch (error) {\n console.error(formatError(\"Invalid JSON arguments\"));\n return;\n }\n } else {\n // Check if tool requires arguments\n const tools = session.tools;\n const tool = tools.find((t) => t.name === toolName);\n\n if (tool?.inputSchema?.required && tool.inputSchema.required.length > 0) {\n console.error(\n formatError(\n \"This tool requires arguments. Provide them as a JSON string.\"\n )\n );\n console.log(\"\");\n console.log(formatInfo(\"Example:\"));\n console.log(\n ` npx mcp-use client tools call ${toolName} '{\"param\": \"value\"}'`\n );\n console.log(\"\");\n console.log(formatInfo(\"Tool schema:\"));\n console.log(formatSchema(tool.inputSchema));\n return;\n }\n }\n\n // Call the tool\n console.error(formatInfo(`Calling tool '${toolName}'...`));\n const callResult = await session.callTool(toolName, args, {\n timeout: options?.timeout,\n });\n\n if (options?.json) {\n console.log(formatJson(callResult));\n } else {\n console.log(formatToolCall(callResult));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to call tool: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * List resources command\n */\nexport async function listResourcesCommand(options: {\n session?: string;\n json?: boolean;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const resourcesResult = await session.listAllResources();\n const resources = resourcesResult.resources;\n\n if (options.json) {\n console.log(formatJson(resources));\n return;\n }\n\n if (resources.length === 0) {\n console.log(formatInfo(\"No resources available\"));\n return;\n }\n\n console.log(formatHeader(`Available Resources (${resources.length}):`));\n console.log(\"\");\n\n const tableData = resources.map((resource) => ({\n uri: resource.uri,\n name: resource.name || chalk.gray(\"(no name)\"),\n type: resource.mimeType || chalk.gray(\"unknown\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"uri\", header: \"URI\", width: 40 },\n { key: \"name\", header: \"Name\", width: 20 },\n { key: \"type\", header: \"Type\", width: 15 },\n ])\n );\n } catch (error: any) {\n console.error(formatError(`Failed to list resources: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Read resource command\n */\nexport async function readResourceCommand(\n uri: string,\n options: { session?: string; json?: boolean }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n\n console.error(formatInfo(`Reading resource: ${uri}`));\n const resource = await session.readResource(uri);\n\n if (options.json) {\n console.log(formatJson(resource));\n } else {\n console.log(formatResourceContent(resource));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to read resource: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Subscribe to resource command\n */\nexport async function subscribeResourceCommand(\n uri: string,\n options: { session?: string }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n\n await session.subscribeToResource(uri);\n console.log(formatSuccess(`Subscribed to resource: ${uri}`));\n\n // Set up notification handler\n session.on(\"notification\", async (notification) => {\n if (notification.method === \"notifications/resources/updated\") {\n console.log(\"\");\n console.log(formatInfo(\"Resource updated:\"));\n console.log(formatJson(notification.params));\n }\n });\n\n console.log(formatInfo(\"Listening for updates... (Press Ctrl+C to stop)\"));\n\n // Keep process alive\n await new Promise(() => {});\n } catch (error: any) {\n console.error(\n formatError(`Failed to subscribe to resource: ${error.message}`)\n );\n process.exit(1);\n }\n}\n\n/**\n * Unsubscribe from resource command\n */\nexport async function unsubscribeResourceCommand(\n uri: string,\n options: { session?: string }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n\n await session.unsubscribeFromResource(uri);\n console.log(formatSuccess(`Unsubscribed from resource: ${uri}`));\n } catch (error: any) {\n console.error(\n formatError(`Failed to unsubscribe from resource: ${error.message}`)\n );\n process.exit(1);\n }\n}\n\n/**\n * List prompts command\n */\nexport async function listPromptsCommand(options: {\n session?: string;\n json?: boolean;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const promptsResult = await session.listPrompts();\n const prompts = promptsResult.prompts;\n\n if (options.json) {\n console.log(formatJson(prompts));\n return;\n }\n\n if (prompts.length === 0) {\n console.log(formatInfo(\"No prompts available\"));\n return;\n }\n\n console.log(formatHeader(`Available Prompts (${prompts.length}):`));\n console.log(\"\");\n\n const tableData = prompts.map((prompt) => ({\n name: chalk.bold(prompt.name),\n description: prompt.description || chalk.gray(\"No description\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"name\", header: \"Prompt\", width: 25 },\n { key: \"description\", header: \"Description\", width: 50 },\n ])\n );\n } catch (error: any) {\n console.error(formatError(`Failed to list prompts: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Get prompt command\n */\nexport async function getPromptCommand(\n promptName: string,\n argsJson?: string,\n options?: { session?: string; json?: boolean }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options?.session || null);\n if (!result) return;\n\n const { session } = result;\n\n // Parse arguments\n let args: Record<string, any> = {};\n if (argsJson) {\n try {\n args = JSON.parse(argsJson);\n } catch (error) {\n console.error(formatError(\"Invalid JSON arguments\"));\n return;\n }\n }\n\n console.error(formatInfo(`Getting prompt '${promptName}'...`));\n const prompt = await session.getPrompt(promptName, args);\n\n if (options?.json) {\n console.log(formatJson(prompt));\n } else {\n console.log(formatHeader(`Prompt: ${promptName}`));\n console.log(\"\");\n\n if (prompt.description) {\n console.log(prompt.description);\n console.log(\"\");\n }\n\n if (prompt.messages) {\n console.log(formatHeader(\"Messages:\"));\n console.log(\"\");\n console.log(formatPromptMessages(prompt.messages));\n }\n }\n } catch (error: any) {\n console.error(formatError(`Failed to get prompt: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Interactive mode command\n */\nexport async function interactiveCommand(options: {\n session?: string;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { name: sessionName, session } = result;\n\n console.log(formatHeader(\"MCP Interactive Mode\"));\n console.log(\"\");\n console.log(formatInfo(`Connected to: ${sessionName}`));\n console.log(\"\");\n console.log(chalk.gray(\"Commands:\"));\n console.log(chalk.gray(\" tools list - List available tools\"));\n console.log(\n chalk.gray(\n \" tools call <name> - Call a tool (will prompt for args)\"\n )\n );\n console.log(chalk.gray(\" tools describe <name> - Show tool details\"));\n console.log(\n chalk.gray(\" resources list - List available resources\")\n );\n console.log(chalk.gray(\" resources read <uri> - Read a resource\"));\n console.log(\n chalk.gray(\" prompts list - List available prompts\")\n );\n console.log(chalk.gray(\" prompts get <name> - Get a prompt\"));\n console.log(chalk.gray(\" sessions list - List all sessions\"));\n console.log(\n chalk.gray(\" sessions switch <name> - Switch to another session\")\n );\n console.log(\n chalk.gray(\" exit, quit - Exit interactive mode\")\n );\n console.log(\"\");\n\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: chalk.cyan(\"mcp> \"),\n });\n\n rl.prompt();\n\n rl.on(\"line\", async (line) => {\n const trimmed = line.trim();\n\n if (!trimmed) {\n rl.prompt();\n return;\n }\n\n if (trimmed === \"exit\" || trimmed === \"quit\") {\n console.log(formatInfo(\"Goodbye!\"));\n rl.close();\n process.exit(0);\n }\n\n const parts = trimmed.split(\" \");\n const scope = parts[0];\n const command = parts[1];\n const arg = parts[2];\n\n try {\n if (scope === \"tools\") {\n if (command === \"list\") {\n const tools = await session.listTools();\n console.log(\n formatInfo(\n `Available tools: ${tools.map((t) => t.name).join(\", \")}`\n )\n );\n } else if (command === \"call\" && arg) {\n // Prompt for arguments\n rl.question(\n \"Arguments (JSON, or press Enter for none): \",\n async (argsInput) => {\n try {\n const args = argsInput.trim() ? JSON.parse(argsInput) : {};\n const result = await session.callTool(arg, args);\n console.log(formatToolCall(result));\n } catch (error: any) {\n console.error(formatError(error.message));\n }\n rl.prompt();\n }\n );\n return;\n } else if (command === \"describe\" && arg) {\n const tools = session.tools;\n const tool = tools.find((t) => t.name === arg);\n if (tool) {\n console.log(formatHeader(`Tool: ${tool.name}`));\n if (tool.description) console.log(tool.description);\n if (tool.inputSchema) {\n console.log(\"\");\n console.log(formatSchema(tool.inputSchema));\n }\n } else {\n console.error(formatError(`Tool '${arg}' not found`));\n }\n } else {\n console.error(\n formatError(\n \"Invalid command. Try: tools list, tools call <name>, tools describe <name>\"\n )\n );\n }\n } else if (scope === \"resources\") {\n if (command === \"list\") {\n const result = await session.listAllResources();\n const resources = result.resources;\n console.log(\n formatInfo(\n `Available resources: ${resources.map((r) => r.uri).join(\", \")}`\n )\n );\n } else if (command === \"read\" && arg) {\n const resource = await session.readResource(arg);\n console.log(formatResourceContent(resource));\n } else {\n console.error(\n formatError(\n \"Invalid command. Try: resources list, resources read <uri>\"\n )\n );\n }\n } else if (scope === \"prompts\") {\n if (command === \"list\") {\n const result = await session.listPrompts();\n const prompts = result.prompts;\n console.log(\n formatInfo(\n `Available prompts: ${prompts.map((p) => p.name).join(\", \")}`\n )\n );\n } else if (command === \"get\" && arg) {\n rl.question(\n \"Arguments (JSON, or press Enter for none): \",\n async (argsInput) => {\n try {\n const args = argsInput.trim() ? JSON.parse(argsInput) : {};\n const prompt = await session.getPrompt(arg, args);\n console.log(formatPromptMessages(prompt.messages));\n } catch (error: any) {\n console.error(formatError(error.message));\n }\n rl.prompt();\n }\n );\n return;\n } else {\n console.error(\n formatError(\n \"Invalid command. Try: prompts list, prompts get <name>\"\n )\n );\n }\n } else if (scope === \"sessions\") {\n if (command === \"list\") {\n await listSessionsCommand();\n } else if (command === \"switch\" && arg) {\n console.log(\n formatWarning(\n \"Session switching in interactive mode will be available in a future version\"\n )\n );\n } else {\n console.error(formatError(\"Invalid command. Try: sessions list\"));\n }\n } else {\n console.error(\n formatError(\n \"Unknown command. Type a valid scope: tools, resources, prompts, sessions\"\n )\n );\n }\n } catch (error: any) {\n console.error(formatError(error.message));\n }\n\n rl.prompt();\n });\n\n rl.on(\"close\", () => {\n console.log(\"\");\n console.log(formatInfo(\"Goodbye!\"));\n process.exit(0);\n });\n } catch (error: any) {\n console.error(\n formatError(`Failed to start interactive mode: ${error.message}`)\n );\n process.exit(1);\n }\n}\n\n/**\n * Create the client command group\n */\nexport function createClientCommand(): Command {\n const clientCommand = new Command(\"client\").description(\n \"Interactive MCP client for terminal usage\"\n );\n\n // Connection commands\n clientCommand\n .command(\"connect <url>\")\n .description(\"Connect to an MCP server\")\n .option(\"--name <name>\", \"Session name\")\n .option(\"--stdio\", \"Use stdio connector instead of HTTP\")\n .option(\"--auth <token>\", \"Authentication token\")\n .action(connectCommand);\n\n clientCommand\n .command(\"disconnect [session]\")\n .description(\"Disconnect from a session\")\n .option(\"--all\", \"Disconnect all sessions\")\n .action(disconnectCommand);\n\n // Sessions scope\n const sessionsCommand = new Command(\"sessions\").description(\n \"Manage CLI sessions\"\n );\n sessionsCommand\n .command(\"list\")\n .description(\"List all saved sessions\")\n .action(listSessionsCommand);\n sessionsCommand\n .command(\"switch <name>\")\n .description(\"Switch to a different session\")\n .action(switchSessionCommand);\n clientCommand.addCommand(sessionsCommand);\n\n // Tools scope\n const toolsCommand = new Command(\"tools\").description(\n \"Interact with MCP tools\"\n );\n toolsCommand\n .command(\"list\")\n .description(\"List available tools\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(listToolsCommand);\n toolsCommand\n .command(\"call <name> [args]\")\n .description(\"Call a tool with arguments (JSON string)\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--timeout <ms>\", \"Request timeout in milliseconds\", parseInt)\n .option(\"--json\", \"Output as JSON\")\n .action(callToolCommand);\n toolsCommand\n .command(\"describe <name>\")\n .description(\"Show tool details and schema\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(describeToolCommand);\n clientCommand.addCommand(toolsCommand);\n\n // Resources scope\n const resourcesCommand = new Command(\"resources\").description(\n \"Interact with MCP resources\"\n );\n resourcesCommand\n .command(\"list\")\n .description(\"List available resources\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(listResourcesCommand);\n resourcesCommand\n .command(\"read <uri>\")\n .description(\"Read a resource by URI\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(readResourceCommand);\n resourcesCommand\n .command(\"subscribe <uri>\")\n .description(\"Subscribe to resource updates\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(subscribeResourceCommand);\n resourcesCommand\n .command(\"unsubscribe <uri>\")\n .description(\"Unsubscribe from resource updates\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(unsubscribeResourceCommand);\n clientCommand.addCommand(resourcesCommand);\n\n // Prompts scope\n const promptsCommand = new Command(\"prompts\").description(\n \"Interact with MCP prompts\"\n );\n promptsCommand\n .command(\"list\")\n .description(\"List available prompts\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(listPromptsCommand);\n promptsCommand\n .command(\"get <name> [args]\")\n .description(\"Get a prompt with arguments (JSON string)\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(getPromptCommand);\n clientCommand.addCommand(promptsCommand);\n\n // Interactive mode\n clientCommand\n .command(\"interactive\")\n .description(\"Start interactive REPL mode\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(interactiveCommand);\n\n return clientCommand;\n}\n","import chalk from \"chalk\";\nimport type { CallToolResult } from \"mcp-use/client\";\n\n/**\n * Format data as a table with ASCII borders\n */\nexport function formatTable(\n data: Array<Record<string, any>>,\n columns: Array<{ key: string; header: string; width?: number }>\n): string {\n if (data.length === 0) {\n return chalk.gray(\"No items found\");\n }\n\n // Calculate column widths\n const widths = columns.map((col) => {\n const maxDataWidth = Math.max(\n ...data.map((row) => String(row[col.key] || \"\").length)\n );\n const headerWidth = col.header.length;\n return col.width || Math.max(maxDataWidth, headerWidth, 10);\n });\n\n // Helper to create a row\n const createRow = (values: string[], bold = false) => {\n const cells = values.map((val, i) => {\n const padded = val.padEnd(widths[i]);\n return bold ? chalk.bold(padded) : padded;\n });\n return `│ ${cells.join(\" │ \")} │`;\n };\n\n // Create separator line\n const separator = (char: string) => {\n const parts = widths.map((w) => char.repeat(w + 2));\n if (char === \"─\") {\n return `├${parts.join(\"┼\")}┤`;\n }\n return `└${parts.join(\"┴\")}┘`;\n };\n\n // Build table\n const lines: string[] = [];\n\n // Top border\n lines.push(`┌${widths.map((w) => \"─\".repeat(w + 2)).join(\"┬\")}┐`);\n\n // Header\n lines.push(\n createRow(\n columns.map((c) => c.header),\n true\n )\n );\n\n // Separator\n lines.push(separator(\"─\"));\n\n // Data rows\n data.forEach((row) => {\n lines.push(createRow(columns.map((c) => String(row[c.key] || \"\"))));\n });\n\n // Bottom border\n lines.push(separator(\"─\"));\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format data as JSON\n */\nexport function formatJson(data: any, pretty = true): string {\n if (pretty) {\n return JSON.stringify(data, null, 2);\n }\n return JSON.stringify(data);\n}\n\n/**\n * Format a tool call result\n */\nexport function formatToolCall(result: CallToolResult): string {\n const lines: string[] = [];\n\n if (result.isError) {\n lines.push(chalk.red(\"✗ Tool execution failed\"));\n lines.push(\"\");\n } else {\n lines.push(chalk.green(\"✓ Tool executed successfully\"));\n lines.push(\"\");\n }\n\n // Format content\n if (result.content && result.content.length > 0) {\n result.content.forEach((item, index) => {\n if (result.content.length > 1) {\n lines.push(chalk.bold(`Content ${index + 1}:`));\n }\n\n if (item.type === \"text\") {\n lines.push(item.text);\n } else if (item.type === \"image\") {\n lines.push(chalk.cyan(`[Image: ${item.mimeType || \"unknown type\"}]`));\n if (item.data) {\n lines.push(chalk.gray(`Data: ${item.data.substring(0, 50)}...`));\n }\n } else if (item.type === \"resource\") {\n lines.push(chalk.cyan(`[Resource]`));\n if (item.resource?.uri) {\n lines.push(chalk.gray(`URI: ${item.resource.uri}`));\n }\n if (item.resource && \"text\" in item.resource && item.resource.text) {\n lines.push(item.resource.text);\n }\n } else {\n lines.push(chalk.gray(`[Unknown content type: ${item.type}]`));\n }\n\n if (index < result.content.length - 1) {\n lines.push(\"\");\n }\n });\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format resource content\n */\nexport function formatResourceContent(content: any): string {\n if (!content || !content.contents) {\n return chalk.gray(\"No content\");\n }\n\n const lines: string[] = [];\n\n content.contents.forEach((item: any, index: number) => {\n if (content.contents.length > 1) {\n lines.push(chalk.bold(`Content ${index + 1}:`));\n }\n\n if (item.uri) {\n lines.push(chalk.gray(`URI: ${item.uri}`));\n }\n\n if (item.mimeType) {\n lines.push(chalk.gray(`Type: ${item.mimeType}`));\n }\n\n if (\"text\" in item && item.text) {\n lines.push(\"\");\n lines.push(item.text);\n } else if (\"blob\" in item && item.blob) {\n lines.push(\"\");\n lines.push(chalk.cyan(`[Binary data: ${item.blob.length} bytes]`));\n }\n\n if (index < content.contents.length - 1) {\n lines.push(\"\");\n lines.push(chalk.gray(\"─\".repeat(50)));\n lines.push(\"\");\n }\n });\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format a JSON schema in a readable way\n */\nexport function formatSchema(schema: any, indent = 0): string {\n if (!schema) {\n return chalk.gray(\"No schema\");\n }\n\n const lines: string[] = [];\n const pad = \" \".repeat(indent);\n\n if (schema.type === \"object\" && schema.properties) {\n Object.entries(schema.properties).forEach(([key, value]: [string, any]) => {\n const required = schema.required?.includes(key);\n const type = value.type || \"any\";\n const desc = value.description || \"\";\n\n const keyStr = required ? chalk.bold(key) : key;\n const typeStr = chalk.cyan(`(${type})`);\n const requiredStr = required ? chalk.red(\" *required\") : \"\";\n\n lines.push(`${pad}${keyStr} ${typeStr}${requiredStr}`);\n\n if (desc) {\n lines.push(`${pad} ${chalk.gray(desc)}`);\n }\n\n // Handle nested objects\n if (value.type === \"object\" && value.properties) {\n lines.push(formatSchema(value, indent + 1));\n }\n\n // Handle arrays\n if (value.type === \"array\" && value.items) {\n lines.push(`${pad} ${chalk.gray(\"Items:\")}`);\n if (value.items.type === \"object\") {\n lines.push(formatSchema(value.items, indent + 2));\n } else {\n lines.push(\n `${pad} ${chalk.cyan(`(${value.items.type || \"any\"})`)}`\n );\n }\n }\n });\n } else {\n lines.push(`${pad}${chalk.cyan(`Type: ${schema.type || \"any\"}`)}`);\n if (schema.description) {\n lines.push(`${pad}${chalk.gray(schema.description)}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format a list of items with bullets\n */\nexport function formatList(items: string[], bullet = \"•\"): string {\n return items.map((item) => ` ${bullet} ${item}`).join(\"\\n\");\n}\n\n/**\n * Format an error message\n */\nexport function formatError(error: Error | string): string {\n const message = typeof error === \"string\" ? error : error.message;\n return chalk.red(`✗ Error: ${message}`);\n}\n\n/**\n * Format a success message\n */\nexport function formatSuccess(message: string): string {\n return chalk.green(`✓ ${message}`);\n}\n\n/**\n * Format an info message\n */\nexport function formatInfo(message: string): string {\n return chalk.cyan(message);\n}\n\n/**\n * Format a warning message\n */\nexport function formatWarning(message: string): string {\n return chalk.yellow(`⚠ ${message}`);\n}\n\n/**\n * Create a section header\n */\nexport function formatHeader(text: string): string {\n return chalk.bold.white(text);\n}\n\n/**\n * Format key-value pairs\n */\nexport function formatKeyValue(\n pairs: Record<string, string | number | boolean>\n): string {\n const maxKeyLength = Math.max(...Object.keys(pairs).map((k) => k.length), 0);\n\n return Object.entries(pairs)\n .map(([key, value]) => {\n const paddedKey = key.padEnd(maxKeyLength);\n return ` ${chalk.gray(paddedKey)}: ${value}`;\n })\n .join(\"\\n\");\n}\n\n/**\n * Format prompt messages\n */\n/**\n * Format a date string as relative time (e.g., \"2 hours ago\", \"3 days ago\")\n */\nexport function formatRelativeTime(dateString: string): string {\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSecs = Math.floor(diffMs / 1000);\n const diffMins = Math.floor(diffSecs / 60);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n const diffWeeks = Math.floor(diffDays / 7);\n const diffMonths = Math.floor(diffDays / 30);\n const diffYears = Math.floor(diffDays / 365);\n\n if (diffYears > 0) {\n return `${diffYears} year${diffYears > 1 ? \"s\" : \"\"} ago`;\n } else if (diffMonths > 0) {\n return `${diffMonths} month${diffMonths > 1 ? \"s\" : \"\"} ago`;\n } else if (diffWeeks > 0) {\n return `${diffWeeks} week${diffWeeks > 1 ? \"s\" : \"\"} ago`;\n } else if (diffDays > 0) {\n return `${diffDays} day${diffDays > 1 ? \"s\" : \"\"} ago`;\n } else if (diffHours > 0) {\n return `${diffHours} hour${diffHours > 1 ? \"s\" : \"\"} ago`;\n } else if (diffMins > 0) {\n return `${diffMins} minute${diffMins > 1 ? \"s\" : \"\"} ago`;\n } else {\n return \"just now\";\n }\n}\n\nexport function formatPromptMessages(messages: any[]): string {\n if (!messages || messages.length === 0) {\n return chalk.gray(\"No messages\");\n }\n\n const lines: string[] = [];\n\n messages.forEach((msg, index) => {\n const role = msg.role || \"unknown\";\n const roleStr =\n role === \"user\"\n ? chalk.blue(\"[User]\")\n : role === \"assistant\"\n ? chalk.green(\"[Assistant]\")\n : chalk.gray(`[${role}]`);\n\n lines.push(`${roleStr}`);\n\n if (msg.content) {\n if (typeof msg.content === \"string\") {\n lines.push(msg.content);\n } else if (msg.content.type === \"text\") {\n lines.push(msg.content.text);\n } else if (msg.content.type === \"image\") {\n lines.push(chalk.cyan(`[Image: ${msg.content.mimeType}]`));\n } else if (msg.content.type === \"resource\") {\n lines.push(chalk.cyan(`[Resource: ${msg.content.resource?.uri}]`));\n if (msg.content.resource?.text) {\n lines.push(msg.content.resource.text);\n }\n }\n }\n\n if (index < messages.length - 1) {\n lines.push(\"\");\n }\n });\n\n return lines.join(\"\\n\");\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { readFile, writeFile, mkdir } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\n\nexport interface SessionConfig {\n type: \"http\" | \"stdio\";\n url?: string;\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n authToken?: string;\n lastUsed: string;\n serverInfo?: {\n name: string;\n version?: string;\n };\n capabilities?: Record<string, unknown>;\n}\n\nexport interface SessionStorage {\n activeSession: string | null;\n sessions: Record<string, SessionConfig>;\n}\n\nconst SESSION_FILE_PATH = join(homedir(), \".mcp-use\", \"cli-sessions.json\");\n\n/**\n * Ensure the session storage directory exists\n */\nasync function ensureSessionDir(): Promise<void> {\n const dir = join(homedir(), \".mcp-use\");\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n}\n\n/**\n * Load persisted sessions from disk\n */\nexport async function loadSessions(): Promise<SessionStorage> {\n try {\n await ensureSessionDir();\n\n if (!existsSync(SESSION_FILE_PATH)) {\n return { activeSession: null, sessions: {} };\n }\n\n const content = await readFile(SESSION_FILE_PATH, \"utf-8\");\n return JSON.parse(content);\n } catch (error) {\n // If file doesn't exist or is invalid, return empty storage\n return { activeSession: null, sessions: {} };\n }\n}\n\n/**\n * Save sessions to disk\n */\nasync function saveSessions(storage: SessionStorage): Promise<void> {\n await ensureSessionDir();\n await writeFile(SESSION_FILE_PATH, JSON.stringify(storage, null, 2), \"utf-8\");\n}\n\n/**\n * Save or update a session configuration\n */\nexport async function saveSession(\n name: string,\n config: SessionConfig\n): Promise<void> {\n const storage = await loadSessions();\n storage.sessions[name] = {\n ...config,\n lastUsed: new Date().toISOString(),\n };\n\n // Set as active session if no active session exists\n if (!storage.activeSession) {\n storage.activeSession = name;\n }\n\n await saveSessions(storage);\n}\n\n/**\n * Remove a session from storage\n */\nexport async function removeSession(name: string): Promise<void> {\n const storage = await loadSessions();\n delete storage.sessions[name];\n\n // Clear active session if it was the one removed\n if (storage.activeSession === name) {\n // Set to first available session or null\n const sessionNames = Object.keys(storage.sessions);\n storage.activeSession = sessionNames.length > 0 ? sessionNames[0] : null;\n }\n\n await saveSessions(storage);\n}\n\n/**\n * Get the currently active session name\n */\nexport async function getActiveSessionName(): Promise<string | null> {\n const storage = await loadSessions();\n return storage.activeSession;\n}\n\n/**\n * Get the active session configuration\n */\nexport async function getActiveSession(): Promise<{\n name: string;\n config: SessionConfig;\n} | null> {\n const storage = await loadSessions();\n if (!storage.activeSession || !storage.sessions[storage.activeSession]) {\n return null;\n }\n\n return {\n name: storage.activeSession,\n config: storage.sessions[storage.activeSession],\n };\n}\n\n/**\n * Get a specific session configuration by name\n */\nexport async function getSession(name: string): Promise<SessionConfig | null> {\n const storage = await loadSessions();\n return storage.sessions[name] || null;\n}\n\n/**\n * Set the active session\n */\nexport async function setActiveSession(name: string): Promise<void> {\n const storage = await loadSessions();\n\n if (!storage.sessions[name]) {\n throw new Error(`Session '${name}' not found`);\n }\n\n storage.activeSession = name;\n storage.sessions[name].lastUsed = new Date().toISOString();\n\n await saveSessions(storage);\n}\n\n/**\n * List all stored sessions\n */\nexport async function listAllSessions(): Promise<\n Array<{ name: string; config: SessionConfig; isActive: boolean }>\n> {\n const storage = await loadSessions();\n\n return Object.entries(storage.sessions).map(([name, config]) => ({\n name,\n config,\n isActive: name === storage.activeSession,\n }));\n}\n\n/**\n * Update session info after connection\n */\nexport async function updateSessionInfo(\n name: string,\n serverInfo: { name: string; version?: string },\n capabilities?: Record<string, unknown>\n): Promise<void> {\n const storage = await loadSessions();\n\n if (storage.sessions[name]) {\n storage.sessions[name].serverInfo = serverInfo;\n storage.sessions[name].capabilities = capabilities;\n storage.sessions[name].lastUsed = new Date().toISOString();\n await saveSessions(storage);\n }\n}\n","import chalk from \"chalk\";\nimport { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport open from \"open\";\nimport type { OrgInfo } from \"../utils/api.js\";\nimport { McpUseAPI, GitHubAuthRequiredError } from \"../utils/api.js\";\nimport {\n getWebUrl,\n isLoggedIn,\n readConfig,\n writeConfig,\n} from \"../utils/config.js\";\nimport {\n getGitInfo,\n gitInit,\n gitAddRemoteAndPush,\n gitCommitAndPush,\n hasUncommittedChanges,\n isGitHubUrl,\n} from \"../utils/git.js\";\nimport { getMcpServerUrl } from \"../utils/cloud-urls.js\";\nimport { getProjectLink, saveProjectLink } from \"../utils/project-link.js\";\nimport { loginCommand, promptOrgSelection } from \"./auth.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nasync function parseEnvFile(filePath: string): Promise<Record<string, string>> {\n try {\n const content = await fs.readFile(filePath, \"utf-8\");\n const envVars: Record<string, string> = {};\n const lines = content.split(\"\\n\");\n let currentKey: string | null = null;\n let currentValue = \"\";\n\n for (let line of lines) {\n line = line.trim();\n if (!line || line.startsWith(\"#\")) continue;\n if (currentKey && !line.includes(\"=\")) {\n currentValue += \"\\n\" + line;\n continue;\n }\n if (currentKey) {\n envVars[currentKey] = currentValue.replace(/^[\"']|[\"']$/g, \"\");\n currentKey = null;\n currentValue = \"\";\n }\n const equalIndex = line.indexOf(\"=\");\n if (equalIndex === -1) continue;\n const key = line.substring(0, equalIndex).trim();\n const value = line.substring(equalIndex + 1).trim();\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {\n console.log(chalk.yellow(`⚠️ Skipping invalid env key: ${key}`));\n continue;\n }\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n envVars[key] = value.slice(1, -1);\n } else if (value.startsWith('\"') || value.startsWith(\"'\")) {\n currentKey = key;\n currentValue = value.slice(1);\n } else {\n envVars[key] = value;\n }\n }\n if (currentKey) {\n envVars[currentKey] = currentValue.replace(/^[\"']|[\"']$/g, \"\");\n }\n return envVars;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new Error(`Environment file not found: ${filePath}`);\n }\n throw new Error(\n `Failed to parse environment file: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\nfunction parseEnvVar(envStr: string): { key: string; value: string } {\n const equalIndex = envStr.indexOf(\"=\");\n if (equalIndex === -1) {\n throw new Error(`Invalid env format: \"${envStr}\". Expected KEY=VALUE`);\n }\n const key = envStr.substring(0, equalIndex).trim();\n const value = envStr.substring(equalIndex + 1);\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {\n throw new Error(`Invalid env key: \"${key}\".`);\n }\n return { key, value };\n}\n\nasync function buildEnvVars(\n options: DeployOptions\n): Promise<Record<string, string>> {\n const envVars: Record<string, string> = {};\n if (options.envFile) {\n try {\n const fileEnv = await parseEnvFile(options.envFile);\n Object.assign(envVars, fileEnv);\n console.log(\n chalk.gray(\n `Loaded ${Object.keys(fileEnv).length} variable(s) from ${options.envFile}`\n )\n );\n } catch (error) {\n console.log(\n chalk.red(\n `✗ ${error instanceof Error ? error.message : \"Failed to load env file\"}`\n )\n );\n process.exit(1);\n }\n }\n if (options.env && options.env.length > 0) {\n for (const envStr of options.env) {\n try {\n const { key, value } = parseEnvVar(envStr);\n envVars[key] = value;\n } catch (error) {\n console.log(\n chalk.red(\n `✗ ${error instanceof Error ? error.message : \"Invalid env variable\"}`\n )\n );\n process.exit(1);\n }\n }\n }\n return envVars;\n}\n\ninterface DeployOptions {\n open?: boolean;\n name?: string;\n port?: number;\n runtime?: \"node\" | \"python\";\n new?: boolean;\n env?: string[];\n envFile?: string;\n rootDir?: string;\n org?: string;\n yes?: boolean;\n region?: \"US\" | \"EU\" | \"APAC\";\n buildCommand?: string;\n startCommand?: string;\n}\n\nasync function isMcpProject(cwd: string = process.cwd()): Promise<boolean> {\n try {\n const content = await fs.readFile(path.join(cwd, \"package.json\"), \"utf-8\");\n const pkg = JSON.parse(content);\n return !!(\n pkg.dependencies?.[\"mcp-use\"] ||\n pkg.dependencies?.[\"@modelcontextprotocol/sdk\"] ||\n pkg.devDependencies?.[\"mcp-use\"] ||\n pkg.devDependencies?.[\"@modelcontextprotocol/sdk\"]\n );\n } catch {\n return false;\n }\n}\n\nasync function getProjectName(cwd: string = process.cwd()): Promise<string> {\n try {\n const content = await fs.readFile(path.join(cwd, \"package.json\"), \"utf-8\");\n const pkg = JSON.parse(content);\n if (pkg.name) return pkg.name;\n } catch {\n // fall through\n }\n return path.basename(cwd);\n}\n\nasync function detectBuildCommand(cwd: string): Promise<string | undefined> {\n try {\n const content = await fs.readFile(path.join(cwd, \"package.json\"), \"utf-8\");\n if (JSON.parse(content).scripts?.build) return \"npm run build\";\n } catch {\n // noop\n }\n return undefined;\n}\n\nasync function detectStartCommand(cwd: string): Promise<string | undefined> {\n try {\n const content = await fs.readFile(path.join(cwd, \"package.json\"), \"utf-8\");\n const pkg = JSON.parse(content);\n if (pkg.scripts?.start) return \"npm start\";\n if (pkg.main) return `node ${pkg.main}`;\n } catch {\n // noop\n }\n return undefined;\n}\n\nasync function detectRuntime(cwd: string): Promise<\"node\" | \"python\"> {\n for (const f of [\"requirements.txt\", \"pyproject.toml\", \"setup.py\"]) {\n try {\n await fs.access(path.join(cwd, f));\n return \"python\";\n } catch {\n continue;\n }\n }\n return \"node\";\n}\n\nasync function prompt(\n question: string,\n defaultValue: \"y\" | \"n\" = \"n\"\n): Promise<boolean> {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n const indicator = defaultValue === \"y\" ? \"Y/n\" : \"y/N\";\n const q = question.replace(/(\\(y\\/n\\):)/, `(${indicator}):`);\n return new Promise((resolve) => {\n rl.question(q, (answer) => {\n rl.close();\n const a = answer.trim().toLowerCase();\n if (a === \"\") resolve(defaultValue === \"y\");\n else resolve(a === \"y\" || a === \"yes\");\n });\n });\n}\n\nasync function promptText(\n question: string,\n defaultValue?: string\n): Promise<string> {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n const suffix = defaultValue ? chalk.gray(` [${defaultValue}]`) : \"\";\n return new Promise((resolve) => {\n rl.question(question + suffix + \" \", (answer) => {\n rl.close();\n resolve(answer.trim() || defaultValue || \"\");\n });\n });\n}\n\n// ---------------------------------------------------------------------------\n// .gitignore management\n// ---------------------------------------------------------------------------\n\nconst REQUIRED_IGNORES = [\n \"node_modules\",\n \"dist\",\n \".env\",\n \".env.local\",\n \".mcp-use\",\n];\n\nasync function ensureGitignore(cwd: string): Promise<void> {\n const gitignorePath = path.join(cwd, \".gitignore\");\n let content = \"\";\n try {\n content = await fs.readFile(gitignorePath, \"utf-8\");\n } catch {\n // file doesn't exist yet\n }\n const missing = REQUIRED_IGNORES.filter((entry) => !content.includes(entry));\n if (missing.length > 0) {\n const additions = missing.join(\"\\n\");\n const newContent =\n content + (content.endsWith(\"\\n\") ? \"\" : \"\\n\") + additions + \"\\n\";\n await fs.writeFile(gitignorePath, newContent, \"utf-8\");\n }\n}\n\n// ---------------------------------------------------------------------------\n// Deployment progress (poll build-logs)\n// ---------------------------------------------------------------------------\n\nasync function displayDeploymentProgress(\n api: McpUseAPI,\n deploymentId: string,\n progressOptions?: { yes?: boolean }\n): Promise<void> {\n const frames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n let frameIndex = 0;\n let spinnerInterval: NodeJS.Timeout | null = null;\n\n const startSpinner = (message: string) => {\n if (spinnerInterval) clearInterval(spinnerInterval);\n process.stdout.write(\"\\r\\x1b[K\");\n spinnerInterval = setInterval(() => {\n process.stdout.write(\n \"\\r\" + chalk.cyan(frames[frameIndex]) + \" \" + chalk.gray(message)\n );\n frameIndex = (frameIndex + 1) % frames.length;\n }, 80);\n };\n\n const stopSpinner = () => {\n if (spinnerInterval) {\n clearInterval(spinnerInterval);\n spinnerInterval = null;\n process.stdout.write(\"\\r\\x1b[K\");\n }\n };\n\n console.log();\n startSpinner(\"Deploying...\");\n\n let checkCount = 0;\n const maxChecks = 120;\n let delay = 2000;\n const maxDelay = 10000;\n let buildLogOffset = 0;\n\n while (checkCount < maxChecks) {\n const waitMs = delay;\n await new Promise<void>((r) => setTimeout(r, waitMs));\n checkCount++;\n\n try {\n const resp = await api.getDeploymentBuildLogs(\n deploymentId,\n buildLogOffset\n );\n if (resp.logs.length > 0) {\n for (const line of resp.logs.split(\"\\n\").filter((l) => l.trim())) {\n try {\n const d = JSON.parse(line);\n if (d.line) {\n stopSpinner();\n const color =\n d.level === \"error\"\n ? chalk.red\n : d.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const prefix = d.step ? chalk.cyan(`[${d.step}]`) + \" \" : \"\";\n console.log(prefix + color(d.line));\n }\n } catch {\n stopSpinner();\n console.log(chalk.gray(line));\n }\n }\n buildLogOffset = resp.offset;\n }\n } catch {\n // not ready yet\n }\n\n const dep = await api.getDeployment(deploymentId);\n\n if (dep.status === \"running\") {\n stopSpinner();\n const mcpUrl = getMcpServerUrl(dep);\n const webUrl = (await getWebUrl()).replace(/\\/$/, \"\");\n const config = await readConfig();\n let dashboardUrl: string | null = null;\n if (dep.serverId) {\n dashboardUrl = config.orgSlug\n ? `${webUrl}/cloud/${config.orgSlug}/servers/${dep.serverId}`\n : `${webUrl}/cloud/servers/${dep.serverId}`;\n }\n const inspectorUrl = `https://inspector.manufact.com/inspector?autoConnect=${encodeURIComponent(mcpUrl)}`;\n\n console.log(chalk.green.bold(\"✓ Deployment successful!\\n\"));\n if (mcpUrl) {\n console.log(chalk.white(\"🌐 MCP Server URL:\"));\n console.log(chalk.cyan.bold(` ${mcpUrl}\\n`));\n }\n if (dashboardUrl) {\n console.log(chalk.white(\"📊 Dashboard:\"));\n console.log(chalk.cyan.bold(` ${dashboardUrl}\\n`));\n }\n console.log(chalk.white(\"🔍 Inspector URL:\"));\n console.log(chalk.cyan.bold(` ${inspectorUrl}\\n`));\n console.log(chalk.gray(\"Deployment ID: \") + chalk.white(dep.id));\n return;\n } else if (dep.status === \"failed\") {\n stopSpinner();\n console.log(chalk.red.bold(\"✗ Deployment failed\\n\"));\n if (dep.error) {\n const internalPatterns = [\n \"GraphQL\",\n \"authenticated\",\n \"INTERNAL\",\n \"Fly API\",\n \"token validation\",\n \"context deadline\",\n \"Bad gateway\",\n \"502\",\n \"503\",\n ];\n const isInternalError = internalPatterns.some((p) =>\n dep.error!.includes(p)\n );\n if (isInternalError) {\n console.log(\n chalk.red(\"Error: \") +\n \"An internal infrastructure error occurred. Please try again.\"\n );\n console.log(chalk.gray(\" Details: \" + dep.error));\n } else {\n console.log(chalk.red(\"Error: \") + dep.error);\n }\n }\n process.exit(1);\n } else if (dep.status === \"building\" || dep.status === \"pending\") {\n startSpinner(\"Building and deploying...\");\n delay = Math.min(delay * 1.2, maxDelay);\n } else {\n stopSpinner();\n console.log(chalk.yellow(\"⚠️ Deployment status: \") + dep.status);\n return;\n }\n }\n\n stopSpinner();\n console.log(chalk.yellow(\"⚠️ Deployment is taking longer than expected.\"));\n console.log(\n chalk.gray(\"Check status with: \") +\n chalk.white(`mcp-use deployments get ${deploymentId}`)\n );\n}\n\n// ---------------------------------------------------------------------------\n// GitHub helpers\n// ---------------------------------------------------------------------------\n\nasync function checkRepoAccess(\n api: McpUseAPI,\n owner: string,\n repo: string\n): Promise<boolean> {\n try {\n const resp = await api.getGitHubRepos(true);\n return resp.repos.some((r) => r.full_name === `${owner}/${repo}`);\n } catch {\n return false;\n }\n}\n\nasync function promptGitHubInstallation(\n api: McpUseAPI,\n reason: \"not_connected\" | \"no_access\",\n repoName?: string,\n opts?: { yes?: boolean; installationId?: string }\n): Promise<boolean> {\n const yes = !!opts?.yes;\n console.log();\n\n if (reason === \"not_connected\") {\n console.log(chalk.yellow(\"⚠️ GitHub account not connected\"));\n console.log(\n chalk.white(\"Deployments require a connected GitHub account.\\n\")\n );\n } else {\n console.log(\n chalk.yellow(\"⚠️ GitHub App doesn't have access to this repository\")\n );\n console.log(\n chalk.white(\n `The GitHub App needs permission to access ${chalk.cyan(repoName || \"this repository\")}.\\n`\n )\n );\n }\n\n const shouldInstall = yes\n ? true\n : await prompt(\n chalk.white(\n `Would you like to ${reason === \"not_connected\" ? \"connect\" : \"configure\"} GitHub now? (Y/n): `\n ),\n \"y\"\n );\n if (!shouldInstall) return false;\n\n try {\n const appName = await api.getGitHubAppName();\n\n const installUrl = `https://github.com/apps/${appName}/installations/new`;\n\n console.log(chalk.cyan(`\\nOpening browser...`));\n console.log(chalk.gray(`URL: ${installUrl}\\n`));\n\n if (reason === \"no_access\") {\n console.log(\n chalk.white(\"Please add \") +\n chalk.cyan.bold(repoName || \"your repository\") +\n chalk.white(\" to the app's repository access, then return here.\\n\")\n );\n } else {\n console.log(\n chalk.white(\"Complete the GitHub App installation, then return here.\\n\")\n );\n }\n\n await open(installUrl);\n\n if (!yes) {\n await prompt(chalk.white(\"Press Enter when done...\"), \"y\");\n } else {\n console.log(chalk.gray(\"Waiting for GitHub configuration (polling)...\"));\n const deadline = Date.now() + 120_000;\n while (Date.now() < deadline) {\n await new Promise((r) => setTimeout(r, 2000));\n try {\n const status = await api.getGitHubConnectionStatus();\n if (status.is_connected) {\n if (!repoName) return true;\n const [o, r] = repoName.split(\"/\");\n if (o && r && (await checkRepoAccess(api, o, r))) return true;\n }\n } catch {\n // keep polling\n }\n }\n }\n\n return true;\n } catch {\n console.log(chalk.yellow(\"\\n⚠️ Unable to open browser automatically\"));\n console.log(\n chalk.white(\"Please visit: \") +\n chalk.cyan(\"https://manufact.com/cloud/settings\")\n );\n return false;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main deploy command\n// ---------------------------------------------------------------------------\n\nexport async function deployCommand(options: DeployOptions): Promise<void> {\n try {\n const cwd = process.cwd();\n\n // ── Step 1: Auth ──────────────────────────────────────────────\n if (!(await isLoggedIn())) {\n console.log(chalk.cyan.bold(\"Welcome to Manufact Cloud!\\n\"));\n if (options.yes) {\n console.log(\n chalk.red(\n \"✗ Not logged in. Run \" +\n chalk.white(\"npx mcp-use login\") +\n \" first.\"\n )\n );\n process.exit(1);\n }\n\n const shouldLogin = await prompt(\n chalk.white(\"You need to log in to deploy. Log in now? (Y/n): \"),\n \"y\"\n );\n if (!shouldLogin) {\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(0);\n }\n\n try {\n await loginCommand({ silent: false });\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ Login failed. Please try again.\"));\n process.exit(1);\n }\n console.log(chalk.gray(\"\\nContinuing with deployment...\\n\"));\n } catch (error) {\n console.error(\n chalk.red.bold(\"✗ Login failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n }\n\n const api = await McpUseAPI.create();\n\n // ── Step 2: Org resolution ────────────────────────────────────\n if (options.org) {\n const authInfo = await api.testAuth();\n const match = (authInfo.orgs ?? []).find(\n (o) =>\n o.slug === options.org ||\n o.id === options.org ||\n o.name.toLowerCase() === options.org!.toLowerCase()\n );\n if (match) {\n api.setOrgId(match.id);\n const slug = match.slug ? chalk.gray(` (${match.slug})`) : \"\";\n console.log(\n chalk.gray(\"Organization: \") + chalk.cyan(match.name) + slug\n );\n } else {\n console.error(\n chalk.red(\n `✗ Organization \"${options.org}\" not found. Run ${chalk.white(\"npx mcp-use org list\")} to see available organizations.`\n )\n );\n process.exit(1);\n }\n } else {\n const config = await readConfig();\n if (!config.orgId) {\n const authInfo = await api.testAuth();\n if (authInfo.orgs.length === 0) {\n console.log(\n chalk.red(\n \"✗ No organizations found. Please create one at manufact.com/cloud.\"\n )\n );\n process.exit(1);\n }\n let selectedOrg: OrgInfo | null;\n if (authInfo.orgs.length === 1) {\n selectedOrg = authInfo.orgs[0];\n } else {\n selectedOrg = await promptOrgSelection(\n authInfo.orgs,\n authInfo.default_org_id\n );\n }\n if (!selectedOrg) {\n console.log(chalk.red(\"✗ No organization selected.\"));\n process.exit(1);\n }\n api.setOrgId(selectedOrg.id);\n await writeConfig({\n ...config,\n orgId: selectedOrg.id,\n orgName: selectedOrg.name,\n orgSlug: selectedOrg.slug ?? undefined,\n });\n console.log(\n chalk.gray(\"Organization: \") + chalk.cyan(selectedOrg.name)\n );\n } else {\n if (config.orgName) {\n const slug = config.orgSlug ? chalk.gray(` (${config.orgSlug})`) : \"\";\n console.log(\n chalk.gray(\"Organization: \") + chalk.cyan(config.orgName) + slug\n );\n }\n }\n }\n\n console.log(chalk.cyan.bold(\"\\n🚀 Deploying to Manufact cloud...\\n\"));\n\n // ── Step 3: GitHub connection ─────────────────────────────────\n let connectionStatus = await api\n .getGitHubConnectionStatus()\n .catch(() => null);\n if (!connectionStatus?.is_connected) {\n const installed = await promptGitHubInstallation(\n api,\n \"not_connected\",\n undefined,\n { yes: options.yes }\n );\n if (!installed) {\n console.log(chalk.gray(\"Deployment cancelled.\"));\n process.exit(0);\n }\n connectionStatus = await api\n .getGitHubConnectionStatus()\n .catch(() => null);\n if (!connectionStatus?.is_connected) {\n console.log(chalk.red(\"\\n✗ GitHub connection could not be verified.\"));\n console.log(\n chalk.cyan(\n \" Visit https://manufact.com/cloud/settings to connect GitHub.\\n\"\n )\n );\n process.exit(1);\n }\n }\n\n const installations = connectionStatus.installations ?? [];\n if (installations.length === 0) {\n console.log(chalk.red(\"✗ No GitHub installations found.\"));\n process.exit(1);\n }\n\n console.log(chalk.green(\"✓ GitHub connected\\n\"));\n\n // Resolved later based on user selection or repo ownership.\n let installationDbId: string | undefined;\n let githubInstallationId: string | undefined;\n\n // ── Step 4: Project & Git ─────────────────────────────────────\n const projectDir = options.rootDir\n ? path.resolve(cwd, options.rootDir)\n : cwd;\n\n if (options.rootDir) {\n try {\n await fs.access(projectDir);\n } catch {\n console.log(\n chalk.red(`✗ Root directory not found: ${options.rootDir}`)\n );\n process.exit(1);\n }\n }\n\n const isMcp = await isMcpProject(projectDir);\n if (!isMcp && !options.yes) {\n console.log(\n chalk.yellow(\"⚠️ This doesn't look like an MCP server project.\")\n );\n const shouldContinue = await prompt(\n chalk.white(\"Continue anyway? (y/n): \")\n );\n if (!shouldContinue) {\n process.exit(0);\n }\n console.log();\n }\n\n let gitInfo = await getGitInfo(cwd);\n let repoFullName: string | undefined;\n let branch: string = \"main\";\n\n if (!gitInfo.isGitRepo || !gitInfo.remoteUrl) {\n // No git repo or no remote — offer to create one\n const projectName = options.name || (await getProjectName(projectDir));\n\n console.log(chalk.yellow(\"⚠️ No GitHub remote found.\\n\"));\n if (options.yes) {\n console.log(chalk.gray(\"Creating GitHub repository automatically...\"));\n } else {\n const shouldCreate = await prompt(\n chalk.white(\"Create a GitHub repository and push your code? (Y/n): \"),\n \"y\"\n );\n if (!shouldCreate) {\n console.log(\n chalk.gray(\n \"Deployment cancelled. Set up a GitHub remote and try again.\"\n )\n );\n process.exit(0);\n }\n }\n\n // Let the user pick which GitHub account to create the repo under.\n // Default to the first org-type installation (org accounts support auto-create).\n const defaultIdx = installations.findIndex(\n (i) => i.account_type === \"Organization\"\n );\n let selectedIdx = defaultIdx >= 0 ? defaultIdx : 0;\n\n if (installations.length > 1 && !options.yes) {\n console.log(\n chalk.cyan.bold(\"🐙 Select a GitHub account for the repository:\\n\")\n );\n for (let i = 0; i < installations.length; i++) {\n const inst = installations[i];\n const typeLabel =\n inst.account_type === \"Organization\"\n ? chalk.gray(\" (org)\")\n : chalk.gray(\" (personal)\");\n const marker = i === selectedIdx ? chalk.green(\" ← default\") : \"\";\n console.log(\n ` ${chalk.white(`${i + 1}.`)} ${inst.account_login}${typeLabel}${marker}`\n );\n }\n console.log();\n\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n const answer = await new Promise<string>((resolve) => {\n rl.question(\n chalk.gray(`Enter number [${selectedIdx + 1}]: `),\n (a) => {\n rl.close();\n resolve(a.trim());\n }\n );\n });\n const parsed = answer === \"\" ? selectedIdx : parseInt(answer, 10) - 1;\n if (parsed >= 0 && parsed < installations.length) {\n selectedIdx = parsed;\n }\n }\n\n const repoInstallation = installations[selectedIdx];\n installationDbId = repoInstallation.id;\n githubInstallationId = repoInstallation.installation_id;\n\n const repoName = options.yes\n ? projectName\n : await promptText(chalk.gray(\"Repository name:\"), projectName);\n\n await ensureGitignore(cwd);\n\n console.log(\n chalk.gray(\n `Creating repository on ${repoInstallation.account_login}...`\n )\n );\n\n let repoResult: { fullName: string; cloneUrl: string; htmlUrl: string };\n try {\n repoResult = await api.createGitHubRepo({\n installationId: repoInstallation.installation_id,\n name: repoName,\n private: true,\n org: repoInstallation.account_login,\n });\n } catch (err) {\n if (err instanceof GitHubAuthRequiredError) {\n console.log(\n chalk.yellow(\n `\\n Personal accounts require a one-time GitHub authorization.\\n`\n )\n );\n try {\n await open(err.authorizeUrl);\n console.log(\n chalk.gray(\" Browser opened. Authorize and return here.\\n\")\n );\n } catch {\n console.log(\n chalk.gray(\n ` Open this URL in your browser:\\n ${err.authorizeUrl}\\n`\n )\n );\n }\n const readline = await import(\"node:readline\");\n await new Promise<void>((resolve) => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n rl.question(\n chalk.gray(\" Press Enter after authorizing...\"),\n () => {\n rl.close();\n resolve();\n }\n );\n });\n console.log(chalk.gray(\"Retrying repository creation...\"));\n repoResult = await api.createGitHubRepo({\n installationId: repoInstallation.installation_id,\n name: repoName,\n private: true,\n org: repoInstallation.account_login,\n });\n } else {\n throw err;\n }\n }\n console.log(chalk.green(`✓ Created ${chalk.cyan(repoResult.fullName)}`));\n\n if (!gitInfo.isGitRepo) {\n await ensureGitignore(cwd);\n console.log(chalk.gray(\"Initializing git...\"));\n await gitInit(cwd, \"Initial commit\");\n console.log(chalk.gray(\"Pushing to GitHub...\"));\n await gitAddRemoteAndPush(cwd, repoResult.cloneUrl, \"main\");\n } else {\n if (await hasUncommittedChanges(cwd)) {\n console.log(\n chalk.red(\n \"✗ You have uncommitted changes. Commit and push before deploying.\"\n )\n );\n process.exit(1);\n }\n console.log(chalk.gray(\"Adding remote and pushing...\"));\n await gitAddRemoteAndPush(\n cwd,\n repoResult.cloneUrl,\n gitInfo.branch || \"main\"\n );\n }\n\n console.log(chalk.green(\"✓ Code pushed to GitHub\\n\"));\n\n gitInfo = await getGitInfo(cwd);\n repoFullName = repoResult.fullName;\n branch = gitInfo.branch || \"main\";\n } else if (!isGitHubUrl(gitInfo.remoteUrl!)) {\n console.log(chalk.red(\"✗ Remote is not a GitHub repository\"));\n console.log(chalk.yellow(` Current remote: ${gitInfo.remoteUrl}\\n`));\n process.exit(1);\n } else if (!gitInfo.owner || !gitInfo.repo) {\n console.log(chalk.red(\"✗ Could not parse GitHub repository information\"));\n process.exit(1);\n } else {\n repoFullName = `${gitInfo.owner}/${gitInfo.repo}`;\n branch = gitInfo.branch || \"main\";\n\n // Resolve installation matching the repo owner\n const ownerLower = gitInfo.owner!.toLowerCase();\n const matchingInst =\n installations.find(\n (i) => i.account_login.toLowerCase() === ownerLower\n ) ??\n installations.find((i) => i.account_type === \"Organization\") ??\n installations[0];\n installationDbId = matchingInst.id;\n githubInstallationId = matchingInst.installation_id;\n\n // Check for uncommitted changes\n if (gitInfo.hasUncommittedChanges) {\n if (options.yes) {\n console.log(\n chalk.red(\n \"✗ You have uncommitted changes. Commit and push before deploying.\"\n )\n );\n process.exit(1);\n }\n console.log(chalk.yellow(\"⚠️ You have uncommitted changes.\\n\"));\n const shouldCommit = await prompt(\n chalk.white(\"Commit and push changes before deploying? (Y/n): \"),\n \"y\"\n );\n if (shouldCommit) {\n await ensureGitignore(cwd);\n console.log(chalk.gray(\"Committing and pushing...\"));\n await gitCommitAndPush(cwd, \"Deploy changes\", branch);\n gitInfo = await getGitInfo(cwd);\n console.log(chalk.green(\"✓ Changes pushed\\n\"));\n } else {\n console.log(chalk.gray(\"Deploying from last pushed commit.\\n\"));\n }\n }\n\n // Check repo access\n console.log(chalk.gray(\"Checking repository access...\"));\n const hasAccess = await checkRepoAccess(\n api,\n gitInfo.owner!,\n gitInfo.repo!\n );\n if (!hasAccess) {\n console.log(\n chalk.yellow(\n `⚠️ GitHub App doesn't have access to ${chalk.cyan(repoFullName)}`\n )\n );\n const configured = await promptGitHubInstallation(\n api,\n \"no_access\",\n repoFullName,\n { yes: options.yes, installationId: githubInstallationId }\n );\n if (!configured) {\n process.exit(0);\n }\n const retry = await checkRepoAccess(api, gitInfo.owner!, gitInfo.repo!);\n if (!retry) {\n const appName = await api.getGitHubAppName();\n console.log(\n chalk.red(\n `\\n✗ Repository ${chalk.cyan(repoFullName)} is still not accessible.`\n )\n );\n console.log(\n chalk.cyan(\n ` https://github.com/apps/${appName}/installations/new\\n`\n )\n );\n process.exit(1);\n }\n }\n console.log(chalk.green(\"✓ Repository access confirmed\"));\n }\n\n // ── Step 5: Display config ────────────────────────────────────\n const projectName = options.name || (await getProjectName(projectDir));\n const port = options.port || 3000;\n const buildCommand = await detectBuildCommand(projectDir);\n const startCommand = await detectStartCommand(projectDir);\n const runtime = options.runtime || (await detectRuntime(projectDir));\n const envVars = await buildEnvVars(options);\n\n console.log();\n console.log(chalk.white(\"Deployment configuration:\"));\n console.log(chalk.gray(` Repository: `) + chalk.cyan(repoFullName));\n console.log(chalk.gray(` Branch: `) + chalk.cyan(branch));\n console.log(chalk.gray(` Name: `) + chalk.cyan(projectName));\n console.log(chalk.gray(` Runtime: `) + chalk.cyan(runtime));\n console.log(chalk.gray(` Port: `) + chalk.cyan(port));\n if (options.region)\n console.log(chalk.gray(` Region: `) + chalk.cyan(options.region));\n if (options.buildCommand)\n console.log(\n chalk.gray(` Build command: `) + chalk.cyan(options.buildCommand)\n );\n else if (buildCommand)\n console.log(\n chalk.gray(` Build command: `) +\n chalk.gray(buildCommand + \" (auto-detected)\")\n );\n if (options.startCommand)\n console.log(\n chalk.gray(` Start command: `) + chalk.cyan(options.startCommand)\n );\n else if (startCommand)\n console.log(\n chalk.gray(` Start command: `) +\n chalk.gray(startCommand + \" (auto-detected)\")\n );\n if (Object.keys(envVars).length > 0) {\n console.log(\n chalk.gray(` Environment: `) +\n chalk.cyan(`${Object.keys(envVars).length} variable(s)`)\n );\n }\n console.log();\n\n if (!options.yes) {\n const shouldDeploy = await prompt(chalk.white(`Deploy? (Y/n): `), \"y\");\n if (!shouldDeploy) {\n console.log(chalk.gray(\"Deployment cancelled.\"));\n process.exit(0);\n }\n }\n\n // ── Step 6: Deploy ────────────────────────────────────────────\n const existingLink = !options.new ? await getProjectLink(cwd) : null;\n let serverId = existingLink?.serverId;\n\n if (existingLink && serverId) {\n try {\n const existingDep = await api.getDeployment(existingLink.deploymentId);\n if (existingDep && existingDep.status !== \"failed\") {\n console.log(chalk.green(`✓ Found linked server`));\n console.log(chalk.gray(` Redeploying to maintain the same URL...`));\n console.log(chalk.cyan(` URL: ${getMcpServerUrl(existingDep)}\\n`));\n\n const newDep = await api.createDeployment({\n serverId,\n branch,\n trigger: \"redeploy\",\n });\n\n await saveProjectLink(cwd, {\n ...existingLink,\n linkedAt: new Date().toISOString(),\n deploymentId: newDep.id,\n });\n\n console.log(\n chalk.green(\"✓ Deployment created: \") + chalk.gray(newDep.id)\n );\n await displayDeploymentProgress(api, newDep.id, { yes: options.yes });\n return;\n }\n } catch (err: any) {\n const is404 =\n err?.status === 404 || (err?.message ?? \"\").includes(\"404\");\n if (is404) {\n console.log(\n chalk.yellow(\"⚠️ Previously linked server no longer exists.\\n\")\n );\n if (!options.yes) {\n const shouldRecreate = await prompt(\n chalk.white(\"Create a new server and deploy? (Y/n): \"),\n \"y\"\n );\n if (!shouldRecreate) {\n console.log(chalk.gray(\"Deployment cancelled.\"));\n process.exit(0);\n }\n }\n serverId = undefined;\n }\n }\n }\n\n let deploymentId: string | undefined;\n\n if (serverId) {\n console.log(chalk.gray(\"Creating deployment...\"));\n try {\n const result = await api.createDeployment({\n serverId,\n branch,\n trigger: \"manual\",\n });\n deploymentId = result.id;\n } catch (err: any) {\n const is404 =\n err?.status === 404 || (err?.message ?? \"\").includes(\"404\");\n if (is404) {\n console.log(\n chalk.yellow(\n \"⚠️ Linked server no longer exists. Creating a new one...\\n\"\n )\n );\n serverId = undefined;\n } else {\n throw err;\n }\n }\n }\n\n if (!serverId) {\n const orgId = await api.resolveOrganizationId();\n\n if (!installationDbId) {\n console.log(\n chalk.red(\n \"✗ Could not determine GitHub installation for this repository.\"\n )\n );\n process.exit(1);\n }\n\n console.log(chalk.gray(\"Creating server and deployment...\"));\n const serverResult = await api.createServer({\n type: \"github\",\n organizationId: orgId,\n installationId: installationDbId,\n name: projectName,\n repoFullName: repoFullName!,\n branch,\n rootDir: options.rootDir,\n port,\n env: Object.keys(envVars).length > 0 ? envVars : undefined,\n region: options.region,\n buildCommand: options.buildCommand,\n startCommand: options.startCommand,\n });\n\n deploymentId = serverResult.deploymentId ?? \"\";\n if (!deploymentId) {\n console.log(\n chalk.green(\"✓ Server created: \") + chalk.gray(serverResult.server.id)\n );\n console.log(chalk.yellow(\"⚠️ No deployment was triggered.\"));\n return;\n }\n\n await saveProjectLink(cwd, {\n deploymentId,\n deploymentName: projectName,\n linkedAt: new Date().toISOString(),\n serverId: serverResult.server.id,\n });\n console.log(\n chalk.gray(` Linked to this project (stored in .mcp-use/project.json)`)\n );\n console.log(chalk.gray(` Future deploys will reuse the same URL\\n`));\n }\n\n if (!deploymentId) {\n console.log(chalk.red(\"✗ No deployment was created.\"));\n process.exit(1);\n }\n\n console.log(\n chalk.green(\"✓ Deployment created: \") + chalk.gray(deploymentId)\n );\n await displayDeploymentProgress(api, deploymentId, { yes: options.yes });\n\n if (options.open) {\n const dep = await api.getDeployment(deploymentId);\n const url = getMcpServerUrl(dep);\n if (url) {\n console.log(chalk.gray(\"\\nOpening in browser...\"));\n await open(url);\n }\n }\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Deployment failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n","import { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execAsync = promisify(exec);\n\nexport interface GitInfo {\n isGitRepo: boolean;\n remoteUrl?: string;\n owner?: string;\n repo?: string;\n branch?: string;\n commitSha?: string;\n commitMessage?: string;\n hasUncommittedChanges?: boolean;\n}\n\n/**\n * Execute git command\n */\nasync function gitCommand(\n command: string,\n cwd: string = process.cwd()\n): Promise<string | null> {\n try {\n const { stdout } = await execAsync(command, { cwd });\n return stdout.trim();\n } catch (error) {\n return null;\n }\n}\n\n/**\n * Check if directory is a git repository\n */\nexport async function isGitRepo(cwd: string = process.cwd()): Promise<boolean> {\n const result = await gitCommand(\"git rev-parse --is-inside-work-tree\", cwd);\n return result === \"true\";\n}\n\n/**\n * Get git remote URL\n */\nexport async function getRemoteUrl(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand(\"git config --get remote.origin.url\", cwd);\n}\n\n/**\n * Parse GitHub owner and repo from remote URL\n */\nexport function parseGitHubUrl(\n url: string\n): { owner: string; repo: string } | null {\n // Handle both SSH and HTTPS URLs\n // SSH: git@github.com:owner/repo.git\n // HTTPS: https://github.com/owner/repo.git\n const sshMatch = url.match(/git@github\\.com:([^/]+)\\/(.+?)(?:\\.git)?$/);\n const httpsMatch = url.match(\n /https:\\/\\/github\\.com\\/([^/]+)\\/(.+?)(?:\\.git)?$/\n );\n\n const match = sshMatch || httpsMatch;\n if (!match) return null;\n\n return {\n owner: match[1],\n repo: match[2],\n };\n}\n\n/**\n * Get current branch\n */\nexport async function getCurrentBranch(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand(\"git rev-parse --abbrev-ref HEAD\", cwd);\n}\n\n/**\n * Get current commit SHA\n */\nexport async function getCommitSha(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand(\"git rev-parse HEAD\", cwd);\n}\n\n/**\n * Get current commit message\n */\nexport async function getCommitMessage(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand(\"git log -1 --pretty=%B\", cwd);\n}\n\n/**\n * Check if there are uncommitted changes\n */\nexport async function hasUncommittedChanges(\n cwd: string = process.cwd()\n): Promise<boolean> {\n const result = await gitCommand(\"git status --porcelain\", cwd);\n return result !== null && result.length > 0;\n}\n\n/**\n * Get all git info for current directory\n */\nexport async function getGitInfo(\n cwd: string = process.cwd()\n): Promise<GitInfo> {\n const isRepo = await isGitRepo(cwd);\n\n if (!isRepo) {\n return { isGitRepo: false };\n }\n\n const remoteUrl = await getRemoteUrl(cwd);\n const branch = await getCurrentBranch(cwd);\n const commitSha = await getCommitSha(cwd);\n const commitMessage = await getCommitMessage(cwd);\n const uncommittedChanges = await hasUncommittedChanges(cwd);\n\n let owner: string | undefined;\n let repo: string | undefined;\n\n if (remoteUrl) {\n const parsed = parseGitHubUrl(remoteUrl);\n if (parsed) {\n owner = parsed.owner;\n repo = parsed.repo;\n }\n }\n\n return {\n isGitRepo: true,\n remoteUrl: remoteUrl || undefined,\n owner,\n repo,\n branch: branch || undefined,\n commitSha: commitSha || undefined,\n commitMessage: commitMessage || undefined,\n hasUncommittedChanges: uncommittedChanges,\n };\n}\n\n/**\n * Initialize a git repo, add all files, and commit.\n */\nexport async function gitInit(\n cwd: string,\n message: string = \"Initial commit\"\n): Promise<void> {\n await gitCommand(\"git init\", cwd);\n await gitCommand(\"git add .\", cwd);\n await gitCommand(`git commit -m \"${message}\"`, cwd);\n}\n\n/**\n * Add a remote and push to it.\n */\nexport async function gitAddRemoteAndPush(\n cwd: string,\n cloneUrl: string,\n branch: string = \"main\"\n): Promise<void> {\n await gitCommand(`git remote add origin ${cloneUrl}`, cwd);\n await gitCommand(`git push -u origin ${branch}`, cwd);\n}\n\n/**\n * Commit all changes and push.\n */\nexport async function gitCommitAndPush(\n cwd: string,\n message: string,\n branch: string = \"main\"\n): Promise<void> {\n await gitCommand(\"git add .\", cwd);\n await gitCommand(`git commit -m \"${message}\"`, cwd);\n await gitCommand(`git push origin ${branch}`, cwd);\n}\n\n/**\n * Check if remote is a GitHub URL\n */\nexport function isGitHubUrl(url: string): boolean {\n try {\n // Handle HTTP(S) URLs\n const parsedUrl = new URL(url);\n return (\n parsedUrl.hostname === \"github.com\" ||\n parsedUrl.hostname === \"www.github.com\"\n );\n } catch {\n // Handle SSH/shortened git URLs: git@github.com:user/repo.git\n // Extract the host before the \":\" or \"/\" (if git@host:repo or git@host/repo)\n const sshMatch = url.match(/^git@([^:/]+)[:/]/);\n if (sshMatch) {\n const host = sshMatch[1];\n return host === \"github.com\" || host === \"www.github.com\";\n }\n }\n return false;\n}\n","import type { Deployment } from \"./api.js\";\n\nconst GATEWAY_DOMAIN = \"run.mcp-use.com\";\n\nexport function buildGatewayUrl(slugOrId: string): string {\n return `https://${slugOrId}.${GATEWAY_DOMAIN}/mcp`;\n}\n\n/** MCP URL for a deployment: explicit `mcpUrl`, else gateway URL from `serverId`. */\nexport function getMcpServerUrl(deployment: Deployment): string {\n if (deployment.mcpUrl) return deployment.mcpUrl;\n if (deployment.serverId) return buildGatewayUrl(deployment.serverId);\n return \"\";\n}\n\n/**\n * MCP URL for a cloud server row/detail: use API `mcpUrl` when set; otherwise\n * gateway host uses **slug** when present (matches production hostnames), else `id`.\n */\nexport function getMcpServerUrlForCloudServer(server: {\n mcpUrl?: string | null;\n slug?: string | null;\n id: string;\n}): string {\n if (server.mcpUrl) return server.mcpUrl;\n const hostKey = (server.slug && server.slug.trim()) || server.id;\n return buildGatewayUrl(hostKey);\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nexport const MCP_USE_DIR = \".mcp-use\";\nexport const MCP_USE_DIR_PROJECT = \"project.json\";\n\nexport interface ProjectLink {\n deploymentId: string;\n deploymentName: string;\n deploymentUrl?: string;\n linkedAt: string;\n serverId?: string;\n}\n\n// Get .mcp-use directory path\nexport function getMcpUseDirectory(cwd: string): string {\n return path.join(cwd, MCP_USE_DIR);\n}\n\n// Read project link\nexport async function getProjectLink(cwd: string): Promise<ProjectLink | null> {\n try {\n const linkPath = path.join(getMcpUseDirectory(cwd), MCP_USE_DIR_PROJECT);\n const content = await fs.readFile(linkPath, \"utf-8\");\n return JSON.parse(content);\n } catch (err: any) {\n if (err.code === \"ENOENT\") return null;\n throw err;\n }\n}\n\n// Write project link\nexport async function saveProjectLink(\n cwd: string,\n link: ProjectLink\n): Promise<void> {\n const mcpUseDir = getMcpUseDirectory(cwd);\n await fs.mkdir(mcpUseDir, { recursive: true });\n\n const linkPath = path.join(mcpUseDir, MCP_USE_DIR_PROJECT);\n await fs.writeFile(linkPath, JSON.stringify(link, null, 2), \"utf-8\");\n\n // Add to .gitignore\n await addToGitIgnore(cwd);\n}\n\n// Add .mcp-use to .gitignore\nasync function addToGitIgnore(cwd: string): Promise<void> {\n const gitignorePath = path.join(cwd, \".gitignore\");\n try {\n let content = \"\";\n try {\n content = await fs.readFile(gitignorePath, \"utf-8\");\n } catch (err: any) {\n if (err.code !== \"ENOENT\") throw err;\n }\n\n if (!content.includes(MCP_USE_DIR)) {\n const newContent =\n content +\n (content.endsWith(\"\\n\") ? \"\" : \"\\n\") +\n `\\n# mcp-use deployment\\n${MCP_USE_DIR}\\n`;\n await fs.writeFile(gitignorePath, newContent, \"utf-8\");\n }\n } catch (err) {\n // Ignore gitignore errors\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { McpUseAPI } from \"../utils/api.js\";\nimport { getMcpServerUrl } from \"../utils/cloud-urls.js\";\nimport { isLoggedIn } from \"../utils/config.js\";\nimport { formatRelativeTime } from \"../utils/format.js\";\n\nasync function prompt(question: string): Promise<boolean> {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n const trimmedAnswer = answer.trim().toLowerCase();\n resolve(trimmedAnswer === \"y\" || trimmedAnswer === \"yes\");\n });\n });\n}\n\nfunction getStatusColor(status: string): (text: string) => string {\n switch (status) {\n case \"running\":\n return chalk.green;\n case \"building\":\n case \"pending\":\n return chalk.yellow;\n case \"failed\":\n case \"stopped\":\n return chalk.red;\n default:\n return chalk.gray;\n }\n}\n\nfunction formatId(id: string): string {\n return id;\n}\n\nasync function listDeploymentsCommand(): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n const deployments = await api.listDeployments();\n\n const sortedDeployments = [...deployments].sort(\n (a, b) =>\n new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()\n );\n\n if (sortedDeployments.length === 0) {\n console.log(chalk.yellow(\"No deployments found.\"));\n console.log(\n chalk.gray(\n \"\\nDeploy your first MCP server with \" + chalk.white(\"mcp-use deploy\")\n )\n );\n return;\n }\n\n console.log(\n chalk.cyan.bold(`\\n📦 Deployments (${sortedDeployments.length})\\n`)\n );\n\n console.log(\n chalk.white.bold(\n `${\"ID\".padEnd(40)} ${\"NAME\".padEnd(25)} ${\"STATUS\".padEnd(12)} ${\"MCP URL\".padEnd(45)} ${\"CREATED\"}`\n )\n );\n console.log(chalk.gray(\"─\".repeat(140)));\n\n for (const deployment of sortedDeployments) {\n const id = formatId(deployment.id).padEnd(40);\n const name = deployment.name.substring(0, 24).padEnd(25);\n const statusColor = getStatusColor(deployment.status);\n const status = statusColor(deployment.status.padEnd(12));\n const mcpUrl = (deployment.mcpUrl || \"-\").substring(0, 44).padEnd(45);\n const created = formatRelativeTime(deployment.createdAt);\n\n console.log(\n `${chalk.gray(id)} ${name} ${status} ${chalk.cyan(mcpUrl)} ${chalk.gray(created)}`\n );\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to list deployments:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function getDeploymentCommand(deploymentId: string): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n const deployment = await api.getDeployment(deploymentId);\n\n console.log(chalk.cyan.bold(\"\\n📦 Deployment Details\\n\"));\n\n console.log(chalk.white(\"ID: \") + chalk.gray(deployment.id));\n console.log(chalk.white(\"Name: \") + chalk.cyan(deployment.name));\n\n const statusColor = getStatusColor(deployment.status);\n console.log(\n chalk.white(\"Status: \") + statusColor(deployment.status)\n );\n\n if (deployment.serverId) {\n console.log(\n chalk.white(\"Server ID: \") + chalk.gray(deployment.serverId)\n );\n }\n\n const mcpUrl = getMcpServerUrl(deployment);\n if (mcpUrl) {\n console.log(chalk.white(\"MCP URL: \") + chalk.cyan(mcpUrl));\n }\n\n if (deployment.gitBranch) {\n console.log(\n chalk.white(\"Branch: \") + chalk.gray(deployment.gitBranch)\n );\n }\n if (deployment.gitCommitSha) {\n console.log(\n chalk.white(\"Commit: \") +\n chalk.gray(deployment.gitCommitSha.substring(0, 7))\n );\n }\n\n if (deployment.port) {\n console.log(chalk.white(\"Port: \") + chalk.gray(deployment.port));\n }\n\n if (deployment.provider) {\n console.log(\n chalk.white(\"Provider: \") + chalk.gray(deployment.provider)\n );\n }\n\n console.log(\n chalk.white(\"Created: \") +\n chalk.gray(formatRelativeTime(deployment.createdAt))\n );\n console.log(\n chalk.white(\"Updated: \") +\n chalk.gray(formatRelativeTime(deployment.updatedAt))\n );\n\n if (deployment.status === \"failed\" && deployment.error) {\n console.log(chalk.red(\"\\nError:\"));\n console.log(chalk.red(` ${deployment.error}`));\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function restartDeploymentCommand(\n deploymentId: string,\n options: { follow?: boolean }\n): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n const deployment = await api.getDeployment(deploymentId);\n\n if (!deployment.serverId) {\n console.log(\n chalk.red(\"✗ Cannot restart: deployment has no linked server.\")\n );\n process.exit(1);\n }\n\n console.log(\n chalk.cyan.bold(`\\n🔄 Restarting deployment: ${deployment.name}\\n`)\n );\n\n const newDep = await api.createDeployment({\n serverId: deployment.serverId,\n trigger: \"redeploy\",\n });\n\n console.log(chalk.green(\"✓ Restart initiated: \") + chalk.gray(newDep.id));\n\n if (options.follow) {\n console.log(chalk.gray(\"\\nFollowing build logs...\\n\"));\n\n let offset = 0;\n let terminal = false;\n while (!terminal) {\n await new Promise((r) => setTimeout(r, 2000));\n try {\n const resp = await api.getDeploymentBuildLogs(newDep.id, offset);\n if (resp.logs.length > 0) {\n const lines = resp.logs.split(\"\\n\").filter((l) => l.trim());\n for (const line of lines) {\n try {\n const logData = JSON.parse(line);\n if (logData.line) {\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n console.log(chalk.gray(line));\n }\n }\n offset = resp.offset;\n }\n if (\n resp.status === \"running\" ||\n resp.status === \"failed\" ||\n resp.status === \"stopped\"\n ) {\n terminal = true;\n }\n } catch {\n // Build logs not ready yet\n }\n }\n } else {\n console.log(\n chalk.gray(\n \"\\nCheck status with: \" +\n chalk.white(`mcp-use deployments get ${newDep.id}`)\n )\n );\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to restart deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function deleteDeploymentCommand(\n deploymentId: string,\n options: { yes?: boolean }\n): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n const deployment = await api.getDeployment(deploymentId);\n\n if (!options.yes) {\n console.log(\n chalk.yellow(\n `\\n⚠️ You are about to delete deployment: ${chalk.white(deployment.name)}`\n )\n );\n console.log(chalk.gray(` ID: ${deployment.id}`));\n if (deployment.mcpUrl) {\n console.log(chalk.gray(` URL: ${deployment.mcpUrl}\\n`));\n }\n\n const confirmed = await prompt(\n chalk.white(\"Are you sure you want to delete this deployment? (y/N): \")\n );\n\n if (!confirmed) {\n console.log(chalk.gray(\"Deletion cancelled.\"));\n return;\n }\n }\n\n await api.deleteDeployment(deploymentId);\n console.log(\n chalk.green.bold(`\\n✓ Deployment deleted: ${deployment.name}\\n`)\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to delete deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function logsCommand(\n deploymentId: string,\n options: { build?: boolean; follow?: boolean }\n): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n\n if (options.follow) {\n console.log(chalk.gray(\"Following build logs...\\n\"));\n\n let offset = 0;\n let terminal = false;\n while (!terminal) {\n await new Promise((r) => setTimeout(r, 2000));\n try {\n const resp = await api.getDeploymentBuildLogs(deploymentId, offset);\n if (resp.logs.length > 0) {\n const lines = resp.logs.split(\"\\n\").filter((l) => l.trim());\n for (const line of lines) {\n try {\n const logData = JSON.parse(line);\n if (logData.line) {\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n console.log(chalk.gray(line));\n }\n }\n offset = resp.offset;\n }\n if (\n resp.status === \"running\" ||\n resp.status === \"failed\" ||\n resp.status === \"stopped\"\n ) {\n terminal = true;\n }\n } catch {\n // Build logs not ready yet\n }\n }\n } else if (options.build) {\n const resp = await api.getDeploymentBuildLogs(deploymentId);\n const logs = resp.logs;\n\n if (!logs || logs.trim() === \"\") {\n console.log(\n chalk.yellow(\"No build logs available for this deployment.\")\n );\n return;\n }\n\n const logLines = logs.split(\"\\n\").filter((l) => l.trim());\n for (const line of logLines) {\n try {\n const logData = JSON.parse(line);\n if (logData.line) {\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n console.log(chalk.gray(line));\n }\n }\n } else {\n const logs = await api.getDeploymentLogs(deploymentId);\n\n if (!logs || logs.trim() === \"\") {\n console.log(chalk.yellow(\"No logs available for this deployment.\"));\n return;\n }\n\n const logLines = logs.split(\"\\n\").filter((l) => l.trim());\n for (const line of logLines) {\n try {\n const logData = JSON.parse(line);\n if (logData.line) {\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n console.log(chalk.gray(line));\n }\n }\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get logs:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function stopDeploymentCommand(deploymentId: string): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n await api.stopDeployment(deploymentId);\n\n console.log(chalk.green.bold(`\\n✓ Deployment stopped\\n`));\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to stop deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function startDeploymentCommand(deploymentId: string): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n console.log(\n chalk.yellow(\n \"⚠️ Start is not supported in this version. Use `mcp-use deployments restart` to redeploy.\"\n )\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to start deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nexport function createDeploymentsCommand(): Command {\n const deploymentsCommand = new Command(\"deployments\").description(\n \"Manage cloud deployments\"\n );\n\n deploymentsCommand\n .command(\"list\")\n .alias(\"ls\")\n .description(\"List all deployments\")\n .action(listDeploymentsCommand);\n\n deploymentsCommand\n .command(\"get\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .description(\"Get deployment details\")\n .action(getDeploymentCommand);\n\n deploymentsCommand\n .command(\"restart\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .option(\"-f, --follow\", \"Follow build logs\")\n .description(\n \"Restart a deployment (triggers a new deployment on the same server)\"\n )\n .action(restartDeploymentCommand);\n\n deploymentsCommand\n .command(\"delete\")\n .alias(\"rm\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .description(\"Delete a deployment\")\n .action(deleteDeploymentCommand);\n\n deploymentsCommand\n .command(\"logs\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .option(\"-b, --build\", \"Show build logs instead of runtime logs\")\n .option(\"-f, --follow\", \"Follow build logs in real-time\")\n .description(\"View deployment logs\")\n .action(logsCommand);\n\n deploymentsCommand\n .command(\"stop\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .description(\"Stop a deployment\")\n .action(stopDeploymentCommand);\n\n deploymentsCommand\n .command(\"start\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .description(\"Start a stopped deployment\")\n .action(startDeploymentCommand);\n\n return deploymentsCommand;\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { McpUseAPI } from \"../utils/api.js\";\nimport { getMcpServerUrlForCloudServer } from \"../utils/cloud-urls.js\";\nimport { getWebUrl, isLoggedIn, readConfig } from \"../utils/config.js\";\nimport { formatRelativeTime } from \"../utils/format.js\";\n\nasync function prompt(question: string): Promise<boolean> {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n const trimmedAnswer = answer.trim().toLowerCase();\n resolve(trimmedAnswer === \"y\" || trimmedAnswer === \"yes\");\n });\n });\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null;\n}\n\nfunction pickStr(obj: unknown, key: string): string {\n if (!isRecord(obj)) return \"-\";\n const v = obj[key];\n if (typeof v === \"string\") return v;\n if (v != null && typeof v !== \"object\") return String(v);\n return \"-\";\n}\n\nasync function applyOrgOption(api: McpUseAPI, org?: string): Promise<void> {\n if (!org) return;\n const authInfo = await api.testAuth();\n const match = (authInfo.orgs ?? []).find(\n (o) =>\n o.slug === org ||\n o.id === org ||\n o.name.toLowerCase() === org.toLowerCase()\n );\n if (!match) {\n console.error(\n chalk.red(\n `✗ Organization \"${org}\" not found. Run ${chalk.white(\"npx mcp-use org list\")} to see available organizations.`\n )\n );\n process.exit(1);\n }\n api.setOrgId(match.id);\n const slug = match.slug ? chalk.gray(` (${match.slug})`) : \"\";\n console.log(chalk.gray(\"Organization: \") + chalk.cyan(match.name) + slug);\n}\n\nfunction getStatusColor(status: string): (text: string) => string {\n const s = status.toLowerCase();\n if (s.includes(\"run\") || s === \"active\") return chalk.green;\n if (s.includes(\"fail\") || s.includes(\"error\")) return chalk.red;\n if (s.includes(\"build\") || s.includes(\"pend\")) return chalk.yellow;\n return chalk.gray;\n}\n\nasync function listServersCommand(options: {\n org?: string;\n limit?: string;\n skip?: string;\n sort?: string;\n}): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n await applyOrgOption(api, options.org);\n if (options.org) console.log();\n\n const limit = options.limit ? parseInt(options.limit, 10) : undefined;\n const skip = options.skip ? parseInt(options.skip, 10) : undefined;\n if (limit !== undefined && (Number.isNaN(limit) || limit < 1)) {\n console.log(chalk.red(\"✗ Invalid --limit\"));\n process.exit(1);\n }\n if (skip !== undefined && (Number.isNaN(skip) || skip < 0)) {\n console.log(chalk.red(\"✗ Invalid --skip\"));\n process.exit(1);\n }\n\n const servers = await api.listServers({\n limit,\n skip,\n sort: options.sort,\n });\n\n if (servers.length === 0) {\n console.log(chalk.yellow(\"No servers found.\"));\n console.log(\n chalk.gray(\n \"\\nCreate one by deploying with \" + chalk.white(\"mcp-use deploy\")\n )\n );\n return;\n }\n\n console.log(chalk.cyan.bold(`\\n🖥 Servers (${servers.length})\\n`));\n\n console.log(\n chalk.white.bold(\n `${\"ID\".padEnd(38)} ${\"NAME\".padEnd(22)} ${\"STATUS\".padEnd(14)} ${\"REPO\".padEnd(32)} ${\"MCP URL\".padEnd(52)}`\n )\n );\n console.log(chalk.gray(\"─\".repeat(165)));\n\n for (const s of servers) {\n const id = s.id.substring(0, 37).padEnd(38);\n const name = (s.name || s.slug || \"-\").substring(0, 21).padEnd(22);\n const statusColor = getStatusColor(s.status);\n const status = statusColor(s.status.substring(0, 13).padEnd(14));\n const repo = (s.connectedRepository?.repoFullName ?? \"-\")\n .substring(0, 31)\n .padEnd(32);\n const mcp = getMcpServerUrlForCloudServer(s).substring(0, 51).padEnd(52);\n console.log(\n `${chalk.gray(id)} ${name} ${status} ${chalk.gray(repo)} ${chalk.cyan(mcp)}`\n );\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to list servers:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function getServerCommand(idOrSlug: string, options: { org?: string }) {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n await applyOrgOption(api, options.org);\n if (options.org) console.log();\n\n const server = await api.getServer(idOrSlug);\n\n console.log(chalk.cyan.bold(\"\\n🖥 Server Details\\n\"));\n\n console.log(chalk.white(\"ID: \") + chalk.gray(server.id));\n if (server.slug) {\n console.log(chalk.white(\"Slug: \") + chalk.cyan(server.slug));\n }\n console.log(\n chalk.white(\"Name: \") + chalk.cyan(server.name ?? \"-\")\n );\n const statusColor = getStatusColor(server.status);\n console.log(chalk.white(\"Status: \") + statusColor(server.status));\n if (server.latestDeploymentStatus) {\n console.log(\n chalk.white(\"Last deploy: \") +\n chalk.gray(server.latestDeploymentStatus)\n );\n }\n console.log(chalk.white(\"Region: \") + chalk.gray(server.region));\n console.log(\n chalk.white(\"MCP URL: \") +\n chalk.cyan(getMcpServerUrlForCloudServer(server))\n );\n\n if (server.connectedRepository) {\n const cr = server.connectedRepository;\n console.log(chalk.white(\"\\nRepository\"));\n console.log(chalk.white(\" Full name: \") + chalk.gray(cr.repoFullName));\n console.log(\n chalk.white(\" Prod branch: \") + chalk.gray(cr.productionBranch)\n );\n }\n\n if (server.activeDeploymentId) {\n console.log(\n chalk.white(\"\\nActive deployment: \") +\n chalk.cyan(server.activeDeploymentId)\n );\n }\n if (server.previousDeploymentId) {\n console.log(\n chalk.white(\"Previous deployment: \") +\n chalk.gray(server.previousDeploymentId)\n );\n }\n\n const depCount = server._count?.deployments;\n if (depCount != null) {\n console.log(\n chalk.white(\"Deployment count: \") + chalk.gray(String(depCount))\n );\n }\n\n console.log(\n chalk.white(\"Created: \") +\n chalk.gray(formatRelativeTime(server.createdAt))\n );\n console.log(\n chalk.white(\"Updated: \") +\n chalk.gray(formatRelativeTime(server.updatedAt))\n );\n\n const config = await readConfig();\n const base = (await getWebUrl()).replace(/\\/$/, \"\");\n if (config.orgSlug) {\n console.log(\n chalk.white(\"\\nDashboard: \") +\n chalk.cyan(`${base}/cloud/${config.orgSlug}/servers/${server.id}`)\n );\n } else {\n console.log(\n chalk.white(\"\\nDashboard: \") +\n chalk.cyan(`${base}/cloud/servers/${server.id}`)\n );\n }\n\n if (Array.isArray(server.deployments) && server.deployments.length > 0) {\n console.log(chalk.cyan.bold(\"\\nRecent deployments\\n\"));\n console.log(\n chalk.white.bold(\n `${\"ID\".padEnd(40)} ${\"NAME\".padEnd(24)} ${\"STATUS\".padEnd(12)} ${\"UPDATED\"}`\n )\n );\n console.log(chalk.gray(\"─\".repeat(100)));\n for (const d of server.deployments) {\n const did = pickStr(d, \"id\").padEnd(40);\n const dname = pickStr(d, \"name\").substring(0, 23).padEnd(24);\n const dst = pickStr(d, \"status\").padEnd(12);\n const du = pickStr(d, \"updatedAt\");\n const updated = du !== \"-\" ? formatRelativeTime(du) : chalk.gray(\"-\");\n const sc = getStatusColor(dst.trim());\n console.log(\n `${chalk.gray(did)} ${dname} ${sc(dst)} ${chalk.gray(updated)}`\n );\n }\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get server:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function deleteServerCommand(\n serverId: string,\n options: { yes?: boolean; org?: string }\n): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n await applyOrgOption(api, options.org);\n if (options.org) console.log();\n\n const server = await api.getServer(serverId);\n\n if (!options.yes) {\n console.log(\n chalk.yellow(\n `\\n⚠️ You are about to delete server: ${chalk.white(server.name || server.slug || server.id)}`\n )\n );\n console.log(chalk.gray(` ID: ${server.id}`));\n if (server.connectedRepository?.repoFullName) {\n console.log(\n chalk.gray(` Repo: ${server.connectedRepository.repoFullName}\\n`)\n );\n } else {\n console.log();\n }\n\n const confirmed = await prompt(\n chalk.white(\n \"This deletes the server and all its deployments. Continue? (y/N): \"\n )\n );\n\n if (!confirmed) {\n console.log(chalk.gray(\"Deletion cancelled.\"));\n return;\n }\n }\n\n await api.deleteServer(server.id);\n console.log(\n chalk.green.bold(\n `\\n✓ Server deleted: ${server.name || server.slug || server.id}\\n`\n )\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to delete server:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nexport function createServersCommand(): Command {\n const serversCommand = new Command(\"servers\").description(\n \"Manage cloud servers (Git-backed deploy targets)\"\n );\n\n serversCommand\n .command(\"list\")\n .alias(\"ls\")\n .description(\"List servers for the current organization\")\n .option(\"--org <slug-or-id>\", \"Target organization (slug, id, or name)\")\n .option(\"--limit <n>\", \"Page size (1–100, default 50)\")\n .option(\"--skip <n>\", \"Offset for pagination\")\n .option(\"--sort <field:asc|desc>\", \"Sort (e.g. updatedAt:desc)\")\n .action(listServersCommand);\n\n serversCommand\n .command(\"get\")\n .argument(\"<id-or-slug>\", \"Server UUID or slug\")\n .option(\"--org <slug-or-id>\", \"Resolve org context before fetch\")\n .description(\"Show server details and recent deployments\")\n .action(getServerCommand);\n\n serversCommand\n .command(\"delete\")\n .alias(\"rm\")\n .argument(\"<server-id>\", \"Server UUID (or slug if API accepts it)\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .option(\"--org <slug-or-id>\", \"Target organization\")\n .description(\"Delete a server and all its deployments\")\n .action(deleteServerCommand);\n\n return serversCommand;\n}\n","import chalk from \"chalk\";\nimport { McpUseAPI } from \"../utils/api.js\";\nimport { isLoggedIn, readConfig, writeConfig } from \"../utils/config.js\";\nimport { promptOrgSelection } from \"./auth.js\";\n\nasync function ensureLoggedIn(): Promise<boolean> {\n if (!(await isLoggedIn())) {\n console.log(chalk.yellow(\"⚠️ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\")\n );\n return false;\n }\n return true;\n}\n\n/**\n * List all organizations the user belongs to\n */\nexport async function orgListCommand(): Promise<void> {\n try {\n if (!(await ensureLoggedIn())) return;\n\n const api = await McpUseAPI.create();\n const authInfo = await api.testAuth();\n const config = await readConfig();\n\n const orgs = authInfo.orgs ?? [];\n const activeId = config.orgId || authInfo.default_org_id;\n\n if (orgs.length === 0) {\n console.log(chalk.yellow(\"No organizations found.\"));\n return;\n }\n\n console.log(chalk.cyan.bold(\"🏢 Your organizations:\\n\"));\n\n for (const o of orgs) {\n const isActive = o.id === activeId;\n const marker = isActive ? chalk.green(\" ← active\") : \"\";\n const slug = o.slug ? chalk.gray(` (${o.slug})`) : \"\";\n const role = chalk.gray(` [${o.role}]`);\n const name = isActive ? chalk.cyan.bold(o.name) : chalk.white(o.name);\n console.log(` ${name}${slug}${role}${marker}`);\n }\n\n if (orgs.length > 1) {\n console.log(\n chalk.gray(\"\\nSwitch with \" + chalk.white(\"npx mcp-use org switch\"))\n );\n }\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to list organizations:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Switch the active organization\n */\nexport async function orgSwitchCommand(): Promise<void> {\n try {\n if (!(await ensureLoggedIn())) return;\n\n const api = await McpUseAPI.create();\n const authInfo = await api.testAuth();\n const config = await readConfig();\n const orgs = authInfo.orgs ?? [];\n\n if (orgs.length === 0) {\n console.log(chalk.yellow(\"No organizations found.\"));\n return;\n }\n\n if (orgs.length === 1) {\n const o = orgs[0];\n const slug = o.slug ? chalk.gray(` (${o.slug})`) : \"\";\n console.log(\n chalk.yellow(\n `You only have one organization: ${chalk.cyan(o.name)}${slug}`\n )\n );\n return;\n }\n\n const activeId = config.orgId || authInfo.default_org_id;\n const selected = await promptOrgSelection(orgs, activeId);\n\n if (!selected) {\n console.log(chalk.yellow(\"No organization selected.\"));\n return;\n }\n\n await writeConfig({\n ...config,\n orgId: selected.id,\n orgName: selected.name,\n orgSlug: selected.slug ?? undefined,\n });\n\n try {\n await api.setDefaultOrg(selected.id);\n } catch {\n // Non-fatal: the local config is what matters for CLI operations\n }\n\n const slug = selected.slug ? chalk.gray(` (${selected.slug})`) : \"\";\n console.log(\n chalk.green.bold(\"\\n✓ Switched to \") +\n chalk.cyan.bold(selected.name) +\n slug\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to switch organization:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Show the currently active organization\n */\nexport async function orgCurrentCommand(): Promise<void> {\n try {\n if (!(await ensureLoggedIn())) return;\n\n const config = await readConfig();\n\n if (!config.orgId) {\n console.log(\n chalk.yellow(\n \"No organization selected. Run \" +\n chalk.white(\"npx mcp-use org switch\") +\n \" to pick one.\"\n )\n );\n return;\n }\n\n const slug = config.orgSlug ? chalk.gray(` (${config.orgSlug})`) : \"\";\n console.log(\n chalk.cyan.bold(\"🏢 Active organization: \") +\n chalk.white(config.orgName || config.orgId) +\n slug\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get organization:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { cpSync, existsSync, mkdtempSync, readdirSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { extract } from \"tar\";\n\nconst REPO_OWNER = \"mcp-use\";\nconst REPO_NAME = \"mcp-use\";\nconst REPO_BRANCH = \"main\";\n\nconst TELEMETRY_URL = \"https://add-skill.vercel.sh/t\";\nconst SOURCE_REPO = `${REPO_OWNER}/${REPO_NAME}`;\n\n// Telemetry data defined in https://github.com/vercel-labs/skills/blob/main/src/telemetry.ts\ninterface InstallTelemetryData {\n event: \"install\";\n source: string;\n skills: string;\n agents: string;\n global?: \"1\";\n skillFiles?: string;\n sourceType?: string;\n}\n\n/** Type-safe enum for IDE/agent presets */\ntype AgentPreset = \"cursor\" | \"claude-code\" | \"codex\";\n\nconst AGENT_PRESET_FOLDERS: Record<AgentPreset, string> = {\n cursor: \".cursor\",\n \"claude-code\": \".claude\",\n codex: \".agent\",\n};\n\nconst ALL_PRESETS: AgentPreset[] = [\"cursor\", \"claude-code\", \"codex\"];\n\n/**\n * Send telemetry event for vercel skills.sh.\n * Fire-and-forget -- never throws.\n */\nfunction sendInstallTelemetryEvent(agents: string, skills: string): void {\n const telemetryData: InstallTelemetryData = {\n event: \"install\",\n source: SOURCE_REPO,\n skills,\n agents,\n sourceType: \"github\",\n };\n try {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(telemetryData)) {\n if (value !== undefined && value !== null) {\n params.set(key, String(value));\n }\n }\n fetch(`${TELEMETRY_URL}?${params.toString()}`).catch(() => {});\n } catch {\n // Silently fail - telemetry should never break the CLI\n }\n}\n\n/**\n * Download and extract skills from the mcp-use GitHub repository\n * and install them into the project's agent preset directories\n * (.cursor/skills, .claude/skills, .agent/skills).\n */\nasync function addSkillsToProject(projectPath: string): Promise<void> {\n const tarballUrl = `https://codeload.github.com/${REPO_OWNER}/${REPO_NAME}/tar.gz/${REPO_BRANCH}`;\n const tempDir = mkdtempSync(join(tmpdir(), \"mcp-use-skills-\"));\n\n try {\n const response = await fetch(tarballUrl);\n if (!response.ok) {\n throw new Error(`Failed to download tarball: ${response.statusText}`);\n }\n\n await pipeline(\n Readable.fromWeb(response.body as any),\n extract({\n cwd: tempDir,\n filter: (path) => path.includes(\"/skills/\"),\n strip: 1,\n })\n );\n\n const skillsPath = join(tempDir, \"skills\");\n if (!existsSync(skillsPath)) {\n throw new Error(\"Skills folder not found in repository\");\n }\n\n for (const preset of ALL_PRESETS) {\n const folderName = AGENT_PRESET_FOLDERS[preset];\n const outputPath = join(projectPath, folderName, \"skills\");\n cpSync(skillsPath, outputPath, { recursive: true });\n }\n\n const skillNames = readdirSync(skillsPath, { withFileTypes: true })\n .filter((dirent) => dirent.isDirectory())\n .map((dirent) => dirent.name);\n\n sendInstallTelemetryEvent(ALL_PRESETS.join(\",\"), skillNames.join(\",\"));\n } finally {\n rmSync(tempDir, { recursive: true, force: true });\n }\n}\n\nexport function createSkillsCommand(): Command {\n const skills = new Command(\"skills\").description(\n \"Manage mcp-use AI agent skills\"\n );\n\n const installAction = async (options: { path: string }) => {\n const projectPath = resolve(options.path);\n\n if (!existsSync(projectPath)) {\n console.error(chalk.red(`Directory not found: ${projectPath}`));\n process.exit(1);\n }\n\n console.log(chalk.cyan(\"📚 Installing mcp-use skills...\"));\n console.log(\n chalk.gray(\n \" Downloading from github.com/mcp-use/mcp-use → .cursor/skills, .claude/skills, .agent/skills\"\n )\n );\n\n try {\n await addSkillsToProject(projectPath);\n console.log(chalk.green(\"✅ Skills installed successfully!\"));\n } catch (error) {\n console.error(chalk.red(\"❌ Failed to install skills.\"));\n console.error(\n chalk.yellow(\n ` Error: ${error instanceof Error ? error.message : String(error)}`\n )\n );\n console.error(\n chalk.yellow(\n \" You can also install manually: npx skills add mcp-use/mcp-use\"\n )\n );\n process.exit(1);\n }\n };\n\n const pathOption = [\n \"-p, --path <path>\",\n \"Path to project directory\",\n process.cwd(),\n ] as const;\n\n skills\n .command(\"add\")\n .description(\n \"Install mcp-use skills for AI agents (Cursor, Claude Code, Codex)\"\n )\n .option(...pathOption)\n .action(installAction);\n\n skills\n .command(\"install\")\n .description(\"Install mcp-use skills for AI agents (alias for 'add')\")\n .option(...pathOption)\n .action(installAction);\n\n return skills;\n}\n","import chalk from \"chalk\";\nimport { readFileSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nconst CACHE_DIR = path.join(os.homedir(), \".mcp-use\");\nconst CACHE_FILE = path.join(CACHE_DIR, \"update-check.json\");\nconst CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours\nconst FETCH_TIMEOUT_MS = 3000;\nconst PACKAGE_NAME = \"mcp-use\";\n\ninterface UpdateCache {\n lastChecked: string;\n latestVersion: string;\n}\n\n/**\n * Parse a semver string into numeric parts for comparison.\n * Returns null for any string that doesn't look like X.Y.Z.\n */\nfunction parseSemver(version: string): [number, number, number] | null {\n const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!match) return null;\n return [\n parseInt(match[1], 10),\n parseInt(match[2], 10),\n parseInt(match[3], 10),\n ];\n}\n\n/** Returns true when `candidate` is strictly newer than `current`. */\nfunction isNewer(current: string, candidate: string): boolean {\n const a = parseSemver(current);\n const b = parseSemver(candidate);\n if (!a || !b) return false;\n for (let i = 0; i < 3; i++) {\n if (b[i] > a[i]) return true;\n if (b[i] < a[i]) return false;\n }\n return false;\n}\n\nasync function readCache(): Promise<UpdateCache | null> {\n try {\n const content = await readFile(CACHE_FILE, \"utf-8\");\n return JSON.parse(content) as UpdateCache;\n } catch {\n return null;\n }\n}\n\nasync function writeCache(latestVersion: string): Promise<void> {\n try {\n await mkdir(CACHE_DIR, { recursive: true });\n const cache: UpdateCache = {\n lastChecked: new Date().toISOString(),\n latestVersion,\n };\n await writeFile(CACHE_FILE, JSON.stringify(cache, null, 2), \"utf-8\");\n } catch {\n // Non-fatal — ignore write errors\n }\n}\n\nasync function fetchLatestVersion(): Promise<string | null> {\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(\n `https://registry.npmjs.org/${PACKAGE_NAME}/latest`,\n {\n signal: controller.signal,\n headers: { Accept: \"application/json\" },\n }\n );\n if (!res.ok) return null;\n const data = (await res.json()) as { version?: string };\n return data.version ?? null;\n } finally {\n clearTimeout(timer);\n }\n } catch {\n return null;\n }\n}\n\nasync function getLatestVersion(): Promise<string | null> {\n const cache = await readCache();\n if (cache) {\n const age = Date.now() - new Date(cache.lastChecked).getTime();\n if (age < CACHE_TTL_MS) {\n return cache.latestVersion;\n }\n }\n const latest = await fetchLatestVersion();\n if (latest) {\n await writeCache(latest);\n }\n return latest;\n}\n\n/**\n * Resolve the version of `mcp-use` installed in the user's project.\n * Falls back to the CLI's own bundled copy for monorepo / global installs.\n */\nfunction resolveInstalledVersion(\n projectPath: string | undefined\n): string | null {\n const attempts: (() => string)[] = [];\n\n if (projectPath) {\n attempts.push(() => {\n const projectRequire = createRequire(\n path.join(projectPath, \"package.json\")\n );\n return projectRequire.resolve(`${PACKAGE_NAME}/package.json`);\n });\n }\n\n // Monorepo / global fallback: bundled alongside the CLI\n attempts.push(() => path.join(__dirname, \"../../mcp-use/package.json\"));\n\n for (const attempt of attempts) {\n try {\n const pkgPath = attempt();\n const json = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n if (typeof json.version === \"string\") return json.version as string;\n } catch {\n // Try next\n }\n }\n return null;\n}\n\n/**\n * Check npm for a newer version of `mcp-use` and print a notification when\n * one is available. Runs silently on any error so it never interrupts the CLI.\n */\nexport async function notifyIfUpdateAvailable(\n projectPath: string | undefined\n): Promise<void> {\n try {\n const installed = resolveInstalledVersion(projectPath);\n if (!installed) return;\n\n const latest = await getLatestVersion();\n if (!latest) return;\n\n if (isNewer(installed, latest)) {\n console.log(\n chalk.yellow(\n `\\nA new release of ${chalk.bold(PACKAGE_NAME)} is available: ` +\n `${chalk.dim(installed)} → ${chalk.cyan.bold(latest)}`\n )\n );\n console.log(\n chalk.gray(\n `Run ${chalk.white(`npm install ${PACKAGE_NAME}@latest`)} to update\\n`\n )\n );\n }\n } catch {\n // Never surface errors from the update check\n }\n}\n"],"mappings":"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","names":["process","styles","chalk","styles","open","Command","readFileSync","mkdir","readFile","writeFile","createRequire","path","process","path","fileURLToPath","childProcess","fs","fsConstants","promisify","childProcess","fs","fsConstants","process","os","fs","fs","fs","process","os","fs","process","fs","execFile","promisify","childProcess","fs","fsConstants","powerShellPath","path","promisify","process","execFile","promisify","process","execFile","process","promisify","execFile","execFileAsync","promisify","execFile","execFileAsync","execFileAsync","promisify","execFile","defaultBrowser","process","process","__dirname","path","fileURLToPath","process","apps","defaultBrowser","powerShellPath","fs","fsConstants","childProcess","resolve","fs","os","path","path","resolve","api","prompt","result","fs","path","promisify","fs","path","fs","path","resolve","projectName","Command","prompt","resolve","Command","Command","prompt","resolve","getStatusColor","Command","slug","Command","existsSync","join","path","mkdir","readFile","writeFile","os","path","Command","readFileSync","path","createRequire","resolve","env","fs","readFile","mkdir","writeFile","cleanup","fileURLToPath","manifestPath"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.9_tsx@4.21.0_typescript@5.9.3_yaml@2.8.3/node_modules/tsup/assets/esm_shims.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/utilities.js","../../../node_modules/.pnpm/chalk@5.6.2/node_modules/chalk/source/index.js","../src/index.ts","../../../node_modules/.pnpm/open@11.0.0/node_modules/open/index.js","../../../node_modules/.pnpm/wsl-utils@0.3.1/node_modules/wsl-utils/index.js","../../../node_modules/.pnpm/is-wsl@3.1.0/node_modules/is-wsl/index.js","../../../node_modules/.pnpm/is-inside-container@1.0.0/node_modules/is-inside-container/index.js","../../../node_modules/.pnpm/is-docker@3.0.0/node_modules/is-docker/index.js","../../../node_modules/.pnpm/powershell-utils@0.1.0/node_modules/powershell-utils/index.js","../../../node_modules/.pnpm/wsl-utils@0.3.1/node_modules/wsl-utils/utilities.js","../../../node_modules/.pnpm/define-lazy-prop@3.0.0/node_modules/define-lazy-prop/index.js","../../../node_modules/.pnpm/default-browser@5.5.0/node_modules/default-browser/index.js","../../../node_modules/.pnpm/default-browser-id@5.0.1/node_modules/default-browser-id/index.js","../../../node_modules/.pnpm/run-applescript@7.1.0/node_modules/run-applescript/index.js","../../../node_modules/.pnpm/bundle-name@4.1.0/node_modules/bundle-name/index.js","../../../node_modules/.pnpm/default-browser@5.5.0/node_modules/default-browser/windows.js","../../../node_modules/.pnpm/is-in-ssh@1.0.0/node_modules/is-in-ssh/index.js","../src/utils/config.ts","../src/utils/api.ts","../src/commands/auth.ts","../src/commands/client.ts","../src/utils/format.ts","../src/utils/session-storage.ts","../src/commands/deploy.ts","../src/utils/git.ts","../src/utils/cloud-urls.ts","../src/utils/project-link.ts","../src/commands/deployments.ts","../src/commands/servers.ts","../src/commands/org.ts","../src/commands/skills.ts","../src/utils/update-check.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","#!/usr/bin/env node\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport \"dotenv/config\";\nimport { spawn } from \"node:child_process\";\nimport { readFileSync } from \"node:fs\";\nimport { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport open from \"open\";\nimport { viteSingleFile } from \"vite-plugin-singlefile\";\nimport { toJSONSchema } from \"zod\";\nimport { loginCommand, logoutCommand, whoamiCommand } from \"./commands/auth.js\";\nimport { createClientCommand } from \"./commands/client.js\";\nimport { deployCommand } from \"./commands/deploy.js\";\nimport { createDeploymentsCommand } from \"./commands/deployments.js\";\nimport { createServersCommand } from \"./commands/servers.js\";\nimport {\n orgCurrentCommand,\n orgListCommand,\n orgSwitchCommand,\n} from \"./commands/org.js\";\nimport { createSkillsCommand } from \"./commands/skills.js\";\nimport { notifyIfUpdateAvailable } from \"./utils/update-check.js\";\nconst program = new Command();\n\nconst packageContent = readFileSync(\n path.join(__dirname, \"../package.json\"),\n \"utf-8\"\n);\nconst packageJson = JSON.parse(packageContent);\nconst packageVersion = packageJson.version || \"unknown\";\n\nprogram\n .name(\"mcp-use\")\n .description(\"Create and run MCP servers with ui resources widgets\")\n .version(packageVersion);\n\n/**\n * Helper to display all package versions\n *\n * @param projectPath - Optional path to user's project directory.\n * When provided, resolves packages from the project's node_modules (standalone installation).\n * When omitted, falls back to relative paths (monorepo development).\n */\nfunction displayPackageVersions(projectPath?: string) {\n const packages = [\n { name: \"@mcp-use/cli\", relativePath: \"../package.json\" },\n {\n name: \"@mcp-use/inspector\",\n relativePath: \"../../inspector/package.json\",\n },\n {\n name: \"create-mcp-use-app\",\n relativePath: \"../../create-mcp-use-app/package.json\",\n },\n {\n name: \"mcp-use\",\n relativePath: \"../../mcp-use/package.json\",\n highlight: true,\n },\n ];\n\n console.log(chalk.gray(\"mcp-use packages:\"));\n\n for (const pkg of packages) {\n const paddedName = pkg.name.padEnd(22);\n\n try {\n let pkgPath: string;\n\n if (projectPath) {\n // Standalone installation: Try to resolve from user's project node_modules\n try {\n const projectRequire = createRequire(\n path.join(projectPath, \"package.json\")\n );\n pkgPath = projectRequire.resolve(`${pkg.name}/package.json`);\n } catch (resolveError) {\n // Package not found in project node_modules, try relative path as fallback\n pkgPath = path.join(__dirname, pkg.relativePath);\n }\n } else {\n // Monorepo development: Use relative paths\n pkgPath = path.join(__dirname, pkg.relativePath);\n }\n\n const pkgContent = readFileSync(pkgPath, \"utf-8\");\n const pkgJson = JSON.parse(pkgContent);\n const version = pkgJson.version || \"unknown\";\n\n if (pkg.highlight) {\n console.log(\n ` ${chalk.cyan.bold(paddedName)} ${chalk.cyan.bold(`v${version}`)}`\n );\n } else {\n console.log(chalk.gray(` ${paddedName} v${version}`));\n }\n } catch (error) {\n // Log debug message when package is not found (aids troubleshooting)\n if (process.env.DEBUG || process.env.VERBOSE) {\n console.log(chalk.dim(` ${paddedName} (not found)`));\n }\n }\n }\n}\n\n// Helper to check if port is available\nasync function isPortAvailable(\n port: number,\n host: string = \"localhost\"\n): Promise<boolean> {\n try {\n await fetch(`http://${host}:${port}`);\n return false; // Port is in use\n } catch {\n return true; // Port is available\n }\n}\n\n// Helper to find an available port\nasync function findAvailablePort(\n startPort: number,\n host: string = \"localhost\"\n): Promise<number> {\n for (let port = startPort; port < startPort + 100; port++) {\n if (await isPortAvailable(port, host)) {\n return port;\n }\n }\n throw new Error(\"No available ports found\");\n}\n\n// Helper to check if server is ready\nasync function waitForServer(\n port: number,\n host: string = \"localhost\",\n maxAttempts = 30\n): Promise<boolean> {\n for (let i = 0; i < maxAttempts; i++) {\n const controller = new AbortController();\n try {\n // Use /inspector/health endpoint for cleaner health checks\n // This avoids 400 errors from the MCP endpoint which requires session headers\n const response = await fetch(`http://${host}:${port}/inspector/health`, {\n signal: controller.signal,\n });\n\n if (response.ok) {\n return true;\n }\n } catch {\n // Server not ready yet\n } finally {\n controller.abort();\n }\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n return false;\n}\n\n// Helper to normalize host for browser connections\n// 0.0.0.0 is valid for server binding but browsers cannot connect to it\nfunction normalizeBrowserHost(host: string): string {\n return host === \"0.0.0.0\" ? \"localhost\" : host;\n}\n\n// Helper to run a command\nfunction runCommand(\n command: string,\n args: string[],\n cwd: string,\n env?: NodeJS.ProcessEnv,\n filterStderr: boolean = false\n): { promise: Promise<void>; process: any } {\n const proc = spawn(command, args, {\n cwd,\n stdio: filterStderr ? ([\"inherit\", \"inherit\", \"pipe\"] as const) : \"inherit\",\n shell: process.platform === \"win32\",\n env: env ? { ...process.env, ...env } : process.env,\n });\n\n // Filter stderr to suppress tsx's \"Force killing\" messages\n if (filterStderr && proc.stderr) {\n proc.stderr.on(\"data\", (data: Buffer) => {\n const text = data.toString();\n // Filter out tsx's force killing message\n if (\n !text.includes(\"Previous process hasn't exited yet\") &&\n !text.includes(\"Force killing\")\n ) {\n process.stderr.write(data);\n }\n });\n }\n\n const promise = new Promise<void>((resolve, reject) => {\n proc.on(\"error\", reject);\n proc.on(\"exit\", (code: number | null) => {\n if (code === 0 || code === 130 || code === 143) {\n // Exit codes: 0 = normal, 130 = SIGINT/SIGTERM, 143 = SIGTERM (alternative)\n resolve();\n } else {\n reject(new Error(`Command failed with exit code ${code}`));\n }\n });\n });\n\n return { promise, process: proc };\n}\n\n// Helper to start tunnel and get the URL\nasync function startTunnel(\n port: number,\n subdomain?: string\n): Promise<{ url: string; subdomain: string; process: any }> {\n return new Promise((resolve, reject) => {\n console.log(chalk.gray(`Starting tunnel for port ${port}...`));\n\n const tunnelArgs = [\"--yes\", \"@mcp-use/tunnel\", String(port)];\n\n // Pass subdomain as CLI flag if provided\n if (subdomain) {\n tunnelArgs.push(\"--subdomain\", subdomain);\n }\n\n const proc = spawn(\"npx\", tunnelArgs, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n shell: process.platform === \"win32\",\n });\n\n let resolved = false;\n let isShuttingDown = false;\n\n proc.stdout?.on(\"data\", (data) => {\n const text = data.toString();\n const isShutdownMessage =\n text.includes(\"Shutting down\") || text.includes(\"🛑\");\n const isErrorMessage = text.includes(\"✖\") || text.includes(\"Error:\");\n\n if (!isShuttingDown && !isShutdownMessage && !isErrorMessage) {\n process.stdout.write(text);\n }\n\n // Look for the tunnel URL in the output\n // Expected format: https://subdomain.tunnel-domain.com\n const urlMatch = text.match(/https?:\\/\\/([a-z0-9-]+\\.[a-z0-9.-]+)/i);\n if (urlMatch && !resolved) {\n const url = urlMatch[0];\n // Extract subdomain from URL (e.g., \"happy-cat.local.mcp-use.run\" -> \"happy-cat\")\n const fullDomain = urlMatch[1];\n // Try to extract the subdomain using a case-insensitive regex.\n // If the regex fails, fallback to splitting by '.' and taking the first label.\n // Validate that the extracted subdomain matches the expected format (letters, numbers, hyphens).\n const subdomainMatch = fullDomain.match(/^([a-z0-9-]+)\\./i);\n let extractedSubdomain = subdomainMatch\n ? subdomainMatch[1]\n : fullDomain.split(\".\")[0];\n if (!/^[a-z0-9-]+$/i.test(extractedSubdomain)) {\n console.warn(\n chalk.yellow(\n `Warning: Extracted subdomain \"${extractedSubdomain}\" does not match expected format.`\n )\n );\n extractedSubdomain = \"\";\n }\n resolved = true;\n clearTimeout(setupTimeout);\n console.log(chalk.green.bold(`✓ Tunnel established: ${url}/mcp`));\n resolve({ url, subdomain: extractedSubdomain, process: proc });\n }\n });\n\n proc.stderr?.on(\"data\", (data) => {\n const text = data.toString();\n // Filter out bore debug logs and shutdown messages\n if (\n !isShuttingDown &&\n !text.includes(\"INFO\") &&\n !text.includes(\"bore_cli\") &&\n !text.includes(\"Shutting down\")\n ) {\n process.stderr.write(data);\n }\n });\n\n proc.on(\"error\", (error) => {\n if (!resolved) {\n clearTimeout(setupTimeout);\n reject(new Error(`Failed to start tunnel: ${error.message}`));\n }\n });\n\n proc.on(\"exit\", (code) => {\n if (code !== 0 && !resolved) {\n clearTimeout(setupTimeout);\n reject(new Error(`Tunnel process exited with code ${code}`));\n }\n });\n\n // Add method to mark shutdown state\n (proc as any).markShutdown = () => {\n isShuttingDown = true;\n };\n\n // Timeout after 30 seconds - only for initial setup\n const setupTimeout = setTimeout(() => {\n if (!resolved) {\n proc.kill();\n reject(new Error(\"Tunnel setup timed out\"));\n }\n }, 30000);\n });\n}\n\nasync function findServerFile(projectPath: string): Promise<string> {\n const candidates = [\"index.ts\", \"src/index.ts\", \"server.ts\", \"src/server.ts\"];\n for (const candidate of candidates) {\n try {\n await access(path.join(projectPath, candidate));\n return candidate;\n } catch {\n continue;\n }\n }\n throw new Error(\"No server file found\");\n}\n\nasync function generateToolRegistryTypesForServer(\n projectPath: string,\n serverFileRelative: string\n): Promise<boolean> {\n const serverFile = path.join(projectPath, serverFileRelative);\n const serverFileExists = await access(serverFile)\n .then(() => true)\n .catch(() => false);\n\n if (!serverFileExists) {\n throw new Error(`Server file not found: ${serverFile}`);\n }\n\n const previousHmrMode = (globalThis as any).__mcpUseHmrMode;\n\n try {\n // Prevent server startup side effects while importing registrations.\n (globalThis as any).__mcpUseHmrMode = true;\n (globalThis as any).__mcpUseLastServer = undefined;\n\n const { tsImport } = await import(\"tsx/esm/api\");\n await tsImport(pathToFileURL(serverFile).href, {\n parentURL: import.meta.url,\n tsconfig: path.join(projectPath, \"tsconfig.json\"),\n });\n\n const server = (globalThis as any).__mcpUseLastServer;\n if (!server) {\n throw new Error(\n \"No MCPServer instance found. Make sure your server file creates an MCPServer instance.\"\n );\n }\n\n const mcpUsePath = path.join(projectPath, \"node_modules\", \"mcp-use\");\n const { generateToolRegistryTypes } = await import(\n pathToFileURL(path.join(mcpUsePath, \"dist\", \"src\", \"server\", \"index.js\"))\n .href\n ).then((mod) => mod);\n\n if (!generateToolRegistryTypes) {\n throw new Error(\"generateToolRegistryTypes not found in mcp-use package\");\n }\n\n const success = await generateToolRegistryTypes(\n server.registrations.tools,\n projectPath\n );\n return success;\n } finally {\n (globalThis as any).__mcpUseHmrMode = previousHmrMode ?? false;\n }\n}\n\nasync function buildWidgets(\n projectPath: string,\n options: { inline?: boolean } = {}\n): Promise<Array<{ name: string; metadata: any }>> {\n const { inline = true } = options; // Default to true for VS Code compatibility\n const { promises: fs } = await import(\"node:fs\");\n const { build } = await import(\"vite\");\n const resourcesDir = path.join(projectPath, \"resources\");\n\n // Get base URL from environment or use default\n const mcpUrl = process.env.MCP_URL;\n\n // Check if resources directory exists\n try {\n await access(resourcesDir);\n } catch {\n console.log(\n chalk.gray(\"No resources/ directory found - skipping widget build\")\n );\n return [];\n }\n\n // Find all TSX widget files and folders with widget.tsx\n const entries: Array<{ name: string; path: string }> = [];\n try {\n const files = await fs.readdir(resourcesDir, { withFileTypes: true });\n for (const dirent of files) {\n // Exclude macOS resource fork files and other hidden/system files\n if (dirent.name.startsWith(\"._\") || dirent.name.startsWith(\".DS_Store\")) {\n continue;\n }\n\n if (\n dirent.isFile() &&\n (dirent.name.endsWith(\".tsx\") || dirent.name.endsWith(\".ts\"))\n ) {\n // Single file widget\n entries.push({\n name: dirent.name.replace(/\\.tsx?$/, \"\"),\n path: path.join(resourcesDir, dirent.name),\n });\n } else if (dirent.isDirectory()) {\n // Check for widget.tsx in folder\n const widgetPath = path.join(resourcesDir, dirent.name, \"widget.tsx\");\n try {\n await fs.access(widgetPath);\n entries.push({\n name: dirent.name,\n path: widgetPath,\n });\n } catch {\n // widget.tsx doesn't exist in this folder, skip it\n }\n }\n }\n } catch (error) {\n console.log(chalk.gray(\"No widgets found in resources/ directory\"));\n return [];\n }\n\n if (entries.length === 0) {\n console.log(chalk.gray(\"No widgets found in resources/ directory\"));\n return [];\n }\n\n console.log(\n chalk.gray(\n `Building ${entries.length} widget(s)${inline ? \" (inline mode for VS Code compatibility)\" : \"\"}...`\n )\n );\n\n const react = (await import(\"@vitejs/plugin-react\")).default;\n // @ts-ignore - @tailwindcss/vite may not have type declarations\n const tailwindcss = (await import(\"@tailwindcss/vite\")).default;\n\n // Read favicon config from package.json\n const packageJsonPath = path.join(projectPath, \"package.json\");\n let favicon = \"\";\n try {\n const pkgContent = await fs.readFile(packageJsonPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent);\n favicon = pkg.mcpUse?.favicon || \"\";\n } catch {\n // No package.json or no mcpUse config, that's fine\n }\n\n // Helper function to build a single widget\n const buildSingleWidget = async (entry: { name: string; path: string }) => {\n const widgetName = entry.name;\n const entryPath = entry.path.replace(/\\\\/g, \"/\");\n\n console.log(chalk.gray(` - Building ${widgetName}...`));\n\n // Create temp directory for build artifacts\n const tempDir = path.join(projectPath, \".mcp-use\", widgetName);\n await fs.mkdir(tempDir, { recursive: true });\n\n // Create CSS file with Tailwind directives\n const relativeResourcesPath = path\n .relative(tempDir, resourcesDir)\n .replace(/\\\\/g, \"/\");\n\n // Calculate relative path to mcp-use package dynamically\n const mcpUsePath = path.join(projectPath, \"node_modules\", \"mcp-use\");\n const relativeMcpUsePath = path\n .relative(tempDir, mcpUsePath)\n .replace(/\\\\/g, \"/\");\n\n const cssContent = `@import \"tailwindcss\";\\n\\n/* Configure Tailwind to scan the resources directory and mcp-use package */\\n@source \"${relativeResourcesPath}\";\\n@source \"${relativeMcpUsePath}/**/*.{ts,tsx,js,jsx}\";\\n`;\n await fs.writeFile(path.join(tempDir, \"styles.css\"), cssContent, \"utf8\");\n\n // Create entry file\n const entryContent = `import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport './styles.css'\nimport Component from '${entryPath}'\n\nconst container = document.getElementById('widget-root')\nif (container && Component) {\n const root = createRoot(container)\n root.render(<Component />)\n}\n`;\n\n // Create HTML template\n const htmlContent = `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n <title>${widgetName} Widget</title>${\n favicon\n ? `\n <link rel=\"icon\" href=\"/mcp-use/public/${favicon}\" />`\n : \"\"\n }\n </head>\n <body>\n <div id=\"widget-root\"></div>\n <script type=\"module\" src=\"/entry.tsx\"></script>\n </body>\n</html>`;\n\n await fs.writeFile(path.join(tempDir, \"entry.tsx\"), entryContent, \"utf8\");\n await fs.writeFile(path.join(tempDir, \"index.html\"), htmlContent, \"utf8\");\n\n // Build with Vite\n const outDir = path.join(\n projectPath,\n \"dist\",\n \"resources\",\n \"widgets\",\n widgetName\n );\n\n // Set base URL: use MCP_URL if set, otherwise relative path\n const baseUrl = mcpUrl\n ? `${mcpUrl}/${widgetName}/`\n : `/mcp-use/widgets/${widgetName}/`;\n\n // Extract metadata from widget before building\n let widgetMetadata: any = {};\n try {\n // Use a completely isolated temp directory for metadata extraction to avoid conflicts\n const metadataTempDir = path.join(\n projectPath,\n \".mcp-use\",\n `${widgetName}-metadata`\n );\n await fs.mkdir(metadataTempDir, { recursive: true });\n\n const { createServer } = await import(\"vite\");\n\n // Plugin to provide browser stubs for Node.js-only packages\n const nodeStubsPlugin = {\n name: \"node-stubs\",\n enforce: \"pre\" as const,\n resolveId(id: string) {\n if (id === \"posthog-node\" || id.startsWith(\"posthog-node/\")) {\n return \"\\0virtual:posthog-node-stub\";\n }\n return null;\n },\n load(id: string) {\n if (id === \"\\0virtual:posthog-node-stub\") {\n return `\nexport class PostHog {\n constructor() {}\n capture() {}\n identify() {}\n alias() {}\n flush() { return Promise.resolve(); }\n shutdown() { return Promise.resolve(); }\n}\nexport default PostHog;\n`;\n }\n return null;\n },\n };\n\n const metadataServer = await createServer({\n root: metadataTempDir,\n cacheDir: path.join(metadataTempDir, \".vite-cache\"),\n plugins: [nodeStubsPlugin, tailwindcss(), react()],\n resolve: {\n alias: {\n \"@\": resourcesDir,\n },\n },\n server: {\n middlewareMode: true,\n },\n optimizeDeps: {\n // Exclude Node.js-only packages from browser bundling\n exclude: [\"posthog-node\"],\n },\n ssr: {\n // Force Vite to transform these packages in SSR instead of using external requires\n noExternal: [\"@openai/apps-sdk-ui\", \"react-router\"],\n // Mark Node.js-only packages as external in SSR mode\n external: [\"posthog-node\"],\n },\n define: {\n // Define process.env for SSR context\n \"process.env.NODE_ENV\": JSON.stringify(\n process.env.NODE_ENV || \"development\"\n ),\n \"import.meta.env.DEV\": true,\n \"import.meta.env.PROD\": false,\n \"import.meta.env.MODE\": JSON.stringify(\"development\"),\n \"import.meta.env.SSR\": true,\n },\n clearScreen: false,\n logLevel: \"silent\",\n customLogger: {\n info: () => {},\n warn: () => {},\n error: () => {},\n clearScreen: () => {},\n hasErrorLogged: () => false,\n hasWarned: false,\n warnOnce: () => {},\n },\n });\n\n try {\n const mod = await metadataServer.ssrLoadModule(entryPath);\n if (mod.widgetMetadata) {\n // Handle props (preferred) or inputs (deprecated) field\n const schemaField =\n mod.widgetMetadata.props || mod.widgetMetadata.inputs;\n\n // Check if schemaField is a Zod v4 schema (has ~standard property from Standard Schema)\n // and convert to JSON Schema for serialization using Zod v4's built-in toJsonSchema\n let inputsValue = schemaField || {};\n if (\n schemaField &&\n typeof schemaField === \"object\" &&\n \"~standard\" in schemaField\n ) {\n // Convert Zod schema to JSON Schema for manifest serialization\n try {\n inputsValue = toJSONSchema(schemaField);\n } catch (conversionError) {\n console.warn(\n chalk.yellow(\n ` ⚠ Could not convert schema for ${widgetName}, using raw schema`\n )\n );\n }\n }\n\n // Destructure to exclude props (raw Zod schema) from being serialized\n const {\n props: _rawProps,\n inputs: _rawInputs,\n ...restMetadata\n } = mod.widgetMetadata;\n\n widgetMetadata = {\n ...restMetadata,\n title: mod.widgetMetadata.title || widgetName,\n description: mod.widgetMetadata.description,\n // Store the converted JSON Schema (props field is used by production mount)\n props: inputsValue,\n inputs: inputsValue,\n };\n }\n // Give a moment for any background esbuild operations to complete\n await new Promise((resolve) => setTimeout(resolve, 50));\n } catch (error) {\n console.warn(\n chalk.yellow(` ⚠ Could not extract metadata for ${widgetName}`)\n );\n } finally {\n await metadataServer.close();\n // Clean up metadata temp directory\n try {\n await fs.rm(metadataTempDir, { recursive: true, force: true });\n } catch {\n // Ignore cleanup errors\n }\n }\n } catch (error) {\n // Silently skip metadata extraction if it fails\n }\n\n try {\n // Enhanced plugin to stub Node.js-only packages and built-ins\n const buildNodeStubsPlugin = {\n name: \"node-stubs-build\",\n enforce: \"pre\" as const,\n resolveId(id: string) {\n // Stub posthog-node\n if (id === \"posthog-node\" || id.startsWith(\"posthog-node/\")) {\n return \"\\0virtual:posthog-node-stub\";\n }\n // Stub path module for browser builds\n if (id === \"path\" || id === \"node:path\") {\n return \"\\0virtual:path-stub\";\n }\n return null;\n },\n load(id: string) {\n if (id === \"\\0virtual:posthog-node-stub\") {\n return `\nexport class PostHog {\n constructor() {}\n capture() {}\n identify() {}\n alias() {}\n flush() { return Promise.resolve(); }\n shutdown() { return Promise.resolve(); }\n}\nexport default PostHog;\n`;\n }\n if (id === \"\\0virtual:path-stub\") {\n return `\nexport function join(...paths) {\n return paths.filter(Boolean).join(\"/\").replace(/\\\\/\\\\//g, \"/\").replace(/\\\\/$/, \"\");\n}\nexport function resolve(...paths) {\n return join(...paths);\n}\nexport function dirname(filepath) {\n const parts = filepath.split(\"/\");\n parts.pop();\n return parts.join(\"/\") || \"/\";\n}\nexport function basename(filepath, ext) {\n const parts = filepath.split(\"/\");\n let name = parts[parts.length - 1] || \"\";\n if (ext && name.endsWith(ext)) {\n name = name.slice(0, -ext.length);\n }\n return name;\n}\nexport function extname(filepath) {\n const name = basename(filepath);\n const index = name.lastIndexOf(\".\");\n return index > 0 ? name.slice(index) : \"\";\n}\nexport function normalize(filepath) {\n return filepath.replace(/\\\\/\\\\//g, \"/\");\n}\nexport function isAbsolute(filepath) {\n return filepath.startsWith(\"/\");\n}\nexport const sep = \"/\";\nexport const delimiter = \":\";\nexport const posix = {\n join,\n resolve,\n dirname,\n basename,\n extname,\n normalize,\n isAbsolute,\n sep,\n delimiter,\n};\nexport default {\n join,\n resolve,\n dirname,\n basename,\n extname,\n normalize,\n isAbsolute,\n sep,\n delimiter,\n posix,\n};\n`;\n }\n return null;\n },\n };\n\n // Build plugins array - add viteSingleFile when inlining for VS Code compatibility\n const buildPlugins = inline\n ? [\n buildNodeStubsPlugin,\n tailwindcss(),\n react(),\n viteSingleFile({ removeViteModuleLoader: true }),\n ]\n : [buildNodeStubsPlugin, tailwindcss(), react()];\n\n await build({\n root: tempDir,\n base: baseUrl,\n plugins: buildPlugins,\n // Only use renderBuiltUrl for non-inline builds (external assets need runtime URL resolution)\n ...(inline\n ? {}\n : {\n experimental: {\n renderBuiltUrl: (\n filename: string,\n { hostType }: { hostType: string }\n ) => {\n if ([\"js\", \"css\"].includes(hostType)) {\n return {\n runtime: `window.__getFile(${JSON.stringify(filename)})`,\n };\n } else {\n return { relative: true };\n }\n },\n },\n }),\n resolve: {\n alias: {\n \"@\": resourcesDir,\n },\n },\n optimizeDeps: {\n // Exclude Node.js-only packages from browser bundling\n exclude: [\"posthog-node\"],\n },\n build: {\n outDir,\n emptyOutDir: true,\n // Disable source maps to avoid CSP eval violations\n // Source maps can use eval-based mappings which break strict CSP policies\n sourcemap: false,\n // Minify for smaller bundle size\n minify: true,\n // Widgets bundle React+Zod; suppress expected chunk size warning\n chunkSizeWarningLimit: 1024,\n // For inline builds, disable CSS code splitting and inline all assets\n ...(inline\n ? {\n cssCodeSplit: false,\n assetsInlineLimit: 100000000, // Inline all assets under 100MB (effectively all)\n }\n : {}),\n rolldownOptions: {\n input: path.join(tempDir, \"index.html\"),\n external: (id) => {\n return false;\n },\n },\n },\n });\n\n // Post-process JS bundles to patch Zod's JIT compilation\n // This prevents CSP eval violations in sandboxed iframes (MCP Apps hosts)\n // See: https://github.com/colinhacks/zod/issues/4461\n try {\n const assetsDir = path.join(outDir, \"assets\");\n const assetFiles = await fs.readdir(assetsDir);\n const jsFiles = assetFiles.filter((f) => f.endsWith(\".js\"));\n\n for (const jsFile of jsFiles) {\n const jsPath = path.join(assetsDir, jsFile);\n let content = await fs.readFile(jsPath, \"utf8\");\n\n // Patch Zod's globalConfig to disable JIT compilation\n // Zod 4.x uses: const globalConfig={};function config(o){return globalConfig}\n // After minification: const X={};function Y(o){return X}\n // We match the pattern where an empty object const is followed by a function returning it\n const zodConfigPatterns = [\n // Non-minified: export const globalConfig = {}\n /export\\s+const\\s+globalConfig\\s*=\\s*\\{\\s*\\}/g,\n // Minified pattern: ZodEncodeError\"}}const X={};function followed by return X\n // This is the unique signature of Zod's globalConfig\n /ZodEncodeError[^}]*\\}\\}const\\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\\s*=\\s*\\{\\s*\\}/g,\n ];\n\n let patched = false;\n for (const pattern of zodConfigPatterns) {\n if (pattern.test(content)) {\n // Reset lastIndex for global regex\n pattern.lastIndex = 0;\n content = content.replace(pattern, (match) => {\n return match.replace(/=\\s*\\{\\s*\\}/, \"={jitless:true}\");\n });\n patched = true;\n }\n }\n\n if (patched) {\n await fs.writeFile(jsPath, content, \"utf8\");\n console.log(chalk.gray(` → Patched Zod JIT in ${jsFile}`));\n }\n }\n } catch (error) {\n // Assets directory might not exist for some builds, that's okay\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n console.warn(chalk.yellow(` ⚠ Failed to patch Zod JIT: ${error}`));\n }\n }\n\n // Post-process HTML for static deployments (e.g., Supabase)\n // If MCP_SERVER_URL is set, inject window globals at build time\n const mcpServerUrl = process.env.MCP_SERVER_URL;\n if (mcpServerUrl) {\n try {\n const htmlPath = path.join(outDir, \"index.html\");\n let html = await fs.readFile(htmlPath, \"utf8\");\n\n // Inject window.__mcpPublicUrl and window.__getFile into <head>\n // Note: __mcpPublicUrl uses standard format for useWidget to derive mcp_url\n // __mcpPublicAssetsUrl points to where public files are actually stored\n const injectionScript = `<script>window.__getFile = (filename) => { return \"${mcpUrl}/${widgetName}/\"+filename }; window.__mcpPublicUrl = \"${mcpServerUrl}/mcp-use/public\"; window.__mcpPublicAssetsUrl = \"${mcpUrl}/public\";</script>`;\n\n // Check if script tag already exists in head\n if (!html.includes(\"window.__mcpPublicUrl\")) {\n html = html.replace(\n /<head[^>]*>/i,\n `<head>\\n ${injectionScript}`\n );\n }\n\n // Update base href if it exists, or inject it\n if (/<base\\s+[^>]*\\/?>/i.test(html)) {\n // Replace existing base tag\n html = html.replace(\n /<base\\s+[^>]*\\/?>/i,\n `<base href=\"${mcpServerUrl}\">`\n );\n } else {\n // Inject base tag after the injection script\n html = html.replace(\n injectionScript,\n `${injectionScript}\\n <base href=\"${mcpServerUrl}\">`\n );\n }\n\n await fs.writeFile(htmlPath, html, \"utf8\");\n console.log(\n chalk.gray(` → Injected MCP_SERVER_URL into ${widgetName}`)\n );\n } catch (error) {\n console.warn(\n chalk.yellow(\n ` ⚠ Failed to post-process HTML for ${widgetName}:`,\n error\n )\n );\n }\n }\n\n console.log(chalk.green(` ✓ Built ${widgetName}`));\n return { name: widgetName, metadata: widgetMetadata };\n } catch (error) {\n console.error(chalk.red(` ✗ Failed to build ${widgetName}:`), error);\n return null;\n }\n };\n\n // Build all widgets in parallel\n const buildResults = await Promise.all(\n entries.map((entry) => buildSingleWidget(entry))\n );\n\n // Filter out failed builds (null results)\n const builtWidgets = buildResults.filter(\n (result): result is { name: string; metadata: any } => result !== null\n );\n\n return builtWidgets;\n}\n\n/**\n * Collect TypeScript files from tsconfig include/exclude patterns using only\n * Node.js built-ins (no globby/fast-glob, which break in ESM bundles).\n */\nasync function collectTsFiles(\n projectPath: string,\n includePatterns: string[],\n excludePatterns: string[]\n): Promise<string[]> {\n const { promises: fs } = await import(\"node:fs\");\n\n // Separate literal files from directory globs\n const literalFiles: string[] = [];\n const dirPrefixes: string[] = [];\n\n for (const pattern of includePatterns) {\n if (pattern.includes(\"*\")) {\n // Extract directory prefix before the first wildcard\n const prefix = pattern.split(\"*\")[0].replace(/\\/+$/, \"\") || \".\";\n dirPrefixes.push(prefix);\n } else {\n literalFiles.push(pattern);\n }\n }\n\n const files: string[] = [];\n\n // Add literal files that exist and are .ts/.tsx (not .d.ts)\n for (const file of literalFiles) {\n if (/\\.tsx?$/.test(file) && !file.endsWith(\".d.ts\")) {\n try {\n await access(path.join(projectPath, file));\n files.push(file);\n } catch {\n // File doesn't exist, skip\n }\n }\n }\n\n // Recursively scan directories\n const excludeSet = new Set(excludePatterns.map((e) => e.replace(/\\*+/g, \"\")));\n for (const prefix of dirPrefixes) {\n const dirPath = path.join(projectPath, prefix);\n try {\n const entries = await fs.readdir(dirPath, { recursive: true });\n for (const entry of entries) {\n const entryStr = String(entry);\n const rel = path.join(prefix, entryStr);\n if (\n /\\.tsx?$/.test(entryStr) &&\n !entryStr.endsWith(\".d.ts\") &&\n !excludeSet.has(rel.split(path.sep)[0])\n ) {\n files.push(rel);\n }\n }\n } catch {\n // Directory doesn't exist, skip\n }\n }\n\n return files;\n}\n\n/**\n * Transpile TypeScript files using esbuild instead of tsc.\n * esbuild strips types without analyzing them, so it cannot OOM on complex types.\n * Reads the project's tsconfig.json to determine source files, outDir, and compiler options.\n */\nasync function transpileWithEsbuild(projectPath: string): Promise<void> {\n const esbuild = await import(\"esbuild\");\n const { promises: fs } = await import(\"node:fs\");\n\n const tsconfigPath = path.join(projectPath, \"tsconfig.json\");\n let tsconfig: any = {};\n try {\n const raw = await fs.readFile(tsconfigPath, \"utf-8\");\n tsconfig = JSON.parse(raw);\n } catch {\n // No tsconfig — use defaults\n }\n\n const compilerOptions = tsconfig.compilerOptions || {};\n const outDir = compilerOptions.outDir || \"./dist\";\n const includePatterns = tsconfig.include || [\"**/*.ts\", \"**/*.tsx\"];\n const excludePatterns = tsconfig.exclude || [\"node_modules\", \"dist\"];\n\n const files = await collectTsFiles(\n projectPath,\n includePatterns,\n excludePatterns\n );\n\n if (files.length === 0) {\n console.log(chalk.yellow(\" No TypeScript files found to transpile.\"));\n return;\n }\n\n // Map tsconfig jsx setting to esbuild equivalent\n const jsxMap: Record<string, \"automatic\" | \"transform\" | \"preserve\"> = {\n \"react-jsx\": \"automatic\",\n \"react-jsxdev\": \"automatic\",\n react: \"transform\",\n preserve: \"preserve\",\n };\n const jsx = jsxMap[compilerOptions.jsx] || undefined;\n\n const target = (compilerOptions.target || \"ES2022\").toLowerCase();\n\n const moduleStr = (compilerOptions.module || \"ESNext\").toLowerCase();\n const format: \"esm\" | \"cjs\" = moduleStr.includes(\"commonjs\") ? \"cjs\" : \"esm\";\n\n // Match tsc's rootDir behavior: when set, esbuild's outbase should map to it\n // so that `src/index.ts` → `dist/index.js` (not `dist/src/index.js`).\n const outbase = compilerOptions.rootDir\n ? path.resolve(projectPath, compilerOptions.rootDir)\n : projectPath;\n\n await esbuild.build({\n entryPoints: files.map((f) => path.join(projectPath, f)),\n outdir: path.join(projectPath, outDir),\n outbase,\n bundle: false,\n format,\n target,\n jsx,\n sourcemap: compilerOptions.sourceMap ?? true,\n tsconfig: tsconfigPath,\n platform: \"node\",\n logLevel: \"warning\",\n });\n}\n\nprogram\n .command(\"build\")\n .description(\"Build TypeScript and MCP UI widgets\")\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--with-inspector\", \"Include inspector in production build\")\n .option(\n \"--inline\",\n \"Inline all JS/CSS into HTML (required for VS Code MCP Apps)\"\n )\n .option(\"--no-inline\", \"Keep JS/CSS as separate files (default)\")\n .option(\"--no-typecheck\", \"Skip TypeScript type checking (faster builds)\")\n .action(async (options) => {\n try {\n const projectPath = path.resolve(options.path);\n const { promises: fs } = await import(\"node:fs\");\n\n displayPackageVersions(projectPath);\n\n // Build widgets first (this generates schemas)\n // Use --inline flag for VS Code compatibility (VS Code's CSP blocks external scripts)\n const builtWidgets = await buildWidgets(projectPath, {\n inline: options.inline ?? false,\n });\n\n // Find the source server file before building\n let sourceServerFile: string | undefined;\n try {\n sourceServerFile = await findServerFile(projectPath);\n } catch {\n // No server file found, that's okay for widget-only projects\n }\n\n if (sourceServerFile) {\n console.log(chalk.gray(\"Generating tool registry types...\"));\n const typeGenOk = await generateToolRegistryTypesForServer(\n projectPath,\n sourceServerFile\n );\n if (typeGenOk) {\n console.log(chalk.green(\"✓ Tool registry types generated\"));\n } else {\n console.log(\n chalk.yellow(\n \"⚠ Tool registry type generation had errors (non-blocking)\"\n )\n );\n }\n }\n\n // Transpile TypeScript with esbuild (fast, no OOM on complex types).\n // Type checking is a separate step via tsc --noEmit (skippable with --no-typecheck).\n console.log(chalk.gray(\"Building TypeScript...\"));\n await transpileWithEsbuild(projectPath);\n console.log(chalk.green(\"✓ TypeScript build complete!\"));\n\n // Type-check with tsc --noEmit (separate from transpilation).\n // Uses the locally installed typescript binary directly rather than npx to\n // prevent npx from auto-installing the unrelated `tsc@2.0.4` package.\n if (options.typecheck !== false) {\n console.log(chalk.gray(\"Type checking...\"));\n try {\n await runCommand(\n \"node\",\n [\n \"--max-old-space-size=4096\",\n path.join(\n projectPath,\n \"node_modules\",\n \"typescript\",\n \"bin\",\n \"tsc\"\n ),\n \"--noEmit\",\n ],\n projectPath\n ).promise;\n console.log(chalk.green(\"✓ Type check passed!\"));\n } catch {\n console.error(\n chalk.red(\"✗ Type check failed.\") +\n chalk.gray(\" Use --no-typecheck to skip.\")\n );\n process.exit(1);\n }\n }\n\n // Determine where the entry point was compiled to\n let entryPoint: string | undefined;\n if (sourceServerFile) {\n // Check possible output locations based on common tsconfig patterns\n // tsc may or may not preserve the src/ prefix depending on rootDir setting\n const baseName = path.basename(sourceServerFile, \".ts\") + \".js\";\n const possibleOutputs = [\n `dist/${baseName}`, // rootDir set to project root or src\n `dist/src/${baseName}`, // no rootDir, source in src/\n `dist/${sourceServerFile.replace(/\\.ts$/, \".js\")}`, // exact path preserved\n ];\n\n for (const candidate of possibleOutputs) {\n try {\n await access(path.join(projectPath, candidate));\n entryPoint = candidate;\n break;\n } catch {\n continue;\n }\n }\n }\n\n // Copy public folder if it exists\n const publicDir = path.join(projectPath, \"public\");\n try {\n await fs.access(publicDir);\n console.log(chalk.gray(\"Copying public assets...\"));\n await fs.cp(publicDir, path.join(projectPath, \"dist\", \"public\"), {\n recursive: true,\n });\n console.log(chalk.green(\"✓ Public assets copied\"));\n } catch {\n // Public folder doesn't exist, skip\n }\n\n // Create build manifest\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n\n // Read existing manifest to preserve tunnel subdomain and other fields\n let existingManifest: any = {};\n try {\n const existingContent = await fs.readFile(manifestPath, \"utf-8\");\n existingManifest = JSON.parse(existingContent);\n } catch {\n // File doesn't exist, that's okay\n }\n\n // Transform builtWidgets array into widgets object with metadata\n const widgetsData: Record<string, any> = {};\n for (const widget of builtWidgets) {\n widgetsData[widget.name] = widget.metadata;\n }\n\n // Convert to boolean: true if flag is present, false otherwise\n const includeInspector = !!options.withInspector;\n\n // Generate a build ID (hash of build time + random component for uniqueness)\n const buildTime = new Date().toISOString();\n const { createHash } = await import(\"node:crypto\");\n const buildId = createHash(\"sha256\")\n .update(buildTime + Math.random().toString())\n .digest(\"hex\")\n .substring(0, 16); // Use first 16 chars for shorter IDs\n\n // Merge with existing manifest, preserving tunnel and other fields\n const manifest = {\n ...existingManifest, // Preserve existing fields like tunnel\n includeInspector,\n buildTime,\n buildId,\n entryPoint, // Server entry point for `mcp-use start`\n widgets: widgetsData,\n };\n\n await fs.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.writeFile(\n manifestPath,\n JSON.stringify(manifest, null, 2),\n \"utf8\"\n );\n console.log(chalk.green(\"✓ Build manifest created\"));\n\n console.log(chalk.green.bold(`\\n✓ Build complete!`));\n if (builtWidgets.length > 0) {\n console.log(chalk.gray(` ${builtWidgets.length} widget(s) built`));\n }\n if (options.withInspector) {\n console.log(chalk.gray(\" Inspector included\"));\n }\n process.exit(0);\n } catch (error) {\n console.error(chalk.red(\"Build failed:\"), error);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"dev\")\n .description(\"Run development server with auto-reload and inspector\")\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--port <port>\", \"Server port\", \"3000\")\n .option(\n \"--host <host>\",\n \"Server host (use 0.0.0.0 to listen on all interfaces)\",\n \"0.0.0.0\"\n )\n .option(\"--no-open\", \"Do not auto-open inspector\")\n .option(\"--no-hmr\", \"Disable hot module reloading (use tsx watch instead)\")\n .option(\"--tunnel\", \"Expose server through a tunnel\")\n .action(async (options) => {\n try {\n process.env.MCP_USE_CLI_DEV = \"1\";\n const projectPath = path.resolve(options.path);\n let port = parseInt(options.port, 10);\n const host = options.host;\n const useHmr = options.hmr !== false;\n\n displayPackageVersions(projectPath);\n\n // Check if port is available, find alternative if needed\n if (!(await isPortAvailable(port, host))) {\n console.log(chalk.yellow.bold(`⚠️ Port ${port} is already in use`));\n const availablePort = await findAvailablePort(port, host);\n console.log(chalk.green.bold(`✓ Using port ${availablePort} instead`));\n port = availablePort;\n }\n\n // Find the main source file\n const serverFile = await findServerFile(projectPath);\n\n // Start tunnel if requested\n let tunnelProcess: any = undefined;\n let tunnelSubdomain: string | undefined = undefined;\n let tunnelUrl: string | undefined = undefined;\n\n if (options.tunnel) {\n try {\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n let existingSubdomain: string | undefined;\n\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n const manifest = JSON.parse(manifestContent);\n existingSubdomain = manifest.tunnel?.subdomain;\n if (existingSubdomain) {\n console.log(\n chalk.gray(`Found existing subdomain: ${existingSubdomain}`)\n );\n const apiBase =\n process.env.MCP_USE_TUNNEL_API || \"https://local.mcp-use.run\";\n try {\n await fetch(`${apiBase}/api/tunnels/${existingSubdomain}`, {\n method: \"DELETE\",\n });\n } catch {\n // Best-effort cleanup; ignore DELETE failures\n }\n }\n } catch {\n // Manifest doesn't exist or is invalid, that's okay\n }\n\n let tunnelInfo: Awaited<ReturnType<typeof startTunnel>>;\n try {\n tunnelInfo = await startTunnel(port, existingSubdomain);\n } catch (e) {\n if (existingSubdomain) {\n console.log(\n chalk.yellow(\n `Subdomain \"${existingSubdomain}\" unavailable, requesting a new one…`\n )\n );\n tunnelInfo = await startTunnel(port);\n } else {\n throw e;\n }\n }\n tunnelUrl = tunnelInfo.url;\n tunnelProcess = tunnelInfo.process;\n tunnelSubdomain = tunnelInfo.subdomain;\n\n // Persist subdomain for reuse across restarts\n try {\n let manifest: any = {};\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n manifest = JSON.parse(manifestContent);\n } catch {\n // File doesn't exist, create new manifest\n }\n\n if (!manifest.tunnel) {\n manifest.tunnel = {};\n }\n manifest.tunnel.subdomain = tunnelSubdomain;\n\n await mkdir(path.dirname(manifestPath), { recursive: true });\n await writeFile(\n manifestPath,\n JSON.stringify(manifest, null, 2),\n \"utf-8\"\n );\n } catch (error) {\n console.warn(\n chalk.yellow(\n `⚠️ Failed to save subdomain to mcp-use.json: ${error instanceof Error ? error.message : \"Unknown error\"}`\n )\n );\n }\n } catch (error) {\n console.error(chalk.red(\"Failed to start tunnel:\"), error);\n process.exit(1);\n }\n }\n\n // Set environment variables for the server\n const mcpUrl = `http://${host}:${port}`;\n process.env.PORT = String(port);\n process.env.HOST = host;\n process.env.NODE_ENV = \"development\";\n // Tunnel URL takes priority; otherwise preserve user-provided MCP_URL (e.g., for reverse proxy setups)\n if (tunnelUrl) {\n process.env.MCP_URL = tunnelUrl;\n } else if (!process.env.MCP_URL) {\n process.env.MCP_URL = mcpUrl;\n }\n if (!useHmr) {\n // Fallback: Use tsx watch (restarts process on changes)\n console.log(chalk.gray(\"HMR disabled, using tsx watch (full restart)\"));\n\n const processes: any[] = [];\n const env: NodeJS.ProcessEnv = {\n PORT: String(port),\n HOST: host,\n NODE_ENV: \"development\",\n // Preserve user-provided MCP_URL (e.g., for reverse proxy setups)\n MCP_URL: process.env.MCP_URL || mcpUrl,\n };\n\n // Use local tsx if available, otherwise fall back to npx\n const { createRequire } = await import(\"node:module\");\n let cmd: string;\n let args: string[];\n try {\n const projectRequire = createRequire(\n path.join(projectPath, \"package.json\")\n );\n // Resolve tsx bin from package.json instead of hardcoding internal path\n const tsxPkgPath = projectRequire.resolve(\"tsx/package.json\");\n const tsxPkg = JSON.parse(await readFile(tsxPkgPath, \"utf-8\"));\n // Handle both string and object forms of the bin field\n let binPath: string;\n if (typeof tsxPkg.bin === \"string\") {\n binPath = tsxPkg.bin;\n } else if (tsxPkg.bin && typeof tsxPkg.bin === \"object\") {\n // Use 'tsx' entry or the first entry\n binPath = tsxPkg.bin.tsx || Object.values(tsxPkg.bin)[0];\n } else {\n throw new Error(\"No bin field found in tsx package.json\");\n }\n const tsxBin = path.resolve(path.dirname(tsxPkgPath), binPath);\n cmd = \"node\";\n args = [tsxBin, \"watch\", serverFile];\n } catch (error) {\n // tsx not found locally or bin resolution failed, use npx\n console.log(\n chalk.yellow(\n `Could not resolve local tsx: ${error instanceof Error ? error.message : \"unknown error\"}`\n )\n );\n cmd = \"npx\";\n args = [\"tsx\", \"watch\", serverFile];\n }\n\n const serverCommand = runCommand(cmd, args, projectPath, env, true);\n processes.push(serverCommand.process);\n\n // Auto-open inspector if enabled\n if (options.open !== false) {\n const startTime = Date.now();\n const browserHost = normalizeBrowserHost(host);\n const ready = await waitForServer(port, browserHost);\n if (ready) {\n const mcpEndpoint = `http://${browserHost}:${port}/mcp`;\n const autoConnectEndpoint = tunnelUrl\n ? `${tunnelUrl}/mcp`\n : mcpEndpoint;\n const inspectorUrl = `http://${browserHost}:${port}/inspector?autoConnect=${encodeURIComponent(autoConnectEndpoint)}`;\n\n const readyTime = Date.now() - startTime;\n console.log(chalk.green.bold(`✓ Ready in ${readyTime}ms`));\n console.log(\n chalk.whiteBright(`Local: http://${browserHost}:${port}`)\n );\n console.log(chalk.whiteBright(`Network: http://${host}:${port}`));\n console.log(chalk.whiteBright(`MCP: ${mcpEndpoint}`));\n if (tunnelUrl) {\n console.log(chalk.whiteBright(`Tunnel: ${tunnelUrl}/mcp`));\n }\n console.log(chalk.whiteBright(`Inspector: ${inspectorUrl}\\n`));\n await open(inspectorUrl);\n }\n }\n\n // Handle cleanup\n let noHmrCleanupInProgress = false;\n const cleanup = async () => {\n if (noHmrCleanupInProgress) return;\n noHmrCleanupInProgress = true;\n\n console.log(chalk.gray(\"\\n\\nShutting down...\"));\n\n if (\n tunnelProcess &&\n typeof (tunnelProcess as any).markShutdown === \"function\"\n ) {\n (tunnelProcess as any).markShutdown();\n }\n\n if (tunnelSubdomain) {\n try {\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n await fetch(`${apiBase}/api/tunnels/${tunnelSubdomain}`, {\n method: \"DELETE\",\n });\n } catch {\n // Ignore cleanup errors\n }\n }\n\n processes.forEach((proc) => {\n if (proc && typeof proc.kill === \"function\") {\n proc.kill(\"SIGINT\");\n }\n });\n\n if (tunnelProcess && typeof tunnelProcess.kill === \"function\") {\n tunnelProcess.kill(\"SIGINT\");\n }\n\n setTimeout(() => process.exit(0), 2000);\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n await new Promise(() => {});\n return;\n }\n\n // HMR mode: Use chokidar to watch files and sync registrations\n console.log(\n chalk.gray(\n \"HMR enabled - changes will hot reload without dropping connections\"\n )\n );\n\n const chokidarModule = await import(\"chokidar\");\n const chokidar = (chokidarModule as any).default || chokidarModule;\n const { fileURLToPath } = await import(\"node:url\");\n const { createRequire } = await import(\"node:module\");\n\n // Try to get tsx's tsImport function for TypeScript support\n let tsImport:\n | ((\n specifier: string,\n parentUrlOrOptions:\n | string\n | {\n parentURL: string;\n onImport?: (file: string) => void;\n tsconfig?: string | false;\n }\n ) => Promise<any>)\n | null = null;\n try {\n const projectRequire = createRequire(\n path.join(projectPath, \"package.json\")\n );\n // Resolve tsx/esm/api from the user's project\n const tsxApiPath = projectRequire.resolve(\"tsx/esm/api\");\n const tsxApi = await import(pathToFileURL(tsxApiPath).href);\n tsImport = tsxApi.tsImport;\n } catch {\n // tsx not found - continue without it (JS files only, or tsx might be globally available)\n console.log(\n chalk.yellow(\n \"Warning: tsx not found in project dependencies. TypeScript HMR may not work.\\n\" +\n \"Add tsx to your devDependencies: npm install -D tsx\"\n )\n );\n }\n\n const serverFilePath = path.join(projectPath, serverFile);\n const serverFileUrl = pathToFileURL(serverFilePath).href;\n\n // Set HMR mode flag - this tells MCPServer.listen() to skip during imports\n // CLI manages the server lifecycle instead\n (globalThis as any).__mcpUseHmrMode = true;\n\n // Helper to import server module with cache busting\n const importServerModule = async () => {\n // Clear the global reference so we can detect if a new instance was created\n const previousServer = (globalThis as any).__mcpUseLastServer;\n (globalThis as any).__mcpUseLastServer = null;\n\n // Use tsx's tsImport if available for TypeScript support\n // Otherwise fall back to native import (for JS files or if tsx is globally loaded)\n if (tsImport) {\n // tsImport handles TypeScript compilation and does not cache loaded modules,\n // so the entire dependency tree is re-evaluated on each call.\n // The ?t= timestamp is kept as a safety measure for edge cases.\n await tsImport(`${serverFileUrl}?t=${Date.now()}`, {\n parentURL: import.meta.url,\n onImport: (file: string) => {\n const filePath = file.startsWith(\"file://\")\n ? fileURLToPath(file)\n : file;\n if (\n !filePath.includes(\"node_modules\") &&\n filePath.startsWith(projectPath)\n ) {\n console.debug(`[HMR] Loaded: ${file}`);\n }\n },\n });\n } else {\n // Native import - works for JS files or if tsx is already loaded via --import.\n // WARNING: Native import() caches modules by URL. The ?t= timestamp busts\n // the cache for the entry file only; sub-imports will use cached versions.\n await import(`${serverFileUrl}?t=${Date.now()}`);\n }\n\n // Get the server instance from the global registry\n // No export required - MCPServer tracks itself when created via globalThis\n const instance = (globalThis as any).__mcpUseLastServer;\n\n if (!instance) {\n // No new instance was created - restore the previous one\n (globalThis as any).__mcpUseLastServer = previousServer;\n console.warn(\n chalk.yellow(\n \"[HMR] Warning: Module re-import did not create a new MCPServer instance. \" +\n \"The module may be cached. Check that your server file creates an MCPServer.\"\n )\n );\n return null;\n }\n\n if (instance === previousServer) {\n // Same instance reference - the module was cached and not re-evaluated\n console.warn(\n chalk.yellow(\n \"[HMR] Warning: Module re-import returned the same server instance. \" +\n \"The module may not have been re-evaluated. \" +\n (!tsImport\n ? \"Install tsx as a devDependency for reliable TypeScript HMR.\"\n : \"This may be a tsx caching issue.\")\n )\n );\n return null;\n }\n\n return instance;\n };\n\n // Initial import\n console.log(chalk.gray(`Loading server from ${serverFile}...`));\n let runningServer: any;\n\n try {\n runningServer = await importServerModule();\n\n if (!runningServer) {\n console.error(\n chalk.red(\n \"Error: Could not find MCPServer instance.\\n\" +\n \"Make sure your server file creates an MCPServer:\\n\" +\n \" const server = new MCPServer({ name: 'my-server', version: '1.0.0' });\"\n )\n );\n process.exit(1);\n }\n\n // Check if it has the required methods\n if (typeof runningServer.listen !== \"function\") {\n console.error(\n chalk.red(\"Error: MCPServer instance must have a listen() method\")\n );\n process.exit(1);\n }\n\n // Start the server - temporarily disable HMR flag so listen() works\n const startTime = Date.now();\n (globalThis as any).__mcpUseHmrMode = false;\n await runningServer.listen(port);\n (globalThis as any).__mcpUseHmrMode = true;\n\n // Auto-open inspector if enabled\n if (options.open !== false) {\n const browserHost = normalizeBrowserHost(host);\n const ready = await waitForServer(port, browserHost);\n if (ready) {\n const mcpEndpoint = `http://${browserHost}:${port}/mcp`;\n const autoConnectEndpoint = tunnelUrl\n ? `${tunnelUrl}/mcp`\n : mcpEndpoint;\n const inspectorUrl = `http://${browserHost}:${port}/inspector?autoConnect=${encodeURIComponent(autoConnectEndpoint)}`;\n\n const readyTime = Date.now() - startTime;\n console.log(chalk.green.bold(`✓ Ready in ${readyTime}ms`));\n console.log(\n chalk.whiteBright(`Local: http://${browserHost}:${port}`)\n );\n console.log(chalk.whiteBright(`Network: http://${host}:${port}`));\n console.log(chalk.whiteBright(`MCP: ${mcpEndpoint}`));\n if (tunnelUrl) {\n console.log(chalk.whiteBright(`Tunnel: ${tunnelUrl}/mcp`));\n }\n console.log(chalk.whiteBright(`Inspector: ${inspectorUrl}`));\n console.log(chalk.gray(`Watching for changes...\\n`));\n await open(inspectorUrl);\n }\n }\n } catch (error: any) {\n console.error(\n chalk.red(\"Failed to start server:\"),\n error?.message || error\n );\n if (error?.stack) {\n console.error(chalk.gray(error.stack));\n }\n process.exit(1);\n }\n\n // Log success when --no-open is used\n if (options.open === false) {\n const mcpEndpoint = `http://${host}:${port}/mcp`;\n console.log(chalk.green.bold(`✓ Server ready`));\n console.log(chalk.whiteBright(`Local: http://${host}:${port}`));\n console.log(chalk.whiteBright(`MCP: ${mcpEndpoint}`));\n if (tunnelUrl) {\n console.log(chalk.whiteBright(`Tunnel: ${tunnelUrl}/mcp`));\n }\n console.log(chalk.gray(`Watching for changes...\\n`));\n }\n\n // Watch for file changes - watch .ts/.tsx files in project directory\n let watcher = chokidar.watch(\".\", {\n cwd: projectPath,\n ignored: (path: string, stats?: any) => {\n // Normalize path separators for cross-platform compatibility\n const normalizedPath = path.replace(/\\\\/g, \"/\");\n\n // Ignore dotfiles and dot directories (hidden files)\n if (/(^|\\/)\\.[^/]/.test(normalizedPath)) {\n return true;\n }\n\n // Ignore node_modules directory and all its contents\n if (\n normalizedPath.includes(\"/node_modules/\") ||\n normalizedPath.endsWith(\"/node_modules\")\n ) {\n return true;\n }\n\n // Ignore dist directory and all its contents\n if (\n normalizedPath.includes(\"/dist/\") ||\n normalizedPath.endsWith(\"/dist\")\n ) {\n return true;\n }\n\n // Ignore resources directory (widgets watched separately by vite)\n if (\n normalizedPath.includes(\"/resources/\") ||\n normalizedPath.endsWith(\"/resources\")\n ) {\n return true;\n }\n\n // Ignore .d.ts files (TypeScript declaration files)\n if (stats?.isFile() && normalizedPath.endsWith(\".d.ts\")) {\n return true;\n }\n\n return false;\n },\n persistent: true,\n ignoreInitial: true,\n depth: 3, // Limit depth to avoid watching too many files\n });\n\n watcher\n .on(\"ready\", () => {\n const watched = watcher.getWatched();\n const dirs = Object.keys(watched);\n console.log(\n chalk.gray(`[HMR] Watcher ready, watching ${dirs.length} paths`)\n );\n })\n .on(\"error\", (error: unknown) => {\n console.error(\n chalk.red(\n `[HMR] Watcher error: ${error instanceof Error ? error.message : String(error)}`\n )\n );\n });\n\n // Debounce rapid changes\n let reloadTimeout: NodeJS.Timeout | null = null;\n let isReloading = false;\n\n const hmrOnChange = async (filePath: string) => {\n // Only handle .ts and .tsx files (not .d.ts)\n if (\n (!filePath.endsWith(\".ts\") && !filePath.endsWith(\".tsx\")) ||\n filePath.endsWith(\".d.ts\")\n ) {\n return;\n }\n if (isReloading) return;\n\n // Debounce multiple rapid changes\n if (reloadTimeout) {\n clearTimeout(reloadTimeout);\n }\n\n reloadTimeout = setTimeout(async () => {\n isReloading = true;\n // filePath is already relative due to cwd option\n console.log(chalk.yellow(`\\n[HMR] File changed: ${filePath}`));\n\n try {\n // Re-import the server module (this creates a new MCPServer instance)\n const newServer = await importServerModule();\n\n if (!newServer) {\n console.warn(\n chalk.yellow(\n \"[HMR] Warning: No MCPServer instance found after reload, skipping\"\n )\n );\n isReloading = false;\n return;\n }\n\n // Check if the running server has syncRegistrationsFrom\n if (typeof runningServer.syncRegistrationsFrom !== \"function\") {\n console.warn(\n chalk.yellow(\n \"[HMR] Warning: Server does not support hot reload (missing syncRegistrationsFrom)\"\n )\n );\n isReloading = false;\n return;\n }\n\n // Sync registrations from the new server to the running server\n const syncResult = runningServer.syncRegistrationsFrom(newServer);\n\n if (syncResult && syncResult.totalChanges > 0) {\n const parts: string[] = [];\n if (\n syncResult.tools.updated > 0 ||\n syncResult.tools.added > 0 ||\n syncResult.tools.removed > 0\n ) {\n const details: string[] = [];\n if (syncResult.tools.updated > 0)\n details.push(`${syncResult.tools.updated} updated`);\n if (syncResult.tools.added > 0)\n details.push(`${syncResult.tools.added} added`);\n if (syncResult.tools.removed > 0)\n details.push(`${syncResult.tools.removed} removed`);\n parts.push(`tools (${details.join(\", \")})`);\n }\n if (\n syncResult.prompts.updated > 0 ||\n syncResult.prompts.added > 0 ||\n syncResult.prompts.removed > 0\n ) {\n const details: string[] = [];\n if (syncResult.prompts.updated > 0)\n details.push(`${syncResult.prompts.updated} updated`);\n if (syncResult.prompts.added > 0)\n details.push(`${syncResult.prompts.added} added`);\n if (syncResult.prompts.removed > 0)\n details.push(`${syncResult.prompts.removed} removed`);\n parts.push(`prompts (${details.join(\", \")})`);\n }\n if (\n syncResult.resources.updated > 0 ||\n syncResult.resources.added > 0 ||\n syncResult.resources.removed > 0\n ) {\n const details: string[] = [];\n if (syncResult.resources.updated > 0)\n details.push(`${syncResult.resources.updated} updated`);\n if (syncResult.resources.added > 0)\n details.push(`${syncResult.resources.added} added`);\n if (syncResult.resources.removed > 0)\n details.push(`${syncResult.resources.removed} removed`);\n parts.push(`resources (${details.join(\", \")})`);\n }\n console.log(chalk.green(`[HMR] ✓ Reloaded: ${parts.join(\", \")}`));\n } else {\n console.log(\n chalk.gray(\n `[HMR] No changes detected (${runningServer.registeredTools?.length || 0} tools, ` +\n `${runningServer.registeredPrompts?.length || 0} prompts, ` +\n `${runningServer.registeredResources?.length || 0} resources registered)`\n )\n );\n }\n } catch (error: any) {\n console.error(chalk.red(`[HMR] Reload failed: ${error.message}`));\n // Keep running with old registrations\n }\n\n isReloading = false;\n }, 100);\n };\n watcher.on(\"change\", hmrOnChange);\n\n // Expose project path so tunnel.ts can read the manifest for subdomain reuse\n process.env.MCP_USE_PROJECT_PATH = projectPath;\n\n // Expose in-process restart hook for the inspector tunnel toggle.\n // Tears down the running server and re-sets up everything as if\n // `mcp-use dev` was called with or without --tunnel.\n (globalThis as any).__mcpUseDevRestart = async (withTunnel: boolean) => {\n console.log(\n chalk.yellow(\n `\\n[DEV] Restarting ${withTunnel ? \"with\" : \"without\"} tunnel…`\n )\n );\n\n // Suppress noise from in-flight requests terminated during teardown\n const origStderrWrite = process.stderr.write.bind(process.stderr);\n const stderrFilter = (chunk: any, ...args: any[]) => {\n const str =\n typeof chunk === \"string\" ? chunk : (chunk?.toString?.() ?? \"\");\n if (\n str.includes(\"TypeError: terminated\") ||\n str.includes(\"SocketError\") ||\n str.includes(\"UND_ERR_SOCKET\")\n ) {\n return true;\n }\n return origStderrWrite(chunk, ...args);\n };\n process.stderr.write = stderrFilter as typeof process.stderr.write;\n\n // 1. Tear down\n watcher.close();\n if (tunnelProcess && typeof tunnelProcess.kill === \"function\") {\n if (typeof (tunnelProcess as any).markShutdown === \"function\") {\n (tunnelProcess as any).markShutdown();\n }\n const dyingProc = tunnelProcess;\n tunnelProcess = undefined;\n dyingProc.kill(\"SIGINT\");\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n try {\n dyingProc.kill(\"SIGKILL\");\n } catch {\n /* ignore */\n }\n resolve();\n }, 5000);\n dyingProc.on(\"exit\", () => {\n clearTimeout(timeout);\n resolve();\n });\n });\n }\n if (tunnelSubdomain) {\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n try {\n await fetch(`${apiBase}/api/tunnels/${tunnelSubdomain}`, {\n method: \"DELETE\",\n });\n } catch {\n /* ignore */\n }\n tunnelSubdomain = undefined;\n }\n if (runningServer && typeof runningServer.forceClose === \"function\") {\n await runningServer.forceClose();\n } else if (runningServer && typeof runningServer.close === \"function\") {\n await runningServer.close();\n }\n\n // 2. Start tunnel if requested\n tunnelUrl = undefined;\n if (withTunnel) {\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n let existingSubdomain: string | undefined;\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n const manifest = JSON.parse(manifestContent);\n existingSubdomain = manifest.tunnel?.subdomain;\n if (existingSubdomain) {\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n try {\n await fetch(`${apiBase}/api/tunnels/${existingSubdomain}`, {\n method: \"DELETE\",\n });\n } catch {\n /* ignore */\n }\n }\n } catch {\n /* ignore */\n }\n let tunnelInfo: Awaited<ReturnType<typeof startTunnel>>;\n try {\n tunnelInfo = await startTunnel(port, existingSubdomain);\n } catch {\n if (existingSubdomain) {\n console.log(\n chalk.yellow(\n `Subdomain \"${existingSubdomain}\" unavailable, requesting a new one…`\n )\n );\n tunnelInfo = await startTunnel(port);\n } else {\n throw new Error(\"Failed to start tunnel\");\n }\n }\n tunnelUrl = tunnelInfo.url;\n tunnelProcess = tunnelInfo.process;\n tunnelSubdomain = tunnelInfo.subdomain;\n process.env.MCP_URL = tunnelUrl;\n\n // Persist subdomain\n try {\n const mPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n let manifest: any = {};\n try {\n manifest = JSON.parse(await readFile(mPath, \"utf-8\"));\n } catch {\n /* ignore */\n }\n if (!manifest.tunnel) manifest.tunnel = {};\n manifest.tunnel.subdomain = tunnelSubdomain;\n await mkdir(path.dirname(mPath), { recursive: true });\n await writeFile(mPath, JSON.stringify(manifest, null, 2), \"utf-8\");\n } catch {\n /* ignore */\n }\n } else {\n process.env.MCP_URL = `http://${host}:${port}`;\n }\n\n // 3. Re-import server module (HMR mode stays true so user's listen() is a no-op)\n console.log(chalk.gray(`Loading server from ${serverFile}...`));\n runningServer = await importServerModule();\n if (!runningServer) {\n console.error(\n chalk.red(\"Error: Could not find MCPServer instance after restart.\")\n );\n return;\n }\n // Temporarily disable HMR flag so our listen() actually starts the server\n (globalThis as any).__mcpUseHmrMode = false;\n await runningServer.listen(port);\n (globalThis as any).__mcpUseHmrMode = true;\n\n const browserHost = normalizeBrowserHost(host);\n const mcpEndpoint = `http://${browserHost}:${port}/mcp`;\n const autoConnectEndpoint = tunnelUrl\n ? `${tunnelUrl}/mcp`\n : mcpEndpoint;\n console.log(chalk.green.bold(`✓ Restarted`));\n console.log(chalk.whiteBright(`MCP: ${mcpEndpoint}`));\n if (tunnelUrl) {\n console.log(chalk.whiteBright(`Tunnel: ${tunnelUrl}/mcp`));\n }\n console.log(\n chalk.whiteBright(\n `Inspector: http://${browserHost}:${port}/inspector?autoConnect=${encodeURIComponent(autoConnectEndpoint)}`\n )\n );\n console.log(chalk.gray(`Watching for changes...\\n`));\n\n // 4. Re-create watcher (reuses same config)\n watcher = chokidar.watch(\".\", {\n cwd: projectPath,\n ignored: (p: string, stats?: any) => {\n const np = p.replace(/\\\\/g, \"/\");\n if (/(^|\\/)\\.[^/]/.test(np)) return true;\n if (np.includes(\"/node_modules/\") || np.endsWith(\"/node_modules\"))\n return true;\n if (np.includes(\"/dist/\") || np.endsWith(\"/dist\")) return true;\n if (np.includes(\"/resources/\") || np.endsWith(\"/resources\"))\n return true;\n if (stats?.isFile() && np.endsWith(\".d.ts\")) return true;\n return false;\n },\n persistent: true,\n ignoreInitial: true,\n depth: 3,\n });\n watcher\n .on(\"ready\", () => console.log(chalk.gray(`[HMR] Watcher ready`)))\n .on(\"error\", (err: unknown) =>\n console.error(\n chalk.red(\n `[HMR] Watcher error: ${err instanceof Error ? err.message : String(err)}`\n )\n )\n )\n .on(\"change\", hmrOnChange);\n\n // Restore stderr once the new server is stable\n setTimeout(() => {\n process.stderr.write = origStderrWrite;\n }, 2000);\n };\n\n // Handle cleanup\n let hmrCleanupInProgress = false;\n const cleanup = async () => {\n if (hmrCleanupInProgress) return;\n hmrCleanupInProgress = true;\n\n console.log(chalk.gray(\"\\n\\nShutting down...\"));\n watcher.close();\n\n if (\n tunnelProcess &&\n typeof (tunnelProcess as any).markShutdown === \"function\"\n ) {\n (tunnelProcess as any).markShutdown();\n }\n\n if (tunnelSubdomain) {\n try {\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n await fetch(`${apiBase}/api/tunnels/${tunnelSubdomain}`, {\n method: \"DELETE\",\n });\n } catch {\n // Ignore cleanup errors\n }\n }\n\n if (tunnelProcess && typeof tunnelProcess.kill === \"function\") {\n tunnelProcess.kill(\"SIGINT\");\n setTimeout(() => process.exit(0), 2000);\n } else {\n process.exit(0);\n }\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n // Keep the process running\n await new Promise(() => {});\n } catch (error) {\n console.error(chalk.red(\"Dev mode failed:\"), error);\n process.exit(1);\n }\n });\n\nprogram\n .command(\"start\")\n .description(\"Start production server\")\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--port <port>\", \"Server port\", \"3000\")\n .option(\"--tunnel\", \"Expose server through a tunnel\")\n .action(async (options) => {\n try {\n const projectPath = path.resolve(options.path);\n // Priority: --port flag > process.env.PORT > default\n // Check if --port or -p was explicitly provided in command line\n const portFlagProvided =\n process.argv.includes(\"--port\") ||\n process.argv.includes(\"-p\") ||\n process.argv.some((arg) => arg.startsWith(\"--port=\")) ||\n process.argv.some((arg) => arg.startsWith(\"-p=\"));\n\n const port = portFlagProvided\n ? parseInt(options.port, 10) // Flag explicitly provided, use it\n : parseInt(process.env.PORT || options.port || \"3000\", 10); // Check env, then default\n\n console.log(\n `\\x1b[36m\\x1b[1mmcp-use\\x1b[0m \\x1b[90mVersion: ${packageJson.version}\\x1b[0m\\n`\n );\n\n // Start tunnel if requested\n let mcpUrl: string | undefined;\n let tunnelProcess: any = undefined;\n let tunnelSubdomain: string | undefined = undefined;\n if (options.tunnel) {\n try {\n // Read existing subdomain from mcp-use.json if available\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n let existingSubdomain: string | undefined;\n\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n const manifest = JSON.parse(manifestContent);\n existingSubdomain = manifest.tunnel?.subdomain;\n if (existingSubdomain) {\n console.log(\n chalk.gray(`Found existing subdomain: ${existingSubdomain}`)\n );\n // Release the stale subdomain so the first attempt can reclaim it\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n try {\n await fetch(`${apiBase}/api/tunnels/${existingSubdomain}`, {\n method: \"DELETE\",\n });\n } catch {\n // Best-effort cleanup; ignore DELETE failures\n }\n }\n } catch (error) {\n // Manifest doesn't exist or is invalid, that's okay\n console.debug(\n chalk.gray(\n `Debug: Failed to read or parse mcp-use.json: ${error instanceof Error ? error.message : String(error)}`\n )\n );\n }\n\n let tunnelInfo: Awaited<ReturnType<typeof startTunnel>>;\n try {\n tunnelInfo = await startTunnel(port, existingSubdomain);\n } catch (e) {\n if (existingSubdomain) {\n console.log(\n chalk.yellow(\n `Subdomain \"${existingSubdomain}\" unavailable, requesting a new one…`\n )\n );\n tunnelInfo = await startTunnel(port);\n } else {\n throw e;\n }\n }\n mcpUrl = tunnelInfo.url;\n tunnelProcess = tunnelInfo.process;\n const subdomain = tunnelInfo.subdomain;\n tunnelSubdomain = subdomain;\n\n // Update mcp-use.json with the subdomain\n try {\n let manifest: any = {};\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n manifest = JSON.parse(manifestContent);\n } catch {\n // File doesn't exist, create new manifest\n }\n\n // Update or add tunnel subdomain\n if (!manifest.tunnel) {\n manifest.tunnel = {};\n }\n manifest.tunnel.subdomain = subdomain;\n\n // Ensure dist directory exists\n await mkdir(path.dirname(manifestPath), { recursive: true });\n\n // Write updated manifest\n await writeFile(\n manifestPath,\n JSON.stringify(manifest, null, 2),\n \"utf-8\"\n );\n } catch (error) {\n console.warn(\n chalk.yellow(\n `⚠️ Failed to save subdomain to mcp-use.json: ${error instanceof Error ? error.message : \"Unknown error\"}`\n )\n );\n }\n } catch (error) {\n console.error(chalk.red(\"Failed to start tunnel:\"), error);\n process.exit(1);\n }\n }\n\n // Find the built server file\n // First try to read from manifest (set during build)\n let serverFile: string | undefined;\n const manifestPath = path.join(projectPath, \"dist\", \"mcp-use.json\");\n\n try {\n const manifestContent = await readFile(manifestPath, \"utf-8\");\n const manifest = JSON.parse(manifestContent);\n if (manifest.entryPoint) {\n // Verify the entry point exists\n await access(path.join(projectPath, manifest.entryPoint));\n serverFile = manifest.entryPoint;\n }\n } catch {\n // Manifest doesn't exist or entryPoint not set, fall back to searching\n }\n\n // Fall back to checking common locations if manifest didn't help\n if (!serverFile) {\n const serverCandidates = [\n \"dist/index.js\",\n \"dist/server.js\",\n \"dist/src/index.js\",\n \"dist/src/server.js\",\n ];\n\n for (const candidate of serverCandidates) {\n try {\n await access(path.join(projectPath, candidate));\n serverFile = candidate;\n break;\n } catch {\n continue;\n }\n }\n }\n\n if (!serverFile) {\n console.error(\n chalk.red(\n `No built server file found. Run 'mcp-use build' first.\\n\\nLooked for:\\n - dist/mcp-use.json (manifest with entryPoint)\\n - dist/index.js\\n - dist/server.js\\n - dist/src/index.js\\n - dist/src/server.js`\n )\n );\n process.exit(1);\n }\n\n console.log(\"Starting production server...\");\n\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n PORT: String(port),\n NODE_ENV: \"production\",\n };\n\n if (mcpUrl) {\n env.MCP_URL = mcpUrl;\n console.log(chalk.whiteBright(`Tunnel: ${mcpUrl}/mcp`));\n } else if (!env.MCP_URL) {\n env.MCP_URL = `http://localhost:${port}`;\n }\n\n const serverProc = spawn(\"node\", [serverFile], {\n cwd: projectPath,\n stdio: \"inherit\",\n env,\n });\n\n // Handle cleanup\n let cleanupInProgress = false;\n const cleanup = async () => {\n if (cleanupInProgress) {\n return; // Prevent double cleanup\n }\n cleanupInProgress = true;\n\n console.log(chalk.gray(\"\\n\\nShutting down...\"));\n\n // Mark tunnel as shutting down to suppress output\n if (\n tunnelProcess &&\n typeof (tunnelProcess as any).markShutdown === \"function\"\n ) {\n (tunnelProcess as any).markShutdown();\n }\n\n // Clean up tunnel via API if subdomain is available\n if (tunnelSubdomain) {\n try {\n const apiBase =\n process.env.MCP_USE_API || \"https://local.mcp-use.run\";\n await fetch(`${apiBase}/api/tunnels/${tunnelSubdomain}`, {\n method: \"DELETE\",\n });\n } catch (err) {\n // Ignore cleanup errors\n }\n }\n\n const processesToKill = 1 + (tunnelProcess ? 1 : 0);\n let killedCount = 0;\n\n const checkAndExit = () => {\n killedCount++;\n if (killedCount >= processesToKill) {\n process.exit(0);\n }\n };\n\n // Handle server process\n serverProc.on(\"exit\", checkAndExit);\n serverProc.kill(\"SIGTERM\");\n\n // Handle tunnel process if it exists\n if (tunnelProcess && typeof tunnelProcess.kill === \"function\") {\n tunnelProcess.on(\"exit\", checkAndExit);\n // Use SIGINT for better cleanup of npx/node processes\n tunnelProcess.kill(\"SIGINT\");\n } else {\n checkAndExit();\n }\n\n // Fallback timeout in case processes don't exit\n setTimeout(() => {\n if (serverProc.exitCode === null) {\n serverProc.kill(\"SIGKILL\");\n }\n if (tunnelProcess && tunnelProcess.exitCode === null) {\n tunnelProcess.kill(\"SIGKILL\");\n }\n process.exit(0);\n }, 2000); // Increase timeout to 2 seconds to allow graceful shutdown\n };\n\n process.on(\"SIGINT\", cleanup);\n process.on(\"SIGTERM\", cleanup);\n\n serverProc.on(\"exit\", async (code) => {\n // Server exited - cleanup tunnel before exiting CLI\n if (!cleanupInProgress) {\n await cleanup();\n }\n process.exit(code || 0);\n });\n } catch (error) {\n console.error(\"Start failed:\", error);\n process.exit(1);\n }\n });\n\n// Authentication commands\nprogram\n .command(\"login\")\n .description(\"Login to mcp-use cloud\")\n .option(\n \"--api-key <key>\",\n \"Login with an API key directly (non-interactive, for CI/CD)\"\n )\n .action(async (opts: { apiKey?: string }) => {\n try {\n await loginCommand({ apiKey: opts.apiKey });\n process.exit(0);\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Login failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n });\n\nprogram\n .command(\"logout\")\n .description(\"Logout from Manufact cloud\")\n .action(async () => {\n await logoutCommand();\n });\n\nprogram\n .command(\"whoami\")\n .description(\"Show current user information\")\n .action(async () => {\n await whoamiCommand();\n });\n\n// Organization commands\nconst orgCommand = program.command(\"org\").description(\"Manage organizations\");\n\norgCommand\n .command(\"list\")\n .description(\"List your organizations\")\n .action(async () => {\n await orgListCommand();\n });\n\norgCommand\n .command(\"switch\")\n .description(\"Switch the active organization\")\n .action(async () => {\n await orgSwitchCommand();\n });\n\norgCommand\n .command(\"current\")\n .description(\"Show the currently active organization\")\n .action(async () => {\n await orgCurrentCommand();\n });\n\n// Deployment command\nprogram\n .command(\"deploy\")\n .description(\"Deploy MCP server from GitHub to Manufact cloud\")\n .option(\"--open\", \"Open deployment in browser after successful deploy\")\n .option(\"--name <name>\", \"Custom deployment name\")\n .option(\"--port <port>\", \"Server port\", \"3000\")\n .option(\"--runtime <runtime>\", \"Runtime (node or python)\")\n .option(\n \"--new\",\n \"Force creation of new deployment instead of reusing linked deployment\"\n )\n .option(\n \"--env <key=value...>\",\n \"Environment variables (can be used multiple times)\"\n )\n .option(\"--env-file <path>\", \"Path to .env file with environment variables\")\n .option(\n \"--root-dir <path>\",\n \"Root directory within repo to deploy from (for monorepos)\"\n )\n .option(\n \"--org <slug-or-id>\",\n \"Deploy to a specific organization (by slug or ID)\"\n )\n .option(\"-y, --yes\", \"Skip confirmation prompts\")\n .option(\"--region <region>\", \"Deploy region: US, EU, or APAC (default: US)\")\n .option(\n \"--build-command <cmd>\",\n \"Custom build command (overrides auto-detection)\"\n )\n .option(\n \"--start-command <cmd>\",\n \"Custom start command (overrides auto-detection)\"\n )\n .action(async (options) => {\n await deployCommand({\n open: options.open,\n name: options.name,\n port: options.port ? parseInt(options.port, 10) : undefined,\n runtime: options.runtime,\n new: options.new,\n env: options.env,\n envFile: options.envFile,\n rootDir: options.rootDir,\n org: options.org,\n yes: options.yes,\n region: options.region,\n buildCommand: options.buildCommand,\n startCommand: options.startCommand,\n });\n });\n\n// Client command\nprogram.addCommand(createClientCommand());\n\n// Deployments command\nprogram.addCommand(createDeploymentsCommand());\n\n// Servers command\nprogram.addCommand(createServersCommand());\n\n// Skills command\nprogram.addCommand(createSkillsCommand());\n\n// Generate types command\nprogram\n .command(\"generate-types\")\n .description(\n \"Generate TypeScript type definitions for tools (writes .mcp-use/tool-registry.d.ts)\"\n )\n .option(\"-p, --path <path>\", \"Path to project directory\", process.cwd())\n .option(\"--server <file>\", \"Server entry file\", \"index.ts\")\n .action(async (options) => {\n const projectPath = path.resolve(options.path);\n\n try {\n console.log(chalk.blue(\"Generating tool registry types...\"));\n const success = await generateToolRegistryTypesForServer(\n projectPath,\n options.server\n );\n if (success) {\n console.log(\n chalk.green(\"✓ Tool registry types generated successfully\")\n );\n } else {\n console.log(chalk.yellow(\"⚠ Tool registry type generation had errors\"));\n }\n process.exit(0);\n } catch (error) {\n console.error(\n chalk.red(\"Failed to generate types:\"),\n error instanceof Error ? error.message : String(error)\n );\n if (error instanceof Error && error.stack) {\n console.error(chalk.gray(error.stack));\n }\n process.exit(1);\n }\n });\n\nprogram.hook(\"preAction\", async (_thisCommand, actionCommand) => {\n const projectPath = actionCommand.opts().path as string | undefined;\n await notifyIfUpdateAvailable(projectPath);\n});\n\nprogram.parse();\n","import process from 'node:process';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport {\n\tisWsl,\n\tpowerShellPath,\n\tconvertWslPathToWindows,\n\tcanAccessPowerShell,\n\twslDefaultBrowser,\n} from 'wsl-utils';\nimport {executePowerShell} from 'powershell-utils';\nimport defineLazyProperty from 'define-lazy-prop';\nimport defaultBrowser, {_windowsBrowserProgIdMap} from 'default-browser';\nimport isInsideContainer from 'is-inside-container';\nimport isInSsh from 'is-in-ssh';\n\nconst fallbackAttemptSymbol = Symbol('fallbackAttempt');\n\n// Path to included `xdg-open`.\nconst __dirname = import.meta.url ? path.dirname(fileURLToPath(import.meta.url)) : '';\nconst localXdgOpenPath = path.join(__dirname, 'xdg-open');\n\nconst {platform, arch} = process;\n\nconst tryEachApp = async (apps, opener) => {\n\tif (apps.length === 0) {\n\t\t// No app was provided\n\t\treturn;\n\t}\n\n\tconst errors = [];\n\n\tfor (const app of apps) {\n\t\ttry {\n\t\t\treturn await opener(app); // eslint-disable-line no-await-in-loop\n\t\t} catch (error) {\n\t\t\terrors.push(error);\n\t\t}\n\t}\n\n\tthrow new AggregateError(errors, 'Failed to open in all supported apps');\n};\n\n// eslint-disable-next-line complexity\nconst baseOpen = async options => {\n\toptions = {\n\t\twait: false,\n\t\tbackground: false,\n\t\tnewInstance: false,\n\t\tallowNonzeroExitCode: false,\n\t\t...options,\n\t};\n\n\tconst isFallbackAttempt = options[fallbackAttemptSymbol] === true;\n\tdelete options[fallbackAttemptSymbol];\n\n\tif (Array.isArray(options.app)) {\n\t\treturn tryEachApp(options.app, singleApp => baseOpen({\n\t\t\t...options,\n\t\t\tapp: singleApp,\n\t\t\t[fallbackAttemptSymbol]: true,\n\t\t}));\n\t}\n\n\tlet {name: app, arguments: appArguments = []} = options.app ?? {};\n\tappArguments = [...appArguments];\n\n\tif (Array.isArray(app)) {\n\t\treturn tryEachApp(app, appName => baseOpen({\n\t\t\t...options,\n\t\t\tapp: {\n\t\t\t\tname: appName,\n\t\t\t\targuments: appArguments,\n\t\t\t},\n\t\t\t[fallbackAttemptSymbol]: true,\n\t\t}));\n\t}\n\n\tif (app === 'browser' || app === 'browserPrivate') {\n\t\t// IDs from default-browser for macOS and windows are the same.\n\t\t// IDs are lowercased to increase chances of a match.\n\t\tconst ids = {\n\t\t\t'com.google.chrome': 'chrome',\n\t\t\t'google-chrome.desktop': 'chrome',\n\t\t\t'com.brave.browser': 'brave',\n\t\t\t'org.mozilla.firefox': 'firefox',\n\t\t\t'firefox.desktop': 'firefox',\n\t\t\t'com.microsoft.msedge': 'edge',\n\t\t\t'com.microsoft.edge': 'edge',\n\t\t\t'com.microsoft.edgemac': 'edge',\n\t\t\t'microsoft-edge.desktop': 'edge',\n\t\t\t'com.apple.safari': 'safari',\n\t\t};\n\n\t\t// Incognito flags for each browser in `apps`.\n\t\tconst flags = {\n\t\t\tchrome: '--incognito',\n\t\t\tbrave: '--incognito',\n\t\t\tfirefox: '--private-window',\n\t\t\tedge: '--inPrivate',\n\t\t\t// Safari doesn't support private mode via command line\n\t\t};\n\n\t\tlet browser;\n\t\tif (isWsl) {\n\t\t\tconst progId = await wslDefaultBrowser();\n\t\t\tconst browserInfo = _windowsBrowserProgIdMap.get(progId);\n\t\t\tbrowser = browserInfo ?? {};\n\t\t} else {\n\t\t\tbrowser = await defaultBrowser();\n\t\t}\n\n\t\tif (browser.id in ids) {\n\t\t\tconst browserName = ids[browser.id.toLowerCase()];\n\n\t\t\tif (app === 'browserPrivate') {\n\t\t\t\t// Safari doesn't support private mode via command line\n\t\t\t\tif (browserName === 'safari') {\n\t\t\t\t\tthrow new Error('Safari doesn\\'t support opening in private mode via command line');\n\t\t\t\t}\n\n\t\t\t\tappArguments.push(flags[browserName]);\n\t\t\t}\n\n\t\t\treturn baseOpen({\n\t\t\t\t...options,\n\t\t\t\tapp: {\n\t\t\t\t\tname: apps[browserName],\n\t\t\t\t\targuments: appArguments,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tthrow new Error(`${browser.name} is not supported as a default browser`);\n\t}\n\n\tlet command;\n\tconst cliArguments = [];\n\tconst childProcessOptions = {};\n\n\t// Determine if we should use Windows/PowerShell behavior in WSL.\n\t// We only use Windows integration if PowerShell is actually accessible.\n\t// This allows the package to work in sandboxed WSL environments where Windows access is restricted.\n\tlet shouldUseWindowsInWsl = false;\n\tif (isWsl && !isInsideContainer() && !isInSsh && !app) {\n\t\tshouldUseWindowsInWsl = await canAccessPowerShell();\n\t}\n\n\tif (platform === 'darwin') {\n\t\tcommand = 'open';\n\n\t\tif (options.wait) {\n\t\t\tcliArguments.push('--wait-apps');\n\t\t}\n\n\t\tif (options.background) {\n\t\t\tcliArguments.push('--background');\n\t\t}\n\n\t\tif (options.newInstance) {\n\t\t\tcliArguments.push('--new');\n\t\t}\n\n\t\tif (app) {\n\t\t\tcliArguments.push('-a', app);\n\t\t}\n\t} else if (platform === 'win32' || shouldUseWindowsInWsl) {\n\t\tcommand = await powerShellPath();\n\n\t\tcliArguments.push(...executePowerShell.argumentsPrefix);\n\n\t\tif (!isWsl) {\n\t\t\tchildProcessOptions.windowsVerbatimArguments = true;\n\t\t}\n\n\t\t// Convert WSL Linux paths to Windows paths\n\t\tif (isWsl && options.target) {\n\t\t\toptions.target = await convertWslPathToWindows(options.target);\n\t\t}\n\n\t\t// Suppress PowerShell progress messages that are written to stderr\n\t\tconst encodedArguments = ['$ProgressPreference = \\'SilentlyContinue\\';', 'Start'];\n\n\t\tif (options.wait) {\n\t\t\tencodedArguments.push('-Wait');\n\t\t}\n\n\t\tif (app) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(app));\n\t\t\tif (options.target) {\n\t\t\t\tappArguments.push(options.target);\n\t\t\t}\n\t\t} else if (options.target) {\n\t\t\tencodedArguments.push(executePowerShell.escapeArgument(options.target));\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tappArguments = appArguments.map(argument => executePowerShell.escapeArgument(argument));\n\t\t\tencodedArguments.push('-ArgumentList', appArguments.join(','));\n\t\t}\n\n\t\t// Using Base64-encoded command, accepted by PowerShell, to allow special characters.\n\t\toptions.target = executePowerShell.encodeCommand(encodedArguments.join(' '));\n\n\t\tif (!options.wait) {\n\t\t\t// PowerShell will keep the parent process alive unless stdio is ignored.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t}\n\t} else {\n\t\tif (app) {\n\t\t\tcommand = app;\n\t\t} else {\n\t\t\t// When bundled by Webpack, there's no actual package file path and no local `xdg-open`.\n\t\t\tconst isBundled = !__dirname || __dirname === '/';\n\n\t\t\t// Check if local `xdg-open` exists and is executable.\n\t\t\tlet exeLocalXdgOpen = false;\n\t\t\ttry {\n\t\t\t\tawait fs.access(localXdgOpenPath, fsConstants.X_OK);\n\t\t\t\texeLocalXdgOpen = true;\n\t\t\t} catch {}\n\n\t\t\tconst useSystemXdgOpen = process.versions.electron\n\t\t\t\t?? (platform === 'android' || isBundled || !exeLocalXdgOpen);\n\t\t\tcommand = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;\n\t\t}\n\n\t\tif (appArguments.length > 0) {\n\t\t\tcliArguments.push(...appArguments);\n\t\t}\n\n\t\tif (!options.wait) {\n\t\t\t// `xdg-open` will block the process unless stdio is ignored\n\t\t\t// and it's detached from the parent even if it's unref'd.\n\t\t\tchildProcessOptions.stdio = 'ignore';\n\t\t\tchildProcessOptions.detached = true;\n\t\t}\n\t}\n\n\tif (platform === 'darwin' && appArguments.length > 0) {\n\t\tcliArguments.push('--args', ...appArguments);\n\t}\n\n\t// IMPORTANT: On macOS, the target MUST come AFTER '--args'.\n\t// When using --args, ALL following arguments are passed to the app.\n\t// Example: open -a \"chrome\" --args --incognito https://site.com\n\t// This passes BOTH --incognito AND https://site.com to Chrome.\n\t// Without this order, Chrome won't open in incognito. See #332.\n\tif (options.target) {\n\t\tcliArguments.push(options.target);\n\t}\n\n\tconst subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);\n\n\tif (options.wait) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\tif (!options.allowNonzeroExitCode && exitCode !== 0) {\n\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tresolve(subprocess);\n\t\t\t});\n\t\t});\n\t}\n\n\t// When we're in a fallback attempt, we need to detect launch failures before trying the next app.\n\t// Wait for the close event to check the exit code before unreffing.\n\t// The launcher (open/xdg-open/PowerShell) exits quickly (~10-30ms) even on success.\n\tif (isFallbackAttempt) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tsubprocess.once('error', reject);\n\n\t\t\tsubprocess.once('spawn', () => {\n\t\t\t\t// Keep error handler active for post-spawn errors\n\t\t\t\tsubprocess.once('close', exitCode => {\n\t\t\t\t\tsubprocess.off('error', reject);\n\n\t\t\t\t\tif (exitCode !== 0) {\n\t\t\t\t\t\treject(new Error(`Exited with code ${exitCode}`));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tsubprocess.unref();\n\t\t\t\t\tresolve(subprocess);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\n\tsubprocess.unref();\n\n\t// Handle spawn errors before the caller can attach listeners.\n\t// This prevents unhandled error events from crashing the process.\n\treturn new Promise((resolve, reject) => {\n\t\tsubprocess.once('error', reject);\n\n\t\t// Wait for the subprocess to spawn before resolving.\n\t\t// This ensures the process is established before the caller continues,\n\t\t// preventing issues when process.exit() is called immediately after.\n\t\tsubprocess.once('spawn', () => {\n\t\t\tsubprocess.off('error', reject);\n\t\t\tresolve(subprocess);\n\t\t});\n\t});\n};\n\nconst open = (target, options) => {\n\tif (typeof target !== 'string') {\n\t\tthrow new TypeError('Expected a `target`');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\ttarget,\n\t});\n};\n\nexport const openApp = (name, options) => {\n\tif (typeof name !== 'string' && !Array.isArray(name)) {\n\t\tthrow new TypeError('Expected a valid `name`');\n\t}\n\n\tconst {arguments: appArguments = []} = options ?? {};\n\tif (appArguments !== undefined && appArguments !== null && !Array.isArray(appArguments)) {\n\t\tthrow new TypeError('Expected `appArguments` as Array type');\n\t}\n\n\treturn baseOpen({\n\t\t...options,\n\t\tapp: {\n\t\t\tname,\n\t\t\targuments: appArguments,\n\t\t},\n\t});\n};\n\nfunction detectArchBinary(binary) {\n\tif (typeof binary === 'string' || Array.isArray(binary)) {\n\t\treturn binary;\n\t}\n\n\tconst {[arch]: archBinary} = binary;\n\n\tif (!archBinary) {\n\t\tthrow new Error(`${arch} is not supported`);\n\t}\n\n\treturn archBinary;\n}\n\nfunction detectPlatformBinary({[platform]: platformBinary}, {wsl} = {}) {\n\tif (wsl && isWsl) {\n\t\treturn detectArchBinary(wsl);\n\t}\n\n\tif (!platformBinary) {\n\t\tthrow new Error(`${platform} is not supported`);\n\t}\n\n\treturn detectArchBinary(platformBinary);\n}\n\nexport const apps = {\n\tbrowser: 'browser',\n\tbrowserPrivate: 'browserPrivate',\n};\n\ndefineLazyProperty(apps, 'chrome', () => detectPlatformBinary({\n\tdarwin: 'google chrome',\n\twin32: 'chrome',\n\t// `chromium-browser` is the older deb package name used by Ubuntu/Debian before snap.\n\tlinux: ['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe',\n\t\tx64: ['/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'brave', () => detectPlatformBinary({\n\tdarwin: 'brave browser',\n\twin32: 'brave',\n\tlinux: ['brave-browser', 'brave'],\n}, {\n\twsl: {\n\t\tia32: '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe',\n\t\tx64: ['/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe', '/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe'],\n\t},\n}));\n\ndefineLazyProperty(apps, 'firefox', () => detectPlatformBinary({\n\tdarwin: 'firefox',\n\twin32: String.raw`C:\\Program Files\\Mozilla Firefox\\firefox.exe`,\n\tlinux: 'firefox',\n}, {\n\twsl: '/mnt/c/Program Files/Mozilla Firefox/firefox.exe',\n}));\n\ndefineLazyProperty(apps, 'edge', () => detectPlatformBinary({\n\tdarwin: 'microsoft edge',\n\twin32: 'msedge',\n\tlinux: ['microsoft-edge', 'microsoft-edge-dev'],\n}, {\n\twsl: '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe',\n}));\n\ndefineLazyProperty(apps, 'safari', () => detectPlatformBinary({\n\tdarwin: 'Safari',\n}));\n\nexport default open;\n","import {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\nimport isWsl from 'is-wsl';\nimport {powerShellPath as windowsPowerShellPath, executePowerShell} from 'powershell-utils';\nimport {parseMountPointFromConfig} from './utilities.js';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const wslDrivesMountPoint = (() => {\n\t// Default value for \"root\" param\n\t// according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config\n\tconst defaultMountPoint = '/mnt/';\n\n\tlet mountPoint;\n\n\treturn async function () {\n\t\tif (mountPoint) {\n\t\t\t// Return memoized mount point value\n\t\t\treturn mountPoint;\n\t\t}\n\n\t\tconst configFilePath = '/etc/wsl.conf';\n\n\t\tlet isConfigFileExists = false;\n\t\ttry {\n\t\t\tawait fs.access(configFilePath, fsConstants.F_OK);\n\t\t\tisConfigFileExists = true;\n\t\t} catch {}\n\n\t\tif (!isConfigFileExists) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tconst configContent = await fs.readFile(configFilePath, {encoding: 'utf8'});\n\t\tconst parsedMountPoint = parseMountPointFromConfig(configContent);\n\n\t\tif (parsedMountPoint === undefined) {\n\t\t\treturn defaultMountPoint;\n\t\t}\n\n\t\tmountPoint = parsedMountPoint;\n\t\tmountPoint = mountPoint.endsWith('/') ? mountPoint : `${mountPoint}/`;\n\n\t\treturn mountPoint;\n\t};\n})();\n\nexport const powerShellPathFromWsl = async () => {\n\tconst mountPoint = await wslDrivesMountPoint();\n\treturn `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`;\n};\n\nexport const powerShellPath = isWsl ? powerShellPathFromWsl : windowsPowerShellPath;\n\n// Cache for PowerShell accessibility check\nlet canAccessPowerShellPromise;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessPowerShellPromise ??= (async () => {\n\t\ttry {\n\t\t\tconst psPath = await powerShellPath();\n\t\t\tawait fs.access(psPath, fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\t// PowerShell is not accessible (either doesn't exist, no execute permission, or other error)\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessPowerShellPromise;\n};\n\nexport const wslDefaultBrowser = async () => {\n\tconst psPath = await powerShellPath();\n\tconst command = String.raw`(Get-ItemProperty -Path \"HKCU:\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice\").ProgId`;\n\n\tconst {stdout} = await executePowerShell(command, {powerShellPath: psPath});\n\n\treturn stdout.trim();\n};\n\nexport const convertWslPathToWindows = async path => {\n\t// Don't convert URLs\n\tif (/^[a-z]+:\\/\\//i.test(path)) {\n\t\treturn path;\n\t}\n\n\ttry {\n\t\tconst {stdout} = await execFile('wslpath', ['-aw', path], {encoding: 'utf8'});\n\t\treturn stdout.trim();\n\t} catch {\n\t\t// If wslpath fails, return the original path\n\t\treturn path;\n\t}\n};\n\nexport {default as isWsl} from 'is-wsl';\n","import process from 'node:process';\nimport os from 'node:os';\nimport fs from 'node:fs';\nimport isInsideContainer from 'is-inside-container';\n\nconst isWsl = () => {\n\tif (process.platform !== 'linux') {\n\t\treturn false;\n\t}\n\n\tif (os.release().toLowerCase().includes('microsoft')) {\n\t\tif (isInsideContainer()) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\ttry {\n\t\treturn fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft')\n\t\t\t? !isInsideContainer() : false;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default process.env.__IS_WSL_TEST__ ? isWsl : isWsl();\n","import fs from 'node:fs';\nimport isDocker from 'is-docker';\n\nlet cachedResult;\n\n// Podman detection\nconst hasContainerEnv = () => {\n\ttry {\n\t\tfs.statSync('/run/.containerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n\nexport default function isInsideContainer() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (cachedResult === undefined) {\n\t\tcachedResult = hasContainerEnv() || isDocker();\n\t}\n\n\treturn cachedResult;\n}\n","import fs from 'node:fs';\n\nlet isDockerCached;\n\nfunction hasDockerEnv() {\n\ttry {\n\t\tfs.statSync('/.dockerenv');\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction hasDockerCGroup() {\n\ttry {\n\t\treturn fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport default function isDocker() {\n\t// TODO: Use `??=` when targeting Node.js 16.\n\tif (isDockerCached === undefined) {\n\t\tisDockerCached = hasDockerEnv() || hasDockerCGroup();\n\t}\n\n\treturn isDockerCached;\n}\n","import process from 'node:process';\nimport {Buffer} from 'node:buffer';\nimport {promisify} from 'node:util';\nimport childProcess from 'node:child_process';\nimport fs, {constants as fsConstants} from 'node:fs/promises';\n\nconst execFile = promisify(childProcess.execFile);\n\nexport const powerShellPath = () => `${process.env.SYSTEMROOT || process.env.windir || String.raw`C:\\Windows`}\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe`;\n\n// Cache for PowerShell accessibility check\nlet canAccessCache;\n\nexport const canAccessPowerShell = async () => {\n\tcanAccessCache ??= (async () => {\n\t\ttry {\n\t\t\tawait fs.access(powerShellPath(), fsConstants.X_OK);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t})();\n\n\treturn canAccessCache;\n};\n\nexport const executePowerShell = async (command, options = {}) => {\n\tconst {\n\t\tpowerShellPath: psPath,\n\t\t...execFileOptions\n\t} = options;\n\n\tconst encodedCommand = executePowerShell.encodeCommand(command);\n\n\treturn execFile(\n\t\tpsPath ?? powerShellPath(),\n\t\t[\n\t\t\t...executePowerShell.argumentsPrefix,\n\t\t\tencodedCommand,\n\t\t],\n\t\t{\n\t\t\tencoding: 'utf8',\n\t\t\t...execFileOptions,\n\t\t},\n\t);\n};\n\nexecutePowerShell.argumentsPrefix = [\n\t'-NoProfile',\n\t'-NonInteractive',\n\t'-ExecutionPolicy',\n\t'Bypass',\n\t'-EncodedCommand',\n];\n\nexecutePowerShell.encodeCommand = command => Buffer.from(command, 'utf16le').toString('base64');\n\nexecutePowerShell.escapeArgument = value => `'${String(value).replaceAll('\\'', '\\'\\'')}'`;\n","export function parseMountPointFromConfig(content) {\n\tfor (const line of content.split('\\n')) {\n\t\t// Skip comment lines\n\t\tif (/^\\s*#/.test(line)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Match root at start of line (after optional whitespace)\n\t\tconst match = /^\\s*root\\s*=\\s*(?<mountPoint>\"[^\"]*\"|'[^']*'|[^#]*)/.exec(line);\n\t\tif (!match) {\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn match.groups.mountPoint\n\t\t\t.trim()\n\t\t\t// Strip surrounding quotes\n\t\t\t.replaceAll(/^[\"']|[\"']$/g, '');\n\t}\n}\n","export default function defineLazyProperty(object, propertyName, valueGetter) {\n\tconst define = value => Object.defineProperty(object, propertyName, {value, enumerable: true, writable: true});\n\n\tObject.defineProperty(object, propertyName, {\n\t\tconfigurable: true,\n\t\tenumerable: true,\n\t\tget() {\n\t\t\tconst result = valueGetter();\n\t\t\tdefine(result);\n\t\t\treturn result;\n\t\t},\n\t\tset(value) {\n\t\t\tdefine(value);\n\t\t}\n\t});\n\n\treturn object;\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\nimport defaultBrowserId from 'default-browser-id';\nimport bundleName from 'bundle-name';\nimport windows from './windows.js';\n\nexport {_windowsBrowserProgIdMap} from './windows.js';\n\nconst execFileAsync = promisify(execFile);\n\n// Inlined: https://github.com/sindresorhus/titleize/blob/main/index.js\nconst titleize = string => string.toLowerCase().replaceAll(/(?:^|\\s|-)\\S/g, x => x.toUpperCase());\n\nexport default async function defaultBrowser() {\n\tif (process.platform === 'darwin') {\n\t\tconst id = await defaultBrowserId();\n\t\tconst name = await bundleName(id);\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'linux') {\n\t\tconst {stdout} = await execFileAsync('xdg-mime', ['query', 'default', 'x-scheme-handler/http']);\n\t\tconst id = stdout.trim();\n\t\tconst name = titleize(id.replace(/.desktop$/, '').replace('-', ' '));\n\t\treturn {name, id};\n\t}\n\n\tif (process.platform === 'win32') {\n\t\treturn windows();\n\t}\n\n\tthrow new Error('Only macOS, Linux, and Windows are supported');\n}\n","import {promisify} from 'node:util';\nimport process from 'node:process';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport default async function defaultBrowserId() {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst {stdout} = await execFileAsync('defaults', ['read', 'com.apple.LaunchServices/com.apple.launchservices.secure', 'LSHandlers']);\n\n\t// `(?!-)` is to prevent matching `LSHandlerRoleAll = \"-\";`.\n\tconst match = /LSHandlerRoleAll = \"(?!-)(?<id>[^\"]+?)\";\\s+?LSHandlerURLScheme = (?:http|https);/.exec(stdout);\n\n\tconst browserId = match?.groups.id ?? 'com.apple.Safari';\n\n\t// Correct the case for Safari's bundle identifier\n\tif (browserId === 'com.apple.safari') {\n\t\treturn 'com.apple.Safari';\n\t}\n\n\treturn browserId;\n}\n","import process from 'node:process';\nimport {promisify} from 'node:util';\nimport {execFile, execFileSync} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\nexport async function runAppleScript(script, {humanReadableOutput = true, signal} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst execOptions = {};\n\tif (signal) {\n\t\texecOptions.signal = signal;\n\t}\n\n\tconst {stdout} = await execFileAsync('osascript', ['-e', script, outputArguments], execOptions);\n\treturn stdout.trim();\n}\n\nexport function runAppleScriptSync(script, {humanReadableOutput = true} = {}) {\n\tif (process.platform !== 'darwin') {\n\t\tthrow new Error('macOS only');\n\t}\n\n\tconst outputArguments = humanReadableOutput ? [] : ['-ss'];\n\n\tconst stdout = execFileSync('osascript', ['-e', script, ...outputArguments], {\n\t\tencoding: 'utf8',\n\t\tstdio: ['ignore', 'pipe', 'ignore'],\n\t\ttimeout: 500,\n\t});\n\n\treturn stdout.trim();\n}\n","import {runAppleScript} from 'run-applescript';\n\nexport default async function bundleName(bundleId) {\n\treturn runAppleScript(`tell application \"Finder\" to set app_path to application file id \"${bundleId}\" as string\\ntell application \"System Events\" to get value of property list item \"CFBundleName\" of property list file (app_path & \":Contents:Info.plist\")`);\n}\n","import {promisify} from 'node:util';\nimport {execFile} from 'node:child_process';\n\nconst execFileAsync = promisify(execFile);\n\n// TODO: Fix the casing of bundle identifiers in the next major version.\n\n// Windows doesn't have browser IDs in the same way macOS/Linux does so we give fake\n// ones that look real and match the macOS/Linux versions for cross-platform apps.\nconst windowsBrowserProgIds = {\n\tMSEdgeHTM: {name: 'Edge', id: 'com.microsoft.edge'}, // The missing `L` is correct.\n\tMSEdgeBHTML: {name: 'Edge Beta', id: 'com.microsoft.edge.beta'},\n\tMSEdgeDHTML: {name: 'Edge Dev', id: 'com.microsoft.edge.dev'},\n\tAppXq0fevzme2pys62n3e0fbqa7peapykr8v: {name: 'Edge', id: 'com.microsoft.edge.old'},\n\tChromeHTML: {name: 'Chrome', id: 'com.google.chrome'},\n\tChromeBHTML: {name: 'Chrome Beta', id: 'com.google.chrome.beta'},\n\tChromeDHTML: {name: 'Chrome Dev', id: 'com.google.chrome.dev'},\n\tChromiumHTM: {name: 'Chromium', id: 'org.chromium.Chromium'},\n\tBraveHTML: {name: 'Brave', id: 'com.brave.Browser'},\n\tBraveBHTML: {name: 'Brave Beta', id: 'com.brave.Browser.beta'},\n\tBraveDHTML: {name: 'Brave Dev', id: 'com.brave.Browser.dev'},\n\tBraveSSHTM: {name: 'Brave Nightly', id: 'com.brave.Browser.nightly'},\n\tFirefoxURL: {name: 'Firefox', id: 'org.mozilla.firefox'},\n\tOperaStable: {name: 'Opera', id: 'com.operasoftware.Opera'},\n\tVivaldiHTM: {name: 'Vivaldi', id: 'com.vivaldi.Vivaldi'},\n\t'IE.HTTP': {name: 'Internet Explorer', id: 'com.microsoft.ie'},\n};\n\nexport const _windowsBrowserProgIdMap = new Map(Object.entries(windowsBrowserProgIds));\n\nexport class UnknownBrowserError extends Error {}\n\nexport default async function defaultBrowser(_execFileAsync = execFileAsync) {\n\tconst {stdout} = await _execFileAsync('reg', [\n\t\t'QUERY',\n\t\t' HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\Shell\\\\Associations\\\\UrlAssociations\\\\http\\\\UserChoice',\n\t\t'/v',\n\t\t'ProgId',\n\t]);\n\n\tconst match = /ProgId\\s*REG_SZ\\s*(?<id>\\S+)/.exec(stdout);\n\tif (!match) {\n\t\tthrow new UnknownBrowserError(`Cannot find Windows browser in stdout: ${JSON.stringify(stdout)}`);\n\t}\n\n\tconst {id} = match.groups;\n\n\t// Windows can append a hash suffix to ProgIds using a dot or hyphen\n\t// (e.g., `ChromeHTML.ABC123`, `FirefoxURL-6F193CCC56814779`).\n\t// Try exact match first, then try without the suffix.\n\tconst dotIndex = id.lastIndexOf('.');\n\tconst hyphenIndex = id.lastIndexOf('-');\n\tconst baseIdByDot = dotIndex === -1 ? undefined : id.slice(0, dotIndex);\n\tconst baseIdByHyphen = hyphenIndex === -1 ? undefined : id.slice(0, hyphenIndex);\n\n\treturn windowsBrowserProgIds[id] ?? windowsBrowserProgIds[baseIdByDot] ?? windowsBrowserProgIds[baseIdByHyphen] ?? {name: id, id};\n}\n","import process from 'node:process';\n\nconst isInSsh = Boolean(process.env.SSH_CONNECTION\n\t|| process.env.SSH_CLIENT\n\t|| process.env.SSH_TTY);\n\nexport default isInSsh;\n","import { promises as fs } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport interface McpConfig {\n apiKey?: string;\n apiUrl?: string;\n orgId?: string;\n orgName?: string;\n orgSlug?: string;\n /** @deprecated Use orgId. Read for backward compat with old config files. */\n profileId?: string;\n /** @deprecated Use orgName. */\n profileName?: string;\n /** @deprecated Use orgSlug. */\n profileSlug?: string;\n}\n\nconst CONFIG_DIR = path.join(os.homedir(), \".mcp-use\");\nconst CONFIG_FILE = path.join(CONFIG_DIR, \"config.json\");\n\n// Backend API URL (where /api/v1 endpoints are)\nconst DEFAULT_API_URL = process.env.MCP_API_URL\n ? process.env.MCP_API_URL.replace(/\\/api\\/v1$/, \"\") + \"/api/v1\" // Ensure /api/v1 suffix\n : \"https://cloud.mcp-use.com/api/v1\";\n\n// Frontend/Web URL (where /auth/cli page is)\nconst DEFAULT_WEB_URL = process.env.MCP_WEB_URL\n ? process.env.MCP_WEB_URL\n : \"https://manufact.com\";\n\n/**\n * Ensure config directory exists\n */\nasync function ensureConfigDir(): Promise<void> {\n try {\n await fs.mkdir(CONFIG_DIR, { recursive: true });\n } catch (error) {\n // Ignore error if directory already exists\n }\n}\n\n/**\n * Read config from disk, migrating legacy `profile*` keys to `org*`.\n */\nexport async function readConfig(): Promise<McpConfig> {\n try {\n const content = await fs.readFile(CONFIG_FILE, \"utf-8\");\n const raw = JSON.parse(content) as McpConfig;\n return {\n ...raw,\n orgId: raw.orgId ?? raw.profileId,\n orgName: raw.orgName ?? raw.profileName,\n orgSlug: raw.orgSlug ?? raw.profileSlug,\n };\n } catch (error) {\n return {};\n }\n}\n\n/**\n * Write config to disk. Persists only the new `org*` keys and removes legacy `profile*` keys.\n */\nexport async function writeConfig(config: McpConfig): Promise<void> {\n await ensureConfigDir();\n const { profileId: _a, profileName: _b, profileSlug: _c, ...clean } = config;\n await fs.writeFile(CONFIG_FILE, JSON.stringify(clean, null, 2), \"utf-8\");\n}\n\n/**\n * Delete config file\n */\nexport async function deleteConfig(): Promise<void> {\n try {\n await fs.unlink(CONFIG_FILE);\n } catch (error) {\n // Ignore error if file doesn't exist\n }\n}\n\n/**\n * Get API URL from config or use default\n */\nexport async function getApiUrl(): Promise<string> {\n const config = await readConfig();\n return config.apiUrl || DEFAULT_API_URL;\n}\n\n/**\n * Get API key from config\n */\nexport async function getApiKey(): Promise<string | null> {\n const config = await readConfig();\n return config.apiKey || null;\n}\n\n/**\n * Check if user is logged in\n */\nexport async function isLoggedIn(): Promise<boolean> {\n const apiKey = await getApiKey();\n return !!apiKey;\n}\n\n/**\n * Get the stored organization ID from config\n */\nexport async function getOrgId(): Promise<string | null> {\n const config = await readConfig();\n return config.orgId || null;\n}\n\n/**\n * Get web URL (for browser-based auth)\n * This is the frontend URL where /device verification page lives\n */\nexport async function getWebUrl(): Promise<string> {\n return DEFAULT_WEB_URL;\n}\n\n/**\n * Derive the auth base URL from the API URL.\n * Better Auth endpoints live at /api/auth/*, not under /api/v1/.\n * e.g. \"http://localhost:8000/api/v1\" -> \"http://localhost:8000\"\n */\nexport async function getAuthBaseUrl(): Promise<string> {\n const apiUrl = await getApiUrl();\n return apiUrl.replace(/\\/api\\/v1$/, \"\");\n}\n","import { getApiKey, getApiUrl, getAuthBaseUrl, getOrgId } from \"./config.js\";\n\nexport class GitHubAuthRequiredError extends Error {\n readonly authorizeUrl: string;\n constructor(message: string, authorizeUrl: string) {\n super(message);\n this.name = \"GitHubAuthRequiredError\";\n this.authorizeUrl = authorizeUrl;\n }\n}\n\n/** Thrown when the API returns 401 (invalid or expired API key for this backend). */\nexport class ApiUnauthorizedError extends Error {\n readonly status = 401 as const;\n constructor(\n message = \"Your session has expired or your API key is invalid.\"\n ) {\n super(message);\n this.name = \"ApiUnauthorizedError\";\n }\n}\n\nexport interface OrgInfo {\n id: string;\n name: string;\n slug: string | null;\n role: string;\n}\n\nexport interface AuthTestResponse {\n message: string;\n user_id: string;\n email: string;\n orgs: OrgInfo[];\n default_org_id: string | null;\n}\n\n/** Wire format returned by GET /test-auth (cli-compat route). */\ninterface AuthTestWireResponse {\n message: string;\n user_id: string;\n email: string;\n profiles: Array<{\n id: string;\n profile_name: string;\n slug: string | null;\n role: string;\n }>;\n default_profile_id: string | null;\n}\n\n// ── Server creation ────────────────────────────────────────────────\n\nexport interface CreateServerBody {\n type: \"github\";\n organizationId: string;\n installationId: string;\n name: string;\n repoFullName: string;\n branch?: string;\n rootDir?: string;\n port?: number;\n buildCommand?: string;\n startCommand?: string;\n env?: Record<string, string>;\n description?: string;\n tags?: string[];\n region?: string;\n}\n\nexport interface CreateServerResponse {\n server: { id: string; slug: string | null };\n deploymentId: string | null;\n}\n\n/** Connected GitHub repository (subset of OpenAPI server payload). */\nexport interface CloudServerConnectedRepository {\n id: string;\n repoFullName: string;\n productionBranch: string;\n isActive: boolean;\n userId: string;\n githubInstallationId: string;\n createdAt: string;\n updatedAt: string;\n}\n\n/** Server record from `GET /servers` or `GET /servers/{id}` (fields used by CLI). */\nexport interface CloudServer {\n id: string;\n slug: string | null;\n organizationId: string;\n userId: string | null;\n connectedRepositoryId: string;\n connectedRepository?: CloudServerConnectedRepository;\n name: string | null;\n description: string | null;\n tags?: string[];\n config?: unknown;\n createdAt: string;\n updatedAt: string;\n displayPreferences?: { icon?: string; color?: string };\n status: string;\n latestDeploymentStatus: string | null;\n activeDeploymentId: string | null;\n previousDeploymentId: string | null;\n region: string;\n providerRegion?: string;\n runProvider?: string;\n buildProvider?: string;\n /** Public MCP endpoint when provisioned (preferred over synthesizing from id/slug). */\n mcpUrl?: string | null;\n domains?: unknown[];\n deployments?: unknown[];\n _count?: { deployments?: number };\n}\n\n// ── Deployments ────────────────────────────────────────────────────\n\nexport interface CreateDeploymentInput {\n serverId: string;\n name?: string;\n branch?: string;\n commitSha?: string;\n commitMessage?: string;\n trigger?: \"manual\" | \"webhook\" | \"redeploy\" | \"rollback\";\n prNumber?: number;\n}\n\nexport interface CreateDeploymentResponse {\n id: string;\n}\n\nexport interface Deployment {\n id: string;\n userId: string;\n name: string;\n source: unknown;\n status: \"pending\" | \"building\" | \"running\" | \"stopped\" | \"failed\";\n port: number | null;\n healthCheckPath: string | null;\n provider: string;\n appName: string;\n error: string | null;\n gitCommitSha: string | null;\n gitBranch: string | null;\n gitCommitMessage: string | null;\n isProductionDeployment: boolean | null;\n deploymentTrigger: string | null;\n serverId: string | null;\n createdAt: string;\n updatedAt: string;\n buildStartedAt: string | null;\n buildCompletedAt: string | null;\n archivedAt: string | null;\n mcpUrl?: string;\n}\n\nexport interface BuildLogsResponse {\n logs: string;\n offset: number;\n totalLength: number;\n status: string;\n}\n\n// ── GitHub ──────────────────────────────────────────────────────────\n\nexport interface GitHubInstallation {\n id: string;\n installation_id: string;\n account_login: string;\n account_type: string;\n}\n\nexport interface GitHubConnectionStatus {\n is_connected: boolean;\n installations?: GitHubInstallation[];\n}\n\nexport interface GitHubRepo {\n id: number;\n name: string;\n full_name: string;\n private: boolean;\n owner: {\n login: string;\n };\n}\n\nexport interface GitHubReposResponse {\n user: {\n login: string;\n id: number;\n avatar_url: string;\n };\n repos: GitHubRepo[];\n}\n\n// ── API client ─────────────────────────────────────────────────────\n\nexport class McpUseAPI {\n private baseUrl: string;\n private apiKey: string | undefined;\n private orgId: string | undefined;\n\n constructor(baseUrl?: string, apiKey?: string, orgId?: string) {\n this.baseUrl = baseUrl || \"\";\n this.apiKey = apiKey;\n this.orgId = orgId;\n }\n\n static async create(): Promise<McpUseAPI> {\n const baseUrl = await getApiUrl();\n const apiKey = await getApiKey();\n const orgId = await getOrgId();\n return new McpUseAPI(baseUrl, apiKey ?? undefined, orgId ?? undefined);\n }\n\n setOrgId(orgId: string): void {\n this.orgId = orgId;\n }\n\n private async request<T>(\n endpoint: string,\n options: {\n method?: string;\n headers?: Record<string, string>;\n body?: string;\n timeout?: number;\n } = {}\n ): Promise<T> {\n const url = `${this.baseUrl}${endpoint}`;\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...((options.headers as Record<string, string>) || {}),\n };\n\n if (this.apiKey) {\n headers[\"x-api-key\"] = this.apiKey;\n }\n\n if (this.orgId) {\n headers[\"x-profile-id\"] = this.orgId;\n }\n\n const timeout = options.timeout || 30000;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const response = await fetch(url, {\n ...options,\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (response.status === 401) {\n throw new ApiUnauthorizedError();\n }\n\n if (!response.ok) {\n const errorText = await response.text();\n try {\n const parsed = JSON.parse(errorText);\n if (parsed.code === \"GITHUB_AUTH_REQUIRED\" && parsed.authorizeUrl) {\n throw new GitHubAuthRequiredError(\n parsed.error || \"GitHub authorization required\",\n parsed.authorizeUrl\n );\n }\n } catch (e) {\n if (e instanceof GitHubAuthRequiredError) throw e;\n }\n throw new Error(`API request failed: ${response.status} ${errorText}`);\n }\n\n return response.json() as Promise<T>;\n } catch (error: any) {\n clearTimeout(timeoutId);\n if (error.name === \"AbortError\") {\n throw new Error(`Request timeout after ${timeout / 1000}s.`);\n }\n throw error;\n }\n }\n\n /**\n * Create a persistent API key using a Better Auth access token.\n */\n async createApiKeyWithAccessToken(\n accessToken: string,\n name: string = \"CLI\"\n ): Promise<{ key: string }> {\n const authBase = await getAuthBaseUrl();\n const url = `${authBase}/api/auth/api-key/create`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${accessToken}`,\n },\n body: JSON.stringify({ name, prefix: \"mcp_\" }),\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to create API key: ${response.status} ${error}`);\n }\n\n return response.json() as Promise<{ key: string }>;\n }\n\n // ── Auth ────────────────────────────────────────────────────────\n\n async testAuth(): Promise<AuthTestResponse> {\n const wire = await this.request<AuthTestWireResponse>(\"/test-auth\");\n return {\n message: wire.message,\n user_id: wire.user_id,\n email: wire.email,\n default_org_id: wire.default_profile_id,\n orgs: (wire.profiles ?? []).map((p) => ({\n id: p.id,\n name: p.profile_name,\n slug: p.slug,\n role: p.role,\n })),\n };\n }\n\n async setDefaultOrg(orgId: string): Promise<void> {\n await this.request(`/organizations/${orgId}/set-default`, {\n method: \"POST\",\n });\n }\n\n // ── Organization ID resolution ──────────────────────────────────\n\n async resolveOrganizationId(): Promise<string> {\n if (this.orgId) return this.orgId;\n const auth = await this.testAuth();\n const id = auth.default_org_id;\n if (!id) {\n throw new Error(\n \"No organization set. Run `mcp-use org switch` or use --org to specify one.\"\n );\n }\n return id;\n }\n\n // ── Servers ─────────────────────────────────────────────────────\n\n async createServer(body: CreateServerBody): Promise<CreateServerResponse> {\n return this.request<CreateServerResponse>(\"/servers\", {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n }\n\n async listServers(params?: {\n organizationId?: string;\n limit?: number;\n skip?: number;\n sort?: string;\n }): Promise<CloudServer[]> {\n const search = new URLSearchParams();\n if (params?.organizationId) {\n search.set(\"organizationId\", params.organizationId);\n }\n if (params?.limit != null) {\n search.set(\"limit\", String(params.limit));\n }\n if (params?.skip != null) {\n search.set(\"skip\", String(params.skip));\n }\n if (params?.sort) {\n search.set(\"sort\", params.sort);\n }\n const q = search.toString();\n return this.request<CloudServer[]>(`/servers${q ? `?${q}` : \"\"}`);\n }\n\n async getServer(idOrSlug: string): Promise<CloudServer> {\n const path = encodeURIComponent(idOrSlug);\n return this.request<CloudServer>(`/servers/${path}`);\n }\n\n async deleteServer(id: string): Promise<void> {\n await this.request<{ success: boolean }>(\n `/servers/${encodeURIComponent(id)}`,\n {\n method: \"DELETE\",\n }\n );\n }\n\n // ── Deployments ─────────────────────────────────────────────────\n\n async createDeployment(\n input: CreateDeploymentInput\n ): Promise<CreateDeploymentResponse> {\n return this.request<CreateDeploymentResponse>(\"/deployments\", {\n method: \"POST\",\n body: JSON.stringify(input),\n });\n }\n\n async getDeployment(deploymentId: string): Promise<Deployment> {\n return this.request<Deployment>(`/deployments/${deploymentId}`);\n }\n\n async listDeployments(): Promise<Deployment[]> {\n return this.request<Deployment[]>(\"/deployments\");\n }\n\n async deleteDeployment(deploymentId: string): Promise<void> {\n await this.request(`/deployments/${deploymentId}`, {\n method: \"DELETE\",\n });\n }\n\n async stopDeployment(deploymentId: string): Promise<void> {\n await this.request(`/deployments/${deploymentId}/stop`, {\n method: \"POST\",\n });\n }\n\n async getDeploymentLogs(\n deploymentId: string,\n lines: number = 500\n ): Promise<string> {\n const resp = await this.request<{ logs: string }>(\n `/deployments/${deploymentId}/logs?lines=${lines}`,\n { timeout: 60000 }\n );\n return resp.logs;\n }\n\n async getDeploymentBuildLogs(\n deploymentId: string,\n offset: number = 0\n ): Promise<BuildLogsResponse> {\n return this.request<BuildLogsResponse>(\n `/deployments/${deploymentId}/build-logs?offset=${offset}`,\n { timeout: 60000 }\n );\n }\n\n // ── GitHub ──────────────────────────────────────────────────────\n\n async getGitHubConnectionStatus(): Promise<GitHubConnectionStatus> {\n const orgId = await this.resolveOrganizationId();\n const resp = await this.request<{\n installations: Array<{\n id: string;\n installationId: string;\n account: {\n login: string;\n avatar_url: string | null;\n type: string;\n } | null;\n }>;\n }>(`/github/installations?organizationId=${orgId}`);\n return {\n is_connected: resp.installations.length > 0,\n installations: resp.installations.map((i) => ({\n id: i.id,\n installation_id: i.installationId,\n account_login: i.account?.login ?? \"\",\n account_type: i.account?.type ?? \"User\",\n })),\n };\n }\n\n async getGitHubRepos(_refresh?: boolean): Promise<GitHubReposResponse> {\n const orgId = await this.resolveOrganizationId();\n const installResp = await this.request<{\n installations: Array<{\n id: string;\n installationId: string;\n account: {\n login: string;\n avatar_url: string | null;\n type: string;\n } | null;\n }>;\n }>(`/github/installations?organizationId=${orgId}`);\n\n if (installResp.installations.length === 0) {\n return { user: { login: \"\", id: 0, avatar_url: \"\" }, repos: [] };\n }\n\n const inst = installResp.installations[0];\n const reposResp = await this.request<{\n repos: Array<{\n id: number;\n name: string;\n fullName: string;\n private: boolean;\n ownerAvatarUrl: string | null;\n }>;\n }>(`/github/installations/${inst.installationId}/repos`);\n\n return {\n user: {\n login: inst.account?.login ?? \"\",\n id: 0,\n avatar_url: inst.account?.avatar_url ?? \"\",\n },\n repos: reposResp.repos.map((r) => ({\n id: r.id,\n name: r.name,\n full_name: r.fullName,\n private: r.private,\n owner: { login: r.fullName.split(\"/\")[0] ?? \"\" },\n })),\n };\n }\n\n async getGitHubAppName(): Promise<string> {\n if (process.env.MCP_GITHUB_APP_NAME) return process.env.MCP_GITHUB_APP_NAME;\n if (this.baseUrl.includes(\"localhost\")) return \"mcp-use-local\";\n if (this.baseUrl.includes(\".dev.\")) return \"mcp-use-dev\";\n return \"mcp-use\";\n }\n\n /**\n * Returns the GitHub numeric installation ID (not the DB UUID) for the org.\n * Used for building direct installation settings URLs.\n */\n async getGitHubInstallationId(): Promise<string | null> {\n const status = await this.getGitHubConnectionStatus();\n return status.installations?.[0]?.installation_id ?? null;\n }\n\n async createGitHubRepo(opts: {\n installationId: string;\n name: string;\n private?: boolean;\n org?: string;\n }): Promise<{ fullName: string; cloneUrl: string; htmlUrl: string }> {\n return this.request<{\n fullName: string;\n cloneUrl: string;\n htmlUrl: string;\n }>(`/github/installations/${opts.installationId}/repos`, {\n method: \"POST\",\n body: JSON.stringify({\n name: opts.name,\n private: opts.private ?? true,\n org: opts.org,\n }),\n });\n }\n\n async getGitHubOAuthUrl(): Promise<{ url: string; state: string }> {\n return this.request<{ url: string; state: string }>(\n \"/github/oauth/authorize\"\n );\n }\n\n async exchangeGitHubOAuthToken(\n code: string\n ): Promise<{ success: boolean; installationsUpdated: number }> {\n return this.request<{ success: boolean; installationsUpdated: number }>(\n \"/github/oauth/token\",\n {\n method: \"POST\",\n body: JSON.stringify({ code }),\n }\n );\n }\n}\n","import chalk from \"chalk\";\nimport open from \"open\";\nimport { McpUseAPI } from \"../utils/api.js\";\nimport {\n deleteConfig,\n getApiKey,\n getAuthBaseUrl,\n isLoggedIn,\n readConfig,\n writeConfig,\n} from \"../utils/config.js\";\nimport type { OrgInfo } from \"../utils/api.js\";\n\nconst DEVICE_CLIENT_ID = \"mcp-use-cli\";\nconst DEVICE_POLL_TIMEOUT = 1800000; // 30 minutes\n\ninterface DeviceCodeResponse {\n device_code: string;\n user_code: string;\n verification_uri: string;\n verification_uri_complete?: string;\n expires_in: number;\n interval: number;\n}\n\ninterface DeviceTokenResponse {\n access_token?: string;\n error?: string;\n error_description?: string;\n}\n\nasync function requestDeviceCode(\n authBaseUrl: string\n): Promise<DeviceCodeResponse> {\n const url = `${authBaseUrl}/api/auth/device/code`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n client_id: DEVICE_CLIENT_ID,\n scope: \"openid profile email\",\n }),\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(\n `Failed to request device code: ${response.status} ${error}`\n );\n }\n\n return response.json() as Promise<DeviceCodeResponse>;\n}\n\nasync function pollForDeviceToken(\n authBaseUrl: string,\n deviceCode: string,\n intervalSeconds: number\n): Promise<string> {\n let pollingInterval = intervalSeconds;\n const deadline = Date.now() + DEVICE_POLL_TIMEOUT;\n\n while (Date.now() < deadline) {\n const delayMs = pollingInterval * 1000;\n await new Promise((r) => setTimeout(r, delayMs));\n\n const url = `${authBaseUrl}/api/auth/device/token`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n grant_type: \"urn:ietf:params:oauth:grant-type:device_code\",\n device_code: deviceCode,\n client_id: DEVICE_CLIENT_ID,\n }),\n });\n\n const data = (await response.json()) as DeviceTokenResponse;\n\n if (data.access_token) {\n return data.access_token;\n }\n\n if (data.error) {\n switch (data.error) {\n case \"authorization_pending\":\n break;\n case \"slow_down\":\n pollingInterval += 5;\n break;\n case \"access_denied\":\n throw new Error(\"Authorization was denied by the user.\");\n case \"expired_token\":\n throw new Error(\"The device code has expired. Please try again.\");\n default:\n throw new Error(\n data.error_description || `Device auth error: ${data.error}`\n );\n }\n }\n }\n\n throw new Error(\"Login timed out. Please try again.\");\n}\n\n/**\n * Prompt user to pick an organization from a numbered list.\n */\nexport async function promptOrgSelection(\n orgs: OrgInfo[],\n defaultOrgId?: string | null\n): Promise<OrgInfo | null> {\n if (orgs.length === 0) return null;\n\n if (orgs.length === 1) {\n return orgs[0];\n }\n\n console.log(chalk.cyan.bold(\"\\n🏢 Select an organization:\\n\"));\n\n for (let i = 0; i < orgs.length; i++) {\n const o = orgs[i];\n const marker = o.id === defaultOrgId ? chalk.green(\" (current)\") : \"\";\n const slug = o.slug ? chalk.gray(` (${o.slug})`) : \"\";\n console.log(` ${chalk.white(`${i + 1}.`)} ${o.name}${slug}${marker}`);\n }\n\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n const defaultIdx = defaultOrgId\n ? orgs.findIndex((o) => o.id === defaultOrgId)\n : 0;\n const defaultDisplay = defaultIdx >= 0 ? defaultIdx + 1 : 1;\n\n rl.question(\n chalk.gray(`\\nEnter number [${defaultDisplay}]: `),\n (answer) => {\n rl.close();\n const trimmed = answer.trim();\n const idx = trimmed === \"\" ? defaultIdx : parseInt(trimmed, 10) - 1;\n if (idx >= 0 && idx < orgs.length) {\n resolve(orgs[idx]);\n } else {\n console.log(chalk.yellow(\"Invalid selection, using default.\"));\n resolve(orgs[defaultIdx >= 0 ? defaultIdx : 0]);\n }\n }\n );\n });\n}\n\n/**\n * Login command using OAuth 2.0 Device Authorization Grant (RFC 8628).\n */\nexport async function loginCommand(options?: {\n silent?: boolean;\n apiKey?: string;\n}): Promise<void> {\n try {\n const directKey = options?.apiKey || process.env.MCP_USE_API_KEY;\n if (directKey) {\n await writeConfig({ apiKey: directKey });\n if (!options?.silent) {\n console.log(chalk.green.bold(\"✓ API key saved.\"));\n try {\n const api = await McpUseAPI.create();\n const authInfo = await api.testAuth();\n console.log(chalk.gray(` Authenticated as ${authInfo.email}`));\n } catch {\n console.log(\n chalk.gray(\n \" (could not verify key — will be checked on next command)\"\n )\n );\n }\n }\n return;\n }\n\n if (await isLoggedIn()) {\n if (!options?.silent) {\n console.log(\n chalk.yellow(\n \"You are already logged in. Run 'npx mcp-use logout' first if you want to login with a different account.\"\n )\n );\n }\n return;\n }\n\n console.log(chalk.cyan.bold(\"Logging in to mcp-use cloud...\\n\"));\n\n const authBaseUrl = await getAuthBaseUrl();\n\n const deviceResp = await requestDeviceCode(authBaseUrl);\n const {\n device_code,\n user_code,\n verification_uri,\n verification_uri_complete,\n interval,\n } = deviceResp;\n\n const displayCode =\n user_code.length === 8\n ? `${user_code.slice(0, 4)}-${user_code.slice(4)}`\n : user_code;\n\n console.log(chalk.white(\" Visit: \") + chalk.cyan(verification_uri));\n console.log(chalk.white(\" Code: \") + chalk.bold.white(displayCode));\n console.log();\n\n const urlToOpen = verification_uri_complete || verification_uri;\n try {\n await open(urlToOpen);\n console.log(chalk.gray(\" Browser opened. Waiting for approval...\"));\n } catch {\n console.log(chalk.gray(\" Open the URL above in your browser.\"));\n }\n\n const accessToken = await pollForDeviceToken(\n authBaseUrl,\n device_code,\n interval || 5\n );\n\n console.log(chalk.gray(\"\\n Creating persistent API key...\"));\n\n const api = await McpUseAPI.create();\n const keyResp = await api.createApiKeyWithAccessToken(accessToken, \"CLI\");\n\n await writeConfig({ apiKey: keyResp.key });\n\n console.log(chalk.green.bold(\"\\n✓ Successfully logged in!\"));\n\n try {\n const freshApi = await McpUseAPI.create();\n const authInfo = await freshApi.testAuth();\n\n console.log(chalk.cyan.bold(\"\\nCurrent user:\\n\"));\n console.log(chalk.white(\" Email: \") + chalk.cyan(authInfo.email));\n console.log(chalk.white(\" User ID: \") + chalk.gray(authInfo.user_id));\n\n const storedKey = await getApiKey();\n if (storedKey) {\n const masked = storedKey.substring(0, 8) + \"...\";\n console.log(chalk.white(\" API Key: \") + chalk.gray(masked));\n }\n\n const orgs = authInfo.orgs ?? [];\n if (orgs.length > 0) {\n let selectedOrg: OrgInfo | null = null;\n\n if (orgs.length === 1) {\n selectedOrg = orgs[0];\n } else {\n selectedOrg = await promptOrgSelection(orgs, authInfo.default_org_id);\n }\n\n if (selectedOrg) {\n const config = await readConfig();\n await writeConfig({\n ...config,\n orgId: selectedOrg.id,\n orgName: selectedOrg.name,\n orgSlug: selectedOrg.slug ?? undefined,\n });\n\n const slug = selectedOrg.slug\n ? chalk.gray(` (${selectedOrg.slug})`)\n : \"\";\n console.log(\n chalk.white(\" Org: \") + chalk.cyan(selectedOrg.name) + slug\n );\n }\n }\n } catch {\n console.log(\n chalk.gray(\n `\\n Your API key has been saved to ${chalk.white(\"~/.mcp-use/config.json\")}`\n )\n );\n }\n\n console.log(\n chalk.gray(\n \"\\n Deploy your MCP servers with \" + chalk.white(\"npx mcp-use deploy\")\n )\n );\n console.log(\n chalk.gray(\" To logout, run \" + chalk.white(\"npx mcp-use logout\"))\n );\n } catch (error) {\n throw new Error(\n `Login failed: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\n/**\n * Logout command - revokes API key and deletes config\n */\nexport async function logoutCommand(): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.yellow(\"⚠️ You are not logged in.\"));\n return;\n }\n\n console.log(chalk.cyan.bold(\"🔓 Logging out...\\n\"));\n\n await deleteConfig();\n\n console.log(chalk.green.bold(\"✓ Successfully logged out!\"));\n console.log(\n chalk.gray(\n \"\\nYour local config has been deleted. The API key will remain active until revoked from the web interface.\"\n )\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Logout failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Whoami command - shows current user info\n */\nexport async function whoamiCommand(): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.yellow(\"⚠️ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n return;\n }\n\n console.log(chalk.cyan.bold(\"👤 Current user:\\n\"));\n\n const api = await McpUseAPI.create();\n const authInfo = await api.testAuth();\n\n console.log(chalk.white(\"Email: \") + chalk.cyan(authInfo.email));\n console.log(chalk.white(\"User ID: \") + chalk.gray(authInfo.user_id));\n\n const apiKey = await getApiKey();\n if (apiKey) {\n const masked = apiKey.substring(0, 6) + \"...\";\n console.log(chalk.white(\"API Key: \") + chalk.gray(masked));\n }\n\n const config = await readConfig();\n const orgs = authInfo.orgs ?? [];\n if (orgs.length > 0) {\n const activeOrg = orgs.find(\n (o) => o.id === (config.orgId || authInfo.default_org_id)\n );\n\n if (activeOrg) {\n const slug = activeOrg.slug ? chalk.gray(` (${activeOrg.slug})`) : \"\";\n console.log(\n chalk.white(\"Org: \") + chalk.cyan(activeOrg.name) + slug\n );\n }\n\n if (orgs.length > 1) {\n console.log(\n chalk.gray(\n `\\n ${orgs.length} organizations available. Use ` +\n chalk.white(\"npx mcp-use org list\") +\n \" to see all.\"\n )\n );\n }\n }\n } catch (error: any) {\n if (error?.status === 401) {\n console.error(\n chalk.red(\"\\nYour session has expired or your API key is invalid.\")\n );\n console.log(\n chalk.gray(`Run ${chalk.white(\"mcp-use login\")} to re-authenticate.\\n`)\n );\n } else {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get user info:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n }\n process.exit(1);\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport type { MCPSession } from \"mcp-use/client\";\nimport { MCPClient } from \"mcp-use/client\";\nimport { getPackageVersion } from \"mcp-use/server\";\nimport { createInterface } from \"node:readline\";\nimport {\n formatError,\n formatHeader,\n formatInfo,\n formatJson,\n formatKeyValue,\n formatPromptMessages,\n formatResourceContent,\n formatSchema,\n formatSuccess,\n formatTable,\n formatToolCall,\n formatWarning,\n} from \"../utils/format.js\";\nimport {\n getActiveSession,\n getSession,\n listAllSessions,\n saveSession,\n setActiveSession,\n updateSessionInfo,\n} from \"../utils/session-storage.js\";\n\n// In-memory session map\nconst activeSessions = new Map<\n string,\n { client: MCPClient; session: MCPSession }\n>();\n\n/**\n * Get or restore a session by name\n */\nasync function getOrRestoreSession(\n sessionName: string | null\n): Promise<{ name: string; session: MCPSession } | null> {\n // If no session name provided, use active session\n if (!sessionName) {\n const active = await getActiveSession();\n if (!active) {\n console.error(\n formatError(\"No active session. Connect to a server first.\")\n );\n console.error(\n formatInfo(\"Use: npx mcp-use client connect <url> --name <name>\")\n );\n return null;\n }\n sessionName = active.name;\n }\n\n // Check if session is already connected in memory\n if (activeSessions.has(sessionName)) {\n const { session } = activeSessions.get(sessionName)!;\n return { name: sessionName, session };\n }\n\n // Try to restore from storage\n const config = await getSession(sessionName);\n if (!config) {\n console.error(formatError(`Session '${sessionName}' not found`));\n return null;\n }\n\n // Reconnect\n try {\n const client = new MCPClient();\n const cliClientInfo = getCliClientInfo();\n\n if (config.type === \"http\") {\n client.addServer(sessionName, {\n url: config.url!,\n headers: config.authToken\n ? { Authorization: `Bearer ${config.authToken}` }\n : undefined,\n clientInfo: cliClientInfo,\n });\n } else if (config.type === \"stdio\") {\n client.addServer(sessionName, {\n command: config.command!,\n args: config.args || [],\n env: config.env,\n clientInfo: cliClientInfo,\n });\n } else {\n console.error(formatError(`Unknown session type: ${config.type}`));\n return null;\n }\n\n const session = await client.createSession(sessionName);\n activeSessions.set(sessionName, { client, session });\n\n console.error(formatInfo(`Reconnected to session '${sessionName}'`));\n return { name: sessionName, session };\n } catch (error: any) {\n console.error(formatError(`Failed to restore session: ${error.message}`));\n return null;\n }\n}\n\n/**\n * Connect command\n */\n/**\n * Default clientInfo for mcp-use CLI\n */\nfunction getCliClientInfo() {\n return {\n name: \"mcp-use CLI\",\n title: \"mcp-use CLI\",\n version: getPackageVersion(),\n description: \"mcp-use CLI - Command-line interface for MCP servers\",\n icons: [\n {\n src: \"https://manufact.com/logo.png\",\n },\n ],\n websiteUrl: \"https://manufact.com\",\n };\n}\n\nexport async function connectCommand(\n urlOrCommand: string,\n options: {\n name?: string;\n stdio?: boolean;\n auth?: string;\n }\n): Promise<void> {\n try {\n const sessionName = options.name || `session-${Date.now()}`;\n\n const client = new MCPClient();\n let session: MCPSession;\n const cliClientInfo = getCliClientInfo();\n\n if (options.stdio) {\n // Parse stdio command\n const parts = urlOrCommand.split(\" \");\n const command = parts[0];\n const args = parts.slice(1);\n\n console.error(\n formatInfo(`Connecting to stdio server: ${command} ${args.join(\" \")}`)\n );\n\n client.addServer(sessionName, {\n command,\n args,\n clientInfo: cliClientInfo,\n });\n\n session = await client.createSession(sessionName);\n\n // Save session config\n await saveSession(sessionName, {\n type: \"stdio\",\n command,\n args,\n lastUsed: new Date().toISOString(),\n });\n } else {\n // HTTP connection\n console.error(formatInfo(`Connecting to ${urlOrCommand}...`));\n\n client.addServer(sessionName, {\n url: urlOrCommand,\n headers: options.auth\n ? { Authorization: `Bearer ${options.auth}` }\n : undefined,\n clientInfo: cliClientInfo,\n });\n\n session = await client.createSession(sessionName);\n\n // Save session config\n await saveSession(sessionName, {\n type: \"http\",\n url: urlOrCommand,\n authToken: options.auth,\n lastUsed: new Date().toISOString(),\n });\n }\n\n // Store in memory\n activeSessions.set(sessionName, { client, session });\n\n // Update session info\n const serverInfo = session.serverInfo;\n const capabilities = session.serverCapabilities;\n\n if (serverInfo) {\n await updateSessionInfo(sessionName, serverInfo, capabilities);\n }\n\n // Display connection info\n console.log(formatSuccess(`Connected to ${sessionName}`));\n\n if (serverInfo) {\n console.log(\"\");\n console.log(formatHeader(\"Server Information:\"));\n console.log(\n formatKeyValue({\n Name: serverInfo.name,\n Version: serverInfo.version || \"unknown\",\n })\n );\n }\n\n if (capabilities) {\n console.log(\"\");\n console.log(formatHeader(\"Capabilities:\"));\n const caps = Object.keys(capabilities).join(\", \");\n console.log(` ${caps || \"none\"}`);\n }\n\n // Count available resources\n const tools = session.tools;\n console.log(\"\");\n console.log(\n formatInfo(\n `Available: ${tools.length} tool${tools.length !== 1 ? \"s\" : \"\"}`\n )\n );\n } catch (error: any) {\n console.error(formatError(`Connection failed: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Disconnect command\n */\nexport async function disconnectCommand(\n sessionName?: string,\n options?: { all?: boolean }\n): Promise<void> {\n try {\n if (options?.all) {\n // Disconnect all sessions\n for (const [name, { client }] of activeSessions.entries()) {\n await client.closeAllSessions();\n activeSessions.delete(name);\n console.log(formatSuccess(`Disconnected from ${name}`));\n }\n return;\n }\n\n if (!sessionName) {\n const active = await getActiveSession();\n if (!active) {\n console.error(formatError(\"No active session to disconnect\"));\n return;\n }\n sessionName = active.name;\n }\n\n const sessionData = activeSessions.get(sessionName);\n if (sessionData) {\n await sessionData.client.closeAllSessions();\n activeSessions.delete(sessionName);\n console.log(formatSuccess(`Disconnected from ${sessionName}`));\n } else {\n console.log(formatInfo(`Session '${sessionName}' is not connected`));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to disconnect: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * List sessions command\n */\nexport async function listSessionsCommand(): Promise<void> {\n try {\n const sessions = await listAllSessions();\n\n if (sessions.length === 0) {\n console.log(formatInfo(\"No saved sessions\"));\n console.log(\n formatInfo(\"Connect to a server with: npx mcp-use client connect <url>\")\n );\n return;\n }\n\n console.log(formatHeader(\"Saved Sessions:\"));\n console.log(\"\");\n\n const tableData = sessions.map((s) => ({\n name: s.isActive ? chalk.green.bold(`${s.name} *`) : s.name,\n type: s.config.type,\n target:\n s.config.type === \"http\"\n ? s.config.url || \"\"\n : `${s.config.command} ${(s.config.args || []).join(\" \")}`,\n server: s.config.serverInfo?.name || \"unknown\",\n status: activeSessions.has(s.name)\n ? chalk.green(\"connected\")\n : chalk.gray(\"disconnected\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"name\", header: \"Name\" },\n { key: \"type\", header: \"Type\" },\n { key: \"target\", header: \"Target\", width: 40 },\n { key: \"server\", header: \"Server\" },\n { key: \"status\", header: \"Status\" },\n ])\n );\n\n console.log(\"\");\n console.log(chalk.gray(\"* = active session\"));\n } catch (error: any) {\n console.error(formatError(`Failed to list sessions: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Switch session command\n */\nexport async function switchSessionCommand(name: string): Promise<void> {\n try {\n await setActiveSession(name);\n console.log(formatSuccess(`Switched to session '${name}'`));\n } catch (error: any) {\n console.error(formatError(`Failed to switch session: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * List tools command\n */\nexport async function listToolsCommand(options: {\n session?: string;\n json?: boolean;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const tools = await session.listTools();\n\n if (options.json) {\n console.log(formatJson(tools));\n return;\n }\n\n if (tools.length === 0) {\n console.log(formatInfo(\"No tools available\"));\n return;\n }\n\n console.log(formatHeader(`Available Tools (${tools.length}):`));\n console.log(\"\");\n\n const tableData = tools.map((tool) => ({\n name: chalk.bold(tool.name),\n description: tool.description || chalk.gray(\"No description\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"name\", header: \"Tool\", width: 25 },\n { key: \"description\", header: \"Description\", width: 50 },\n ])\n );\n } catch (error: any) {\n console.error(formatError(`Failed to list tools: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Describe tool command\n */\nexport async function describeToolCommand(\n toolName: string,\n options: { session?: string }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const tools = session.tools;\n const tool = tools.find((t) => t.name === toolName);\n\n if (!tool) {\n console.error(formatError(`Tool '${toolName}' not found`));\n console.log(\"\");\n console.log(formatInfo(\"Available tools:\"));\n tools.forEach((t) => console.log(` • ${t.name}`));\n return;\n }\n\n console.log(formatHeader(`Tool: ${tool.name}`));\n console.log(\"\");\n\n if (tool.description) {\n console.log(tool.description);\n console.log(\"\");\n }\n\n if (tool.inputSchema) {\n console.log(formatHeader(\"Input Schema:\"));\n console.log(formatSchema(tool.inputSchema));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to describe tool: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Call tool command\n */\nexport async function callToolCommand(\n toolName: string,\n argsJson?: string,\n options?: { session?: string; timeout?: number; json?: boolean }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options?.session || null);\n if (!result) return;\n\n const { session } = result;\n\n // Parse arguments\n let args: Record<string, any> = {};\n if (argsJson) {\n try {\n args = JSON.parse(argsJson);\n } catch (error) {\n console.error(formatError(\"Invalid JSON arguments\"));\n return;\n }\n } else {\n // Check if tool requires arguments\n const tools = session.tools;\n const tool = tools.find((t) => t.name === toolName);\n\n if (tool?.inputSchema?.required && tool.inputSchema.required.length > 0) {\n console.error(\n formatError(\n \"This tool requires arguments. Provide them as a JSON string.\"\n )\n );\n console.log(\"\");\n console.log(formatInfo(\"Example:\"));\n console.log(\n ` npx mcp-use client tools call ${toolName} '{\"param\": \"value\"}'`\n );\n console.log(\"\");\n console.log(formatInfo(\"Tool schema:\"));\n console.log(formatSchema(tool.inputSchema));\n return;\n }\n }\n\n // Call the tool\n console.error(formatInfo(`Calling tool '${toolName}'...`));\n const callResult = await session.callTool(toolName, args, {\n timeout: options?.timeout,\n });\n\n if (options?.json) {\n console.log(formatJson(callResult));\n } else {\n console.log(formatToolCall(callResult));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to call tool: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * List resources command\n */\nexport async function listResourcesCommand(options: {\n session?: string;\n json?: boolean;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const resourcesResult = await session.listAllResources();\n const resources = resourcesResult.resources;\n\n if (options.json) {\n console.log(formatJson(resources));\n return;\n }\n\n if (resources.length === 0) {\n console.log(formatInfo(\"No resources available\"));\n return;\n }\n\n console.log(formatHeader(`Available Resources (${resources.length}):`));\n console.log(\"\");\n\n const tableData = resources.map((resource) => ({\n uri: resource.uri,\n name: resource.name || chalk.gray(\"(no name)\"),\n type: resource.mimeType || chalk.gray(\"unknown\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"uri\", header: \"URI\", width: 40 },\n { key: \"name\", header: \"Name\", width: 20 },\n { key: \"type\", header: \"Type\", width: 15 },\n ])\n );\n } catch (error: any) {\n console.error(formatError(`Failed to list resources: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Read resource command\n */\nexport async function readResourceCommand(\n uri: string,\n options: { session?: string; json?: boolean }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n\n console.error(formatInfo(`Reading resource: ${uri}`));\n const resource = await session.readResource(uri);\n\n if (options.json) {\n console.log(formatJson(resource));\n } else {\n console.log(formatResourceContent(resource));\n }\n } catch (error: any) {\n console.error(formatError(`Failed to read resource: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Subscribe to resource command\n */\nexport async function subscribeResourceCommand(\n uri: string,\n options: { session?: string }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n\n await session.subscribeToResource(uri);\n console.log(formatSuccess(`Subscribed to resource: ${uri}`));\n\n // Set up notification handler\n session.on(\"notification\", async (notification) => {\n if (notification.method === \"notifications/resources/updated\") {\n console.log(\"\");\n console.log(formatInfo(\"Resource updated:\"));\n console.log(formatJson(notification.params));\n }\n });\n\n console.log(formatInfo(\"Listening for updates... (Press Ctrl+C to stop)\"));\n\n // Keep process alive\n await new Promise(() => {});\n } catch (error: any) {\n console.error(\n formatError(`Failed to subscribe to resource: ${error.message}`)\n );\n process.exit(1);\n }\n}\n\n/**\n * Unsubscribe from resource command\n */\nexport async function unsubscribeResourceCommand(\n uri: string,\n options: { session?: string }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n\n await session.unsubscribeFromResource(uri);\n console.log(formatSuccess(`Unsubscribed from resource: ${uri}`));\n } catch (error: any) {\n console.error(\n formatError(`Failed to unsubscribe from resource: ${error.message}`)\n );\n process.exit(1);\n }\n}\n\n/**\n * List prompts command\n */\nexport async function listPromptsCommand(options: {\n session?: string;\n json?: boolean;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { session } = result;\n const promptsResult = await session.listPrompts();\n const prompts = promptsResult.prompts;\n\n if (options.json) {\n console.log(formatJson(prompts));\n return;\n }\n\n if (prompts.length === 0) {\n console.log(formatInfo(\"No prompts available\"));\n return;\n }\n\n console.log(formatHeader(`Available Prompts (${prompts.length}):`));\n console.log(\"\");\n\n const tableData = prompts.map((prompt) => ({\n name: chalk.bold(prompt.name),\n description: prompt.description || chalk.gray(\"No description\"),\n }));\n\n console.log(\n formatTable(tableData, [\n { key: \"name\", header: \"Prompt\", width: 25 },\n { key: \"description\", header: \"Description\", width: 50 },\n ])\n );\n } catch (error: any) {\n console.error(formatError(`Failed to list prompts: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Get prompt command\n */\nexport async function getPromptCommand(\n promptName: string,\n argsJson?: string,\n options?: { session?: string; json?: boolean }\n): Promise<void> {\n try {\n const result = await getOrRestoreSession(options?.session || null);\n if (!result) return;\n\n const { session } = result;\n\n // Parse arguments\n let args: Record<string, any> = {};\n if (argsJson) {\n try {\n args = JSON.parse(argsJson);\n } catch (error) {\n console.error(formatError(\"Invalid JSON arguments\"));\n return;\n }\n }\n\n console.error(formatInfo(`Getting prompt '${promptName}'...`));\n const prompt = await session.getPrompt(promptName, args);\n\n if (options?.json) {\n console.log(formatJson(prompt));\n } else {\n console.log(formatHeader(`Prompt: ${promptName}`));\n console.log(\"\");\n\n if (prompt.description) {\n console.log(prompt.description);\n console.log(\"\");\n }\n\n if (prompt.messages) {\n console.log(formatHeader(\"Messages:\"));\n console.log(\"\");\n console.log(formatPromptMessages(prompt.messages));\n }\n }\n } catch (error: any) {\n console.error(formatError(`Failed to get prompt: ${error.message}`));\n process.exit(1);\n }\n}\n\n/**\n * Interactive mode command\n */\nexport async function interactiveCommand(options: {\n session?: string;\n}): Promise<void> {\n try {\n const result = await getOrRestoreSession(options.session || null);\n if (!result) return;\n\n const { name: sessionName, session } = result;\n\n console.log(formatHeader(\"MCP Interactive Mode\"));\n console.log(\"\");\n console.log(formatInfo(`Connected to: ${sessionName}`));\n console.log(\"\");\n console.log(chalk.gray(\"Commands:\"));\n console.log(chalk.gray(\" tools list - List available tools\"));\n console.log(\n chalk.gray(\n \" tools call <name> - Call a tool (will prompt for args)\"\n )\n );\n console.log(chalk.gray(\" tools describe <name> - Show tool details\"));\n console.log(\n chalk.gray(\" resources list - List available resources\")\n );\n console.log(chalk.gray(\" resources read <uri> - Read a resource\"));\n console.log(\n chalk.gray(\" prompts list - List available prompts\")\n );\n console.log(chalk.gray(\" prompts get <name> - Get a prompt\"));\n console.log(chalk.gray(\" sessions list - List all sessions\"));\n console.log(\n chalk.gray(\" sessions switch <name> - Switch to another session\")\n );\n console.log(\n chalk.gray(\" exit, quit - Exit interactive mode\")\n );\n console.log(\"\");\n\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: chalk.cyan(\"mcp> \"),\n });\n\n rl.prompt();\n\n rl.on(\"line\", async (line) => {\n const trimmed = line.trim();\n\n if (!trimmed) {\n rl.prompt();\n return;\n }\n\n if (trimmed === \"exit\" || trimmed === \"quit\") {\n console.log(formatInfo(\"Goodbye!\"));\n rl.close();\n process.exit(0);\n }\n\n const parts = trimmed.split(\" \");\n const scope = parts[0];\n const command = parts[1];\n const arg = parts[2];\n\n try {\n if (scope === \"tools\") {\n if (command === \"list\") {\n const tools = await session.listTools();\n console.log(\n formatInfo(\n `Available tools: ${tools.map((t) => t.name).join(\", \")}`\n )\n );\n } else if (command === \"call\" && arg) {\n // Prompt for arguments\n rl.question(\n \"Arguments (JSON, or press Enter for none): \",\n async (argsInput) => {\n try {\n const args = argsInput.trim() ? JSON.parse(argsInput) : {};\n const result = await session.callTool(arg, args);\n console.log(formatToolCall(result));\n } catch (error: any) {\n console.error(formatError(error.message));\n }\n rl.prompt();\n }\n );\n return;\n } else if (command === \"describe\" && arg) {\n const tools = session.tools;\n const tool = tools.find((t) => t.name === arg);\n if (tool) {\n console.log(formatHeader(`Tool: ${tool.name}`));\n if (tool.description) console.log(tool.description);\n if (tool.inputSchema) {\n console.log(\"\");\n console.log(formatSchema(tool.inputSchema));\n }\n } else {\n console.error(formatError(`Tool '${arg}' not found`));\n }\n } else {\n console.error(\n formatError(\n \"Invalid command. Try: tools list, tools call <name>, tools describe <name>\"\n )\n );\n }\n } else if (scope === \"resources\") {\n if (command === \"list\") {\n const result = await session.listAllResources();\n const resources = result.resources;\n console.log(\n formatInfo(\n `Available resources: ${resources.map((r) => r.uri).join(\", \")}`\n )\n );\n } else if (command === \"read\" && arg) {\n const resource = await session.readResource(arg);\n console.log(formatResourceContent(resource));\n } else {\n console.error(\n formatError(\n \"Invalid command. Try: resources list, resources read <uri>\"\n )\n );\n }\n } else if (scope === \"prompts\") {\n if (command === \"list\") {\n const result = await session.listPrompts();\n const prompts = result.prompts;\n console.log(\n formatInfo(\n `Available prompts: ${prompts.map((p) => p.name).join(\", \")}`\n )\n );\n } else if (command === \"get\" && arg) {\n rl.question(\n \"Arguments (JSON, or press Enter for none): \",\n async (argsInput) => {\n try {\n const args = argsInput.trim() ? JSON.parse(argsInput) : {};\n const prompt = await session.getPrompt(arg, args);\n console.log(formatPromptMessages(prompt.messages));\n } catch (error: any) {\n console.error(formatError(error.message));\n }\n rl.prompt();\n }\n );\n return;\n } else {\n console.error(\n formatError(\n \"Invalid command. Try: prompts list, prompts get <name>\"\n )\n );\n }\n } else if (scope === \"sessions\") {\n if (command === \"list\") {\n await listSessionsCommand();\n } else if (command === \"switch\" && arg) {\n console.log(\n formatWarning(\n \"Session switching in interactive mode will be available in a future version\"\n )\n );\n } else {\n console.error(formatError(\"Invalid command. Try: sessions list\"));\n }\n } else {\n console.error(\n formatError(\n \"Unknown command. Type a valid scope: tools, resources, prompts, sessions\"\n )\n );\n }\n } catch (error: any) {\n console.error(formatError(error.message));\n }\n\n rl.prompt();\n });\n\n rl.on(\"close\", () => {\n console.log(\"\");\n console.log(formatInfo(\"Goodbye!\"));\n process.exit(0);\n });\n } catch (error: any) {\n console.error(\n formatError(`Failed to start interactive mode: ${error.message}`)\n );\n process.exit(1);\n }\n}\n\n/**\n * Create the client command group\n */\nexport function createClientCommand(): Command {\n const clientCommand = new Command(\"client\").description(\n \"Interactive MCP client for terminal usage\"\n );\n\n // Connection commands\n clientCommand\n .command(\"connect <url>\")\n .description(\"Connect to an MCP server\")\n .option(\"--name <name>\", \"Session name\")\n .option(\"--stdio\", \"Use stdio connector instead of HTTP\")\n .option(\"--auth <token>\", \"Authentication token\")\n .action(connectCommand);\n\n clientCommand\n .command(\"disconnect [session]\")\n .description(\"Disconnect from a session\")\n .option(\"--all\", \"Disconnect all sessions\")\n .action(disconnectCommand);\n\n // Sessions scope\n const sessionsCommand = new Command(\"sessions\").description(\n \"Manage CLI sessions\"\n );\n sessionsCommand\n .command(\"list\")\n .description(\"List all saved sessions\")\n .action(listSessionsCommand);\n sessionsCommand\n .command(\"switch <name>\")\n .description(\"Switch to a different session\")\n .action(switchSessionCommand);\n clientCommand.addCommand(sessionsCommand);\n\n // Tools scope\n const toolsCommand = new Command(\"tools\").description(\n \"Interact with MCP tools\"\n );\n toolsCommand\n .command(\"list\")\n .description(\"List available tools\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(listToolsCommand);\n toolsCommand\n .command(\"call <name> [args]\")\n .description(\"Call a tool with arguments (JSON string)\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--timeout <ms>\", \"Request timeout in milliseconds\", parseInt)\n .option(\"--json\", \"Output as JSON\")\n .action(callToolCommand);\n toolsCommand\n .command(\"describe <name>\")\n .description(\"Show tool details and schema\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(describeToolCommand);\n clientCommand.addCommand(toolsCommand);\n\n // Resources scope\n const resourcesCommand = new Command(\"resources\").description(\n \"Interact with MCP resources\"\n );\n resourcesCommand\n .command(\"list\")\n .description(\"List available resources\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(listResourcesCommand);\n resourcesCommand\n .command(\"read <uri>\")\n .description(\"Read a resource by URI\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(readResourceCommand);\n resourcesCommand\n .command(\"subscribe <uri>\")\n .description(\"Subscribe to resource updates\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(subscribeResourceCommand);\n resourcesCommand\n .command(\"unsubscribe <uri>\")\n .description(\"Unsubscribe from resource updates\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(unsubscribeResourceCommand);\n clientCommand.addCommand(resourcesCommand);\n\n // Prompts scope\n const promptsCommand = new Command(\"prompts\").description(\n \"Interact with MCP prompts\"\n );\n promptsCommand\n .command(\"list\")\n .description(\"List available prompts\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(listPromptsCommand);\n promptsCommand\n .command(\"get <name> [args]\")\n .description(\"Get a prompt with arguments (JSON string)\")\n .option(\"--session <name>\", \"Use specific session\")\n .option(\"--json\", \"Output as JSON\")\n .action(getPromptCommand);\n clientCommand.addCommand(promptsCommand);\n\n // Interactive mode\n clientCommand\n .command(\"interactive\")\n .description(\"Start interactive REPL mode\")\n .option(\"--session <name>\", \"Use specific session\")\n .action(interactiveCommand);\n\n return clientCommand;\n}\n","import chalk from \"chalk\";\nimport type { CallToolResult } from \"mcp-use/client\";\n\n/**\n * Format data as a table with ASCII borders\n */\nexport function formatTable(\n data: Array<Record<string, any>>,\n columns: Array<{ key: string; header: string; width?: number }>\n): string {\n if (data.length === 0) {\n return chalk.gray(\"No items found\");\n }\n\n // Calculate column widths\n const widths = columns.map((col) => {\n const maxDataWidth = Math.max(\n ...data.map((row) => String(row[col.key] || \"\").length)\n );\n const headerWidth = col.header.length;\n return col.width || Math.max(maxDataWidth, headerWidth, 10);\n });\n\n // Helper to create a row\n const createRow = (values: string[], bold = false) => {\n const cells = values.map((val, i) => {\n const padded = val.padEnd(widths[i]);\n return bold ? chalk.bold(padded) : padded;\n });\n return `│ ${cells.join(\" │ \")} │`;\n };\n\n // Create separator line\n const separator = (char: string) => {\n const parts = widths.map((w) => char.repeat(w + 2));\n if (char === \"─\") {\n return `├${parts.join(\"┼\")}┤`;\n }\n return `└${parts.join(\"┴\")}┘`;\n };\n\n // Build table\n const lines: string[] = [];\n\n // Top border\n lines.push(`┌${widths.map((w) => \"─\".repeat(w + 2)).join(\"┬\")}┐`);\n\n // Header\n lines.push(\n createRow(\n columns.map((c) => c.header),\n true\n )\n );\n\n // Separator\n lines.push(separator(\"─\"));\n\n // Data rows\n data.forEach((row) => {\n lines.push(createRow(columns.map((c) => String(row[c.key] || \"\"))));\n });\n\n // Bottom border\n lines.push(separator(\"─\"));\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format data as JSON\n */\nexport function formatJson(data: any, pretty = true): string {\n if (pretty) {\n return JSON.stringify(data, null, 2);\n }\n return JSON.stringify(data);\n}\n\n/**\n * Format a tool call result\n */\nexport function formatToolCall(result: CallToolResult): string {\n const lines: string[] = [];\n\n if (result.isError) {\n lines.push(chalk.red(\"✗ Tool execution failed\"));\n lines.push(\"\");\n } else {\n lines.push(chalk.green(\"✓ Tool executed successfully\"));\n lines.push(\"\");\n }\n\n // Format content\n if (result.content && result.content.length > 0) {\n result.content.forEach((item, index) => {\n if (result.content.length > 1) {\n lines.push(chalk.bold(`Content ${index + 1}:`));\n }\n\n if (item.type === \"text\") {\n lines.push(item.text);\n } else if (item.type === \"image\") {\n lines.push(chalk.cyan(`[Image: ${item.mimeType || \"unknown type\"}]`));\n if (item.data) {\n lines.push(chalk.gray(`Data: ${item.data.substring(0, 50)}...`));\n }\n } else if (item.type === \"resource\") {\n lines.push(chalk.cyan(`[Resource]`));\n if (item.resource?.uri) {\n lines.push(chalk.gray(`URI: ${item.resource.uri}`));\n }\n if (item.resource && \"text\" in item.resource && item.resource.text) {\n lines.push(item.resource.text);\n }\n } else {\n lines.push(chalk.gray(`[Unknown content type: ${item.type}]`));\n }\n\n if (index < result.content.length - 1) {\n lines.push(\"\");\n }\n });\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format resource content\n */\nexport function formatResourceContent(content: any): string {\n if (!content || !content.contents) {\n return chalk.gray(\"No content\");\n }\n\n const lines: string[] = [];\n\n content.contents.forEach((item: any, index: number) => {\n if (content.contents.length > 1) {\n lines.push(chalk.bold(`Content ${index + 1}:`));\n }\n\n if (item.uri) {\n lines.push(chalk.gray(`URI: ${item.uri}`));\n }\n\n if (item.mimeType) {\n lines.push(chalk.gray(`Type: ${item.mimeType}`));\n }\n\n if (\"text\" in item && item.text) {\n lines.push(\"\");\n lines.push(item.text);\n } else if (\"blob\" in item && item.blob) {\n lines.push(\"\");\n lines.push(chalk.cyan(`[Binary data: ${item.blob.length} bytes]`));\n }\n\n if (index < content.contents.length - 1) {\n lines.push(\"\");\n lines.push(chalk.gray(\"─\".repeat(50)));\n lines.push(\"\");\n }\n });\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format a JSON schema in a readable way\n */\nexport function formatSchema(schema: any, indent = 0): string {\n if (!schema) {\n return chalk.gray(\"No schema\");\n }\n\n const lines: string[] = [];\n const pad = \" \".repeat(indent);\n\n if (schema.type === \"object\" && schema.properties) {\n Object.entries(schema.properties).forEach(([key, value]: [string, any]) => {\n const required = schema.required?.includes(key);\n const type = value.type || \"any\";\n const desc = value.description || \"\";\n\n const keyStr = required ? chalk.bold(key) : key;\n const typeStr = chalk.cyan(`(${type})`);\n const requiredStr = required ? chalk.red(\" *required\") : \"\";\n\n lines.push(`${pad}${keyStr} ${typeStr}${requiredStr}`);\n\n if (desc) {\n lines.push(`${pad} ${chalk.gray(desc)}`);\n }\n\n // Handle nested objects\n if (value.type === \"object\" && value.properties) {\n lines.push(formatSchema(value, indent + 1));\n }\n\n // Handle arrays\n if (value.type === \"array\" && value.items) {\n lines.push(`${pad} ${chalk.gray(\"Items:\")}`);\n if (value.items.type === \"object\") {\n lines.push(formatSchema(value.items, indent + 2));\n } else {\n lines.push(\n `${pad} ${chalk.cyan(`(${value.items.type || \"any\"})`)}`\n );\n }\n }\n });\n } else {\n lines.push(`${pad}${chalk.cyan(`Type: ${schema.type || \"any\"}`)}`);\n if (schema.description) {\n lines.push(`${pad}${chalk.gray(schema.description)}`);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\n/**\n * Format a list of items with bullets\n */\nexport function formatList(items: string[], bullet = \"•\"): string {\n return items.map((item) => ` ${bullet} ${item}`).join(\"\\n\");\n}\n\n/**\n * Format an error message\n */\nexport function formatError(error: Error | string): string {\n const message = typeof error === \"string\" ? error : error.message;\n return chalk.red(`✗ Error: ${message}`);\n}\n\n/**\n * Format a success message\n */\nexport function formatSuccess(message: string): string {\n return chalk.green(`✓ ${message}`);\n}\n\n/**\n * Format an info message\n */\nexport function formatInfo(message: string): string {\n return chalk.cyan(message);\n}\n\n/**\n * Format a warning message\n */\nexport function formatWarning(message: string): string {\n return chalk.yellow(`⚠ ${message}`);\n}\n\n/**\n * Create a section header\n */\nexport function formatHeader(text: string): string {\n return chalk.bold.white(text);\n}\n\n/**\n * Format key-value pairs\n */\nexport function formatKeyValue(\n pairs: Record<string, string | number | boolean>\n): string {\n const maxKeyLength = Math.max(...Object.keys(pairs).map((k) => k.length), 0);\n\n return Object.entries(pairs)\n .map(([key, value]) => {\n const paddedKey = key.padEnd(maxKeyLength);\n return ` ${chalk.gray(paddedKey)}: ${value}`;\n })\n .join(\"\\n\");\n}\n\n/**\n * Format prompt messages\n */\n/**\n * Format a date string as relative time (e.g., \"2 hours ago\", \"3 days ago\")\n */\nexport function formatRelativeTime(dateString: string): string {\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSecs = Math.floor(diffMs / 1000);\n const diffMins = Math.floor(diffSecs / 60);\n const diffHours = Math.floor(diffMins / 60);\n const diffDays = Math.floor(diffHours / 24);\n const diffWeeks = Math.floor(diffDays / 7);\n const diffMonths = Math.floor(diffDays / 30);\n const diffYears = Math.floor(diffDays / 365);\n\n if (diffYears > 0) {\n return `${diffYears} year${diffYears > 1 ? \"s\" : \"\"} ago`;\n } else if (diffMonths > 0) {\n return `${diffMonths} month${diffMonths > 1 ? \"s\" : \"\"} ago`;\n } else if (diffWeeks > 0) {\n return `${diffWeeks} week${diffWeeks > 1 ? \"s\" : \"\"} ago`;\n } else if (diffDays > 0) {\n return `${diffDays} day${diffDays > 1 ? \"s\" : \"\"} ago`;\n } else if (diffHours > 0) {\n return `${diffHours} hour${diffHours > 1 ? \"s\" : \"\"} ago`;\n } else if (diffMins > 0) {\n return `${diffMins} minute${diffMins > 1 ? \"s\" : \"\"} ago`;\n } else {\n return \"just now\";\n }\n}\n\nexport function formatPromptMessages(messages: any[]): string {\n if (!messages || messages.length === 0) {\n return chalk.gray(\"No messages\");\n }\n\n const lines: string[] = [];\n\n messages.forEach((msg, index) => {\n const role = msg.role || \"unknown\";\n const roleStr =\n role === \"user\"\n ? chalk.blue(\"[User]\")\n : role === \"assistant\"\n ? chalk.green(\"[Assistant]\")\n : chalk.gray(`[${role}]`);\n\n lines.push(`${roleStr}`);\n\n if (msg.content) {\n if (typeof msg.content === \"string\") {\n lines.push(msg.content);\n } else if (msg.content.type === \"text\") {\n lines.push(msg.content.text);\n } else if (msg.content.type === \"image\") {\n lines.push(chalk.cyan(`[Image: ${msg.content.mimeType}]`));\n } else if (msg.content.type === \"resource\") {\n lines.push(chalk.cyan(`[Resource: ${msg.content.resource?.uri}]`));\n if (msg.content.resource?.text) {\n lines.push(msg.content.resource.text);\n }\n }\n }\n\n if (index < messages.length - 1) {\n lines.push(\"\");\n }\n });\n\n return lines.join(\"\\n\");\n}\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { readFile, writeFile, mkdir } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\n\nexport interface SessionConfig {\n type: \"http\" | \"stdio\";\n url?: string;\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n authToken?: string;\n lastUsed: string;\n serverInfo?: {\n name: string;\n version?: string;\n };\n capabilities?: Record<string, unknown>;\n}\n\nexport interface SessionStorage {\n activeSession: string | null;\n sessions: Record<string, SessionConfig>;\n}\n\nconst SESSION_FILE_PATH = join(homedir(), \".mcp-use\", \"cli-sessions.json\");\n\n/**\n * Ensure the session storage directory exists\n */\nasync function ensureSessionDir(): Promise<void> {\n const dir = join(homedir(), \".mcp-use\");\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n}\n\n/**\n * Load persisted sessions from disk\n */\nexport async function loadSessions(): Promise<SessionStorage> {\n try {\n await ensureSessionDir();\n\n if (!existsSync(SESSION_FILE_PATH)) {\n return { activeSession: null, sessions: {} };\n }\n\n const content = await readFile(SESSION_FILE_PATH, \"utf-8\");\n return JSON.parse(content);\n } catch (error) {\n // If file doesn't exist or is invalid, return empty storage\n return { activeSession: null, sessions: {} };\n }\n}\n\n/**\n * Save sessions to disk\n */\nasync function saveSessions(storage: SessionStorage): Promise<void> {\n await ensureSessionDir();\n await writeFile(SESSION_FILE_PATH, JSON.stringify(storage, null, 2), \"utf-8\");\n}\n\n/**\n * Save or update a session configuration\n */\nexport async function saveSession(\n name: string,\n config: SessionConfig\n): Promise<void> {\n const storage = await loadSessions();\n storage.sessions[name] = {\n ...config,\n lastUsed: new Date().toISOString(),\n };\n\n // Set as active session if no active session exists\n if (!storage.activeSession) {\n storage.activeSession = name;\n }\n\n await saveSessions(storage);\n}\n\n/**\n * Remove a session from storage\n */\nexport async function removeSession(name: string): Promise<void> {\n const storage = await loadSessions();\n delete storage.sessions[name];\n\n // Clear active session if it was the one removed\n if (storage.activeSession === name) {\n // Set to first available session or null\n const sessionNames = Object.keys(storage.sessions);\n storage.activeSession = sessionNames.length > 0 ? sessionNames[0] : null;\n }\n\n await saveSessions(storage);\n}\n\n/**\n * Get the currently active session name\n */\nexport async function getActiveSessionName(): Promise<string | null> {\n const storage = await loadSessions();\n return storage.activeSession;\n}\n\n/**\n * Get the active session configuration\n */\nexport async function getActiveSession(): Promise<{\n name: string;\n config: SessionConfig;\n} | null> {\n const storage = await loadSessions();\n if (!storage.activeSession || !storage.sessions[storage.activeSession]) {\n return null;\n }\n\n return {\n name: storage.activeSession,\n config: storage.sessions[storage.activeSession],\n };\n}\n\n/**\n * Get a specific session configuration by name\n */\nexport async function getSession(name: string): Promise<SessionConfig | null> {\n const storage = await loadSessions();\n return storage.sessions[name] || null;\n}\n\n/**\n * Set the active session\n */\nexport async function setActiveSession(name: string): Promise<void> {\n const storage = await loadSessions();\n\n if (!storage.sessions[name]) {\n throw new Error(`Session '${name}' not found`);\n }\n\n storage.activeSession = name;\n storage.sessions[name].lastUsed = new Date().toISOString();\n\n await saveSessions(storage);\n}\n\n/**\n * List all stored sessions\n */\nexport async function listAllSessions(): Promise<\n Array<{ name: string; config: SessionConfig; isActive: boolean }>\n> {\n const storage = await loadSessions();\n\n return Object.entries(storage.sessions).map(([name, config]) => ({\n name,\n config,\n isActive: name === storage.activeSession,\n }));\n}\n\n/**\n * Update session info after connection\n */\nexport async function updateSessionInfo(\n name: string,\n serverInfo: { name: string; version?: string },\n capabilities?: Record<string, unknown>\n): Promise<void> {\n const storage = await loadSessions();\n\n if (storage.sessions[name]) {\n storage.sessions[name].serverInfo = serverInfo;\n storage.sessions[name].capabilities = capabilities;\n storage.sessions[name].lastUsed = new Date().toISOString();\n await saveSessions(storage);\n }\n}\n","import chalk from \"chalk\";\nimport { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport open from \"open\";\nimport type { GitHubConnectionStatus, OrgInfo } from \"../utils/api.js\";\nimport {\n ApiUnauthorizedError,\n GitHubAuthRequiredError,\n McpUseAPI,\n} from \"../utils/api.js\";\nimport {\n getWebUrl,\n isLoggedIn,\n readConfig,\n writeConfig,\n} from \"../utils/config.js\";\nimport {\n getGitInfo,\n gitInit,\n gitAddRemoteAndPush,\n gitCommitAndPush,\n GitCommandError,\n hasUncommittedChanges,\n isGitHubUrl,\n} from \"../utils/git.js\";\nimport { getMcpServerUrl } from \"../utils/cloud-urls.js\";\nimport { getProjectLink, saveProjectLink } from \"../utils/project-link.js\";\nimport { loginCommand, promptOrgSelection } from \"./auth.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nasync function parseEnvFile(filePath: string): Promise<Record<string, string>> {\n try {\n const content = await fs.readFile(filePath, \"utf-8\");\n const envVars: Record<string, string> = {};\n const lines = content.split(\"\\n\");\n let currentKey: string | null = null;\n let currentValue = \"\";\n\n for (let line of lines) {\n line = line.trim();\n if (!line || line.startsWith(\"#\")) continue;\n if (currentKey && !line.includes(\"=\")) {\n currentValue += \"\\n\" + line;\n continue;\n }\n if (currentKey) {\n envVars[currentKey] = currentValue.replace(/^[\"']|[\"']$/g, \"\");\n currentKey = null;\n currentValue = \"\";\n }\n const equalIndex = line.indexOf(\"=\");\n if (equalIndex === -1) continue;\n const key = line.substring(0, equalIndex).trim();\n const value = line.substring(equalIndex + 1).trim();\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {\n console.log(chalk.yellow(`⚠️ Skipping invalid env key: ${key}`));\n continue;\n }\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n envVars[key] = value.slice(1, -1);\n } else if (value.startsWith('\"') || value.startsWith(\"'\")) {\n currentKey = key;\n currentValue = value.slice(1);\n } else {\n envVars[key] = value;\n }\n }\n if (currentKey) {\n envVars[currentKey] = currentValue.replace(/^[\"']|[\"']$/g, \"\");\n }\n return envVars;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new Error(`Environment file not found: ${filePath}`);\n }\n throw new Error(\n `Failed to parse environment file: ${error instanceof Error ? error.message : \"Unknown error\"}`\n );\n }\n}\n\nfunction parseEnvVar(envStr: string): { key: string; value: string } {\n const equalIndex = envStr.indexOf(\"=\");\n if (equalIndex === -1) {\n throw new Error(`Invalid env format: \"${envStr}\". Expected KEY=VALUE`);\n }\n const key = envStr.substring(0, equalIndex).trim();\n const value = envStr.substring(equalIndex + 1);\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) {\n throw new Error(`Invalid env key: \"${key}\".`);\n }\n return { key, value };\n}\n\nasync function buildEnvVars(\n options: DeployOptions\n): Promise<Record<string, string>> {\n const envVars: Record<string, string> = {};\n if (options.envFile) {\n try {\n const fileEnv = await parseEnvFile(options.envFile);\n Object.assign(envVars, fileEnv);\n console.log(\n chalk.gray(\n `Loaded ${Object.keys(fileEnv).length} variable(s) from ${options.envFile}`\n )\n );\n } catch (error) {\n console.log(\n chalk.red(\n `✗ ${error instanceof Error ? error.message : \"Failed to load env file\"}`\n )\n );\n process.exit(1);\n }\n }\n if (options.env && options.env.length > 0) {\n for (const envStr of options.env) {\n try {\n const { key, value } = parseEnvVar(envStr);\n envVars[key] = value;\n } catch (error) {\n console.log(\n chalk.red(\n `✗ ${error instanceof Error ? error.message : \"Invalid env variable\"}`\n )\n );\n process.exit(1);\n }\n }\n }\n return envVars;\n}\n\ninterface DeployOptions {\n open?: boolean;\n name?: string;\n port?: number;\n runtime?: \"node\" | \"python\";\n new?: boolean;\n env?: string[];\n envFile?: string;\n rootDir?: string;\n org?: string;\n yes?: boolean;\n region?: \"US\" | \"EU\" | \"APAC\";\n buildCommand?: string;\n startCommand?: string;\n}\n\nasync function isMcpProject(cwd: string = process.cwd()): Promise<boolean> {\n try {\n const content = await fs.readFile(path.join(cwd, \"package.json\"), \"utf-8\");\n const pkg = JSON.parse(content);\n return !!(\n pkg.dependencies?.[\"mcp-use\"] ||\n pkg.dependencies?.[\"@modelcontextprotocol/sdk\"] ||\n pkg.devDependencies?.[\"mcp-use\"] ||\n pkg.devDependencies?.[\"@modelcontextprotocol/sdk\"]\n );\n } catch {\n return false;\n }\n}\n\nasync function getProjectName(cwd: string = process.cwd()): Promise<string> {\n try {\n const content = await fs.readFile(path.join(cwd, \"package.json\"), \"utf-8\");\n const pkg = JSON.parse(content);\n if (pkg.name) return pkg.name;\n } catch {\n // fall through\n }\n return path.basename(cwd);\n}\n\nasync function detectBuildCommand(cwd: string): Promise<string | undefined> {\n try {\n const content = await fs.readFile(path.join(cwd, \"package.json\"), \"utf-8\");\n if (JSON.parse(content).scripts?.build) return \"npm run build\";\n } catch {\n // noop\n }\n return undefined;\n}\n\nasync function detectStartCommand(cwd: string): Promise<string | undefined> {\n try {\n const content = await fs.readFile(path.join(cwd, \"package.json\"), \"utf-8\");\n const pkg = JSON.parse(content);\n if (pkg.scripts?.start) return \"npm start\";\n if (pkg.main) return `node ${pkg.main}`;\n } catch {\n // noop\n }\n return undefined;\n}\n\nasync function detectRuntime(cwd: string): Promise<\"node\" | \"python\"> {\n for (const f of [\"requirements.txt\", \"pyproject.toml\", \"setup.py\"]) {\n try {\n await fs.access(path.join(cwd, f));\n return \"python\";\n } catch {\n continue;\n }\n }\n return \"node\";\n}\n\nasync function prompt(\n question: string,\n defaultValue: \"y\" | \"n\" = \"n\"\n): Promise<boolean> {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n const indicator = defaultValue === \"y\" ? \"Y/n\" : \"y/N\";\n const q = question.replace(/(\\(y\\/n\\):)/, `(${indicator}):`);\n return new Promise((resolve) => {\n rl.question(q, (answer) => {\n rl.close();\n const a = answer.trim().toLowerCase();\n if (a === \"\") resolve(defaultValue === \"y\");\n else resolve(a === \"y\" || a === \"yes\");\n });\n });\n}\n\nasync function promptText(\n question: string,\n defaultValue?: string\n): Promise<string> {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n const suffix = defaultValue ? chalk.gray(` [${defaultValue}]`) : \"\";\n return new Promise((resolve) => {\n rl.question(question + suffix + \" \", (answer) => {\n rl.close();\n resolve(answer.trim() || defaultValue || \"\");\n });\n });\n}\n\n// ---------------------------------------------------------------------------\n// .gitignore management\n// ---------------------------------------------------------------------------\n\nconst REQUIRED_IGNORES = [\n \"node_modules\",\n \"dist\",\n \".env\",\n \".env.local\",\n \".mcp-use\",\n];\n\nasync function ensureGitignore(cwd: string): Promise<void> {\n const gitignorePath = path.join(cwd, \".gitignore\");\n let content = \"\";\n try {\n content = await fs.readFile(gitignorePath, \"utf-8\");\n } catch {\n // file doesn't exist yet\n }\n const missing = REQUIRED_IGNORES.filter((entry) => !content.includes(entry));\n if (missing.length > 0) {\n const additions = missing.join(\"\\n\");\n const newContent =\n content + (content.endsWith(\"\\n\") ? \"\" : \"\\n\") + additions + \"\\n\";\n await fs.writeFile(gitignorePath, newContent, \"utf-8\");\n }\n}\n\n// ---------------------------------------------------------------------------\n// Deployment progress (poll build-logs)\n// ---------------------------------------------------------------------------\n\nasync function displayDeploymentProgress(\n api: McpUseAPI,\n deploymentId: string,\n progressOptions?: { yes?: boolean }\n): Promise<void> {\n const frames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n let frameIndex = 0;\n let spinnerInterval: NodeJS.Timeout | null = null;\n\n const startSpinner = (message: string) => {\n if (spinnerInterval) clearInterval(spinnerInterval);\n process.stdout.write(\"\\r\\x1b[K\");\n spinnerInterval = setInterval(() => {\n process.stdout.write(\n \"\\r\" + chalk.cyan(frames[frameIndex]) + \" \" + chalk.gray(message)\n );\n frameIndex = (frameIndex + 1) % frames.length;\n }, 80);\n };\n\n const stopSpinner = () => {\n if (spinnerInterval) {\n clearInterval(spinnerInterval);\n spinnerInterval = null;\n process.stdout.write(\"\\r\\x1b[K\");\n }\n };\n\n console.log();\n startSpinner(\"Deploying...\");\n\n let checkCount = 0;\n const maxChecks = 120;\n let delay = 2000;\n const maxDelay = 10000;\n let buildLogOffset = 0;\n\n while (checkCount < maxChecks) {\n const waitMs = delay;\n await new Promise<void>((r) => setTimeout(r, waitMs));\n checkCount++;\n\n try {\n const resp = await api.getDeploymentBuildLogs(\n deploymentId,\n buildLogOffset\n );\n if (resp.logs.length > 0) {\n for (const line of resp.logs.split(\"\\n\").filter((l) => l.trim())) {\n try {\n const d = JSON.parse(line);\n if (d.line) {\n stopSpinner();\n const color =\n d.level === \"error\"\n ? chalk.red\n : d.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const prefix = d.step ? chalk.cyan(`[${d.step}]`) + \" \" : \"\";\n console.log(prefix + color(d.line));\n }\n } catch {\n stopSpinner();\n console.log(chalk.gray(line));\n }\n }\n buildLogOffset = resp.offset;\n }\n } catch {\n // not ready yet\n }\n\n const dep = await api.getDeployment(deploymentId);\n\n if (dep.status === \"running\") {\n stopSpinner();\n const mcpUrl = getMcpServerUrl(dep);\n const webUrl = (await getWebUrl()).replace(/\\/$/, \"\");\n const config = await readConfig();\n let dashboardUrl: string | null = null;\n if (dep.serverId) {\n dashboardUrl = config.orgSlug\n ? `${webUrl}/cloud/${config.orgSlug}/servers/${dep.serverId}`\n : `${webUrl}/cloud/servers/${dep.serverId}`;\n }\n const inspectorUrl = `https://inspector.manufact.com/inspector?autoConnect=${encodeURIComponent(mcpUrl)}`;\n\n console.log(chalk.green.bold(\"✓ Deployment successful!\\n\"));\n if (mcpUrl) {\n console.log(chalk.white(\"🌐 MCP Server URL:\"));\n console.log(chalk.cyan.bold(` ${mcpUrl}\\n`));\n }\n if (dashboardUrl) {\n console.log(chalk.white(\"📊 Dashboard:\"));\n console.log(chalk.cyan.bold(` ${dashboardUrl}\\n`));\n }\n console.log(chalk.white(\"🔍 Inspector URL:\"));\n console.log(chalk.cyan.bold(` ${inspectorUrl}\\n`));\n console.log(chalk.gray(\"Deployment ID: \") + chalk.white(dep.id));\n return;\n } else if (dep.status === \"failed\") {\n stopSpinner();\n console.log(chalk.red.bold(\"✗ Deployment failed\\n\"));\n if (dep.error) {\n const internalPatterns = [\n \"GraphQL\",\n \"authenticated\",\n \"INTERNAL\",\n \"Fly API\",\n \"token validation\",\n \"context deadline\",\n \"Bad gateway\",\n \"502\",\n \"503\",\n ];\n const isInternalError = internalPatterns.some((p) =>\n dep.error!.includes(p)\n );\n if (isInternalError) {\n console.log(\n chalk.red(\"Error: \") +\n \"An internal infrastructure error occurred. Please try again.\"\n );\n console.log(chalk.gray(\" Details: \" + dep.error));\n } else {\n console.log(chalk.red(\"Error: \") + dep.error);\n }\n }\n process.exit(1);\n } else if (dep.status === \"building\" || dep.status === \"pending\") {\n startSpinner(\"Building and deploying...\");\n delay = Math.min(delay * 1.2, maxDelay);\n } else {\n stopSpinner();\n console.log(chalk.yellow(\"⚠️ Deployment status: \") + dep.status);\n return;\n }\n }\n\n stopSpinner();\n console.log(chalk.yellow(\"⚠️ Deployment is taking longer than expected.\"));\n console.log(\n chalk.gray(\"Check status with: \") +\n chalk.white(`mcp-use deployments get ${deploymentId}`)\n );\n}\n\n// ---------------------------------------------------------------------------\n// GitHub helpers\n// ---------------------------------------------------------------------------\n\nasync function promptReauthenticateOn401(\n options: DeployOptions,\n orgIdToRestore: string | undefined\n): Promise<McpUseAPI> {\n console.log(chalk.red(\"\\n✗ Session expired or API key invalid.\"));\n if (options.yes) {\n console.log(\n chalk.gray(\" Run mcp-use login to re-authenticate, then retry.\")\n );\n process.exit(1);\n }\n const should = await prompt(chalk.white(\"Log in again? (Y/n): \"), \"y\");\n if (!should) {\n process.exit(1);\n }\n await loginCommand({ silent: false });\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ Login failed. Please try again.\"));\n process.exit(1);\n }\n const fresh = await McpUseAPI.create();\n if (orgIdToRestore) {\n fresh.setOrgId(orgIdToRestore);\n }\n return fresh;\n}\n\nasync function ensureApiSessionForDeploy(\n api: McpUseAPI,\n options: DeployOptions,\n orgIdToRestore: string | undefined\n): Promise<McpUseAPI> {\n let client = api;\n for (;;) {\n try {\n await client.testAuth();\n return client;\n } catch (e) {\n if (!(e instanceof ApiUnauthorizedError)) throw e;\n client = await promptReauthenticateOn401(options, orgIdToRestore);\n }\n }\n}\n\nasync function getGitHubConnectionStatusWith401Retry(\n api: McpUseAPI,\n options: DeployOptions,\n orgIdToRestore: string | undefined\n): Promise<{ api: McpUseAPI; status: GitHubConnectionStatus }> {\n let client = api;\n for (let attempt = 0; attempt < 2; attempt++) {\n try {\n const status = await client.getGitHubConnectionStatus();\n return { api: client, status };\n } catch (e) {\n if (e instanceof ApiUnauthorizedError && attempt === 0) {\n client = await promptReauthenticateOn401(options, orgIdToRestore);\n await client.testAuth();\n continue;\n }\n throw e;\n }\n }\n throw new Error(\"Unreachable\");\n}\n\nasync function checkRepoAccess(\n api: McpUseAPI,\n owner: string,\n repo: string\n): Promise<boolean> {\n try {\n const resp = await api.getGitHubRepos(true);\n return resp.repos.some((r) => r.full_name === `${owner}/${repo}`);\n } catch {\n return false;\n }\n}\n\nasync function promptGitHubInstallation(\n api: McpUseAPI,\n reason: \"not_connected\" | \"no_access\",\n repoName?: string,\n opts?: {\n yes?: boolean;\n installationId?: string;\n reauth: () => Promise<McpUseAPI>;\n }\n): Promise<{ ok: boolean; api: McpUseAPI }> {\n const yes = !!opts?.yes;\n const reauth = opts?.reauth;\n console.log();\n\n if (reason === \"not_connected\") {\n console.log(chalk.yellow(\"⚠️ GitHub account not connected\"));\n console.log(\n chalk.white(\"Deployments require a connected GitHub account.\\n\")\n );\n } else {\n console.log(\n chalk.yellow(\"⚠️ GitHub App doesn't have access to this repository\")\n );\n console.log(\n chalk.white(\n `The GitHub App needs permission to access ${chalk.cyan(repoName || \"this repository\")}.\\n`\n )\n );\n }\n\n const shouldInstall = yes\n ? true\n : await prompt(\n chalk.white(\n `Would you like to ${reason === \"not_connected\" ? \"connect\" : \"configure\"} GitHub now? (Y/n): `\n ),\n \"y\"\n );\n if (!shouldInstall) return { ok: false, api };\n\n let client = api;\n\n try {\n let appName: string;\n for (;;) {\n try {\n appName = await client.getGitHubAppName();\n break;\n } catch (e) {\n if (e instanceof ApiUnauthorizedError && reauth) {\n client = await reauth();\n await client.testAuth();\n continue;\n }\n throw e;\n }\n }\n\n const installUrl = `https://github.com/apps/${appName}/installations/new`;\n\n console.log(chalk.cyan(`\\nOpening browser...`));\n console.log(chalk.gray(`URL: ${installUrl}\\n`));\n\n if (reason === \"no_access\") {\n console.log(\n chalk.white(\"Please add \") +\n chalk.cyan.bold(repoName || \"your repository\") +\n chalk.white(\" to the app's repository access, then return here.\\n\")\n );\n } else {\n console.log(\n chalk.white(\"Complete the GitHub App installation, then return here.\\n\")\n );\n }\n\n await open(installUrl);\n\n if (!yes) {\n await prompt(chalk.white(\"Press Enter when done...\"), \"y\");\n } else {\n console.log(chalk.gray(\"Waiting for GitHub configuration (polling)...\"));\n const deadline = Date.now() + 120_000;\n while (Date.now() < deadline) {\n await new Promise((r) => setTimeout(r, 2000));\n try {\n const status = await client.getGitHubConnectionStatus();\n if (status.is_connected) {\n if (!repoName) return { ok: true, api: client };\n const [o, r] = repoName.split(\"/\");\n if (o && r && (await checkRepoAccess(client, o, r))) {\n return { ok: true, api: client };\n }\n }\n } catch (e) {\n if (e instanceof ApiUnauthorizedError && reauth) {\n client = await reauth();\n await client.testAuth();\n continue;\n }\n }\n }\n }\n\n return { ok: true, api: client };\n } catch (e) {\n if (e instanceof ApiUnauthorizedError) {\n console.log(chalk.red(\"\\n✗ Session expired or API key invalid.\"));\n process.exit(1);\n }\n console.log(chalk.yellow(\"\\n⚠️ Unable to open browser automatically\"));\n console.log(\n chalk.white(\"Please visit: \") +\n chalk.cyan(\"https://manufact.com/cloud/settings\")\n );\n return { ok: false, api: client };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main deploy command\n// ---------------------------------------------------------------------------\n\nexport async function deployCommand(options: DeployOptions): Promise<void> {\n try {\n const cwd = process.cwd();\n\n // ── Step 1: Auth ──────────────────────────────────────────────\n if (!(await isLoggedIn())) {\n console.log(chalk.cyan.bold(\"Welcome to Manufact Cloud!\\n\"));\n if (options.yes) {\n console.log(\n chalk.red(\n \"✗ Not logged in. Run \" +\n chalk.white(\"npx mcp-use login\") +\n \" first.\"\n )\n );\n process.exit(1);\n }\n\n const shouldLogin = await prompt(\n chalk.white(\"You need to log in to deploy. Log in now? (Y/n): \"),\n \"y\"\n );\n if (!shouldLogin) {\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(0);\n }\n\n try {\n await loginCommand({ silent: false });\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ Login failed. Please try again.\"));\n process.exit(1);\n }\n console.log(chalk.gray(\"\\nContinuing with deployment...\\n\"));\n } catch (error) {\n console.error(\n chalk.red.bold(\"✗ Login failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n }\n\n let api = await McpUseAPI.create();\n\n // ── Step 2: Org resolution ────────────────────────────────────\n let resolvedOrgId: string | undefined;\n\n if (options.org) {\n const authInfo = await api.testAuth();\n const match = (authInfo.orgs ?? []).find(\n (o) =>\n o.slug === options.org ||\n o.id === options.org ||\n o.name.toLowerCase() === options.org!.toLowerCase()\n );\n if (match) {\n api.setOrgId(match.id);\n resolvedOrgId = match.id;\n const slug = match.slug ? chalk.gray(` (${match.slug})`) : \"\";\n console.log(\n chalk.gray(\"Organization: \") + chalk.cyan(match.name) + slug\n );\n } else {\n console.error(\n chalk.red(\n `✗ Organization \"${options.org}\" not found. Run ${chalk.white(\"npx mcp-use org list\")} to see available organizations.`\n )\n );\n process.exit(1);\n }\n } else {\n const config = await readConfig();\n if (!config.orgId) {\n const authInfo = await api.testAuth();\n if (authInfo.orgs.length === 0) {\n console.log(\n chalk.red(\n \"✗ No organizations found. Please create one at manufact.com/cloud.\"\n )\n );\n process.exit(1);\n }\n let selectedOrg: OrgInfo | null;\n if (authInfo.orgs.length === 1) {\n selectedOrg = authInfo.orgs[0];\n } else {\n selectedOrg = await promptOrgSelection(\n authInfo.orgs,\n authInfo.default_org_id\n );\n }\n if (!selectedOrg) {\n console.log(chalk.red(\"✗ No organization selected.\"));\n process.exit(1);\n }\n api.setOrgId(selectedOrg.id);\n resolvedOrgId = selectedOrg.id;\n await writeConfig({\n ...config,\n orgId: selectedOrg.id,\n orgName: selectedOrg.name,\n orgSlug: selectedOrg.slug ?? undefined,\n });\n console.log(\n chalk.gray(\"Organization: \") + chalk.cyan(selectedOrg.name)\n );\n } else {\n resolvedOrgId = config.orgId;\n api.setOrgId(config.orgId);\n if (config.orgName) {\n const slug = config.orgSlug ? chalk.gray(` (${config.orgSlug})`) : \"\";\n console.log(\n chalk.gray(\"Organization: \") + chalk.cyan(config.orgName) + slug\n );\n }\n }\n }\n\n api = await ensureApiSessionForDeploy(api, options, resolvedOrgId);\n\n console.log(chalk.cyan.bold(\"\\n🚀 Deploying to Manufact cloud...\\n\"));\n\n // ── Step 3: GitHub connection ─────────────────────────────────\n const reauth = () => promptReauthenticateOn401(options, resolvedOrgId);\n\n let ghConn = await getGitHubConnectionStatusWith401Retry(\n api,\n options,\n resolvedOrgId\n );\n api = ghConn.api;\n let connectionStatus = ghConn.status;\n\n if (!connectionStatus.is_connected) {\n const installed = await promptGitHubInstallation(\n api,\n \"not_connected\",\n undefined,\n {\n yes: options.yes,\n reauth,\n }\n );\n if (!installed.ok) {\n console.log(chalk.gray(\"Deployment cancelled.\"));\n process.exit(0);\n }\n api = installed.api;\n ghConn = await getGitHubConnectionStatusWith401Retry(\n api,\n options,\n resolvedOrgId\n );\n api = ghConn.api;\n connectionStatus = ghConn.status;\n if (!connectionStatus.is_connected) {\n console.log(chalk.red(\"\\n✗ GitHub connection could not be verified.\"));\n console.log(\n chalk.cyan(\n \" Visit https://manufact.com/cloud/settings to connect GitHub.\\n\"\n )\n );\n process.exit(1);\n }\n }\n\n const installations = connectionStatus.installations ?? [];\n if (installations.length === 0) {\n console.log(chalk.red(\"✗ No GitHub installations found.\"));\n process.exit(1);\n }\n\n console.log(chalk.green(\"✓ GitHub connected\\n\"));\n\n // Resolved later based on user selection or repo ownership.\n let installationDbId: string | undefined;\n let githubInstallationId: string | undefined;\n\n // ── Step 4: Project & Git ─────────────────────────────────────\n const projectDir = options.rootDir\n ? path.resolve(cwd, options.rootDir)\n : cwd;\n\n if (options.rootDir) {\n try {\n await fs.access(projectDir);\n } catch {\n console.log(\n chalk.red(`✗ Root directory not found: ${options.rootDir}`)\n );\n process.exit(1);\n }\n }\n\n const isMcp = await isMcpProject(projectDir);\n if (!isMcp && !options.yes) {\n console.log(\n chalk.yellow(\"⚠️ This doesn't look like an MCP server project.\")\n );\n const shouldContinue = await prompt(\n chalk.white(\"Continue anyway? (y/n): \")\n );\n if (!shouldContinue) {\n process.exit(0);\n }\n console.log();\n }\n\n let gitInfo = await getGitInfo(cwd);\n let repoFullName: string | undefined;\n let branch: string = \"main\";\n\n if (!gitInfo.isGitRepo || !gitInfo.remoteUrl) {\n // No git repo or no remote — offer to create one\n const projectName = options.name || (await getProjectName(projectDir));\n\n console.log(chalk.yellow(\"⚠️ No GitHub remote found.\\n\"));\n if (options.yes) {\n console.log(chalk.gray(\"Creating GitHub repository automatically...\"));\n } else {\n const shouldCreate = await prompt(\n chalk.white(\"Create a GitHub repository and push your code? (Y/n): \"),\n \"y\"\n );\n if (!shouldCreate) {\n console.log(\n chalk.gray(\n \"Deployment cancelled. Set up a GitHub remote and try again.\"\n )\n );\n process.exit(0);\n }\n }\n\n // Let the user pick which GitHub account to create the repo under.\n // Default to the first org-type installation (org accounts support auto-create).\n const defaultIdx = installations.findIndex(\n (i) => i.account_type === \"Organization\"\n );\n let selectedIdx = defaultIdx >= 0 ? defaultIdx : 0;\n\n if (installations.length > 1 && !options.yes) {\n console.log(\n chalk.cyan.bold(\"🐙 Select a GitHub account for the repository:\\n\")\n );\n for (let i = 0; i < installations.length; i++) {\n const inst = installations[i];\n const typeLabel =\n inst.account_type === \"Organization\"\n ? chalk.gray(\" (org)\")\n : chalk.gray(\" (personal)\");\n const marker = i === selectedIdx ? chalk.green(\" ← default\") : \"\";\n console.log(\n ` ${chalk.white(`${i + 1}.`)} ${inst.account_login}${typeLabel}${marker}`\n );\n }\n console.log();\n\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n const answer = await new Promise<string>((resolve) => {\n rl.question(\n chalk.gray(`Enter number [${selectedIdx + 1}]: `),\n (a) => {\n rl.close();\n resolve(a.trim());\n }\n );\n });\n const parsed = answer === \"\" ? selectedIdx : parseInt(answer, 10) - 1;\n if (parsed >= 0 && parsed < installations.length) {\n selectedIdx = parsed;\n }\n }\n\n const repoInstallation = installations[selectedIdx];\n installationDbId = repoInstallation.id;\n githubInstallationId = repoInstallation.installation_id;\n\n const repoName = options.yes\n ? projectName\n : await promptText(chalk.gray(\"Repository name:\"), projectName);\n\n await ensureGitignore(cwd);\n\n console.log(\n chalk.gray(\n `Creating repository on ${repoInstallation.account_login}...`\n )\n );\n\n let repoResult: { fullName: string; cloneUrl: string; htmlUrl: string };\n try {\n repoResult = await api.createGitHubRepo({\n installationId: repoInstallation.installation_id,\n name: repoName,\n private: true,\n org: repoInstallation.account_login,\n });\n } catch (err) {\n if (err instanceof GitHubAuthRequiredError) {\n console.log(\n chalk.yellow(\n `\\n Personal accounts require a one-time GitHub authorization.\\n`\n )\n );\n try {\n await open(err.authorizeUrl);\n console.log(\n chalk.gray(\" Browser opened. Authorize and return here.\\n\")\n );\n } catch {\n console.log(\n chalk.gray(\n ` Open this URL in your browser:\\n ${err.authorizeUrl}\\n`\n )\n );\n }\n const readline = await import(\"node:readline\");\n await new Promise<void>((resolve) => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n rl.question(\n chalk.gray(\" Press Enter after authorizing...\"),\n () => {\n rl.close();\n resolve();\n }\n );\n });\n console.log(chalk.gray(\"Retrying repository creation...\"));\n repoResult = await api.createGitHubRepo({\n installationId: repoInstallation.installation_id,\n name: repoName,\n private: true,\n org: repoInstallation.account_login,\n });\n } else {\n throw err;\n }\n }\n console.log(chalk.green(`✓ Created ${chalk.cyan(repoResult.fullName)}`));\n\n try {\n if (!gitInfo.isGitRepo) {\n await ensureGitignore(cwd);\n console.log(chalk.gray(\"Initializing git...\"));\n await gitInit(cwd, \"Initial commit\");\n console.log(chalk.gray(\"Pushing to GitHub...\"));\n await gitAddRemoteAndPush(cwd, repoResult.cloneUrl, \"main\");\n } else {\n if (await hasUncommittedChanges(cwd)) {\n console.log(\n chalk.red(\n \"✗ You have uncommitted changes. Commit and push before deploying.\"\n )\n );\n process.exit(1);\n }\n console.log(chalk.gray(\"Adding remote and pushing...\"));\n await gitAddRemoteAndPush(\n cwd,\n repoResult.cloneUrl,\n gitInfo.branch || \"main\"\n );\n }\n } catch (err) {\n if (err instanceof GitCommandError) {\n console.log(chalk.red(`\\n✗ Git step failed: \\`${err.command}\\``));\n const stderrTrimmed = (err.stderr || err.stdout).trim();\n if (stderrTrimmed) {\n console.log(chalk.gray(stderrTrimmed));\n }\n // Actionable hint for the most common failure: missing identity.\n if (/tell me who you are|user\\.email|user\\.name/i.test(err.stderr)) {\n console.log(\n chalk.yellow(\n \"\\n Set your git identity for this project and retry:\\n\" +\n ` git -C ${JSON.stringify(cwd)} config user.email \"you@example.com\"\\n` +\n ` git -C ${JSON.stringify(cwd)} config user.name \"Your Name\"`\n )\n );\n } else if (\n /non-fast-forward|rejected|unrelated histories/i.test(err.stderr)\n ) {\n console.log(\n chalk.yellow(\n \"\\n The remote branch already has commits. Either delete the empty GitHub repo and retry, \" +\n \"or reconcile manually:\\n\" +\n \" git pull --rebase origin main --allow-unrelated-histories\\n\" +\n \" git push -u origin main\"\n )\n );\n }\n process.exit(1);\n }\n throw err;\n }\n\n console.log(chalk.green(\"✓ Code pushed to GitHub\\n\"));\n\n gitInfo = await getGitInfo(cwd);\n repoFullName = repoResult.fullName;\n branch = gitInfo.branch || \"main\";\n } else if (!isGitHubUrl(gitInfo.remoteUrl!)) {\n console.log(chalk.red(\"✗ Remote is not a GitHub repository\"));\n console.log(chalk.yellow(` Current remote: ${gitInfo.remoteUrl}\\n`));\n process.exit(1);\n } else if (!gitInfo.owner || !gitInfo.repo) {\n console.log(chalk.red(\"✗ Could not parse GitHub repository information\"));\n process.exit(1);\n } else {\n repoFullName = `${gitInfo.owner}/${gitInfo.repo}`;\n branch = gitInfo.branch || \"main\";\n\n // Resolve installation matching the repo owner\n const ownerLower = gitInfo.owner!.toLowerCase();\n const matchingInst =\n installations.find(\n (i) => i.account_login.toLowerCase() === ownerLower\n ) ??\n installations.find((i) => i.account_type === \"Organization\") ??\n installations[0];\n installationDbId = matchingInst.id;\n githubInstallationId = matchingInst.installation_id;\n\n // Check for uncommitted changes\n if (gitInfo.hasUncommittedChanges) {\n if (options.yes) {\n console.log(\n chalk.red(\n \"✗ You have uncommitted changes. Commit and push before deploying.\"\n )\n );\n process.exit(1);\n }\n console.log(chalk.yellow(\"⚠️ You have uncommitted changes.\\n\"));\n const shouldCommit = await prompt(\n chalk.white(\"Commit and push changes before deploying? (Y/n): \"),\n \"y\"\n );\n if (shouldCommit) {\n await ensureGitignore(cwd);\n console.log(chalk.gray(\"Committing and pushing...\"));\n await gitCommitAndPush(cwd, \"Deploy changes\", branch);\n gitInfo = await getGitInfo(cwd);\n console.log(chalk.green(\"✓ Changes pushed\\n\"));\n } else {\n console.log(chalk.gray(\"Deploying from last pushed commit.\\n\"));\n }\n }\n\n // Check repo access\n console.log(chalk.gray(\"Checking repository access...\"));\n const hasAccess = await checkRepoAccess(\n api,\n gitInfo.owner!,\n gitInfo.repo!\n );\n if (!hasAccess) {\n console.log(\n chalk.yellow(\n `⚠️ GitHub App doesn't have access to ${chalk.cyan(repoFullName)}`\n )\n );\n const configured = await promptGitHubInstallation(\n api,\n \"no_access\",\n repoFullName,\n {\n yes: options.yes,\n installationId: githubInstallationId,\n reauth: () => promptReauthenticateOn401(options, resolvedOrgId),\n }\n );\n if (!configured.ok) {\n process.exit(0);\n }\n api = configured.api;\n const retry = await checkRepoAccess(api, gitInfo.owner!, gitInfo.repo!);\n if (!retry) {\n const appName = await api.getGitHubAppName();\n console.log(\n chalk.red(\n `\\n✗ Repository ${chalk.cyan(repoFullName)} is still not accessible.`\n )\n );\n console.log(\n chalk.cyan(\n ` https://github.com/apps/${appName}/installations/new\\n`\n )\n );\n process.exit(1);\n }\n }\n console.log(chalk.green(\"✓ Repository access confirmed\"));\n }\n\n // ── Step 5: Display config ────────────────────────────────────\n const projectName = options.name || (await getProjectName(projectDir));\n const port = options.port || 3000;\n const buildCommand = await detectBuildCommand(projectDir);\n const startCommand = await detectStartCommand(projectDir);\n const runtime = options.runtime || (await detectRuntime(projectDir));\n const envVars = await buildEnvVars(options);\n\n console.log();\n console.log(chalk.white(\"Deployment configuration:\"));\n console.log(chalk.gray(` Repository: `) + chalk.cyan(repoFullName));\n console.log(chalk.gray(` Branch: `) + chalk.cyan(branch));\n console.log(chalk.gray(` Name: `) + chalk.cyan(projectName));\n console.log(chalk.gray(` Runtime: `) + chalk.cyan(runtime));\n console.log(chalk.gray(` Port: `) + chalk.cyan(port));\n if (options.region)\n console.log(chalk.gray(` Region: `) + chalk.cyan(options.region));\n if (options.buildCommand)\n console.log(\n chalk.gray(` Build command: `) + chalk.cyan(options.buildCommand)\n );\n else if (buildCommand)\n console.log(\n chalk.gray(` Build command: `) +\n chalk.gray(buildCommand + \" (auto-detected)\")\n );\n if (options.startCommand)\n console.log(\n chalk.gray(` Start command: `) + chalk.cyan(options.startCommand)\n );\n else if (startCommand)\n console.log(\n chalk.gray(` Start command: `) +\n chalk.gray(startCommand + \" (auto-detected)\")\n );\n if (Object.keys(envVars).length > 0) {\n console.log(\n chalk.gray(` Environment: `) +\n chalk.cyan(`${Object.keys(envVars).length} variable(s)`)\n );\n }\n console.log();\n\n if (!options.yes) {\n const shouldDeploy = await prompt(chalk.white(`Deploy? (Y/n): `), \"y\");\n if (!shouldDeploy) {\n console.log(chalk.gray(\"Deployment cancelled.\"));\n process.exit(0);\n }\n }\n\n // ── Step 6: Deploy ────────────────────────────────────────────\n const existingLink = !options.new ? await getProjectLink(cwd) : null;\n let serverId = existingLink?.serverId;\n\n if (existingLink && serverId) {\n try {\n const existingDep = await api.getDeployment(existingLink.deploymentId);\n if (existingDep && existingDep.status !== \"failed\") {\n console.log(chalk.green(`✓ Found linked server`));\n console.log(chalk.gray(` Redeploying to maintain the same URL...`));\n console.log(chalk.cyan(` URL: ${getMcpServerUrl(existingDep)}\\n`));\n\n const newDep = await api.createDeployment({\n serverId,\n branch,\n trigger: \"redeploy\",\n });\n\n await saveProjectLink(cwd, {\n ...existingLink,\n linkedAt: new Date().toISOString(),\n deploymentId: newDep.id,\n });\n\n console.log(\n chalk.green(\"✓ Deployment created: \") + chalk.gray(newDep.id)\n );\n await displayDeploymentProgress(api, newDep.id, { yes: options.yes });\n return;\n }\n } catch (err: any) {\n const is404 =\n err?.status === 404 || (err?.message ?? \"\").includes(\"404\");\n if (is404) {\n console.log(\n chalk.yellow(\"⚠️ Previously linked server no longer exists.\\n\")\n );\n if (!options.yes) {\n const shouldRecreate = await prompt(\n chalk.white(\"Create a new server and deploy? (Y/n): \"),\n \"y\"\n );\n if (!shouldRecreate) {\n console.log(chalk.gray(\"Deployment cancelled.\"));\n process.exit(0);\n }\n }\n serverId = undefined;\n }\n }\n }\n\n let deploymentId: string | undefined;\n\n if (serverId) {\n console.log(chalk.gray(\"Creating deployment...\"));\n try {\n const result = await api.createDeployment({\n serverId,\n branch,\n trigger: \"manual\",\n });\n deploymentId = result.id;\n } catch (err: any) {\n const is404 =\n err?.status === 404 || (err?.message ?? \"\").includes(\"404\");\n if (is404) {\n console.log(\n chalk.yellow(\n \"⚠️ Linked server no longer exists. Creating a new one...\\n\"\n )\n );\n serverId = undefined;\n } else {\n throw err;\n }\n }\n }\n\n if (!serverId) {\n const orgId = await api.resolveOrganizationId();\n\n if (!installationDbId) {\n console.log(\n chalk.red(\n \"✗ Could not determine GitHub installation for this repository.\"\n )\n );\n process.exit(1);\n }\n\n console.log(chalk.gray(\"Creating server and deployment...\"));\n const serverResult = await api.createServer({\n type: \"github\",\n organizationId: orgId,\n installationId: installationDbId,\n name: projectName,\n repoFullName: repoFullName!,\n branch,\n rootDir: options.rootDir,\n port,\n env: Object.keys(envVars).length > 0 ? envVars : undefined,\n region: options.region,\n buildCommand: options.buildCommand,\n startCommand: options.startCommand,\n });\n\n deploymentId = serverResult.deploymentId ?? \"\";\n if (!deploymentId) {\n console.log(\n chalk.green(\"✓ Server created: \") + chalk.gray(serverResult.server.id)\n );\n console.log(chalk.yellow(\"⚠️ No deployment was triggered.\"));\n return;\n }\n\n await saveProjectLink(cwd, {\n deploymentId,\n deploymentName: projectName,\n linkedAt: new Date().toISOString(),\n serverId: serverResult.server.id,\n });\n console.log(\n chalk.gray(` Linked to this project (stored in .mcp-use/project.json)`)\n );\n console.log(chalk.gray(` Future deploys will reuse the same URL\\n`));\n }\n\n if (!deploymentId) {\n console.log(chalk.red(\"✗ No deployment was created.\"));\n process.exit(1);\n }\n\n console.log(\n chalk.green(\"✓ Deployment created: \") + chalk.gray(deploymentId)\n );\n await displayDeploymentProgress(api, deploymentId, { yes: options.yes });\n\n if (options.open) {\n const dep = await api.getDeployment(deploymentId);\n const url = getMcpServerUrl(dep);\n if (url) {\n console.log(chalk.gray(\"\\nOpening in browser...\"));\n await open(url);\n }\n }\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Deployment failed:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n","import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface GitInfo {\n isGitRepo: boolean;\n remoteUrl?: string;\n owner?: string;\n repo?: string;\n branch?: string;\n commitSha?: string;\n commitMessage?: string;\n hasUncommittedChanges?: boolean;\n}\n\n/**\n * Read-only git probe. Swallows errors and returns `null` so callers can treat\n * \"command failed\" identically to \"empty output\" (e.g. not a repo, no remote).\n *\n * DO NOT use this for state-mutating commands (init/add/commit/push/remote add).\n * Use `gitCommandOrThrow` instead so failures surface to the user.\n */\nasync function gitCommand(\n args: string[],\n cwd: string = process.cwd()\n): Promise<string | null> {\n try {\n const { stdout } = await execFileAsync(\"git\", args, { cwd });\n return stdout.trim();\n } catch (error) {\n return null;\n }\n}\n\n/**\n * Error thrown by `gitCommandOrThrow` when a git command exits non-zero.\n * Carries the command string plus captured stderr/stdout for actionable errors.\n */\nexport class GitCommandError extends Error {\n readonly command: string;\n readonly stderr: string;\n readonly stdout: string;\n readonly exitCode: number | null;\n\n constructor(opts: {\n command: string;\n stderr: string;\n stdout: string;\n exitCode: number | null;\n }) {\n const trimmed = opts.stderr.trim() || opts.stdout.trim() || \"unknown error\";\n super(`git command failed: \\`${opts.command}\\`\\n${trimmed}`);\n this.name = \"GitCommandError\";\n this.command = opts.command;\n this.stderr = opts.stderr;\n this.stdout = opts.stdout;\n this.exitCode = opts.exitCode;\n }\n}\n\n/**\n * Execute a git command that MUST succeed. On non-zero exit, throws\n * `GitCommandError` with captured stderr so the caller can show actionable\n * errors instead of silently continuing.\n */\nasync function gitCommandOrThrow(\n args: string[],\n cwd: string = process.cwd()\n): Promise<string> {\n const command = `git ${args.join(\" \")}`;\n try {\n const { stdout } = await execFileAsync(\"git\", args, { cwd });\n return stdout.trim();\n } catch (error) {\n const e = error as {\n stderr?: string;\n stdout?: string;\n code?: number | null;\n message?: string;\n };\n throw new GitCommandError({\n command,\n stderr: (e.stderr ?? \"\").toString(),\n stdout: (e.stdout ?? \"\").toString(),\n exitCode: typeof e.code === \"number\" ? e.code : null,\n });\n }\n}\n\n/**\n * Check if directory is a git repository\n */\nexport async function isGitRepo(cwd: string = process.cwd()): Promise<boolean> {\n const result = await gitCommand([\"rev-parse\", \"--is-inside-work-tree\"], cwd);\n return result === \"true\";\n}\n\n/**\n * Get git remote URL\n */\nexport async function getRemoteUrl(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand([\"config\", \"--get\", \"remote.origin.url\"], cwd);\n}\n\n/**\n * Parse GitHub owner and repo from remote URL\n */\nexport function parseGitHubUrl(\n url: string\n): { owner: string; repo: string } | null {\n // Handle both SSH and HTTPS URLs\n // SSH: git@github.com:owner/repo.git\n // HTTPS: https://github.com/owner/repo.git\n const sshMatch = url.match(/git@github\\.com:([^/]+)\\/(.+?)(?:\\.git)?$/);\n const httpsMatch = url.match(\n /https:\\/\\/github\\.com\\/([^/]+)\\/(.+?)(?:\\.git)?$/\n );\n\n const match = sshMatch || httpsMatch;\n if (!match) return null;\n\n return {\n owner: match[1],\n repo: match[2],\n };\n}\n\n/**\n * Get current branch\n */\nexport async function getCurrentBranch(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand([\"rev-parse\", \"--abbrev-ref\", \"HEAD\"], cwd);\n}\n\n/**\n * Get current commit SHA\n */\nexport async function getCommitSha(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand([\"rev-parse\", \"HEAD\"], cwd);\n}\n\n/**\n * Get current commit message\n */\nexport async function getCommitMessage(\n cwd: string = process.cwd()\n): Promise<string | null> {\n return gitCommand([\"log\", \"-1\", \"--pretty=%B\"], cwd);\n}\n\n/**\n * Check if there are uncommitted changes\n */\nexport async function hasUncommittedChanges(\n cwd: string = process.cwd()\n): Promise<boolean> {\n const result = await gitCommand([\"status\", \"--porcelain\"], cwd);\n return result !== null && result.length > 0;\n}\n\n/**\n * Get all git info for current directory\n */\nexport async function getGitInfo(\n cwd: string = process.cwd()\n): Promise<GitInfo> {\n const isRepo = await isGitRepo(cwd);\n\n if (!isRepo) {\n return { isGitRepo: false };\n }\n\n const remoteUrl = await getRemoteUrl(cwd);\n const branch = await getCurrentBranch(cwd);\n const commitSha = await getCommitSha(cwd);\n const commitMessage = await getCommitMessage(cwd);\n const uncommittedChanges = await hasUncommittedChanges(cwd);\n\n let owner: string | undefined;\n let repo: string | undefined;\n\n if (remoteUrl) {\n const parsed = parseGitHubUrl(remoteUrl);\n if (parsed) {\n owner = parsed.owner;\n repo = parsed.repo;\n }\n }\n\n return {\n isGitRepo: true,\n remoteUrl: remoteUrl || undefined,\n owner,\n repo,\n branch: branch || undefined,\n commitSha: commitSha || undefined,\n commitMessage: commitMessage || undefined,\n hasUncommittedChanges: uncommittedChanges,\n };\n}\n\n/**\n * Initialize a git repo, add all files, commit, and normalize branch to `main`.\n *\n * Throws `GitCommandError` (typed Error) on any failure so callers can surface\n * the real stderr instead of silently continuing (previous behavior left the\n * repo in a half-baked state and the CLI still printed \"Code pushed\").\n */\nexport async function gitInit(\n cwd: string,\n message: string = \"Initial commit\"\n): Promise<void> {\n await gitCommandOrThrow([\"init\"], cwd);\n await gitCommandOrThrow([\"add\", \".\"], cwd);\n await gitCommandOrThrow([\"commit\", \"-m\", message], cwd);\n // Normalize branch name so a subsequent `git push -u origin main` always\n // matches, regardless of the user's `init.defaultBranch` config.\n await gitCommandOrThrow([\"branch\", \"-M\", \"main\"], cwd);\n // Guard: commit must exist before we try to push.\n await gitCommandOrThrow([\"rev-parse\", \"HEAD\"], cwd);\n}\n\n/**\n * Add a remote and push to it. Throws `GitCommandError` on failure.\n */\nexport async function gitAddRemoteAndPush(\n cwd: string,\n cloneUrl: string,\n branch: string = \"main\"\n): Promise<void> {\n await gitCommandOrThrow([\"remote\", \"add\", \"origin\", cloneUrl], cwd);\n await gitCommandOrThrow([\"push\", \"-u\", \"origin\", branch], cwd);\n}\n\n/**\n * Commit all changes and push. Throws `GitCommandError` on failure.\n */\nexport async function gitCommitAndPush(\n cwd: string,\n message: string,\n branch: string = \"main\"\n): Promise<void> {\n await gitCommandOrThrow([\"add\", \".\"], cwd);\n await gitCommandOrThrow([\"commit\", \"-m\", message], cwd);\n await gitCommandOrThrow([\"push\", \"origin\", branch], cwd);\n}\n\n/**\n * Check if remote is a GitHub URL\n */\nexport function isGitHubUrl(url: string): boolean {\n try {\n // Handle HTTP(S) URLs\n const parsedUrl = new URL(url);\n return (\n parsedUrl.hostname === \"github.com\" ||\n parsedUrl.hostname === \"www.github.com\"\n );\n } catch {\n // Handle SSH/shortened git URLs: git@github.com:user/repo.git\n // Extract the host before the \":\" or \"/\" (if git@host:repo or git@host/repo)\n const sshMatch = url.match(/^git@([^:/]+)[:/]/);\n if (sshMatch) {\n const host = sshMatch[1];\n return host === \"github.com\" || host === \"www.github.com\";\n }\n }\n return false;\n}\n","import type { Deployment } from \"./api.js\";\n\nconst GATEWAY_DOMAIN = \"run.mcp-use.com\";\n\nexport function buildGatewayUrl(slugOrId: string): string {\n return `https://${slugOrId}.${GATEWAY_DOMAIN}/mcp`;\n}\n\n/** MCP URL for a deployment: explicit `mcpUrl`, else gateway URL from `serverId`. */\nexport function getMcpServerUrl(deployment: Deployment): string {\n if (deployment.mcpUrl) return deployment.mcpUrl;\n if (deployment.serverId) return buildGatewayUrl(deployment.serverId);\n return \"\";\n}\n\n/**\n * MCP URL for a cloud server row/detail: use API `mcpUrl` when set; otherwise\n * gateway host uses **slug** when present (matches production hostnames), else `id`.\n */\nexport function getMcpServerUrlForCloudServer(server: {\n mcpUrl?: string | null;\n slug?: string | null;\n id: string;\n}): string {\n if (server.mcpUrl) return server.mcpUrl;\n const hostKey = (server.slug && server.slug.trim()) || server.id;\n return buildGatewayUrl(hostKey);\n}\n","import { promises as fs } from \"node:fs\";\nimport path from \"node:path\";\n\nexport const MCP_USE_DIR = \".mcp-use\";\nexport const MCP_USE_DIR_PROJECT = \"project.json\";\n\nexport interface ProjectLink {\n deploymentId: string;\n deploymentName: string;\n deploymentUrl?: string;\n linkedAt: string;\n serverId?: string;\n}\n\n// Get .mcp-use directory path\nexport function getMcpUseDirectory(cwd: string): string {\n return path.join(cwd, MCP_USE_DIR);\n}\n\n// Read project link\nexport async function getProjectLink(cwd: string): Promise<ProjectLink | null> {\n try {\n const linkPath = path.join(getMcpUseDirectory(cwd), MCP_USE_DIR_PROJECT);\n const content = await fs.readFile(linkPath, \"utf-8\");\n return JSON.parse(content);\n } catch (err: any) {\n if (err.code === \"ENOENT\") return null;\n throw err;\n }\n}\n\n// Write project link\nexport async function saveProjectLink(\n cwd: string,\n link: ProjectLink\n): Promise<void> {\n const mcpUseDir = getMcpUseDirectory(cwd);\n await fs.mkdir(mcpUseDir, { recursive: true });\n\n const linkPath = path.join(mcpUseDir, MCP_USE_DIR_PROJECT);\n await fs.writeFile(linkPath, JSON.stringify(link, null, 2), \"utf-8\");\n\n // Add to .gitignore\n await addToGitIgnore(cwd);\n}\n\n// Add .mcp-use to .gitignore\nasync function addToGitIgnore(cwd: string): Promise<void> {\n const gitignorePath = path.join(cwd, \".gitignore\");\n try {\n let content = \"\";\n try {\n content = await fs.readFile(gitignorePath, \"utf-8\");\n } catch (err: any) {\n if (err.code !== \"ENOENT\") throw err;\n }\n\n if (!content.includes(MCP_USE_DIR)) {\n const newContent =\n content +\n (content.endsWith(\"\\n\") ? \"\" : \"\\n\") +\n `\\n# mcp-use deployment\\n${MCP_USE_DIR}\\n`;\n await fs.writeFile(gitignorePath, newContent, \"utf-8\");\n }\n } catch (err) {\n // Ignore gitignore errors\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { McpUseAPI } from \"../utils/api.js\";\nimport { getMcpServerUrl } from \"../utils/cloud-urls.js\";\nimport { isLoggedIn } from \"../utils/config.js\";\nimport { formatRelativeTime } from \"../utils/format.js\";\n\nasync function prompt(question: string): Promise<boolean> {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n const trimmedAnswer = answer.trim().toLowerCase();\n resolve(trimmedAnswer === \"y\" || trimmedAnswer === \"yes\");\n });\n });\n}\n\nfunction getStatusColor(status: string): (text: string) => string {\n switch (status) {\n case \"running\":\n return chalk.green;\n case \"building\":\n case \"pending\":\n return chalk.yellow;\n case \"failed\":\n case \"stopped\":\n return chalk.red;\n default:\n return chalk.gray;\n }\n}\n\nfunction formatId(id: string): string {\n return id;\n}\n\nasync function listDeploymentsCommand(): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n const deployments = await api.listDeployments();\n\n const sortedDeployments = [...deployments].sort(\n (a, b) =>\n new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()\n );\n\n if (sortedDeployments.length === 0) {\n console.log(chalk.yellow(\"No deployments found.\"));\n console.log(\n chalk.gray(\n \"\\nDeploy your first MCP server with \" + chalk.white(\"mcp-use deploy\")\n )\n );\n return;\n }\n\n console.log(\n chalk.cyan.bold(`\\n📦 Deployments (${sortedDeployments.length})\\n`)\n );\n\n console.log(\n chalk.white.bold(\n `${\"ID\".padEnd(40)} ${\"NAME\".padEnd(25)} ${\"STATUS\".padEnd(12)} ${\"MCP URL\".padEnd(45)} ${\"CREATED\"}`\n )\n );\n console.log(chalk.gray(\"─\".repeat(140)));\n\n for (const deployment of sortedDeployments) {\n const id = formatId(deployment.id).padEnd(40);\n const name = deployment.name.substring(0, 24).padEnd(25);\n const statusColor = getStatusColor(deployment.status);\n const status = statusColor(deployment.status.padEnd(12));\n const mcpUrl = (deployment.mcpUrl || \"-\").substring(0, 44).padEnd(45);\n const created = formatRelativeTime(deployment.createdAt);\n\n console.log(\n `${chalk.gray(id)} ${name} ${status} ${chalk.cyan(mcpUrl)} ${chalk.gray(created)}`\n );\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to list deployments:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function getDeploymentCommand(deploymentId: string): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n const deployment = await api.getDeployment(deploymentId);\n\n console.log(chalk.cyan.bold(\"\\n📦 Deployment Details\\n\"));\n\n console.log(chalk.white(\"ID: \") + chalk.gray(deployment.id));\n console.log(chalk.white(\"Name: \") + chalk.cyan(deployment.name));\n\n const statusColor = getStatusColor(deployment.status);\n console.log(\n chalk.white(\"Status: \") + statusColor(deployment.status)\n );\n\n if (deployment.serverId) {\n console.log(\n chalk.white(\"Server ID: \") + chalk.gray(deployment.serverId)\n );\n }\n\n const mcpUrl = getMcpServerUrl(deployment);\n if (mcpUrl) {\n console.log(chalk.white(\"MCP URL: \") + chalk.cyan(mcpUrl));\n }\n\n if (deployment.gitBranch) {\n console.log(\n chalk.white(\"Branch: \") + chalk.gray(deployment.gitBranch)\n );\n }\n if (deployment.gitCommitSha) {\n console.log(\n chalk.white(\"Commit: \") +\n chalk.gray(deployment.gitCommitSha.substring(0, 7))\n );\n }\n\n if (deployment.port) {\n console.log(chalk.white(\"Port: \") + chalk.gray(deployment.port));\n }\n\n if (deployment.provider) {\n console.log(\n chalk.white(\"Provider: \") + chalk.gray(deployment.provider)\n );\n }\n\n console.log(\n chalk.white(\"Created: \") +\n chalk.gray(formatRelativeTime(deployment.createdAt))\n );\n console.log(\n chalk.white(\"Updated: \") +\n chalk.gray(formatRelativeTime(deployment.updatedAt))\n );\n\n if (deployment.status === \"failed\" && deployment.error) {\n console.log(chalk.red(\"\\nError:\"));\n console.log(chalk.red(` ${deployment.error}`));\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function restartDeploymentCommand(\n deploymentId: string,\n options: { follow?: boolean }\n): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n const deployment = await api.getDeployment(deploymentId);\n\n if (!deployment.serverId) {\n console.log(\n chalk.red(\"✗ Cannot restart: deployment has no linked server.\")\n );\n process.exit(1);\n }\n\n console.log(\n chalk.cyan.bold(`\\n🔄 Restarting deployment: ${deployment.name}\\n`)\n );\n\n const newDep = await api.createDeployment({\n serverId: deployment.serverId,\n trigger: \"redeploy\",\n });\n\n console.log(chalk.green(\"✓ Restart initiated: \") + chalk.gray(newDep.id));\n\n if (options.follow) {\n console.log(chalk.gray(\"\\nFollowing build logs...\\n\"));\n\n let offset = 0;\n let terminal = false;\n while (!terminal) {\n await new Promise((r) => setTimeout(r, 2000));\n try {\n const resp = await api.getDeploymentBuildLogs(newDep.id, offset);\n if (resp.logs.length > 0) {\n const lines = resp.logs.split(\"\\n\").filter((l) => l.trim());\n for (const line of lines) {\n try {\n const logData = JSON.parse(line);\n if (logData.line) {\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n console.log(chalk.gray(line));\n }\n }\n offset = resp.offset;\n }\n if (\n resp.status === \"running\" ||\n resp.status === \"failed\" ||\n resp.status === \"stopped\"\n ) {\n terminal = true;\n }\n } catch {\n // Build logs not ready yet\n }\n }\n } else {\n console.log(\n chalk.gray(\n \"\\nCheck status with: \" +\n chalk.white(`mcp-use deployments get ${newDep.id}`)\n )\n );\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to restart deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function deleteDeploymentCommand(\n deploymentId: string,\n options: { yes?: boolean }\n): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n const deployment = await api.getDeployment(deploymentId);\n\n if (!options.yes) {\n console.log(\n chalk.yellow(\n `\\n⚠️ You are about to delete deployment: ${chalk.white(deployment.name)}`\n )\n );\n console.log(chalk.gray(` ID: ${deployment.id}`));\n if (deployment.mcpUrl) {\n console.log(chalk.gray(` URL: ${deployment.mcpUrl}\\n`));\n }\n\n const confirmed = await prompt(\n chalk.white(\"Are you sure you want to delete this deployment? (y/N): \")\n );\n\n if (!confirmed) {\n console.log(chalk.gray(\"Deletion cancelled.\"));\n return;\n }\n }\n\n await api.deleteDeployment(deploymentId);\n console.log(\n chalk.green.bold(`\\n✓ Deployment deleted: ${deployment.name}\\n`)\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to delete deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function logsCommand(\n deploymentId: string,\n options: { build?: boolean; follow?: boolean }\n): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n\n if (options.follow) {\n console.log(chalk.gray(\"Following build logs...\\n\"));\n\n let offset = 0;\n let terminal = false;\n while (!terminal) {\n await new Promise((r) => setTimeout(r, 2000));\n try {\n const resp = await api.getDeploymentBuildLogs(deploymentId, offset);\n if (resp.logs.length > 0) {\n const lines = resp.logs.split(\"\\n\").filter((l) => l.trim());\n for (const line of lines) {\n try {\n const logData = JSON.parse(line);\n if (logData.line) {\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n console.log(chalk.gray(line));\n }\n }\n offset = resp.offset;\n }\n if (\n resp.status === \"running\" ||\n resp.status === \"failed\" ||\n resp.status === \"stopped\"\n ) {\n terminal = true;\n }\n } catch {\n // Build logs not ready yet\n }\n }\n } else if (options.build) {\n const resp = await api.getDeploymentBuildLogs(deploymentId);\n const logs = resp.logs;\n\n if (!logs || logs.trim() === \"\") {\n console.log(\n chalk.yellow(\"No build logs available for this deployment.\")\n );\n return;\n }\n\n const logLines = logs.split(\"\\n\").filter((l) => l.trim());\n for (const line of logLines) {\n try {\n const logData = JSON.parse(line);\n if (logData.line) {\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n console.log(chalk.gray(line));\n }\n }\n } else {\n const logs = await api.getDeploymentLogs(deploymentId);\n\n if (!logs || logs.trim() === \"\") {\n console.log(chalk.yellow(\"No logs available for this deployment.\"));\n return;\n }\n\n const logLines = logs.split(\"\\n\").filter((l) => l.trim());\n for (const line of logLines) {\n try {\n const logData = JSON.parse(line);\n if (logData.line) {\n const levelColor =\n logData.level === \"error\"\n ? chalk.red\n : logData.level === \"warn\"\n ? chalk.yellow\n : chalk.gray;\n const stepPrefix = logData.step\n ? chalk.cyan(`[${logData.step}]`) + \" \"\n : \"\";\n console.log(stepPrefix + levelColor(logData.line));\n }\n } catch {\n console.log(chalk.gray(line));\n }\n }\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get logs:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function stopDeploymentCommand(deploymentId: string): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n await api.stopDeployment(deploymentId);\n\n console.log(chalk.green.bold(`\\n✓ Deployment stopped\\n`));\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to stop deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function startDeploymentCommand(deploymentId: string): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n console.log(\n chalk.yellow(\n \"⚠️ Start is not supported in this version. Use `mcp-use deployments restart` to redeploy.\"\n )\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to start deployment:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nexport function createDeploymentsCommand(): Command {\n const deploymentsCommand = new Command(\"deployments\").description(\n \"Manage cloud deployments\"\n );\n\n deploymentsCommand\n .command(\"list\")\n .alias(\"ls\")\n .description(\"List all deployments\")\n .action(listDeploymentsCommand);\n\n deploymentsCommand\n .command(\"get\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .description(\"Get deployment details\")\n .action(getDeploymentCommand);\n\n deploymentsCommand\n .command(\"restart\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .option(\"-f, --follow\", \"Follow build logs\")\n .description(\n \"Restart a deployment (triggers a new deployment on the same server)\"\n )\n .action(restartDeploymentCommand);\n\n deploymentsCommand\n .command(\"delete\")\n .alias(\"rm\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .description(\"Delete a deployment\")\n .action(deleteDeploymentCommand);\n\n deploymentsCommand\n .command(\"logs\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .option(\"-b, --build\", \"Show build logs instead of runtime logs\")\n .option(\"-f, --follow\", \"Follow build logs in real-time\")\n .description(\"View deployment logs\")\n .action(logsCommand);\n\n deploymentsCommand\n .command(\"stop\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .description(\"Stop a deployment\")\n .action(stopDeploymentCommand);\n\n deploymentsCommand\n .command(\"start\")\n .argument(\"<deployment-id>\", \"Deployment ID\")\n .description(\"Start a stopped deployment\")\n .action(startDeploymentCommand);\n\n return deploymentsCommand;\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { McpUseAPI } from \"../utils/api.js\";\nimport { getMcpServerUrlForCloudServer } from \"../utils/cloud-urls.js\";\nimport { getWebUrl, isLoggedIn, readConfig } from \"../utils/config.js\";\nimport { formatRelativeTime } from \"../utils/format.js\";\n\nasync function prompt(question: string): Promise<boolean> {\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n const trimmedAnswer = answer.trim().toLowerCase();\n resolve(trimmedAnswer === \"y\" || trimmedAnswer === \"yes\");\n });\n });\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null;\n}\n\nfunction pickStr(obj: unknown, key: string): string {\n if (!isRecord(obj)) return \"-\";\n const v = obj[key];\n if (typeof v === \"string\") return v;\n if (v != null && typeof v !== \"object\") return String(v);\n return \"-\";\n}\n\nasync function applyOrgOption(api: McpUseAPI, org?: string): Promise<void> {\n if (!org) return;\n const authInfo = await api.testAuth();\n const match = (authInfo.orgs ?? []).find(\n (o) =>\n o.slug === org ||\n o.id === org ||\n o.name.toLowerCase() === org.toLowerCase()\n );\n if (!match) {\n console.error(\n chalk.red(\n `✗ Organization \"${org}\" not found. Run ${chalk.white(\"npx mcp-use org list\")} to see available organizations.`\n )\n );\n process.exit(1);\n }\n api.setOrgId(match.id);\n const slug = match.slug ? chalk.gray(` (${match.slug})`) : \"\";\n console.log(chalk.gray(\"Organization: \") + chalk.cyan(match.name) + slug);\n}\n\nfunction getStatusColor(status: string): (text: string) => string {\n const s = status.toLowerCase();\n if (s.includes(\"run\") || s === \"active\") return chalk.green;\n if (s.includes(\"fail\") || s.includes(\"error\")) return chalk.red;\n if (s.includes(\"build\") || s.includes(\"pend\")) return chalk.yellow;\n return chalk.gray;\n}\n\nasync function listServersCommand(options: {\n org?: string;\n limit?: string;\n skip?: string;\n sort?: string;\n}): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n await applyOrgOption(api, options.org);\n if (options.org) console.log();\n\n const limit = options.limit ? parseInt(options.limit, 10) : undefined;\n const skip = options.skip ? parseInt(options.skip, 10) : undefined;\n if (limit !== undefined && (Number.isNaN(limit) || limit < 1)) {\n console.log(chalk.red(\"✗ Invalid --limit\"));\n process.exit(1);\n }\n if (skip !== undefined && (Number.isNaN(skip) || skip < 0)) {\n console.log(chalk.red(\"✗ Invalid --skip\"));\n process.exit(1);\n }\n\n const servers = await api.listServers({\n limit,\n skip,\n sort: options.sort,\n });\n\n if (servers.length === 0) {\n console.log(chalk.yellow(\"No servers found.\"));\n console.log(\n chalk.gray(\n \"\\nCreate one by deploying with \" + chalk.white(\"mcp-use deploy\")\n )\n );\n return;\n }\n\n console.log(chalk.cyan.bold(`\\n🖥 Servers (${servers.length})\\n`));\n\n console.log(\n chalk.white.bold(\n `${\"ID\".padEnd(38)} ${\"NAME\".padEnd(22)} ${\"STATUS\".padEnd(14)} ${\"REPO\".padEnd(32)} ${\"MCP URL\".padEnd(52)}`\n )\n );\n console.log(chalk.gray(\"─\".repeat(165)));\n\n for (const s of servers) {\n const id = s.id.substring(0, 37).padEnd(38);\n const name = (s.name || s.slug || \"-\").substring(0, 21).padEnd(22);\n const statusColor = getStatusColor(s.status);\n const status = statusColor(s.status.substring(0, 13).padEnd(14));\n const repo = (s.connectedRepository?.repoFullName ?? \"-\")\n .substring(0, 31)\n .padEnd(32);\n const mcp = getMcpServerUrlForCloudServer(s).substring(0, 51).padEnd(52);\n console.log(\n `${chalk.gray(id)} ${name} ${status} ${chalk.gray(repo)} ${chalk.cyan(mcp)}`\n );\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to list servers:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function getServerCommand(idOrSlug: string, options: { org?: string }) {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n await applyOrgOption(api, options.org);\n if (options.org) console.log();\n\n const server = await api.getServer(idOrSlug);\n\n console.log(chalk.cyan.bold(\"\\n🖥 Server Details\\n\"));\n\n console.log(chalk.white(\"ID: \") + chalk.gray(server.id));\n if (server.slug) {\n console.log(chalk.white(\"Slug: \") + chalk.cyan(server.slug));\n }\n console.log(\n chalk.white(\"Name: \") + chalk.cyan(server.name ?? \"-\")\n );\n const statusColor = getStatusColor(server.status);\n console.log(chalk.white(\"Status: \") + statusColor(server.status));\n if (server.latestDeploymentStatus) {\n console.log(\n chalk.white(\"Last deploy: \") +\n chalk.gray(server.latestDeploymentStatus)\n );\n }\n console.log(chalk.white(\"Region: \") + chalk.gray(server.region));\n console.log(\n chalk.white(\"MCP URL: \") +\n chalk.cyan(getMcpServerUrlForCloudServer(server))\n );\n\n if (server.connectedRepository) {\n const cr = server.connectedRepository;\n console.log(chalk.white(\"\\nRepository\"));\n console.log(chalk.white(\" Full name: \") + chalk.gray(cr.repoFullName));\n console.log(\n chalk.white(\" Prod branch: \") + chalk.gray(cr.productionBranch)\n );\n }\n\n if (server.activeDeploymentId) {\n console.log(\n chalk.white(\"\\nActive deployment: \") +\n chalk.cyan(server.activeDeploymentId)\n );\n }\n if (server.previousDeploymentId) {\n console.log(\n chalk.white(\"Previous deployment: \") +\n chalk.gray(server.previousDeploymentId)\n );\n }\n\n const depCount = server._count?.deployments;\n if (depCount != null) {\n console.log(\n chalk.white(\"Deployment count: \") + chalk.gray(String(depCount))\n );\n }\n\n console.log(\n chalk.white(\"Created: \") +\n chalk.gray(formatRelativeTime(server.createdAt))\n );\n console.log(\n chalk.white(\"Updated: \") +\n chalk.gray(formatRelativeTime(server.updatedAt))\n );\n\n const config = await readConfig();\n const base = (await getWebUrl()).replace(/\\/$/, \"\");\n if (config.orgSlug) {\n console.log(\n chalk.white(\"\\nDashboard: \") +\n chalk.cyan(`${base}/cloud/${config.orgSlug}/servers/${server.id}`)\n );\n } else {\n console.log(\n chalk.white(\"\\nDashboard: \") +\n chalk.cyan(`${base}/cloud/servers/${server.id}`)\n );\n }\n\n if (Array.isArray(server.deployments) && server.deployments.length > 0) {\n console.log(chalk.cyan.bold(\"\\nRecent deployments\\n\"));\n console.log(\n chalk.white.bold(\n `${\"ID\".padEnd(40)} ${\"NAME\".padEnd(24)} ${\"STATUS\".padEnd(12)} ${\"UPDATED\"}`\n )\n );\n console.log(chalk.gray(\"─\".repeat(100)));\n for (const d of server.deployments) {\n const did = pickStr(d, \"id\").padEnd(40);\n const dname = pickStr(d, \"name\").substring(0, 23).padEnd(24);\n const dst = pickStr(d, \"status\").padEnd(12);\n const du = pickStr(d, \"updatedAt\");\n const updated = du !== \"-\" ? formatRelativeTime(du) : chalk.gray(\"-\");\n const sc = getStatusColor(dst.trim());\n console.log(\n `${chalk.gray(did)} ${dname} ${sc(dst)} ${chalk.gray(updated)}`\n );\n }\n }\n\n console.log();\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get server:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nasync function deleteServerCommand(\n serverId: string,\n options: { yes?: boolean; org?: string }\n): Promise<void> {\n try {\n if (!(await isLoggedIn())) {\n console.log(chalk.red(\"✗ You are not logged in.\"));\n console.log(\n chalk.gray(\n \"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\"\n )\n );\n process.exit(1);\n }\n\n const api = await McpUseAPI.create();\n await applyOrgOption(api, options.org);\n if (options.org) console.log();\n\n const server = await api.getServer(serverId);\n\n if (!options.yes) {\n console.log(\n chalk.yellow(\n `\\n⚠️ You are about to delete server: ${chalk.white(server.name || server.slug || server.id)}`\n )\n );\n console.log(chalk.gray(` ID: ${server.id}`));\n if (server.connectedRepository?.repoFullName) {\n console.log(\n chalk.gray(` Repo: ${server.connectedRepository.repoFullName}\\n`)\n );\n } else {\n console.log();\n }\n\n const confirmed = await prompt(\n chalk.white(\n \"This deletes the server and all its deployments. Continue? (y/N): \"\n )\n );\n\n if (!confirmed) {\n console.log(chalk.gray(\"Deletion cancelled.\"));\n return;\n }\n }\n\n await api.deleteServer(server.id);\n console.log(\n chalk.green.bold(\n `\\n✓ Server deleted: ${server.name || server.slug || server.id}\\n`\n )\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to delete server:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\nexport function createServersCommand(): Command {\n const serversCommand = new Command(\"servers\").description(\n \"Manage cloud servers (Git-backed deploy targets)\"\n );\n\n serversCommand\n .command(\"list\")\n .alias(\"ls\")\n .description(\"List servers for the current organization\")\n .option(\"--org <slug-or-id>\", \"Target organization (slug, id, or name)\")\n .option(\"--limit <n>\", \"Page size (1–100, default 50)\")\n .option(\"--skip <n>\", \"Offset for pagination\")\n .option(\"--sort <field:asc|desc>\", \"Sort (e.g. updatedAt:desc)\")\n .action(listServersCommand);\n\n serversCommand\n .command(\"get\")\n .argument(\"<id-or-slug>\", \"Server UUID or slug\")\n .option(\"--org <slug-or-id>\", \"Resolve org context before fetch\")\n .description(\"Show server details and recent deployments\")\n .action(getServerCommand);\n\n serversCommand\n .command(\"delete\")\n .alias(\"rm\")\n .argument(\"<server-id>\", \"Server UUID (or slug if API accepts it)\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .option(\"--org <slug-or-id>\", \"Target organization\")\n .description(\"Delete a server and all its deployments\")\n .action(deleteServerCommand);\n\n return serversCommand;\n}\n","import chalk from \"chalk\";\nimport { McpUseAPI } from \"../utils/api.js\";\nimport { isLoggedIn, readConfig, writeConfig } from \"../utils/config.js\";\nimport { promptOrgSelection } from \"./auth.js\";\n\nasync function ensureLoggedIn(): Promise<boolean> {\n if (!(await isLoggedIn())) {\n console.log(chalk.yellow(\"⚠️ You are not logged in.\"));\n console.log(\n chalk.gray(\"Run \" + chalk.white(\"npx mcp-use login\") + \" to get started.\")\n );\n return false;\n }\n return true;\n}\n\n/**\n * List all organizations the user belongs to\n */\nexport async function orgListCommand(): Promise<void> {\n try {\n if (!(await ensureLoggedIn())) return;\n\n const api = await McpUseAPI.create();\n const authInfo = await api.testAuth();\n const config = await readConfig();\n\n const orgs = authInfo.orgs ?? [];\n const activeId = config.orgId || authInfo.default_org_id;\n\n if (orgs.length === 0) {\n console.log(chalk.yellow(\"No organizations found.\"));\n return;\n }\n\n console.log(chalk.cyan.bold(\"🏢 Your organizations:\\n\"));\n\n for (const o of orgs) {\n const isActive = o.id === activeId;\n const marker = isActive ? chalk.green(\" ← active\") : \"\";\n const slug = o.slug ? chalk.gray(` (${o.slug})`) : \"\";\n const role = chalk.gray(` [${o.role}]`);\n const name = isActive ? chalk.cyan.bold(o.name) : chalk.white(o.name);\n console.log(` ${name}${slug}${role}${marker}`);\n }\n\n if (orgs.length > 1) {\n console.log(\n chalk.gray(\"\\nSwitch with \" + chalk.white(\"npx mcp-use org switch\"))\n );\n }\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to list organizations:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Switch the active organization\n */\nexport async function orgSwitchCommand(): Promise<void> {\n try {\n if (!(await ensureLoggedIn())) return;\n\n const api = await McpUseAPI.create();\n const authInfo = await api.testAuth();\n const config = await readConfig();\n const orgs = authInfo.orgs ?? [];\n\n if (orgs.length === 0) {\n console.log(chalk.yellow(\"No organizations found.\"));\n return;\n }\n\n if (orgs.length === 1) {\n const o = orgs[0];\n const slug = o.slug ? chalk.gray(` (${o.slug})`) : \"\";\n console.log(\n chalk.yellow(\n `You only have one organization: ${chalk.cyan(o.name)}${slug}`\n )\n );\n return;\n }\n\n const activeId = config.orgId || authInfo.default_org_id;\n const selected = await promptOrgSelection(orgs, activeId);\n\n if (!selected) {\n console.log(chalk.yellow(\"No organization selected.\"));\n return;\n }\n\n await writeConfig({\n ...config,\n orgId: selected.id,\n orgName: selected.name,\n orgSlug: selected.slug ?? undefined,\n });\n\n try {\n await api.setDefaultOrg(selected.id);\n } catch {\n // Non-fatal: the local config is what matters for CLI operations\n }\n\n const slug = selected.slug ? chalk.gray(` (${selected.slug})`) : \"\";\n console.log(\n chalk.green.bold(\"\\n✓ Switched to \") +\n chalk.cyan.bold(selected.name) +\n slug\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to switch organization:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n\n/**\n * Show the currently active organization\n */\nexport async function orgCurrentCommand(): Promise<void> {\n try {\n if (!(await ensureLoggedIn())) return;\n\n const config = await readConfig();\n\n if (!config.orgId) {\n console.log(\n chalk.yellow(\n \"No organization selected. Run \" +\n chalk.white(\"npx mcp-use org switch\") +\n \" to pick one.\"\n )\n );\n return;\n }\n\n const slug = config.orgSlug ? chalk.gray(` (${config.orgSlug})`) : \"\";\n console.log(\n chalk.cyan.bold(\"🏢 Active organization: \") +\n chalk.white(config.orgName || config.orgId) +\n slug\n );\n } catch (error) {\n console.error(\n chalk.red.bold(\"\\n✗ Failed to get organization:\"),\n chalk.red(error instanceof Error ? error.message : \"Unknown error\")\n );\n process.exit(1);\n }\n}\n","import chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { cpSync, existsSync, mkdtempSync, readdirSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { extract } from \"tar\";\n\nconst REPO_OWNER = \"mcp-use\";\nconst REPO_NAME = \"mcp-use\";\nconst REPO_BRANCH = \"main\";\n\nconst TELEMETRY_URL = \"https://add-skill.vercel.sh/t\";\nconst SOURCE_REPO = `${REPO_OWNER}/${REPO_NAME}`;\n\n// Telemetry data defined in https://github.com/vercel-labs/skills/blob/main/src/telemetry.ts\ninterface InstallTelemetryData {\n event: \"install\";\n source: string;\n skills: string;\n agents: string;\n global?: \"1\";\n skillFiles?: string;\n sourceType?: string;\n}\n\n/** Type-safe enum for IDE/agent presets */\ntype AgentPreset = \"cursor\" | \"claude-code\" | \"codex\";\n\nconst AGENT_PRESET_FOLDERS: Record<AgentPreset, string> = {\n cursor: \".cursor\",\n \"claude-code\": \".claude\",\n codex: \".agent\",\n};\n\nconst ALL_PRESETS: AgentPreset[] = [\"cursor\", \"claude-code\", \"codex\"];\n\n/**\n * Send telemetry event for vercel skills.sh.\n * Fire-and-forget -- never throws.\n */\nfunction sendInstallTelemetryEvent(agents: string, skills: string): void {\n const telemetryData: InstallTelemetryData = {\n event: \"install\",\n source: SOURCE_REPO,\n skills,\n agents,\n sourceType: \"github\",\n };\n try {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(telemetryData)) {\n if (value !== undefined && value !== null) {\n params.set(key, String(value));\n }\n }\n fetch(`${TELEMETRY_URL}?${params.toString()}`).catch(() => {});\n } catch {\n // Silently fail - telemetry should never break the CLI\n }\n}\n\n/**\n * Download and extract skills from the mcp-use GitHub repository\n * and install them into the project's agent preset directories\n * (.cursor/skills, .claude/skills, .agent/skills).\n */\nasync function addSkillsToProject(projectPath: string): Promise<void> {\n const tarballUrl = `https://codeload.github.com/${REPO_OWNER}/${REPO_NAME}/tar.gz/${REPO_BRANCH}`;\n const tempDir = mkdtempSync(join(tmpdir(), \"mcp-use-skills-\"));\n\n try {\n const response = await fetch(tarballUrl);\n if (!response.ok) {\n throw new Error(`Failed to download tarball: ${response.statusText}`);\n }\n\n await pipeline(\n Readable.fromWeb(response.body as any),\n extract({\n cwd: tempDir,\n filter: (path) => path.includes(\"/skills/\"),\n strip: 1,\n })\n );\n\n const skillsPath = join(tempDir, \"skills\");\n if (!existsSync(skillsPath)) {\n throw new Error(\"Skills folder not found in repository\");\n }\n\n for (const preset of ALL_PRESETS) {\n const folderName = AGENT_PRESET_FOLDERS[preset];\n const outputPath = join(projectPath, folderName, \"skills\");\n cpSync(skillsPath, outputPath, { recursive: true });\n }\n\n const skillNames = readdirSync(skillsPath, { withFileTypes: true })\n .filter((dirent) => dirent.isDirectory())\n .map((dirent) => dirent.name);\n\n sendInstallTelemetryEvent(ALL_PRESETS.join(\",\"), skillNames.join(\",\"));\n } finally {\n rmSync(tempDir, { recursive: true, force: true });\n }\n}\n\nexport function createSkillsCommand(): Command {\n const skills = new Command(\"skills\").description(\n \"Manage mcp-use AI agent skills\"\n );\n\n const installAction = async (options: { path: string }) => {\n const projectPath = resolve(options.path);\n\n if (!existsSync(projectPath)) {\n console.error(chalk.red(`Directory not found: ${projectPath}`));\n process.exit(1);\n }\n\n console.log(chalk.cyan(\"📚 Installing mcp-use skills...\"));\n console.log(\n chalk.gray(\n \" Downloading from github.com/mcp-use/mcp-use → .cursor/skills, .claude/skills, .agent/skills\"\n )\n );\n\n try {\n await addSkillsToProject(projectPath);\n console.log(chalk.green(\"✅ Skills installed successfully!\"));\n } catch (error) {\n console.error(chalk.red(\"❌ Failed to install skills.\"));\n console.error(\n chalk.yellow(\n ` Error: ${error instanceof Error ? error.message : String(error)}`\n )\n );\n console.error(\n chalk.yellow(\n \" You can also install manually: npx skills add mcp-use/mcp-use\"\n )\n );\n process.exit(1);\n }\n };\n\n const pathOption = [\n \"-p, --path <path>\",\n \"Path to project directory\",\n process.cwd(),\n ] as const;\n\n skills\n .command(\"add\")\n .description(\n \"Install mcp-use skills for AI agents (Cursor, Claude Code, Codex)\"\n )\n .option(...pathOption)\n .action(installAction);\n\n skills\n .command(\"install\")\n .description(\"Install mcp-use skills for AI agents (alias for 'add')\")\n .option(...pathOption)\n .action(installAction);\n\n return skills;\n}\n","import chalk from \"chalk\";\nimport { readFileSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nconst CACHE_DIR = path.join(os.homedir(), \".mcp-use\");\nconst CACHE_FILE = path.join(CACHE_DIR, \"update-check.json\");\nconst CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours\nconst FETCH_TIMEOUT_MS = 3000;\nconst PACKAGE_NAME = \"mcp-use\";\n\ninterface UpdateCache {\n lastChecked: string;\n latestVersion: string;\n}\n\n/**\n * Parse a semver string into numeric parts for comparison.\n * Returns null for any string that doesn't look like X.Y.Z.\n */\nfunction parseSemver(version: string): [number, number, number] | null {\n const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!match) return null;\n return [\n parseInt(match[1], 10),\n parseInt(match[2], 10),\n parseInt(match[3], 10),\n ];\n}\n\n/** Returns true when `candidate` is strictly newer than `current`. */\nfunction isNewer(current: string, candidate: string): boolean {\n const a = parseSemver(current);\n const b = parseSemver(candidate);\n if (!a || !b) return false;\n for (let i = 0; i < 3; i++) {\n if (b[i] > a[i]) return true;\n if (b[i] < a[i]) return false;\n }\n return false;\n}\n\nasync function readCache(): Promise<UpdateCache | null> {\n try {\n const content = await readFile(CACHE_FILE, \"utf-8\");\n return JSON.parse(content) as UpdateCache;\n } catch {\n return null;\n }\n}\n\nasync function writeCache(latestVersion: string): Promise<void> {\n try {\n await mkdir(CACHE_DIR, { recursive: true });\n const cache: UpdateCache = {\n lastChecked: new Date().toISOString(),\n latestVersion,\n };\n await writeFile(CACHE_FILE, JSON.stringify(cache, null, 2), \"utf-8\");\n } catch {\n // Non-fatal — ignore write errors\n }\n}\n\nasync function fetchLatestVersion(): Promise<string | null> {\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await fetch(\n `https://registry.npmjs.org/${PACKAGE_NAME}/latest`,\n {\n signal: controller.signal,\n headers: { Accept: \"application/json\" },\n }\n );\n if (!res.ok) return null;\n const data = (await res.json()) as { version?: string };\n return data.version ?? null;\n } finally {\n clearTimeout(timer);\n }\n } catch {\n return null;\n }\n}\n\nasync function getLatestVersion(): Promise<string | null> {\n const cache = await readCache();\n if (cache) {\n const age = Date.now() - new Date(cache.lastChecked).getTime();\n if (age < CACHE_TTL_MS) {\n return cache.latestVersion;\n }\n }\n const latest = await fetchLatestVersion();\n if (latest) {\n await writeCache(latest);\n }\n return latest;\n}\n\n/**\n * Resolve the version of `mcp-use` installed in the user's project.\n * Falls back to the CLI's own bundled copy for monorepo / global installs.\n */\nfunction resolveInstalledVersion(\n projectPath: string | undefined\n): string | null {\n const attempts: (() => string)[] = [];\n\n if (projectPath) {\n attempts.push(() => {\n const projectRequire = createRequire(\n path.join(projectPath, \"package.json\")\n );\n return projectRequire.resolve(`${PACKAGE_NAME}/package.json`);\n });\n }\n\n // Monorepo / global fallback: bundled alongside the CLI\n attempts.push(() => path.join(__dirname, \"../../mcp-use/package.json\"));\n\n for (const attempt of attempts) {\n try {\n const pkgPath = attempt();\n const json = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n if (typeof json.version === \"string\") return json.version as string;\n } catch {\n // Try next\n }\n }\n return null;\n}\n\n/**\n * Check npm for a newer version of `mcp-use` and print a notification when\n * one is available. Runs silently on any error so it never interrupts the CLI.\n */\nexport async function notifyIfUpdateAvailable(\n projectPath: string | undefined\n): Promise<void> {\n try {\n const installed = resolveInstalledVersion(projectPath);\n if (!installed) return;\n\n const latest = await getLatestVersion();\n if (!latest) return;\n\n if (isNewer(installed, latest)) {\n console.log(\n chalk.yellow(\n `\\nA new release of ${chalk.bold(PACKAGE_NAME)} is available: ` +\n `${chalk.dim(installed)} → ${chalk.cyan.bold(latest)}`\n )\n );\n console.log(\n chalk.gray(\n `Run ${chalk.white(`npm install ${PACKAGE_NAME}@latest`)} to update\\n`\n )\n );\n }\n } catch {\n // Never surface errors from the update check\n }\n}\n"],"mappings":"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","names":["process","styles","chalk","styles","open","Command","readFileSync","mkdir","readFile","writeFile","createRequire","path","process","path","fileURLToPath","childProcess","fs","fsConstants","promisify","childProcess","fs","fsConstants","process","os","fs","fs","fs","process","os","fs","process","fs","execFile","promisify","childProcess","fs","fsConstants","powerShellPath","path","promisify","process","execFile","promisify","process","execFile","process","promisify","execFile","execFileAsync","promisify","execFile","execFileAsync","execFileAsync","promisify","execFile","defaultBrowser","process","process","__dirname","path","fileURLToPath","process","apps","defaultBrowser","powerShellPath","fs","fsConstants","childProcess","resolve","fs","os","path","path","resolve","api","prompt","result","fs","path","execFile","promisify","execFileAsync","fs","path","fs","path","resolve","projectName","Command","prompt","resolve","Command","Command","prompt","resolve","getStatusColor","Command","slug","Command","existsSync","join","path","mkdir","readFile","writeFile","os","path","Command","readFileSync","path","createRequire","resolve","env","fs","readFile","mkdir","writeFile","cleanup","fileURLToPath","manifestPath"]}