@smithery/cli 1.2.19 → 1.2.20

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.
Files changed (2) hide show
  1. package/dist/index.js +2 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -80836,11 +80836,11 @@ Input Schema:`)),console.dir(a.value.inputSchema,{depth:null,colors:!0}),console
80836
80836
  `);continue}else if(a.type==="prompt"){let p=await iMe(a.value.arguments);u=sa(`Using prompt ${a.value.name}...`).start(),s=await r.getPrompt({name:a.value.name,arguments:p}).catch(d=>{u?.fail(d.message),u=void 0})}u&&u.succeed(),s&&(console.dir(s,{depth:null,colors:!0}),console.log(`
80837
80837
  `))}}catch(n){e.fail(`Failed to connect to server: ${n instanceof Error?n.message:String(n)}`),r&&await r.close(),process.exit(1)}}async function iMe(t){return!t||t.length===0?{}:UE.default.prompt(t.map(e=>({type:"text",name:e.name,message:ls.default.dim(`${e.required?"* ":""}${e.name}: ${e.description}`)})))}async function pJ(t,e){let r=sa(`Resolving ${t}...`).start(),n=null;try{let i=await $1(t,e,"inspect");J(`Resolved server package: ${t}`),r.succeed(`Successfully resolved ${t}`);let a=V1(i);J(`Selected connection type: ${a.type}`);let s=await X3(a);J(`Collected Configuration Structure: ${JSON.stringify(Object.keys(s),null,2)}`);let u=J8({});J(`Runtime environment initialized with ${Object.keys(u).length} variables`),n=new g1({command:"npx",args:["-y","@smithery/cli@latest","run",t,"--config",JSON.stringify(JSON.stringify(s)),...e?["--key",e]:[]],env:u}),J(`Created transport for server: ${t}`),await nMe(n)}catch(i){r.fail(`Failed to inspect ${t}`),i instanceof Error?console.error(ls.default.red(`Error: ${i.message}`)):console.error(ls.default.red("An unexpected error occurred during inspection")),n&&await n.close(),process.exit(1)}}var rf=ye(ut());var ln=ye(require("node:fs")),eQ=ye(require("node:os")),No=ye(QZ()),qt=ye(require("node:path"));var tQ=require("node:child_process"),Ti=eQ.default.homedir(),qUe={win32:{baseDir:process.env.APPDATA||qt.default.join(Ti,"AppData","Roaming"),vscodePath:qt.default.join("Code","User","globalStorage")},darwin:{baseDir:qt.default.join(Ti,"Library","Application Support"),vscodePath:qt.default.join("Code","User","globalStorage")},linux:{baseDir:process.env.XDG_CONFIG_HOME||qt.default.join(Ti,".config"),vscodePath:qt.default.join("Code/User/globalStorage")}},RUe=process.platform,{baseDir:Y5,vscodePath:XZ}=qUe[RUe],rQ=qt.default.join(Y5,"Claude","claude_desktop_config.json"),NUe={claude:{type:"file",path:rQ},cline:{type:"file",path:qt.default.join(Y5,XZ,"saoudrizwan.claude-dev","settings","cline_mcp_settings.json")},roocode:{type:"file",path:qt.default.join(Y5,XZ,"rooveterinaryinc.roo-cline","settings","mcp_settings.json")},windsurf:{type:"file",path:qt.default.join(Ti,".codeium","windsurf","mcp_config.json")},witsy:{type:"file",path:qt.default.join(Y5,"Witsy","settings.json")},enconvo:{type:"file",path:qt.default.join(Ti,".config","enconvo","mcp_config.json")},cursor:{type:"file",path:qt.default.join(Ti,".cursor","mcp.json")},vscode:{type:"command",command:process.platform==="win32"?"code.cmd":"code"},"vscode-insiders":{type:"command",command:process.platform==="win32"?"code-insiders.cmd":"code-insiders"},boltai:{type:"file",path:qt.default.join(Ti,".boltai","mcp.json")},"amazon-bedrock":{type:"file",path:qt.default.join(Ti,"Amazon Bedrock Client","mcp_config.json")},amazonq:{type:"file",path:qt.default.join(Ti,".aws","amazonq","mcp.json")},librechat:{type:"yaml",path:qt.default.join(process.env.LIBRECHAT_CONFIG_DIR||Ti,"LibreChat","librechat.yaml")},"gemini-cli":{type:"file",path:qt.default.join(Ti,".gemini","settings.json")}};function ep(t){let e=t?.toLowerCase()||"claude";J(`Getting config path for client: ${e}`);let r=NUe[e]||{type:"file",path:qt.default.join(qt.default.dirname(rQ),"..",t||"claude",`${e}_config.json`)};return J(`Config path resolved to: ${JSON.stringify(r)}`),r}function tp(t){J(`Reading config for client: ${t}`);try{let e=ep(t);if(e.type==="command")return{mcpServers:{}};if(J(`Checking if config file exists at: ${e}`),!ln.default.existsSync(e.path))return J("Config file not found, returning default empty config"),{mcpServers:{}};J("Reading config file content");let r=ln.default.readFileSync(e.path,"utf8"),n={};return e.type==="yaml"?n=No.parse(r)||{}:n=JSON.parse(r),J(`Config loaded successfully: ${JSON.stringify(n,null,2)}`),{...n,mcpServers:n.mcpServers||{}}}catch(e){return J(`Error reading config: ${e instanceof Error?e.stack:JSON.stringify(e)}`),{mcpServers:{}}}}function Z5(t,e){if(J(`Writing config for client: ${e||"default"}`),J(`Config data: ${JSON.stringify(t,null,2)}`),!t.mcpServers||typeof t.mcpServers!="object")throw J("Invalid mcpServers structure in config"),new Error("Invalid mcpServers structure");let r=ep(e);r.type==="command"?IUe(t,r):r.type==="yaml"?kUe(t,r):BUe(t,r)}function IUe(t,e){let r=[];for(let[n,i]of Object.entries(t.mcpServers))r.push("--add-mcp",JSON.stringify({...i,name:n}));J(`Running command: ${JSON.stringify([e.command,...r])}`);try{let n=(0,tQ.execFileSync)(e.command,r);J(`Executed command successfully: ${n.toString()}`)}catch(n){throw J(`Error executing command: ${n instanceof Error?n.message:String(n)}`),n&&n.code==="ENOENT"?new Error(`Command '${e.command}' not found. Make sure ${e.command} is installed and on your PATH`):n}}function BUe(t,e){let r=qt.default.dirname(e.path);J(`Ensuring config directory exists: ${r}`),ln.default.existsSync(r)||(J(`Creating directory: ${r}`),ln.default.mkdirSync(r,{recursive:!0}));let n={mcpServers:{}};try{ln.default.existsSync(e.path)&&(J("Reading existing config file for merging"),n=JSON.parse(ln.default.readFileSync(e.path,"utf8")),J(`Existing config loaded: ${JSON.stringify(n,null,2)}`))}catch(a){J(`Error reading existing config for merge: ${a instanceof Error?a.message:String(a)}`)}J("Merging configs");let i={...n,...t};J(`Merged config: ${JSON.stringify(i,null,2)}`),J(`Writing config to file: ${e.path}`),ln.default.writeFileSync(e.path,JSON.stringify(i,null,2)),J("Config successfully written")}function kUe(t,e){let r=qt.default.dirname(e.path);J(`Ensuring config directory exists: ${r}`),ln.default.existsSync(r)||(J(`Creating directory: ${r}`),ln.default.mkdirSync(r,{recursive:!0}));let n=null;try{if(ln.default.existsSync(e.path)){J("Reading existing YAML config file for merging");let i=ln.default.readFileSync(e.path,"utf8");n=No.parseDocument(i),J("Original YAML document loaded successfully")}}catch(i){J(`Error reading existing YAML config for merge: ${i instanceof Error?i.message:String(i)}`)}if(J("Merging YAML configs"),n){let i=n.get("mcpServers");if(i||(J("mcpServers section not found, creating new section"),n.set("mcpServers",new No.YAMLMap),i=n.get("mcpServers")),i&&typeof i.set=="function")for(let[a,s]of Object.entries(t.mcpServers)){J(`Adding/updating server: ${a}`);let u=i.get(a);if(u&&typeof u.set=="function"){J(`Updating existing server ${a} while preserving comments`);for(let[p,d]of Object.entries(s))u.set(p,d)}else J(`Adding new server ${a}`),i.set(a,s)}else{let a=i?typeof i:"undefined";throw new Error(`mcpServers section is not a proper YAML Map (found: ${a}). Please ensure the YAML file has a valid mcpServers section or create a new file.`)}ln.default.writeFileSync(e.path,n.toString()),J("YAML config updated")}else{let i={mcpServers:t.mcpServers},a=No.stringify(i,{indent:2,lineWidth:-1});ln.default.writeFileSync(e.path,a),J("New YAML config file created")}J("YAML config successfully written")}var nQ=ye(i1()),iQ=require("node:child_process"),aQ=require("node:util"),cs=(0,aQ.promisify)(iQ.exec);async function jUe(t){if(!t)return!1;try{let e=process.platform,r={claude:"Claude"}[t]||t;if(e==="win32"){let{stdout:n}=await cs(`tasklist /FI "IMAGENAME eq ${r}.exe" /NH`);return n.includes(`${r}.exe`)}else if(e==="darwin"){let{stdout:n}=await cs(`pgrep -x "${r}"`);return!!n.trim()}else if(e==="linux"){let{stdout:n}=await cs(`pgrep -f "${r.toLowerCase()}"`);return!!n.trim()}return!1}catch{return!1}}async function MUe(t){let e={claude:"Claude"}[t]||t;try{let r=process.platform;r==="win32"?await cs(`taskkill /F /IM "${e}.exe" && start "" "${e}.exe"`):r==="darwin"?await cs(`killall "${e}" && open -a "${e}"`):r==="linux"&&await cs(`pkill -f "${e.toLowerCase()}" && ${e.toLowerCase()}`),await new Promise(n=>setTimeout(n,2e3)),r==="win32"?await cs(`start "" "${e}.exe"`):r==="darwin"?await cs(`open -a "${e}"`):r==="linux"&&await cs(e.toLowerCase()),console.log(`${e} has been restarted.`)}catch(r){console.error(`Failed to restart ${e}:`,r)}}async function Q5(t){if(!t||!await jUe(t))return!1;let{shouldRestart:r}=await nQ.default.prompt([{type:"confirm",name:"shouldRestart",message:`Would you like to restart the ${t} app to apply changes?`,default:!0}]);return r&&(console.log(`Restarting ${t} app...`),await MUe(t)),r}process.removeAllListeners("warning");process.on("warning",t=>{t.name==="DeprecationWarning"&&t.message.includes("punycode")||console.warn(t)});async function sQ(t,e,r,n,i){J(`Starting installation of ${t} for client ${e}`),J(`Resolving package: ${t}`);try{J("Checking analytics consent..."),await rJ(),J("Analytics consent check completed")}catch(s){console.warn(rf.default.yellow("[Analytics] Failed to check consent:"),s instanceof Error?s.message:String(s)),J(`Analytics consent check error details: ${JSON.stringify(s)}`)}let a=sa(`Resolving ${t}...`).start();try{J("Awaiting server resolution...");let s=await $1(t,n,"install");J(`Package resolved successfully: ${s.qualifiedName}`),a.succeed(`Successfully resolved ${t}`),J("Choosing connection type...");let u=V1(s);J(`Selected connection: ${JSON.stringify(u,null,2)}`),await QW(u),await XW(u);let p=n;ED(s)&&!n&&(a.stop(),p=await ho()),ez(s);let d=n?r||{}:await X3(u,r||{});J(`Config values: ${JSON.stringify(d,null,2)}`),J("Formatting server configuration...");let f=uJ(t,d,p,i);J(`Formatted server config: ${JSON.stringify(f,null,2)}`),J(`Reading configuration for client: ${e}`);let m=tp(e);J("Normalizing server ID...");let g=oJ(t);J(`Normalized server ID: ${g}`),J("Updating client configuration..."),m.mcpServers[g]=f,J("Writing updated configuration..."),Z5(m,e),J("Configuration successfully written"),console.log(rf.default.green(`${t} successfully installed for ${e}`)),J("Prompting for client restart..."),await Q5(e),J("Installation process completed"),process.exit(0)}catch(s){a.fail(`Failed to install ${t}`),J(`Installation error: ${s instanceof Error?s.stack:JSON.stringify(s)}`),s instanceof Error?console.error(rf.default.red(`Error: ${s.message}`)):console.error(rf.default.red("An unexpected error occurred during installation")),process.exit(1)}}var Io=ye(ut());async function wS(t,e){switch(t){case"clients":console.log(Io.default.bold("Available clients:")),Dn.forEach(r=>console.log(` ${Io.default.green(r)}`));break;case"servers":{if(ep(e).type==="command"){console.log(Io.default.yellow(`Listing servers is currently not supported for ${e}`));return}let n=tp(e),i=Object.keys(n.mcpServers);if(i?.length>0)console.log(Io.default.bold(`Installed servers for ${e}:`)),i.sort().forEach(a=>{console.log(`${Io.default.green(a)}`)});else{let a=`No installed servers found for ${e}`;console.log(`${Io.default.red(a)}`)}break}default:console.log(Io.default.yellow("Please specify what to list. Available options:")),console.log(" clients List available clients"),console.log(" servers List installed servers"),process.exit(1)}}var fs=ye(ut());var oQ=require("node:child_process");async function uQ(t,e,r=VA){return new Promise((n,i)=>{let[a,...s]=t.split(" "),u=(0,oQ.spawn)(a,s,{stdio:["inherit","pipe","pipe"],env:{...process.env,PORT:e}}),p,d=setTimeout(()=>{p||i(new Error("Timeout: Could not detect port from subprocess output"))},3e4),f=m=>{let g=m.toString();if(process.stdout.write(g),!p){let x=r(g);x&&(p=x,clearTimeout(d),n({process:u,detectedPort:p}))}};u.stdout?.on("data",f),u.stderr?.on("data",m=>{let g=m.toString();if(process.stderr.write(g),!p){let x=r(g);x&&(p=x,clearTimeout(d),n({process:u,detectedPort:p}))}}),u.on("error",m=>{clearTimeout(d),i(m)}),u.on("exit",m=>{clearTimeout(d),m!==0&&!p&&i(new Error(`Command exited with code ${m}`))})})}async function lQ(t){try{!t.command&&!t.port&&(console.error(fs.default.red("\u274C Port is required when no command is specified.")),console.error(fs.default.yellow("Use --port <port> to specify the port where your service is running.")),process.exit(1));let e=t.port||"8181",r;if(t.command){let{process:a,detectedPort:s}=await uQ(t.command,e);r=a,e=s}let{listener:n}=await _2(e,t.apiKey),i=async()=>{console.log(fs.default.yellow(`
80838
80838
  \u{1F44B} Shutting down tunnel...`));try{await n.close(),di(fs.default.green("Tunnel closed"))}catch{di(fs.default.yellow("Tunnel already closed"))}r&&!r.killed&&(console.log(fs.default.yellow("Stopping subprocess...")),r.kill("SIGTERM"),setTimeout(()=>{r&&!r.killed&&r.kill("SIGKILL")},5e3)),process.exit(0)};process.on("SIGINT",i),process.on("SIGTERM",i),r&&r.on("exit",a=>{a!==0&&(console.log(fs.default.yellow(`
80839
- Subprocess exited with code ${a}`)),i())}),process.stdin.resume(),await new Promise(()=>{})}catch(e){console.error(fs.default.red("\u274C Playground failed:"),e),process.exit(1)}}var fQ=ye(pE()),mQ=ye(YD());var LUe=30*60*1e3,X5=3,pQ=1e3,$Ue=3e4,le=t=>{let e=new Date().toISOString();console.error(`${e} ${t}`)},dQ=(t,e)=>{let r=null;return{start:()=>{r&&clearInterval(r),r=setInterval(async()=>{try{e()&&(le("[Runner] Sending heartbeat ping..."),await t({jsonrpc:"2.0",method:"ping",params:{}}))}catch(a){le(`[Runner] Failed to send heartbeat: ${a.message}`)}},$Ue)},stop:()=>{r&&(clearInterval(r),r=null)}}},cQ=(t,e)=>{let r=Date.now(),n=null,i=!1,a=()=>{r=Date.now(),i&&e?.onActivityResumed&&(e.onActivityResumed(),i=!1)};return{updateActivity:a,start:()=>{n&&clearInterval(n),a(),n=setInterval(()=>{let p=Date.now()-r;p>=LUe&&!i&&(le(`[Runner] Connection idle for ${Math.round(p/6e4)} minutes`),i=!0,e?.onIdleDetected&&e.onIdleDetected())},6e4)},stop:()=>{n&&(clearInterval(n),n=null)}}},e9=t=>{switch(t.error.code){case $t.ConnectionClosed:le(`[Runner] Connection closed by server (code: ${$t.ConnectionClosed}). Details: ${JSON.stringify(t.error)}`),le("[Runner] Attempting to reconnect after server-initiated close...");return;case $t.ParseError:case $t.InvalidRequest:case $t.MethodNotFound:case $t.InvalidParams:case $t.InternalError:return;default:le(`[Runner] Unexpected protocol error: ${JSON.stringify(t.error)}`);return}};var hQ=async(t,e,r,n)=>{let i="",a=!1,s=!1,u=null,p=(x,_)=>(le(`[Runner] ${_}: ${x.message}`),x),d=async x=>{if(i+=x.toString("utf8"),!a)return;let _=i.split(/\r?\n/);i=_.pop()??"";for(let b of _.filter(Boolean))try{let D=JSON.parse(b);if(n&&r&&L1){let{data:w,error:O}=$_.safeParse(D);if(!O){let R=Q3();(0,fQ.default)(L1,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify({eventName:"tool_call",payload:{connectionType:"stdio",serverQualifiedName:t.qualifiedName,toolParams:w?(0,mQ.pick)(w.params,"name"):{}},$session_id:R})}).catch(B=>{console.error("[Runner] Analytics error:",B)})}}await u?.send(D)}catch(D){p(D,"Failed to send message to child process")}},f=async()=>{if(le("[Runner] Starting child process setup..."),!t.connections.find(I=>I.type==="stdio"))throw new Error("No STDIO connection found");let _=await iJ(t.qualifiedName,e,r);if(!_||"type"in _)throw new Error("Failed to get valid stdio server configuration");let{command:b,args:D=[],env:w={}}=_,O=J8(w);J(`[Runner] Using environment: ${JSON.stringify(O,null,2)}`);let R=b,B=D;R==="npx"&&process.platform==="win32"&&(le("[Runner] Windows platform detected, using cmd /c for npx"),B=["/c","npx",...B],R="cmd"),le(`[Runner] Executing: ${JSON.stringify({command:R,args:B})}`);try{u=new g1({command:R,args:B,env:O})}catch(I){throw le("For more help, see: https://smithery.ai/docs/faq/users"),I}u.onmessage=I=>{try{if("error"in I&&I.error){let M=I;e9(M),M.error.code===$t.ConnectionClosed&&g().catch(Y=>{le(`[Runner] Error during exit cleanup: ${Y}`),process.exit(1)})}console.log(JSON.stringify(I))}catch(M){p(M,"Error handling message"),g().catch(Y=>{le(`[Runner] Error during exit cleanup: ${Y}`),process.exit(1)})}},u.onclose=()=>{le("[Runner] Child process terminated"),a&&!s?(le("[Runner] Process terminated unexpectedly while running"),g().catch(I=>{le(`[Runner] Error during exit cleanup: ${I}`),process.exit(1)})):process.exit(0)},u.onerror=I=>{le(`[Runner] Child process error: ${I.message}`),I.message.includes("spawn")?le("[Runner] Failed to spawn child process - check if the command exists and is executable"):I.message.includes("permission")?le("[Runner] Permission error when running child process"):le("[Runner] Non-critical error, continuing")},await u.start(),a=!0,await d(Buffer.from(""))},m=async()=>{if(s){le("[Runner] Cleanup already in progress, skipping...");return}if(le("[Runner] Starting cleanup..."),s=!0,u){try{le("[Runner] Attempting to close transport..."),await Promise.race([u.close(),new Promise((x,_)=>setTimeout(()=>_(new Error("Transport close timeout")),3e3))]),le("[Runner] Transport closed successfully")}catch(x){le(`[Runner] Error during transport cleanup: ${x}`)}u=null}le("[Runner] Cleanup completed")},g=async()=>{le("[Runner] Exit handler triggered, starting shutdown..."),await m(),s||process.exit(0)};return process.on("SIGINT",g),process.on("SIGTERM",g),process.on("beforeExit",g),process.on("exit",()=>{le("[Runner] Final cleanup on exit")}),process.stdin.on("end",()=>{le("[Runner] STDIN closed (client disconnected)"),g().catch(x=>{le(`[Runner] Error during stdin close cleanup: ${x}`),process.exit(1)})}),process.stdin.on("error",x=>{le(`[Runner] STDIN error: ${x}`),g().catch(_=>{le(`[Runner] Error during stdin error cleanup: ${_}`),process.exit(1)})}),process.stdin.on("data",x=>d(x).catch(_=>p(_,"Error processing message"))),await f(),m};var SS;SS=globalThis.crypto?.webcrypto??globalThis.crypto??import("node:crypto").then(t=>t.webcrypto);async function VUe(t){return(await SS).getRandomValues(new Uint8Array(t))}async function UUe(t){let e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~",r="",n=await VUe(t);for(let i=0;i<t;i++){let a=n[i]%e.length;r+=e[a]}return r}async function WUe(t){return await UUe(t)}async function zUe(t){let e=await(await SS).subtle.digest("SHA-256",new TextEncoder().encode(t));return btoa(String.fromCharCode(...new Uint8Array(e))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function CS(t){if(t||(t=43),t<43||t>128)throw`Expected a length between 43 and 128. Received ${t}.`;let e=await WUe(t),r=await zUe(e);return{code_verifier:e,code_challenge:r}}var vQ=y.object({resource:y.string().url(),authorization_servers:y.array(y.string().url()).optional(),jwks_uri:y.string().url().optional(),scopes_supported:y.array(y.string()).optional(),bearer_methods_supported:y.array(y.string()).optional(),resource_signing_alg_values_supported:y.array(y.string()).optional(),resource_name:y.string().optional(),resource_documentation:y.string().optional(),resource_policy_uri:y.string().url().optional(),resource_tos_uri:y.string().url().optional(),tls_client_certificate_bound_access_tokens:y.boolean().optional(),authorization_details_types_supported:y.array(y.string()).optional(),dpop_signing_alg_values_supported:y.array(y.string()).optional(),dpop_bound_access_tokens_required:y.boolean().optional()}).passthrough(),FS=y.object({issuer:y.string(),authorization_endpoint:y.string(),token_endpoint:y.string(),registration_endpoint:y.string().optional(),scopes_supported:y.array(y.string()).optional(),response_types_supported:y.array(y.string()),response_modes_supported:y.array(y.string()).optional(),grant_types_supported:y.array(y.string()).optional(),token_endpoint_auth_methods_supported:y.array(y.string()).optional(),token_endpoint_auth_signing_alg_values_supported:y.array(y.string()).optional(),service_documentation:y.string().optional(),revocation_endpoint:y.string().optional(),revocation_endpoint_auth_methods_supported:y.array(y.string()).optional(),revocation_endpoint_auth_signing_alg_values_supported:y.array(y.string()).optional(),introspection_endpoint:y.string().optional(),introspection_endpoint_auth_methods_supported:y.array(y.string()).optional(),introspection_endpoint_auth_signing_alg_values_supported:y.array(y.string()).optional(),code_challenge_methods_supported:y.array(y.string()).optional()}).passthrough(),HUe=y.object({issuer:y.string(),authorization_endpoint:y.string(),token_endpoint:y.string(),userinfo_endpoint:y.string().optional(),jwks_uri:y.string(),registration_endpoint:y.string().optional(),scopes_supported:y.array(y.string()).optional(),response_types_supported:y.array(y.string()),response_modes_supported:y.array(y.string()).optional(),grant_types_supported:y.array(y.string()).optional(),acr_values_supported:y.array(y.string()).optional(),subject_types_supported:y.array(y.string()),id_token_signing_alg_values_supported:y.array(y.string()),id_token_encryption_alg_values_supported:y.array(y.string()).optional(),id_token_encryption_enc_values_supported:y.array(y.string()).optional(),userinfo_signing_alg_values_supported:y.array(y.string()).optional(),userinfo_encryption_alg_values_supported:y.array(y.string()).optional(),userinfo_encryption_enc_values_supported:y.array(y.string()).optional(),request_object_signing_alg_values_supported:y.array(y.string()).optional(),request_object_encryption_alg_values_supported:y.array(y.string()).optional(),request_object_encryption_enc_values_supported:y.array(y.string()).optional(),token_endpoint_auth_methods_supported:y.array(y.string()).optional(),token_endpoint_auth_signing_alg_values_supported:y.array(y.string()).optional(),display_values_supported:y.array(y.string()).optional(),claim_types_supported:y.array(y.string()).optional(),claims_supported:y.array(y.string()).optional(),service_documentation:y.string().optional(),claims_locales_supported:y.array(y.string()).optional(),ui_locales_supported:y.array(y.string()).optional(),claims_parameter_supported:y.boolean().optional(),request_parameter_supported:y.boolean().optional(),request_uri_parameter_supported:y.boolean().optional(),require_request_uri_registration:y.boolean().optional(),op_policy_uri:y.string().optional(),op_tos_uri:y.string().optional()}).passthrough(),gQ=HUe.merge(FS.pick({code_challenge_methods_supported:!0})),AS=y.object({access_token:y.string(),id_token:y.string().optional(),token_type:y.string(),expires_in:y.number().optional(),scope:y.string().optional(),refresh_token:y.string().optional()}).strip(),xQ=y.object({error:y.string(),error_description:y.string().optional(),error_uri:y.string().optional()}),KUe=y.object({redirect_uris:y.array(y.string()).refine(t=>t.every(e=>URL.canParse(e)),{message:"redirect_uris must contain valid URLs"}),token_endpoint_auth_method:y.string().optional(),grant_types:y.array(y.string()).optional(),response_types:y.array(y.string()).optional(),client_name:y.string().optional(),client_uri:y.string().optional(),logo_uri:y.string().optional(),scope:y.string().optional(),contacts:y.array(y.string()).optional(),tos_uri:y.string().optional(),policy_uri:y.string().optional(),jwks_uri:y.string().optional(),jwks:y.any().optional(),software_id:y.string().optional(),software_version:y.string().optional(),software_statement:y.string().optional()}).strip(),GUe=y.object({client_id:y.string(),client_secret:y.string().optional(),client_id_issued_at:y.number().optional(),client_secret_expires_at:y.number().optional()}).strip(),yQ=KUe.merge(GUe),eut=y.object({error:y.string(),error_description:y.string().optional()}).strip(),tut=y.object({token:y.string(),token_type_hint:y.string().optional()}).strip();function bQ(t){let e=typeof t=="string"?new URL(t):new URL(t.href);return e.hash="",e}function _Q({requestedResource:t,configuredResource:e}){let r=typeof t=="string"?new URL(t):new URL(t.href),n=typeof e=="string"?new URL(e):new URL(e.href);if(r.origin!==n.origin||r.pathname.length<n.pathname.length)return!1;let i=r.pathname.endsWith("/")?r.pathname:r.pathname+"/",a=n.pathname.endsWith("/")?n.pathname:n.pathname+"/";return i.startsWith(a)}var er=class extends Error{constructor(e,r){super(e),this.errorUri=r,this.name=this.constructor.name}toResponseObject(){let e={error:this.errorCode,error_description:this.message};return this.errorUri&&(e.error_uri=this.errorUri),e}get errorCode(){return this.constructor.errorCode}},nf=class extends er{};nf.errorCode="invalid_request";var pl=class extends er{};pl.errorCode="invalid_client";var dl=class extends er{};dl.errorCode="invalid_grant";var cl=class extends er{};cl.errorCode="unauthorized_client";var af=class extends er{};af.errorCode="unsupported_grant_type";var sf=class extends er{};sf.errorCode="invalid_scope";var of=class extends er{};of.errorCode="access_denied";var ms=class extends er{};ms.errorCode="server_error";var uf=class extends er{};uf.errorCode="temporarily_unavailable";var lf=class extends er{};lf.errorCode="unsupported_response_type";var pf=class extends er{};pf.errorCode="unsupported_token_type";var df=class extends er{};df.errorCode="invalid_token";var cf=class extends er{};cf.errorCode="method_not_allowed";var ff=class extends er{};ff.errorCode="too_many_requests";var mf=class extends er{};mf.errorCode="invalid_client_metadata";var hf=class extends er{};hf.errorCode="insufficient_scope";var DQ={[nf.errorCode]:nf,[pl.errorCode]:pl,[dl.errorCode]:dl,[cl.errorCode]:cl,[af.errorCode]:af,[sf.errorCode]:sf,[of.errorCode]:of,[ms.errorCode]:ms,[uf.errorCode]:uf,[lf.errorCode]:lf,[pf.errorCode]:pf,[df.errorCode]:df,[cf.errorCode]:cf,[ff.errorCode]:ff,[mf.errorCode]:mf,[hf.errorCode]:hf};var Bo=class extends Error{constructor(e){super(e??"Unauthorized")}};function wQ(t,e){let r=t.client_secret!==void 0;return e.length===0?r?"client_secret_post":"none":r&&e.includes("client_secret_basic")?"client_secret_basic":r&&e.includes("client_secret_post")?"client_secret_post":e.includes("none")?"none":r?"client_secret_post":"none"}function SQ(t,e,r,n){let{client_id:i,client_secret:a}=e;switch(t){case"client_secret_basic":JUe(i,a,r);return;case"client_secret_post":YUe(i,a,n);return;case"none":ZUe(i,n);return;default:throw new Error(`Unsupported client authentication method: ${t}`)}}function JUe(t,e,r){if(!e)throw new Error("client_secret_basic authentication requires a client_secret");let n=btoa(`${t}:${e}`);r.set("Authorization",`Basic ${n}`)}function YUe(t,e,r){r.set("client_id",t),e&&r.set("client_secret",e)}function ZUe(t,e){e.set("client_id",t)}async function TS(t){let e=t instanceof Response?t.status:void 0,r=t instanceof Response?await t.text():t;try{let n=xQ.parse(JSON.parse(r)),{error:i,error_description:a,error_uri:s}=n,u=DQ[i]||ms;return new u(a||"",s)}catch(n){let i=`${e?`HTTP ${e}: `:""}Invalid OAuth error response: ${n}. Raw body: ${r}`;return new ms(i)}}async function t9(t,e){var r,n;try{return await OS(t,e)}catch(i){if(i instanceof pl||i instanceof cl)return await((r=t.invalidateCredentials)===null||r===void 0?void 0:r.call(t,"all")),await OS(t,e);if(i instanceof dl)return await((n=t.invalidateCredentials)===null||n===void 0?void 0:n.call(t,"tokens")),await OS(t,e);throw i}}async function OS(t,{serverUrl:e,authorizationCode:r,scope:n,resourceMetadataUrl:i,fetchFn:a}){let s,u;try{s=await XUe(e,{resourceMetadataUrl:i},a),s.authorization_servers&&s.authorization_servers.length>0&&(u=s.authorization_servers[0])}catch{}u||(u=e);let p=await QUe(e,t,s),d=await iWe(u,{fetchFn:a}),f=await Promise.resolve(t.clientInformation());if(!f){if(r!==void 0)throw new Error("Existing OAuth client information is required when exchanging an authorization code");if(!t.saveClientInformation)throw new Error("OAuth client information must be saveable for dynamic registration");let b=await uWe(u,{metadata:d,clientMetadata:t.clientMetadata});await t.saveClientInformation(b),f=b}if(r!==void 0){let b=await t.codeVerifier(),D=await sWe(u,{metadata:d,clientInformation:f,authorizationCode:r,codeVerifier:b,redirectUri:t.redirectUrl,resource:p,addClientAuthentication:t.addClientAuthentication,fetchFn:a});return await t.saveTokens(D),"AUTHORIZED"}let m=await t.tokens();if(m?.refresh_token)try{let b=await oWe(u,{metadata:d,clientInformation:f,refreshToken:m.refresh_token,resource:p,addClientAuthentication:t.addClientAuthentication});return await t.saveTokens(b),"AUTHORIZED"}catch(b){if(!(!(b instanceof er)||b instanceof ms))throw b}let g=t.state?await t.state():void 0,{authorizationUrl:x,codeVerifier:_}=await aWe(u,{metadata:d,clientInformation:f,state:g,redirectUrl:t.redirectUrl,scope:n||t.clientMetadata.scope,resource:p});return await t.saveCodeVerifier(_),await t.redirectToAuthorization(x),"REDIRECT"}async function QUe(t,e,r){let n=bQ(t);if(e.validateResourceURL)return await e.validateResourceURL(n,r?.resource);if(r){if(!_Q({requestedResource:n,configuredResource:r.resource}))throw new Error(`Protected resource ${r.resource} does not match expected ${n} (or origin)`);return new URL(r.resource)}}function CQ(t){let e=t.headers.get("WWW-Authenticate");if(!e)return;let[r,n]=e.split(" ");if(r.toLowerCase()!=="bearer"||!n)return;let a=/resource_metadata="([^"]*)"/.exec(e);if(a)try{return new URL(a[1])}catch{return}}async function XUe(t,e,r=fetch){let n=await rWe(t,"oauth-protected-resource",r,{protocolVersion:e?.protocolVersion,metadataUrl:e?.resourceMetadataUrl});if(!n||n.status===404)throw new Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!n.ok)throw new Error(`HTTP ${n.status} trying to load well-known OAuth protected resource metadata.`);return vQ.parse(await n.json())}async function PS(t,e,r=fetch){try{return await r(t,{headers:e})}catch(n){if(n instanceof TypeError)return e?PS(t,void 0,r):void 0;throw n}}function eWe(t,e="",r={}){return e.endsWith("/")&&(e=e.slice(0,-1)),r.prependPathname?`${e}/.well-known/${t}`:`/.well-known/${t}${e}`}async function EQ(t,e,r=fetch){return await PS(t,{"MCP-Protocol-Version":e},r)}function tWe(t,e){return!t||t.status===404&&e!=="/"}async function rWe(t,e,r,n){var i,a;let s=new URL(t),u=(i=n?.protocolVersion)!==null&&i!==void 0?i:h1,p;if(n?.metadataUrl)p=new URL(n.metadataUrl);else{let f=eWe(e,s.pathname);p=new URL(f,(a=n?.metadataServerUrl)!==null&&a!==void 0?a:s),p.search=s.search}let d=await EQ(p,u,r);if(!n?.metadataUrl&&tWe(d,s.pathname)){let f=new URL(`/.well-known/${e}`,s);d=await EQ(f,u,r)}return d}function nWe(t){let e=typeof t=="string"?new URL(t):t,r=e.pathname!=="/",n=[];if(!r)return n.push({url:new URL("/.well-known/oauth-authorization-server",e.origin),type:"oauth"}),n.push({url:new URL("/.well-known/openid-configuration",e.origin),type:"oidc"}),n;let i=e.pathname;return i.endsWith("/")&&(i=i.slice(0,-1)),n.push({url:new URL(`/.well-known/oauth-authorization-server${i}`,e.origin),type:"oauth"}),n.push({url:new URL("/.well-known/oauth-authorization-server",e.origin),type:"oauth"}),n.push({url:new URL(`/.well-known/openid-configuration${i}`,e.origin),type:"oidc"}),n.push({url:new URL(`${i}/.well-known/openid-configuration`,e.origin),type:"oidc"}),n}async function iWe(t,{fetchFn:e=fetch,protocolVersion:r=h1}={}){var n;let i={"MCP-Protocol-Version":r},a=nWe(t);for(let{url:s,type:u}of a){let p=await PS(s,i,e);if(!p)throw new Error(`CORS error trying to load ${u==="oauth"?"OAuth":"OpenID provider"} metadata from ${s}`);if(!p.ok){if(p.status>=400&&p.status<500)continue;throw new Error(`HTTP ${p.status} trying to load ${u==="oauth"?"OAuth":"OpenID provider"} metadata from ${s}`)}if(u==="oauth")return FS.parse(await p.json());{let d=gQ.parse(await p.json());if(!(!((n=d.code_challenge_methods_supported)===null||n===void 0)&&n.includes("S256")))throw new Error(`Incompatible OIDC provider at ${s}: does not support S256 code challenge method required by MCP specification`);return d}}}async function aWe(t,{metadata:e,clientInformation:r,redirectUrl:n,scope:i,state:a,resource:s}){let u="code",p="S256",d;if(e){if(d=new URL(e.authorization_endpoint),!e.response_types_supported.includes(u))throw new Error(`Incompatible auth server: does not support response type ${u}`);if(!e.code_challenge_methods_supported||!e.code_challenge_methods_supported.includes(p))throw new Error(`Incompatible auth server: does not support code challenge method ${p}`)}else d=new URL("/authorize",t);let f=await CS(),m=f.code_verifier,g=f.code_challenge;return d.searchParams.set("response_type",u),d.searchParams.set("client_id",r.client_id),d.searchParams.set("code_challenge",g),d.searchParams.set("code_challenge_method",p),d.searchParams.set("redirect_uri",String(n)),a&&d.searchParams.set("state",a),i&&d.searchParams.set("scope",i),i?.includes("offline_access")&&d.searchParams.append("prompt","consent"),s&&d.searchParams.set("resource",s.href),{authorizationUrl:d,codeVerifier:m}}async function sWe(t,{metadata:e,clientInformation:r,authorizationCode:n,codeVerifier:i,redirectUri:a,resource:s,addClientAuthentication:u,fetchFn:p}){var d;let f="authorization_code",m=e?.token_endpoint?new URL(e.token_endpoint):new URL("/token",t);if(e?.grant_types_supported&&!e.grant_types_supported.includes(f))throw new Error(`Incompatible auth server: does not support grant type ${f}`);let g=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"}),x=new URLSearchParams({grant_type:f,code:n,code_verifier:i,redirect_uri:String(a)});if(u)u(g,x,t,e);else{let b=(d=e?.token_endpoint_auth_methods_supported)!==null&&d!==void 0?d:[],D=wQ(r,b);SQ(D,r,g,x)}s&&x.set("resource",s.href);let _=await(p??fetch)(m,{method:"POST",headers:g,body:x});if(!_.ok)throw await TS(_);return AS.parse(await _.json())}async function oWe(t,{metadata:e,clientInformation:r,refreshToken:n,resource:i,addClientAuthentication:a,fetchFn:s}){var u;let p="refresh_token",d;if(e){if(d=new URL(e.token_endpoint),e.grant_types_supported&&!e.grant_types_supported.includes(p))throw new Error(`Incompatible auth server: does not support grant type ${p}`)}else d=new URL("/token",t);let f=new Headers({"Content-Type":"application/x-www-form-urlencoded"}),m=new URLSearchParams({grant_type:p,refresh_token:n});if(a)a(f,m,t,e);else{let x=(u=e?.token_endpoint_auth_methods_supported)!==null&&u!==void 0?u:[],_=wQ(r,x);SQ(_,r,f,m)}i&&m.set("resource",i.href);let g=await(s??fetch)(d,{method:"POST",headers:f,body:m});if(!g.ok)throw await TS(g);return AS.parse({refresh_token:n,...await g.json()})}async function uWe(t,{metadata:e,clientMetadata:r,fetchFn:n}){let i;if(e){if(!e.registration_endpoint)throw new Error("Incompatible auth server: does not support dynamic client registration");i=new URL(e.registration_endpoint)}else i=new URL("/register",t);let a=await(n??fetch)(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!a.ok)throw await TS(a);return yQ.parse(await a.json())}var lWe=Object.defineProperty,pWe=(t,e,r)=>e in t?lWe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,r9=(t,e,r)=>pWe(t,typeof e!="symbol"?e+"":e,r),n9=class extends Error{constructor(e,r){super(e),r9(this,"type"),r9(this,"field"),r9(this,"value"),r9(this,"line"),this.name="ParseError",this.type=r.type,this.field=r.field,this.value=r.value,this.line=r.line}};function qS(t){}function FQ(t){let{onEvent:e=qS,onError:r=qS,onRetry:n=qS,onComment:i}=t,a="",s=!0,u,p="",d="";function f(b){let D=s?b.replace(/^\xEF\xBB\xBF/,""):b,[w,O]=dWe(`${a}${D}`);for(let R of w)m(R);a=O,s=!1}function m(b){if(b===""){x();return}if(b.startsWith(":")){i&&i(b.slice(b.startsWith(": ")?2:1));return}let D=b.indexOf(":");if(D!==-1){let w=b.slice(0,D),O=b[D+1]===" "?2:1,R=b.slice(D+O);g(w,R,b);return}g(b,"",b)}function g(b,D,w){switch(b){case"event":d=D;break;case"data":p=`${p}${D}
80839
+ Subprocess exited with code ${a}`)),i())}),process.stdin.resume(),await new Promise(()=>{})}catch(e){console.error(fs.default.red("\u274C Playground failed:"),e),process.exit(1)}}var fQ=ye(pE()),mQ=ye(YD());var LUe=30*60*1e3,X5=3,pQ=1e3,$Ue=3e4,le=t=>{let e=new Date().toISOString();console.error(`${e} ${t}`)},dQ=(t,e)=>{let r=null;return{start:()=>{r&&clearInterval(r),r=setInterval(async()=>{try{e()&&(le("[Runner] Sending heartbeat ping..."),await t({jsonrpc:"2.0",method:"ping",params:{}}))}catch(a){le(`[Runner] Failed to send heartbeat: ${a.message}`)}},$Ue)},stop:()=>{r&&(clearInterval(r),r=null)}}},cQ=(t,e)=>{let r=Date.now(),n=null,i=!1,a=()=>{r=Date.now(),i&&e?.onActivityResumed&&(e.onActivityResumed(),i=!1)};return{updateActivity:a,start:()=>{n&&clearInterval(n),a(),n=setInterval(()=>{let p=Date.now()-r;p>=LUe&&!i&&(le(`[Runner] Connection idle for ${Math.round(p/6e4)} minutes`),i=!0,e?.onIdleDetected&&e.onIdleDetected())},6e4)},stop:()=>{n&&(clearInterval(n),n=null)}}},e9=t=>{switch(t.error.code){case $t.ConnectionClosed:le(`[Runner] Connection closed by server (code: ${$t.ConnectionClosed}). Details: ${JSON.stringify(t.error)}`),le("[Runner] Attempting to reconnect after server-initiated close...");return;case $t.ParseError:case $t.InvalidRequest:case $t.MethodNotFound:case $t.InvalidParams:case $t.InternalError:return;default:le(`[Runner] Unexpected protocol error: ${JSON.stringify(t.error)}`);return}};var hQ=async(t,e,r,n)=>{let i="",a=!1,s=!1,u=null,p=(x,_)=>(le(`[Runner] ${_}: ${x.message}`),x),d=async x=>{if(i+=x.toString("utf8"),!a)return;let _=i.split(/\r?\n/);i=_.pop()??"";for(let b of _.filter(Boolean))try{let D=JSON.parse(b);if(n&&r&&L1){let{data:w,error:O}=$_.safeParse(D);if(!O){let R=Q3();(0,fQ.default)(L1,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify({eventName:"tool_call",payload:{connectionType:"stdio",serverQualifiedName:t.qualifiedName,toolParams:w?(0,mQ.pick)(w.params,"name"):{}},$session_id:R})}).catch(B=>{console.error("[Runner] Analytics error:",B)})}}await u?.send(D)}catch(D){p(D,"Failed to send message to child process")}},f=async()=>{if(le("[Runner] Starting child process setup..."),!t.connections.find(I=>I.type==="stdio"))throw new Error("No STDIO connection found");let _=await iJ(t.qualifiedName,e,r);if(!_||"type"in _)throw new Error("Failed to get valid stdio server configuration");let{command:b,args:D=[],env:w={}}=_,O=J8(w);J(`[Runner] Using environment: ${JSON.stringify(O,null,2)}`);let R=b,B=D;R==="npx"&&process.platform==="win32"&&(le("[Runner] Windows platform detected, using cmd /c for npx"),B=["/c","npx",...B],R="cmd"),le(`[Runner] Executing: ${JSON.stringify({command:R,args:B})}`);try{u=new g1({command:R,args:B,env:O})}catch(I){throw le("For more help, see: https://smithery.ai/docs/faq/users"),I}u.onmessage=I=>{try{if("error"in I&&I.error){let M=I;e9(M),M.error.code===$t.ConnectionClosed&&g().catch(Y=>{le(`[Runner] Error during exit cleanup: ${Y}`),process.exit(1)})}console.log(JSON.stringify(I))}catch(M){p(M,"Error handling message"),g().catch(Y=>{le(`[Runner] Error during exit cleanup: ${Y}`),process.exit(1)})}},u.onclose=()=>{le("[Runner] Child process terminated"),a&&!s?(le("[Runner] Process terminated unexpectedly while running"),g().catch(I=>{le(`[Runner] Error during exit cleanup: ${I}`),process.exit(1)})):process.exit(0)},u.onerror=I=>{le(`[Runner] Child process error: ${I.message}`),I.message.includes("spawn")?le("[Runner] Failed to spawn child process - check if the command exists and is executable"):I.message.includes("permission")?le("[Runner] Permission error when running child process"):le("[Runner] Non-critical error, continuing")},await u.start(),a=!0,await d(Buffer.from(""))},m=async()=>{if(s){le("[Runner] Cleanup already in progress, skipping...");return}if(le("[Runner] Starting cleanup..."),s=!0,u){try{le("[Runner] Attempting to close transport..."),await Promise.race([u.close(),new Promise((x,_)=>setTimeout(()=>_(new Error("Transport close timeout")),3e3))]),le("[Runner] Transport closed successfully")}catch(x){le(`[Runner] Error during transport cleanup: ${x}`)}u=null}le("[Runner] Cleanup completed")},g=async()=>{le("[Runner] Exit handler triggered, starting shutdown..."),await m(),process.exit(0)};return process.on("SIGINT",g),process.on("SIGTERM",g),process.on("beforeExit",g),process.on("exit",()=>{le("[Runner] Final cleanup on exit")}),process.stdin.on("end",()=>{le("[Runner] STDIN closed (client disconnected)"),g().catch(x=>{le(`[Runner] Error during stdin close cleanup: ${x}`),process.exit(1)})}),process.stdin.on("error",x=>{le(`[Runner] STDIN error: ${x}`),g().catch(_=>{le(`[Runner] Error during stdin error cleanup: ${_}`),process.exit(1)})}),process.stdin.on("data",x=>d(x).catch(_=>p(_,"Error processing message"))),await f(),m};var SS;SS=globalThis.crypto?.webcrypto??globalThis.crypto??import("node:crypto").then(t=>t.webcrypto);async function VUe(t){return(await SS).getRandomValues(new Uint8Array(t))}async function UUe(t){let e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~",r="",n=await VUe(t);for(let i=0;i<t;i++){let a=n[i]%e.length;r+=e[a]}return r}async function WUe(t){return await UUe(t)}async function zUe(t){let e=await(await SS).subtle.digest("SHA-256",new TextEncoder().encode(t));return btoa(String.fromCharCode(...new Uint8Array(e))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function CS(t){if(t||(t=43),t<43||t>128)throw`Expected a length between 43 and 128. Received ${t}.`;let e=await WUe(t),r=await zUe(e);return{code_verifier:e,code_challenge:r}}var vQ=y.object({resource:y.string().url(),authorization_servers:y.array(y.string().url()).optional(),jwks_uri:y.string().url().optional(),scopes_supported:y.array(y.string()).optional(),bearer_methods_supported:y.array(y.string()).optional(),resource_signing_alg_values_supported:y.array(y.string()).optional(),resource_name:y.string().optional(),resource_documentation:y.string().optional(),resource_policy_uri:y.string().url().optional(),resource_tos_uri:y.string().url().optional(),tls_client_certificate_bound_access_tokens:y.boolean().optional(),authorization_details_types_supported:y.array(y.string()).optional(),dpop_signing_alg_values_supported:y.array(y.string()).optional(),dpop_bound_access_tokens_required:y.boolean().optional()}).passthrough(),FS=y.object({issuer:y.string(),authorization_endpoint:y.string(),token_endpoint:y.string(),registration_endpoint:y.string().optional(),scopes_supported:y.array(y.string()).optional(),response_types_supported:y.array(y.string()),response_modes_supported:y.array(y.string()).optional(),grant_types_supported:y.array(y.string()).optional(),token_endpoint_auth_methods_supported:y.array(y.string()).optional(),token_endpoint_auth_signing_alg_values_supported:y.array(y.string()).optional(),service_documentation:y.string().optional(),revocation_endpoint:y.string().optional(),revocation_endpoint_auth_methods_supported:y.array(y.string()).optional(),revocation_endpoint_auth_signing_alg_values_supported:y.array(y.string()).optional(),introspection_endpoint:y.string().optional(),introspection_endpoint_auth_methods_supported:y.array(y.string()).optional(),introspection_endpoint_auth_signing_alg_values_supported:y.array(y.string()).optional(),code_challenge_methods_supported:y.array(y.string()).optional()}).passthrough(),HUe=y.object({issuer:y.string(),authorization_endpoint:y.string(),token_endpoint:y.string(),userinfo_endpoint:y.string().optional(),jwks_uri:y.string(),registration_endpoint:y.string().optional(),scopes_supported:y.array(y.string()).optional(),response_types_supported:y.array(y.string()),response_modes_supported:y.array(y.string()).optional(),grant_types_supported:y.array(y.string()).optional(),acr_values_supported:y.array(y.string()).optional(),subject_types_supported:y.array(y.string()),id_token_signing_alg_values_supported:y.array(y.string()),id_token_encryption_alg_values_supported:y.array(y.string()).optional(),id_token_encryption_enc_values_supported:y.array(y.string()).optional(),userinfo_signing_alg_values_supported:y.array(y.string()).optional(),userinfo_encryption_alg_values_supported:y.array(y.string()).optional(),userinfo_encryption_enc_values_supported:y.array(y.string()).optional(),request_object_signing_alg_values_supported:y.array(y.string()).optional(),request_object_encryption_alg_values_supported:y.array(y.string()).optional(),request_object_encryption_enc_values_supported:y.array(y.string()).optional(),token_endpoint_auth_methods_supported:y.array(y.string()).optional(),token_endpoint_auth_signing_alg_values_supported:y.array(y.string()).optional(),display_values_supported:y.array(y.string()).optional(),claim_types_supported:y.array(y.string()).optional(),claims_supported:y.array(y.string()).optional(),service_documentation:y.string().optional(),claims_locales_supported:y.array(y.string()).optional(),ui_locales_supported:y.array(y.string()).optional(),claims_parameter_supported:y.boolean().optional(),request_parameter_supported:y.boolean().optional(),request_uri_parameter_supported:y.boolean().optional(),require_request_uri_registration:y.boolean().optional(),op_policy_uri:y.string().optional(),op_tos_uri:y.string().optional()}).passthrough(),gQ=HUe.merge(FS.pick({code_challenge_methods_supported:!0})),AS=y.object({access_token:y.string(),id_token:y.string().optional(),token_type:y.string(),expires_in:y.number().optional(),scope:y.string().optional(),refresh_token:y.string().optional()}).strip(),xQ=y.object({error:y.string(),error_description:y.string().optional(),error_uri:y.string().optional()}),KUe=y.object({redirect_uris:y.array(y.string()).refine(t=>t.every(e=>URL.canParse(e)),{message:"redirect_uris must contain valid URLs"}),token_endpoint_auth_method:y.string().optional(),grant_types:y.array(y.string()).optional(),response_types:y.array(y.string()).optional(),client_name:y.string().optional(),client_uri:y.string().optional(),logo_uri:y.string().optional(),scope:y.string().optional(),contacts:y.array(y.string()).optional(),tos_uri:y.string().optional(),policy_uri:y.string().optional(),jwks_uri:y.string().optional(),jwks:y.any().optional(),software_id:y.string().optional(),software_version:y.string().optional(),software_statement:y.string().optional()}).strip(),GUe=y.object({client_id:y.string(),client_secret:y.string().optional(),client_id_issued_at:y.number().optional(),client_secret_expires_at:y.number().optional()}).strip(),yQ=KUe.merge(GUe),eut=y.object({error:y.string(),error_description:y.string().optional()}).strip(),tut=y.object({token:y.string(),token_type_hint:y.string().optional()}).strip();function bQ(t){let e=typeof t=="string"?new URL(t):new URL(t.href);return e.hash="",e}function _Q({requestedResource:t,configuredResource:e}){let r=typeof t=="string"?new URL(t):new URL(t.href),n=typeof e=="string"?new URL(e):new URL(e.href);if(r.origin!==n.origin||r.pathname.length<n.pathname.length)return!1;let i=r.pathname.endsWith("/")?r.pathname:r.pathname+"/",a=n.pathname.endsWith("/")?n.pathname:n.pathname+"/";return i.startsWith(a)}var er=class extends Error{constructor(e,r){super(e),this.errorUri=r,this.name=this.constructor.name}toResponseObject(){let e={error:this.errorCode,error_description:this.message};return this.errorUri&&(e.error_uri=this.errorUri),e}get errorCode(){return this.constructor.errorCode}},nf=class extends er{};nf.errorCode="invalid_request";var pl=class extends er{};pl.errorCode="invalid_client";var dl=class extends er{};dl.errorCode="invalid_grant";var cl=class extends er{};cl.errorCode="unauthorized_client";var af=class extends er{};af.errorCode="unsupported_grant_type";var sf=class extends er{};sf.errorCode="invalid_scope";var of=class extends er{};of.errorCode="access_denied";var ms=class extends er{};ms.errorCode="server_error";var uf=class extends er{};uf.errorCode="temporarily_unavailable";var lf=class extends er{};lf.errorCode="unsupported_response_type";var pf=class extends er{};pf.errorCode="unsupported_token_type";var df=class extends er{};df.errorCode="invalid_token";var cf=class extends er{};cf.errorCode="method_not_allowed";var ff=class extends er{};ff.errorCode="too_many_requests";var mf=class extends er{};mf.errorCode="invalid_client_metadata";var hf=class extends er{};hf.errorCode="insufficient_scope";var DQ={[nf.errorCode]:nf,[pl.errorCode]:pl,[dl.errorCode]:dl,[cl.errorCode]:cl,[af.errorCode]:af,[sf.errorCode]:sf,[of.errorCode]:of,[ms.errorCode]:ms,[uf.errorCode]:uf,[lf.errorCode]:lf,[pf.errorCode]:pf,[df.errorCode]:df,[cf.errorCode]:cf,[ff.errorCode]:ff,[mf.errorCode]:mf,[hf.errorCode]:hf};var Bo=class extends Error{constructor(e){super(e??"Unauthorized")}};function wQ(t,e){let r=t.client_secret!==void 0;return e.length===0?r?"client_secret_post":"none":r&&e.includes("client_secret_basic")?"client_secret_basic":r&&e.includes("client_secret_post")?"client_secret_post":e.includes("none")?"none":r?"client_secret_post":"none"}function SQ(t,e,r,n){let{client_id:i,client_secret:a}=e;switch(t){case"client_secret_basic":JUe(i,a,r);return;case"client_secret_post":YUe(i,a,n);return;case"none":ZUe(i,n);return;default:throw new Error(`Unsupported client authentication method: ${t}`)}}function JUe(t,e,r){if(!e)throw new Error("client_secret_basic authentication requires a client_secret");let n=btoa(`${t}:${e}`);r.set("Authorization",`Basic ${n}`)}function YUe(t,e,r){r.set("client_id",t),e&&r.set("client_secret",e)}function ZUe(t,e){e.set("client_id",t)}async function TS(t){let e=t instanceof Response?t.status:void 0,r=t instanceof Response?await t.text():t;try{let n=xQ.parse(JSON.parse(r)),{error:i,error_description:a,error_uri:s}=n,u=DQ[i]||ms;return new u(a||"",s)}catch(n){let i=`${e?`HTTP ${e}: `:""}Invalid OAuth error response: ${n}. Raw body: ${r}`;return new ms(i)}}async function t9(t,e){var r,n;try{return await OS(t,e)}catch(i){if(i instanceof pl||i instanceof cl)return await((r=t.invalidateCredentials)===null||r===void 0?void 0:r.call(t,"all")),await OS(t,e);if(i instanceof dl)return await((n=t.invalidateCredentials)===null||n===void 0?void 0:n.call(t,"tokens")),await OS(t,e);throw i}}async function OS(t,{serverUrl:e,authorizationCode:r,scope:n,resourceMetadataUrl:i,fetchFn:a}){let s,u;try{s=await XUe(e,{resourceMetadataUrl:i},a),s.authorization_servers&&s.authorization_servers.length>0&&(u=s.authorization_servers[0])}catch{}u||(u=e);let p=await QUe(e,t,s),d=await iWe(u,{fetchFn:a}),f=await Promise.resolve(t.clientInformation());if(!f){if(r!==void 0)throw new Error("Existing OAuth client information is required when exchanging an authorization code");if(!t.saveClientInformation)throw new Error("OAuth client information must be saveable for dynamic registration");let b=await uWe(u,{metadata:d,clientMetadata:t.clientMetadata});await t.saveClientInformation(b),f=b}if(r!==void 0){let b=await t.codeVerifier(),D=await sWe(u,{metadata:d,clientInformation:f,authorizationCode:r,codeVerifier:b,redirectUri:t.redirectUrl,resource:p,addClientAuthentication:t.addClientAuthentication,fetchFn:a});return await t.saveTokens(D),"AUTHORIZED"}let m=await t.tokens();if(m?.refresh_token)try{let b=await oWe(u,{metadata:d,clientInformation:f,refreshToken:m.refresh_token,resource:p,addClientAuthentication:t.addClientAuthentication});return await t.saveTokens(b),"AUTHORIZED"}catch(b){if(!(!(b instanceof er)||b instanceof ms))throw b}let g=t.state?await t.state():void 0,{authorizationUrl:x,codeVerifier:_}=await aWe(u,{metadata:d,clientInformation:f,state:g,redirectUrl:t.redirectUrl,scope:n||t.clientMetadata.scope,resource:p});return await t.saveCodeVerifier(_),await t.redirectToAuthorization(x),"REDIRECT"}async function QUe(t,e,r){let n=bQ(t);if(e.validateResourceURL)return await e.validateResourceURL(n,r?.resource);if(r){if(!_Q({requestedResource:n,configuredResource:r.resource}))throw new Error(`Protected resource ${r.resource} does not match expected ${n} (or origin)`);return new URL(r.resource)}}function CQ(t){let e=t.headers.get("WWW-Authenticate");if(!e)return;let[r,n]=e.split(" ");if(r.toLowerCase()!=="bearer"||!n)return;let a=/resource_metadata="([^"]*)"/.exec(e);if(a)try{return new URL(a[1])}catch{return}}async function XUe(t,e,r=fetch){let n=await rWe(t,"oauth-protected-resource",r,{protocolVersion:e?.protocolVersion,metadataUrl:e?.resourceMetadataUrl});if(!n||n.status===404)throw new Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!n.ok)throw new Error(`HTTP ${n.status} trying to load well-known OAuth protected resource metadata.`);return vQ.parse(await n.json())}async function PS(t,e,r=fetch){try{return await r(t,{headers:e})}catch(n){if(n instanceof TypeError)return e?PS(t,void 0,r):void 0;throw n}}function eWe(t,e="",r={}){return e.endsWith("/")&&(e=e.slice(0,-1)),r.prependPathname?`${e}/.well-known/${t}`:`/.well-known/${t}${e}`}async function EQ(t,e,r=fetch){return await PS(t,{"MCP-Protocol-Version":e},r)}function tWe(t,e){return!t||t.status===404&&e!=="/"}async function rWe(t,e,r,n){var i,a;let s=new URL(t),u=(i=n?.protocolVersion)!==null&&i!==void 0?i:h1,p;if(n?.metadataUrl)p=new URL(n.metadataUrl);else{let f=eWe(e,s.pathname);p=new URL(f,(a=n?.metadataServerUrl)!==null&&a!==void 0?a:s),p.search=s.search}let d=await EQ(p,u,r);if(!n?.metadataUrl&&tWe(d,s.pathname)){let f=new URL(`/.well-known/${e}`,s);d=await EQ(f,u,r)}return d}function nWe(t){let e=typeof t=="string"?new URL(t):t,r=e.pathname!=="/",n=[];if(!r)return n.push({url:new URL("/.well-known/oauth-authorization-server",e.origin),type:"oauth"}),n.push({url:new URL("/.well-known/openid-configuration",e.origin),type:"oidc"}),n;let i=e.pathname;return i.endsWith("/")&&(i=i.slice(0,-1)),n.push({url:new URL(`/.well-known/oauth-authorization-server${i}`,e.origin),type:"oauth"}),n.push({url:new URL("/.well-known/oauth-authorization-server",e.origin),type:"oauth"}),n.push({url:new URL(`/.well-known/openid-configuration${i}`,e.origin),type:"oidc"}),n.push({url:new URL(`${i}/.well-known/openid-configuration`,e.origin),type:"oidc"}),n}async function iWe(t,{fetchFn:e=fetch,protocolVersion:r=h1}={}){var n;let i={"MCP-Protocol-Version":r},a=nWe(t);for(let{url:s,type:u}of a){let p=await PS(s,i,e);if(!p)throw new Error(`CORS error trying to load ${u==="oauth"?"OAuth":"OpenID provider"} metadata from ${s}`);if(!p.ok){if(p.status>=400&&p.status<500)continue;throw new Error(`HTTP ${p.status} trying to load ${u==="oauth"?"OAuth":"OpenID provider"} metadata from ${s}`)}if(u==="oauth")return FS.parse(await p.json());{let d=gQ.parse(await p.json());if(!(!((n=d.code_challenge_methods_supported)===null||n===void 0)&&n.includes("S256")))throw new Error(`Incompatible OIDC provider at ${s}: does not support S256 code challenge method required by MCP specification`);return d}}}async function aWe(t,{metadata:e,clientInformation:r,redirectUrl:n,scope:i,state:a,resource:s}){let u="code",p="S256",d;if(e){if(d=new URL(e.authorization_endpoint),!e.response_types_supported.includes(u))throw new Error(`Incompatible auth server: does not support response type ${u}`);if(!e.code_challenge_methods_supported||!e.code_challenge_methods_supported.includes(p))throw new Error(`Incompatible auth server: does not support code challenge method ${p}`)}else d=new URL("/authorize",t);let f=await CS(),m=f.code_verifier,g=f.code_challenge;return d.searchParams.set("response_type",u),d.searchParams.set("client_id",r.client_id),d.searchParams.set("code_challenge",g),d.searchParams.set("code_challenge_method",p),d.searchParams.set("redirect_uri",String(n)),a&&d.searchParams.set("state",a),i&&d.searchParams.set("scope",i),i?.includes("offline_access")&&d.searchParams.append("prompt","consent"),s&&d.searchParams.set("resource",s.href),{authorizationUrl:d,codeVerifier:m}}async function sWe(t,{metadata:e,clientInformation:r,authorizationCode:n,codeVerifier:i,redirectUri:a,resource:s,addClientAuthentication:u,fetchFn:p}){var d;let f="authorization_code",m=e?.token_endpoint?new URL(e.token_endpoint):new URL("/token",t);if(e?.grant_types_supported&&!e.grant_types_supported.includes(f))throw new Error(`Incompatible auth server: does not support grant type ${f}`);let g=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"}),x=new URLSearchParams({grant_type:f,code:n,code_verifier:i,redirect_uri:String(a)});if(u)u(g,x,t,e);else{let b=(d=e?.token_endpoint_auth_methods_supported)!==null&&d!==void 0?d:[],D=wQ(r,b);SQ(D,r,g,x)}s&&x.set("resource",s.href);let _=await(p??fetch)(m,{method:"POST",headers:g,body:x});if(!_.ok)throw await TS(_);return AS.parse(await _.json())}async function oWe(t,{metadata:e,clientInformation:r,refreshToken:n,resource:i,addClientAuthentication:a,fetchFn:s}){var u;let p="refresh_token",d;if(e){if(d=new URL(e.token_endpoint),e.grant_types_supported&&!e.grant_types_supported.includes(p))throw new Error(`Incompatible auth server: does not support grant type ${p}`)}else d=new URL("/token",t);let f=new Headers({"Content-Type":"application/x-www-form-urlencoded"}),m=new URLSearchParams({grant_type:p,refresh_token:n});if(a)a(f,m,t,e);else{let x=(u=e?.token_endpoint_auth_methods_supported)!==null&&u!==void 0?u:[],_=wQ(r,x);SQ(_,r,f,m)}i&&m.set("resource",i.href);let g=await(s??fetch)(d,{method:"POST",headers:f,body:m});if(!g.ok)throw await TS(g);return AS.parse({refresh_token:n,...await g.json()})}async function uWe(t,{metadata:e,clientMetadata:r,fetchFn:n}){let i;if(e){if(!e.registration_endpoint)throw new Error("Incompatible auth server: does not support dynamic client registration");i=new URL(e.registration_endpoint)}else i=new URL("/register",t);let a=await(n??fetch)(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)});if(!a.ok)throw await TS(a);return yQ.parse(await a.json())}var lWe=Object.defineProperty,pWe=(t,e,r)=>e in t?lWe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,r9=(t,e,r)=>pWe(t,typeof e!="symbol"?e+"":e,r),n9=class extends Error{constructor(e,r){super(e),r9(this,"type"),r9(this,"field"),r9(this,"value"),r9(this,"line"),this.name="ParseError",this.type=r.type,this.field=r.field,this.value=r.value,this.line=r.line}};function qS(t){}function FQ(t){let{onEvent:e=qS,onError:r=qS,onRetry:n=qS,onComment:i}=t,a="",s=!0,u,p="",d="";function f(b){let D=s?b.replace(/^\xEF\xBB\xBF/,""):b,[w,O]=dWe(`${a}${D}`);for(let R of w)m(R);a=O,s=!1}function m(b){if(b===""){x();return}if(b.startsWith(":")){i&&i(b.slice(b.startsWith(": ")?2:1));return}let D=b.indexOf(":");if(D!==-1){let w=b.slice(0,D),O=b[D+1]===" "?2:1,R=b.slice(D+O);g(w,R,b);return}g(b,"",b)}function g(b,D,w){switch(b){case"event":d=D;break;case"data":p=`${p}${D}
80840
80840
  `;break;case"id":u=D.includes("\0")?void 0:D;break;case"retry":/^\d+$/.test(D)?n(parseInt(D,10)):r(new n9(`Invalid \`retry\` value: "${D}"`,{type:"invalid-retry",value:D,line:w}));break;default:r(new n9(`Unknown field "${b.length>20?`${b.slice(0,20)}\u2026`:b}"`,{type:"unknown-field",field:b,value:D,line:w}));break}}function x(){p.length>0&&e({id:u,event:d||void 0,data:p.endsWith(`
80841
80841
  `)?p.slice(0,-1):p}),u=void 0,p="",d=""}function _(b={}){a&&b.consume&&m(a),u=void 0,p="",d="",a=""}return{feed:f,reset:_}}function dWe(t){let e=[],r="",n=t.length;for(let i=0;i<n;i++){let a=t[i];a==="\r"&&t[i+1]===`
80842
80842
  `?(e.push(r),r="",i++):a==="\r"||a===`
80843
- `?(e.push(r),r=""):r+=a}return[e,r]}var i9=class extends TransformStream{constructor({onError:e,onRetry:r,onComment:n}={}){let i;super({start(a){i=FQ({onEvent:s=>{a.enqueue(s)},onError(s){e==="terminate"?a.error(s):typeof e=="function"&&e(s)},onRetry:r,onComment:n})},transform(a){i.feed(a)}})}};var cWe={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2},vf=class extends Error{constructor(e,r){super(`Streamable HTTP error: ${r}`),this.code=e}},a9=class{constructor(e,r){var n;this._url=e,this._resourceMetadataUrl=void 0,this._requestInit=r?.requestInit,this._authProvider=r?.authProvider,this._fetch=r?.fetch,this._sessionId=r?.sessionId,this._reconnectionOptions=(n=r?.reconnectionOptions)!==null&&n!==void 0?n:cWe}async _authThenStart(){var e;if(!this._authProvider)throw new Bo("No auth provider");let r;try{r=await t9(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,fetchFn:this._fetch})}catch(n){throw(e=this.onerror)===null||e===void 0||e.call(this,n),n}if(r!=="AUTHORIZED")throw new Bo;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){var e;let r={};if(this._authProvider){let i=await this._authProvider.tokens();i&&(r.Authorization=`Bearer ${i.access_token}`)}this._sessionId&&(r["mcp-session-id"]=this._sessionId),this._protocolVersion&&(r["mcp-protocol-version"]=this._protocolVersion);let n=this._normalizeHeaders((e=this._requestInit)===null||e===void 0?void 0:e.headers);return new Headers({...r,...n})}async _startOrAuthSse(e){var r,n,i;let{resumptionToken:a}=e;try{let s=await this._commonHeaders();s.set("Accept","text/event-stream"),a&&s.set("last-event-id",a);let u=await((r=this._fetch)!==null&&r!==void 0?r:fetch)(this._url,{method:"GET",headers:s,signal:(n=this._abortController)===null||n===void 0?void 0:n.signal});if(!u.ok){if(u.status===401&&this._authProvider)return await this._authThenStart();if(u.status===405)return;throw new vf(u.status,`Failed to open SSE stream: ${u.statusText}`)}this._handleSseStream(u.body,e,!0)}catch(s){throw(i=this.onerror)===null||i===void 0||i.call(this,s),s}}_getNextReconnectionDelay(e){let r=this._reconnectionOptions.initialReconnectionDelay,n=this._reconnectionOptions.reconnectionDelayGrowFactor,i=this._reconnectionOptions.maxReconnectionDelay;return Math.min(r*Math.pow(n,e),i)}_normalizeHeaders(e){return e?e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}:{}}_scheduleReconnection(e,r=0){var n;let i=this._reconnectionOptions.maxRetries;if(i>0&&r>=i){(n=this.onerror)===null||n===void 0||n.call(this,new Error(`Maximum reconnection attempts (${i}) exceeded.`));return}let a=this._getNextReconnectionDelay(r);setTimeout(()=>{this._startOrAuthSse(e).catch(s=>{var u;(u=this.onerror)===null||u===void 0||u.call(this,new Error(`Failed to reconnect SSE stream: ${s instanceof Error?s.message:String(s)}`)),this._scheduleReconnection(e,r+1)})},a)}_handleSseStream(e,r,n){if(!e)return;let{onresumptiontoken:i,replayMessageId:a}=r,s;(async()=>{var p,d,f,m;try{let g=e.pipeThrough(new TextDecoderStream).pipeThrough(new i9).getReader();for(;;){let{value:x,done:_}=await g.read();if(_)break;if(x.id&&(s=x.id,i?.(x.id)),!x.event||x.event==="message")try{let b=v1.parse(JSON.parse(x.data));a!==void 0&&Vd(b)&&(b.id=a),(p=this.onmessage)===null||p===void 0||p.call(this,b)}catch(b){(d=this.onerror)===null||d===void 0||d.call(this,b)}}}catch(g){if((f=this.onerror)===null||f===void 0||f.call(this,new Error(`SSE stream disconnected: ${g}`)),n&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:s,onresumptiontoken:i,replayMessageId:a},0)}catch(x){(m=this.onerror)===null||m===void 0||m.call(this,new Error(`Failed to reconnect: ${x instanceof Error?x.message:String(x)}`))}}})()}async start(){if(this._abortController)throw new Error("StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.");this._abortController=new AbortController}async finishAuth(e){if(!this._authProvider)throw new Bo("No auth provider");if(await t9(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,fetchFn:this._fetch})!=="AUTHORIZED")throw new Bo("Failed to authorize")}async close(){var e,r;(e=this._abortController)===null||e===void 0||e.abort(),(r=this.onclose)===null||r===void 0||r.call(this)}async send(e,r){var n,i,a,s;try{let{resumptionToken:u,onresumptiontoken:p}=r||{};if(u){this._startOrAuthSse({resumptionToken:u,replayMessageId:E8(e)?e.id:void 0}).catch(D=>{var w;return(w=this.onerror)===null||w===void 0?void 0:w.call(this,D)});return}let d=await this._commonHeaders();d.set("content-type","application/json"),d.set("accept","application/json, text/event-stream");let f={...this._requestInit,method:"POST",headers:d,body:JSON.stringify(e),signal:(n=this._abortController)===null||n===void 0?void 0:n.signal},m=await((i=this._fetch)!==null&&i!==void 0?i:fetch)(this._url,f),g=m.headers.get("mcp-session-id");if(g&&(this._sessionId=g),!m.ok){if(m.status===401&&this._authProvider){if(this._resourceMetadataUrl=CQ(m),await t9(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,fetchFn:this._fetch})!=="AUTHORIZED")throw new Bo;return this.send(e)}let D=await m.text().catch(()=>null);throw new Error(`Error POSTing to endpoint (HTTP ${m.status}): ${D}`)}if(m.status===202){QU(e)&&this._startOrAuthSse({resumptionToken:void 0}).catch(D=>{var w;return(w=this.onerror)===null||w===void 0?void 0:w.call(this,D)});return}let _=(Array.isArray(e)?e:[e]).filter(D=>"method"in D&&"id"in D&&D.id!==void 0).length>0,b=m.headers.get("content-type");if(_)if(b?.includes("text/event-stream"))this._handleSseStream(m.body,{onresumptiontoken:p},!1);else if(b?.includes("application/json")){let D=await m.json(),w=Array.isArray(D)?D.map(O=>v1.parse(O)):[v1.parse(D)];for(let O of w)(a=this.onmessage)===null||a===void 0||a.call(this,O)}else throw new vf(-1,`Unexpected content type: ${b}`)}catch(u){throw(s=this.onerror)===null||s===void 0||s.call(this,u),u}}get sessionId(){return this._sessionId}async terminateSession(){var e,r,n;if(this._sessionId)try{let i=await this._commonHeaders(),a={...this._requestInit,method:"DELETE",headers:i,signal:(e=this._abortController)===null||e===void 0?void 0:e.signal},s=await((r=this._fetch)!==null&&r!==void 0?r:fetch)(this._url,a);if(!s.ok&&s.status!==405)throw new vf(s.status,`Failed to terminate session: ${s.statusText}`);this._sessionId=void 0}catch(i){throw(n=this.onerror)===null||n===void 0||n.call(this,i),i}}setProtocolVersion(e){this._protocolVersion=e}get protocolVersion(){return this._protocolVersion}};function AQ(t,e,r,n){let i=new URL(t);if(process.env.NODE_ENV==="development"){let a=new URL(process.env.LOCAL_SERVER_URL||"http://localhost:8080");i.protocol=a.protocol,i.hostname=a.hostname,i.port=a.port}if(r){let a=JSON.stringify(r);i.searchParams.set("config",Buffer.from(a).toString("base64"))}return n&&i.searchParams.set("profile",n),i.searchParams.set("api_key",e),i}var OQ=(t,e,r,n)=>{let i=AQ(t,e,r,n);return le(`[Runner] Connecting to Streamable HTTP endpoint: ${t}`),new a9(i)},TQ=async(t,e,r,n)=>{let i=0,a="",s=!1,u=!1,p=!1,d=OQ(t,e,r,n),f=(w,O)=>(le(`${O}: ${w.message}`),w),m=async()=>{le("[Runner] Received exit signal, initiating shutdown..."),p=!0,await D(),u||process.exit(0)},g=dQ(w=>d.send(w),()=>s),x=cQ(m,{onIdleDetected:()=>{le("[Runner] Stopping heartbeat due to idle timeout"),g.stop()},onActivityResumed:()=>{le("[Runner] Restarting heartbeat after activity"),g.start()}}),_=async w=>{if(x.updateActivity(),a+=w.toString("utf8"),!s)return;let O=a.split(/\r?\n/);a=O.pop()??"";for(let R of O.filter(Boolean))try{let B=JSON.parse(R);await d.send(B)}catch(B){if(B instanceof Error&&B.message.includes("CLOSED"))throw new Error("Streamable HTTP connection closed");f(B,"Failed to send message")}},b=async()=>{d.onclose=async()=>{if(le("[Runner] Streamable HTTP connection closed"),s=!1,g.stop(),!p&&i++<X5){let w=Math.random()*1e3,O=pQ*Math.pow(2,i)+w;le(`[Runner] Unexpected disconnect, attempting reconnect in ${Math.round(O)}ms (attempt ${i} of ${X5})...`),await new Promise(R=>setTimeout(R,O)),d=OQ(t,e,r,n),le("[Runner] Created new transport instance after disconnect"),await b()}else p?(le("[Runner] Clean shutdown detected, performing graceful exit"),process.exit(0)):(le(`[Runner] Max reconnection attempts (${X5}) reached - giving up`),process.exit(1))},d.onerror=w=>{if(w.message.includes("502")){le("[Runner] Server returned 502 Bad Gateway");return}le(`[Runner] Streamable HTTP error: ${w.message}`)},d.onmessage=w=>{"method"in w&&!(w.method==="ping"||w.method==="pong")&&x.updateActivity();try{"error"in w&&e9(w),console.log(JSON.stringify(w))}catch(O){f(O,"Error handling message"),le(`[Runner] Message: ${JSON.stringify(w)}`),console.log(JSON.stringify(w))}},d.start(),s=!0,i=0,le("[Runner] Streamable HTTP connection initiated"),await _(Buffer.from("")),le("[Runner] Streamable HTTP connection established"),g.start(),x.start()},D=async()=>{if(u){le("[Runner] Cleanup already in progress, skipping...");return}le("[Runner] Starting cleanup process..."),u=!0,p=!0,g.stop(),x.stop();try{if(d.sessionId){let w=`${d.sessionId.substring(0,12)}...`;le(`[Runner] Terminating session with ID: ${w}`);try{await d.terminateSession(),le("[Runner] Session terminated successfully"),d.sessionId?(le("[Runner] Server responded with 405 Method Not Allowed (session termination not supported)"),le(`[Runner] Session ID is still active: ${w}`)):le("[Runner] Session ID has been cleared")}catch(O){le(`[Runner] Error terminating session: ${O.message}`)}}le("[Runner] Attempting to close transport (3s timeout)..."),await Promise.race([d.close(),new Promise((w,O)=>setTimeout(()=>O(new Error("[Runner] Transport close timeout after 3s")),3e3))]),le("[Runner] Transport closed successfully")}catch(w){le(`[Runner] Error during transport cleanup: ${w.message}`)}le("[Runner] Cleanup completed")};return process.on("SIGINT",m),process.on("SIGTERM",m),process.on("beforeExit",m),process.on("exit",()=>{le("[Runner] Final cleanup on exit")}),process.stdin.on("end",()=>{le("[Runner] STDIN closed (client disconnected)"),m().catch(w=>{le(`[Runner] Error during stdin close cleanup: ${w}`),process.exit(1)})}),process.stdin.on("error",w=>{le(`[Runner] STDIN error: ${w.message}`),m().catch(O=>{le(`[Runner] Error during stdin error cleanup: ${O}`),process.exit(1)})}),process.stdin.on("data",w=>_(w).catch(O=>f(O,"[Runner] Error processing message"))),await b(),D};async function PQ(t,e,r,n){try{let i=await oa();i.success||le(`[Runner] Settings initialization warning: ${i.error}`);let a=await $1(t,r,"run");if(!a)throw new Error(`Could not resolve server: ${t}`);le(`[Runner] Connecting to server: ${JSON.stringify({id:a.qualifiedName,connectionTypes:a.connections.map(u=>u.type)})}`);let s=await H8();await fWe(a,e,s,r,n)}catch(i){le(`[Runner] Error: ${i instanceof Error?i.message:i}`),process.exit(1)}}async function fWe(t,e,r,n,i){let a=V1(t);if(a.type==="http"){if(!a.deploymentUrl)throw new Error("Missing deployment URL");if(!n)throw new Error("API key is required for remote connections");await TQ(a.deploymentUrl,n,e,i)}else if(a.type==="stdio")await hQ(t,e,n,r);else throw new Error(`Unsupported connection type: ${a.type}`)}var rp=ye(ut());process.removeAllListeners("warning");process.on("warning",t=>{t.name==="DeprecationWarning"&&t.message.includes("punycode")||console.warn(t)});async function qQ(t,e){try{if(ep(e).type==="command"){console.log(rp.default.yellow(`Uninstallation is currently not supported for ${e}`));return}let n=tp(e);if(!n.mcpServers[t]){console.log(rp.default.red(`Server ${t} is not installed for ${e}`));return}delete n.mcpServers[t],Z5(n,e),console.log(rp.default.green(`${t} successfully uninstalled from ${e}`)),await Q5(e)}catch(r){r instanceof Error?console.error(rp.default.red(`Error: ${r.message}`)):console.error(rp.default.red("An unexpected error occurred during uninstallation")),process.exit(1)}}async function RQ(t={}){try{await Z8({entryFile:t.entryFile,outFile:t.outFile,transport:t.transport,watch:!1,production:!0,configFile:t.configFile})}catch(e){console.error("\u274C Build failed:",e),process.exit(1)}}var Pi=new kA;Pi.name("smithery").description("Smithery CLI - Manage and run MCP servers").option("--verbose","Show detailed logs").option("--debug","Show debug logs").hook("preAction",(t,e)=>{let r=t.opts();r.verbose&&LA(!0),r.debug&&$A(!0)});Pi.command("install <server>").description("Install a package").requiredOption("--client <name>",`Specify the AI client (${Dn.join(", ")})`).option("--config <json>","Provide configuration data as JSON (skips prompts)").option("--key <apikey>","Provide an API key").option("--profile <name>","Use a specific profile").action(async(t,e)=>{Dn.includes(e.client)||(console.error(Or.default.yellow(`Invalid client "${e.client}". Valid options are: ${Dn.join(", ")}`)),process.exit(1));let r={};if(e.config)try{let n=e.config;n.startsWith("'")&&n.endsWith("'")&&(n=n.slice(1,-1));let i=JSON.parse(n);typeof i=="string"&&(i=JSON.parse(i)),r=i}catch(n){let i=n instanceof Error?n.message:String(n);console.error(Or.default.red(`Error parsing config: ${i}`)),process.exit(1)}await sQ(t,e.client,r,e.key,e.profile)});Pi.command("uninstall <server>").description("Uninstall a package").requiredOption("--client <name>",`Specify the AI client (${Dn.join(", ")})`).action(async(t,e)=>{Dn.includes(e.client)||(console.error(Or.default.yellow(`Invalid client "${e.client}". Valid options are: ${Dn.join(", ")}`)),process.exit(1)),await qQ(t,e.client)});Pi.command("inspect <server>").description("Inspect server from registry").option("--key <apikey>","Provide an API key").action(async(t,e)=>{await pJ(t,await ho(e.key))});Pi.command("run <server>").description("Run a server").option("--config <json>","Provide configuration as JSON").option("--key <apikey>","Provide an API key").option("--profile <name>","Use a specific profile").action(async(t,e)=>{let r={};if(e.config)try{let n=e.config;n.startsWith("'")&&n.endsWith("'")&&(n=n.slice(1,-1));let i=JSON.parse(n);typeof i=="string"&&(i=JSON.parse(i)),r=i}catch(n){let i=n instanceof Error?n.message:String(n);console.error(Or.default.red(`Error parsing config: ${i}`)),process.exit(1)}await PQ(t,r,await ho(e.key),e.profile)});Pi.command("dev [entryFile]").description("Start development server with hot-reload and tunnel").option("--port <port>","Port to run the server on (default: 8181)").option("--key <apikey>","Provide an API key").option("--no-open","Don't automatically open the playground").option("--prompt <prompt>","Initial message to start the playground with").option("-c, --config <path>","Path to config file (default: auto-detect smithery.config.js)").action(async(t,e)=>{await rz({entryFile:t,port:e.port,key:e.key,open:e.open,initialMessage:e.prompt,configFile:e.config})});Pi.command("build [entryFile]").description("Build MCP server for production").option("-o, --out <outfile>","Output file path (default: .smithery/index.cjs)").option("--transport <type>","Transport type: shttp or stdio (default: shttp)").option("-c, --config <path>","Path to config file (default: auto-detect smithery.config.js)").action(async(t,e)=>{let r=e.transport||"shttp";["shttp","stdio"].includes(r)||(console.error(Or.default.red(`Invalid transport type "${r}". Valid options are: shttp, stdio`)),process.exit(1)),await RQ({entryFile:t,outFile:e.out,transport:r,configFile:e.config})});Pi.command("playground").description("Open MCP playground in browser").option("--port <port>","Port to expose (default: 3000)").option("--key <apikey>","Provide an API key").allowUnknownOption().allowExcessArguments().action(async t=>{let e,r=process.argv,n=r.indexOf("--");n!==-1&&n+1<r.length&&(e=r.slice(n+1).join(" ")),await lQ({port:t.port,command:e,apiKey:await ho(t.key)})});Pi.command("list <type>").description("List available resources").option("--client <name>",`Specify the AI client (${Dn.join(", ")})`).action(async(t,e)=>{t==="clients"?await wS("clients",void 0):t==="servers"?(e.client||(console.error(Or.default.yellow(`Please specify a client using --client. Valid options are: ${Dn.join(", ")}`)),process.exit(1)),Dn.includes(e.client)||(console.error(Or.default.yellow(`Invalid client "${e.client}". Valid options are: ${Dn.join(", ")}`)),process.exit(1)),await wS("servers",e.client)):(console.error(Or.default.red(`Invalid list type: ${t}. Use 'clients' or 'servers'`)),process.exit(1))});Pi.command("login").description("Login with an API key").action(async()=>{console.log(Or.default.cyan("Login to Smithery")),console.log(Or.default.gray("Get your API key from: https://smithery.ai/account/api-keys")),console.log();try{let t=await wD();(await K8(t)).success?(console.log(Or.default.green("\u2713 API key saved successfully")),console.log(Or.default.gray("You can now use Smithery CLI commands"))):(console.error(Or.default.red("\u2717 Failed to save API key")),console.error(Or.default.gray("You may need to enter it again next time")))}catch(t){console.error(Or.default.red("\u2717 Login failed"));let e=t instanceof Error?t.message:String(t);console.error(Or.default.gray(e)),process.exit(1)}});Pi.parse(process.argv);
80843
+ `?(e.push(r),r=""):r+=a}return[e,r]}var i9=class extends TransformStream{constructor({onError:e,onRetry:r,onComment:n}={}){let i;super({start(a){i=FQ({onEvent:s=>{a.enqueue(s)},onError(s){e==="terminate"?a.error(s):typeof e=="function"&&e(s)},onRetry:r,onComment:n})},transform(a){i.feed(a)}})}};var cWe={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2},vf=class extends Error{constructor(e,r){super(`Streamable HTTP error: ${r}`),this.code=e}},a9=class{constructor(e,r){var n;this._url=e,this._resourceMetadataUrl=void 0,this._requestInit=r?.requestInit,this._authProvider=r?.authProvider,this._fetch=r?.fetch,this._sessionId=r?.sessionId,this._reconnectionOptions=(n=r?.reconnectionOptions)!==null&&n!==void 0?n:cWe}async _authThenStart(){var e;if(!this._authProvider)throw new Bo("No auth provider");let r;try{r=await t9(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,fetchFn:this._fetch})}catch(n){throw(e=this.onerror)===null||e===void 0||e.call(this,n),n}if(r!=="AUTHORIZED")throw new Bo;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){var e;let r={};if(this._authProvider){let i=await this._authProvider.tokens();i&&(r.Authorization=`Bearer ${i.access_token}`)}this._sessionId&&(r["mcp-session-id"]=this._sessionId),this._protocolVersion&&(r["mcp-protocol-version"]=this._protocolVersion);let n=this._normalizeHeaders((e=this._requestInit)===null||e===void 0?void 0:e.headers);return new Headers({...r,...n})}async _startOrAuthSse(e){var r,n,i;let{resumptionToken:a}=e;try{let s=await this._commonHeaders();s.set("Accept","text/event-stream"),a&&s.set("last-event-id",a);let u=await((r=this._fetch)!==null&&r!==void 0?r:fetch)(this._url,{method:"GET",headers:s,signal:(n=this._abortController)===null||n===void 0?void 0:n.signal});if(!u.ok){if(u.status===401&&this._authProvider)return await this._authThenStart();if(u.status===405)return;throw new vf(u.status,`Failed to open SSE stream: ${u.statusText}`)}this._handleSseStream(u.body,e,!0)}catch(s){throw(i=this.onerror)===null||i===void 0||i.call(this,s),s}}_getNextReconnectionDelay(e){let r=this._reconnectionOptions.initialReconnectionDelay,n=this._reconnectionOptions.reconnectionDelayGrowFactor,i=this._reconnectionOptions.maxReconnectionDelay;return Math.min(r*Math.pow(n,e),i)}_normalizeHeaders(e){return e?e instanceof Headers?Object.fromEntries(e.entries()):Array.isArray(e)?Object.fromEntries(e):{...e}:{}}_scheduleReconnection(e,r=0){var n;let i=this._reconnectionOptions.maxRetries;if(i>0&&r>=i){(n=this.onerror)===null||n===void 0||n.call(this,new Error(`Maximum reconnection attempts (${i}) exceeded.`));return}let a=this._getNextReconnectionDelay(r);setTimeout(()=>{this._startOrAuthSse(e).catch(s=>{var u;(u=this.onerror)===null||u===void 0||u.call(this,new Error(`Failed to reconnect SSE stream: ${s instanceof Error?s.message:String(s)}`)),this._scheduleReconnection(e,r+1)})},a)}_handleSseStream(e,r,n){if(!e)return;let{onresumptiontoken:i,replayMessageId:a}=r,s;(async()=>{var p,d,f,m;try{let g=e.pipeThrough(new TextDecoderStream).pipeThrough(new i9).getReader();for(;;){let{value:x,done:_}=await g.read();if(_)break;if(x.id&&(s=x.id,i?.(x.id)),!x.event||x.event==="message")try{let b=v1.parse(JSON.parse(x.data));a!==void 0&&Vd(b)&&(b.id=a),(p=this.onmessage)===null||p===void 0||p.call(this,b)}catch(b){(d=this.onerror)===null||d===void 0||d.call(this,b)}}}catch(g){if((f=this.onerror)===null||f===void 0||f.call(this,new Error(`SSE stream disconnected: ${g}`)),n&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:s,onresumptiontoken:i,replayMessageId:a},0)}catch(x){(m=this.onerror)===null||m===void 0||m.call(this,new Error(`Failed to reconnect: ${x instanceof Error?x.message:String(x)}`))}}})()}async start(){if(this._abortController)throw new Error("StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.");this._abortController=new AbortController}async finishAuth(e){if(!this._authProvider)throw new Bo("No auth provider");if(await t9(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,fetchFn:this._fetch})!=="AUTHORIZED")throw new Bo("Failed to authorize")}async close(){var e,r;(e=this._abortController)===null||e===void 0||e.abort(),(r=this.onclose)===null||r===void 0||r.call(this)}async send(e,r){var n,i,a,s;try{let{resumptionToken:u,onresumptiontoken:p}=r||{};if(u){this._startOrAuthSse({resumptionToken:u,replayMessageId:E8(e)?e.id:void 0}).catch(D=>{var w;return(w=this.onerror)===null||w===void 0?void 0:w.call(this,D)});return}let d=await this._commonHeaders();d.set("content-type","application/json"),d.set("accept","application/json, text/event-stream");let f={...this._requestInit,method:"POST",headers:d,body:JSON.stringify(e),signal:(n=this._abortController)===null||n===void 0?void 0:n.signal},m=await((i=this._fetch)!==null&&i!==void 0?i:fetch)(this._url,f),g=m.headers.get("mcp-session-id");if(g&&(this._sessionId=g),!m.ok){if(m.status===401&&this._authProvider){if(this._resourceMetadataUrl=CQ(m),await t9(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,fetchFn:this._fetch})!=="AUTHORIZED")throw new Bo;return this.send(e)}let D=await m.text().catch(()=>null);throw new Error(`Error POSTing to endpoint (HTTP ${m.status}): ${D}`)}if(m.status===202){QU(e)&&this._startOrAuthSse({resumptionToken:void 0}).catch(D=>{var w;return(w=this.onerror)===null||w===void 0?void 0:w.call(this,D)});return}let _=(Array.isArray(e)?e:[e]).filter(D=>"method"in D&&"id"in D&&D.id!==void 0).length>0,b=m.headers.get("content-type");if(_)if(b?.includes("text/event-stream"))this._handleSseStream(m.body,{onresumptiontoken:p},!1);else if(b?.includes("application/json")){let D=await m.json(),w=Array.isArray(D)?D.map(O=>v1.parse(O)):[v1.parse(D)];for(let O of w)(a=this.onmessage)===null||a===void 0||a.call(this,O)}else throw new vf(-1,`Unexpected content type: ${b}`)}catch(u){throw(s=this.onerror)===null||s===void 0||s.call(this,u),u}}get sessionId(){return this._sessionId}async terminateSession(){var e,r,n;if(this._sessionId)try{let i=await this._commonHeaders(),a={...this._requestInit,method:"DELETE",headers:i,signal:(e=this._abortController)===null||e===void 0?void 0:e.signal},s=await((r=this._fetch)!==null&&r!==void 0?r:fetch)(this._url,a);if(!s.ok&&s.status!==405)throw new vf(s.status,`Failed to terminate session: ${s.statusText}`);this._sessionId=void 0}catch(i){throw(n=this.onerror)===null||n===void 0||n.call(this,i),i}}setProtocolVersion(e){this._protocolVersion=e}get protocolVersion(){return this._protocolVersion}};function AQ(t,e,r,n){let i=new URL(t);if(process.env.NODE_ENV==="development"){let a=new URL(process.env.LOCAL_SERVER_URL||"http://localhost:8080");i.protocol=a.protocol,i.hostname=a.hostname,i.port=a.port}if(r){let a=JSON.stringify(r);i.searchParams.set("config",Buffer.from(a).toString("base64"))}return n&&i.searchParams.set("profile",n),i.searchParams.set("api_key",e),i}var OQ=(t,e,r,n)=>{let i=AQ(t,e,r,n);return le(`[Runner] Connecting to Streamable HTTP endpoint: ${t}`),new a9(i)},TQ=async(t,e,r,n)=>{let i=0,a="",s=!1,u=!1,p=!1,d=OQ(t,e,r,n),f=(w,O)=>(le(`${O}: ${w.message}`),w),m=async()=>{le("[Runner] Received exit signal, initiating shutdown..."),p=!0,await D(),process.exit(0)},g=dQ(w=>d.send(w),()=>s),x=cQ(m,{onIdleDetected:()=>{le("[Runner] Stopping heartbeat due to idle timeout"),g.stop()},onActivityResumed:()=>{le("[Runner] Restarting heartbeat after activity"),g.start()}}),_=async w=>{if(x.updateActivity(),a+=w.toString("utf8"),!s)return;let O=a.split(/\r?\n/);a=O.pop()??"";for(let R of O.filter(Boolean))try{let B=JSON.parse(R);await d.send(B)}catch(B){if(B instanceof Error&&B.message.includes("CLOSED"))throw new Error("Streamable HTTP connection closed");f(B,"Failed to send message")}},b=async()=>{d.onclose=async()=>{if(le("[Runner] Streamable HTTP connection closed"),s=!1,g.stop(),!p&&i++<X5){let w=Math.random()*1e3,O=pQ*Math.pow(2,i)+w;le(`[Runner] Unexpected disconnect, attempting reconnect in ${Math.round(O)}ms (attempt ${i} of ${X5})...`),await new Promise(R=>setTimeout(R,O)),d=OQ(t,e,r,n),le("[Runner] Created new transport instance after disconnect"),await b()}else p?(le("[Runner] Clean shutdown detected, performing graceful exit"),process.exit(0)):(le(`[Runner] Max reconnection attempts (${X5}) reached - giving up`),process.exit(1))},d.onerror=w=>{if(w.message.includes("502")){le("[Runner] Server returned 502 Bad Gateway");return}le(`[Runner] Streamable HTTP error: ${w.message}`)},d.onmessage=w=>{"method"in w&&!(w.method==="ping"||w.method==="pong")&&x.updateActivity();try{"error"in w&&e9(w),console.log(JSON.stringify(w))}catch(O){f(O,"Error handling message"),le(`[Runner] Message: ${JSON.stringify(w)}`),console.log(JSON.stringify(w))}},d.start(),s=!0,i=0,le("[Runner] Streamable HTTP connection initiated"),await _(Buffer.from("")),le("[Runner] Streamable HTTP connection established"),g.start(),x.start()},D=async()=>{if(u){le("[Runner] Cleanup already in progress, skipping...");return}le("[Runner] Starting cleanup process..."),u=!0,p=!0,g.stop(),x.stop();try{if(d.sessionId){let w=`${d.sessionId.substring(0,12)}...`;le(`[Runner] Terminating session with ID: ${w}`);try{await d.terminateSession(),le("[Runner] Session terminated successfully"),d.sessionId?(le("[Runner] Server responded with 405 Method Not Allowed (session termination not supported)"),le(`[Runner] Session ID is still active: ${w}`)):le("[Runner] Session ID has been cleared")}catch(O){le(`[Runner] Error terminating session: ${O.message}`)}}le("[Runner] Attempting to close transport (3s timeout)..."),await Promise.race([d.close(),new Promise((w,O)=>setTimeout(()=>O(new Error("[Runner] Transport close timeout after 3s")),3e3))]),le("[Runner] Transport closed successfully")}catch(w){le(`[Runner] Error during transport cleanup: ${w.message}`)}le("[Runner] Cleanup completed")};return process.on("SIGINT",m),process.on("SIGTERM",m),process.on("beforeExit",m),process.on("exit",()=>{le("[Runner] Final cleanup on exit")}),process.stdin.on("end",()=>{le("[Runner] STDIN closed (client disconnected)"),m().catch(w=>{le(`[Runner] Error during stdin close cleanup: ${w}`),process.exit(1)})}),process.stdin.on("error",w=>{le(`[Runner] STDIN error: ${w.message}`),m().catch(O=>{le(`[Runner] Error during stdin error cleanup: ${O}`),process.exit(1)})}),process.stdin.on("data",w=>_(w).catch(O=>f(O,"[Runner] Error processing message"))),await b(),D};async function PQ(t,e,r,n){try{let i=await oa();i.success||le(`[Runner] Settings initialization warning: ${i.error}`);let a=await $1(t,r,"run");if(!a)throw new Error(`Could not resolve server: ${t}`);le(`[Runner] Connecting to server: ${JSON.stringify({id:a.qualifiedName,connectionTypes:a.connections.map(u=>u.type)})}`);let s=await H8();await fWe(a,e,s,r,n)}catch(i){le(`[Runner] Error: ${i instanceof Error?i.message:i}`),process.exit(1)}}async function fWe(t,e,r,n,i){let a=V1(t);if(a.type==="http"){if(!a.deploymentUrl)throw new Error("Missing deployment URL");if(!n)throw new Error("API key is required for remote connections");await TQ(a.deploymentUrl,n,e,i)}else if(a.type==="stdio")await hQ(t,e,n,r);else throw new Error(`Unsupported connection type: ${a.type}`)}var rp=ye(ut());process.removeAllListeners("warning");process.on("warning",t=>{t.name==="DeprecationWarning"&&t.message.includes("punycode")||console.warn(t)});async function qQ(t,e){try{if(ep(e).type==="command"){console.log(rp.default.yellow(`Uninstallation is currently not supported for ${e}`));return}let n=tp(e);if(!n.mcpServers[t]){console.log(rp.default.red(`Server ${t} is not installed for ${e}`));return}delete n.mcpServers[t],Z5(n,e),console.log(rp.default.green(`${t} successfully uninstalled from ${e}`)),await Q5(e)}catch(r){r instanceof Error?console.error(rp.default.red(`Error: ${r.message}`)):console.error(rp.default.red("An unexpected error occurred during uninstallation")),process.exit(1)}}async function RQ(t={}){try{await Z8({entryFile:t.entryFile,outFile:t.outFile,transport:t.transport,watch:!1,production:!0,configFile:t.configFile})}catch(e){console.error("\u274C Build failed:",e),process.exit(1)}}var Pi=new kA;Pi.name("smithery").description("Smithery CLI - Manage and run MCP servers").option("--verbose","Show detailed logs").option("--debug","Show debug logs").hook("preAction",(t,e)=>{let r=t.opts();r.verbose&&LA(!0),r.debug&&$A(!0)});Pi.command("install <server>").description("Install a package").requiredOption("--client <name>",`Specify the AI client (${Dn.join(", ")})`).option("--config <json>","Provide configuration data as JSON (skips prompts)").option("--key <apikey>","Provide an API key").option("--profile <name>","Use a specific profile").action(async(t,e)=>{Dn.includes(e.client)||(console.error(Or.default.yellow(`Invalid client "${e.client}". Valid options are: ${Dn.join(", ")}`)),process.exit(1));let r={};if(e.config)try{let n=e.config;n.startsWith("'")&&n.endsWith("'")&&(n=n.slice(1,-1));let i=JSON.parse(n);typeof i=="string"&&(i=JSON.parse(i)),r=i}catch(n){let i=n instanceof Error?n.message:String(n);console.error(Or.default.red(`Error parsing config: ${i}`)),process.exit(1)}await sQ(t,e.client,r,e.key,e.profile)});Pi.command("uninstall <server>").description("Uninstall a package").requiredOption("--client <name>",`Specify the AI client (${Dn.join(", ")})`).action(async(t,e)=>{Dn.includes(e.client)||(console.error(Or.default.yellow(`Invalid client "${e.client}". Valid options are: ${Dn.join(", ")}`)),process.exit(1)),await qQ(t,e.client)});Pi.command("inspect <server>").description("Inspect server from registry").option("--key <apikey>","Provide an API key").action(async(t,e)=>{await pJ(t,await ho(e.key))});Pi.command("run <server>").description("Run a server").option("--config <json>","Provide configuration as JSON").option("--key <apikey>","Provide an API key").option("--profile <name>","Use a specific profile").action(async(t,e)=>{let r={};if(e.config)try{let n=e.config;n.startsWith("'")&&n.endsWith("'")&&(n=n.slice(1,-1));let i=JSON.parse(n);typeof i=="string"&&(i=JSON.parse(i)),r=i}catch(n){let i=n instanceof Error?n.message:String(n);console.error(Or.default.red(`Error parsing config: ${i}`)),process.exit(1)}await PQ(t,r,await ho(e.key),e.profile)});Pi.command("dev [entryFile]").description("Start development server with hot-reload and tunnel").option("--port <port>","Port to run the server on (default: 8181)").option("--key <apikey>","Provide an API key").option("--no-open","Don't automatically open the playground").option("--prompt <prompt>","Initial message to start the playground with").option("-c, --config <path>","Path to config file (default: auto-detect smithery.config.js)").action(async(t,e)=>{await rz({entryFile:t,port:e.port,key:e.key,open:e.open,initialMessage:e.prompt,configFile:e.config})});Pi.command("build [entryFile]").description("Build MCP server for production").option("-o, --out <outfile>","Output file path (default: .smithery/index.cjs)").option("--transport <type>","Transport type: shttp or stdio (default: shttp)").option("-c, --config <path>","Path to config file (default: auto-detect smithery.config.js)").action(async(t,e)=>{let r=e.transport||"shttp";["shttp","stdio"].includes(r)||(console.error(Or.default.red(`Invalid transport type "${r}". Valid options are: shttp, stdio`)),process.exit(1)),await RQ({entryFile:t,outFile:e.out,transport:r,configFile:e.config})});Pi.command("playground").description("Open MCP playground in browser").option("--port <port>","Port to expose (default: 3000)").option("--key <apikey>","Provide an API key").allowUnknownOption().allowExcessArguments().action(async t=>{let e,r=process.argv,n=r.indexOf("--");n!==-1&&n+1<r.length&&(e=r.slice(n+1).join(" ")),await lQ({port:t.port,command:e,apiKey:await ho(t.key)})});Pi.command("list <type>").description("List available resources").option("--client <name>",`Specify the AI client (${Dn.join(", ")})`).action(async(t,e)=>{t==="clients"?await wS("clients",void 0):t==="servers"?(e.client||(console.error(Or.default.yellow(`Please specify a client using --client. Valid options are: ${Dn.join(", ")}`)),process.exit(1)),Dn.includes(e.client)||(console.error(Or.default.yellow(`Invalid client "${e.client}". Valid options are: ${Dn.join(", ")}`)),process.exit(1)),await wS("servers",e.client)):(console.error(Or.default.red(`Invalid list type: ${t}. Use 'clients' or 'servers'`)),process.exit(1))});Pi.command("login").description("Login with an API key").action(async()=>{console.log(Or.default.cyan("Login to Smithery")),console.log(Or.default.gray("Get your API key from: https://smithery.ai/account/api-keys")),console.log();try{let t=await wD();(await K8(t)).success?(console.log(Or.default.green("\u2713 API key saved successfully")),console.log(Or.default.gray("You can now use Smithery CLI commands"))):(console.error(Or.default.red("\u2717 Failed to save API key")),console.error(Or.default.gray("You may need to enter it again next time")))}catch(t){console.error(Or.default.red("\u2717 Login failed"));let e=t instanceof Error?t.message:String(t);console.error(Or.default.gray(e)),process.exit(1)}});Pi.parse(process.argv);
80844
80844
  /*! Bundled license information:
80845
80845
 
80846
80846
  safe-buffer/index.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smithery/cli",
3
- "version": "1.2.19",
3
+ "version": "1.2.20",
4
4
  "type": "commonjs",
5
5
  "private": false,
6
6
  "homepage": "https://smithery.ai/",