@mcp-use/cli 4.0.0-beta.8 → 4.0.0-beta.9

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-YVHLRRIT.js";import"./chunk-USIKTT3N.js";n(process.argv.slice(2),{frameworkVersion:"4.0.0-beta.7"}).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-FEEM7DWN.js";import"./chunk-USIKTT3N.js";n(process.argv.slice(2),{frameworkVersion:"4.0.0-beta.9"}).then(e=>{process.exitCode=e},e=>{console.error(e instanceof Error?e.message:String(e)),process.exitCode=1});
@@ -15,7 +15,6 @@ Commands:
15
15
  deployments Manage cloud deployments and logs
16
16
  deploy Deploy the current GitHub project
17
17
  client Connect to and invoke MCP servers
18
- skills Install maintained coding-agent skills
19
18
  screenshot Capture an MCP Apps view
20
19
 
21
20
  Options:
@@ -33,6 +32,6 @@ Options:
33
32
  --no-open Do not auto-open the inspector in a browser (dev only)
34
33
  --no-inspector Start dev without loading the optional Inspector
35
34
  -h, --help Show this help
36
- -v, --version Print the version`;async function l(t,n={frameworkVersion:"unknown"}){if(t.length===1&&["--version","-v"].includes(t[0]??""))return console.log(n.frameworkVersion),0;if(t.some(e=>e==="--help"||e==="-h")){let e=t[0];if(e===void 0||e==="--help"||e==="-h")return console.log(i),0}let o=t[0];if(o==="login"||o==="logout"||o==="whoami"){let{runIdentity:e}=await import("./commands/identity.js");return e(o,t.slice(1))}if(o==="org"){let{runOrganizations:e}=await import("./commands/organizations.js");return e(t.slice(1))}if(o==="servers"){let{runServers:e}=await import("./commands/servers.js");return e(t.slice(1))}if(o==="deployments"){let{runDeployments:e}=await import("./commands/deployments.js");return e(t.slice(1))}if(o==="deploy"){let{runDeploy:e}=await import("./commands/deploy.js");return e(t.slice(1))}if(o==="client"){let{runClient:e}=await import("./commands/client.js");return e(t.slice(1))}if(o==="skills"){let{runSkills:e}=await import("./commands/skills.js");return e(t.slice(1))}if(o==="screenshot"){let{runScreenshot:e}=await import("./commands/screenshot.js");return e(t.slice(1))}let r;try{r=c(t)}catch(e){return console.error(e instanceof Error?e.message:String(e)),2}if(r.version)return console.log(n.frameworkVersion),0;if(r.help)return console.log(i),0;switch(r.command){case"start":return a(r);case"dev":case"build":return p(r.command,r);case"typecheck":return u(r);case void 0:return console.error(i),2;default:return console.error(`Unknown command: ${r.command}
35
+ -v, --version Print the version`;async function u(t,n={frameworkVersion:"unknown"}){if(t.length===1&&["--version","-v"].includes(t[0]??""))return console.log(n.frameworkVersion),0;if(t.some(e=>e==="--help"||e==="-h")){let e=t[0];if(e===void 0||e==="--help"||e==="-h")return console.log(i),0}let o=t[0];if(o==="login"||o==="logout"||o==="whoami"){let{runIdentity:e}=await import("./commands/identity.js");return e(o,t.slice(1))}if(o==="org"){let{runOrganizations:e}=await import("./commands/organizations.js");return e(t.slice(1))}if(o==="servers"){let{runServers:e}=await import("./commands/servers.js");return e(t.slice(1))}if(o==="deployments"){let{runDeployments:e}=await import("./commands/deployments.js");return e(t.slice(1))}if(o==="deploy"){let{runDeploy:e}=await import("./commands/deploy.js");return e(t.slice(1))}if(o==="client"){let{runClient:e}=await import("./commands/client.js");return e(t.slice(1))}if(o==="screenshot"){let{runScreenshot:e}=await import("./commands/screenshot.js");return e(t.slice(1))}let r;try{r=c(t)}catch(e){return console.error(e instanceof Error?e.message:String(e)),2}if(r.version)return console.log(n.frameworkVersion),0;if(r.help)return console.log(i),0;switch(r.command){case"start":return p(r);case"dev":case"build":return a(r.command,r);case"typecheck":return l(r);case void 0:return console.error(i),2;default:return console.error(`Unknown command: ${r.command}
37
36
 
