@mcp-use/cli 4.0.0-beta.13 → 4.0.0-beta.14

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/bin.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{a as n}from"./chunk-RMD5DPKC.js";import"./chunk-USIKTT3N.js";n(process.argv.slice(2),{frameworkVersion:"4.0.0-beta.13"}).then(e=>{process.exitCode=e},e=>{console.error(e instanceof Error?e.message:String(e)),process.exitCode=1});
2
+ import{a as n}from"./chunk-5CBUF6UX.js";import"./chunk-USIKTT3N.js";n(process.argv.slice(2),{frameworkVersion:"4.0.0-beta.14"}).then(e=>{process.exitCode=e},e=>{console.error(e instanceof Error?e.message:String(e)),process.exitCode=1});
@@ -1,9 +1,9 @@
1
- import{a as v,b as h,d as x}from"./chunk-7G4TXPP4.js";import{existsSync as P}from"fs";import{join as S}from"path";import{fileURLToPath as A}from"url";var W=["vite.config.ts","vite.config.js","vite.config.mts","vite.config.cjs"];function ne(e){for(let t of W){let n=S(e,t);if(P(n))return n}return!1}function ie(){return A(import.meta.resolve("tailwindcss/index.css"))}import{join as u}from"path";var T=".mcp-use",L="manifest.json";function oe(e){let t=u(e,T),n=u(t,"build");return{projectRoot:e,workspace:t,build:n,generated:u(t,"generated"),cache:u(t,"cache"),state:u(t,"state"),cloud:u(t,"cloud"),buildManifest:u(n,L),tunnel:u(t,"state","tunnel.json")}}import{readFile as U}from"fs/promises";import{dirname as C,resolve as j}from"path";var p="virtual:mcp-use/legacy-widget-metadata:",V=`\0${p}`;function le(e){return`${p}${encodeURIComponent(e)}`}function I(){return{name:"mcp-use-legacy-widget-metadata",resolveId(e){if(e.startsWith(p))return`\0${e}`},async load(e){if(!e.startsWith(V))return;let t=decodeURIComponent(e.slice(V.length));this.addWatchFile(t);let n=await U(t,"utf8");return N(n,t)}}}function N(e,t){let n=/\bexport\s+const\s+widgetMetadata\b/g.exec(e);if(n===null)return`export const widgetMetadata = undefined;
1
+ import{a as v,b as h,d as x}from"./chunk-7G4TXPP4.js";import{existsSync as b}from"fs";import{join as S}from"path";import{fileURLToPath as A}from"url";var T=["vite.config.ts","vite.config.js","vite.config.mts","vite.config.cjs"];function re(e){for(let t of T){let n=S(e,t);if(b(n))return n}return!1}function se(){return A(import.meta.resolve("tailwindcss/index.css"))}import{join as u}from"path";var W=".mcp-use",L="manifest.json";function ce(e){let t=u(e,W),n=u(t,"build");return{projectRoot:e,workspace:t,build:n,generated:u(t,"generated"),cache:u(t,"cache"),state:u(t,"state"),cloud:u(t,"cloud"),buildManifest:u(n,L),tunnel:u(t,"state","tunnel.json")}}import{readFile as C}from"fs/promises";import{dirname as U,resolve as j}from"path";var p="virtual:mcp-use/legacy-widget-metadata:",V=`\0${p}`;function de(e){return`${p}${encodeURIComponent(e)}`}function I(){return{name:"mcp-use-legacy-widget-metadata",resolveId(e){if(e.startsWith(p))return`\0${e}`},async load(e){if(!e.startsWith(V))return;let t=decodeURIComponent(e.slice(V.length));this.addWatchFile(t);let n=await C(t,"utf8");return N(n,t)}}}function N(e,t){let n=/\bexport\s+const\s+widgetMetadata\b/g.exec(e);if(n===null)return`export const widgetMetadata = undefined;
2
2
  `;let r=O(e,n.index+n[0].length);if(r===-1)throw new Error(`Could not read widgetMetadata from ${t}: expected an exported const initializer.`);let i=k(e,r+1),o=e.slice(r+1,i).trim();if(o==="")throw new Error(`Could not read widgetMetadata from ${t}: the initializer is empty.`);return`${z(e,o,t).join(`
3
3
  `)}
4
4
  export const widgetMetadata = ${o};
5
5
  `}function O(e,t){for(let n=t;n<e.length;n+=1)if(e[n]==="="&&e[n+1]!==">")return n;return-1}function k(e,t){let n=[],r,i=!1,o=!1,c=!1;for(let a=t;a<e.length;a+=1){let s=e[a],d=e[a+1];if(o){s===`
6
- `&&(o=!1);continue}if(c){s==="*"&&d==="/"&&(c=!1,a+=1);continue}if(r!==void 0){i?i=!1:s==="\\"?i=!0:s===r&&(r=void 0);continue}if(s==="/"&&d==="/"){o=!0,a+=1;continue}if(s==="/"&&d==="*"){c=!0,a+=1;continue}if(s==="'"||s==='"'||s==="`"){r=s;continue}if(s==="("||s==="["||s==="{"){n.push(s);continue}if(s===")"||s==="]"||s==="}"){n.pop();continue}if(s===";"&&n.length===0)return a}return e.length}function z(e,t,n){let r=[],i=/\bimport\s+([\s\S]*?)\s+from\s+(["'])([^"']+)\2\s*(?:with\s*\{[^}]*\})?\s*;?/g;for(let o of e.matchAll(i)){let c=o[0],a=o[1]??"",s=o[3]??"";if(!F(a).some(b=>X(t,b)))continue;let M=s.startsWith(".")?j(C(n),s):s;r.push(c.replace(s,M))}return r}function F(e){let t=[],n=e.replace(/^\s*type\s+/,"").trim(),r=/\*\s+as\s+([A-Za-z_$][\w$]*)/.exec(n);r?.[1]!==void 0&&t.push(r[1]);let i=/\{([\s\S]*?)\}/.exec(n)?.[1];if(i!==void 0)for(let c of i.split(",")){let a=c.trim().replace(/^type\s+/,"");if(a==="")continue;let s=/\bas\s+([A-Za-z_$][\w$]*)$/.exec(a)?.[1];t.push(s??a.split(/\s+/)[0])}let o=n.split(/[,{*]/,1)[0]?.trim();return o!==void 0&&/^[A-Za-z_$][\w$]*$/.test(o)&&t.push(o),t}function X(e,t){return new RegExp(`(^|[^\\w$])${B(t)}([^\\w$]|$)`).test(e)}function B(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}import{existsSync as _,readdirSync as q}from"fs";import{dirname as $,isAbsolute as J,join as Z,resolve as l}from"path";import G from"@vitejs/plugin-react";var K="views",f="virtual:mcp-use/views/",g=`\0${f}`;function E(e,t){let n=t??K;return J(n)?n:l(e,n)}function ve(e,t,n){let r=E(e,t),i=t===void 0?l(e,"resources"):l($(r),"resources"),o=new Map;y(r,"view.tsx",!1,o),n?.includeLegacy===!0&&y(i,"widget.tsx",!0,o);let c=[...o.values()];return c.sort((a,s)=>a.name.localeCompare(s.name)),c}function y(e,t,n,r){if(_(e))for(let i of q(e,{withFileTypes:!0})){if(!i.isDirectory())continue;let o=Z(e,i.name,t);if(_(o)){if(n&&r.has(i.name)){console.warn(`[mcp-use] Both native and legacy view entries exist for "${i.name}"; using views/${i.name}/view.tsx.`);continue}r.set(i.name,{name:i.name,entryPath:o,...n&&{legacy:!0}})}}}function H(e){return`${f}${e}`}function Q(e){return`/@id/__x00__${f}${e}`}function he(e,t,n){let r=E(t,n),i=n===void 0?l(t,"resources"):l($(r),"resources");return e===r||e.startsWith(`${r}/`)||e===i||e.startsWith(`${i}/`)}function xe(e){let t={};for(let n of e)t[n.name]={kind:"external",entry:Q(n.name),css:[],scripts:["/@vite/client"]};return t}async function Ve(e,t,n){let{createServer:r}=await import("vite");return r({root:e,configFile:n,envDir:!1,logLevel:"warn",cacheDir:t,resolve:{tsconfigPaths:!0,alias:v(e)},oxc:{jsx:{runtime:"automatic"}},plugins:[x(e),I(),G()],server:{middlewareMode:!0,hmr:!1,ws:!1},ssr:{...h(e)}})}var m="virtual:mcp-use/tailwind.css",R=`\0${m}`,w="virtual:mcp-use/csp-runtime",D=`\0${w}`;function ye(e){return{name:"mcp-use-views",config(){return{resolve:{dedupe:["react","react-dom"]}}},applyToEnvironment(t){return t.name==="client"},resolveId(t){if(t===w)return D;if(t===m)return R;if(t.startsWith(f))return`\0${t}`},load(t){if(t===D)return["globalThis.__zod_globalConfig ??= {};","globalThis.__zod_globalConfig.jitless = true;",""].join(`
7
- `);if(t===R)return['@import "tailwindcss";',"@custom-variant dark (&:where(.dark, .dark *, [data-theme=dark], [data-theme=dark] *));"].join(`
8
- `);if(!t.startsWith(g))return;let n=t.slice(g.length),r=e.getViews().find(o=>o.name===n);if(r===void 0)return;let i=[];return i.push(`import ${JSON.stringify(w)};`),e.dev?.reactRefresh===!0&&i.push('import "@vitejs/plugin-react/preamble";'),i.push(`import ${JSON.stringify(m)};`),i.push('import { bootstrapView } from "mcp-use/react";'),i.push(`import * as viewModule from ${JSON.stringify(r.entryPath)};`),r.legacy===!0?i.push("const legacyMetadata = viewModule.widgetMetadata?.metadata;","bootstrapView({ ...viewModule, viewConfig: {"," ...(legacyMetadata?.autoResize !== undefined && { autoResize: legacyMetadata.autoResize }),","} });"):i.push("bootstrapView(viewModule);"),e.dev!==void 0&&i.push("if (import.meta.hot) {"," import.meta.hot.accept();","}"),i.push(""),i.join(`
9
- `)}}}export{ne as a,ie as b,oe as c,le as d,I as e,E as f,ve as g,H as h,he as i,xe as j,Ve as k,ye as l};
6
+ `&&(o=!1);continue}if(c){s==="*"&&d==="/"&&(c=!1,a+=1);continue}if(r!==void 0){i?i=!1:s==="\\"?i=!0:s===r&&(r=void 0);continue}if(s==="/"&&d==="/"){o=!0,a+=1;continue}if(s==="/"&&d==="*"){c=!0,a+=1;continue}if(s==="'"||s==='"'||s==="`"){r=s;continue}if(s==="("||s==="["||s==="{"){n.push(s);continue}if(s===")"||s==="]"||s==="}"){n.pop();continue}if(s===";"&&n.length===0)return a}return e.length}function z(e,t,n){let r=[],i=/\bimport\s+([\s\S]*?)\s+from\s+(["'])([^"']+)\2\s*(?:with\s*\{[^}]*\})?\s*;?/g;for(let o of e.matchAll(i)){let c=o[0],a=o[1]??"",s=o[3]??"";if(!F(a).some(P=>X(t,P)))continue;let M=s.startsWith(".")?j(U(n),s):s;r.push(c.replace(s,M))}return r}function F(e){let t=[],n=e.replace(/^\s*type\s+/,"").trim(),r=/\*\s+as\s+([A-Za-z_$][\w$]*)/.exec(n);r?.[1]!==void 0&&t.push(r[1]);let i=/\{([\s\S]*?)\}/.exec(n)?.[1];if(i!==void 0)for(let c of i.split(",")){let a=c.trim().replace(/^type\s+/,"");if(a==="")continue;let s=/\bas\s+([A-Za-z_$][\w$]*)$/.exec(a)?.[1];t.push(s??a.split(/\s+/)[0])}let o=n.split(/[,{*]/,1)[0]?.trim();return o!==void 0&&/^[A-Za-z_$][\w$]*$/.test(o)&&t.push(o),t}function X(e,t){return new RegExp(`(^|[^\\w$])${B(t)}([^\\w$]|$)`).test(e)}function B(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}import{existsSync as _,readdirSync as Z}from"fs";import{dirname as y,isAbsolute as q,join as J,resolve as l}from"path";import G from"@vitejs/plugin-react";var K="views",f="virtual:mcp-use/views/",m=`\0${f}`;function R(e,t){let n=t??K;return q(n)?n:l(e,n)}function xe(e,t,n){let r=R(e,t),i=t===void 0?l(e,"resources"):l(y(r),"resources"),o=new Map;E(r,"view.tsx",!1,o),n?.includeLegacy===!0&&E(i,"widget.tsx",!0,o);let c=[...o.values()];return c.sort((a,s)=>a.name.localeCompare(s.name)),c}function E(e,t,n,r){if(_(e))for(let i of Z(e,{withFileTypes:!0})){if(!i.isDirectory())continue;let o=J(e,i.name,t);if(_(o)){if(n&&r.has(i.name)){console.warn(`[mcp-use] Both native and legacy view entries exist for "${i.name}"; using views/${i.name}/view.tsx.`);continue}r.set(i.name,{name:i.name,entryPath:o,...n&&{legacy:!0}})}}}function H(e){return`${f}${e}`}function Q(e){return`/@id/__x00__${f}${e}`}function Ve(e,t,n){let r=R(t,n),i=n===void 0?l(t,"resources"):l(y(r),"resources");return e===r||e.startsWith(`${r}/`)||e===i||e.startsWith(`${i}/`)}function Ie(e){let t={};for(let n of e)t[n.name]={kind:"external",entry:Q(n.name),css:[],scripts:["/@vite/client"]};return t}async function _e(e,t,n){let{createServer:r}=await import("vite");return r({root:e,configFile:n,envDir:!1,logLevel:"warn",cacheDir:t,resolve:{tsconfigPaths:!0,alias:v(e)},oxc:{jsx:{runtime:"automatic"}},plugins:[x(e),I(),G()],server:{middlewareMode:!0,hmr:!1,ws:!1},ssr:{...h(e)}})}var g="virtual:mcp-use/tailwind.css",D=`\0${g}`,w="virtual:mcp-use/csp-runtime",$=`\0${w}`,Y=["react","react-dom"],ee={exclude:["mcp-use/react"],include:["react","react-dom","react-dom/client"]};function Re(e){return{name:"mcp-use-views",config(){return{resolve:{dedupe:Y},optimizeDeps:ee}},applyToEnvironment(t){return t.name==="client"},resolveId(t){if(t===w)return $;if(t===g)return D;if(t.startsWith(f))return`\0${t}`},load(t){if(t===$)return["globalThis.__zod_globalConfig ??= {};","globalThis.__zod_globalConfig.jitless = true;",""].join(`
7
+ `);if(t===D)return['@import "tailwindcss";',"@custom-variant dark (&:where(.dark, .dark *, [data-theme=dark], [data-theme=dark] *));"].join(`
8
+ `);if(!t.startsWith(m))return;let n=t.slice(m.length),r=e.getViews().find(o=>o.name===n);if(r===void 0)return;let i=[];return i.push(`import ${JSON.stringify(w)};`),e.dev?.reactRefresh===!0&&i.push('import "@vitejs/plugin-react/preamble";'),i.push(`import ${JSON.stringify(g)};`),i.push('import { bootstrapView } from "mcp-use/react";'),i.push(`import * as viewModule from ${JSON.stringify(r.entryPath)};`),r.legacy===!0?i.push("const legacyMetadata = viewModule.widgetMetadata?.metadata;","bootstrapView({ ...viewModule, viewConfig: {"," ...(legacyMetadata?.autoResize !== undefined && { autoResize: legacyMetadata.autoResize }),","} });"):i.push("bootstrapView(viewModule);"),e.dev!==void 0&&i.push("if (import.meta.hot) {"," import.meta.hot.accept();","}"),i.push(""),i.join(`
9
+ `)}}}export{re as a,se as b,ce as c,de as d,I as e,R as f,xe as g,H as h,Ve as i,Ie as j,_e as k,Y as l,ee as m,Re as n};
@@ -1,4 +1,4 @@
1
- import{a as O,b as N,c as j,d as b,e as k,f as F,g as W,h as q,k as S,l as H}from"../chunk-R6ABNDSV.js";import{a as C,b as E,c as I,d as L}from"../chunk-7G4TXPP4.js";import{a as $,b as T}from"../chunk-FLGSKQGU.js";import{randomBytes as Z}from"crypto";import{existsSync as re}from"fs";import{cp as de,mkdir as P,rm as fe,writeFile as D}from"fs/promises";import{join as w,relative as v,resolve as pe}from"path";import me from"@tailwindcss/vite";import ge from"@vitejs/plugin-react";import{build as B}from"vite";import{createServerModuleRunner as J}from"vite";var ce="/mcp",z="http://localhost:3000",h="__mcpUseV1CompatServer";function G(){return globalThis[h]}async function ue(e,t,o){let n=o.filter(r=>r.legacy===!0);if(n.length===0)return;if(typeof t.__registerLegacyViews!="function")throw new Error("Legacy resources/*/widget.tsx views require the temporary mcp-use/server compatibility entry.");let i={};for(let r of n)i[r.name]=await e.import(b(r.entryPath));t.__registerLegacyViews(i)}async function V(e,t){let o=J(e,{hmr:!1,sourcemapInterceptor:"node"}),n=process.env.MCP_URL,i=process.env.MCP_USE_CLI_IMPORT;try{process.env.MCP_USE_CLI_IMPORT="1",n===void 0&&(process.env.MCP_URL=z),delete globalThis[h];let a=(await o.import(t)).default??G();if(a===null||typeof a!="object")throw new Error("The server entry must default-export the MCPServer instance.");return{basePath:a.basePath??ce,supportsLegacyViews:typeof a.__registerLegacyViews=="function"}}finally{delete globalThis[h],n===void 0?delete process.env.MCP_URL:process.env.MCP_URL=n,i===void 0?delete process.env.MCP_USE_CLI_IMPORT:process.env.MCP_USE_CLI_IMPORT=i,await o.close()}}async function Y(e,t){return(await V(e,t)).basePath}async function A(e,t,o,n=[]){let i=J(e,{hmr:!1,sourcemapInterceptor:"node"}),r=process.env.MCP_USE_CLI_IMPORT,a=process.env.MCP_URL;try{process.env.MCP_USE_CLI_IMPORT="1",a===void 0&&(process.env.MCP_URL=z),delete globalThis[h];let s=(await i.import(t)).default??G();if(s===null||typeof s!="object")throw new Error("The server entry must default-export the MCPServer instance.");if(typeof s.__primeViews!="function")throw new Error("The entry's default export does not support __primeViews.");await ue(i,s,n),s.__primeViews(o),s.__mount()}finally{delete globalThis[h],r===void 0?delete process.env.MCP_USE_CLI_IMPORT:process.env.MCP_USE_CLI_IMPORT=r,a===void 0?delete process.env.MCP_URL:process.env.MCP_URL=a,await i.close()}}function le(e){return e.replace(/\/+$/,"")}function K(e){return le(e)}import{hostHeaderValidationResponse as $e,originValidationResponse as Ce}from"@modelcontextprotocol/server";function Q(e,t){let o=t.replace(/^\/+/,"");return e==="/"?`/${o}`:`${e}/${o}`}function X(e,t){return`${Q(e,`_mcp-use/views/${t}`)}/`}var y="index.js",we="entry-wrapper.ts",ye=100*1024*1024;async function ee(e,t){let o=w(e,"public");re(o)&&await de(o,t,{recursive:!0})}async function te(e,t,o,n){let i=w(e,we);await P(e,{recursive:!0});let r=JSON.stringify(o),a=n.filter(s=>s.legacy===!0),c=a.length>0?[`import ${JSON.stringify(t)};`,'import { registerViews } from "mcp-use";']:[`import * as serverModule from ${JSON.stringify(t)};`,'import { registerViews } from "mcp-use";'];if(a.forEach((s,f)=>{c.push(`import * as legacyWidget${f} from ${JSON.stringify(b(s.entryPath))};`)}),c.push(a.length>0?"const server = globalThis.__mcpUseV1CompatServer;":"const server = serverModule.default;",'if (!server) throw new Error("The server entry must default-export MCPServer or use the deprecated mcp-use/server compatibility entry.");'),a.length>0){let s=a.map((f,p)=>`${JSON.stringify(f.name)}: legacyWidget${p}`).join(", ");c.push(`server.__registerLegacyViews?.({ ${s} });`)}return c.push(`server[registerViews] ? server[registerViews](${r}) : server.__primeViews(${r});`,"export default server;",""),await D(i,c.join(`
1
+ import{a as O,b as N,c as j,d as b,e as k,f as F,g as W,h as q,k as S,n as H}from"../chunk-YMYENQ4W.js";import{a as C,b as E,c as I,d as L}from"../chunk-7G4TXPP4.js";import{a as $,b as T}from"../chunk-FLGSKQGU.js";import{randomBytes as Z}from"crypto";import{existsSync as re}from"fs";import{cp as de,mkdir as P,rm as fe,writeFile as D}from"fs/promises";import{join as w,relative as v,resolve as pe}from"path";import me from"@tailwindcss/vite";import ge from"@vitejs/plugin-react";import{build as B}from"vite";import{createServerModuleRunner as J}from"vite";var ce="/mcp",z="http://localhost:3000",h="__mcpUseV1CompatServer";function G(){return globalThis[h]}async function ue(e,t,o){let n=o.filter(r=>r.legacy===!0);if(n.length===0)return;if(typeof t.__registerLegacyViews!="function")throw new Error("Legacy resources/*/widget.tsx views require the temporary mcp-use/server compatibility entry.");let i={};for(let r of n)i[r.name]=await e.import(b(r.entryPath));t.__registerLegacyViews(i)}async function V(e,t){let o=J(e,{hmr:!1,sourcemapInterceptor:"node"}),n=process.env.MCP_URL,i=process.env.MCP_USE_CLI_IMPORT;try{process.env.MCP_USE_CLI_IMPORT="1",n===void 0&&(process.env.MCP_URL=z),delete globalThis[h];let a=(await o.import(t)).default??G();if(a===null||typeof a!="object")throw new Error("The server entry must default-export the MCPServer instance.");return{basePath:a.basePath??ce,supportsLegacyViews:typeof a.__registerLegacyViews=="function"}}finally{delete globalThis[h],n===void 0?delete process.env.MCP_URL:process.env.MCP_URL=n,i===void 0?delete process.env.MCP_USE_CLI_IMPORT:process.env.MCP_USE_CLI_IMPORT=i,await o.close()}}async function Y(e,t){return(await V(e,t)).basePath}async function A(e,t,o,n=[]){let i=J(e,{hmr:!1,sourcemapInterceptor:"node"}),r=process.env.MCP_USE_CLI_IMPORT,a=process.env.MCP_URL;try{process.env.MCP_USE_CLI_IMPORT="1",a===void 0&&(process.env.MCP_URL=z),delete globalThis[h];let s=(await i.import(t)).default??G();if(s===null||typeof s!="object")throw new Error("The server entry must default-export the MCPServer instance.");if(typeof s.__primeViews!="function")throw new Error("The entry's default export does not support __primeViews.");await ue(i,s,n),s.__primeViews(o),s.__mount()}finally{delete globalThis[h],r===void 0?delete process.env.MCP_USE_CLI_IMPORT:process.env.MCP_USE_CLI_IMPORT=r,a===void 0?delete process.env.MCP_URL:process.env.MCP_URL=a,await i.close()}}function le(e){return e.replace(/\/+$/,"")}function K(e){return le(e)}import{hostHeaderValidationResponse as $e,originValidationResponse as Ce}from"@modelcontextprotocol/server";function Q(e,t){let o=t.replace(/^\/+/,"");return e==="/"?`/${o}`:`${e}/${o}`}function X(e,t){return`${Q(e,`_mcp-use/views/${t}`)}/`}var y="index.js",we="entry-wrapper.ts",ye=100*1024*1024;async function ee(e,t){let o=w(e,"public");re(o)&&await de(o,t,{recursive:!0})}async function te(e,t,o,n){let i=w(e,we);await P(e,{recursive:!0});let r=JSON.stringify(o),a=n.filter(s=>s.legacy===!0),c=a.length>0?[`import ${JSON.stringify(t)};`,'import { registerViews } from "mcp-use";']:[`import * as serverModule from ${JSON.stringify(t)};`,'import { registerViews } from "mcp-use";'];if(a.forEach((s,f)=>{c.push(`import * as legacyWidget${f} from ${JSON.stringify(b(s.entryPath))};`)}),c.push(a.length>0?"const server = globalThis.__mcpUseV1CompatServer;":"const server = serverModule.default;",'if (!server) throw new Error("The server entry must default-export MCPServer or use the deprecated mcp-use/server compatibility entry.");'),a.length>0){let s=a.map((f,p)=>`${JSON.stringify(f.name)}: legacyWidget${p}`).join(", ");c.push(`server.__registerLegacyViews?.({ ${s} });`)}return c.push(`server[registerViews] ? server[registerViews](${r}) : server.__primeViews(${r});`,"export default server;",""),await D(i,c.join(`
2
2
  `)),i}function he(){let e=process.env.MCP_ASSETS_URL;if(!(e===void 0||e.trim()===""))try{return K(new URL(e).href.replace(/\/$/,""))}catch{return}}function U(e,t,o,n){let i=e.replace(/^\/+/,"");return`${o}${X(n,t)}${i}`}function ve(e,t,o,n){return e.kind!=="external"?e:{...e,entry:U(e.entry,t,o,n),css:e.css.map(i=>U(i,t,o,n)),...e.scripts!==void 0&&{scripts:e.scripts.map(i=>U(i,t,o,n))}}}async function Me(e,t){let o=w(t.viewsOutDir,e.name),n=await B({root:t.cwd,configFile:t.userViteConfig,envDir:!1,publicDir:!1,logLevel:"warn",cacheDir:t.cacheDir,resolve:{tsconfigPaths:!0,alias:{tailwindcss:N()}},oxc:{jsx:{runtime:"automatic"}},plugins:[me(),ge(),H({getViews:()=>[e]})],build:{outDir:o,emptyOutDir:!0,write:!t.inline,target:"es2022",sourcemap:t.inline?!1:t.sourceMaps,minify:!0,cssCodeSplit:!1,chunkSizeWarningLimit:1e3,assetsInlineLimit:ye,rollupOptions:{input:{[e.name]:q(e.name)},output:{format:"es",codeSplitting:!t.inline,entryFileNames:"assets/[name]-[hash].js",chunkFileNames:"assets/[name]-[hash].js",assetFileNames:"assets/[name]-[hash][extname]"}}},base:"./"}),i=Array.isArray(n)?n[0]:n;if(i===void 0||!("output"in i))throw new Error(`Client build for view "${e.name}" produced no output.`);let r=i.output,a=Array.isArray(r)?r:Object.values(r),c,s,f,p=[];for(let m of a){if(typeof m!="object"||m===null||!("fileName"in m)||typeof m.fileName!="string")continue;let u=m;u.type==="chunk"&&u.isEntry===!0?(c=u.fileName,f=u.code):u.type==="asset"&&u.fileName.endsWith(".css")&&(s=u.fileName,typeof u.source=="string"?p.push(u.source):u.source instanceof Uint8Array&&p.push(new TextDecoder().decode(u.source)))}if(c===void 0)throw new Error(`Client build produced no entry chunk for view "${e.name}".`);if(t.inline){if(f===void 0)throw new Error(`Client build produced no entry source for view "${e.name}".`);return{kind:"inline",js:f,css:p.join(`
3
3
  `)}}return{kind:"external",entry:c.replace(/^\/+/,""),css:s!==void 0?[s.replace(/^\/+/,"")]:[]}}async function _e(e){let t=performance.now();I(e.cwd,"production");let o=e.mcpDir===void 0?e.cwd:pe(e.cwd,e.mcpDir),n=e.entry===void 0?$(o):$(e.cwd,e.entry),i=await T(e.cwd,n);(i==="created"||i==="updated")&&console.log(`[mcp-use] ${i} mcp-env.d.ts`);let r=j(e.cwd),a=e.viewsDir??(e.mcpDir===void 0?void 0:w(e.mcpDir,"views"));re(F(e.cwd,a))||console.log("[mcp-use] views directory not configured.");let c=W(e.cwd,a,{includeLegacy:!0}),s=c,f=O(e.cwd),p=e.sourceMaps===!0,m=e.inline===!0,d,u;if(c.some(l=>l.legacy===!0)){d=await S(e.cwd,r.cache,!1);let l;try{l=await V(d.environments.ssr,n)}catch(g){throw await d.close(),g}u=l.basePath,l.supportsLegacyViews||(s=c.filter(g=>g.legacy!==!0))}if(s.length===0){d??=await S(e.cwd,r.cache,!1);try{await A(d.environments.ssr,n,{},s);let ae=await te(r.cache,n,{},s);await B({root:e.cwd,configFile:!1,envDir:!1,publicDir:!1,logLevel:"warn",cacheDir:r.cache,resolve:{tsconfigPaths:!0,alias:C(e.cwd)},plugins:[L(e.cwd)],build:{ssr:ae,outDir:r.build,emptyOutDir:!0,target:"node22",sourcemap:p,minify:!1,rollupOptions:{output:{format:"es",entryFileNames:y}}},ssr:{...E(e.cwd),target:"node"}})}finally{await d?.close()}await ee(e.cwd,w(r.build,"views/public"));let l={buildId:Z(8).toString("hex"),entryPoint:y,createdAt:new Date().toISOString(),views:{}};await P(r.build,{recursive:!0}),await D(r.buildManifest,`${JSON.stringify(l,null,2)}
4
4
  `);let g=Math.round(performance.now()-t);console.log(`[mcp-use] built ${v(e.cwd,n)} \u2192 ${v(e.cwd,r.build)}/${y} (${g}ms)`);return}await fe(r.build,{recursive:!0,force:!0});let M=w(r.build,"views");await P(M,{recursive:!0}),d??=await S(e.cwd,r.cache,!1);let _,R={},x=he();try{_=u??await Y(d.environments.ssr,n);for(let l of s){let g=await Me(l,{cwd:e.cwd,cacheDir:r.cache,viewsOutDir:M,userViteConfig:f,sourceMaps:p,inline:m});x!==void 0&&!m&&(g=ve(g,l.name,x,_)),R[l.name]=g}x!==void 0&&!m&&(console.log(`[mcp-use] MCP_ASSETS_URL set \u2014 manifest uses CDN URLs; upload ${v(e.cwd,M)}/ to your asset host.`),_!=="/mcp"&&console.log(`[mcp-use] CDN manifest uses basePath ${_} from server entry`)),await ee(e.cwd,w(M,"public")),await A(d.environments.ssr,n,R,s)}finally{await d.close()}let ne=await te(r.cache,n,R,s);await B({root:e.cwd,configFile:!1,envDir:!1,publicDir:!1,logLevel:"warn",cacheDir:r.cache,resolve:{tsconfigPaths:!0,alias:C(e.cwd)},oxc:{jsx:{runtime:"automatic"}},plugins:[L(e.cwd),k()],build:{ssr:ne,outDir:r.build,emptyOutDir:!1,target:"node22",sourcemap:p,minify:!1,rollupOptions:{output:{format:"es",entryFileNames:y}}},ssr:{...E(e.cwd),target:"node"}});let ie={buildId:Z(8).toString("hex"),entryPoint:y,createdAt:new Date().toISOString(),views:R};await P(r.build,{recursive:!0}),await D(r.buildManifest,`${JSON.stringify(ie,null,2)}
@@ -1,2 +1,2 @@
1
- import{b as ie}from"../chunk-OVFUQAEG.js";import{a as ne,b as re}from"../chunk-N7BU45K6.js";import{b as Q,c as Z}from"../chunk-USIKTT3N.js";import{a as ae,b as ce,c as le,d as de,e as ue,f as pe,g as H,i as F,j as fe,l as me}from"../chunk-R6ABNDSV.js";import{b as oe,c as se,d as A}from"../chunk-7G4TXPP4.js";import{a as x,b as te}from"../chunk-FLGSKQGU.js";import{a as ee}from"../chunk-LNASFQWW.js";import{existsSync as Ve}from"fs";import{createServer as xe}from"http";import{networkInterfaces as Ae}from"os";import{join as Fe,resolve as Be}from"path";import Ne from"@tailwindcss/vite";import We from"@vitejs/plugin-react";import{createServer as Ge,createServerModuleRunner as qe}from"vite";import{InMemoryServerEventBus as Je,localhostAllowedHostnames as ze,localhostAllowedOrigins as Ke,validateHostHeader as Xe,validateOriginHeader as Ye}from"@modelcontextprotocol/server";import{connect as Ce,createServer as Oe}from"net";var ve=100,He=300,Ue=new Set(["127.0.0.1","localhost","::1"]);function ke(e,r){return new Promise(s=>{let n=Oe();n.unref(),n.once("error",()=>s(!1)),n.listen({port:e,host:r},()=>{n.close(()=>s(!0))})})}function we(e,r){return new Promise(s=>{let n=Ce({port:e,host:r});n.setTimeout(He),n.once("connect",()=>{n.destroy(),s(!0)}),n.once("timeout",()=>{n.destroy(),s(!1)}),n.once("error",()=>{n.destroy(),s(!1)})})}async function De(e){return await we(e,"127.0.0.1")||await we(e,"::1")}async function he(e,r){for(let s=e;s<e+ve;s++)if(await ke(s,r)&&!(Ue.has(r)&&await De(s)))return{port:s,requested:e};throw new Error(`No free port found between ${e} and ${e+ve-1} on ${r}.`)}function ge(e,r){let s=()=>{let n=e.getBasePath(),{url:a}=e.tunnel.status();return{mcpUrl:a!==null?`${a.replace(/\/+$/,"")}${n}`:null,port:e.port,fromCli:!0,tunnelUrl:a}};return async n=>{let a=e.getBasePath(),u=`${a}/inspector/api/dev/info`,p=`${a}/inspector/api/dev/start-tunnel`,f=`${a}/inspector/api/dev/stop-tunnel`,y=new URL(n.url).pathname;if(n.method==="GET"&&y===u)return Response.json(s());if(n.method==="POST"&&y===p)try{return await e.tunnel.start(e.port),Response.json({ok:!0,restarting:!1})}catch(M){let U=M instanceof Error?M.message:"Failed to start tunnel";return Response.json({error:U},{status:500})}return n.method==="POST"&&y===f?(await e.tunnel.stop(),Response.json({ok:!0})):r(n)}}import{readFileSync as Ee}from"fs";import{createRequire as je}from"module";import{join as Te}from"path";import{pathToFileURL as $e}from"url";async function Re(e){let r=Te(e,"package.json"),s=JSON.parse(Ee(r,"utf8"));if([s.dependencies,s.devDependencies,s.optionalDependencies].some(u=>u!==null&&typeof u=="object"&&"@mcp-use/inspector"in u)){let u=je(r);try{let p=u.resolve("@mcp-use/inspector");return ye(await import($e(p).href))}catch(p){if(!Pe(p))throw p}}try{return ye(await import("@mcp-use/inspector"))}catch(u){if(Pe(u))return{installed:!1};throw u}}function ye(e){if(typeof e.mountInspector!="function")throw new Error("The installed @mcp-use/inspector is incompatible: its package entry does not export mountInspector(). Update the development dependency.");return{installed:!0,module:e}}function Pe(e){let r=e!==null&&typeof e=="object"&&"code"in e?String(e.code):void 0;return r==="ERR_MODULE_NOT_FOUND"||r==="MODULE_NOT_FOUND"}var _e="__mcpUseV1CompatServer";function Qe(e){ee(e)}function Ze(){for(let e of Object.values(Ae()))for(let r of e??[])if(!r.internal&&r.family==="IPv4")return r.address}function et(e){if(e!==void 0)try{return new URL(`http://${e}`).hostname.replace(/^\[|\]$/g,"")}catch{return}}function tt(e){let r=e.getHeader("Vary"),s=typeof r=="string"?r:Array.isArray(r)?r.join(", "):r!==void 0?String(r):"";s.split(",").map(n=>n.trim().toLowerCase()).includes("origin")||e.setHeader("Vary",s===""?"Origin":`${s}, Origin`)}function nt(e,r,s){if(s.tunnelActive){r.setHeader("Access-Control-Allow-Origin","*");return}if(!s.localhostBind)return;let n=e.headers.origin;if(n==="null"){r.setHeader("Access-Control-Allow-Origin","null");return}if(typeof n!="string"||n==="")return;let a=Ye(n,Ke());!a.ok||a.origin===void 0||(r.setHeader("Access-Control-Allow-Origin",a.origin),tt(r))}function rt(e){let r=e.default??globalThis[_e];if(r===null||typeof r!="object")throw new Error("The server entry must default-export the MCPServer instance (`export default server`) and never call listen() itself \u2014 `mcp-use dev` owns the socket.");let s=r;if(typeof s.fetch!="function")throw new Error("The entry's default export has no fetch() \u2014 it must be the MCPServer instance (`export default server`).");return s}async function ot(e){process.env.MCP_USE_DEV_CLI="1";let r=le(e.cwd),s=new Je(t=>{console.error("[mcp-use] notification delivery failed:",t)});se(e.cwd,"development");let n=Z(e.host),a=["127.0.0.1","localhost","::1"].includes(n),u=n==="0.0.0.0"||n==="::",p=xe(),{port:f,requested:y}=await he(Q(e.port),n);f!==y&&console.log(`[mcp-use] port ${y} is taken, using ${f}`),process.env.PORT=String(f);let M=process.env.MCP_URL===void 0&&(n==="127.0.0.1"||n==="localhost"||n==="::1")?`http://localhost:${f}`:void 0,U=e.mcpDir===void 0?e.cwd:Be(e.cwd,e.mcpDir),B=e.entry===void 0?x(U):x(e.cwd,e.entry),k=await te(e.cwd,B);(k==="created"||k==="updated")&&console.log(`[mcp-use] ${k} mcp-env.d.ts`);let P=e.viewsDir??(e.mcpDir===void 0?void 0:Fe(e.mcpDir,"views"));Ve(pe(e.cwd,P))||console.log("[mcp-use] views directory not configured.");let d=H(e.cwd,P,{includeLegacy:!0}),L=!1,R=d.length>0,Me=ae(e.cwd),D=["127.0.0.1","localhost","0.0.0.0","::","::1"].includes(n)?"localhost":n,b=`http://${D.includes(":")?`[${D}]`:D}:${f}`,m=await Ge({root:e.cwd,configFile:R?Me:!1,envDir:!1,logLevel:"warn",cacheDir:r.cache,resolve:{tsconfigPaths:!0,alias:{tailwindcss:ce()}},oxc:{jsx:{runtime:"automatic"}},plugins:R?[A(e.cwd),ue(),Ne(),me({getViews:()=>d,dev:{reactRefresh:!0}}),We()]:[A(e.cwd)],server:{middlewareMode:!0,...R&&{origin:b},cors:!1,hmr:R?{server:p}:!1,...!R&&{ws:!1}},ssr:{...oe(e.cwd)}}),E=m.environments.ssr,_=qe(E,{hmr:!1,sourcemapInterceptor:"node"}),N=async()=>{let t=async()=>{delete globalThis[_e];let i=process.env.MCP_USE_CLI_IMPORT,l;try{process.env.MCP_USE_CLI_IMPORT="1",l=await _.import(B)}finally{i===void 0?delete process.env.MCP_USE_CLI_IMPORT:process.env.MCP_USE_CLI_IMPORT=i}let c=rt(l);L=typeof c.__registerLegacyViews=="function",d=H(e.cwd,P,{includeLegacy:L});let w=d.filter(g=>g.legacy===!0);if(w.length>0){if(typeof c.__registerLegacyViews!="function")throw new Error("Legacy resources/*/widget.tsx views require the temporary mcp-use/server compatibility entry.");let g={};for(let O of w)g[O.name]=await _.import(de(O.entryPath));c.__registerLegacyViews(g)}let S=fe(d);if(typeof c.__primeViews!="function")throw new Error("Loaded MCPServer instance does not support __primeViews.");return c.__primeViews(S,{dev:!0,projectRoot:e.cwd}),c};if(M===void 0)return t();let o=process.env.MCP_URL;try{return process.env.MCP_URL=M,await t()}finally{o===void 0?delete process.env.MCP_URL:process.env.MCP_URL=o}},j,v;try{let t=await N();t.__setEventBus(s),t.__mount(),j=async o=>t.fetch(o),v=t.basePath??"/mcp"}catch(t){throw await _.close(),await m.close(),t}let T,I,W,G=t=>{if(T===void 0||W===t)return;let o=T.mountInspector({basePath:t,autoConnectUrl:`${b}${t}`,oauthProxyAllowLoopback:a||u,devMode:!0,manufactChatUrl:process.env.MANUFACT_CHAT_URL});if(typeof o!="function")throw new Error("The installed @mcp-use/inspector is incompatible: mountInspector() did not return a Fetch handler.");I=o,W=t};try{if(e.inspector!==!1){let t=await Re(e.cwd);t.installed&&(T=t.module,G(v))}}catch(t){throw await _.close(),await m.close(),t}let $=!1,V=!1,q=()=>{if($){V=!0;return}$=!0,(async()=>{do{V=!1;try{_.evaluatedModules.clear();let t=await N();t.__setEventBus(s),t.__mount();let o=async l=>t.fetch(l),i=t.basePath??"/mcp";G(i),j=o,v=i,s.publish({kind:"tools_list_changed"}),s.publish({kind:"prompts_list_changed"}),s.publish({kind:"resources_list_changed"}),console.log("[mcp-use] reloaded server entry")}catch(t){console.error(`[mcp-use] reload failed \u2014 keeping the previous server:
2
- `,t)}}while(V);$=!1})()},J=t=>{if(F(t,e.cwd,P))return;let o=E.moduleGraph.getModulesByFile(t);if(!(o===void 0||o.size===0)){for(let i of o)E.moduleGraph.invalidateModule(i);q()}},z=t=>{if(!F(t,e.cwd,P))return;let o=d;d=H(e.cwd,P,{includeLegacy:L});let i=o.length!==d.length||o.some((c,w)=>c.name!==d[w]?.name||c.entryPath!==d[w]?.entryPath),l=L&&d.some(c=>c.legacy===!0&&c.entryPath===t);(i||l)&&q()},K=t=>{z(t),J(t)},C=t=>{z(t),J(t)};m.watcher.on("change",K),m.watcher.on("add",C),m.watcher.on("unlink",C);let h=ie(r.tunnel);p.prependListener("upgrade",t=>{let o=h.status().url;if(o===null)return;let i=new URL(o).hostname;t.headers.host?.split(":")[0]===i&&(t.headers.host=`localhost:${f}`)});let be=(t,o)=>{let i=h.status().url,l=i!==null?new URL(i).hostname:null,c=l!==null?[l]:[],w=Xe(t.headers.host,[...ze(),...c]);return w.ok?!1:(o.writeHead(403,{"content-type":"application/json"}),o.end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:w.message},id:null})),!0)},X=async()=>{m.watcher.off("change",K),m.watcher.off("add",C),m.watcher.off("unlink",C),await h.stop(),await new Promise(t=>p.close(()=>t())),await _.close(),await m.close()},Ie=ge({getBasePath:()=>v,port:f,tunnel:h},t=>I!==void 0&&ne(t,v)?I(t):j(t)),{toNodeHandler:Se}=await import("../node-bridge-WOT2W5YZ.js"),Y=Se({fetch:Ie}),Le=(t,o)=>{if(a&&be(t,o))return;let i=t.url??"/",l=new URL(i,"http://127.0.0.1").pathname,c=h.status().url,w=c===null?null:new URL(c).hostname,S=et(t.headers.host);if((w!==null&&S===w||u&&S!==void 0&&!["localhost","127.0.0.1","::1"].includes(S))&&re(l,v)){o.writeHead(404,{"content-type":"text/plain; charset=utf-8"}),o.end("Not Found");return}let g=R&&d.length>0,O=t.method==="GET"&&(l.startsWith("/@")||l.startsWith("/node_modules/")||l.startsWith("/.mcp-use/")||g&&l.startsWith("/views/"));g&&O?(nt(t,o,{tunnelActive:h.status().url!==null,localhostBind:a}),m.middlewares(t,o,()=>{Y(t,o)})):Y(t,o)};if(p.on("request",Le),await new Promise((t,o)=>{p.once("error",o),p.listen(f,n,()=>t())}),console.log("[mcp-use] dev server ready"),d.length>0&&console.log(` \u279C Views: ${d.map(t=>t.name).join(", ")}`),console.log(` \u279C MCP endpoint: ${b}${v}`),I!==void 0?console.log(` \u279C Inspector: ${b}${v}/inspector`):e.inspector!==!1&&console.warn("[mcp-use] Built-in Inspector is unavailable; reinstall mcp-use to restore visual testing."),n==="0.0.0.0"||n==="::"){let t=Ze();t!==void 0&&console.log(` \u279C Network: http://${t}:${f}${v}`)}if(a||console.warn(`[mcp-use] --host ${n} serves beyond this machine without Host validation or authentication \u2014 anyone with network access can call the MCP endpoint and dev routes.`),e.tunnel===!0)try{let{url:t}=await h.start(f);console.log(` \u279C Tunnel: ${t}${v}`)}catch(t){throw await X(),t}I!==void 0&&e.open!==!1&&process.stdout.isTTY===!0&&Qe(`${b}${v}/inspector`),await new Promise(t=>{let o=!1,i=()=>{o||(o=!0,process.off("SIGINT",i),process.off("SIGTERM",i),(async()=>(await X(),t()))())};process.on("SIGINT",i),process.on("SIGTERM",i),e.signal!==void 0&&(e.signal.aborted?i():e.signal.addEventListener("abort",i,{once:!0}))})}export{ot as runDev};
1
+ import{b as ie}from"../chunk-OVFUQAEG.js";import{a as ne,b as re}from"../chunk-N7BU45K6.js";import{b as Z,c as Q}from"../chunk-USIKTT3N.js";import{a as ae,b as ce,c as le,d as de,e as ue,f as pe,g as D,i as F,j as fe,l as me,m as ve,n as we}from"../chunk-YMYENQ4W.js";import{b as oe,c as se,d as x}from"../chunk-7G4TXPP4.js";import{a as A,b as te}from"../chunk-FLGSKQGU.js";import{a as ee}from"../chunk-LNASFQWW.js";import{existsSync as xe}from"fs";import{createServer as Fe}from"http";import{networkInterfaces as Be}from"os";import{join as Ne,resolve as We}from"path";import Ge from"@tailwindcss/vite";import qe from"@vitejs/plugin-react";import{createServer as ze,createServerModuleRunner as Je}from"vite";import{InMemoryServerEventBus as Ke,localhostAllowedHostnames as Xe,localhostAllowedOrigins as Ye,validateHostHeader as Ze,validateOriginHeader as Qe}from"@modelcontextprotocol/server";import{connect as De,createServer as Oe}from"net";var he=100,He=300,Ue=new Set(["127.0.0.1","localhost","::1"]);function ke(e,r){return new Promise(s=>{let n=Oe();n.unref(),n.once("error",()=>s(!1)),n.listen({port:e,host:r},()=>{n.close(()=>s(!0))})})}function ge(e,r){return new Promise(s=>{let n=De({port:e,host:r});n.setTimeout(He),n.once("connect",()=>{n.destroy(),s(!0)}),n.once("timeout",()=>{n.destroy(),s(!1)}),n.once("error",()=>{n.destroy(),s(!1)})})}async function Te(e){return await ge(e,"127.0.0.1")||await ge(e,"::1")}async function ye(e,r){for(let s=e;s<e+he;s++)if(await ke(s,r)&&!(Ue.has(r)&&await Te(s)))return{port:s,requested:e};throw new Error(`No free port found between ${e} and ${e+he-1} on ${r}.`)}function Pe(e,r){let s=()=>{let n=e.getBasePath(),{url:a}=e.tunnel.status();return{mcpUrl:a!==null?`${a.replace(/\/+$/,"")}${n}`:null,port:e.port,fromCli:!0,tunnelUrl:a}};return async n=>{let a=e.getBasePath(),u=`${a}/inspector/api/dev/info`,p=`${a}/inspector/api/dev/start-tunnel`,f=`${a}/inspector/api/dev/stop-tunnel`,y=new URL(n.url).pathname;if(n.method==="GET"&&y===u)return Response.json(s());if(n.method==="POST"&&y===p)try{return await e.tunnel.start(e.port),Response.json({ok:!0,restarting:!1})}catch(M){let O=M instanceof Error?M.message:"Failed to start tunnel";return Response.json({error:O},{status:500})}return n.method==="POST"&&y===f?(await e.tunnel.stop(),Response.json({ok:!0})):r(n)}}import{readFileSync as je}from"fs";import{createRequire as Ve}from"module";import{join as $e}from"path";import{pathToFileURL as Ae}from"url";async function Me(e){let r=$e(e,"package.json"),s=JSON.parse(je(r,"utf8"));if([s.dependencies,s.devDependencies,s.optionalDependencies].some(u=>u!==null&&typeof u=="object"&&"@mcp-use/inspector"in u)){let u=Ve(r);try{let p=u.resolve("@mcp-use/inspector");return _e(await import(Ae(p).href))}catch(p){if(!Re(p))throw p}}try{return _e(await import("@mcp-use/inspector"))}catch(u){if(Re(u))return{installed:!1};throw u}}function _e(e){if(typeof e.mountInspector!="function")throw new Error("The installed @mcp-use/inspector is incompatible: its package entry does not export mountInspector(). Update the development dependency.");return{installed:!0,module:e}}function Re(e){let r=e!==null&&typeof e=="object"&&"code"in e?String(e.code):void 0;return r==="ERR_MODULE_NOT_FOUND"||r==="MODULE_NOT_FOUND"}var Ie="__mcpUseV1CompatServer";function et(e){ee(e)}function tt(){for(let e of Object.values(Be()))for(let r of e??[])if(!r.internal&&r.family==="IPv4")return r.address}function nt(e){if(e!==void 0)try{return new URL(`http://${e}`).hostname.replace(/^\[|\]$/g,"")}catch{return}}function rt(e){let r=e.getHeader("Vary"),s=typeof r=="string"?r:Array.isArray(r)?r.join(", "):r!==void 0?String(r):"";s.split(",").map(n=>n.trim().toLowerCase()).includes("origin")||e.setHeader("Vary",s===""?"Origin":`${s}, Origin`)}function ot(e,r,s){if(s.tunnelActive){r.setHeader("Access-Control-Allow-Origin","*");return}if(!s.localhostBind)return;let n=e.headers.origin;if(n==="null"){r.setHeader("Access-Control-Allow-Origin","null");return}if(typeof n!="string"||n==="")return;let a=Qe(n,Ye());!a.ok||a.origin===void 0||(r.setHeader("Access-Control-Allow-Origin",a.origin),rt(r))}function st(e){let r=e.default??globalThis[Ie];if(r===null||typeof r!="object")throw new Error("The server entry must default-export the MCPServer instance (`export default server`) and never call listen() itself \u2014 `mcp-use dev` owns the socket.");let s=r;if(typeof s.fetch!="function")throw new Error("The entry's default export has no fetch() \u2014 it must be the MCPServer instance (`export default server`).");return s}async function it(e){process.env.MCP_USE_DEV_CLI="1";let r=le(e.cwd),s=new Ke(t=>{console.error("[mcp-use] notification delivery failed:",t)});se(e.cwd,"development");let n=Q(e.host),a=["127.0.0.1","localhost","::1"].includes(n),u=n==="0.0.0.0"||n==="::",p=Fe(),{port:f,requested:y}=await ye(Z(e.port),n);f!==y&&console.log(`[mcp-use] port ${y} is taken, using ${f}`),process.env.PORT=String(f);let M=process.env.MCP_URL===void 0&&(n==="127.0.0.1"||n==="localhost"||n==="::1")?`http://localhost:${f}`:void 0,O=e.mcpDir===void 0?e.cwd:We(e.cwd,e.mcpDir),B=e.entry===void 0?A(O):A(e.cwd,e.entry),H=await te(e.cwd,B);(H==="created"||H==="updated")&&console.log(`[mcp-use] ${H} mcp-env.d.ts`);let P=e.viewsDir??(e.mcpDir===void 0?void 0:Ne(e.mcpDir,"views"));xe(pe(e.cwd,P))||console.log("[mcp-use] views directory not configured.");let d=D(e.cwd,P,{includeLegacy:!0}),C=!1,_=d.length>0,be=ae(e.cwd),U=["127.0.0.1","localhost","0.0.0.0","::","::1"].includes(n)?"localhost":n,I=`http://${U.includes(":")?`[${U}]`:U}:${f}`,m=await ze({root:e.cwd,configFile:_?be:!1,envDir:!1,logLevel:"warn",cacheDir:r.cache,resolve:{tsconfigPaths:!0,alias:{tailwindcss:ce()},dedupe:me},optimizeDeps:ve,oxc:{jsx:{runtime:"automatic"}},plugins:_?[x(e.cwd),ue(),Ge(),we({getViews:()=>d,dev:{reactRefresh:!0}}),qe()]:[x(e.cwd)],server:{middlewareMode:!0,..._&&{origin:I},cors:!1,hmr:_?{server:p}:!1,...!_&&{ws:!1}},ssr:{...oe(e.cwd)}}),k=m.environments.ssr,R=Je(k,{hmr:!1,sourcemapInterceptor:"node"}),N=async()=>{let t=async()=>{delete globalThis[Ie];let i=process.env.MCP_USE_CLI_IMPORT,l;try{process.env.MCP_USE_CLI_IMPORT="1",l=await R.import(B)}finally{i===void 0?delete process.env.MCP_USE_CLI_IMPORT:process.env.MCP_USE_CLI_IMPORT=i}let c=st(l);C=typeof c.__registerLegacyViews=="function",d=D(e.cwd,P,{includeLegacy:C});let w=d.filter(g=>g.legacy===!0);if(w.length>0){if(typeof c.__registerLegacyViews!="function")throw new Error("Legacy resources/*/widget.tsx views require the temporary mcp-use/server compatibility entry.");let g={};for(let L of w)g[L.name]=await R.import(de(L.entryPath));c.__registerLegacyViews(g)}let S=fe(d);if(typeof c.__primeViews!="function")throw new Error("Loaded MCPServer instance does not support __primeViews.");return c.__primeViews(S,{dev:!0,projectRoot:e.cwd}),c};if(M===void 0)return t();let o=process.env.MCP_URL;try{return process.env.MCP_URL=M,await t()}finally{o===void 0?delete process.env.MCP_URL:process.env.MCP_URL=o}},T,v;try{let t=await N();t.__setEventBus(s),t.__mount(),T=async o=>t.fetch(o),v=t.basePath??"/mcp"}catch(t){throw await R.close(),await m.close(),t}let j,b,W,G=t=>{if(j===void 0||W===t)return;let o=j.mountInspector({basePath:t,autoConnectUrl:`${I}${t}`,oauthProxyAllowLoopback:a||u,devMode:!0,manufactChatUrl:process.env.MANUFACT_CHAT_URL});if(typeof o!="function")throw new Error("The installed @mcp-use/inspector is incompatible: mountInspector() did not return a Fetch handler.");b=o,W=t};try{if(e.inspector!==!1){let t=await Me(e.cwd);t.installed&&(j=t.module,G(v))}}catch(t){throw await R.close(),await m.close(),t}let V=!1,$=!1,q=()=>{if(V){$=!0;return}V=!0,(async()=>{do{$=!1;try{R.evaluatedModules.clear();let t=await N();t.__setEventBus(s),t.__mount();let o=async l=>t.fetch(l),i=t.basePath??"/mcp";G(i),T=o,v=i,s.publish({kind:"tools_list_changed"}),s.publish({kind:"prompts_list_changed"}),s.publish({kind:"resources_list_changed"}),console.log("[mcp-use] reloaded server entry")}catch(t){console.error(`[mcp-use] reload failed \u2014 keeping the previous server:
2
+ `,t)}}while($);V=!1})()},z=t=>{if(F(t,e.cwd,P))return;let o=k.moduleGraph.getModulesByFile(t);if(!(o===void 0||o.size===0)){for(let i of o)k.moduleGraph.invalidateModule(i);q()}},J=t=>{if(!F(t,e.cwd,P))return;let o=d;d=D(e.cwd,P,{includeLegacy:C});let i=o.length!==d.length||o.some((c,w)=>c.name!==d[w]?.name||c.entryPath!==d[w]?.entryPath),l=C&&d.some(c=>c.legacy===!0&&c.entryPath===t);(i||l)&&q()},K=t=>{J(t),z(t)},E=t=>{J(t),z(t)};m.watcher.on("change",K),m.watcher.on("add",E),m.watcher.on("unlink",E);let h=ie(r.tunnel);p.prependListener("upgrade",t=>{let o=h.status().url;if(o===null)return;let i=new URL(o).hostname;t.headers.host?.split(":")[0]===i&&(t.headers.host=`localhost:${f}`)});let Se=(t,o)=>{let i=h.status().url,l=i!==null?new URL(i).hostname:null,c=l!==null?[l]:[],w=Ze(t.headers.host,[...Xe(),...c]);return w.ok?!1:(o.writeHead(403,{"content-type":"application/json"}),o.end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:w.message},id:null})),!0)},X=async()=>{m.watcher.off("change",K),m.watcher.off("add",E),m.watcher.off("unlink",E),await h.stop(),await new Promise(t=>p.close(()=>t())),await R.close(),await m.close()},Ce=Pe({getBasePath:()=>v,port:f,tunnel:h},t=>b!==void 0&&ne(t,v)?b(t):T(t)),{toNodeHandler:Ee}=await import("../node-bridge-WOT2W5YZ.js"),Y=Ee({fetch:Ce}),Le=(t,o)=>{if(a&&Se(t,o))return;let i=t.url??"/",l=new URL(i,"http://127.0.0.1").pathname,c=h.status().url,w=c===null?null:new URL(c).hostname,S=nt(t.headers.host);if((w!==null&&S===w||u&&S!==void 0&&!["localhost","127.0.0.1","::1"].includes(S))&&re(l,v)){o.writeHead(404,{"content-type":"text/plain; charset=utf-8"}),o.end("Not Found");return}let g=_&&d.length>0,L=t.method==="GET"&&(l.startsWith("/@")||l.startsWith("/node_modules/")||l.startsWith("/.mcp-use/")||g&&l.startsWith("/views/"));g&&L?(ot(t,o,{tunnelActive:h.status().url!==null,localhostBind:a}),m.middlewares(t,o,()=>{Y(t,o)})):Y(t,o)};if(p.on("request",Le),await new Promise((t,o)=>{p.once("error",o),p.listen(f,n,()=>t())}),console.log("[mcp-use] dev server ready"),d.length>0&&console.log(` \u279C Views: ${d.map(t=>t.name).join(", ")}`),console.log(` \u279C MCP endpoint: ${I}${v}`),b!==void 0?console.log(` \u279C Inspector: ${I}${v}/inspector`):e.inspector!==!1&&console.warn("[mcp-use] Built-in Inspector is unavailable; reinstall mcp-use to restore visual testing."),n==="0.0.0.0"||n==="::"){let t=tt();t!==void 0&&console.log(` \u279C Network: http://${t}:${f}${v}`)}if(a||console.warn(`[mcp-use] --host ${n} serves beyond this machine without Host validation or authentication \u2014 anyone with network access can call the MCP endpoint and dev routes.`),e.tunnel===!0)try{let{url:t}=await h.start(f);console.log(` \u279C Tunnel: ${t}${v}`)}catch(t){throw await X(),t}b!==void 0&&e.open!==!1&&process.stdout.isTTY===!0&&et(`${I}${v}/inspector`),await new Promise(t=>{let o=!1,i=()=>{o||(o=!0,process.off("SIGINT",i),process.off("SIGTERM",i),(async()=>(await X(),t()))())};process.on("SIGINT",i),process.on("SIGTERM",i),e.signal!==void 0&&(e.signal.aborted?i():e.signal.addEventListener("abort",i,{once:!0}))})}export{it as runDev};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{a}from"./chunk-RMD5DPKC.js";import"./chunk-USIKTT3N.js";export{a as main};
1
+ import{a}from"./chunk-5CBUF6UX.js";import"./chunk-USIKTT3N.js";export{a as main};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mcp-use/cli",
3
3
  "type": "module",
4
- "version": "4.0.0-beta.13",
4
+ "version": "4.0.0-beta.14",
5
5
  "description": "Prebuilt CLI, development server, and build pipeline for mcp-use",
6
6
  "author": "mcp-use, Inc.",
7
7
  "license": "MIT",
File without changes