38
- ${i}`),2}}async function u(t){try{let{runTypecheck:n}=await import("./commands/typecheck.js");return await n({cwd:s(process.cwd(),t.path??"."),...t.entry!==void 0&&{entry:t.entry},...t.mcpDir!==void 0&&{mcpDir:t.mcpDir},...t.passthrough.length>0&&{tscArgs:t.passthrough}})}catch(n){return console.error(n instanceof Error?n.message:String(n)),1}}async function a(t){let n;try{let{runStart:e}=await import("./commands/start.js");n=await e({cwd:s(process.cwd(),t.path??"."),port:t.port,host:t.host,...t.inspector===!0&&{withInspector:!0},tunnel:t.tunnel})}catch(e){return console.error(e instanceof Error?e.message:String(e)),1}console.log(`mcp-use server running at ${n.url}`),n.tunnelUrl!==void 0&&console.log(`mcp-use public MCP URL: ${n.tunnelUrl}`);let o=!1,r=()=>{o||(o=!0,n.close().then(()=>process.exit(0),e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)}))};return process.once("SIGINT",r),process.once("SIGTERM",r),0}async function p(t,n){let o={cwd:s(process.cwd(),n.path??"."),...n.entry!==void 0&&{entry:n.entry},...n.mcpDir!==void 0&&{mcpDir:n.mcpDir},...n.viewsDir!==void 0&&{viewsDir:n.viewsDir},...n.port!==void 0&&{port:n.port},...n.host!==void 0&&{host:n.host},...n.tunnel&&{tunnel:!0},...!n.open&&{open:!1},...n.inspector===!1&&{inspector:!1},...n.sourceMaps&&{sourceMaps:!0},...n.inline&&{inline:!0}};try{if(t==="dev"){let{runDev:r}=await import("./commands/dev.js");await r(o)}else{let{runBuild:r}=await import("./commands/build.js");await r(o)}return 0}catch(r){return console.error(r instanceof Error?r.message:String(r)),1}}export{l as a};
37
+ ${i}`),2}}async function l(t){try{let{runTypecheck:n}=await import("./commands/typecheck.js");return await n({cwd:s(process.cwd(),t.path??"."),...t.entry!==void 0&&{entry:t.entry},...t.mcpDir!==void 0&&{mcpDir:t.mcpDir},...t.passthrough.length>0&&{tscArgs:t.passthrough}})}catch(n){return console.error(n instanceof Error?n.message:String(n)),1}}async function p(t){let n;try{let{runStart:e}=await import("./commands/start.js");n=await e({cwd:s(process.cwd(),t.path??"."),port:t.port,host:t.host,...t.inspector===!0&&{withInspector:!0},tunnel:t.tunnel})}catch(e){return console.error(e instanceof Error?e.message:String(e)),1}console.log(`mcp-use server running at ${n.url}`),n.tunnelUrl!==void 0&&console.log(`mcp-use public MCP URL: ${n.tunnelUrl}`);let o=!1,r=()=>{o||(o=!0,n.close().then(()=>process.exit(0),e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)}))};return process.once("SIGINT",r),process.once("SIGTERM",r),0}async function a(t,n){let o={cwd:s(process.cwd(),n.path??"."),...n.entry!==void 0&&{entry:n.entry},...n.mcpDir!==void 0&&{mcpDir:n.mcpDir},...n.viewsDir!==void 0&&{viewsDir:n.viewsDir},...n.port!==void 0&&{port:n.port},...n.host!==void 0&&{host:n.host},...n.tunnel&&{tunnel:!0},...!n.open&&{open:!1},...n.inspector===!1&&{inspector:!1},...n.sourceMaps&&{sourceMaps:!0},...n.inline&&{inline:!0}};try{if(t==="dev"){let{runDev:r}=await import("./commands/dev.js");await r(o)}else{let{runBuild:r}=await import("./commands/build.js");await r(o)}return 0}catch(r){return console.error(r instanceof Error?r.message:String(r)),1}}export{u as a};
@@ -1,2 +1,2 @@
1
- import{a as Y,b as Q}from"../chunk-N7BU45K6.js";import{b as te}from"../chunk-OVFUQAEG.js";import{b as z,c as K}from"../chunk-USIKTT3N.js";import{a as ne,b as re,c as oe,d as T,f as x,g as se,i as ie}from"../chunk-ALPMVGHI.js";import{b as Z,c as ee,d as A}from"../chunk-7G4TXPP4.js";import{a as L,b as X}from"../chunk-DB3E6LBX.js";import{spawn as je}from"child_process";import{createServer as ke}from"http";import{networkInterfaces as Ce}from"os";import{join as $e,resolve as Ee}from"path";import Le from"@tailwindcss/vite";import Ae from"@vitejs/plugin-react";import{createServer as Te,createServerModuleRunner as xe}from"vite";import{InMemoryServerEventBus as Ve,localhostAllowedHostnames as Fe,localhostAllowedOrigins as Be,validateHostHeader as Ne,validateOriginHeader as We}from"@modelcontextprotocol/server";import{connect as Re,createServer as be}from"net";var ae=100,Me=300,Ie=new Set(["127.0.0.1","localhost","::1"]);function Se(e,r){return new Promise(o=>{let n=be();n.unref(),n.once("error",()=>o(!1)),n.listen({port:e,host:r},()=>{n.close(()=>o(!0))})})}function ce(e,r){return new Promise(o=>{let n=Re({port:e,host:r});n.setTimeout(Me),n.once("connect",()=>{n.destroy(),o(!0)}),n.once("timeout",()=>{n.destroy(),o(!1)}),n.once("error",()=>{n.destroy(),o(!1)})})}async function _e(e){return await ce(e,"127.0.0.1")||await ce(e,"::1")}async function le(e,r){for(let o=e;o<e+ae;o++)if(await Se(o,r)&&!(Ie.has(r)&&await _e(o)))return{port:o,requested:e};throw new Error(`No free port found between ${e} and ${e+ae-1} on ${r}.`)}function de(e,r){let o=()=>{let n=e.getBasePath(),{url:c}=e.tunnel.status();return{mcpUrl:c!==null?`${c.replace(/\/+$/,"")}${n}`:null,port:e.port,fromCli:!0,tunnelUrl:c}};return async n=>{let c=e.getBasePath(),l=`${c}/inspector/api/dev/info`,d=`${c}/inspector/api/dev/start-tunnel`,u=`${c}/inspector/api/dev/stop-tunnel`,w=new URL(n.url).pathname;if(n.method==="GET"&&w===l)return Response.json(o());if(n.method==="POST"&&w===d)try{return await e.tunnel.start(e.port),Response.json({ok:!0,restarting:!1})}catch(g){let _=g instanceof Error?g.message:"Failed to start tunnel";return Response.json({error:_},{status:500})}return n.method==="POST"&&w===u?(await e.tunnel.stop(),Response.json({ok:!0})):r(n)}}import{readFileSync as He}from"fs";import{createRequire as De}from"module";import{join as Oe}from"path";import{pathToFileURL as Ue}from"url";async function fe(e){let r=Oe(e,"package.json"),o=JSON.parse(He(r,"utf8"));if([o.dependencies,o.devDependencies,o.optionalDependencies].some(l=>l!==null&&typeof l=="object"&&"@mcp-use/inspector"in l)){let l=De(r);try{let d=l.resolve("@mcp-use/inspector");return ue(await import(Ue(d).href))}catch(d){if(!pe(d))throw d}}try{return ue(await import("@mcp-use/inspector"))}catch(l){if(pe(l))return{installed:!1};throw l}}function ue(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"}function Ge(e){let[r,o]=process.platform==="darwin"?["open",[e]]:process.platform==="win32"?["cmd",["/c","start","",e]]:["xdg-open",[e]];try{let n=je(r,o,{stdio:"ignore",detached:!0});n.on("error",()=>{}),n.unref()}catch{}}function qe(){for(let e of Object.values(Ce()))for(let r of e??[])if(!r.internal&&r.family==="IPv4")return r.address}function Je(e){if(e!==void 0)try{return new URL(`http://${e}`).hostname.replace(/^\[|\]$/g,"")}catch{return}}function ze(e){let r=e.getHeader("Vary"),o=typeof r=="string"?r:Array.isArray(r)?r.join(", "):r!==void 0?String(r):"";o.split(",").map(n=>n.trim().toLowerCase()).includes("origin")||e.setHeader("Vary",o===""?"Origin":`${o}, Origin`)}function Ke(e,r,o){if(o.tunnelActive){r.setHeader("Access-Control-Allow-Origin","*");return}if(!o.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 c=We(n,Be());!c.ok||c.origin===void 0||(r.setHeader("Access-Control-Allow-Origin",c.origin),ze(r))}function Xe(e){let r=e.default;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 o=r;if(typeof o.fetch!="function")throw new Error("The entry's default export has no fetch() \u2014 it must be the MCPServer instance (`export default server`).");return o}async function Ye(e){process.env.MCP_USE_DEV_CLI="1";let r=oe(e.cwd),o=new Ve(t=>{console.error("[mcp-use] notification delivery failed:",t)});ee(e.cwd,"development");let n=K(e.host),c=["127.0.0.1","localhost","::1"].includes(n),l=n==="0.0.0.0"||n==="::",d=ke(),{port:u,requested:w}=await le(z(e.port),n);u!==w&&console.log(`[mcp-use] port ${w} is taken, using ${u}`),process.env.PORT=String(u);let g=process.env.MCP_URL===void 0&&(n==="127.0.0.1"||n==="localhost"||n==="::1")?`http://localhost:${u}`:void 0,_=e.mcpDir===void 0?e.cwd:Ee(e.cwd,e.mcpDir),V=e.entry===void 0?L(_):L(e.cwd,e.entry),H=await X(e.cwd,V);(H==="created"||H==="updated")&&console.log(`[mcp-use] ${H} mcp-env.d.ts`);let I=e.viewsDir??(e.mcpDir===void 0?void 0:$e(e.mcpDir,"views")),p=T(e.cwd,I),P=p.length>0,me=ne(e.cwd),D=["127.0.0.1","localhost","0.0.0.0","::","::1"].includes(n)?"localhost":n,y=`http://${D.includes(":")?`[${D}]`:D}:${u}`,f=await Te({root:e.cwd,configFile:P?me:!1,envDir:!1,logLevel:"warn",cacheDir:r.cache,resolve:{tsconfigPaths:!0,alias:{tailwindcss:re()}},plugins:P?[A(e.cwd),Le(),ie({getViews:()=>p,dev:{reactRefresh:!0}}),Ae()]:[A(e.cwd)],server:{middlewareMode:!0,...P&&{origin:y},cors:!1,hmr:P?{server:d}:!1},ssr:{...Z(e.cwd)}}),O=f.environments.ssr,R=xe(O,{hmr:!1,sourcemapInterceptor:"node"}),F=async()=>{let t=async()=>{let i=await R.import(V),a=Xe(i);if(p.length>0){let v=se(p);if(typeof a.__primeViews!="function")throw new Error("Loaded MCPServer instance does not support __primeViews.");a.__primeViews(v,{dev:!0,projectRoot:e.cwd})}return a};if(g===void 0)return t();let s=process.env.MCP_URL;try{return process.env.MCP_URL=g,await t()}finally{s===void 0?delete process.env.MCP_URL:process.env.MCP_URL=s}},U,m;try{let t=await F();t.__setEventBus(o),t.__mount(),U=async s=>t.fetch(s),m=t.basePath??"/mcp"}catch(t){throw await R.close(),await f.close(),t}let j,b,B,N=t=>{if(j===void 0||B===t)return;let s=j.mountInspector({basePath:t,autoConnectUrl:`${y}${t}`,oauthProxyAllowLoopback:c||l,devMode:!0,manufactChatUrl:process.env.MANUFACT_CHAT_URL});if(typeof s!="function")throw new Error("The installed @mcp-use/inspector is incompatible: mountInspector() did not return a Fetch handler.");b=s,B=t};try{if(e.inspector!==!1){let t=await fe(e.cwd);t.installed&&(j=t.module,N(m))}}catch(t){throw await R.close(),await f.close(),t}let k=!1,C=!1,W=()=>{if(k){C=!0;return}k=!0,(async()=>{do{C=!1;try{R.evaluatedModules.clear();let t=await F();t.__setEventBus(o),t.__mount();let s=async a=>t.fetch(a),i=t.basePath??"/mcp";N(i),U=s,m=i,o.publish({kind:"tools_list_changed"}),o.publish({kind:"prompts_list_changed"}),o.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:
1
+ import{b as te}from"../chunk-OVFUQAEG.js";import{a as Y,b as Q}from"../chunk-N7BU45K6.js";import{b as z,c as K}from"../chunk-USIKTT3N.js";import{a as ne,b as re,c as oe,d as T,f as x,g as se,i as ie}from"../chunk-ALPMVGHI.js";import{b as Z,c as ee,d as A}from"../chunk-7G4TXPP4.js";import{a as L,b as X}from"../chunk-DB3E6LBX.js";import{spawn as je}from"child_process";import{createServer as ke}from"http";import{networkInterfaces as Ce}from"os";import{join as $e,resolve as Ee}from"path";import Le from"@tailwindcss/vite";import Ae from"@vitejs/plugin-react";import{createServer as Te,createServerModuleRunner as xe}from"vite";import{InMemoryServerEventBus as Ve,localhostAllowedHostnames as Fe,localhostAllowedOrigins as Be,validateHostHeader as Ne,validateOriginHeader as We}from"@modelcontextprotocol/server";import{connect as Re,createServer as be}from"net";var ae=100,Me=300,Ie=new Set(["127.0.0.1","localhost","::1"]);function Se(e,r){return new Promise(o=>{let n=be();n.unref(),n.once("error",()=>o(!1)),n.listen({port:e,host:r},()=>{n.close(()=>o(!0))})})}function ce(e,r){return new Promise(o=>{let n=Re({port:e,host:r});n.setTimeout(Me),n.once("connect",()=>{n.destroy(),o(!0)}),n.once("timeout",()=>{n.destroy(),o(!1)}),n.once("error",()=>{n.destroy(),o(!1)})})}async function _e(e){return await ce(e,"127.0.0.1")||await ce(e,"::1")}async function le(e,r){for(let o=e;o<e+ae;o++)if(await Se(o,r)&&!(Ie.has(r)&&await _e(o)))return{port:o,requested:e};throw new Error(`No free port found between ${e} and ${e+ae-1} on ${r}.`)}function de(e,r){let o=()=>{let n=e.getBasePath(),{url:c}=e.tunnel.status();return{mcpUrl:c!==null?`${c.replace(/\/+$/,"")}${n}`:null,port:e.port,fromCli:!0,tunnelUrl:c}};return async n=>{let c=e.getBasePath(),l=`${c}/inspector/api/dev/info`,d=`${c}/inspector/api/dev/start-tunnel`,u=`${c}/inspector/api/dev/stop-tunnel`,w=new URL(n.url).pathname;if(n.method==="GET"&&w===l)return Response.json(o());if(n.method==="POST"&&w===d)try{return await e.tunnel.start(e.port),Response.json({ok:!0,restarting:!1})}catch(g){let _=g instanceof Error?g.message:"Failed to start tunnel";return Response.json({error:_},{status:500})}return n.method==="POST"&&w===u?(await e.tunnel.stop(),Response.json({ok:!0})):r(n)}}import{readFileSync as He}from"fs";import{createRequire as De}from"module";import{join as Oe}from"path";import{pathToFileURL as Ue}from"url";async function fe(e){let r=Oe(e,"package.json"),o=JSON.parse(He(r,"utf8"));if([o.dependencies,o.devDependencies,o.optionalDependencies].some(l=>l!==null&&typeof l=="object"&&"@mcp-use/inspector"in l)){let l=De(r);try{let d=l.resolve("@mcp-use/inspector");return ue(await import(Ue(d).href))}catch(d){if(!pe(d))throw d}}try{return ue(await import("@mcp-use/inspector"))}catch(l){if(pe(l))return{installed:!1};throw l}}function ue(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"}function Ge(e){let[r,o]=process.platform==="darwin"?["open",[e]]:process.platform==="win32"?["cmd",["/c","start","",e]]:["xdg-open",[e]];try{let n=je(r,o,{stdio:"ignore",detached:!0});n.on("error",()=>{}),n.unref()}catch{}}function qe(){for(let e of Object.values(Ce()))for(let r of e??[])if(!r.internal&&r.family==="IPv4")return r.address}function Je(e){if(e!==void 0)try{return new URL(`http://${e}`).hostname.replace(/^\[|\]$/g,"")}catch{return}}function ze(e){let r=e.getHeader("Vary"),o=typeof r=="string"?r:Array.isArray(r)?r.join(", "):r!==void 0?String(r):"";o.split(",").map(n=>n.trim().toLowerCase()).includes("origin")||e.setHeader("Vary",o===""?"Origin":`${o}, Origin`)}function Ke(e,r,o){if(o.tunnelActive){r.setHeader("Access-Control-Allow-Origin","*");return}if(!o.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 c=We(n,Be());!c.ok||c.origin===void 0||(r.setHeader("Access-Control-Allow-Origin",c.origin),ze(r))}function Xe(e){let r=e.default;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 o=r;if(typeof o.fetch!="function")throw new Error("The entry's default export has no fetch() \u2014 it must be the MCPServer instance (`export default server`).");return o}async function Ye(e){process.env.MCP_USE_DEV_CLI="1";let r=oe(e.cwd),o=new Ve(t=>{console.error("[mcp-use] notification delivery failed:",t)});ee(e.cwd,"development");let n=K(e.host),c=["127.0.0.1","localhost","::1"].includes(n),l=n==="0.0.0.0"||n==="::",d=ke(),{port:u,requested:w}=await le(z(e.port),n);u!==w&&console.log(`[mcp-use] port ${w} is taken, using ${u}`),process.env.PORT=String(u);let g=process.env.MCP_URL===void 0&&(n==="127.0.0.1"||n==="localhost"||n==="::1")?`http://localhost:${u}`:void 0,_=e.mcpDir===void 0?e.cwd:Ee(e.cwd,e.mcpDir),V=e.entry===void 0?L(_):L(e.cwd,e.entry),H=await X(e.cwd,V);(H==="created"||H==="updated")&&console.log(`[mcp-use] ${H} mcp-env.d.ts`);let I=e.viewsDir??(e.mcpDir===void 0?void 0:$e(e.mcpDir,"views")),p=T(e.cwd,I),P=p.length>0,me=ne(e.cwd),D=["127.0.0.1","localhost","0.0.0.0","::","::1"].includes(n)?"localhost":n,y=`http://${D.includes(":")?`[${D}]`:D}:${u}`,f=await Te({root:e.cwd,configFile:P?me:!1,envDir:!1,logLevel:"warn",cacheDir:r.cache,resolve:{tsconfigPaths:!0,alias:{tailwindcss:re()}},plugins:P?[A(e.cwd),Le(),ie({getViews:()=>p,dev:{reactRefresh:!0}}),Ae()]:[A(e.cwd)],server:{middlewareMode:!0,...P&&{origin:y},cors:!1,hmr:P?{server:d}:!1},ssr:{...Z(e.cwd)}}),O=f.environments.ssr,R=xe(O,{hmr:!1,sourcemapInterceptor:"node"}),F=async()=>{let t=async()=>{let i=await R.import(V),a=Xe(i);if(p.length>0){let v=se(p);if(typeof a.__primeViews!="function")throw new Error("Loaded MCPServer instance does not support __primeViews.");a.__primeViews(v,{dev:!0,projectRoot:e.cwd})}return a};if(g===void 0)return t();let s=process.env.MCP_URL;try{return process.env.MCP_URL=g,await t()}finally{s===void 0?delete process.env.MCP_URL:process.env.MCP_URL=s}},U,m;try{let t=await F();t.__setEventBus(o),t.__mount(),U=async s=>t.fetch(s),m=t.basePath??"/mcp"}catch(t){throw await R.close(),await f.close(),t}let j,b,B,N=t=>{if(j===void 0||B===t)return;let s=j.mountInspector({basePath:t,autoConnectUrl:`${y}${t}`,oauthProxyAllowLoopback:c||l,devMode:!0,manufactChatUrl:process.env.MANUFACT_CHAT_URL});if(typeof s!="function")throw new Error("The installed @mcp-use/inspector is incompatible: mountInspector() did not return a Fetch handler.");b=s,B=t};try{if(e.inspector!==!1){let t=await fe(e.cwd);t.installed&&(j=t.module,N(m))}}catch(t){throw await R.close(),await f.close(),t}let k=!1,C=!1,W=()=>{if(k){C=!0;return}k=!0,(async()=>{do{C=!1;try{R.evaluatedModules.clear();let t=await F();t.__setEventBus(o),t.__mount();let s=async a=>t.fetch(a),i=t.basePath??"/mcp";N(i),U=s,m=i,o.publish({kind:"tools_list_changed"}),o.publish({kind:"prompts_list_changed"}),o.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
2
  `,t)}}while(C);k=!1})()},$=t=>{if(x(t,e.cwd,I))return;let s=O.moduleGraph.getModulesByFile(t);if(!(s===void 0||s.size===0)){for(let i of s)O.moduleGraph.invalidateModule(i);W()}},ve=t=>{if(!x(t,e.cwd,I))return;let s=p;p=T(e.cwd,I),(s.length!==p.length||s.some((a,v)=>a.name!==p[v]?.name||a.entryPath!==p[v]?.entryPath))&&W()},S=t=>{ve(t),$(t)};f.watcher.on("change",$),f.watcher.on("add",S),f.watcher.on("unlink",S);let h=te(r.tunnel);d.prependListener("upgrade",t=>{let s=h.status().url;if(s===null)return;let i=new URL(s).hostname;t.headers.host?.split(":")[0]===i&&(t.headers.host=`localhost:${u}`)});let he=(t,s)=>{let i=h.status().url,a=i!==null?new URL(i).hostname:null,v=a!==null?[a]:[],M=Ne(t.headers.host,[...Fe(),...v]);return M.ok?!1:(s.writeHead(403,{"content-type":"application/json"}),s.end(JSON.stringify({jsonrpc:"2.0",error:{code:-32e3,message:M.message},id:null})),!0)},G=async()=>{f.watcher.off("change",$),f.watcher.off("add",S),f.watcher.off("unlink",S),await h.stop(),await new Promise(t=>d.close(()=>t())),await R.close(),await f.close()},we=de({getBasePath:()=>m,port:u,tunnel:h},t=>b!==void 0&&Y(t,m)?b(t):U(t)),{toNodeHandler:ge}=await import("../node-bridge-JJIA6K5P.js"),q=ge({fetch:we}),Pe=(t,s)=>{if(c&&he(t,s))return;let i=t.url??"/",a=new URL(i,"http://127.0.0.1").pathname,v=h.status().url,M=v===null?null:new URL(v).hostname,E=Je(t.headers.host);if((M!==null&&E===M||l&&E!==void 0&&!["localhost","127.0.0.1","::1"].includes(E))&&Q(a,m)){s.writeHead(404,{"content-type":"text/plain; charset=utf-8"}),s.end("Not Found");return}let J=P&&p.length>0,ye=t.method==="GET"&&(a.startsWith("/@")||a.startsWith("/node_modules/")||a.startsWith("/.mcp-use/")||J&&a.startsWith("/views/"));J&&ye?(Ke(t,s,{tunnelActive:h.status().url!==null,localhostBind:c}),f.middlewares(t,s,()=>{q(t,s)})):q(t,s)};if(d.on("request",Pe),await new Promise((t,s)=>{d.once("error",s),d.listen(u,n,()=>t())}),console.log("[mcp-use] dev server ready"),p.length>0&&console.log(` \u279C Views: ${p.map(t=>t.name).join(", ")}`),console.log(` \u279C MCP endpoint: ${y}${m}`),b!==void 0?console.log(` \u279C Inspector: ${y}${m}/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=qe();t!==void 0&&console.log(` \u279C Network: http://${t}:${u}${m}`)}if(c||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(u);console.log(` \u279C Tunnel: ${t}${m}`)}catch(t){throw await G(),t}b!==void 0&&e.open!==!1&&process.stdout.isTTY===!0&&Ge(`${y}${m}/inspector`),await new Promise(t=>{let s=!1,i=()=>{s||(s=!0,process.off("SIGINT",i),process.off("SIGTERM",i),(async()=>(await G(),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{Ye as runDev};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{a}from"./chunk-YVHLRRIT.js";import"./chunk-USIKTT3N.js";export{a as main};
1
+ import{a}from"./chunk-FEEM7DWN.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.8",
4
+ "version": "4.0.0-beta.9",
5
5
  "description": "Prebuilt CLI, development server, and build pipeline for mcp-use",
6
6
  "author": "mcp-use, Inc.",
7
7
  "license": "MIT",
@@ -1 +0,0 @@
1
- import{a as o,d,e as u,h as m}from"../chunk-LHNHT6HO.js";import{spawn as f}from"child_process";import{resolve as w}from"path";import{parseArgs as g}from"util";async function I(r){let i=r.includes("--json");try{if(r[0]!=="add")throw new o("Usage: mcp-use skills add [options]");let{values:s}=g({args:[...r.slice(1)],allowPositionals:!1,strict:!0,options:{path:{type:"string",short:"p",default:process.cwd()},agent:{type:"string",multiple:!0},skill:{type:"string",multiple:!0},json:{type:"boolean"}}}),e=w(s.path??process.cwd());if(!await m(e))throw new o(`Directory not found: ${e}`);let n=s.agent??["all"],l=new Set(["cursor","claude-code","codex","all"]);for(let t of n)if(!l.has(t))throw new o(`Invalid agent: ${t}`);let a=n.includes("all")?["cursor","claude-code","codex"]:[...new Set(n)],c=["--yes","skills","add","mcp-use/mcp-use","--yes",...a.flatMap(t=>["-a",t]),...(s.skill??[]).flatMap(t=>["--skill",t])],p=await h("npx",c,e);return p!==0?p:(d({installed:!0,path:e,agents:a,skills:s.skill??"maintained"},i,"Installed mcp-use skills."),0)}catch(s){return u(s instanceof TypeError?new o(s.message):s,i)}}function h(r,i,s){return new Promise((e,n)=>{let l=f(r,i,{cwd:s,stdio:"inherit",shell:process.platform==="win32"});l.once("error",n),l.once("exit",(a,c)=>{e(c==="SIGINT"?130:a??1)})})}export{I as runSkills};