mcp-use 2.10.0 → 2.10.1-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +1 -1
- package/dist/index-node.js +2 -2
- package/dist/index.js +5 -5
- package/dist/internal/usage.js +1 -1
- package/dist/tools.d.ts +2 -1
- package/dist/views/wire.d.ts +1 -1
- package/package.json +3 -3
package/dist/bin.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var{runBin}=await import("@mcp-use/cli");runBin(process.argv.slice(2),{frameworkVersion:"2.10.0"});
|
|
2
|
+
var{runBin}=await import("@mcp-use/cli");runBin(process.argv.slice(2),{frameworkVersion:"2.10.1-canary.0"});
|
package/dist/index-node.js
CHANGED
|
@@ -768,7 +768,7 @@ ${cyan("=".repeat(80))}`),console.log(bold(cyan("[TRACE] Request Details"))),con
|
|
|
768
768
|
`)}function styleStatus(status){let text2=String(status);return status>=500?magenta(text2):status>=400?red(text2):status>=300?yellow(text2):green(text2)}function isNoisyRequest(httpMethod,pathname){return httpMethod!=="GET"&&httpMethod!=="HEAD"?!1:pathname.endsWith("/favicon.ico")}function formatRequestLogLine(line){let{description,detail}=line;return[...line.prefix===void 0?[]:[bold(line.prefix)],methodStyle(description.method)(description.method),...detail?.subject===void 0?[]:[bold(sanitize(detail.subject))],line.pathname,styleStatus(line.status),...description.client===void 0?[]:[dim(`client=${sanitize(description.client)}`)],dim(`${line.durationMs}ms`),...line.suffix].join(" ")}function requestLogger(options={}){return options.enabled===!1?(_request,next)=>next():async(request,next)=>{let level=resolveLogLevel(options.level),startedAt=Date.now(),httpMethod=request.method,pathname=new URL(request.url).pathname;if(isNoisyRequest(httpMethod,pathname))return next();let requestHeaders={};level==="trace"&&request.headers.forEach((value,key)=>{requestHeaders[key]=value});let requestBody;if(httpMethod!=="GET"&&httpMethod!=="HEAD"){let parsedBody=getRequestBag(request).parsedBody;if(parsedBody!==void 0)requestBody=parsedBody;else try{requestBody=await request.clone().json(),(request.headers.get("content-type")??"").includes("application/json")&&(getRequestBag(request).parsedBody=requestBody)}catch{}}let description=describeRequest(httpMethod,pathname,options.mcpPath,requestBody),logLine=(status,detail2,suffix2=[])=>{console.log(formatRequestLogLine({prefix:options.prefix,description,detail:detail2,pathname,status,durationMs:Date.now()-startedAt,suffix:suffix2}))},response;try{response=await next()}catch(error3){throw logLine(500,void 0,[red(`ERROR ${sanitize(error3 instanceof Error?error3.message:String(error3))}`)]),error3}let streaming=description.streaming||response.headers.get("content-type")?.split(";",1)[0]?.trim().toLowerCase()==="text/event-stream",detail=description.mcpRequest===void 0?void 0:formatDetail(description.mcpRequest),suffix=[];if(description.mcpRequest!==void 0&&detail!==void 0){let echoPayloads=level!=="info";echoPayloads&&detail.input!==void 0&&suffix.push(inlineJson(detail.input));let outcome=streaming?{errorMessage:null}:await extractResponseOutcome(response,request);echoPayloads&&description.mcpRequest.method==="tools/call"&&outcome.errorMessage===null&&outcome.result!==void 0&&suffix.push(dim("->"),inlineJson(compactToolResult(outcome.result))),outcome.errorMessage!==null?suffix.push(red(`ERROR ${sanitize(outcome.errorMessage)}`)):response.status>=400&&suffix.push(red(`ERROR (HTTP ${response.status})`))}logLine(response.status,detail,suffix);let oauthEndpoint=options.mcpPath!==void 0&&pathname.startsWith(pathUnderBase(options.mcpPath,"oauth/"));return level==="trace"&&!oauthEndpoint&&await printTraceDump(response,requestHeaders,requestBody,!streaming),response}}init_dist();init_fetch_app();import{trackBufferedResponse as trackBufferedResponse2}from"#mcp-use-buffered-response";function createMcpMount(factory,options={}){let{path="/mcp",handler:handlerOptions,authInfo:getAuthInfo}=options,legacyMode=handlerOptions?.legacy??"stateless",handler=createMcpHandler(factory,{legacy:"stateless",...handlerOptions});return{handler,fetch:async request=>{if(!matchesPath(request,path))return new Response("Not Found",{status:404});if(legacyMode==="stateless"){let method=request.method.toUpperCase();if(method==="GET"||method==="DELETE"||method==="HEAD")return new Response(null,{status:204})}let bag=getRequestBag(request),parsedBody=bag.parsedBody;if(parsedBody===void 0)try{parsedBody=await request.clone().json()}catch{}let capabilities=extractClientCapabilitiesFromBody(parsedBody);capabilities!==void 0&&stashClientCapabilities(request,capabilities);let authInfo=getAuthInfo?.(request)??bag.authInfo,response=await handler.fetch(request,{...parsedBody!==void 0&&{parsedBody},...authInfo!==void 0&&{authInfo}});return response.headers.get("content-type")?.toLowerCase().includes("application/json")?"Bun"in globalThis&&response.body!==null?new Response(await response.arrayBuffer(),{status:response.status,statusText:response.statusText,headers:response.headers}):trackBufferedResponse2(request,response):response}}}function object2(value,label){if(value===null||typeof value!="object"||Array.isArray(value))throw new TypeError(`${label} must be an object`);return value}function array2(value,label){if(!Array.isArray(value))throw new TypeError(`${label} must be an array`);return value}function nonBlank(value,label){if(typeof value!="string"||!value.trim())throw new TypeError(`${label} must be a non-blank string`)}function standard(json,validate){return{"~standard":{version:1,vendor:"mcp-use",jsonSchema:{input:()=>json,output:()=>json},async validate(value){try{return{value:await validate(value)}}catch(error3){return{issues:[{message:error3 instanceof Error?error3.message:String(error3)}]}}}}}}function prepareSettings(options){let readTool=options.readTool??"settings.read",updateTool=options.updateTool??"settings.update";if(nonBlank(readTool,"readTool"),nonBlank(updateTool,"updateTool"),readTool===updateTool)throw new TypeError("Settings read and update tools must have different names");object2(options.fields,"fields");let fields=Object.entries(options.fields).map(([name,field])=>[name,{...field}]);if(!fields.length)throw new TypeError("Settings require at least one field");let properties={};for(let[name,field]of fields){if(nonBlank(field.title,`Setting ${name} title`),field.description!==void 0&&typeof field.description!="string")throw new TypeError(`Setting ${name} description must be a string`);let outputProperty=field.schema["~standard"].jsonSchema.output({target:"draft-2020-12"}),property=field.schema["~standard"].jsonSchema.input({target:"draft-2020-12"});if(!["boolean","string","number","integer"].includes(String(property.type))||outputProperty.type!==property.type||["$ref","anyOf","oneOf","allOf"].some(key=>key in property)||property.enum!==void 0&&(property.type!=="string"||!Array.isArray(property.enum)||!property.enum.length||!property.enum.every(item=>typeof item=="string")))throw new TypeError(`Unsupported native setting ${name}: use boolean, string, string enum, number, or integer`);let wireProperty=structuredClone(property);delete wireProperty.default,Object.defineProperty(properties,name,{enumerable:!0,value:{...wireProperty,title:field.title,...field.description!==void 0&&{description:field.description}}})}let schema2={type:"object",properties,required:fields.map(([name])=>name),additionalProperties:!1},layout=options.layout===void 0?void 0:structuredClone(options.layout);if(layout!==void 0)for(let groupValue of array2(layout,"Settings layout")){let group=object2(groupValue,"Settings layout group");if(group.kind!=="group")throw new TypeError("Settings layout groups must have kind 'group'");nonBlank(group.title,"Settings layout group title");for(let itemValue of array2(group.items,"Settings layout group items")){let item=object2(itemValue,"Settings layout item");if(item.kind==="property"){if(nonBlank(item.property,"Settings layout property"),!Object.hasOwn(properties,item.property))throw new TypeError(`Settings layout references unknown setting: ${item.property}`)}else if(item.kind==="tool"){if(nonBlank(item.tool,"Settings layout action tool"),nonBlank(item.title,"Settings layout action title"),item.description!==void 0&&typeof item.description!="string")throw new TypeError("Settings layout action description must be a string")}else throw new TypeError("Settings layout items must have kind 'property' or 'tool'")}}let validateValues=async(value,partial2=!1)=>{let values=object2(value,partial2?"set":"values");for(let name of Object.keys(values))if(!Object.hasOwn(properties,name))throw new TypeError(`Unknown setting: ${name}`);if(partial2&&!Object.keys(values).length)throw new TypeError("Set at least one setting");let result={};for(let[name,field]of fields){if(!Object.hasOwn(values,name)){if(!partial2)throw new TypeError(`Missing effective setting: ${name}`);continue}let parsed=await field.schema["~standard"].validate(values[name]);if(parsed.issues!==void 0)throw new TypeError(`Invalid setting ${name}: ${parsed.issues.map(issue2=>issue2.message).join(", ")}`);if(parsed.value===void 0||!["string","boolean","number"].includes(typeof parsed.value)||typeof parsed.value=="number"&&!Number.isFinite(parsed.value))throw new TypeError(`Invalid primitive setting: ${name}`);if(!Object.is(parsed.value,values[name]))throw new TypeError(`Setting ${name} schema must not transform values`);Object.defineProperty(result,name,{enumerable:!0,value:parsed.value})}return result},emptySchema=standard({type:"object",additionalProperties:!1},value=>{if(Object.keys(object2(value,"arguments")).length)throw new TypeError("Settings read accepts empty arguments");return{}}),updateInput=standard({type:"object",properties:{set:{...schema2,required:[],minProperties:1}},required:["set"],additionalProperties:!1},async value=>{let input=object2(value,"arguments");if(Object.keys(input).some(key=>key!=="set"))throw new TypeError("Unknown settings update argument");return{set:await validateValues(input.set,!0)}}),readOutput=standard({type:"object",properties:{schema:{type:"object"},values:schema2,layout:{type:"array",items:{type:"object",properties:{kind:{const:"group"},title:{type:"string"},items:{type:"array",items:{type:"object"}}},required:["kind","title","items"]}}},required:["schema","values"]},async value=>{let output=object2(value,"settings result");return{...output,values:await validateValues(output.values)}}),updateOutput=standard({type:"object",properties:{values:schema2},required:["values"]},async value=>({values:await validateValues(object2(value,"settings result").values)}));return{capability:{readTool,updateTool},schema:schema2,layout,readDefinition:{name:readTool,inputSchema:emptySchema,outputSchema:readOutput,annotations:{readOnlyHint:!0}},updateDefinition:{name:updateTool,inputSchema:updateInput,outputSchema:updateOutput}}}init_dist();function createPrefixCompletion(values){let strings=values.map(String);return value=>{let prefix=String(value??"").toLowerCase();return strings.filter(candidate=>candidate.toLowerCase().startsWith(prefix))}}function completable2(schema2,complete){return typeof complete=="function"?completable(schema2,(value,context)=>complete(String(value??""),context)):completable(schema2,createPrefixCompletion(complete))}function normalizeCompletions(completions){let normalized=Object.create(null);for(let[variable,completer]of Object.entries(completions))completer!==void 0&&(normalized[variable]=Array.isArray(completer)?createPrefixCompletion(completer):completer);return normalized}init_dist();var inputSchema=fromJsonSchema2({type:"object",properties:{query:{type:"string"}},required:["query"]}),outputSchema=fromJsonSchema2({type:"object",properties:{items:{type:"array",items:ResourceLinkSchema["~standard"].jsonSchema.output({target:"draft-2020-12"})}},required:["items"]});function record2(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)?value:{}}function prepareMentions(options){if(typeof options.name!="string"||!options.name.trim())throw new TypeError("Mention tool name must be a non-blank string");if(typeof options.search!="function")throw new TypeError("Mention search must be a callback");let{search:_search,...descriptor}=options;return{...descriptor,inputSchema,outputSchema,annotations:{readOnlyHint:!0,...options.annotations},_meta:{...options._meta,"openai/extensions":{...record2(options._meta?.["openai/extensions"]),"mentions/search":{}}}}}function finalizeMentionsMeta(definition,metadata){let rawUi=record2(definition._meta?.ui),visibility=definition.visibility!==void 0?[definition.visibility]:Array.isArray(rawUi.visibility)?rawUi.visibility:[];return{...metadata,ui:{...record2(metadata?.ui),visibility:[...new Set([...visibility,"app"])]}}}init_dist();var HTTP_METHODS=["get","put","post","delete","options","head","patch","trace"];function registerOpenAPITools(server,options){let operations=collectOperations(options.spec,options),names=createToolNames(operations),baseUrl=operations.length>0?resolveBaseUrl(options):void 0;for(let[index,operation]of operations.entries()){let name=names[index];if(name===void 0||baseUrl===void 0)continue;let inputBindings=createInputBindings(operation);server.tool({name,description:createToolDescription(operation),inputSchema:createToolInputSchema(options.spec,operation,inputBindings)},async params=>callOpenAPIOperation(operation,params,options,inputBindings,baseUrl))}}function collectOperations(spec,options){let collected=[];for(let[path,pathItemOrRef]of Object.entries(spec.paths??{})){let pathItem=resolveRef(spec,pathItemOrRef);if(pathItem===void 0||isReferenceObject(pathItem))continue;let pathParameters=resolveParameters(spec,pathItem.parameters);for(let method of HTTP_METHODS){let operationOrRef=pathItem[method];if(operationOrRef===void 0)continue;let operation=resolveRef(spec,operationOrRef);if(operation===void 0||isReferenceObject(operation))continue;let operationParameters=resolveParameters(spec,operation.parameters),requestBody=operation.requestBody===void 0?void 0:resolveRef(spec,operation.requestBody),item={method,path,operation,parameters:mergeParameters(pathParameters,operationParameters),...requestBody!==void 0&&!isReferenceObject(requestBody)&&{requestBody}};isIncluded(item,options)&&collected.push(item)}}return collected}function resolveParameters(spec,parameters){let resolved=[];for(let parameter of parameters??[]){let value=resolveRef(spec,parameter);value!==void 0&&!isReferenceObject(value)&&resolved.push(value)}return resolved}function mergeParameters(pathParameters,operationParameters){let merged=new Map;for(let parameter of[...pathParameters,...operationParameters])merged.set(`${parameter.in}:${parameter.name}`,parameter);return[...merged.values()]}function isIncluded(operation,options){if(options.tags?.length){let tags=new Set(operation.operation.tags??[]);if(!options.tags.some(tag=>tags.has(tag)))return!1}return!(options.exclude??[]).some(rule=>matchesExcludeRule(operation,rule))}function matchesExcludeRule(operation,rule){if(rule.method&&rule.method.toLowerCase()!==operation.method||rule.operationId&&!matchesPattern2(rule.operationId,operation.operation.operationId??"")||rule.path&&!matchesPattern2(rule.path,operation.path))return!1;if(rule.tags?.length){let tags=new Set(operation.operation.tags??[]);if(!rule.tags.some(tag=>tags.has(tag)))return!1}return!0}function matchesPattern2(pattern,value){return typeof pattern=="string"?pattern===value:(pattern.lastIndex=0,pattern.test(value))}function createToolNames(operations){let seen=new Map;return operations.map(operation=>{let baseName=slugifyToolName(operation.operation.operationId??`${operation.method}_${operation.path.replace(/[{}]/g,"").replace(/\//g,"_")}`),count=seen.get(baseName)??0;if(seen.set(baseName,count+1),count===0)return baseName;let suffix=`_${count+1}`;return`${baseName.slice(0,64-suffix.length)}${suffix}`})}function createToolDescription(operation){return[operation.operation.summary,operation.operation.description,`HTTP: ${operation.method.toUpperCase()} ${operation.path}`].filter(part=>!!part).join(`
|
|
769
769
|
|
|
770
770
|
`)}function slugifyToolName(value){return value.trim().replace(/[^a-zA-Z0-9_-]+/g,"_").replace(/_+/g,"_").replace(/^_/,"").replace(/_$/,"").slice(0,64)||"openapi_tool"}function createToolInputSchema(spec,operation,inputBindings){let properties={},required2=[];for(let{parameter,inputName}of inputBindings.parameters){let parameterSchema=transformSchema(spec,parameter.schema??{});properties[inputName]={...parameterSchema,description:parameter.description??`${parameter.in} parameter`},(parameter.required||parameter.in==="path")&&required2.push(inputName)}let bodySchema=getJsonRequestBodySchema(operation.requestBody);bodySchema!==void 0&&inputBindings.bodyInputName!==void 0&&(properties[inputBindings.bodyInputName]=transformSchema(spec,bodySchema),operation.requestBody?.required&&required2.push(inputBindings.bodyInputName));let definitions=createSchemaDefinitions(spec),schema2={type:"object",properties,additionalProperties:!1,...required2.length>0&&{required:required2},...definitions!==void 0&&{$defs:definitions}};return fromJsonSchema2(schema2)}function createInputBindings(operation){let parameters=operation.parameters.filter(parameter=>parameter.in!=="cookie"),bodyInputName=getJsonRequestBodySchema(operation.requestBody)===void 0?void 0:"body",nameCounts=new Map;for(let parameter of parameters)nameCounts.set(parameter.name,(nameCounts.get(parameter.name)??0)+1);let usedNames=new Set(bodyInputName===void 0?[]:[bodyInputName]);return{parameters:parameters.map(parameter=>{let preferredName=(nameCounts.get(parameter.name)??0)>1||parameter.name===bodyInputName?`${parameter.name}_${parameter.in}`:parameter.name;return{parameter,inputName:claimInputName(preferredName,usedNames)}}),...bodyInputName!==void 0&&{bodyInputName}}}function claimInputName(preferredName,usedNames){let inputName=preferredName,suffix=2;for(;usedNames.has(inputName);)inputName=`${preferredName}_${suffix}`,suffix+=1;return usedNames.add(inputName),inputName}function createSchemaDefinitions(spec){let schemas=readRecord(spec.components?.schemas);if(schemas===void 0)return;let definitions={};for(let[name,schema2]of Object.entries(schemas))definitions[name]=transformSchemaNode(spec,schema2,new Set);return definitions}function transformSchema(spec,schema2){let transformed=transformSchemaNode(spec,schema2,new Set);return readRecord(transformed)??{}}function transformSchemaNode(spec,value,resolvingRefs){if(Array.isArray(value))return value.map(item=>transformSchemaNode(spec,item,resolvingRefs));let object5=readRecord(value);if(object5===void 0)return value;let ref=typeof object5.$ref=="string"?object5.$ref:void 0,siblings={};for(let[key,child]of Object.entries(object5))key!=="$ref"&&(key==="nullable"&&typeof child=="boolean"||isExclusiveBoundKey(key)&&typeof child=="boolean"||(siblings[key]=transformSchemaNode(spec,child,resolvingRefs)));for(let[boundKey,exclusiveKey]of EXCLUSIVE_BOUND_KEYS)object5[exclusiveKey]===!0&&typeof object5[boundKey]=="number"&&(siblings[exclusiveKey]=object5[boundKey],delete siblings[boundKey]);let transformed=siblings;if(ref!==void 0){let schemaRef=rewriteSchemaRef(spec,ref);if(schemaRef!==void 0)transformed={$ref:schemaRef,...siblings};else if(!resolvingRefs.has(ref)){let resolved=resolveRef(spec,{$ref:ref});if(resolved!==void 0){let nextRefs=new Set(resolvingRefs);nextRefs.add(ref),transformed={...readRecord(transformSchemaNode(spec,resolved,nextRefs))??{},...siblings}}}}return object5.nullable===!0?{anyOf:[transformed,{type:"null"}]}:transformed}var EXCLUSIVE_BOUND_KEYS=[["minimum","exclusiveMinimum"],["maximum","exclusiveMaximum"]];function isExclusiveBoundKey(key){return key==="exclusiveMinimum"||key==="exclusiveMaximum"}function rewriteSchemaRef(spec,ref){let prefix="#/components/schemas/";if(ref.startsWith(prefix))return resolveRef(spec,{$ref:ref})===void 0?void 0:`#/$defs/${ref.slice(prefix.length)}`}function getJsonRequestBodySchema(requestBody){let content=requestBody?.content;if(content!==void 0)return content["application/json"]?.schema??content["application/*+json"]?.schema??Object.entries(content).find(([mediaType])=>mediaType.includes("+json"))?.[1].schema}async function callOpenAPIOperation(operation,params,options,inputBindings,baseUrl){let fetchImpl=options.fetch??globalThis.fetch,url2=buildUrl(operation,params,inputBindings.parameters,baseUrl),headers=buildHeaders(inputBindings.parameters,params,options),bodyInputName=inputBindings.bodyInputName,body=bodyInputName===void 0||params[bodyInputName]===void 0?void 0:JSON.stringify(params[bodyInputName]);body!==void 0&&!hasHeader(headers,"content-type")&&(headers["content-type"]="application/json");let response=await fetchImpl(url2,{method:operation.method.toUpperCase(),headers,...body!==void 0&&{body}}),contentType=response.headers.get("content-type")??"";if(!response.ok)return{content:[{type:"text",text:await response.text()}],isError:!0};if(contentType.includes("application/json")||contentType.includes("+json")){let text2=await response.text();try{let data=JSON.parse(text2);return{content:[{type:"text",text:JSON.stringify(data)}],structuredContent:data}}catch{return{content:[{type:"text",text:text2}]}}}return{content:[{type:"text",text:await response.text()}]}}function buildUrl(operation,params,parameterBindings,baseUrl){let interpolatedPath=operation.path.replace(/{([^}]+)}/g,(_match,name)=>{let binding=parameterBindings.find(({parameter})=>parameter.in==="path"&¶meter.name===name);return encodeURIComponent(String(binding===void 0?"":params[binding.inputName]??""))}),url2=new URL(interpolatedPath.replace(/^\/+/,""),ensureTrailingSlash(baseUrl));for(let{parameter,inputName}of parameterBindings){if(parameter.in!=="query")continue;let value=params[inputName];value==null||value===""||appendQueryParam(url2,parameter.name,value)}return url2.toString()}function buildHeaders(parameterBindings,params,options){let headers={...options.headers??{}};for(let{parameter,inputName}of parameterBindings){if(parameter.in!=="header")continue;let value=params[inputName];value==null||value===""||(headers[parameter.name]=String(value))}return options.auth?.type==="bearer"&&options.auth.token&&(headers.authorization=`Bearer ${options.auth.token}`),options.auth?.type==="header"&&options.auth.value&&(headers[options.auth.name]=options.auth.value),headers}function resolveBaseUrl(options){let baseUrl=options.baseUrl??options.spec.servers?.[0]?.url;if(baseUrl===void 0||baseUrl.trim()==="")throw new Error("MCPServer.fromOpenAPI requires options.baseUrl or spec.servers[0].url");return baseUrl}function appendQueryParam(url2,name,value){if(Array.isArray(value)){for(let item of value)item!=null&&item!==""&&url2.searchParams.append(name,String(item));return}url2.searchParams.set(name,String(value))}function ensureTrailingSlash(url2){return url2.endsWith("/")?url2:`${url2}/`}function hasHeader(headers,name){return Object.keys(headers).some(headerName=>headerName.toLowerCase()===name)}function isReferenceObject(value){let object5=readRecord(value);return object5!==void 0&&typeof object5.$ref=="string"}function resolveRef(spec,value){if(!isReferenceObject(value))return value;if(!value.$ref.startsWith("#/"))return;let segments=value.$ref.slice(2).split("/").map(segment=>segment.replace(/~1/g,"/").replace(/~0/g,"~")),current=spec;for(let segment of segments){let object5=readRecord(current);if(object5===void 0||!(segment in object5))return;current=object5[segment]}return current}function readRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)?value:void 0}init_dist();init_dist();init_fetch_app();function isRecord(value){return value!==null&&typeof value=="object"&&!Array.isArray(value)}function isLocalhost(url2){let hostname=url2.hostname.toLowerCase();return hostname==="localhost"||hostname.endsWith(".localhost")||hostname==="[::1]"||/^127(?:\.\d{1,3}){3}$/.test(hostname)}function parseAbsoluteUrl(value,name){let url2;try{url2=new URL(value)}catch{throw new Error(`${name} must be an absolute URL`)}if(url2.origin==="null"||url2.username!==""||url2.password!=="")throw new Error(`${name} must be an absolute URL without credentials`);return url2}function assertSecureHttpUrl(url2,name){if(url2.protocol!=="https:"&&!(url2.protocol==="http:"&&isLocalhost(url2)))throw new Error(`${name} must use HTTPS, or HTTP for localhost`)}function assertOAuthMetadata(metadata){if(metadata===null||typeof metadata!="object"||!("issuer"in metadata)||typeof metadata.issuer!="string")throw new TypeError("oauthMetadata must include a string issuer");assertSecureHttpUrl(parseAbsoluteUrl(metadata.issuer,"oauthMetadata.issuer"),"oauthMetadata.issuer")}init_dist();function invalidToken(message,cause){let error3=new OAuthError(OAuthErrorCode.InvalidToken,message);return cause!==void 0&&(error3.cause=cause),error3}function resolveConfiguredOAuthResource(options){let provider=options.provider,basePath=normalizeBasePath(options.basePath);if(provider.resource!==void 0)return validateOAuthResource(provider.resource,basePath);if(options.mcpUrl!==void 0)return validateOAuthResource(appendBasePath(requireAbsoluteOrigin(options.mcpUrl,"MCP_URL"),basePath),basePath)}function resolveLocalOAuthResource(listenOrigin,basePath){let listenOriginUrl=requireAbsoluteOrigin(listenOrigin,"listen origin");if(!isLocalhost(listenOriginUrl))throw new Error("OAuth listen origin must be localhost or a loopback address");return validateOAuthResource(appendBasePath(listenOriginUrl,normalizeBasePath(basePath)),basePath)}function validateOAuthResource(resource2,basePath){let normalizedBasePath=normalizeBasePath(basePath),url2=parseAbsoluteUrl(resource2,"OAuth resource");if(url2.search!==""||url2.hash!=="")throw new Error("OAuth resource must not include a query string or fragment");if(assertSecureHttpUrl(url2,"OAuth resource"),normalizePathname(url2.pathname)!==normalizedBasePath)throw new Error(`OAuth resource path must exactly match basePath (${normalizedBasePath})`);return url2.pathname=normalizedBasePath,url2}function wrapOAuthTokenVerifier(provider,expectedResource){let canonicalResource=normalizeResourceUrl(expectedResource),tokenVerifier=provider.createTokenVerifier(new URL(canonicalResource.href));if(tokenVerifier===null||typeof tokenVerifier!="object"||typeof tokenVerifier.verifyAccessToken!="function")throw new TypeError("OAuth provider createTokenVerifier must return an OAuthTokenVerifier");return{async verifyAccessToken(token){let authInfo=await tokenVerifier.verifyAccessToken(token);assertVerifiedAuthInfo(authInfo),assertResourceBinding(authInfo,canonicalResource);let mapped;try{mapped=provider.mapAuthInfo(authInfo)}catch(error3){throw invalidToken("Token identity mapping failed",error3)}return assertMappedExtra(mapped),{...authInfo,scopes:[...authInfo.scopes],extra:{...authInfo.extra,...mapped}}}}}function assertResourceBinding(authInfo,expectedResource){if(authInfo.resource===void 0)throw invalidToken("Token verifier did not return a validated protected resource");if(parseTokenResource(authInfo.resource).href!==normalizeResourceUrl(expectedResource).href)throw invalidToken("Token resource does not match the protected resource")}function parseTokenResource(value){if(!(value instanceof URL))throw invalidToken("Token resource must be an absolute HTTPS URL, or HTTP URL for localhost");let resource2=value;if(!/^https?:$/.test(resource2.protocol)||resource2.username!==""||resource2.password!==""||resource2.search!==""||resource2.hash!==""||resource2.protocol==="http:"&&!isLocalhost(resource2))throw invalidToken("Token resource must be an absolute HTTPS URL, or HTTP URL for localhost");return normalizeResourceUrl(resource2)}function normalizeResourceUrl(resource2){let normalized=new URL(resource2);return normalized.pathname=normalized.pathname==="/"?"/":normalized.pathname.replace(/\/+$/,""),normalized}function resolveOAuthMetadata(provider,resource2){let metadata=provider.oauthMetadata;if(typeof metadata!="function")return metadata;let resolved=metadata(new URL(resource2.href));return assertOAuthMetadata(resolved),resolved}function getOAuthProviderOptions(provider){return{oauthMetadata:provider.oauthMetadata,...provider.requiredScopes!==void 0&&{requiredScopes:[...provider.requiredScopes]},...provider.scopesSupported!==void 0&&{scopesSupported:[...provider.scopesSupported]},...provider.resourceName!==void 0&&{resourceName:provider.resourceName},...provider.serviceDocumentationUrl!==void 0&&{serviceDocumentationUrl:provider.serviceDocumentationUrl}}}function assertVerifiedAuthInfo(authInfo){if(authInfo===null||typeof authInfo!="object"||typeof authInfo.token!="string"||authInfo.token.length===0||typeof authInfo.clientId!="string"||!Array.isArray(authInfo.scopes)||!authInfo.scopes.every(scope=>typeof scope=="string")||typeof authInfo.expiresAt!="number"||!Number.isFinite(authInfo.expiresAt)||authInfo.expiresAt<=Date.now()/1e3)throw invalidToken("Token verifier returned invalid authentication information")}function assertMappedExtra(mapped){if(mapped===null||typeof mapped!="object"||!("user"in mapped)||mapped.user===void 0||!isRecord(mapped.payload)||!Array.isArray(mapped.permissions)||!mapped.permissions.every(permission=>typeof permission=="string"))throw invalidToken("Token identity mapping must return user, payload, and string permissions")}function requireAbsoluteOrigin(value,name){let url2=parseAbsoluteUrl(value,name);if(url2.pathname!=="/"||url2.search!==""||url2.hash!==""||url2.username!==""||url2.password!=="")throw new Error(`${name} must be an absolute origin without a path`);return url2}function appendBasePath(origin,basePath){let resource2=new URL(origin.origin);return resource2.pathname=basePath,resource2}function normalizeBasePath(basePath){if(!basePath.startsWith("/")||basePath.includes("?")||basePath.includes("#"))throw new Error("basePath must be an absolute URL pathname");return normalizePathname(basePath)}function normalizePathname(pathname){if(pathname==="/")return"/";let end=pathname.length;for(;end>0&&pathname.charCodeAt(end-1)===47;)end--;return pathname.slice(0,end)}function oauthMetadata(provider,resource2){let options=getOAuthProviderOptions(provider),metadata=resolveOAuthMetadata(provider,resource2);return async(request,next)=>{let response=oauthMetadataResponse(request,{oauthMetadata:metadata,resourceServerUrl:resource2,...options.scopesSupported!==void 0&&{scopesSupported:[...options.scopesSupported]},...options.resourceName!==void 0&&{resourceName:options.resourceName},...options.serviceDocumentationUrl!==void 0&&{serviceDocumentationUrl:options.serviceDocumentationUrl}});return response!==void 0?response:next()}}function authInfoFromRequest(request){return getRequestBag(request).authInfo}init_dist();import{createRemoteJWKSet,jwtVerify,errors}from"jose";var textEncoder=new TextEncoder,textDecoder=new TextDecoder("utf-8",{fatal:!0});function isBuilding(){return typeof process>"u"||process.env===void 0?!1:process.env.MCP_USE_PHASE==="build"}var DCR_CLIENT_TTL=365*24*60*60;var CIMD_MAX_BYTES=5*1024;var CIMD_CACHE_MS=300*1e3;var REFRESH_TTL=720*60*60;var UPSTREAM_TTL=1440*60*60,REMEMBER_TTL=365*24*60*60;init_policy();function resolveToolInputSchema(definition){return definition.inputSchema??definition.schema}init_dist();var META_KEY="openai/ui";function record3(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function validateEntrypointInput(definition){let entrypoints=definition.view?.entrypoints;if(!entrypoints?.length)return;let schema2=resolveToolInputSchema(definition),validate=schema2?fromJsonSchema2(schema2["~standard"].jsonSchema.input({target:"draft-2020-12"}))["~standard"].validate:void 0;for(let entrypoint of entrypoints){let payloads=entrypoint.type==="file"?entrypoint.extensions.map(extension=>({file:{name:`file${extension}`,resourceUri:"host-resource://opaque-handle"}})):[{}];if(entrypoint.type==="file"&&!validate)throw new TypeError(`Tool "${definition.name}" file entrypoint requires an inputSchema accepting { file: { name, resourceUri } }.`);for(let payload of payloads){let result=validate?.(payload);if(result&&("then"in result||result.issues))throw new TypeError(`Tool "${definition.name}" ${entrypoint.type} entrypoint launch arguments do not satisfy its inputSchema.`)}}}function buildEntrypointMeta(definition){let entrypoints=definition.view?.entrypoints;if(entrypoints===void 0)return definition._meta;let existing=definition._meta?.[META_KEY];return{...definition._meta,[META_KEY]:{...record3(existing)?existing:{},entrypoints:entrypoints.map(entry=>entry.type==="file"?{type:entry.type,extensions:[...entry.extensions]}:{type:entry.type})}}}var EVENT="mcp_use_sdk_event",ENDPOINT="https://eu.i.posthog.com/i/v0/e/",TOKEN="phc_lyTtbYwvkdSbrcMQNPiKiiRWrrM1seyKIMjycSvItEI",CONTENT=/(^|_)(arguments?|args|body|command|headers?|location|message|organization|path|query|response|secret|subject|token|uri|url|user_agent)(_|$)/i,RESERVED=new Set("feature action sdk_generation telemetry_schema_version sdk_package sdk_version server_id runtime_id identity_stability distinct_id validation_run_id is_validation".split(" ")),runtimeId;function getRuntimeId(){return runtimeId??=crypto.randomUUID(),runtimeId}var once=new Set,pending=new Set,identities=new Map;function hasControl(value){return[...value].some(character=>{let code=character.charCodeAt(0);return code<32||code===127})}function env(name){return typeof process>"u"?void 0:process.env?.[name]}function safeEnv(name){let value=env(name);return value!==void 0&&value.length>0&&value.length<=128&&!hasControl(value)?value:void 0}function canPersistTelemetryIdentity(){return typeof process>"u"||process.versions?.node===void 0?!1:!("Deno"in globalThis)}function disabled(){if(env("MCP_USE_ANONYMIZED_TELEMETRY")==="false")return!0;try{return globalThis.__MCP_USE_ANONYMIZED_TELEMETRY__===!1||typeof localStorage<"u"&&localStorage.getItem("MCP_USE_ANONYMIZED_TELEMETRY")==="false"}catch{return!1}}function isUsageDisabled(){return disabled()}function clean(properties){return Object.fromEntries(Object.entries(properties).filter(([key,value])=>key.length>128||hasControl(key)||key.startsWith("$")||RESERVED.has(key)||CONTENT.test(key)||value===void 0?!1:typeof value=="string"?value.length<=128&&!hasControl(value):typeof value=="boolean"||typeof value=="number"&&Number.isFinite(value)))}async function identity(serverRoot){let projectId=safeEnv("MCP_USE_TELEMETRY_PROJECT_ID");if(projectId!==void 0)return{id:projectId,stability:"project"};if(serverRoot===void 0||!canPersistTelemetryIdentity())return{id:getRuntimeId(),stability:"process"};let existing=identities.get(serverRoot);if(existing!==void 0)return existing;let resolving=(async()=>{try{let fs=await import("fs/promises"),directory=`${serverRoot}/.mcp-use`,file=`${directory}/usage.json`,read=async()=>{try{let value=JSON.parse(await fs.readFile(file,"utf8"));if(typeof value=="object"&&value!==null&&"schemaVersion"in value&&value.schemaVersion===1&&"serverId"in value&&typeof value.serverId=="string"&&/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value.serverId))return value.serverId}catch{}},stored=await read();if(stored!==void 0)return{id:stored,stability:"server"};await fs.mkdir(directory,{recursive:!0,mode:448});let created=crypto.randomUUID();try{return await fs.writeFile(file,`${JSON.stringify({schemaVersion:1,serverId:created})}
|
|
771
|
-
`,{flag:"wx",mode:384}),{id:created,stability:"server"}}catch{let raced=await read();if(raced!==void 0)return{id:raced,stability:"server"}}}catch{}return{id:getRuntimeId(),stability:"process"}})();return identities.set(serverRoot,resolving),resolving}function capture(feature,action,properties,options,resolveIdentity){let validationId=safeEnv("MCP_USE_TELEMETRY_VALIDATION_ID");if(disabled()||env("NODE_ENV")==="test"&&validationId===void 0||pending.size>=16)return;if(options.onceKey!==void 0){if(once.has(options.onceKey))return;once.add(options.onceKey)}let rate=Math.max(0,Math.min(1,options.sampleRate??1));if(validationId===void 0&&Math.random()>=rate)return;let request=(async()=>{try{let resolvedIdentity=await resolveIdentity(),body=JSON.stringify({api_key:TOKEN,event:EVENT,properties:{...clean(properties),feature,action,sdk_generation:"v2",telemetry_schema_version:2,sdk_package:"mcp-use",sdk_version:"2.10.0",server_id:resolvedIdentity.id,runtime_id:getRuntimeId(),identity_stability:resolvedIdentity.stability,distinct_id:resolvedIdentity.id,sample_rate:validationId===void 0?rate:1,$process_person_profile:!1,$geoip_disable:!0,...validationId!==void 0&&{is_validation:!0,validation_run_id:validationId}}});await fetch(ENDPOINT,{method:"POST",headers:{"content-type":"application/json"},keepalive:!0,body})}catch{return}})();pending.add(request),request.then(()=>pending.delete(request))}function recordUsage(feature,action,properties={},options={}){capture(feature,action,properties,options,()=>identity(options.serverRoot))}init_dist();function schema(validateValue){return{"~standard":{version:1,vendor:"mcp-use",validate(value){try{return{value:validateValue(value)}}catch(error3){return{issues:[{message:error3 instanceof Error?error3.message:String(error3)}]}}}}}}function object3(value){if(typeof value!="object"||value===null||Array.isArray(value))throw new TypeError("params must be an object");return value}var listParams=schema(value=>{let cursor=object3(value).cursor;if(cursor!==void 0&&typeof cursor!="string")throw new TypeError("cursor must be a string");return cursor===void 0?{}:{cursor}}),uriParams=schema(value=>{let params=object3(value);if(typeof params.uri!="string")throw new TypeError("uri must be a string");if(params.cursor!==void 0&&typeof params.cursor!="string")throw new TypeError("cursor must be a string");return{uri:params.uri,...typeof params.cursor=="string"&&{cursor:params.cursor}}}),anyResult=schema(value=>object3(value));function decodePathSegment(value){try{return decodeURIComponent(value)}catch{return value}}function registerSkillsRuntime(server,snapshot){let skills=new Map(snapshot.skills.map(skill=>[skill.uri,skill]));for(let resource2 of snapshot.resources)server.registerResource(resource2.uri,resource2.uri,{title:resource2.name,mimeType:resource2.mimeType},async()=>({contents:[{uri:resource2.uri,mimeType:resource2.mimeType,...resource2.text!==void 0?{text:resource2.text}:{blob:resource2.blob}}]}));server.server.setRequestHandler("skills/list",{params:listParams,result:anyResult},async()=>({skills:snapshot.skills})),server.server.setRequestHandler("skills/get",{params:uriParams,result:anyResult},async({uri})=>{let skill=skills.get(uri);if(skill===void 0)throw new ProtocolError(INVALID_PARAMS,`Unknown skill: ${uri}`);return{skill}}),server.server.setRequestHandler("resources/directory/read",{params:uriParams,result:anyResult},async({uri})=>{let normalized=uri.replace(/\/$/,""),knownDirectories=new Set(snapshot.directories.map(item=>item.uri)),prefix=`${normalized}/`,children=new Map;for(let resource2 of snapshot.resources){if(!resource2.uri.startsWith(prefix))continue;let remainder=resource2.uri.slice(prefix.length),[name]=remainder.split("/");if(name===void 0||name==="")continue;let childUri=`${normalized}/${name}`;children.set(childUri,{uri:childUri,name:decodePathSegment(name),mimeType:remainder.includes("/")?"inode/directory":resource2.mimeType})}for(let directory of snapshot.directories){if(!directory.uri.startsWith(prefix))continue;let remainder=directory.uri.slice(prefix.length);remainder===""||remainder.includes("/")||children.set(directory.uri,{uri:directory.uri,name:directory.name,mimeType:"inode/directory"})}if(!knownDirectories.has(normalized))throw new ProtocolError(INVALID_PARAMS,`Unknown skill directory: ${uri}`);return{resources:[...children.values()].sort((left,right)=>left.uri.localeCompare(right.uri))}})}var SKILLS_EXTENSION_ID="io.modelcontextprotocol/skills",registerSkills=Symbol.for("mcp-use.registerSkills");var registerViews=Symbol("mcp-use/registerViews");init_fetch_app();function resolveAssetUrl(assetPath,origin){if(!assetPath.startsWith("/"))throw new Error(`View manifest asset path must be origin-absolute (start with "/"); got ${JSON.stringify(assetPath)}`);return`${origin}${assetPath}`}function viewAssetsBasePath(basePath,viewName){return`${pathUnderBase(basePath,`_mcp-use/views/${viewName}`)}/`}function resolveExternalAssetUrl(assetPath,assetsBase,basePath,viewName){return assetPath.startsWith("http://")||assetPath.startsWith("https://")||assetPath.startsWith("data:")?assetPath:assetPath.startsWith("/")?resolveAssetUrl(assetPath,assetsBase):`${assetsBase}${viewAssetsBasePath(basePath,viewName)}${assetPath.replace(/^\/+/,"")}`}function resolvePublicBase(assetsBase,basePath){return`${assetsBase}${pathUnderBase(basePath,"_mcp-use/public")}/`}function escapeInlineScript(code){return code.replaceAll(/<\/script/gi,"<\\/script").replaceAll("<!--","\\x3C!--")}function escapeInlineStyle(css2){return css2.replaceAll(/<\/style/gi,"<\\/style")}function escapeHtml(value){return value.replaceAll("&","&").replaceAll('"',""").replaceAll("<","<").replaceAll(">",">")}var VIEW_BOOTSTRAP_STYLE=`<style>
|
|
771
|
+
`,{flag:"wx",mode:384}),{id:created,stability:"server"}}catch{let raced=await read();if(raced!==void 0)return{id:raced,stability:"server"}}}catch{}return{id:getRuntimeId(),stability:"process"}})();return identities.set(serverRoot,resolving),resolving}function capture(feature,action,properties,options,resolveIdentity){let validationId=safeEnv("MCP_USE_TELEMETRY_VALIDATION_ID");if(disabled()||env("NODE_ENV")==="test"&&validationId===void 0||pending.size>=16)return;if(options.onceKey!==void 0){if(once.has(options.onceKey))return;once.add(options.onceKey)}let rate=Math.max(0,Math.min(1,options.sampleRate??1));if(validationId===void 0&&Math.random()>=rate)return;let request=(async()=>{try{let resolvedIdentity=await resolveIdentity(),body=JSON.stringify({api_key:TOKEN,event:EVENT,properties:{...clean(properties),feature,action,sdk_generation:"v2",telemetry_schema_version:2,sdk_package:"mcp-use",sdk_version:"2.10.1-canary.0",server_id:resolvedIdentity.id,runtime_id:getRuntimeId(),identity_stability:resolvedIdentity.stability,distinct_id:resolvedIdentity.id,sample_rate:validationId===void 0?rate:1,$process_person_profile:!1,$geoip_disable:!0,...validationId!==void 0&&{is_validation:!0,validation_run_id:validationId}}});await fetch(ENDPOINT,{method:"POST",headers:{"content-type":"application/json"},keepalive:!0,body})}catch{return}})();pending.add(request),request.then(()=>pending.delete(request))}function recordUsage(feature,action,properties={},options={}){capture(feature,action,properties,options,()=>identity(options.serverRoot))}init_dist();function schema(validateValue){return{"~standard":{version:1,vendor:"mcp-use",validate(value){try{return{value:validateValue(value)}}catch(error3){return{issues:[{message:error3 instanceof Error?error3.message:String(error3)}]}}}}}}function object3(value){if(typeof value!="object"||value===null||Array.isArray(value))throw new TypeError("params must be an object");return value}var listParams=schema(value=>{let cursor=object3(value).cursor;if(cursor!==void 0&&typeof cursor!="string")throw new TypeError("cursor must be a string");return cursor===void 0?{}:{cursor}}),uriParams=schema(value=>{let params=object3(value);if(typeof params.uri!="string")throw new TypeError("uri must be a string");if(params.cursor!==void 0&&typeof params.cursor!="string")throw new TypeError("cursor must be a string");return{uri:params.uri,...typeof params.cursor=="string"&&{cursor:params.cursor}}}),anyResult=schema(value=>object3(value));function decodePathSegment(value){try{return decodeURIComponent(value)}catch{return value}}function registerSkillsRuntime(server,snapshot){let skills=new Map(snapshot.skills.map(skill=>[skill.uri,skill]));for(let resource2 of snapshot.resources)server.registerResource(resource2.uri,resource2.uri,{title:resource2.name,mimeType:resource2.mimeType},async()=>({contents:[{uri:resource2.uri,mimeType:resource2.mimeType,...resource2.text!==void 0?{text:resource2.text}:{blob:resource2.blob}}]}));server.server.setRequestHandler("skills/list",{params:listParams,result:anyResult},async()=>({skills:snapshot.skills})),server.server.setRequestHandler("skills/get",{params:uriParams,result:anyResult},async({uri})=>{let skill=skills.get(uri);if(skill===void 0)throw new ProtocolError(INVALID_PARAMS,`Unknown skill: ${uri}`);return{skill}}),server.server.setRequestHandler("resources/directory/read",{params:uriParams,result:anyResult},async({uri})=>{let normalized=uri.replace(/\/$/,""),knownDirectories=new Set(snapshot.directories.map(item=>item.uri)),prefix=`${normalized}/`,children=new Map;for(let resource2 of snapshot.resources){if(!resource2.uri.startsWith(prefix))continue;let remainder=resource2.uri.slice(prefix.length),[name]=remainder.split("/");if(name===void 0||name==="")continue;let childUri=`${normalized}/${name}`;children.set(childUri,{uri:childUri,name:decodePathSegment(name),mimeType:remainder.includes("/")?"inode/directory":resource2.mimeType})}for(let directory of snapshot.directories){if(!directory.uri.startsWith(prefix))continue;let remainder=directory.uri.slice(prefix.length);remainder===""||remainder.includes("/")||children.set(directory.uri,{uri:directory.uri,name:directory.name,mimeType:"inode/directory"})}if(!knownDirectories.has(normalized))throw new ProtocolError(INVALID_PARAMS,`Unknown skill directory: ${uri}`);return{resources:[...children.values()].sort((left,right)=>left.uri.localeCompare(right.uri))}})}var SKILLS_EXTENSION_ID="io.modelcontextprotocol/skills",registerSkills=Symbol.for("mcp-use.registerSkills");var registerViews=Symbol("mcp-use/registerViews");init_fetch_app();function resolveAssetUrl(assetPath,origin){if(!assetPath.startsWith("/"))throw new Error(`View manifest asset path must be origin-absolute (start with "/"); got ${JSON.stringify(assetPath)}`);return`${origin}${assetPath}`}function viewAssetsBasePath(basePath,viewName){return`${pathUnderBase(basePath,`_mcp-use/views/${viewName}`)}/`}function resolveExternalAssetUrl(assetPath,assetsBase,basePath,viewName){return assetPath.startsWith("http://")||assetPath.startsWith("https://")||assetPath.startsWith("data:")?assetPath:assetPath.startsWith("/")?resolveAssetUrl(assetPath,assetsBase):`${assetsBase}${viewAssetsBasePath(basePath,viewName)}${assetPath.replace(/^\/+/,"")}`}function resolvePublicBase(assetsBase,basePath){return`${assetsBase}${pathUnderBase(basePath,"_mcp-use/public")}/`}function escapeInlineScript(code){return code.replaceAll(/<\/script/gi,"<\\/script").replaceAll("<!--","\\x3C!--")}function escapeInlineStyle(css2){return css2.replaceAll(/<\/style/gi,"<\\/style")}function escapeHtml(value){return value.replaceAll("&","&").replaceAll('"',""").replaceAll("<","<").replaceAll(">",">")}var VIEW_BOOTSTRAP_STYLE=`<style>
|
|
772
772
|
html,body,#root{background:transparent}
|
|
773
773
|
html,body{margin:0}
|
|
774
774
|
#root[data-mcp-use-loading]{display:flex;min-height:100vh;align-items:center;justify-content:center;flex-direction:column;gap:10px;color:rgba(127,127,127,.9)}
|
|
@@ -804,7 +804,7 @@ ${cssLinks}
|
|
|
804
804
|
${scriptTags}
|
|
805
805
|
<script type="module" src="${escapeHtml(entryUrl)}"></script>
|
|
806
806
|
</body>
|
|
807
|
-
</html>`}init_origin();init_fetch_app();var PUBLIC_BUILD_DIR=".mcp-use/build/views/public",PUBLIC_DEV_DIR="public",VIEW_ASSETS_BUILD_ROOT=".mcp-use/build/views",decodedAssets=new WeakMap;function serveEmbeddedAsset(assets,path,request,deferCors){let decoded;try{decoded=decodeURIComponent(path)}catch{return new Response("Not Found",{status:404})}if(decoded.includes("\\")||decoded.split("/").includes(".."))return new Response("Not Found",{status:404});let asset=Object.hasOwn(assets,decoded)?assets[decoded]:void 0;if(asset===void 0)return new Response("Not Found",{status:404});let body=null;return request.method!=="HEAD"&&(body=decodedAssets.get(asset)??null,body===null&&(body=Uint8Array.from(atob(asset.body),character=>character.charCodeAt(0)),decodedAssets.set(asset,body))),new Response(body,{headers:{"Content-Type":asset.contentType,"Cache-Control":"public, max-age=0, must-revalidate",...deferCors!==!0&&{"Access-Control-Allow-Origin":"*"}}})}function createViewAssetsHandler(basePath,views,options){if(views.size===0)return;let assetsPrefix=pathUnderBase(basePath,"_mcp-use/views"),projectRoot=options?.projectRoot??process.cwd();return async request=>{if(request.method!=="GET"&&request.method!=="HEAD")return new Response("Method Not Allowed",{status:405});if(!matchesPathPrefix(request,assetsPrefix))return new Response("Not Found",{status:404});let remainder=pathnameOf(request).slice(assetsPrefix.length+1),slash=remainder.indexOf("/");if(slash<=0||slash===remainder.length-1)return new Response("Not Found",{status:404});let viewName=remainder.slice(0,slash),subpath=remainder.slice(slash+1),entry=views.get(viewName);if(entry===void 0||entry.kind!=="external")return new Response("Not Found",{status:404});if(options?.assets!==void 0)return serveEmbeddedAsset(options.assets,remainder,request,options.deferCors);let[{join},{resolvePublicFilePath:resolvePublicFilePath2,servePublicFile:servePublicFile2}]=await Promise.all([import("path"),Promise.resolve().then(()=>(init_public_route(),public_route_exports))]),viewRoot=join(projectRoot,VIEW_ASSETS_BUILD_ROOT,viewName),diskPath=await resolvePublicFilePath2(viewRoot,subpath);return diskPath===null?new Response("Not Found",{status:404}):await servePublicFile2(diskPath,{...options?.deferCors===!0&&{deferCors:!0},...request.method==="HEAD"&&{head:!0}})}}function createViewPublicHandler(basePath,views,options){if(views.size===0&&options?.enabled!==!0)return;let publicPrefix=pathUnderBase(basePath,"_mcp-use/public"),subdir=options?.dev===!0?PUBLIC_DEV_DIR:PUBLIC_BUILD_DIR,projectRoot=options?.projectRoot??process.cwd();return async request=>{if(request.method!=="GET"&&request.method!=="HEAD")return new Response("Method Not Allowed",{status:405});if(!matchesPathPrefix(request,publicPrefix))return new Response("Not Found",{status:404});let encodedSubpath=pathnameOf(request).slice(publicPrefix.length+1),subpath;try{subpath=decodeURIComponent(encodedSubpath)}catch{return new Response("Not Found",{status:404})}if(subpath.length===0)return new Response("Not Found",{status:404});if(options?.assets!==void 0)return serveEmbeddedAsset(options.assets,`public/${encodedSubpath}`,request,options.deferCors);let[{join},{resolvePublicFilePath:resolvePublicFilePath2,servePublicFile:servePublicFile2}]=await Promise.all([import("path"),Promise.resolve().then(()=>(init_public_route(),public_route_exports))]),publicRoot=join(projectRoot,subdir),diskPath=await resolvePublicFilePath2(publicRoot,subpath);return diskPath===null?new Response("Not Found",{status:404}):await servePublicFile2(diskPath,{...options?.deferCors===!0&&{deferCors:!0},...request.method==="HEAD"&&{head:!0}})}}var CATEGORY_ENV={connectDomains:"CSP_CONNECT_DOMAINS",resourceDomains:"CSP_RESOURCE_DOMAINS",frameDomains:"CSP_FRAME_DOMAINS",baseUriDomains:"CSP_BASE_URI_DOMAINS"};function parseDomainList(raw2){return raw2===void 0||raw2.trim()===""?[]:raw2.split(",").map(s=>s.trim()).filter(s=>s.length>0)}function readEnvDomains(name){if(typeof process>"u")return;let raw2=process.env[name];if(!(raw2===void 0||raw2.trim()===""))return parseDomainList(raw2)}function readCspUrlsShortcut(){return readEnvDomains("CSP_URLS")??[]}function readEnvDomainsForCategory(category){let perCategory=readEnvDomains(CATEGORY_ENV[category]);return perCategory!==void 0?perCategory:readCspUrlsShortcut()}function mergeDomainLists(...segments){let seen=new Set,out=[];for(let segment of segments)for(let domain of segment)seen.has(domain)||(seen.add(domain),out.push(domain));return out}function toWebSocketOrigin(serverOrigin){return serverOrigin.startsWith("https://")?`wss://${serverOrigin.slice(8)}`:serverOrigin.startsWith("http://")?`ws://${serverOrigin.slice(7)}`:serverOrigin}function buildMergedResourceCsp(authorFacts,options){let author=authorFacts?.csp,mcpConnectAuto=[];options.serverOrigin!==""&&(mcpConnectAuto.push(options.serverOrigin),options.hmrWs===!0&&mcpConnectAuto.push(toWebSocketOrigin(options.serverOrigin)));let mcpResourceAuto=[],resourceOrigin=options.explicitAssetsBase?options.assetsOrigin:options.serverOrigin;resourceOrigin!==""&&mcpResourceAuto.push(resourceOrigin);let connectDomains=mergeDomainLists(author?.connectDomains??[],readEnvDomainsForCategory("connectDomains"),mcpConnectAuto),resourceDomains=mergeDomainLists(author?.resourceDomains??[],readEnvDomainsForCategory("resourceDomains"),mcpResourceAuto),frameDomains=mergeDomainLists(author?.frameDomains??[],readEnvDomainsForCategory("frameDomains")),baseUriDomains=mergeDomainLists(author?.baseUriDomains??[],readEnvDomainsForCategory("baseUriDomains")),scriptDirectives=mergeDomainLists(author?.scriptDirectives??[],options.hmrWs===!0?["'unsafe-eval'"]:[]);return{...author,connectDomains,resourceDomains,frameDomains,baseUriDomains,...scriptDirectives.length>0?{scriptDirectives}:{}}}init_origin();function buildToolUiMeta(viewName,visibility,existingMetadata){if(viewName===void 0&&visibility===void 0&&existingMetadata===void 0)return;let meta2={...existingMetadata},existingUi=existingMetadata?.["ui"],existingUiIsObject=typeof existingUi=="object"&&existingUi!==null&&!Array.isArray(existingUi),ui=existingUiIsObject?{...existingUi}:{};if(viewName!==void 0){let resourceUri=viewResourceUri(viewName);ui.resourceUri=resourceUri,meta2[UI_RESOURCE_URI_META_KEY]=resourceUri}else delete ui.resourceUri,delete meta2[UI_RESOURCE_URI_META_KEY];return visibility!==void 0?ui.visibility=[visibility]:delete ui.visibility,(viewName!==void 0||visibility!==void 0||existingUiIsObject)&&(meta2["ui"]=ui),meta2}function buildToolResultUiMeta(viewName){let resourceUri=viewResourceUri(viewName);return{ui:{resourceUri},[UI_RESOURCE_URI_META_KEY]:resourceUri}}function resolveCspOptions(options){let request=options?.request,serverOrigin=options?.serverOrigin??(request!==void 0?resolveServerOrigin(request):""),assetsBase=options?.assetsBase??(request!==void 0?resolveAssetsBase(request):serverOrigin);return{serverOrigin,assetsOrigin:originFromAssetsBase(assetsBase),explicitAssetsBase:hasExplicitAssetsBase(),...options?.hmrWs===!0?{hmrWs:!0}:{}}}function buildResourceUiMeta(authorFacts,options){let ui={csp:buildMergedResourceCsp(authorFacts,resolveCspOptions(options))};return authorFacts?.permissions!==void 0&&(ui.permissions=authorFacts.permissions),authorFacts?.domain!==void 0&&(ui.domain=authorFacts.domain),authorFacts?.prefersBorder!==void 0&&(ui.prefersBorder=authorFacts.prefersBorder),{ui,...authorFacts?.displayModes!==void 0&&{"openai/ui":{availableDisplayModes:authorFacts.displayModes.filter(mode=>mode==="inline"||mode==="fullscreen"),...authorFacts.preferredDisplayMode!==void 0&&{preferredDisplayMode:authorFacts.preferredDisplayMode}}}}}function viewResourceConfig(_viewName,_entry,authorFacts,options){return{mimeType:UI_MIME_TYPE,...authorFacts?.description!==void 0&&{description:authorFacts.description},_meta:buildResourceUiMeta(authorFacts,options)}}var CLAUDE_RESOURCE_DOMAIN_SUFFIX=".claudemcpcontent.com",CLAUDE_RESOURCE_DOMAIN_HASH_LENGTH=32;function isClaudeClient(clientInfo){let name=clientInfo?.name;return typeof name=="string"&&name.toLowerCase().includes("claude")}async function computeClaudeResourceDomain(domain){if(domain.endsWith(CLAUDE_RESOURCE_DOMAIN_SUFFIX))return domain;let digest=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(domain));return`${Array.from(new Uint8Array(digest),byte=>byte.toString(16).padStart(2,"0")).join("").slice(0,CLAUDE_RESOURCE_DOMAIN_HASH_LENGTH)}${CLAUDE_RESOURCE_DOMAIN_SUFFIX}`}async function applyClaudeResourceDomain(meta2,clientInfo,userAgent){let effectiveClientInfo=typeof clientInfo?.name=="string"||typeof userAgent!="string"||userAgent.trim().length===0?clientInfo:{...clientInfo,name:userAgent.trim()};if(!isClaudeClient(effectiveClientInfo))return meta2;let ui=meta2["ui"];if(typeof ui!="object"||ui===null||Array.isArray(ui))return meta2;let domain=ui.domain;return typeof domain!="string"||domain.length===0?meta2:{...meta2,ui:{...ui,domain:await computeClaudeResourceDomain(domain)}}}function record4(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)?value:void 0}function productId(value,fallback){if(typeof value!="string")return fallback;let normalized=value.trim();return normalized.length>0&&normalized.length<=64&&![...normalized].some(character=>{let code=character.charCodeAt(0);return code<32||code===127})?normalized:fallback}function clientUsageFromBody(body){if(!isJSONRPCRequest(body))return;let params=record4(body.params);if(body.method==="initialize"){let info2=record4(params?.clientInfo),capabilities2=record4(params?.capabilities)??{};return clientUsage(info2,capabilities2,params?.protocolVersion,"legacy")}let meta2=record4(params?._meta),info=record4(meta2?.[CLIENT_INFO_META_KEY]),capabilities=record4(meta2?.[CLIENT_CAPABILITIES_META_KEY]);if(!(info===void 0||capabilities===void 0))return clientUsage(info,capabilities,meta2?.[PROTOCOL_VERSION_META_KEY],"modern")}function clientUsage(info,capabilities,protocolVersion,era){let typedCapabilities=capabilities;return{client_name:productId(info?.name,"other"),client_version:productId(info?.version,"unknown"),protocol_era:era,protocol_version:productId(protocolVersion,"unknown"),connection_mode:era==="modern"?"stateless_request":"legacy_session",sampling_capability:Object.hasOwn(capabilities,"sampling"),elicitation_capability:Object.hasOwn(capabilities,"elicitation"),roots_capability:Object.hasOwn(capabilities,"roots"),extensions_capability:Object.hasOwn(capabilities,"extensions"),views_capability:supportsViews(typedCapabilities),capability_count:Object.keys(capabilities).length}}function registerFetchMiddleware(app,middleware){app.use("*",async(context,next)=>{let response=await middleware(context.req.raw,async()=>(await next(),context.res));return context.res=response,response})}var MCPServer=class _MCPServer{#config;#requestLogPrefix;#branding;#tools=new Map;#resources=new Map;#resourceTemplates=new Map;#prompts=new Map;#views=new Map;#settings;#skills;#skillsPrimed=!1;#skillsDiscovery;#viewBindings=new Map;#viewsPrimed=!1;#embeddedViewAssets;#viewsDevMode=!1;#viewsProjectRoot=process.cwd();#fetchHandler;#httpApp;#handler;#eventBus;#httpServer;#oauthResource;#oauthResourceResolved=!1;#oauthResourceConfigurationAbsent=!1;#instructionsOverride;#oauthProviderSetupRan=!1;#oauthProviderSetupFailure;#oauthProviderRoutes=[];#hostValidated=!1;#mcpMiddlewares=[];#mcpEventListeners=[];#usageScope;#openApiTools=new Set;#proxiedTools=new Set;#proxiedResources=new Set;#proxiedPrompts=new Set;#httpMiddlewareCount=0;#proxyServersConfigured=0;#proxyServersConnected=0;#proxyToolsDiscovered=0;#proxyResourcesDiscovered=0;#proxyPromptsDiscovered=0;#proxyOwners=[];#proxyOperations=new Set;#closed=!1;app;get;post;put;patch;delete;all;fetch;static fromOpenAPI(options){let server=new _MCPServer({name:options.name??options.spec.info.title,version:options.version??options.spec.info.version??"1.0.0"});registerOpenAPITools(server,options);for(let name of server.#tools.keys())server.#openApiTools.add(name);return server}constructor(config2){if(assertServerConfig(config2),this.#config=config2,this.#branding=normalizeServerBranding(config2),this.app=new Hono3,this.app.use("*",async(context,next)=>{getRequestBag(context.req.raw).honoContext=context,await next()}),this.get=this.app.get.bind(this.app),this.post=this.app.post.bind(this.app),this.put=this.app.put.bind(this.app),this.patch=this.app.patch.bind(this.app),this.delete=this.app.delete.bind(this.app),this.all=this.app.all.bind(this.app),this.fetch=async(request,env2,executionCtx)=>(await this.#ensureSkillsPrimed(),this.#ensureMounted("handler"),this.#httpApp.fetch(request,env2,executionCtx)),config2.oauth!==void 0){let mcpUrl=typeof process>"u"?void 0:process.env.MCP_URL,resource2=resolveConfiguredOAuthResource({provider:config2.oauth,basePath:this.#basePath(),...mcpUrl!==void 0&&{mcpUrl}});this.#oauthResource=resource2,this.#oauthResourceResolved=resource2!==void 0,this.#oauthResourceConfigurationAbsent=resource2===void 0}}get basePath(){return this.#basePath()}get host(){return this.#config.host}get port(){return this.#config.port}get branding(){return this.#branding}getHandler(){return this.fetch}tool(definition,callback){if(this.#assertNotStarted("tool",definition.name),this.#settings!==void 0&&[this.#settings.capability.readTool,this.#settings.capability.updateTool].includes(definition.name))throw new Error(`Tool "${definition.name}" is reserved for settings`);let schemes=this.#resolveSecuritySchemes(definition);return validateEntrypointInput(definition),this.#validateToolViewBinding(definition),this.#openApiTools.delete(definition.name),this.#proxiedTools.delete(definition.name),this.#tools.set(definition.name,{definition,callback,schemes}),Object.freeze({name:definition.name})}settings(options){if(this.#assertNotStarted("settings",options.readTool??"settings.read"),this.#settings!==void 0)throw new Error("Settings are already registered on this server");let prepared=prepareSettings(options);for(let name of[prepared.capability.readTool,prepared.capability.updateTool])if(this.#tools.has(name))throw new Error(`Settings tool "${name}" is already registered`);let read=options.read,update=options.update;this.tool(prepared.readDefinition,async(_args,ctx)=>({content:[],structuredContent:{schema:prepared.schema,...prepared.layout!==void 0&&{layout:prepared.layout},values:await read(ctx)}})),this.tool(prepared.updateDefinition,async({set},ctx)=>({content:[],structuredContent:{values:await update(set,ctx)}})),this.#settings=prepared}mentions(options){this.#assertNotStarted("mentions",options.name);let definition=prepareMentions(options);if(this.#tools.has(options.name))throw new Error(`Mention tool "${options.name}" is already registered`);let search=options.search,ref=this.tool(definition,async(params,ctx)=>({content:[],structuredContent:await search(params,ctx)}));return this.#tools.get(options.name).mentions=!0,ref}[registerViews](views,options){if(this.#viewsPrimed)throw new Error("Cannot prime views: the views registry is already primed on this server instance.");this.#assertNotStarted("views","manifest");for(let[name,entry]of Object.entries(views))try{normalizeViewConfig(entry.viewConfig)}catch(error3){throw new Error(`View "${name}" has an invalid viewConfig: ${error3 instanceof Error?error3.message:String(error3)}`,{cause:error3})}this.#viewsDevMode=options?.dev===!0,this.#embeddedViewAssets=options?.assets,options?.projectRoot!==void 0&&(this.#viewsProjectRoot=options.projectRoot);for(let[name,entry]of Object.entries(views))this.#views.set(name,entry);this.#viewsPrimed=!0}__primeViews(views,options){this[registerViews](views,options)}[registerSkills](snapshot){this.#assertNotStarted("skills","snapshot"),this.#skills=snapshot,this.#skillsPrimed=!0}__primeSkills(snapshot){this[registerSkills](snapshot)}__skillsConfig(){return this.#config.skills}async#discoverSkills(projectRoot,conventionalDirectory){let{discoverConfiguredSkills}=await import("#mcp-use-skills-loader"),snapshot=discoverConfiguredSkills(this.#config.skills,projectRoot,conventionalDirectory);return this[registerSkills](snapshot),snapshot}resource(definition,callback){this.#assertNotStarted("resource",definition.name);let previous=this.#resources.get(definition.name);return previous!==void 0&&this.#proxiedResources.delete(previous.definition.uri),this.#resources.set(definition.name,{definition,callback}),this}resourceTemplate(definition,callback){this.#assertNotStarted("resourceTemplate",definition.name);let complete=definition.complete===void 0?void 0:normalizeCompletions(definition.complete);return this.#resourceTemplates.set(definition.name,{definition,...complete!==void 0&&{complete},callback}),this}prompt(definition,callback){return this.#assertNotStarted("prompt",definition.name),this.#proxiedPrompts.delete(definition.name),this.#prompts.set(definition.name,{definition,callback}),this}async proxy(input){this.#assertOpen("proxy()");let operation=(async()=>{let{isProxyConnection:isProxyConnection2,mountProxyConnection:mountProxyConnection2,mountProxyServers:mountProxyServers2}=await Promise.resolve().then(()=>(init_mcp_proxy(),mcp_proxy_exports));if(isProxyConnection2(input)){this.#proxyServersConfigured+=1,await mountProxyConnection2(this.#proxyHost(),input);return}this.#proxyServersConfigured+=Object.keys(input).length,await mountProxyServers2(this.#proxyHost(),input)})();this.#proxyOperations.add(operation);try{await operation}finally{this.#proxyOperations.delete(operation)}}use(patternOrHandler,...handlers){if(typeof patternOrHandler=="string"&&patternOrHandler.startsWith("mcp:")){this.#assertNotStarted("middleware",patternOrHandler);let handler=handlers[0];return this.#mcpMiddlewares.push(createMcpMiddlewareEntry(patternOrHandler,handler)),this}return this.app.use.call(this.app,patternOrHandler,...handlers),this.#httpMiddlewareCount+=typeof patternOrHandler=="function"?1:handlers.length,this}on(pattern,handler){return this.#assertNotStarted("event listener",pattern),this.#mcpEventListeners.push(createMcpEventListenerEntry(pattern,handler)),this}__setEventBus(bus){this.#assertNotStarted("event bus","shared"),this.#eventBus=bus}__setRequestLogPrefix(prefix){this.#assertNotStarted("request log prefix","development"),this.#requestLogPrefix=prefix}__mount(){if(!this.#skillsPrimed)throw new Error("Cannot mount before skills discovery. CLI tooling must call __primeSkills first.");this.#ensureMounted("handler")}async notifyToolsChanged(){await this.#ensureSkillsPrimed(),await this.#ensureMounted("handler").handler.notify.toolsChanged()}async notifyPromptsChanged(){await this.#ensureSkillsPrimed(),await this.#ensureMounted("handler").handler.notify.promptsChanged()}async notifyResourcesChanged(){await this.#ensureSkillsPrimed(),await this.#ensureMounted("handler").handler.notify.resourcesChanged()}async notifyResourceUpdated(uri){await this.#ensureSkillsPrimed(),await this.#ensureMounted("handler").handler.notify.resourceUpdated(uri)}async listen(port=void 0,options={}){this.#assertOpen("listen()"),await this.#ensureSkillsPrimed();let host=resolveListenHost(options.host,this.#config.host),requestedPort=resolveListenPort(port,this.#config.port);return this.#assertListenOAuthConfiguration(host),new Promise((resolve,reject)=>{let resolveFetch,rejectFetch,fetchReady=new Promise((resolveFetchPromise,rejectFetchPromise)=>{resolveFetch=resolveFetchPromise,rejectFetch=rejectFetchPromise});fetchReady.catch(()=>{});let settled=!1,rejectAndClose=error3=>{settled||(settled=!0,reject(error3)),rejectFetch?.(error3),new Promise(closeResolve=>server.close(()=>closeResolve())).catch(()=>{}).finally(()=>{this.#httpServer===server&&(this.#httpServer=void 0)})},nodeHandler=toNodeHandler({fetch:async request=>(await fetchReady)(request)}),server=createNodeHttpServer((req,res)=>{nodeHandler(req,res)});server.once("error",rejectAndClose),server.listen(requestedPort,host,()=>{try{let address=server.address(),boundPort=typeof address=="object"&&address!==null?address.port:requestedPort,{fetch:fetch2}=this.#ensureMounted("listen",boundPort,host);resolveFetch?.(fetch2),settled||(settled=!0,resolve({port:boundPort,url:`http://localhost:${boundPort}${this.#basePath()}`}))}catch(error3){rejectAndClose(error3)}}),this.#httpServer=server})}async close(){this.#closed=!0,await Promise.allSettled([...this.#proxyOperations]);let errors2=[],proxyOwners=this.#proxyOwners.splice(0),ownerResults=await Promise.allSettled(proxyOwners.map(owner=>owner.close()));for(let result of ownerResults)result.status==="rejected"&&errors2.push(result.reason);try{await this.#handler?.close()}catch(error3){errors2.push(error3)}let httpServer=this.#httpServer;if(httpServer!==void 0)try{await new Promise((resolve,reject)=>{httpServer.close(err=>err?reject(err):resolve())}),this.#httpServer=void 0}catch(error3){errors2.push(error3)}if(errors2.length>0)throw new AggregateError(errors2,"Failed to close MCP server cleanly")}#assertOpen(operation){if(this.#closed)throw operation!==void 0?new Error(`Cannot call ${operation} after the server has closed.`):new Error("Cannot use the server after it has closed.")}#basePath(){return this.#config.basePath??"/mcp"}#resolveOAuthResource(mode,listenPort,listenHost){if(this.#config.oauth===void 0)return;if(this.#oauthResourceResolved)return this.#oauthResource;let host=listenHost??this.#config.host??"127.0.0.1",localListen=mode==="listen"&&listenPort!==void 0&&["127.0.0.1","localhost","::1"].includes(host);if(this.#oauthResourceConfigurationAbsent&&localListen)return this.#oauthResource=resolveLocalOAuthResource(`http://localhost:${listenPort}`,this.#basePath()),this.#oauthResourceResolved=!0,this.#oauthResource;throw new Error("OAuth requires an explicit resource or MCP_URL when using server.fetch or listening on a non-local host")}#assertListenOAuthConfiguration(host){if(this.#config.oauth!==void 0&&!["127.0.0.1","localhost","::1"].includes(host)&&!this.#oauthResourceResolved)throw new Error("OAuth listen() on a public or wildcard host requires an explicit provider resource or valid MCP_URL.")}#assertNotStarted(kind,name){if(this.#handler!==void 0)throw new Error(`Cannot register ${kind} "${name}" after the server has started: registrations are replayed per request from the registry, so register everything before listen()/server.fetch.`)}#trackConfigured(){recordUsage("server","configured",{tools_total:this.#tools.size,tools_local:this.#tools.size-this.#openApiTools.size-this.#proxiedTools.size,tools_openapi:this.#openApiTools.size,tools_proxied:this.#proxiedTools.size,resources:this.#resources.size,resource_templates:this.#resourceTemplates.size,prompts:this.#prompts.size,views:this.#views.size,proxy_servers_configured:this.#proxyServersConfigured,proxy_servers_connected:this.#proxyServersConnected,proxy_tools_discovered:this.#proxyToolsDiscovered,proxy_resources_discovered:this.#proxyResourcesDiscovered,proxy_prompts_discovered:this.#proxyPromptsDiscovered,proxy_tools_mounted:this.#proxiedTools.size,proxy_resources_mounted:this.#proxiedResources.size,proxy_prompts_mounted:this.#proxiedPrompts.size,http_middleware:this.#httpMiddlewareCount,mcp_middleware:this.#mcpMiddlewares.length,observers_before:this.#mcpEventListeners.filter(({phase})=>phase==="before").length,observers_complete:this.#mcpEventListeners.filter(({phase})=>phase==="complete").length,oauth_configured:this.#config.oauth!==void 0,cors_configured:this.#config.cors!==void 0,request_state_configured:this.#config.requestState!==void 0,legacy_policy:this.#config.legacy??"stateless"},{onceKey:`${this.#usageScopeId()}:server`,serverRoot:this.#viewsProjectRoot})}#trackClient(body){let client=clientUsageFromBody(body);client!==void 0&&recordUsage("client","observed",{...client},{onceKey:`${this.#usageScopeId()}:client:${JSON.stringify(client)}`,serverRoot:this.#viewsProjectRoot})}#usageScopeId(){return this.#usageScope??=crypto.randomUUID(),this.#usageScope}#runOAuthProviderSetup(resource2,basePath,mode,listenHost){let setup=this.#config.oauth?.setup;if(setup===void 0||this.#oauthProviderSetupRan)return;if(this.#oauthProviderSetupFailure!==void 0)throw this.#oauthProviderSetupFailure.error;let active=!0,assertActive=method=>{if(!active)throw new Error(`[mcp-use] OAuthProviderHost.${method}() called after the provider's setup hook returned; call it from setup().`)},host={resourceUrl:resource2,basePath,mixedAuth:this.#config.mixedAuth===!0,mode,listenHost:mode==="listen"?listenHost:void 0,route:(method,path,handler)=>{if(assertActive("route"),method!=="GET"&&method!=="POST"&&method!=="OPTIONS")throw new TypeError("[mcp-use] OAuthProviderHost.route() method must be GET, POST, or OPTIONS");if(typeof handler!="function")throw new TypeError("[mcp-use] OAuthProviderHost.route() handler must be a function");let prefix=basePath==="/"?"/":`${basePath}/`;if(typeof path!="string"||!path.startsWith(prefix)||path.length===prefix.length||/[?#*:]/.test(path)||path.split("/").some(segment=>segment==="."||segment===".."))throw new TypeError(`[mcp-use] OAuthProviderHost.route() path must be a literal pathname under ${prefix}`);if(this.#oauthProviderRoutes.some(route=>route.method===method&&route.path===path))throw new Error(`[mcp-use] OAuth provider route ${method} ${path} is already registered`);this.#oauthProviderRoutes.push({method,path,handler})},use:(pattern,handler)=>{assertActive("use"),this.use(pattern,handler)},tool:(definition,callback)=>{if(assertActive("tool"),this.#tools.has(definition.name))throw new Error(`[mcp-use] Tool "${definition.name}" is reserved by the OAuth provider; rename the application tool.`);return this.tool(definition,callback)},resource:(definition,callback)=>{if(assertActive("resource"),this.#resources.has(definition.name))throw new Error(`[mcp-use] Resource "${definition.name}" is reserved by the OAuth provider; rename the application resource.`);this.resource(definition,callback)},resourceTemplate:(definition,callback)=>{if(assertActive("resourceTemplate"),this.#resourceTemplates.has(definition.name))throw new Error(`[mcp-use] Resource template "${definition.name}" is reserved by the OAuth provider; rename the application resource template.`);this.resourceTemplate(definition,callback)},prompt:(definition,callback)=>{if(assertActive("prompt"),this.#prompts.has(definition.name))throw new Error(`[mcp-use] Prompt "${definition.name}" is reserved by the OAuth provider; rename the application prompt.`);this.prompt(definition,callback)},listTools:()=>(assertActive("listTools"),[...this.#tools.values()].map(({definition})=>definition)),instructions:transform2=>{assertActive("instructions"),this.#instructionsOverride=transform2(this.#instructionsOverride??this.#config.instructions)}};try{let returned=setup(host);if(typeof returned?.then=="function")throw Promise.resolve(returned).catch(()=>{}),new TypeError("[mcp-use] The OAuth provider's setup hook must be synchronous but returned a promise. Do async work before creating the provider.")}catch(error3){throw this.#oauthProviderSetupFailure={error:error3},error3}finally{active=!1}this.#oauthProviderSetupRan=!0}#proxyHost(){return{isStarted:()=>this.#handler!==void 0,hasTool:name=>this.#tools.has(name),hasResource:name=>this.#resources.has(name),hasPrompt:name=>this.#prompts.has(name),registerTool:(definition,callback)=>{this.#assertNotStarted("tool",definition.name),this.#proxiedTools.add(definition.name),this.#tools.set(definition.name,{definition,callback,schemes:this.#resolveSecuritySchemes(definition)})},registerResource:(definition,callback)=>{this.#assertNotStarted("resource",definition.name),this.#proxiedResources.add(definition.uri),this.#resources.set(definition.name,{definition,callback})},registerPrompt:(definition,callback)=>{this.#assertNotStarted("prompt",definition.name),this.#proxiedPrompts.add(definition.name),this.#prompts.set(definition.name,{definition,callback})},trackOwner:owner=>{this.#proxyOwners.push(owner)},trackNamespace:({tools,resources,prompts})=>{this.#proxyServersConnected+=1,this.#proxyToolsDiscovered+=tools,this.#proxyResourcesDiscovered+=resources,this.#proxyPromptsDiscovered+=prompts}}}async#ensureSkillsPrimed(){this.#skillsPrimed||(this.#skillsDiscovery??=this.#discoverSkills(typeof process>"u"?".":process.cwd(),"skills").then(()=>{}),await this.#skillsDiscovery)}#validationPolicy(mode,listenHost){let{allowedHosts,allowedOrigins}=this.#config,host=listenHost??this.#config.host??"127.0.0.1",localhostBind=["127.0.0.1","localhost","::1"].includes(host),hosts=allowedHosts!==void 0?[...new Set([...localhostAllowedHostnames(),...allowedHosts])]:mode==="listen"&&localhostBind?localhostAllowedHostnames():void 0,origins=allowedOrigins!==void 0?[...new Set([...localhostAllowedOrigins(),...allowedOrigins])]:void 0;return{hosts,origins}}#ensureMounted(mode,listenPort,listenHost){if(this.#assertOpen(),this.#fetchHandler===void 0||this.#handler===void 0){let{hosts,origins}=this.#validationPolicy(mode,listenHost),basePath=this.#basePath(),nestedBasePath=basePath==="/"?"":basePath,httpApp=new Hono3,middlewares=[requestLogger({...this.#config.logging,mcpPath:basePath,prefix:this.#requestLogPrefix}),jsonBodyMiddleware()],corsConfig=this.#config.cors;corsConfig!==void 0&&middlewares.unshift(corsFetchMiddleware(corsConfig));let deferViewCors=isGlobalCorsEnabled(corsConfig);hosts!==void 0&&middlewares.unshift(hostValidationMiddleware(hosts)),origins!==void 0&&middlewares.push(originValidationMiddleware(origins,!0,request=>{if(this.#oauthProviderRoutes.length===0)return!1;let pathname=new URL(request.url).pathname;return this.#oauthProviderRoutes.some(route=>route.method===request.method&&route.path===pathname)})),hosts===void 0&&mode==="listen"&&console.warn(`[mcp-use] listen() is serving on ${listenHost} without Host validation. Behind a platform edge that only routes your own domains this is expected; if this process is reachable directly, set allowedHosts to restrict it.`);let resource2=this.#resolveOAuthResource(mode,listenPort,listenHost);if(resource2!==void 0){let provider=this.#config.oauth;middlewares.push(oauthMetadata(provider,resource2))}for(let middleware of middlewares)registerFetchMiddleware(httpApp,middleware);if(resource2!==void 0){this.#runOAuthProviderSetup(resource2,basePath,mode,listenHost);for(let route of this.#oauthProviderRoutes)httpApp.on(route.method,route.path,context=>route.handler(context))}for(let group of this.#settings?.layout??[])for(let item of group.items)if(item.kind==="tool"&&!this.#tools.has(item.tool))throw new Error(`Settings action tool "${item.tool}" is not registered on this server`);this.#validateViewBindingsAtMount();let{handler,fetch:mcpFetch}=createMcpMount(ctx=>this.#buildSdkServer(ctx),{path:basePath,...(this.#config.legacy!==void 0||this.#eventBus!==void 0)&&{handler:{...this.#config.legacy!==void 0&&{legacy:this.#config.legacy},...this.#eventBus!==void 0&&{bus:this.#eventBus}}},...resource2!==void 0&&{authInfo:request=>authInfoFromRequest(request)}});if(resource2!==void 0){let provider=this.#config.oauth,providerOptions=getOAuthProviderOptions(provider),mixedAuth=this.#config.mixedAuth===!0,gateOptions={verifier:wrapOAuthTokenVerifier(provider,resource2),resourceMetadataUrl:getOAuthProtectedResourceMetadataUrl(resource2),baselineScopes:providerOptions.requiredScopes??[],mixedAuth,toolSchemes:name=>this.#tools.get(name)?.schemes,openResourceUris:[...this.#viewBindings.keys()].map(viewResourceUri)},gate;httpApp.use("*",async(context,next)=>{if(new URL(context.req.url).pathname!==basePath){await next();return}if((this.#config.publicLandingPage===!0||mixedAuth)&&isHtmlNavigationRequest(context.req.raw)){await next();return}gate??=Promise.resolve().then(()=>(init_gate(),gate_exports)).then(({createOAuthGate:createOAuthGate2})=>createOAuthGate2(gateOptions));let response=await(await gate)(context.req.raw,async()=>(await next(),context.res));return context.res=response,response})}let mcpRouteHandler=request=>{let body=getRequestBag(request).parsedBody;return isJSONRPCRequest(body)&&(this.#trackConfigured(),this.#trackClient(body)),mcpFetch(request)},endpointHandler=async request=>isHtmlNavigationRequest(request)?(async()=>{let{createLandingPageResponse:createLandingPageResponse2}=await Promise.resolve().then(()=>(init_landing_handler(),landing_handler_exports));return createLandingPageResponse2(request,basePath,this.#config,this.#branding,this.#tools.values(),this.#prompts.values(),this.#resources.values())})():mcpRouteHandler(request),brandingDevMode=this.#viewsPrimed?this.#viewsDevMode:process.env.NODE_ENV!=="production",faviconHandler=createFaviconHandler(this.#branding,{dev:brandingDevMode,projectRoot:this.#viewsProjectRoot,deferCors:deferViewCors});faviconHandler!==void 0&&this.app.all("/favicon.ico",context=>faviconHandler(context.req.raw));let viewHandler=createViewPublicHandler(basePath,this.#views,{dev:this.#viewsPrimed?this.#viewsDevMode:brandingDevMode,projectRoot:this.#viewsProjectRoot,enabled:hasLocalBrandingAsset(this.#branding)||[...this.#tools.values()].some(entry=>entry.definition.icons!==void 0&&hasLocalBrandingAsset({icons:entry.definition.icons})),deferCors:deferViewCors,...this.#embeddedViewAssets!==void 0&&{assets:this.#embeddedViewAssets}});if(viewHandler!==void 0&&this.app.on(["GET","HEAD"],`${nestedBasePath}/_mcp-use/public/*`,context=>viewHandler(context.req.raw)),!this.#viewsDevMode){let viewAssetsHandler=createViewAssetsHandler(basePath,this.#views,{projectRoot:this.#viewsProjectRoot,deferCors:deferViewCors,...this.#embeddedViewAssets!==void 0&&{assets:this.#embeddedViewAssets}});viewAssetsHandler!==void 0&&this.app.on(["GET","HEAD"],`${nestedBasePath}/_mcp-use/views/*`,context=>viewAssetsHandler(context.req.raw))}this.app.all(basePath,context=>endpointHandler(context.req.raw)),httpApp.route("/",this.app),this.#httpApp=httpApp,this.#fetchHandler=async request=>httpApp.fetch(request),this.#handler=handler,this.#hostValidated=hosts!==void 0}else if(mode==="listen"&&!this.#hostValidated&&this.#validationPolicy("listen",listenHost).hosts!==void 0)throw new Error("Cannot listen() on a localhost bind after server.fetch mounted the app without Host validation (server.fetch expects a platform edge in front). Call listen() first, or set allowedHosts.");return{fetch:this.#fetchHandler,handler:this.#handler}}#validateToolViewBinding(definition){let view=definition.view;if(view===void 0)return;if(definition.outputSchema===void 0)throw new Error(`Tool "${definition.name}" declares view "${view.name}" but has no outputSchema. View-bound tools require an outputSchema \u2014 the view reads structuredContent typed from it. Use outputSchema: z.object({}) for a view that takes no structured output.`);let existing=this.#viewBindings.get(view.name);if(existing!==void 0)throw new Error(`View "${view.name}" is already bound to tool "${existing.toolName}"; tool "${definition.name}" cannot bind the same view. Each view may be bound to one tool.`);this.#viewBindings.set(view.name,{toolName:definition.name,config:view})}#validateViewBindingsAtMount(){if(this.#viewBindings.size>0&&!this.#viewsPrimed){let first=[...this.#tools.values()].find(entry=>entry.definition.view!==void 0),viewName=first?.definition.view?.name??"unknown";throw new Error(`Tool "${first?.definition.name??"unknown"}" is bound to view "${viewName}" but no views were primed. Run \`mcp-use build\` and deploy the built entry, or in dev let the CLI prime views automatically.`)}for(let entry of this.#tools.values()){let viewName=entry.definition.view?.name;if(viewName!==void 0&&!this.#views.has(viewName))throw new Error(`Tool "${entry.definition.name}" is bound to view "${viewName}" which is not in the primed views registry. Run \`mcp-use build\` and deploy the built entry, or in dev let the CLI prime views automatically.`)}for(let viewName of this.#views.keys())this.#viewBindings.has(viewName)||console.warn(`[mcp-use] View "${viewName}" is registered but no tool binds it.`)}#buildSdkServer(ctx){let{name,version:version2,title,description}=this.#config,instructions=this.#instructionsOverride??this.#config.instructions,authInfo=ctx.authInfo,server=new McpServer({name,version:version2,...title!==void 0&&{title},...description!==void 0&&{description},...this.#branding.websiteUrl!==void 0&&{websiteUrl:this.#branding.websiteUrl},...this.#branding.icons!==void 0&&{icons:resolveImplementationIcons(this.#branding.icons,ctx.requestInfo,this.#basePath())}},{capabilities:{logging:{},tools:{listChanged:!0},prompts:{listChanged:!0},resources:{listChanged:!0,subscribe:!0},...(this.#skills!==void 0||this.#settings!==void 0)&&{extensions:{...this.#skills!==void 0&&{[SKILLS_EXTENSION_ID]:{directoryRead:!0}},...this.#settings!==void 0&&{"openai/settings":this.#settings.capability}}},...this.#settings!==void 0&&{experimental:{"openai/settings":this.#settings.capability}}},...instructions!==void 0&&{instructions},...authInfo!==void 0&&{authInfo},...this.#config.requestState!==void 0&&{requestState:this.#config.requestState}}),request=ctx.requestInfo,viewMetaOptions=request!==void 0?{request,hmrWs:this.#viewsDevMode}:{hmrWs:this.#viewsDevMode},basePath=this.#basePath();for(let entry of this.#tools.values())this.#registerTool(server,entry,request);for(let entry of this.#resources.values())this.#registerResource(server,entry);for(let entry of this.#resourceTemplates.values())this.#registerResourceTemplate(server,entry);for(let entry of this.#prompts.values())this.#registerPrompt(server,entry);for(let[viewName,viewEntry]of this.#views.entries())this.#registerViewResource(server,viewName,viewEntry,viewMetaOptions,basePath);return this.#skills!==void 0&®isterSkillsRuntime(server,this.#skills),this.#wrapListHandlers(server),server}#createMiddlewareContext(method,params,ctx){let requestContext=toRequestContext(ctx);return Object.assign(requestContext,{method,params,...ctx.sessionId!==void 0&&{session:{sessionId:ctx.sessionId}},...ctx.http?.authInfo!==void 0&&{auth:ctx.http.authInfo},state:new Map})}#runMcpHook(method,ctx,innerFn){let runOperation=method==="tools/call"&&this.#mcpMiddlewares.length===0&&this.#mcpEventListeners.length===0?innerFn:()=>runMcpOperation(this.#mcpMiddlewares,this.#mcpEventListeners,method,ctx,innerFn);if(isUsageDisabled())return runOperation();let startedAt=performance.now(),matchedMiddleware=this.#mcpMiddlewares.filter(entry=>matchesPattern(entry.pattern,method)).length,matchedObservers=phase=>this.#mcpEventListeners.filter(entry=>entry.phase===phase&&matchesPattern(entry.pattern,method)).length,request=ctx.request?.raw,client=request===void 0?void 0:clientUsageFromBody(getRequestBag(request).parsedBody),capture2=(outcome,completedPhase)=>{recordUsage("operation","completed",{method,outcome,duration_ms:Math.max(0,Math.round(performance.now()-startedAt)),primitive_origin:this.#primitiveOrigin(method,ctx.params),matched_middleware:matchedMiddleware,observers_before:matchedObservers("before"),observers_complete:completedPhase?matchedObservers("complete"):0,...client?.protocol_era==="modern"?client:{client_name:"unknown",protocol_era:"legacy"}},{sampleRate:outcome==="success"?.1:1,serverRoot:this.#viewsProjectRoot})};return runOperation().then(result=>{let outcome=isInputRequiredResult(result)?"input_required":method==="tools/call"&&typeof result=="object"&&result!==null&&"isError"in result&&result.isError===!0?"error":"success";return capture2(outcome,!0),result},error3=>{throw capture2("error",!1),error3})}#primitiveOrigin(method,params){if(method==="tools/call"){let name=String(params.name);return this.#proxiedTools.has(name)?"proxied":this.#openApiTools.has(name)?"openapi":"local"}return method==="resources/read"?this.#proxiedResources.has(String(params.uri))?"proxied":"local":method==="prompts/get"?this.#proxiedPrompts.has(String(params.name))?"proxied":"local":"mixed"}#wrapListHandlers(server){let handlers=server.server._requestHandlers;if(handlers===void 0)return;let wrapListMethod=(method,resultKey,transform2)=>{let original=handlers.get(method);if(original===void 0||original.__mcpListWrapped)return;let wrapped=async(request,extra)=>{let serverContext=extra,params=request.params??{},mwCtx=this.#createMiddlewareContext(method,params,serverContext),originalEnvelope,innerFn=async()=>{let downstreamRequest=withMcpMiddlewareParams(request,mwCtx.params),result=await original(downstreamRequest,extra);if(typeof result!="object"||result===null)throw new TypeError(`[mcp-use] ${method} handler returned a non-object result`);originalEnvelope=result;let items=originalEnvelope[resultKey];if(!Array.isArray(items))throw new TypeError(`[mcp-use] ${method} handler result is missing a ${resultKey} array`);return items},filtered=await this.#runMcpHook(method,mwCtx,innerFn);if(!Array.isArray(filtered))throw new TypeError(`[mcp-use] ${method} middleware must return a ${resultKey} array`);let emitted=transform2?.(filtered)??filtered;return{...originalEnvelope,[resultKey]:emitted}};wrapped.__mcpListWrapped=!0,handlers.set(method,wrapped)};wrapListMethod("tools/list","tools",tools=>tools.map(tool=>{let entry=this.#tools.get(tool.name),schemes=entry!==void 0&&this.#generatesSecuritySchemes(entry)?entry.schemes:void 0;return schemes===void 0?tool:{...tool,securitySchemes:schemes}})),wrapListMethod("resources/list","resources"),wrapListMethod("prompts/list","prompts")}#registerTool(server,entry,request){let{definition,callback,schemes}=entry,view=definition.view,serializedUiMeta=buildToolUiMeta(view?.name,definition.visibility,buildEntrypointMeta(definition)),uiMeta=entry.mentions?finalizeMentionsMeta(definition,serializedUiMeta):serializedUiMeta,toolMeta=this.#generatesSecuritySchemes(entry)?{...uiMeta,[SECURITY_SCHEMES_META_KEY]:schemes}:uiMeta,config2={...definition.title!==void 0&&{title:definition.title},...definition.icons!==void 0&&{icons:resolveImplementationIcons(definition.icons,request,this.#basePath())},...definition.description!==void 0&&{description:definition.description},...definition.annotations!==void 0&&{annotations:definition.annotations},...definition.outputSchema!==void 0&&{outputSchema:definition.outputSchema},...toolMeta!==void 0&&{_meta:toolMeta}},wireResultMeta=view!==void 0?buildToolResultUiMeta(view.name):void 0,inputSchema2=resolveToolInputSchema(definition),invokeTool=async(args,ctx)=>{let mwCtx=this.#createMiddlewareContext("tools/call",{name:definition.name,arguments:args,...ctx.mcpReq._meta!==void 0&&{_meta:ctx.mcpReq._meta}},ctx),innerFn=async()=>{let effectiveArgs=mwCtx.params.arguments??{},result=await callback(effectiveArgs,this.#toToolRequestContext(ctx,schemes));return isInputRequiredResult(result)||wireResultMeta===void 0||result.isError===!0?result:{...result,_meta:{...result._meta,...wireResultMeta}}};return await this.#runMcpHook("tools/call",mwCtx,innerFn)};inputSchema2!==void 0?server.registerTool(definition.name,{...config2,inputSchema:inputSchema2},async(args,ctx)=>invokeTool(args,ctx)):server.registerTool(definition.name,config2,async ctx=>invokeTool({},ctx))}#registerViewResource(server,viewName,entry,metaOptions,basePath){let uri=viewResourceUri(viewName),frontendConfig=normalizeViewConfig(entry.viewConfig),authorFacts={...this.#viewResourceFacts(this.#viewBindings.get(viewName)?.config),displayModes:frontendConfig.displayModes,...frontendConfig.preferredDisplayMode!==void 0&&{preferredDisplayMode:frontendConfig.preferredDisplayMode}},resourceConfig=viewResourceConfig(viewName,entry,authorFacts,metaOptions);server.registerResource(viewName,uri,resourceConfig,async(readUri,ctx)=>{let req=ctx.http?.req,readOptions=req!==void 0?{request:req,...metaOptions.hmrWs===!0?{hmrWs:!0}:{}}:metaOptions.hmrWs===!0?{hmrWs:!0}:{},assetsBase=req!==void 0?resolveAssetsBase(req):metaOptions.request!==void 0?resolveAssetsBase(metaOptions.request):"",html2=synthesizeViewDocument(entry,assetsBase,basePath,viewName),meta2=await applyClaudeResourceDomain(buildResourceUiMeta(authorFacts,readOptions),requestClientInfo(ctx),(req??metaOptions.request)?.headers.get("user-agent"));return{contents:[{uri:readUri.href,mimeType:resourceConfig.mimeType,text:html2,_meta:meta2}]}})}#registerResource(server,{definition,callback}){server.registerResource(definition.name,definition.uri,{...definition.title!==void 0&&{title:definition.title},...definition.description!==void 0&&{description:definition.description},...definition.mimeType!==void 0&&{mimeType:definition.mimeType},...definition.annotations!==void 0&&{annotations:definition.annotations},...definition._meta!==void 0&&{_meta:{...definition._meta}}},async(uri,ctx)=>{let mwCtx=this.#createMiddlewareContext("resources/read",{uri:uri.href,...ctx.mcpReq._meta!==void 0&&{_meta:ctx.mcpReq._meta}},ctx),innerFn=async()=>toResourceResult(await callback(uri,this.#toRequestContext(ctx)),uri.href);return await this.#runMcpHook("resources/read",mwCtx,innerFn)})}#registerResourceTemplate(server,{definition,callback,complete}){let template=new ResourceTemplate(definition.uriTemplate,{list:void 0,...complete!==void 0&&{complete}});server.registerResource(definition.name,template,{...definition.title!==void 0&&{title:definition.title},...definition.description!==void 0&&{description:definition.description},...definition.mimeType!==void 0&&{mimeType:definition.mimeType},...definition.annotations!==void 0&&{annotations:definition.annotations},...definition._meta!==void 0&&{_meta:{...definition._meta}}},async(uri,variables,ctx)=>{let mwCtx=this.#createMiddlewareContext("resources/read",{uri:uri.href,...ctx.mcpReq._meta!==void 0&&{_meta:ctx.mcpReq._meta}},ctx),innerFn=async()=>toResourceResult(await callback(uri,variables,this.#toRequestContext(ctx)),uri.href);return await this.#runMcpHook("resources/read",mwCtx,innerFn)})}#viewResourceFacts(viewConfig){if(viewConfig!==void 0)return{...viewConfig.description!==void 0&&{description:viewConfig.description},...viewConfig.csp!==void 0&&{csp:viewConfig.csp},...viewConfig.permissions!==void 0&&{permissions:viewConfig.permissions},...viewConfig.domain!==void 0&&{domain:viewConfig.domain},...viewConfig.prefersBorder!==void 0&&{prefersBorder:viewConfig.prefersBorder}}}#registerPrompt(server,{definition,callback}){let config2={...definition.title!==void 0&&{title:definition.title},...definition.description!==void 0&&{description:definition.description}},invokePrompt=async(args,ctx)=>{let mwCtx=this.#createMiddlewareContext("prompts/get",{name:definition.name,arguments:args,...ctx.mcpReq._meta!==void 0&&{_meta:ctx.mcpReq._meta}},ctx),innerFn=async()=>{let effectiveArgs=mwCtx.params.arguments??{};return toPromptResult(await callback(effectiveArgs,this.#toRequestContext(ctx)))};return await this.#runMcpHook("prompts/get",mwCtx,innerFn)};if(definition.schema!==void 0)server.registerPrompt(definition.name,{...config2,argsSchema:definition.schema},async(args,ctx)=>invokePrompt(args,ctx));else{let handler=async ctx=>invokePrompt({},ctx);server.registerPrompt(definition.name,config2,handler)}}#toRequestContext(ctx){return this.#config.oauth===void 0?toRequestContext(ctx):toAuthenticatedRequestContext(ctx)}#toToolRequestContext(ctx,schemes){return this.#config.oauth===void 0||!requiresSignIn(schemes)&&ctx.http?.authInfo===void 0?toRequestContext(ctx):toAuthenticatedRequestContext(ctx)}#securitySchemeOptions(){return{hasOAuth:this.#config.oauth!==void 0,mixedAuth:this.#config.mixedAuth===!0,baselineScopes:this.#config.oauth?.requiredScopes??[]}}#resolveSecuritySchemes(definition){let options=this.#securitySchemeOptions(),schemes=resolveSecuritySchemes(definition.name,definition.securitySchemes,options),warning=handWrittenSecuritySchemesWarning(definition.name,definition,options);return warning!==void 0&&console.warn(warning),schemes}#generatesSecuritySchemes(entry){let{definition}=entry;return definition.securitySchemes!==void 0?!0:this.#config.mixedAuth===!0&&definition._meta?.[SECURITY_SCHEMES_META_KEY]===void 0}};init_fetch_app();init_dist();function text(content){return{content:[{type:"text",text:content}],_meta:{mimeType:"text/plain"}}}function markdown(content){return{content:[{type:"text",text:content}],_meta:{mimeType:"text/markdown"}}}function html(content){return{content:[{type:"text",text:content}],_meta:{mimeType:"text/html"}}}function xml(content){return{content:[{type:"text",text:content}],_meta:{mimeType:"text/xml"}}}function css(content){return{content:[{type:"text",text:content}],_meta:{mimeType:"text/css"}}}function javascript(content){return{content:[{type:"text",text:content}],_meta:{mimeType:"text/javascript"}}}function image(data,mimeType="image/png"){return{content:[{type:"image",data,mimeType}],_meta:{mimeType,isImage:!0}}}function audio(data,mimeType="audio/wav"){return{content:[{type:"audio",data,mimeType}],_meta:{mimeType,isAudio:!0}}}function binary(base64Data,mimeType){return{content:[{type:"text",text:base64Data}],_meta:{mimeType,isBinary:!0}}}function resource(uri,mimeTypeOrContent,text2){if(typeof mimeTypeOrContent=="object"&&mimeTypeOrContent!==null&&"content"in mimeTypeOrContent){let contentResult=mimeTypeOrContent,extractedText,extractedMimeType;if(contentResult._meta&&typeof contentResult._meta=="object"){let meta2=contentResult._meta;typeof meta2.mimeType=="string"&&(extractedMimeType=meta2.mimeType)}let first=contentResult.content?.[0];return first?.type==="text"&&"text"in first&&(extractedText=first.text),{content:[{type:"resource",resource:{uri,...extractedMimeType!==void 0&&{mimeType:extractedMimeType},text:extractedText??""}}]}}let mimeType=mimeTypeOrContent;return{content:[{type:"resource",resource:{uri,...mimeType!==void 0&&mimeType!==""&&{mimeType},text:text2??""}}]}}function error2(message){return{isError:!0,content:[{type:"text",text:message}]}}function object4(data){return Array.isArray(data)?array3(data):{content:[{type:"text",text:JSON.stringify(data,null,2)}],structuredContent:data,_meta:{mimeType:"application/json"}}}function array3(data){return{content:[{type:"text",text:JSON.stringify(data,null,2)}],structuredContent:data}}function widget(config2){let props=config2.props??config2.data??{},{output,message,metadata}=config2,result={content:message?[{type:"text",text:message}]:Array.isArray(output?.content)&&output.content.length>0?output.content:[{type:"text",text:""}]};return metadata!==void 0&&Object.keys(metadata).length>0&&(result._meta=metadata),output?.structuredContent!==void 0?result.structuredContent=output.structuredContent:Object.keys(props).length>0&&(result.structuredContent=props),result}function mix(...results){let withStructured=results.filter(result=>result.structuredContent!==void 0),structuredContent=withStructured.length>0?withStructured.map(result=>result.structuredContent).reduce((acc,value)=>({...acc,...typeof value=="object"&&value!==null?value:{}}),{}):void 0,withMeta=results.filter(result=>result._meta!==void 0),_meta=withMeta.length>0?withMeta.map(result=>result._meta).reduce((acc,value)=>({...acc,...value!==void 0?value:{}}),{}):void 0;return{content:results.flatMap(result=>result.content),...structuredContent!==void 0&&Object.keys(structuredContent).length>0&&{structuredContent},..._meta!==void 0&&Object.keys(_meta).length>0&&{_meta}}}export{MCPServer,SKILLS_EXTENSION_ID,acceptedContent,array3 as array,audio,binary,completable2 as completable,composeFetch,composeMiddleware,createMcpEventListenerEntry,createMcpMiddlewareEntry,createMcpMount,createRequestStateCodec,css,error2 as error,getRequestBag,hostValidationMiddleware,html,image,inputRequired,inputResponse,isBuilding,isInputRequiredResult,javascript,jsonBodyMiddleware,markdown,matchesPath,matchesPathPrefix,matchesPattern,mix,object4 as object,originValidationMiddleware,pathnameOf,registerSkills,registerViews,requestLogger,resource,text,widget,xml};
|
|
807
|
+
</html>`}init_origin();init_fetch_app();var PUBLIC_BUILD_DIR=".mcp-use/build/views/public",PUBLIC_DEV_DIR="public",VIEW_ASSETS_BUILD_ROOT=".mcp-use/build/views",decodedAssets=new WeakMap;function serveEmbeddedAsset(assets,path,request,deferCors){let decoded;try{decoded=decodeURIComponent(path)}catch{return new Response("Not Found",{status:404})}if(decoded.includes("\\")||decoded.split("/").includes(".."))return new Response("Not Found",{status:404});let asset=Object.hasOwn(assets,decoded)?assets[decoded]:void 0;if(asset===void 0)return new Response("Not Found",{status:404});let body=null;return request.method!=="HEAD"&&(body=decodedAssets.get(asset)??null,body===null&&(body=Uint8Array.from(atob(asset.body),character=>character.charCodeAt(0)),decodedAssets.set(asset,body))),new Response(body,{headers:{"Content-Type":asset.contentType,"Cache-Control":"public, max-age=0, must-revalidate",...deferCors!==!0&&{"Access-Control-Allow-Origin":"*"}}})}function createViewAssetsHandler(basePath,views,options){if(views.size===0)return;let assetsPrefix=pathUnderBase(basePath,"_mcp-use/views"),projectRoot=options?.projectRoot??process.cwd();return async request=>{if(request.method!=="GET"&&request.method!=="HEAD")return new Response("Method Not Allowed",{status:405});if(!matchesPathPrefix(request,assetsPrefix))return new Response("Not Found",{status:404});let remainder=pathnameOf(request).slice(assetsPrefix.length+1),slash=remainder.indexOf("/");if(slash<=0||slash===remainder.length-1)return new Response("Not Found",{status:404});let viewName=remainder.slice(0,slash),subpath=remainder.slice(slash+1),entry=views.get(viewName);if(entry===void 0||entry.kind!=="external")return new Response("Not Found",{status:404});if(options?.assets!==void 0)return serveEmbeddedAsset(options.assets,remainder,request,options.deferCors);let[{join},{resolvePublicFilePath:resolvePublicFilePath2,servePublicFile:servePublicFile2}]=await Promise.all([import("path"),Promise.resolve().then(()=>(init_public_route(),public_route_exports))]),viewRoot=join(projectRoot,VIEW_ASSETS_BUILD_ROOT,viewName),diskPath=await resolvePublicFilePath2(viewRoot,subpath);return diskPath===null?new Response("Not Found",{status:404}):await servePublicFile2(diskPath,{...options?.deferCors===!0&&{deferCors:!0},...request.method==="HEAD"&&{head:!0}})}}function createViewPublicHandler(basePath,views,options){if(views.size===0&&options?.enabled!==!0)return;let publicPrefix=pathUnderBase(basePath,"_mcp-use/public"),subdir=options?.dev===!0?PUBLIC_DEV_DIR:PUBLIC_BUILD_DIR,projectRoot=options?.projectRoot??process.cwd();return async request=>{if(request.method!=="GET"&&request.method!=="HEAD")return new Response("Method Not Allowed",{status:405});if(!matchesPathPrefix(request,publicPrefix))return new Response("Not Found",{status:404});let encodedSubpath=pathnameOf(request).slice(publicPrefix.length+1),subpath;try{subpath=decodeURIComponent(encodedSubpath)}catch{return new Response("Not Found",{status:404})}if(subpath.length===0)return new Response("Not Found",{status:404});if(options?.assets!==void 0)return serveEmbeddedAsset(options.assets,`public/${encodedSubpath}`,request,options.deferCors);let[{join},{resolvePublicFilePath:resolvePublicFilePath2,servePublicFile:servePublicFile2}]=await Promise.all([import("path"),Promise.resolve().then(()=>(init_public_route(),public_route_exports))]),publicRoot=join(projectRoot,subdir),diskPath=await resolvePublicFilePath2(publicRoot,subpath);return diskPath===null?new Response("Not Found",{status:404}):await servePublicFile2(diskPath,{...options?.deferCors===!0&&{deferCors:!0},...request.method==="HEAD"&&{head:!0}})}}var CATEGORY_ENV={connectDomains:"CSP_CONNECT_DOMAINS",resourceDomains:"CSP_RESOURCE_DOMAINS",frameDomains:"CSP_FRAME_DOMAINS",baseUriDomains:"CSP_BASE_URI_DOMAINS"};function parseDomainList(raw2){return raw2===void 0||raw2.trim()===""?[]:raw2.split(",").map(s=>s.trim()).filter(s=>s.length>0)}function readEnvDomains(name){if(typeof process>"u")return;let raw2=process.env[name];if(!(raw2===void 0||raw2.trim()===""))return parseDomainList(raw2)}function readCspUrlsShortcut(){return readEnvDomains("CSP_URLS")??[]}function readEnvDomainsForCategory(category){let perCategory=readEnvDomains(CATEGORY_ENV[category]);return perCategory!==void 0?perCategory:readCspUrlsShortcut()}function mergeDomainLists(...segments){let seen=new Set,out=[];for(let segment of segments)for(let domain of segment)seen.has(domain)||(seen.add(domain),out.push(domain));return out}function toWebSocketOrigin(serverOrigin){return serverOrigin.startsWith("https://")?`wss://${serverOrigin.slice(8)}`:serverOrigin.startsWith("http://")?`ws://${serverOrigin.slice(7)}`:serverOrigin}function buildMergedResourceCsp(authorFacts,options){let author=authorFacts?.csp,mcpConnectAuto=[];options.serverOrigin!==""&&(mcpConnectAuto.push(options.serverOrigin),options.hmrWs===!0&&mcpConnectAuto.push(toWebSocketOrigin(options.serverOrigin)));let mcpResourceAuto=[],resourceOrigin=options.explicitAssetsBase?options.assetsOrigin:options.serverOrigin;resourceOrigin!==""&&mcpResourceAuto.push(resourceOrigin);let connectDomains=mergeDomainLists(author?.connectDomains??[],readEnvDomainsForCategory("connectDomains"),mcpConnectAuto),resourceDomains=mergeDomainLists(author?.resourceDomains??[],readEnvDomainsForCategory("resourceDomains"),mcpResourceAuto),frameDomains=mergeDomainLists(author?.frameDomains??[],readEnvDomainsForCategory("frameDomains")),baseUriDomains=mergeDomainLists(author?.baseUriDomains??[],readEnvDomainsForCategory("baseUriDomains")),scriptDirectives=mergeDomainLists(author?.scriptDirectives??[],options.hmrWs===!0?["'unsafe-eval'"]:[]);return{...author,connectDomains,resourceDomains,frameDomains,baseUriDomains,...scriptDirectives.length>0?{scriptDirectives}:{}}}init_origin();function buildToolUiMeta(viewName,visibility,existingMetadata){if(viewName===void 0&&visibility===void 0&&existingMetadata===void 0)return;let meta2={...existingMetadata},existingUi=existingMetadata?.["ui"],existingUiIsObject=typeof existingUi=="object"&&existingUi!==null&&!Array.isArray(existingUi),ui=existingUiIsObject?{...existingUi}:{};if(viewName!==void 0){let resourceUri=viewResourceUri(viewName);ui.resourceUri=resourceUri,meta2[UI_RESOURCE_URI_META_KEY]=resourceUri}else delete ui.resourceUri,delete meta2[UI_RESOURCE_URI_META_KEY];return visibility!==void 0?ui.visibility=[visibility]:delete ui.visibility,(viewName!==void 0||visibility!==void 0||existingUiIsObject)&&(meta2["ui"]=ui),meta2}function buildToolResultUiMeta(viewName){let resourceUri=viewResourceUri(viewName);return{ui:{resourceUri},[UI_RESOURCE_URI_META_KEY]:resourceUri}}function resolveCspOptions(options){let request=options?.request,serverOrigin=options?.serverOrigin??(request!==void 0?resolveServerOrigin(request):""),assetsBase=options?.assetsBase??(request!==void 0?resolveAssetsBase(request):serverOrigin);return{serverOrigin,assetsOrigin:originFromAssetsBase(assetsBase),explicitAssetsBase:hasExplicitAssetsBase(),...options?.hmrWs===!0?{hmrWs:!0}:{}}}function buildResourceUiMeta(authorFacts,options){let ui={csp:buildMergedResourceCsp(authorFacts,resolveCspOptions(options))};return authorFacts?.permissions!==void 0&&(ui.permissions=authorFacts.permissions),authorFacts?.domain!==void 0&&(ui.domain=authorFacts.domain),authorFacts?.prefersBorder!==void 0&&(ui.prefersBorder=authorFacts.prefersBorder),{ui,...authorFacts?.description!==void 0&&{"openai/widgetDescription":authorFacts.description},...authorFacts?.displayModes!==void 0&&{"openai/ui":{availableDisplayModes:authorFacts.displayModes.filter(mode=>mode==="inline"||mode==="fullscreen"),...authorFacts.preferredDisplayMode!==void 0&&{preferredDisplayMode:authorFacts.preferredDisplayMode}}}}}function viewResourceConfig(_viewName,_entry,authorFacts,options){return{mimeType:UI_MIME_TYPE,...authorFacts?.description!==void 0&&{description:authorFacts.description},_meta:buildResourceUiMeta(authorFacts,options)}}var CLAUDE_RESOURCE_DOMAIN_SUFFIX=".claudemcpcontent.com",CLAUDE_RESOURCE_DOMAIN_HASH_LENGTH=32;function isClaudeClient(clientInfo){let name=clientInfo?.name;return typeof name=="string"&&name.toLowerCase().includes("claude")}async function computeClaudeResourceDomain(domain){if(domain.endsWith(CLAUDE_RESOURCE_DOMAIN_SUFFIX))return domain;let digest=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(domain));return`${Array.from(new Uint8Array(digest),byte=>byte.toString(16).padStart(2,"0")).join("").slice(0,CLAUDE_RESOURCE_DOMAIN_HASH_LENGTH)}${CLAUDE_RESOURCE_DOMAIN_SUFFIX}`}async function applyClaudeResourceDomain(meta2,clientInfo,userAgent){let effectiveClientInfo=typeof clientInfo?.name=="string"||typeof userAgent!="string"||userAgent.trim().length===0?clientInfo:{...clientInfo,name:userAgent.trim()};if(!isClaudeClient(effectiveClientInfo))return meta2;let ui=meta2["ui"];if(typeof ui!="object"||ui===null||Array.isArray(ui))return meta2;let domain=ui.domain;return typeof domain!="string"||domain.length===0?meta2:{...meta2,ui:{...ui,domain:await computeClaudeResourceDomain(domain)}}}function record4(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)?value:void 0}function productId(value,fallback){if(typeof value!="string")return fallback;let normalized=value.trim();return normalized.length>0&&normalized.length<=64&&![...normalized].some(character=>{let code=character.charCodeAt(0);return code<32||code===127})?normalized:fallback}function clientUsageFromBody(body){if(!isJSONRPCRequest(body))return;let params=record4(body.params);if(body.method==="initialize"){let info2=record4(params?.clientInfo),capabilities2=record4(params?.capabilities)??{};return clientUsage(info2,capabilities2,params?.protocolVersion,"legacy")}let meta2=record4(params?._meta),info=record4(meta2?.[CLIENT_INFO_META_KEY]),capabilities=record4(meta2?.[CLIENT_CAPABILITIES_META_KEY]);if(!(info===void 0||capabilities===void 0))return clientUsage(info,capabilities,meta2?.[PROTOCOL_VERSION_META_KEY],"modern")}function clientUsage(info,capabilities,protocolVersion,era){let typedCapabilities=capabilities;return{client_name:productId(info?.name,"other"),client_version:productId(info?.version,"unknown"),protocol_era:era,protocol_version:productId(protocolVersion,"unknown"),connection_mode:era==="modern"?"stateless_request":"legacy_session",sampling_capability:Object.hasOwn(capabilities,"sampling"),elicitation_capability:Object.hasOwn(capabilities,"elicitation"),roots_capability:Object.hasOwn(capabilities,"roots"),extensions_capability:Object.hasOwn(capabilities,"extensions"),views_capability:supportsViews(typedCapabilities),capability_count:Object.keys(capabilities).length}}function registerFetchMiddleware(app,middleware){app.use("*",async(context,next)=>{let response=await middleware(context.req.raw,async()=>(await next(),context.res));return context.res=response,response})}var MCPServer=class _MCPServer{#config;#requestLogPrefix;#branding;#tools=new Map;#resources=new Map;#resourceTemplates=new Map;#prompts=new Map;#views=new Map;#settings;#skills;#skillsPrimed=!1;#skillsDiscovery;#viewBindings=new Map;#viewsPrimed=!1;#embeddedViewAssets;#viewsDevMode=!1;#viewsProjectRoot=process.cwd();#fetchHandler;#httpApp;#handler;#eventBus;#httpServer;#oauthResource;#oauthResourceResolved=!1;#oauthResourceConfigurationAbsent=!1;#instructionsOverride;#oauthProviderSetupRan=!1;#oauthProviderSetupFailure;#oauthProviderRoutes=[];#hostValidated=!1;#mcpMiddlewares=[];#mcpEventListeners=[];#usageScope;#openApiTools=new Set;#proxiedTools=new Set;#proxiedResources=new Set;#proxiedPrompts=new Set;#httpMiddlewareCount=0;#proxyServersConfigured=0;#proxyServersConnected=0;#proxyToolsDiscovered=0;#proxyResourcesDiscovered=0;#proxyPromptsDiscovered=0;#proxyOwners=[];#proxyOperations=new Set;#closed=!1;app;get;post;put;patch;delete;all;fetch;static fromOpenAPI(options){let server=new _MCPServer({name:options.name??options.spec.info.title,version:options.version??options.spec.info.version??"1.0.0"});registerOpenAPITools(server,options);for(let name of server.#tools.keys())server.#openApiTools.add(name);return server}constructor(config2){if(assertServerConfig(config2),this.#config=config2,this.#branding=normalizeServerBranding(config2),this.app=new Hono3,this.app.use("*",async(context,next)=>{getRequestBag(context.req.raw).honoContext=context,await next()}),this.get=this.app.get.bind(this.app),this.post=this.app.post.bind(this.app),this.put=this.app.put.bind(this.app),this.patch=this.app.patch.bind(this.app),this.delete=this.app.delete.bind(this.app),this.all=this.app.all.bind(this.app),this.fetch=async(request,env2,executionCtx)=>(await this.#ensureSkillsPrimed(),this.#ensureMounted("handler"),this.#httpApp.fetch(request,env2,executionCtx)),config2.oauth!==void 0){let mcpUrl=typeof process>"u"?void 0:process.env.MCP_URL,resource2=resolveConfiguredOAuthResource({provider:config2.oauth,basePath:this.#basePath(),...mcpUrl!==void 0&&{mcpUrl}});this.#oauthResource=resource2,this.#oauthResourceResolved=resource2!==void 0,this.#oauthResourceConfigurationAbsent=resource2===void 0}}get basePath(){return this.#basePath()}get host(){return this.#config.host}get port(){return this.#config.port}get branding(){return this.#branding}getHandler(){return this.fetch}tool(definition,callback){if(this.#assertNotStarted("tool",definition.name),this.#settings!==void 0&&[this.#settings.capability.readTool,this.#settings.capability.updateTool].includes(definition.name))throw new Error(`Tool "${definition.name}" is reserved for settings`);let schemes=this.#resolveSecuritySchemes(definition);return validateEntrypointInput(definition),this.#validateToolViewBinding(definition),this.#openApiTools.delete(definition.name),this.#proxiedTools.delete(definition.name),this.#tools.set(definition.name,{definition,callback,schemes}),Object.freeze({name:definition.name})}settings(options){if(this.#assertNotStarted("settings",options.readTool??"settings.read"),this.#settings!==void 0)throw new Error("Settings are already registered on this server");let prepared=prepareSettings(options);for(let name of[prepared.capability.readTool,prepared.capability.updateTool])if(this.#tools.has(name))throw new Error(`Settings tool "${name}" is already registered`);let read=options.read,update=options.update;this.tool(prepared.readDefinition,async(_args,ctx)=>({content:[],structuredContent:{schema:prepared.schema,...prepared.layout!==void 0&&{layout:prepared.layout},values:await read(ctx)}})),this.tool(prepared.updateDefinition,async({set},ctx)=>({content:[],structuredContent:{values:await update(set,ctx)}})),this.#settings=prepared}mentions(options){this.#assertNotStarted("mentions",options.name);let definition=prepareMentions(options);if(this.#tools.has(options.name))throw new Error(`Mention tool "${options.name}" is already registered`);let search=options.search,ref=this.tool(definition,async(params,ctx)=>({content:[],structuredContent:await search(params,ctx)}));return this.#tools.get(options.name).mentions=!0,ref}[registerViews](views,options){if(this.#viewsPrimed)throw new Error("Cannot prime views: the views registry is already primed on this server instance.");this.#assertNotStarted("views","manifest");for(let[name,entry]of Object.entries(views))try{normalizeViewConfig(entry.viewConfig)}catch(error3){throw new Error(`View "${name}" has an invalid viewConfig: ${error3 instanceof Error?error3.message:String(error3)}`,{cause:error3})}this.#viewsDevMode=options?.dev===!0,this.#embeddedViewAssets=options?.assets,options?.projectRoot!==void 0&&(this.#viewsProjectRoot=options.projectRoot);for(let[name,entry]of Object.entries(views))this.#views.set(name,entry);this.#viewsPrimed=!0}__primeViews(views,options){this[registerViews](views,options)}[registerSkills](snapshot){this.#assertNotStarted("skills","snapshot"),this.#skills=snapshot,this.#skillsPrimed=!0}__primeSkills(snapshot){this[registerSkills](snapshot)}__skillsConfig(){return this.#config.skills}async#discoverSkills(projectRoot,conventionalDirectory){let{discoverConfiguredSkills}=await import("#mcp-use-skills-loader"),snapshot=discoverConfiguredSkills(this.#config.skills,projectRoot,conventionalDirectory);return this[registerSkills](snapshot),snapshot}resource(definition,callback){this.#assertNotStarted("resource",definition.name);let previous=this.#resources.get(definition.name);return previous!==void 0&&this.#proxiedResources.delete(previous.definition.uri),this.#resources.set(definition.name,{definition,callback}),this}resourceTemplate(definition,callback){this.#assertNotStarted("resourceTemplate",definition.name);let complete=definition.complete===void 0?void 0:normalizeCompletions(definition.complete);return this.#resourceTemplates.set(definition.name,{definition,...complete!==void 0&&{complete},callback}),this}prompt(definition,callback){return this.#assertNotStarted("prompt",definition.name),this.#proxiedPrompts.delete(definition.name),this.#prompts.set(definition.name,{definition,callback}),this}async proxy(input){this.#assertOpen("proxy()");let operation=(async()=>{let{isProxyConnection:isProxyConnection2,mountProxyConnection:mountProxyConnection2,mountProxyServers:mountProxyServers2}=await Promise.resolve().then(()=>(init_mcp_proxy(),mcp_proxy_exports));if(isProxyConnection2(input)){this.#proxyServersConfigured+=1,await mountProxyConnection2(this.#proxyHost(),input);return}this.#proxyServersConfigured+=Object.keys(input).length,await mountProxyServers2(this.#proxyHost(),input)})();this.#proxyOperations.add(operation);try{await operation}finally{this.#proxyOperations.delete(operation)}}use(patternOrHandler,...handlers){if(typeof patternOrHandler=="string"&&patternOrHandler.startsWith("mcp:")){this.#assertNotStarted("middleware",patternOrHandler);let handler=handlers[0];return this.#mcpMiddlewares.push(createMcpMiddlewareEntry(patternOrHandler,handler)),this}return this.app.use.call(this.app,patternOrHandler,...handlers),this.#httpMiddlewareCount+=typeof patternOrHandler=="function"?1:handlers.length,this}on(pattern,handler){return this.#assertNotStarted("event listener",pattern),this.#mcpEventListeners.push(createMcpEventListenerEntry(pattern,handler)),this}__setEventBus(bus){this.#assertNotStarted("event bus","shared"),this.#eventBus=bus}__setRequestLogPrefix(prefix){this.#assertNotStarted("request log prefix","development"),this.#requestLogPrefix=prefix}__mount(){if(!this.#skillsPrimed)throw new Error("Cannot mount before skills discovery. CLI tooling must call __primeSkills first.");this.#ensureMounted("handler")}async notifyToolsChanged(){await this.#ensureSkillsPrimed(),await this.#ensureMounted("handler").handler.notify.toolsChanged()}async notifyPromptsChanged(){await this.#ensureSkillsPrimed(),await this.#ensureMounted("handler").handler.notify.promptsChanged()}async notifyResourcesChanged(){await this.#ensureSkillsPrimed(),await this.#ensureMounted("handler").handler.notify.resourcesChanged()}async notifyResourceUpdated(uri){await this.#ensureSkillsPrimed(),await this.#ensureMounted("handler").handler.notify.resourceUpdated(uri)}async listen(port=void 0,options={}){this.#assertOpen("listen()"),await this.#ensureSkillsPrimed();let host=resolveListenHost(options.host,this.#config.host),requestedPort=resolveListenPort(port,this.#config.port);return this.#assertListenOAuthConfiguration(host),new Promise((resolve,reject)=>{let resolveFetch,rejectFetch,fetchReady=new Promise((resolveFetchPromise,rejectFetchPromise)=>{resolveFetch=resolveFetchPromise,rejectFetch=rejectFetchPromise});fetchReady.catch(()=>{});let settled=!1,rejectAndClose=error3=>{settled||(settled=!0,reject(error3)),rejectFetch?.(error3),new Promise(closeResolve=>server.close(()=>closeResolve())).catch(()=>{}).finally(()=>{this.#httpServer===server&&(this.#httpServer=void 0)})},nodeHandler=toNodeHandler({fetch:async request=>(await fetchReady)(request)}),server=createNodeHttpServer((req,res)=>{nodeHandler(req,res)});server.once("error",rejectAndClose),server.listen(requestedPort,host,()=>{try{let address=server.address(),boundPort=typeof address=="object"&&address!==null?address.port:requestedPort,{fetch:fetch2}=this.#ensureMounted("listen",boundPort,host);resolveFetch?.(fetch2),settled||(settled=!0,resolve({port:boundPort,url:`http://localhost:${boundPort}${this.#basePath()}`}))}catch(error3){rejectAndClose(error3)}}),this.#httpServer=server})}async close(){this.#closed=!0,await Promise.allSettled([...this.#proxyOperations]);let errors2=[],proxyOwners=this.#proxyOwners.splice(0),ownerResults=await Promise.allSettled(proxyOwners.map(owner=>owner.close()));for(let result of ownerResults)result.status==="rejected"&&errors2.push(result.reason);try{await this.#handler?.close()}catch(error3){errors2.push(error3)}let httpServer=this.#httpServer;if(httpServer!==void 0)try{await new Promise((resolve,reject)=>{httpServer.close(err=>err?reject(err):resolve())}),this.#httpServer=void 0}catch(error3){errors2.push(error3)}if(errors2.length>0)throw new AggregateError(errors2,"Failed to close MCP server cleanly")}#assertOpen(operation){if(this.#closed)throw operation!==void 0?new Error(`Cannot call ${operation} after the server has closed.`):new Error("Cannot use the server after it has closed.")}#basePath(){return this.#config.basePath??"/mcp"}#resolveOAuthResource(mode,listenPort,listenHost){if(this.#config.oauth===void 0)return;if(this.#oauthResourceResolved)return this.#oauthResource;let host=listenHost??this.#config.host??"127.0.0.1",localListen=mode==="listen"&&listenPort!==void 0&&["127.0.0.1","localhost","::1"].includes(host);if(this.#oauthResourceConfigurationAbsent&&localListen)return this.#oauthResource=resolveLocalOAuthResource(`http://localhost:${listenPort}`,this.#basePath()),this.#oauthResourceResolved=!0,this.#oauthResource;throw new Error("OAuth requires an explicit resource or MCP_URL when using server.fetch or listening on a non-local host")}#assertListenOAuthConfiguration(host){if(this.#config.oauth!==void 0&&!["127.0.0.1","localhost","::1"].includes(host)&&!this.#oauthResourceResolved)throw new Error("OAuth listen() on a public or wildcard host requires an explicit provider resource or valid MCP_URL.")}#assertNotStarted(kind,name){if(this.#handler!==void 0)throw new Error(`Cannot register ${kind} "${name}" after the server has started: registrations are replayed per request from the registry, so register everything before listen()/server.fetch.`)}#trackConfigured(){recordUsage("server","configured",{tools_total:this.#tools.size,tools_local:this.#tools.size-this.#openApiTools.size-this.#proxiedTools.size,tools_openapi:this.#openApiTools.size,tools_proxied:this.#proxiedTools.size,resources:this.#resources.size,resource_templates:this.#resourceTemplates.size,prompts:this.#prompts.size,views:this.#views.size,proxy_servers_configured:this.#proxyServersConfigured,proxy_servers_connected:this.#proxyServersConnected,proxy_tools_discovered:this.#proxyToolsDiscovered,proxy_resources_discovered:this.#proxyResourcesDiscovered,proxy_prompts_discovered:this.#proxyPromptsDiscovered,proxy_tools_mounted:this.#proxiedTools.size,proxy_resources_mounted:this.#proxiedResources.size,proxy_prompts_mounted:this.#proxiedPrompts.size,http_middleware:this.#httpMiddlewareCount,mcp_middleware:this.#mcpMiddlewares.length,observers_before:this.#mcpEventListeners.filter(({phase})=>phase==="before").length,observers_complete:this.#mcpEventListeners.filter(({phase})=>phase==="complete").length,oauth_configured:this.#config.oauth!==void 0,cors_configured:this.#config.cors!==void 0,request_state_configured:this.#config.requestState!==void 0,legacy_policy:this.#config.legacy??"stateless"},{onceKey:`${this.#usageScopeId()}:server`,serverRoot:this.#viewsProjectRoot})}#trackClient(body){let client=clientUsageFromBody(body);client!==void 0&&recordUsage("client","observed",{...client},{onceKey:`${this.#usageScopeId()}:client:${JSON.stringify(client)}`,serverRoot:this.#viewsProjectRoot})}#usageScopeId(){return this.#usageScope??=crypto.randomUUID(),this.#usageScope}#runOAuthProviderSetup(resource2,basePath,mode,listenHost){let setup=this.#config.oauth?.setup;if(setup===void 0||this.#oauthProviderSetupRan)return;if(this.#oauthProviderSetupFailure!==void 0)throw this.#oauthProviderSetupFailure.error;let active=!0,assertActive=method=>{if(!active)throw new Error(`[mcp-use] OAuthProviderHost.${method}() called after the provider's setup hook returned; call it from setup().`)},host={resourceUrl:resource2,basePath,mixedAuth:this.#config.mixedAuth===!0,mode,listenHost:mode==="listen"?listenHost:void 0,route:(method,path,handler)=>{if(assertActive("route"),method!=="GET"&&method!=="POST"&&method!=="OPTIONS")throw new TypeError("[mcp-use] OAuthProviderHost.route() method must be GET, POST, or OPTIONS");if(typeof handler!="function")throw new TypeError("[mcp-use] OAuthProviderHost.route() handler must be a function");let prefix=basePath==="/"?"/":`${basePath}/`;if(typeof path!="string"||!path.startsWith(prefix)||path.length===prefix.length||/[?#*:]/.test(path)||path.split("/").some(segment=>segment==="."||segment===".."))throw new TypeError(`[mcp-use] OAuthProviderHost.route() path must be a literal pathname under ${prefix}`);if(this.#oauthProviderRoutes.some(route=>route.method===method&&route.path===path))throw new Error(`[mcp-use] OAuth provider route ${method} ${path} is already registered`);this.#oauthProviderRoutes.push({method,path,handler})},use:(pattern,handler)=>{assertActive("use"),this.use(pattern,handler)},tool:(definition,callback)=>{if(assertActive("tool"),this.#tools.has(definition.name))throw new Error(`[mcp-use] Tool "${definition.name}" is reserved by the OAuth provider; rename the application tool.`);return this.tool(definition,callback)},resource:(definition,callback)=>{if(assertActive("resource"),this.#resources.has(definition.name))throw new Error(`[mcp-use] Resource "${definition.name}" is reserved by the OAuth provider; rename the application resource.`);this.resource(definition,callback)},resourceTemplate:(definition,callback)=>{if(assertActive("resourceTemplate"),this.#resourceTemplates.has(definition.name))throw new Error(`[mcp-use] Resource template "${definition.name}" is reserved by the OAuth provider; rename the application resource template.`);this.resourceTemplate(definition,callback)},prompt:(definition,callback)=>{if(assertActive("prompt"),this.#prompts.has(definition.name))throw new Error(`[mcp-use] Prompt "${definition.name}" is reserved by the OAuth provider; rename the application prompt.`);this.prompt(definition,callback)},listTools:()=>(assertActive("listTools"),[...this.#tools.values()].map(({definition})=>definition)),instructions:transform2=>{assertActive("instructions"),this.#instructionsOverride=transform2(this.#instructionsOverride??this.#config.instructions)}};try{let returned=setup(host);if(typeof returned?.then=="function")throw Promise.resolve(returned).catch(()=>{}),new TypeError("[mcp-use] The OAuth provider's setup hook must be synchronous but returned a promise. Do async work before creating the provider.")}catch(error3){throw this.#oauthProviderSetupFailure={error:error3},error3}finally{active=!1}this.#oauthProviderSetupRan=!0}#proxyHost(){return{isStarted:()=>this.#handler!==void 0,hasTool:name=>this.#tools.has(name),hasResource:name=>this.#resources.has(name),hasPrompt:name=>this.#prompts.has(name),registerTool:(definition,callback)=>{this.#assertNotStarted("tool",definition.name),this.#proxiedTools.add(definition.name),this.#tools.set(definition.name,{definition,callback,schemes:this.#resolveSecuritySchemes(definition)})},registerResource:(definition,callback)=>{this.#assertNotStarted("resource",definition.name),this.#proxiedResources.add(definition.uri),this.#resources.set(definition.name,{definition,callback})},registerPrompt:(definition,callback)=>{this.#assertNotStarted("prompt",definition.name),this.#proxiedPrompts.add(definition.name),this.#prompts.set(definition.name,{definition,callback})},trackOwner:owner=>{this.#proxyOwners.push(owner)},trackNamespace:({tools,resources,prompts})=>{this.#proxyServersConnected+=1,this.#proxyToolsDiscovered+=tools,this.#proxyResourcesDiscovered+=resources,this.#proxyPromptsDiscovered+=prompts}}}async#ensureSkillsPrimed(){this.#skillsPrimed||(this.#skillsDiscovery??=this.#discoverSkills(typeof process>"u"?".":process.cwd(),"skills").then(()=>{}),await this.#skillsDiscovery)}#validationPolicy(mode,listenHost){let{allowedHosts,allowedOrigins}=this.#config,host=listenHost??this.#config.host??"127.0.0.1",localhostBind=["127.0.0.1","localhost","::1"].includes(host),hosts=allowedHosts!==void 0?[...new Set([...localhostAllowedHostnames(),...allowedHosts])]:mode==="listen"&&localhostBind?localhostAllowedHostnames():void 0,origins=allowedOrigins!==void 0?[...new Set([...localhostAllowedOrigins(),...allowedOrigins])]:void 0;return{hosts,origins}}#ensureMounted(mode,listenPort,listenHost){if(this.#assertOpen(),this.#fetchHandler===void 0||this.#handler===void 0){let{hosts,origins}=this.#validationPolicy(mode,listenHost),basePath=this.#basePath(),nestedBasePath=basePath==="/"?"":basePath,httpApp=new Hono3,middlewares=[requestLogger({...this.#config.logging,mcpPath:basePath,prefix:this.#requestLogPrefix}),jsonBodyMiddleware()],corsConfig=this.#config.cors;corsConfig!==void 0&&middlewares.unshift(corsFetchMiddleware(corsConfig));let deferViewCors=isGlobalCorsEnabled(corsConfig);hosts!==void 0&&middlewares.unshift(hostValidationMiddleware(hosts)),origins!==void 0&&middlewares.push(originValidationMiddleware(origins,!0,request=>{if(this.#oauthProviderRoutes.length===0)return!1;let pathname=new URL(request.url).pathname;return this.#oauthProviderRoutes.some(route=>route.method===request.method&&route.path===pathname)})),hosts===void 0&&mode==="listen"&&console.warn(`[mcp-use] listen() is serving on ${listenHost} without Host validation. Behind a platform edge that only routes your own domains this is expected; if this process is reachable directly, set allowedHosts to restrict it.`);let resource2=this.#resolveOAuthResource(mode,listenPort,listenHost);if(resource2!==void 0){let provider=this.#config.oauth;middlewares.push(oauthMetadata(provider,resource2))}for(let middleware of middlewares)registerFetchMiddleware(httpApp,middleware);if(resource2!==void 0){this.#runOAuthProviderSetup(resource2,basePath,mode,listenHost);for(let route of this.#oauthProviderRoutes)httpApp.on(route.method,route.path,context=>route.handler(context))}for(let group of this.#settings?.layout??[])for(let item of group.items)if(item.kind==="tool"&&!this.#tools.has(item.tool))throw new Error(`Settings action tool "${item.tool}" is not registered on this server`);this.#validateViewBindingsAtMount();let{handler,fetch:mcpFetch}=createMcpMount(ctx=>this.#buildSdkServer(ctx),{path:basePath,...(this.#config.legacy!==void 0||this.#eventBus!==void 0)&&{handler:{...this.#config.legacy!==void 0&&{legacy:this.#config.legacy},...this.#eventBus!==void 0&&{bus:this.#eventBus}}},...resource2!==void 0&&{authInfo:request=>authInfoFromRequest(request)}});if(resource2!==void 0){let provider=this.#config.oauth,providerOptions=getOAuthProviderOptions(provider),mixedAuth=this.#config.mixedAuth===!0,gateOptions={verifier:wrapOAuthTokenVerifier(provider,resource2),resourceMetadataUrl:getOAuthProtectedResourceMetadataUrl(resource2),baselineScopes:providerOptions.requiredScopes??[],mixedAuth,toolSchemes:name=>this.#tools.get(name)?.schemes,openResourceUris:[...this.#viewBindings.keys()].map(viewResourceUri)},gate;httpApp.use("*",async(context,next)=>{if(new URL(context.req.url).pathname!==basePath){await next();return}if((this.#config.publicLandingPage===!0||mixedAuth)&&isHtmlNavigationRequest(context.req.raw)){await next();return}gate??=Promise.resolve().then(()=>(init_gate(),gate_exports)).then(({createOAuthGate:createOAuthGate2})=>createOAuthGate2(gateOptions));let response=await(await gate)(context.req.raw,async()=>(await next(),context.res));return context.res=response,response})}let mcpRouteHandler=request=>{let body=getRequestBag(request).parsedBody;return isJSONRPCRequest(body)&&(this.#trackConfigured(),this.#trackClient(body)),mcpFetch(request)},endpointHandler=async request=>isHtmlNavigationRequest(request)?(async()=>{let{createLandingPageResponse:createLandingPageResponse2}=await Promise.resolve().then(()=>(init_landing_handler(),landing_handler_exports));return createLandingPageResponse2(request,basePath,this.#config,this.#branding,this.#tools.values(),this.#prompts.values(),this.#resources.values())})():mcpRouteHandler(request),brandingDevMode=this.#viewsPrimed?this.#viewsDevMode:process.env.NODE_ENV!=="production",faviconHandler=createFaviconHandler(this.#branding,{dev:brandingDevMode,projectRoot:this.#viewsProjectRoot,deferCors:deferViewCors});faviconHandler!==void 0&&this.app.all("/favicon.ico",context=>faviconHandler(context.req.raw));let viewHandler=createViewPublicHandler(basePath,this.#views,{dev:this.#viewsPrimed?this.#viewsDevMode:brandingDevMode,projectRoot:this.#viewsProjectRoot,enabled:hasLocalBrandingAsset(this.#branding)||[...this.#tools.values()].some(entry=>entry.definition.icons!==void 0&&hasLocalBrandingAsset({icons:entry.definition.icons})),deferCors:deferViewCors,...this.#embeddedViewAssets!==void 0&&{assets:this.#embeddedViewAssets}});if(viewHandler!==void 0&&this.app.on(["GET","HEAD"],`${nestedBasePath}/_mcp-use/public/*`,context=>viewHandler(context.req.raw)),!this.#viewsDevMode){let viewAssetsHandler=createViewAssetsHandler(basePath,this.#views,{projectRoot:this.#viewsProjectRoot,deferCors:deferViewCors,...this.#embeddedViewAssets!==void 0&&{assets:this.#embeddedViewAssets}});viewAssetsHandler!==void 0&&this.app.on(["GET","HEAD"],`${nestedBasePath}/_mcp-use/views/*`,context=>viewAssetsHandler(context.req.raw))}this.app.all(basePath,context=>endpointHandler(context.req.raw)),httpApp.route("/",this.app),this.#httpApp=httpApp,this.#fetchHandler=async request=>httpApp.fetch(request),this.#handler=handler,this.#hostValidated=hosts!==void 0}else if(mode==="listen"&&!this.#hostValidated&&this.#validationPolicy("listen",listenHost).hosts!==void 0)throw new Error("Cannot listen() on a localhost bind after server.fetch mounted the app without Host validation (server.fetch expects a platform edge in front). Call listen() first, or set allowedHosts.");return{fetch:this.#fetchHandler,handler:this.#handler}}#validateToolViewBinding(definition){let view=definition.view;if(view===void 0)return;if(definition.outputSchema===void 0)throw new Error(`Tool "${definition.name}" declares view "${view.name}" but has no outputSchema. View-bound tools require an outputSchema \u2014 the view reads structuredContent typed from it. Use outputSchema: z.object({}) for a view that takes no structured output.`);let existing=this.#viewBindings.get(view.name);if(existing!==void 0)throw new Error(`View "${view.name}" is already bound to tool "${existing.toolName}"; tool "${definition.name}" cannot bind the same view. Each view may be bound to one tool.`);this.#viewBindings.set(view.name,{toolName:definition.name,config:view})}#validateViewBindingsAtMount(){if(this.#viewBindings.size>0&&!this.#viewsPrimed){let first=[...this.#tools.values()].find(entry=>entry.definition.view!==void 0),viewName=first?.definition.view?.name??"unknown";throw new Error(`Tool "${first?.definition.name??"unknown"}" is bound to view "${viewName}" but no views were primed. Run \`mcp-use build\` and deploy the built entry, or in dev let the CLI prime views automatically.`)}for(let entry of this.#tools.values()){let viewName=entry.definition.view?.name;if(viewName!==void 0&&!this.#views.has(viewName))throw new Error(`Tool "${entry.definition.name}" is bound to view "${viewName}" which is not in the primed views registry. Run \`mcp-use build\` and deploy the built entry, or in dev let the CLI prime views automatically.`)}for(let viewName of this.#views.keys())this.#viewBindings.has(viewName)||console.warn(`[mcp-use] View "${viewName}" is registered but no tool binds it.`)}#buildSdkServer(ctx){let{name,version:version2,title,description}=this.#config,instructions=this.#instructionsOverride??this.#config.instructions,authInfo=ctx.authInfo,server=new McpServer({name,version:version2,...title!==void 0&&{title},...description!==void 0&&{description},...this.#branding.websiteUrl!==void 0&&{websiteUrl:this.#branding.websiteUrl},...this.#branding.icons!==void 0&&{icons:resolveImplementationIcons(this.#branding.icons,ctx.requestInfo,this.#basePath())}},{capabilities:{logging:{},tools:{listChanged:!0},prompts:{listChanged:!0},resources:{listChanged:!0,subscribe:!0},...(this.#skills!==void 0||this.#settings!==void 0)&&{extensions:{...this.#skills!==void 0&&{[SKILLS_EXTENSION_ID]:{directoryRead:!0}},...this.#settings!==void 0&&{"openai/settings":this.#settings.capability}}},...this.#settings!==void 0&&{experimental:{"openai/settings":this.#settings.capability}}},...instructions!==void 0&&{instructions},...authInfo!==void 0&&{authInfo},...this.#config.requestState!==void 0&&{requestState:this.#config.requestState}}),request=ctx.requestInfo,viewMetaOptions=request!==void 0?{request,hmrWs:this.#viewsDevMode}:{hmrWs:this.#viewsDevMode},basePath=this.#basePath();for(let entry of this.#tools.values())this.#registerTool(server,entry,request);for(let entry of this.#resources.values())this.#registerResource(server,entry);for(let entry of this.#resourceTemplates.values())this.#registerResourceTemplate(server,entry);for(let entry of this.#prompts.values())this.#registerPrompt(server,entry);for(let[viewName,viewEntry]of this.#views.entries())this.#registerViewResource(server,viewName,viewEntry,viewMetaOptions,basePath);return this.#skills!==void 0&®isterSkillsRuntime(server,this.#skills),this.#wrapListHandlers(server),server}#createMiddlewareContext(method,params,ctx){let requestContext=toRequestContext(ctx);return Object.assign(requestContext,{method,params,...ctx.sessionId!==void 0&&{session:{sessionId:ctx.sessionId}},...ctx.http?.authInfo!==void 0&&{auth:ctx.http.authInfo},state:new Map})}#runMcpHook(method,ctx,innerFn){let runOperation=method==="tools/call"&&this.#mcpMiddlewares.length===0&&this.#mcpEventListeners.length===0?innerFn:()=>runMcpOperation(this.#mcpMiddlewares,this.#mcpEventListeners,method,ctx,innerFn);if(isUsageDisabled())return runOperation();let startedAt=performance.now(),matchedMiddleware=this.#mcpMiddlewares.filter(entry=>matchesPattern(entry.pattern,method)).length,matchedObservers=phase=>this.#mcpEventListeners.filter(entry=>entry.phase===phase&&matchesPattern(entry.pattern,method)).length,request=ctx.request?.raw,client=request===void 0?void 0:clientUsageFromBody(getRequestBag(request).parsedBody),capture2=(outcome,completedPhase)=>{recordUsage("operation","completed",{method,outcome,duration_ms:Math.max(0,Math.round(performance.now()-startedAt)),primitive_origin:this.#primitiveOrigin(method,ctx.params),matched_middleware:matchedMiddleware,observers_before:matchedObservers("before"),observers_complete:completedPhase?matchedObservers("complete"):0,...client?.protocol_era==="modern"?client:{client_name:"unknown",protocol_era:"legacy"}},{sampleRate:outcome==="success"?.1:1,serverRoot:this.#viewsProjectRoot})};return runOperation().then(result=>{let outcome=isInputRequiredResult(result)?"input_required":method==="tools/call"&&typeof result=="object"&&result!==null&&"isError"in result&&result.isError===!0?"error":"success";return capture2(outcome,!0),result},error3=>{throw capture2("error",!1),error3})}#primitiveOrigin(method,params){if(method==="tools/call"){let name=String(params.name);return this.#proxiedTools.has(name)?"proxied":this.#openApiTools.has(name)?"openapi":"local"}return method==="resources/read"?this.#proxiedResources.has(String(params.uri))?"proxied":"local":method==="prompts/get"?this.#proxiedPrompts.has(String(params.name))?"proxied":"local":"mixed"}#wrapListHandlers(server){let handlers=server.server._requestHandlers;if(handlers===void 0)return;let wrapListMethod=(method,resultKey,transform2)=>{let original=handlers.get(method);if(original===void 0||original.__mcpListWrapped)return;let wrapped=async(request,extra)=>{let serverContext=extra,params=request.params??{},mwCtx=this.#createMiddlewareContext(method,params,serverContext),originalEnvelope,innerFn=async()=>{let downstreamRequest=withMcpMiddlewareParams(request,mwCtx.params),result=await original(downstreamRequest,extra);if(typeof result!="object"||result===null)throw new TypeError(`[mcp-use] ${method} handler returned a non-object result`);originalEnvelope=result;let items=originalEnvelope[resultKey];if(!Array.isArray(items))throw new TypeError(`[mcp-use] ${method} handler result is missing a ${resultKey} array`);return items},filtered=await this.#runMcpHook(method,mwCtx,innerFn);if(!Array.isArray(filtered))throw new TypeError(`[mcp-use] ${method} middleware must return a ${resultKey} array`);let emitted=transform2?.(filtered)??filtered;return{...originalEnvelope,[resultKey]:emitted}};wrapped.__mcpListWrapped=!0,handlers.set(method,wrapped)};wrapListMethod("tools/list","tools",tools=>tools.map(tool=>{let entry=this.#tools.get(tool.name),schemes=entry!==void 0&&this.#generatesSecuritySchemes(entry)?entry.schemes:void 0;return schemes===void 0?tool:{...tool,securitySchemes:schemes}})),wrapListMethod("resources/list","resources"),wrapListMethod("prompts/list","prompts")}#registerTool(server,entry,request){let{definition,callback,schemes}=entry,view=definition.view,serializedUiMeta=buildToolUiMeta(view?.name,definition.visibility,buildEntrypointMeta(definition)),uiMeta=entry.mentions?finalizeMentionsMeta(definition,serializedUiMeta):serializedUiMeta,toolMeta=this.#generatesSecuritySchemes(entry)?{...uiMeta,[SECURITY_SCHEMES_META_KEY]:schemes}:uiMeta,config2={...definition.title!==void 0&&{title:definition.title},...definition.icons!==void 0&&{icons:resolveImplementationIcons(definition.icons,request,this.#basePath())},...definition.description!==void 0&&{description:definition.description},...definition.annotations!==void 0&&{annotations:definition.annotations},...definition.outputSchema!==void 0&&{outputSchema:definition.outputSchema},...toolMeta!==void 0&&{_meta:toolMeta}},wireResultMeta=view!==void 0?buildToolResultUiMeta(view.name):void 0,inputSchema2=resolveToolInputSchema(definition),invokeTool=async(args,ctx)=>{let mwCtx=this.#createMiddlewareContext("tools/call",{name:definition.name,arguments:args,...ctx.mcpReq._meta!==void 0&&{_meta:ctx.mcpReq._meta}},ctx),innerFn=async()=>{let effectiveArgs=mwCtx.params.arguments??{},result=await callback(effectiveArgs,this.#toToolRequestContext(ctx,schemes));return isInputRequiredResult(result)||wireResultMeta===void 0||result.isError===!0?result:{...result,_meta:{...result._meta,...wireResultMeta}}};return await this.#runMcpHook("tools/call",mwCtx,innerFn)};inputSchema2!==void 0?server.registerTool(definition.name,{...config2,inputSchema:inputSchema2},async(args,ctx)=>invokeTool(args,ctx)):server.registerTool(definition.name,config2,async ctx=>invokeTool({},ctx))}#registerViewResource(server,viewName,entry,metaOptions,basePath){let uri=viewResourceUri(viewName),frontendConfig=normalizeViewConfig(entry.viewConfig),authorFacts={...this.#viewResourceFacts(this.#viewBindings.get(viewName)?.config),displayModes:frontendConfig.displayModes,...frontendConfig.preferredDisplayMode!==void 0&&{preferredDisplayMode:frontendConfig.preferredDisplayMode}},resourceConfig=viewResourceConfig(viewName,entry,authorFacts,metaOptions);server.registerResource(viewName,uri,resourceConfig,async(readUri,ctx)=>{let req=ctx.http?.req,readOptions=req!==void 0?{request:req,...metaOptions.hmrWs===!0?{hmrWs:!0}:{}}:metaOptions.hmrWs===!0?{hmrWs:!0}:{},assetsBase=req!==void 0?resolveAssetsBase(req):metaOptions.request!==void 0?resolveAssetsBase(metaOptions.request):"",html2=synthesizeViewDocument(entry,assetsBase,basePath,viewName),meta2=await applyClaudeResourceDomain(buildResourceUiMeta(authorFacts,readOptions),requestClientInfo(ctx),(req??metaOptions.request)?.headers.get("user-agent"));return{contents:[{uri:readUri.href,mimeType:resourceConfig.mimeType,text:html2,_meta:meta2}]}})}#registerResource(server,{definition,callback}){server.registerResource(definition.name,definition.uri,{...definition.title!==void 0&&{title:definition.title},...definition.description!==void 0&&{description:definition.description},...definition.mimeType!==void 0&&{mimeType:definition.mimeType},...definition.annotations!==void 0&&{annotations:definition.annotations},...definition._meta!==void 0&&{_meta:{...definition._meta}}},async(uri,ctx)=>{let mwCtx=this.#createMiddlewareContext("resources/read",{uri:uri.href,...ctx.mcpReq._meta!==void 0&&{_meta:ctx.mcpReq._meta}},ctx),innerFn=async()=>toResourceResult(await callback(uri,this.#toRequestContext(ctx)),uri.href);return await this.#runMcpHook("resources/read",mwCtx,innerFn)})}#registerResourceTemplate(server,{definition,callback,complete}){let template=new ResourceTemplate(definition.uriTemplate,{list:void 0,...complete!==void 0&&{complete}});server.registerResource(definition.name,template,{...definition.title!==void 0&&{title:definition.title},...definition.description!==void 0&&{description:definition.description},...definition.mimeType!==void 0&&{mimeType:definition.mimeType},...definition.annotations!==void 0&&{annotations:definition.annotations},...definition._meta!==void 0&&{_meta:{...definition._meta}}},async(uri,variables,ctx)=>{let mwCtx=this.#createMiddlewareContext("resources/read",{uri:uri.href,...ctx.mcpReq._meta!==void 0&&{_meta:ctx.mcpReq._meta}},ctx),innerFn=async()=>toResourceResult(await callback(uri,variables,this.#toRequestContext(ctx)),uri.href);return await this.#runMcpHook("resources/read",mwCtx,innerFn)})}#viewResourceFacts(viewConfig){if(viewConfig!==void 0)return{...viewConfig.description!==void 0&&{description:viewConfig.description},...viewConfig.csp!==void 0&&{csp:viewConfig.csp},...viewConfig.permissions!==void 0&&{permissions:viewConfig.permissions},...viewConfig.domain!==void 0&&{domain:viewConfig.domain},...viewConfig.prefersBorder!==void 0&&{prefersBorder:viewConfig.prefersBorder}}}#registerPrompt(server,{definition,callback}){let config2={...definition.title!==void 0&&{title:definition.title},...definition.description!==void 0&&{description:definition.description}},invokePrompt=async(args,ctx)=>{let mwCtx=this.#createMiddlewareContext("prompts/get",{name:definition.name,arguments:args,...ctx.mcpReq._meta!==void 0&&{_meta:ctx.mcpReq._meta}},ctx),innerFn=async()=>{let effectiveArgs=mwCtx.params.arguments??{};return toPromptResult(await callback(effectiveArgs,this.#toRequestContext(ctx)))};return await this.#runMcpHook("prompts/get",mwCtx,innerFn)};if(definition.schema!==void 0)server.registerPrompt(definition.name,{...config2,argsSchema:definition.schema},async(args,ctx)=>invokePrompt(args,ctx));else{let handler=async ctx=>invokePrompt({},ctx);server.registerPrompt(definition.name,config2,handler)}}#toRequestContext(ctx){return this.#config.oauth===void 0?toRequestContext(ctx):toAuthenticatedRequestContext(ctx)}#toToolRequestContext(ctx,schemes){return this.#config.oauth===void 0||!requiresSignIn(schemes)&&ctx.http?.authInfo===void 0?toRequestContext(ctx):toAuthenticatedRequestContext(ctx)}#securitySchemeOptions(){return{hasOAuth:this.#config.oauth!==void 0,mixedAuth:this.#config.mixedAuth===!0,baselineScopes:this.#config.oauth?.requiredScopes??[]}}#resolveSecuritySchemes(definition){let options=this.#securitySchemeOptions(),schemes=resolveSecuritySchemes(definition.name,definition.securitySchemes,options),warning=handWrittenSecuritySchemesWarning(definition.name,definition,options);return warning!==void 0&&console.warn(warning),schemes}#generatesSecuritySchemes(entry){let{definition}=entry;return definition.securitySchemes!==void 0?!0:this.#config.mixedAuth===!0&&definition._meta?.[SECURITY_SCHEMES_META_KEY]===void 0}};init_fetch_app();init_dist();function text(content){return{content:[{type:"text",text:content}],_meta:{mimeType:"text/plain"}}}function markdown(content){return{content:[{type:"text",text:content}],_meta:{mimeType:"text/markdown"}}}function html(content){return{content:[{type:"text",text:content}],_meta:{mimeType:"text/html"}}}function xml(content){return{content:[{type:"text",text:content}],_meta:{mimeType:"text/xml"}}}function css(content){return{content:[{type:"text",text:content}],_meta:{mimeType:"text/css"}}}function javascript(content){return{content:[{type:"text",text:content}],_meta:{mimeType:"text/javascript"}}}function image(data,mimeType="image/png"){return{content:[{type:"image",data,mimeType}],_meta:{mimeType,isImage:!0}}}function audio(data,mimeType="audio/wav"){return{content:[{type:"audio",data,mimeType}],_meta:{mimeType,isAudio:!0}}}function binary(base64Data,mimeType){return{content:[{type:"text",text:base64Data}],_meta:{mimeType,isBinary:!0}}}function resource(uri,mimeTypeOrContent,text2){if(typeof mimeTypeOrContent=="object"&&mimeTypeOrContent!==null&&"content"in mimeTypeOrContent){let contentResult=mimeTypeOrContent,extractedText,extractedMimeType;if(contentResult._meta&&typeof contentResult._meta=="object"){let meta2=contentResult._meta;typeof meta2.mimeType=="string"&&(extractedMimeType=meta2.mimeType)}let first=contentResult.content?.[0];return first?.type==="text"&&"text"in first&&(extractedText=first.text),{content:[{type:"resource",resource:{uri,...extractedMimeType!==void 0&&{mimeType:extractedMimeType},text:extractedText??""}}]}}let mimeType=mimeTypeOrContent;return{content:[{type:"resource",resource:{uri,...mimeType!==void 0&&mimeType!==""&&{mimeType},text:text2??""}}]}}function error2(message){return{isError:!0,content:[{type:"text",text:message}]}}function object4(data){return Array.isArray(data)?array3(data):{content:[{type:"text",text:JSON.stringify(data,null,2)}],structuredContent:data,_meta:{mimeType:"application/json"}}}function array3(data){return{content:[{type:"text",text:JSON.stringify(data,null,2)}],structuredContent:data}}function widget(config2){let props=config2.props??config2.data??{},{output,message,metadata}=config2,result={content:message?[{type:"text",text:message}]:Array.isArray(output?.content)&&output.content.length>0?output.content:[{type:"text",text:""}]};return metadata!==void 0&&Object.keys(metadata).length>0&&(result._meta=metadata),output?.structuredContent!==void 0?result.structuredContent=output.structuredContent:Object.keys(props).length>0&&(result.structuredContent=props),result}function mix(...results){let withStructured=results.filter(result=>result.structuredContent!==void 0),structuredContent=withStructured.length>0?withStructured.map(result=>result.structuredContent).reduce((acc,value)=>({...acc,...typeof value=="object"&&value!==null?value:{}}),{}):void 0,withMeta=results.filter(result=>result._meta!==void 0),_meta=withMeta.length>0?withMeta.map(result=>result._meta).reduce((acc,value)=>({...acc,...value!==void 0?value:{}}),{}):void 0;return{content:results.flatMap(result=>result.content),...structuredContent!==void 0&&Object.keys(structuredContent).length>0&&{structuredContent},..._meta!==void 0&&Object.keys(_meta).length>0&&{_meta}}}export{MCPServer,SKILLS_EXTENSION_ID,acceptedContent,array3 as array,audio,binary,completable2 as completable,composeFetch,composeMiddleware,createMcpEventListenerEntry,createMcpMiddlewareEntry,createMcpMount,createRequestStateCodec,css,error2 as error,getRequestBag,hostValidationMiddleware,html,image,inputRequired,inputResponse,isBuilding,isInputRequiredResult,javascript,jsonBodyMiddleware,markdown,matchesPath,matchesPathPrefix,matchesPattern,mix,object4 as object,originValidationMiddleware,pathnameOf,registerSkills,registerViews,requestLogger,resource,text,widget,xml};
|
|
808
808
|
/*! Bundled license information:
|
|
809
809
|
|
|
810
810
|
@modelcontextprotocol/server/dist/src-Cqbh3MYc.mjs:
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import{b as ht,c as gt}from"./chunk-TCIRBQPM.js";import{a as v,b as Jn,c as Z,d as pe,e as Q,f as C,g as fe,h as me,i as he,j as ge,k as ye,l as yt,m as wt,o as Tt}from"./chunk-T4IONWAR.js";import{a as pt,b as ft,c as S,d as mt}from"./chunk-HAV435PF.js";import{a as o}from"./chunk-EI7MMDWY.js";var Gn=["inline","fullscreen","pip"],Yn=new Set(["inline","fullscreen","pip"]);function we(e){let t=e?.autoResize??!0,n=e?.displayModes===void 0?Gn:e.displayModes;if(!Array.isArray(n)||n.length===0)throw new Error('viewConfig.displayModes must be a non-empty array that includes "inline"');let r=new Set,s=[];for(let a of n){if(typeof a!="string"||!Yn.has(a))throw new Error(`viewConfig.displayModes contains invalid mode ${JSON.stringify(a)}; expected "inline", "fullscreen", or "pip"`);if(r.has(a))throw new Error(`viewConfig.displayModes contains duplicate mode "${a}"`);r.add(a),s.push(a)}if(!r.has("inline"))throw new Error('viewConfig.displayModes must include "inline"');let i=e?.preferredDisplayMode;if(i!==void 0&&i!=="inline"&&i!=="fullscreen")throw new Error('viewConfig.preferredDisplayMode must be "inline" or "fullscreen"');if(i!==void 0&&!r.has(i))throw new Error("viewConfig.preferredDisplayMode must belong to displayModes");return{...i!==void 0&&{preferredDisplayMode:i},autoResize:t,displayModes:s}}o(we,"normalizeViewConfig");import{localhostAllowedHostnames as Hn,localhostAllowedOrigins as Ms,McpServer as Es,ResourceTemplate as Ps,CLIENT_CAPABILITIES_META_KEY as ks,CLIENT_INFO_META_KEY as Ss,PROTOCOL_VERSION_META_KEY as Cs,isJSONRPCRequest as Bn,isInputRequiredResult as qn}from"@modelcontextprotocol/server";import{createServer as As}from"#mcp-use-node-http";import{Hono as Dn}from"hono";var bt="public, max-age=31536000, immutable",Xn="public, max-age=300";function be(e){return/^([a-z][a-z\d+.-]*):/i.exec(e)?.[1]?.toLowerCase()}o(be,"protocolOf");function Zn(e,t){return`${e==="/"?"":e}/_mcp-use/public/${t.split("/").map(r=>encodeURIComponent(r)).join("/")}`}o(Zn,"publicAssetPath");function Te(e){return be(e)===void 0}o(Te,"isLocalPublicSource");function Qn(e){return e[0]}o(Qn,"selectFaviconFromIcons");function er(e,t){if(e.startsWith("/")||e.includes("\\")||e.includes("?")||e.includes("#")||e.split("/").some(n=>n===""||n===".."))throw new TypeError(`${t} must be an http(s) URL, image data URL, or safe path relative to public/`)}o(er,"assertLocalPublicSource");function xt(e,t){let n=e.indexOf(",");if(n<0)throw new TypeError(`${t} must be a valid image data URL`);let r=e.slice(5,n),s=e.slice(n+1),i=r.split(";"),a=i[0]?.toLowerCase()??"";if(!a.startsWith("image/"))throw new TypeError(`${t} data URL must use an image MIME type`);try{if(i.includes("base64")){let d=atob(s);return{mimeType:a,bytes:Uint8Array.from(d,c=>c.charCodeAt(0))}}return{mimeType:a,bytes:new TextEncoder().encode(decodeURIComponent(s))}}catch{throw new TypeError(`${t} must be a valid image data URL`)}}o(xt,"parseDataImage");function Rt(e,t){if(typeof e!="string"||e.length===0)throw new TypeError(`${t} must be a non-empty string`);let n=be(e);if(n===void 0)return er(e,t),e;if(n==="data")return xt(e,t),e;if(n!=="http"&&n!=="https")throw new TypeError(`${t} must be an http(s) URL, image data URL, or safe path relative to public/`);try{new URL(e)}catch{throw new TypeError(`${t} must be a valid absolute http(s) URL`)}return e}o(Rt,"assertBrandingSource");function vt(e){let t;if(e.websiteUrl!==void 0){if(typeof e.websiteUrl!="string"||e.websiteUrl.length===0)throw new TypeError("websiteUrl must be a non-empty absolute http(s) URL");let d;try{d=new URL(e.websiteUrl)}catch{throw new TypeError("websiteUrl must be a non-empty absolute http(s) URL")}if(d.protocol!=="http:"&&d.protocol!=="https:")throw new TypeError("websiteUrl must be a non-empty absolute http(s) URL");t=e.websiteUrl}let n;if(e.icons!==void 0){if(!Array.isArray(e.icons))throw new TypeError("icons must be an array of MCP Icon objects");n=Object.freeze(e.icons.map((d,c)=>{if(typeof d!="object"||d===null)throw new TypeError(`icons[${c}] must be an MCP Icon object`);let u=d,l=Rt(u.src,`icons[${c}].src`),p=u.mimeType;if(p!==void 0&&(typeof p!="string"||!p.toLowerCase().startsWith("image/")))throw new TypeError(`icons[${c}].mimeType must be an image MIME type when provided`);let h=u.sizes;if(h!==void 0&&(!Array.isArray(h)||h.some(g=>typeof g!="string"||g.length===0)))throw new TypeError(`icons[${c}].sizes must be an array of non-empty strings when provided`);let f=h===void 0?void 0:h.map(g=>g),m=u.theme;if(m!==void 0&&m!=="light"&&m!=="dark")throw new TypeError(`icons[${c}].theme must be "light" or "dark" when provided`);return Object.freeze({src:l,...p!==void 0&&{mimeType:p},...f!==void 0&&{sizes:Object.freeze(f)},...m!==void 0&&{theme:m}})}))}let r=e.favicon===void 0?void 0:Rt(e.favicon,"favicon"),s=r===void 0?Qn(n??[]):void 0,i=r??s?.src,a=s?.mimeType??n?.find(d=>d.src===r)?.mimeType;return Object.freeze({...i!==void 0&&{favicon:i},...a!==void 0&&{faviconMimeType:a},...n!==void 0&&{icons:n},...t!==void 0&&{websiteUrl:t}})}o(vt,"normalizeServerBranding");function Re(e,t,n){return e.map(r=>({...r,src:t!==void 0&&Te(r.src)?`${S(t)}${Zn(n,r.src)}`:r.src,...r.sizes!==void 0&&{sizes:[...r.sizes]}}))}o(Re,"resolveImplementationIcons");function xe(e){return e.favicon!==void 0&&Te(e.favicon)||e.icons?.some(t=>Te(t.src))===!0}o(xe,"hasLocalBrandingAsset");function Mt(e,t){let n=e.favicon;if(n!==void 0)return async r=>{if(r.method!=="GET"&&r.method!=="HEAD")return new Response("Method Not Allowed",{status:405,headers:{Allow:"GET, HEAD"}});if(new URL(r.url).pathname!=="/favicon.ico")return new Response("Not Found",{status:404});let s=be(n);if(s==="http"||s==="https")return new Response(null,{status:307,headers:{Location:n,"Cache-Control":Xn}});if(s==="data"){let u=xt(n,"favicon");return new Response(r.method==="HEAD"?null:u.bytes.buffer,{status:200,headers:{"Content-Type":e.faviconMimeType??u.mimeType,"Cache-Control":bt,"X-Content-Type-Options":"nosniff"}})}let{join:i}=await import("path"),a=t.dev?i(t.projectRoot,"public"):i(t.projectRoot,".mcp-use/build/views/public"),d=await ht(a,n);if(d===null)return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});let c=await gt(d,{...t.deferCors===!0&&{deferCors:!0},...r.method==="HEAD"&&{head:!0}});return c.headers.set("Cache-Control",bt),c.headers.set("X-Content-Type-Options","nosniff"),e.faviconMimeType!==void 0&&c.headers.set("Content-Type",e.faviconMimeType),c}}o(Mt,"createFaviconHandler");function tr(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.createTokenVerifier=="function"&&typeof t.mapAuthInfo=="function"&&(typeof t.oauthMetadata=="object"&&t.oauthMetadata!==null||typeof t.oauthMetadata=="function")}o(tr,"isOAuthProviderLike");function Et(e){if(e.mixedAuth!==void 0&&typeof e.mixedAuth!="boolean")throw new TypeError("mixedAuth must be a boolean");if(e.mixedAuth===!0&&!tr(e.oauth))throw new TypeError("mixedAuth requires an OAuth provider; set oauth on the server");if(e.basePath!==void 0){if(typeof e.basePath!="string")throw new TypeError("basePath must be an absolute URL pathname without empty segments, trailing slash, query, fragment, or whitespace");let{basePath:t}=e;if(!t.startsWith("/")||t.includes("?")||t.includes("#")||/\s/.test(t)||t.includes("//")||t.length>1&&t.endsWith("/"))throw new TypeError("basePath must be an absolute URL pathname without empty segments, trailing slash, query, fragment, or whitespace")}if(e.port!==void 0&&(typeof e.port!="number"||!Number.isInteger(e.port)||e.port<0||e.port>65535))throw new TypeError("port must be an integer between 0 and 65535");if(e.skills!==void 0&&typeof e.skills!="boolean"){if(typeof e.skills!="object"||e.skills===null||Array.isArray(e.skills))throw new TypeError("skills must be a boolean or configuration object");let t=e.skills.directory;if(t!==void 0&&typeof t!="string")throw new TypeError("skills.directory must be a string when provided")}}o(Et,"assertServerConfig");var nr="127.0.0.1";function Pt(e,t,n=process.env){if(e!==void 0)return e;let r=n.HOST?.trim();return r!==void 0&&r!==""?r:t??nr}o(Pt,"resolveListenHost");function kt(e,t,n=process.env){if(e!==void 0)return e;let r=rr(n.PORT);return r!==void 0?r:t??3e3}o(kt,"resolveListenPort");function rr(e){if(e===void 0||e.trim()==="")return;let t=Number(e);return Number.isInteger(t)&&t>=0&&t<=65535?t:void 0}o(rr,"parsePort");import{isBufferedResponse as or}from"#mcp-use-buffered-response";function Ct(e,t){return async(n,r,s)=>{typeof s=="function"&&(s=void 0);let i=!1,a=new AbortController;r.on("close",()=>{i||a.abort()}),r.destroyed===!0&&a.abort();let d,c;try{d=await sr(n,s,{signal:a.signal}),c=await e.fetch(d,{...n.auth!==void 0&&{authInfo:n.auth},...s!==void 0&&{parsedBody:s}})}catch(g){try{t?.onerror?.(g instanceof Error?g:new Error(String(g)))}catch{}c=ar(ir(s))}let u={},l=c.headers.getSetCookie?.();for(let[g,y]of c.headers){if(g==="set-cookie"&&l?.length){u[g]=l;continue}u[g]=y}if(r.writeHead(c.status,u),c.body===null){i=!0,r.end();return}if(or(c,d)){try{let g=new Uint8Array(await c.arrayBuffer());i=!0,r.end(g)}catch{i=!0,r.end()}return}let p,h=o(()=>{p?.(),p=void 0},"releaseDrainWait"),f=o(()=>new Promise(g=>{p=g}),"waitForDrain");r.on("drain",h);let m=new Promise(g=>{a.signal.addEventListener("abort",()=>g(),{once:!0})});try{for await(let g of c.body){if(a.signal.aborted)break;let y=g instanceof Uint8Array?g:new Uint8Array(g);r.write(y)===!1&&await Promise.race([f(),m])}}catch{}i=!0,r.end()}}o(Ct,"toNodeHandler");async function sr(e,t,n){let r=(e.method??"GET").toUpperCase(),i=`http://${St(e.headers.host)??St(e.headers[":authority"])??"localhost"}${e.url??"/"}`,a=new Headers;for(let[c,u]of Object.entries(e.headers))if(!(u===void 0||c.startsWith(":")))if(Array.isArray(u))for(let l of u)a.append(c,l);else a.set(c,u);let d;if(r!=="GET"&&r!=="HEAD")if(t===void 0){let c=new TextDecoder,u="";for await(let l of e)u+=typeof l=="string"?l:c.decode(l,{stream:!0});u+=c.decode(),u.length>0&&(d=u)}else{let c=JSON.stringify(t);a.delete("content-encoding"),a.delete("transfer-encoding"),c===void 0?a.delete("content-length"):(d=c,a.set("content-length",String(new TextEncoder().encode(c).byteLength)))}return new Request(i,{method:r,headers:a,...n?.signal!==void 0&&{signal:n.signal},...d!==void 0&&{body:d}})}o(sr,"toWebRequest");function St(e){return Array.isArray(e)?e[0]:e}o(St,"singleHeaderValue");function ir(e){if(e===null||typeof e!="object"||Array.isArray(e))return null;let{method:t,id:n}=e;return typeof t!="string"?null:typeof n=="string"||typeof n=="number"?n:null}o(ir,"echoableRequestId");function ar(e){return Response.json({jsonrpc:"2.0",error:{code:-32603,message:"Internal server error"},id:e},{status:500})}o(ar,"internalServerErrorResponse");import{CLIENT_CAPABILITIES_META_KEY as lr,CLIENT_INFO_META_KEY as pr}from"@modelcontextprotocol/server";import{HonoRequest as fr}from"hono/request";import{CLIENT_CAPABILITIES_META_KEY as dr}from"@modelcontextprotocol/server";var At="io.modelcontextprotocol/ui",ee="text/html;profile=mcp-app",cr="ui://views/";var te="ui/resourceUri";function I(e){return`${cr}${e}.html`}o(I,"viewResourceUri");var ur=new WeakMap;function Ot(e,t){ur.set(e,t)}o(Ot,"stashClientCapabilities");function Ut(e){if(typeof e!="object"||e===null)return;let t=e.params;if(typeof t!="object"||t===null)return;let n=t._meta;if(typeof n!="object"||n===null)return;let r=n[dr];if(!(typeof r!="object"||r===null))return r}o(Ut,"extractClientCapabilitiesFromBody");function ne(e){let t=e?.extensions;if(t===void 0)return!1;let n=t[At];if(typeof n!="object"||n===null)return!1;let r=n.mimeTypes;return Array.isArray(r)?r.includes(ee):!1}o(ne,"supportsViews");function mr(e){if(e===void 0||e.extra===void 0||e.expiresAt===void 0)throw new Error("OAuth callback did not receive mapped AuthInfo.extra")}o(mr,"requireOAuthAuthInfo");function E(e){return typeof e=="string"?e:void 0}o(E,"stringValue");function _t(e){return typeof e=="string"||typeof e=="number"&&Number.isFinite(e)?e:void 0}o(_t,"coordinateValue");function hr(e){if(e===void 0)return;let t=E(e["openai/locale"])??E(e["webplus/i18n"]),n=E(e["openai/userAgent"]),r=E(e["openai/subject"]),s=E(e["openai/session"]),i=E(e["openai/organization"]),a=e["openai/userLocation"],d;if(typeof a=="object"&&a!==null&&!Array.isArray(a)){let c=a,u={city:E(c.city),region:E(c.region),country:E(c.country),timezone:E(c.timezone),latitude:_t(c.latitude),longitude:_t(c.longitude)},l=Object.entries(u).filter(p=>p[1]!==void 0);l.length>0&&(d=Object.fromEntries(l))}if(!(t===void 0&&n===void 0&&d===void 0&&r===void 0&&s===void 0&&i===void 0))return{...t!==void 0&&{locale:t},...n!==void 0&&{userAgent:n},...d!==void 0&&{location:d},...r!==void 0&&{subject:r},...s!==void 0&&{conversationId:s},...i!==void 0&&{organizationId:i}}}o(hr,"normalizeUserContext");function It(e){return e.mcpReq.envelope}o(It,"requestEnvelope");function ve(e){return{...It(e)?.[pr]??{}}}o(ve,"requestClientInfo");function gr(e){let n={...It(e)?.[lr]??{}},r=ve(e),s=hr(e.mcpReq._meta);return{can(i){return Object.hasOwn(n,i)},capabilities(){return{...n}},extension(i){let a=n.extensions?.[i];return a===void 0?void 0:{...a}},info(){return{...r}},user(){return s===void 0?void 0:{...s,...s.location!==void 0&&{location:{...s.location}}}},supportsViews(){return ne(n)}}}o(gr,"toClientContext");function B(e){let t=e.http?.req,n=t===void 0?void 0:v(t).honoContext,r=n?.req??(t===void 0?void 0:new fr(t)),s={signal:e.mcpReq.signal,...r!==void 0&&{request:r},...e.mcpReq.inputResponses!==void 0&&{inputResponses:e.mcpReq.inputResponses},client:gr(e),requestState:o(()=>e.mcpReq.requestState(),"requestState"),async sendNotification(i,a){await e.mcpReq.notify({method:i,...a!==void 0&&{params:a}})},async reportProgress(i,a,d){let c=e.mcpReq._meta?.progressToken;return c===void 0?!1:(await e.mcpReq.notify({method:"notifications/progress",params:{progressToken:c,progress:i,...a!==void 0&&{total:a},...d!==void 0&&{message:d}}}),!0)},async sendLog(i,a,d){await e.mcpReq.notify({method:"notifications/message",params:{level:i,data:a,...d!==void 0&&{logger:d}}})}};return n!==void 0?Object.assign(n,s):{...s,...r!==void 0&&{req:r}}}o(B,"toRequestContext");function yr(e){if(e===null||typeof e!="object")return!1;let t=e;return typeof t.accessToken=="string"&&Array.isArray(t.scopes)&&t.scopes.every(n=>typeof n=="string")&&(t.expiresAt===void 0||typeof t.expiresAt=="number")}o(yr,"isOAuthUpstreamToken");function Me(e){let t=e.http?.authInfo;return mr(t),Object.assign(B(e),{auth:{user:t.extra.user,payload:t.extra.payload,accessToken:t.token,scopes:[...t.scopes],permissions:[...t.extra.permissions],...t.clientId.length>0&&{clientId:t.clientId},expiresAt:t.expiresAt,...t.resource!==void 0&&{resource:t.resource},...yr(t.extra.upstream)&&{upstream:{accessToken:t.extra.upstream.accessToken,scopes:[...t.extra.upstream.scopes],...t.extra.upstream.expiresAt!==void 0&&{expiresAt:t.extra.upstream.expiresAt}}}}})}o(Me,"toAuthenticatedRequestContext");import{isInputRequiredResult as wr}from"@modelcontextprotocol/server";function Tr(e){return"contents"in e&&Array.isArray(e.contents)}o(Tr,"isReadResourceResult");function br(e){return"messages"in e&&Array.isArray(e.messages)}o(br,"isGetPromptResult");function Ee(e,t){if(Tr(e))return e;let n=e._meta&&typeof e._meta=="object"&&typeof e._meta.mimeType=="string"?e._meta.mimeType:void 0,r=[];for(let s of e.content??[]){let i=Rr(s,t,n);i!==void 0&&r.push(i)}return r.length===0&&e.structuredContent!==void 0&&r.push({uri:t,mimeType:"application/json",text:JSON.stringify(e.structuredContent)}),r.length===0&&r.push({uri:t,mimeType:"text/plain",text:""}),{contents:r}}o(Ee,"toResourceResult");function Rr(e,t,n){if(e.type==="text")return{uri:t,mimeType:n??"text/plain",text:e.text};if(e.type==="image"||e.type==="audio")return{uri:t,mimeType:e.mimeType,blob:e.data};if(e.type==="resource")return{...e.resource}}o(Rr,"contentBlockToResourceContents");function Lt(e){if(wr(e)||br(e))return e;let t=(e.content??[]).map(n=>({role:"user",content:n}));return t.length===0&&e.structuredContent!==void 0&&t.push({role:"user",content:{type:"text",text:JSON.stringify(e.structuredContent)}}),t.length===0&&t.push({role:"user",content:{type:"text",text:""}}),{messages:t}}o(Lt,"toPromptResult");import{inheritBufferedResponse as xr}from"#mcp-use-buffered-response";var vr=["GET","HEAD","POST","OPTIONS"],Mr=["Content-Type","Authorization","mcp-protocol-version","mcp-method","mcp-name"];function Er(e,t){return e===void 0?t:typeof e=="function"?e(t):e==="*"?"*":Array.isArray(e)?t!==null&&e.includes(t)?t:null:e}o(Er,"resolveAllowedOrigin");function Pr(e,t){if(t.headers.has("Access-Control-Allow-Origin"))return;let n=t.headers.get("Origin"),r=Er(e.origin,n);if(r===null)return;let s={"Access-Control-Allow-Origin":r,"Access-Control-Allow-Methods":e.methods.join(", "),"Access-Control-Allow-Headers":e.allowedHeaders.join(", ")};return e.credentials&&(s["Access-Control-Allow-Credentials"]="true"),r!=="*"&&(s.Vary="Origin"),s}o(Pr,"corsHeaders");function kr(e,t){if(e.headers.has("Access-Control-Allow-Origin"))return e;let n=new Headers(e.headers);return new Headers(t).forEach((s,i)=>{n.set(i,s)}),xr(e,new Response(e.body,{status:e.status,statusText:e.statusText,headers:n}))}o(kr,"mergeCorsHeaders");function $t(e){if(!(e.enabled!==!1))return async(r,s)=>s();let n={...e.origin!==void 0&&{origin:e.origin},methods:e.methods??vr,allowedHeaders:e.allowedHeaders??Mr,credentials:e.credentials??!1};return async(r,s)=>{let i=Pr(n,r);if(i===void 0)return s();if(r.method==="OPTIONS")return new Response(null,{status:204,headers:i});let a=await s();return kr(a,i)}}o($t,"corsFetchMiddleware");function jt(e){return e!==void 0&&e.enabled!==!1}o(jt,"isGlobalCorsEnabled");import{CallToolResultSchema as Sr,GetPromptResultSchema as Cr,ListPromptsResultSchema as Ar,ListResourcesResultSchema as Or,ListToolsResultSchema as Ur,ReadResourceResultSchema as _r}from"@modelcontextprotocol/core";import{isInputRequiredResult as Ir}from"@modelcontextprotocol/server";var Lr=["tools/call","tools/list","resources/read","resources/list","prompts/get","prompts/list"];function Ht(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("[mcp-use] MCP middleware received an invalid downstream request");return{...e,params:t}}o(Ht,"withMcpMiddlewareParams");function Se(e,t){let n=qr(e),r=t;if(n!=="*"&&!$r(n))throw new TypeError(`Unsupported MCP middleware pattern "${e}". Use an exact MCP method or "mcp:*".`);return n==="*"?{pattern:n,handler:o(async(s,i)=>{let a=!1,d;if(await r(s,async()=>{d=await i(),a=!0}),!a)throw new Error(`Wildcard MCP middleware "${n}" must call next()`);return d},"handler")}:{pattern:n,handler:o((s,i)=>r(s,i),"handler")}}o(Se,"createMcpMiddlewareEntry");function Ce(e,t){let{pattern:n,phase:r}=Hr(e),s=t;return{pattern:n,phase:r,handler:o((i,a)=>s(i,a),"handler")}}o(Ce,"createMcpEventListenerEntry");function j(e,t){if(e==="*")return!0;if(e.endsWith("/*")){let n=e.slice(0,-1);return t.startsWith(n)}return e===t}o(j,"matchesPattern");function $r(e){return Lr.some(t=>t===e)}o($r,"isMcpMiddlewareMethod");function qt(e,t,n){let r=e.filter(s=>j(s.pattern,t));return r.length===0?s=>n():s=>{let i=-1,a=o(d=>d<=i?Promise.reject(new Error("next() called multiple times")):(i=d,d===r.length?n():r[d].handler(s,()=>a(d+1))),"dispatch");return a(0)}}o(qt,"composeMiddleware");function jr(e){return Object.freeze({method:e.method,params:Object.freeze({...e.params}),...e.request!==void 0&&{request:e.request},...e.req!==void 0&&{req:e.req},...e.session!==void 0&&{session:Object.freeze({...e.session})},...e.auth!==void 0&&{auth:e.auth},state:new Map(e.state)})}o(jr,"freezeMiddlewareContext");async function Dt(e,t,n,r,s){Nt(t,n,"before",r);let a=await qt(e,n,s)(r);return Nr(n,a),Nt(t,n,"complete",r,a),a}o(Dt,"runMcpOperation");function Nr(e,t){if((e==="tools/call"||e==="resources/read"||e==="prompts/get")&&Ir(t))return;let n=(()=>{switch(e){case"tools/call":return ke(e,t,"content"),Sr.safeParse(t);case"tools/list":return Pe(e,t),Ur.safeParse({tools:t});case"resources/read":return ke(e,t,"contents"),_r.safeParse(t);case"resources/list":return Pe(e,t),Or.safeParse({resources:t});case"prompts/get":return ke(e,t,"messages"),Cr.safeParse(t);case"prompts/list":return Pe(e,t),Ar.safeParse({prompts:t});default:throw new TypeError(`Unsupported MCP middleware method "${e}"`)}})();if(!n.success)throw new TypeError(`[mcp-use] ${e} middleware returned an invalid result: ${n.error.message}`)}o(Nr,"assertValidMiddlewareResult");function Pe(e,t){if(!Array.isArray(t))throw new TypeError(`[mcp-use] ${e} middleware returned an invalid result: expected an array`)}o(Pe,"assertArrayResult");function ke(e,t,n){if(typeof t!="object"||t===null||!Array.isArray(t[n]))throw new TypeError(`[mcp-use] ${e} middleware returned an invalid result: expected a ${n} array`)}o(ke,"assertArrayProperty");function Nt(e,t,n,r,s){let i=jr(r);for(let a of e)if(!(a.phase!==n||!j(a.pattern,t)))try{a.handler(i,s)}catch(d){console.error(`[mcp-use] MCP event listener for "${a.pattern}" (${n}) threw:`,d)}}o(Nt,"dispatchMcpEvents");function Hr(e){let t=e.startsWith("mcp:")?e.slice(4):e;return t.endsWith(":complete")?{pattern:t.slice(0,-9),phase:"complete"}:{pattern:t,phase:"before"}}o(Hr,"parseMcpPattern");function qr(e){return e.startsWith("mcp:")?e.slice(4):e}o(qr,"normalizeMcpMiddlewarePattern");import{CLIENT_INFO_META_KEY as Dr,isJSONRPCRequest as Ft}from"@modelcontextprotocol/server";import{isBufferedResponse as Fr,trackBufferedResponse as Vr}from"#mcp-use-buffered-response";function Br(){return typeof process>"u"||process.env?.NO_COLOR!==void 0?!1:process.stdout?.isTTY===!0}o(Br,"colorsEnabled");function k(e,t){return n=>Br()?`\x1B[${e}m${n}\x1B[${t}m`:n}o(k,"ansi");var Oe=k(1,22),Ue=k(2,22),oe=k(31,39),Wt=k(32,39),P=k(33,39),zr=k(34,39),Kt=k(35,39),z=k(36,39),Wr=k(90,39);function Kr(e){let t=typeof process>"u"?void 0:process.env?.MCP_USE_LOG_LEVEL?.toLowerCase();return t==="info"||t==="debug"||t==="trace"?t:e??"info"}o(Kr,"resolveLogLevel");function _e(e){if(!(e===void 0||typeof e.name!="string"))return typeof e.version=="string"&&e.version!==""?`${e.name}/${e.version}`:e.name}o(_e,"formatClientInfo");var Jt={initialize:o(e=>({subject:_e(e.clientInfo)}),"initialize"),ping:o(()=>({}),"ping"),"server/discover":o(()=>({}),"server/discover"),"completion/complete":o(e=>({subject:e.ref.type==="ref/prompt"?e.ref.name:e.ref.uri,input:e.argument}),"completion/complete"),"logging/setLevel":o(e=>({subject:e.level}),"logging/setLevel"),"prompts/get":o(e=>({subject:e.name,input:e.arguments}),"prompts/get"),"prompts/list":o(()=>({}),"prompts/list"),"resources/list":o(()=>({}),"resources/list"),"resources/templates/list":o(()=>({}),"resources/templates/list"),"resources/read":o(e=>({subject:e.uri}),"resources/read"),"resources/subscribe":o(e=>({subject:e.uri}),"resources/subscribe"),"resources/unsubscribe":o(e=>({subject:e.uri}),"resources/unsubscribe"),"subscriptions/listen":o(()=>({}),"subscriptions/listen"),"tools/call":o(e=>({subject:e.name,input:e.arguments}),"tools/call"),"tools/list":o(()=>({}),"tools/list"),"sampling/createMessage":o(()=>({}),"sampling/createMessage"),"elicitation/create":o(()=>({}),"elicitation/create"),"roots/list":o(()=>({}),"roots/list")};function Jr(e){return Object.prototype.hasOwnProperty.call(Jt,e)}o(Jr,"isKnownMethod");function Gr(e){if(!Jr(e.method))return{};try{let t=Jt[e.method],n=t(e.params);return typeof n.subject=="string"||n.subject===void 0?n:{}}catch{return{}}}o(Gr,"formatDetail");var Vt=80;function Bt(e){let t;try{t=JSON.stringify(e)??String(e)}catch{t=String(e)}return t.length>Vt?`${t.slice(0,Vt)}...`:t}o(Bt,"inlineJson");function Yr(e){let t=e.params?._meta;if(t===void 0)return;let n=t[Dr];if(!(typeof n!="object"||n===null||typeof n.name!="string"))return _e(n)}o(Yr,"formatClientIdentity");function Xr(e){let t=Yr(e);if(t!==void 0)return t;if(e.method==="initialize")try{return _e(e.params.clientInfo)}catch{return}}o(Xr,"formatMcpClient");function N(e){return e.replace(/[\u0000-\u001F\u007F-\u009F]+/g," ")}o(N,"sanitize");function Zr(e){return e.startsWith("tools/")?z:e.startsWith("resources/")?Wt:e.startsWith("prompts/")?Kt:e==="initialize"||e==="ping"?Wr:zr}o(Zr,"methodStyle");function Qr(e,t,n,r){if(t!==n)return{method:e,client:void 0,mcpRequest:void 0,streaming:!1};let s=Array.isArray(r)?r.filter(Ft):Ft(r)?[r]:[],i=s[0];return i===void 0?{method:e,client:void 0,mcpRequest:void 0,streaming:!1}:{method:s.length===1?N(i.method):`batch(${s.map(d=>N(d.method)).join(",")})`,client:Xr(i)??"unknown",mcpRequest:i,streaming:i.method==="subscriptions/listen"}}o(Qr,"describeRequest");var eo=new Set(["authorization","proxy-authorization","cookie","set-cookie","x-api-key"]);function zt(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,eo.has(t.toLowerCase())?"[REDACTED]":n]))}o(zt,"redactHeaders");async function to(e,t){if(!e.body)return{errorMessage:null};let n;try{let d=Fr(e,t),c=e.clone();d&&Vr(t,e),n=await c.text()}catch{return{errorMessage:null}}if(!n)return{errorMessage:null};let r=(e.headers.get("content-type")??"").includes("text/event-stream"),s=[],i=o(d=>{try{s.push(JSON.parse(d))}catch{}},"tryParse");if(r){for(let d of n.split(/\r?\n/))if(d.startsWith("data:")){let c=d.slice(5).trim();c&&i(c)}}else i(n);let a;for(let d of s){if(d===null||typeof d!="object")continue;let c=d;if(typeof c.error?.message=="string")return{errorMessage:c.error.message};if(c.result?.isError===!0){let l=(Array.isArray(c.result.content)?c.result.content:[]).find(p=>p?.type==="text"&&typeof p.text=="string");return{errorMessage:l?String(l.text):"tool error"}}"result"in c&&(a=c.result)}return{errorMessage:null,result:a}}o(to,"extractResponseOutcome");function no(e){if(e===null||typeof e!="object")return e;let{structuredContent:t,content:n}=e;if(t!==void 0)return t;if(Array.isArray(n)){let[r]=n;if(n.length===1&&r?.type==="text")return r.text}return n}o(no,"compactToolResult");function re(e){function t(n){return typeof n=="string"&&n.length>100?`${n.slice(0,100)}...`:Array.isArray(n)?n.map(t):n!==null&&typeof n=="object"?Object.fromEntries(Object.entries(n).map(([r,s])=>[r,t(s)])):n}o(t,"truncate");try{return JSON.stringify(t(e),null,2)}catch{return String(e)}}o(re,"formatForDump");var Ae=1e4;async function ro(e,t,n,r){console.log(`
|
|
1
|
+
import{b as ht,c as gt}from"./chunk-TCIRBQPM.js";import{a as v,b as Jn,c as Z,d as pe,e as Q,f as C,g as fe,h as me,i as he,j as ge,k as ye,l as yt,m as wt,o as Tt}from"./chunk-T4IONWAR.js";import{a as pt,b as ft,c as S,d as mt}from"./chunk-HAV435PF.js";import{a as o}from"./chunk-EI7MMDWY.js";var Gn=["inline","fullscreen","pip"],Yn=new Set(["inline","fullscreen","pip"]);function we(e){let t=e?.autoResize??!0,n=e?.displayModes===void 0?Gn:e.displayModes;if(!Array.isArray(n)||n.length===0)throw new Error('viewConfig.displayModes must be a non-empty array that includes "inline"');let r=new Set,s=[];for(let a of n){if(typeof a!="string"||!Yn.has(a))throw new Error(`viewConfig.displayModes contains invalid mode ${JSON.stringify(a)}; expected "inline", "fullscreen", or "pip"`);if(r.has(a))throw new Error(`viewConfig.displayModes contains duplicate mode "${a}"`);r.add(a),s.push(a)}if(!r.has("inline"))throw new Error('viewConfig.displayModes must include "inline"');let i=e?.preferredDisplayMode;if(i!==void 0&&i!=="inline"&&i!=="fullscreen")throw new Error('viewConfig.preferredDisplayMode must be "inline" or "fullscreen"');if(i!==void 0&&!r.has(i))throw new Error("viewConfig.preferredDisplayMode must belong to displayModes");return{...i!==void 0&&{preferredDisplayMode:i},autoResize:t,displayModes:s}}o(we,"normalizeViewConfig");import{localhostAllowedHostnames as Dn,localhostAllowedOrigins as Ms,McpServer as Es,ResourceTemplate as Ps,CLIENT_CAPABILITIES_META_KEY as ks,CLIENT_INFO_META_KEY as Ss,PROTOCOL_VERSION_META_KEY as Cs,isJSONRPCRequest as Bn,isInputRequiredResult as Hn}from"@modelcontextprotocol/server";import{createServer as As}from"#mcp-use-node-http";import{Hono as qn}from"hono";var bt="public, max-age=31536000, immutable",Xn="public, max-age=300";function be(e){return/^([a-z][a-z\d+.-]*):/i.exec(e)?.[1]?.toLowerCase()}o(be,"protocolOf");function Zn(e,t){return`${e==="/"?"":e}/_mcp-use/public/${t.split("/").map(r=>encodeURIComponent(r)).join("/")}`}o(Zn,"publicAssetPath");function Te(e){return be(e)===void 0}o(Te,"isLocalPublicSource");function Qn(e){return e[0]}o(Qn,"selectFaviconFromIcons");function er(e,t){if(e.startsWith("/")||e.includes("\\")||e.includes("?")||e.includes("#")||e.split("/").some(n=>n===""||n===".."))throw new TypeError(`${t} must be an http(s) URL, image data URL, or safe path relative to public/`)}o(er,"assertLocalPublicSource");function xt(e,t){let n=e.indexOf(",");if(n<0)throw new TypeError(`${t} must be a valid image data URL`);let r=e.slice(5,n),s=e.slice(n+1),i=r.split(";"),a=i[0]?.toLowerCase()??"";if(!a.startsWith("image/"))throw new TypeError(`${t} data URL must use an image MIME type`);try{if(i.includes("base64")){let d=atob(s);return{mimeType:a,bytes:Uint8Array.from(d,c=>c.charCodeAt(0))}}return{mimeType:a,bytes:new TextEncoder().encode(decodeURIComponent(s))}}catch{throw new TypeError(`${t} must be a valid image data URL`)}}o(xt,"parseDataImage");function Rt(e,t){if(typeof e!="string"||e.length===0)throw new TypeError(`${t} must be a non-empty string`);let n=be(e);if(n===void 0)return er(e,t),e;if(n==="data")return xt(e,t),e;if(n!=="http"&&n!=="https")throw new TypeError(`${t} must be an http(s) URL, image data URL, or safe path relative to public/`);try{new URL(e)}catch{throw new TypeError(`${t} must be a valid absolute http(s) URL`)}return e}o(Rt,"assertBrandingSource");function vt(e){let t;if(e.websiteUrl!==void 0){if(typeof e.websiteUrl!="string"||e.websiteUrl.length===0)throw new TypeError("websiteUrl must be a non-empty absolute http(s) URL");let d;try{d=new URL(e.websiteUrl)}catch{throw new TypeError("websiteUrl must be a non-empty absolute http(s) URL")}if(d.protocol!=="http:"&&d.protocol!=="https:")throw new TypeError("websiteUrl must be a non-empty absolute http(s) URL");t=e.websiteUrl}let n;if(e.icons!==void 0){if(!Array.isArray(e.icons))throw new TypeError("icons must be an array of MCP Icon objects");n=Object.freeze(e.icons.map((d,c)=>{if(typeof d!="object"||d===null)throw new TypeError(`icons[${c}] must be an MCP Icon object`);let u=d,l=Rt(u.src,`icons[${c}].src`),p=u.mimeType;if(p!==void 0&&(typeof p!="string"||!p.toLowerCase().startsWith("image/")))throw new TypeError(`icons[${c}].mimeType must be an image MIME type when provided`);let h=u.sizes;if(h!==void 0&&(!Array.isArray(h)||h.some(g=>typeof g!="string"||g.length===0)))throw new TypeError(`icons[${c}].sizes must be an array of non-empty strings when provided`);let f=h===void 0?void 0:h.map(g=>g),m=u.theme;if(m!==void 0&&m!=="light"&&m!=="dark")throw new TypeError(`icons[${c}].theme must be "light" or "dark" when provided`);return Object.freeze({src:l,...p!==void 0&&{mimeType:p},...f!==void 0&&{sizes:Object.freeze(f)},...m!==void 0&&{theme:m}})}))}let r=e.favicon===void 0?void 0:Rt(e.favicon,"favicon"),s=r===void 0?Qn(n??[]):void 0,i=r??s?.src,a=s?.mimeType??n?.find(d=>d.src===r)?.mimeType;return Object.freeze({...i!==void 0&&{favicon:i},...a!==void 0&&{faviconMimeType:a},...n!==void 0&&{icons:n},...t!==void 0&&{websiteUrl:t}})}o(vt,"normalizeServerBranding");function Re(e,t,n){return e.map(r=>({...r,src:t!==void 0&&Te(r.src)?`${S(t)}${Zn(n,r.src)}`:r.src,...r.sizes!==void 0&&{sizes:[...r.sizes]}}))}o(Re,"resolveImplementationIcons");function xe(e){return e.favicon!==void 0&&Te(e.favicon)||e.icons?.some(t=>Te(t.src))===!0}o(xe,"hasLocalBrandingAsset");function Mt(e,t){let n=e.favicon;if(n!==void 0)return async r=>{if(r.method!=="GET"&&r.method!=="HEAD")return new Response("Method Not Allowed",{status:405,headers:{Allow:"GET, HEAD"}});if(new URL(r.url).pathname!=="/favicon.ico")return new Response("Not Found",{status:404});let s=be(n);if(s==="http"||s==="https")return new Response(null,{status:307,headers:{Location:n,"Cache-Control":Xn}});if(s==="data"){let u=xt(n,"favicon");return new Response(r.method==="HEAD"?null:u.bytes.buffer,{status:200,headers:{"Content-Type":e.faviconMimeType??u.mimeType,"Cache-Control":bt,"X-Content-Type-Options":"nosniff"}})}let{join:i}=await import("path"),a=t.dev?i(t.projectRoot,"public"):i(t.projectRoot,".mcp-use/build/views/public"),d=await ht(a,n);if(d===null)return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});let c=await gt(d,{...t.deferCors===!0&&{deferCors:!0},...r.method==="HEAD"&&{head:!0}});return c.headers.set("Cache-Control",bt),c.headers.set("X-Content-Type-Options","nosniff"),e.faviconMimeType!==void 0&&c.headers.set("Content-Type",e.faviconMimeType),c}}o(Mt,"createFaviconHandler");function tr(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.createTokenVerifier=="function"&&typeof t.mapAuthInfo=="function"&&(typeof t.oauthMetadata=="object"&&t.oauthMetadata!==null||typeof t.oauthMetadata=="function")}o(tr,"isOAuthProviderLike");function Et(e){if(e.mixedAuth!==void 0&&typeof e.mixedAuth!="boolean")throw new TypeError("mixedAuth must be a boolean");if(e.mixedAuth===!0&&!tr(e.oauth))throw new TypeError("mixedAuth requires an OAuth provider; set oauth on the server");if(e.basePath!==void 0){if(typeof e.basePath!="string")throw new TypeError("basePath must be an absolute URL pathname without empty segments, trailing slash, query, fragment, or whitespace");let{basePath:t}=e;if(!t.startsWith("/")||t.includes("?")||t.includes("#")||/\s/.test(t)||t.includes("//")||t.length>1&&t.endsWith("/"))throw new TypeError("basePath must be an absolute URL pathname without empty segments, trailing slash, query, fragment, or whitespace")}if(e.port!==void 0&&(typeof e.port!="number"||!Number.isInteger(e.port)||e.port<0||e.port>65535))throw new TypeError("port must be an integer between 0 and 65535");if(e.skills!==void 0&&typeof e.skills!="boolean"){if(typeof e.skills!="object"||e.skills===null||Array.isArray(e.skills))throw new TypeError("skills must be a boolean or configuration object");let t=e.skills.directory;if(t!==void 0&&typeof t!="string")throw new TypeError("skills.directory must be a string when provided")}}o(Et,"assertServerConfig");var nr="127.0.0.1";function Pt(e,t,n=process.env){if(e!==void 0)return e;let r=n.HOST?.trim();return r!==void 0&&r!==""?r:t??nr}o(Pt,"resolveListenHost");function kt(e,t,n=process.env){if(e!==void 0)return e;let r=rr(n.PORT);return r!==void 0?r:t??3e3}o(kt,"resolveListenPort");function rr(e){if(e===void 0||e.trim()==="")return;let t=Number(e);return Number.isInteger(t)&&t>=0&&t<=65535?t:void 0}o(rr,"parsePort");import{isBufferedResponse as or}from"#mcp-use-buffered-response";function Ct(e,t){return async(n,r,s)=>{typeof s=="function"&&(s=void 0);let i=!1,a=new AbortController;r.on("close",()=>{i||a.abort()}),r.destroyed===!0&&a.abort();let d,c;try{d=await sr(n,s,{signal:a.signal}),c=await e.fetch(d,{...n.auth!==void 0&&{authInfo:n.auth},...s!==void 0&&{parsedBody:s}})}catch(g){try{t?.onerror?.(g instanceof Error?g:new Error(String(g)))}catch{}c=ar(ir(s))}let u={},l=c.headers.getSetCookie?.();for(let[g,y]of c.headers){if(g==="set-cookie"&&l?.length){u[g]=l;continue}u[g]=y}if(r.writeHead(c.status,u),c.body===null){i=!0,r.end();return}if(or(c,d)){try{let g=new Uint8Array(await c.arrayBuffer());i=!0,r.end(g)}catch{i=!0,r.end()}return}let p,h=o(()=>{p?.(),p=void 0},"releaseDrainWait"),f=o(()=>new Promise(g=>{p=g}),"waitForDrain");r.on("drain",h);let m=new Promise(g=>{a.signal.addEventListener("abort",()=>g(),{once:!0})});try{for await(let g of c.body){if(a.signal.aborted)break;let y=g instanceof Uint8Array?g:new Uint8Array(g);r.write(y)===!1&&await Promise.race([f(),m])}}catch{}i=!0,r.end()}}o(Ct,"toNodeHandler");async function sr(e,t,n){let r=(e.method??"GET").toUpperCase(),i=`http://${St(e.headers.host)??St(e.headers[":authority"])??"localhost"}${e.url??"/"}`,a=new Headers;for(let[c,u]of Object.entries(e.headers))if(!(u===void 0||c.startsWith(":")))if(Array.isArray(u))for(let l of u)a.append(c,l);else a.set(c,u);let d;if(r!=="GET"&&r!=="HEAD")if(t===void 0){let c=new TextDecoder,u="";for await(let l of e)u+=typeof l=="string"?l:c.decode(l,{stream:!0});u+=c.decode(),u.length>0&&(d=u)}else{let c=JSON.stringify(t);a.delete("content-encoding"),a.delete("transfer-encoding"),c===void 0?a.delete("content-length"):(d=c,a.set("content-length",String(new TextEncoder().encode(c).byteLength)))}return new Request(i,{method:r,headers:a,...n?.signal!==void 0&&{signal:n.signal},...d!==void 0&&{body:d}})}o(sr,"toWebRequest");function St(e){return Array.isArray(e)?e[0]:e}o(St,"singleHeaderValue");function ir(e){if(e===null||typeof e!="object"||Array.isArray(e))return null;let{method:t,id:n}=e;return typeof t!="string"?null:typeof n=="string"||typeof n=="number"?n:null}o(ir,"echoableRequestId");function ar(e){return Response.json({jsonrpc:"2.0",error:{code:-32603,message:"Internal server error"},id:e},{status:500})}o(ar,"internalServerErrorResponse");import{CLIENT_CAPABILITIES_META_KEY as lr,CLIENT_INFO_META_KEY as pr}from"@modelcontextprotocol/server";import{HonoRequest as fr}from"hono/request";import{CLIENT_CAPABILITIES_META_KEY as dr}from"@modelcontextprotocol/server";var At="io.modelcontextprotocol/ui",ee="text/html;profile=mcp-app",cr="ui://views/";var te="ui/resourceUri";function I(e){return`${cr}${e}.html`}o(I,"viewResourceUri");var ur=new WeakMap;function Ot(e,t){ur.set(e,t)}o(Ot,"stashClientCapabilities");function Ut(e){if(typeof e!="object"||e===null)return;let t=e.params;if(typeof t!="object"||t===null)return;let n=t._meta;if(typeof n!="object"||n===null)return;let r=n[dr];if(!(typeof r!="object"||r===null))return r}o(Ut,"extractClientCapabilitiesFromBody");function ne(e){let t=e?.extensions;if(t===void 0)return!1;let n=t[At];if(typeof n!="object"||n===null)return!1;let r=n.mimeTypes;return Array.isArray(r)?r.includes(ee):!1}o(ne,"supportsViews");function mr(e){if(e===void 0||e.extra===void 0||e.expiresAt===void 0)throw new Error("OAuth callback did not receive mapped AuthInfo.extra")}o(mr,"requireOAuthAuthInfo");function E(e){return typeof e=="string"?e:void 0}o(E,"stringValue");function _t(e){return typeof e=="string"||typeof e=="number"&&Number.isFinite(e)?e:void 0}o(_t,"coordinateValue");function hr(e){if(e===void 0)return;let t=E(e["openai/locale"])??E(e["webplus/i18n"]),n=E(e["openai/userAgent"]),r=E(e["openai/subject"]),s=E(e["openai/session"]),i=E(e["openai/organization"]),a=e["openai/userLocation"],d;if(typeof a=="object"&&a!==null&&!Array.isArray(a)){let c=a,u={city:E(c.city),region:E(c.region),country:E(c.country),timezone:E(c.timezone),latitude:_t(c.latitude),longitude:_t(c.longitude)},l=Object.entries(u).filter(p=>p[1]!==void 0);l.length>0&&(d=Object.fromEntries(l))}if(!(t===void 0&&n===void 0&&d===void 0&&r===void 0&&s===void 0&&i===void 0))return{...t!==void 0&&{locale:t},...n!==void 0&&{userAgent:n},...d!==void 0&&{location:d},...r!==void 0&&{subject:r},...s!==void 0&&{conversationId:s},...i!==void 0&&{organizationId:i}}}o(hr,"normalizeUserContext");function It(e){return e.mcpReq.envelope}o(It,"requestEnvelope");function ve(e){return{...It(e)?.[pr]??{}}}o(ve,"requestClientInfo");function gr(e){let n={...It(e)?.[lr]??{}},r=ve(e),s=hr(e.mcpReq._meta);return{can(i){return Object.hasOwn(n,i)},capabilities(){return{...n}},extension(i){let a=n.extensions?.[i];return a===void 0?void 0:{...a}},info(){return{...r}},user(){return s===void 0?void 0:{...s,...s.location!==void 0&&{location:{...s.location}}}},supportsViews(){return ne(n)}}}o(gr,"toClientContext");function B(e){let t=e.http?.req,n=t===void 0?void 0:v(t).honoContext,r=n?.req??(t===void 0?void 0:new fr(t)),s={signal:e.mcpReq.signal,...r!==void 0&&{request:r},...e.mcpReq.inputResponses!==void 0&&{inputResponses:e.mcpReq.inputResponses},client:gr(e),requestState:o(()=>e.mcpReq.requestState(),"requestState"),async sendNotification(i,a){await e.mcpReq.notify({method:i,...a!==void 0&&{params:a}})},async reportProgress(i,a,d){let c=e.mcpReq._meta?.progressToken;return c===void 0?!1:(await e.mcpReq.notify({method:"notifications/progress",params:{progressToken:c,progress:i,...a!==void 0&&{total:a},...d!==void 0&&{message:d}}}),!0)},async sendLog(i,a,d){await e.mcpReq.notify({method:"notifications/message",params:{level:i,data:a,...d!==void 0&&{logger:d}}})}};return n!==void 0?Object.assign(n,s):{...s,...r!==void 0&&{req:r}}}o(B,"toRequestContext");function yr(e){if(e===null||typeof e!="object")return!1;let t=e;return typeof t.accessToken=="string"&&Array.isArray(t.scopes)&&t.scopes.every(n=>typeof n=="string")&&(t.expiresAt===void 0||typeof t.expiresAt=="number")}o(yr,"isOAuthUpstreamToken");function Me(e){let t=e.http?.authInfo;return mr(t),Object.assign(B(e),{auth:{user:t.extra.user,payload:t.extra.payload,accessToken:t.token,scopes:[...t.scopes],permissions:[...t.extra.permissions],...t.clientId.length>0&&{clientId:t.clientId},expiresAt:t.expiresAt,...t.resource!==void 0&&{resource:t.resource},...yr(t.extra.upstream)&&{upstream:{accessToken:t.extra.upstream.accessToken,scopes:[...t.extra.upstream.scopes],...t.extra.upstream.expiresAt!==void 0&&{expiresAt:t.extra.upstream.expiresAt}}}}})}o(Me,"toAuthenticatedRequestContext");import{isInputRequiredResult as wr}from"@modelcontextprotocol/server";function Tr(e){return"contents"in e&&Array.isArray(e.contents)}o(Tr,"isReadResourceResult");function br(e){return"messages"in e&&Array.isArray(e.messages)}o(br,"isGetPromptResult");function Ee(e,t){if(Tr(e))return e;let n=e._meta&&typeof e._meta=="object"&&typeof e._meta.mimeType=="string"?e._meta.mimeType:void 0,r=[];for(let s of e.content??[]){let i=Rr(s,t,n);i!==void 0&&r.push(i)}return r.length===0&&e.structuredContent!==void 0&&r.push({uri:t,mimeType:"application/json",text:JSON.stringify(e.structuredContent)}),r.length===0&&r.push({uri:t,mimeType:"text/plain",text:""}),{contents:r}}o(Ee,"toResourceResult");function Rr(e,t,n){if(e.type==="text")return{uri:t,mimeType:n??"text/plain",text:e.text};if(e.type==="image"||e.type==="audio")return{uri:t,mimeType:e.mimeType,blob:e.data};if(e.type==="resource")return{...e.resource}}o(Rr,"contentBlockToResourceContents");function Lt(e){if(wr(e)||br(e))return e;let t=(e.content??[]).map(n=>({role:"user",content:n}));return t.length===0&&e.structuredContent!==void 0&&t.push({role:"user",content:{type:"text",text:JSON.stringify(e.structuredContent)}}),t.length===0&&t.push({role:"user",content:{type:"text",text:""}}),{messages:t}}o(Lt,"toPromptResult");import{inheritBufferedResponse as xr}from"#mcp-use-buffered-response";var vr=["GET","HEAD","POST","OPTIONS"],Mr=["Content-Type","Authorization","mcp-protocol-version","mcp-method","mcp-name"];function Er(e,t){return e===void 0?t:typeof e=="function"?e(t):e==="*"?"*":Array.isArray(e)?t!==null&&e.includes(t)?t:null:e}o(Er,"resolveAllowedOrigin");function Pr(e,t){if(t.headers.has("Access-Control-Allow-Origin"))return;let n=t.headers.get("Origin"),r=Er(e.origin,n);if(r===null)return;let s={"Access-Control-Allow-Origin":r,"Access-Control-Allow-Methods":e.methods.join(", "),"Access-Control-Allow-Headers":e.allowedHeaders.join(", ")};return e.credentials&&(s["Access-Control-Allow-Credentials"]="true"),r!=="*"&&(s.Vary="Origin"),s}o(Pr,"corsHeaders");function kr(e,t){if(e.headers.has("Access-Control-Allow-Origin"))return e;let n=new Headers(e.headers);return new Headers(t).forEach((s,i)=>{n.set(i,s)}),xr(e,new Response(e.body,{status:e.status,statusText:e.statusText,headers:n}))}o(kr,"mergeCorsHeaders");function $t(e){if(!(e.enabled!==!1))return async(r,s)=>s();let n={...e.origin!==void 0&&{origin:e.origin},methods:e.methods??vr,allowedHeaders:e.allowedHeaders??Mr,credentials:e.credentials??!1};return async(r,s)=>{let i=Pr(n,r);if(i===void 0)return s();if(r.method==="OPTIONS")return new Response(null,{status:204,headers:i});let a=await s();return kr(a,i)}}o($t,"corsFetchMiddleware");function jt(e){return e!==void 0&&e.enabled!==!1}o(jt,"isGlobalCorsEnabled");import{CallToolResultSchema as Sr,GetPromptResultSchema as Cr,ListPromptsResultSchema as Ar,ListResourcesResultSchema as Or,ListToolsResultSchema as Ur,ReadResourceResultSchema as _r}from"@modelcontextprotocol/core";import{isInputRequiredResult as Ir}from"@modelcontextprotocol/server";var Lr=["tools/call","tools/list","resources/read","resources/list","prompts/get","prompts/list"];function Dt(e,t){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("[mcp-use] MCP middleware received an invalid downstream request");return{...e,params:t}}o(Dt,"withMcpMiddlewareParams");function Se(e,t){let n=Hr(e),r=t;if(n!=="*"&&!$r(n))throw new TypeError(`Unsupported MCP middleware pattern "${e}". Use an exact MCP method or "mcp:*".`);return n==="*"?{pattern:n,handler:o(async(s,i)=>{let a=!1,d;if(await r(s,async()=>{d=await i(),a=!0}),!a)throw new Error(`Wildcard MCP middleware "${n}" must call next()`);return d},"handler")}:{pattern:n,handler:o((s,i)=>r(s,i),"handler")}}o(Se,"createMcpMiddlewareEntry");function Ce(e,t){let{pattern:n,phase:r}=Dr(e),s=t;return{pattern:n,phase:r,handler:o((i,a)=>s(i,a),"handler")}}o(Ce,"createMcpEventListenerEntry");function j(e,t){if(e==="*")return!0;if(e.endsWith("/*")){let n=e.slice(0,-1);return t.startsWith(n)}return e===t}o(j,"matchesPattern");function $r(e){return Lr.some(t=>t===e)}o($r,"isMcpMiddlewareMethod");function Ht(e,t,n){let r=e.filter(s=>j(s.pattern,t));return r.length===0?s=>n():s=>{let i=-1,a=o(d=>d<=i?Promise.reject(new Error("next() called multiple times")):(i=d,d===r.length?n():r[d].handler(s,()=>a(d+1))),"dispatch");return a(0)}}o(Ht,"composeMiddleware");function jr(e){return Object.freeze({method:e.method,params:Object.freeze({...e.params}),...e.request!==void 0&&{request:e.request},...e.req!==void 0&&{req:e.req},...e.session!==void 0&&{session:Object.freeze({...e.session})},...e.auth!==void 0&&{auth:e.auth},state:new Map(e.state)})}o(jr,"freezeMiddlewareContext");async function qt(e,t,n,r,s){Nt(t,n,"before",r);let a=await Ht(e,n,s)(r);return Nr(n,a),Nt(t,n,"complete",r,a),a}o(qt,"runMcpOperation");function Nr(e,t){if((e==="tools/call"||e==="resources/read"||e==="prompts/get")&&Ir(t))return;let n=(()=>{switch(e){case"tools/call":return ke(e,t,"content"),Sr.safeParse(t);case"tools/list":return Pe(e,t),Ur.safeParse({tools:t});case"resources/read":return ke(e,t,"contents"),_r.safeParse(t);case"resources/list":return Pe(e,t),Or.safeParse({resources:t});case"prompts/get":return ke(e,t,"messages"),Cr.safeParse(t);case"prompts/list":return Pe(e,t),Ar.safeParse({prompts:t});default:throw new TypeError(`Unsupported MCP middleware method "${e}"`)}})();if(!n.success)throw new TypeError(`[mcp-use] ${e} middleware returned an invalid result: ${n.error.message}`)}o(Nr,"assertValidMiddlewareResult");function Pe(e,t){if(!Array.isArray(t))throw new TypeError(`[mcp-use] ${e} middleware returned an invalid result: expected an array`)}o(Pe,"assertArrayResult");function ke(e,t,n){if(typeof t!="object"||t===null||!Array.isArray(t[n]))throw new TypeError(`[mcp-use] ${e} middleware returned an invalid result: expected a ${n} array`)}o(ke,"assertArrayProperty");function Nt(e,t,n,r,s){let i=jr(r);for(let a of e)if(!(a.phase!==n||!j(a.pattern,t)))try{a.handler(i,s)}catch(d){console.error(`[mcp-use] MCP event listener for "${a.pattern}" (${n}) threw:`,d)}}o(Nt,"dispatchMcpEvents");function Dr(e){let t=e.startsWith("mcp:")?e.slice(4):e;return t.endsWith(":complete")?{pattern:t.slice(0,-9),phase:"complete"}:{pattern:t,phase:"before"}}o(Dr,"parseMcpPattern");function Hr(e){return e.startsWith("mcp:")?e.slice(4):e}o(Hr,"normalizeMcpMiddlewarePattern");import{CLIENT_INFO_META_KEY as qr,isJSONRPCRequest as Vt}from"@modelcontextprotocol/server";import{isBufferedResponse as Vr,trackBufferedResponse as Fr}from"#mcp-use-buffered-response";function Br(){return typeof process>"u"||process.env?.NO_COLOR!==void 0?!1:process.stdout?.isTTY===!0}o(Br,"colorsEnabled");function k(e,t){return n=>Br()?`\x1B[${e}m${n}\x1B[${t}m`:n}o(k,"ansi");var Oe=k(1,22),Ue=k(2,22),oe=k(31,39),Wt=k(32,39),P=k(33,39),zr=k(34,39),Kt=k(35,39),z=k(36,39),Wr=k(90,39);function Kr(e){let t=typeof process>"u"?void 0:process.env?.MCP_USE_LOG_LEVEL?.toLowerCase();return t==="info"||t==="debug"||t==="trace"?t:e??"info"}o(Kr,"resolveLogLevel");function _e(e){if(!(e===void 0||typeof e.name!="string"))return typeof e.version=="string"&&e.version!==""?`${e.name}/${e.version}`:e.name}o(_e,"formatClientInfo");var Jt={initialize:o(e=>({subject:_e(e.clientInfo)}),"initialize"),ping:o(()=>({}),"ping"),"server/discover":o(()=>({}),"server/discover"),"completion/complete":o(e=>({subject:e.ref.type==="ref/prompt"?e.ref.name:e.ref.uri,input:e.argument}),"completion/complete"),"logging/setLevel":o(e=>({subject:e.level}),"logging/setLevel"),"prompts/get":o(e=>({subject:e.name,input:e.arguments}),"prompts/get"),"prompts/list":o(()=>({}),"prompts/list"),"resources/list":o(()=>({}),"resources/list"),"resources/templates/list":o(()=>({}),"resources/templates/list"),"resources/read":o(e=>({subject:e.uri}),"resources/read"),"resources/subscribe":o(e=>({subject:e.uri}),"resources/subscribe"),"resources/unsubscribe":o(e=>({subject:e.uri}),"resources/unsubscribe"),"subscriptions/listen":o(()=>({}),"subscriptions/listen"),"tools/call":o(e=>({subject:e.name,input:e.arguments}),"tools/call"),"tools/list":o(()=>({}),"tools/list"),"sampling/createMessage":o(()=>({}),"sampling/createMessage"),"elicitation/create":o(()=>({}),"elicitation/create"),"roots/list":o(()=>({}),"roots/list")};function Jr(e){return Object.prototype.hasOwnProperty.call(Jt,e)}o(Jr,"isKnownMethod");function Gr(e){if(!Jr(e.method))return{};try{let t=Jt[e.method],n=t(e.params);return typeof n.subject=="string"||n.subject===void 0?n:{}}catch{return{}}}o(Gr,"formatDetail");var Ft=80;function Bt(e){let t;try{t=JSON.stringify(e)??String(e)}catch{t=String(e)}return t.length>Ft?`${t.slice(0,Ft)}...`:t}o(Bt,"inlineJson");function Yr(e){let t=e.params?._meta;if(t===void 0)return;let n=t[qr];if(!(typeof n!="object"||n===null||typeof n.name!="string"))return _e(n)}o(Yr,"formatClientIdentity");function Xr(e){let t=Yr(e);if(t!==void 0)return t;if(e.method==="initialize")try{return _e(e.params.clientInfo)}catch{return}}o(Xr,"formatMcpClient");function N(e){return e.replace(/[\u0000-\u001F\u007F-\u009F]+/g," ")}o(N,"sanitize");function Zr(e){return e.startsWith("tools/")?z:e.startsWith("resources/")?Wt:e.startsWith("prompts/")?Kt:e==="initialize"||e==="ping"?Wr:zr}o(Zr,"methodStyle");function Qr(e,t,n,r){if(t!==n)return{method:e,client:void 0,mcpRequest:void 0,streaming:!1};let s=Array.isArray(r)?r.filter(Vt):Vt(r)?[r]:[],i=s[0];return i===void 0?{method:e,client:void 0,mcpRequest:void 0,streaming:!1}:{method:s.length===1?N(i.method):`batch(${s.map(d=>N(d.method)).join(",")})`,client:Xr(i)??"unknown",mcpRequest:i,streaming:i.method==="subscriptions/listen"}}o(Qr,"describeRequest");var eo=new Set(["authorization","proxy-authorization","cookie","set-cookie","x-api-key"]);function zt(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,eo.has(t.toLowerCase())?"[REDACTED]":n]))}o(zt,"redactHeaders");async function to(e,t){if(!e.body)return{errorMessage:null};let n;try{let d=Vr(e,t),c=e.clone();d&&Fr(t,e),n=await c.text()}catch{return{errorMessage:null}}if(!n)return{errorMessage:null};let r=(e.headers.get("content-type")??"").includes("text/event-stream"),s=[],i=o(d=>{try{s.push(JSON.parse(d))}catch{}},"tryParse");if(r){for(let d of n.split(/\r?\n/))if(d.startsWith("data:")){let c=d.slice(5).trim();c&&i(c)}}else i(n);let a;for(let d of s){if(d===null||typeof d!="object")continue;let c=d;if(typeof c.error?.message=="string")return{errorMessage:c.error.message};if(c.result?.isError===!0){let l=(Array.isArray(c.result.content)?c.result.content:[]).find(p=>p?.type==="text"&&typeof p.text=="string");return{errorMessage:l?String(l.text):"tool error"}}"result"in c&&(a=c.result)}return{errorMessage:null,result:a}}o(to,"extractResponseOutcome");function no(e){if(e===null||typeof e!="object")return e;let{structuredContent:t,content:n}=e;if(t!==void 0)return t;if(Array.isArray(n)){let[r]=n;if(n.length===1&&r?.type==="text")return r.text}return n}o(no,"compactToolResult");function re(e){function t(n){return typeof n=="string"&&n.length>100?`${n.slice(0,100)}...`:Array.isArray(n)?n.map(t):n!==null&&typeof n=="object"?Object.fromEntries(Object.entries(n).map(([r,s])=>[r,t(s)])):n}o(t,"truncate");try{return JSON.stringify(t(e),null,2)}catch{return String(e)}}o(re,"formatForDump");var Ae=1e4;async function ro(e,t,n,r){console.log(`
|
|
2
2
|
${z("=".repeat(80))}`),console.log(Oe(z("[TRACE] Request Details"))),console.log(z("-".repeat(80))),Object.keys(t).length>0&&(console.log(P("Request Headers:")),console.log(re(zt(t)))),n!==void 0&&(console.log(P("Request Body:")),console.log(typeof n=="string"?n:re(n)));let s={};if(e.headers.forEach((i,a)=>{s[a]=i}),Object.keys(s).length>0&&(console.log(P("Response Headers:")),console.log(re(zt(s)))),!r)console.log(`${P("Response Body:")} (streaming \u2014 not dumped)`);else if(e.body===null)console.log(`${P("Response Body:")} (no body)`);else try{let i=await e.clone().text();if(i.length===0)console.log(`${P("Response Body:")} (empty)`);else{console.log(P("Response Body:"));try{console.log(re(JSON.parse(i)))}catch{console.log(i.length>Ae?`${i.slice(0,Ae)}
|
|
3
3
|
... (truncated, ${i.length-Ae} more characters)`:i)}}}catch{console.log(`${P("Response Body:")} (unable to read)`)}console.log(`${z("=".repeat(80))}
|
|
4
|
-
`)}o(ro,"printTraceDump");function oo(e){let t=String(e);return e>=500?Kt(t):e>=400?oe(t):e>=300?P(t):Wt(t)}o(oo,"styleStatus");function so(e,t){return e!=="GET"&&e!=="HEAD"?!1:t.endsWith("/favicon.ico")}o(so,"isNoisyRequest");function io(e){let{description:t,detail:n}=e;return[...e.prefix===void 0?[]:[Oe(e.prefix)],Zr(t.method)(t.method),...n?.subject===void 0?[]:[Oe(N(n.subject))],e.pathname,oo(e.status),...t.client===void 0?[]:[Ue(`client=${N(t.client)}`)],Ue(`${e.durationMs}ms`),...e.suffix].join(" ")}o(io,"formatRequestLogLine");function Ie(e={}){return e.enabled===!1?(t,n)=>n():async(t,n)=>{let r=Kr(e.level),s=Date.now(),i=t.method,a=new URL(t.url).pathname;if(so(i,a))return n();let d={};r==="trace"&&t.headers.forEach((y,T)=>{d[T]=y});let c;if(i!=="GET"&&i!=="HEAD"){let y=v(t).parsedBody;if(y!==void 0)c=y;else try{c=await t.clone().json(),(t.headers.get("content-type")??"").includes("application/json")&&(v(t).parsedBody=c)}catch{}}let u=Qr(i,a,e.mcpPath,c),l=o((y,T,x=[])=>{console.log(io({prefix:e.prefix,description:u,detail:T,pathname:a,status:y,durationMs:Date.now()-s,suffix:x}))},"logLine"),p;try{p=await n()}catch(y){throw l(500,void 0,[oe(`ERROR ${N(y instanceof Error?y.message:String(y))}`)]),y}let h=u.streaming||p.headers.get("content-type")?.split(";",1)[0]?.trim().toLowerCase()==="text/event-stream",f=u.mcpRequest===void 0?void 0:Gr(u.mcpRequest),m=[];if(u.mcpRequest!==void 0&&f!==void 0){let y=r!=="info";y&&f.input!==void 0&&m.push(Bt(f.input));let T=h?{errorMessage:null}:await to(p,t);y&&u.mcpRequest.method==="tools/call"&&T.errorMessage===null&&T.result!==void 0&&m.push(Ue("->"),Bt(no(T.result))),T.errorMessage!==null?m.push(oe(`ERROR ${N(T.errorMessage)}`)):p.status>=400&&m.push(oe(`ERROR (HTTP ${p.status})`))}l(p.status,f,m);let g=e.mcpPath!==void 0&&a.startsWith(C(e.mcpPath,"oauth/"));return r==="trace"&&!g&&await ro(p,d,c,!h),p}}o(Ie,"requestLogger");import{createMcpHandler as ao}from"@modelcontextprotocol/server";import{trackBufferedResponse as co}from"#mcp-use-buffered-response";function Le(e,t={}){let{path:n="/mcp",handler:r,authInfo:s}=t,i=r?.legacy??"stateless",a=ao(e,{legacy:"stateless",...r});return{handler:a,fetch:o(async c=>{if(!pe(c,n))return new Response("Not Found",{status:404});if(i==="stateless"){let g=c.method.toUpperCase();if(g==="GET"||g==="DELETE"||g==="HEAD")return new Response(null,{status:204})}let u=v(c),l=u.parsedBody;if(l===void 0)try{l=await c.clone().json()}catch{}let p=Ut(l);p!==void 0&&Ot(c,p);let h=s?.(c)??u.authInfo,f=await a.fetch(c,{...l!==void 0&&{parsedBody:l},...h!==void 0&&{authInfo:h}});return f.headers.get("content-type")?.toLowerCase().includes("application/json")?"Bun"in globalThis&&f.body!==null?new Response(await f.arrayBuffer(),{status:f.status,statusText:f.statusText,headers:f.headers}):co(c,f):f},"fetch")}}o(Le,"createMcpMount");function A(e,t){if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError(`${t} must be an object`);return e}o(A,"object");function Gt(e,t){if(!Array.isArray(e))throw new TypeError(`${t} must be an array`);return e}o(Gt,"array");function L(e,t){if(typeof e!="string"||!e.trim())throw new TypeError(`${t} must be a non-blank string`)}o(L,"nonBlank");function se(e,t){return{"~standard":{version:1,vendor:"mcp-use",jsonSchema:{input:o(()=>e,"input"),output:o(()=>e,"output")},async validate(n){try{return{value:await t(n)}}catch(r){return{issues:[{message:r instanceof Error?r.message:String(r)}]}}}}}}o(se,"standard");function Yt(e){let t=e.readTool??"settings.read",n=e.updateTool??"settings.update";if(L(t,"readTool"),L(n,"updateTool"),t===n)throw new TypeError("Settings read and update tools must have different names");A(e.fields,"fields");let r=Object.entries(e.fields).map(([f,m])=>[f,{...m}]);if(!r.length)throw new TypeError("Settings require at least one field");let s={};for(let[f,m]of r){if(L(m.title,`Setting ${f} title`),m.description!==void 0&&typeof m.description!="string")throw new TypeError(`Setting ${f} description must be a string`);let g=m.schema["~standard"].jsonSchema.output({target:"draft-2020-12"}),y=m.schema["~standard"].jsonSchema.input({target:"draft-2020-12"});if(!["boolean","string","number","integer"].includes(String(y.type))||g.type!==y.type||["$ref","anyOf","oneOf","allOf"].some(x=>x in y)||y.enum!==void 0&&(y.type!=="string"||!Array.isArray(y.enum)||!y.enum.length||!y.enum.every(x=>typeof x=="string")))throw new TypeError(`Unsupported native setting ${f}: use boolean, string, string enum, number, or integer`);let T=structuredClone(y);delete T.default,Object.defineProperty(s,f,{enumerable:!0,value:{...T,title:m.title,...m.description!==void 0&&{description:m.description}}})}let i={type:"object",properties:s,required:r.map(([f])=>f),additionalProperties:!1},a=e.layout===void 0?void 0:structuredClone(e.layout);if(a!==void 0)for(let f of Gt(a,"Settings layout")){let m=A(f,"Settings layout group");if(m.kind!=="group")throw new TypeError("Settings layout groups must have kind 'group'");L(m.title,"Settings layout group title");for(let g of Gt(m.items,"Settings layout group items")){let y=A(g,"Settings layout item");if(y.kind==="property"){if(L(y.property,"Settings layout property"),!Object.hasOwn(s,y.property))throw new TypeError(`Settings layout references unknown setting: ${y.property}`)}else if(y.kind==="tool"){if(L(y.tool,"Settings layout action tool"),L(y.title,"Settings layout action title"),y.description!==void 0&&typeof y.description!="string")throw new TypeError("Settings layout action description must be a string")}else throw new TypeError("Settings layout items must have kind 'property' or 'tool'")}}let d=o(async(f,m=!1)=>{let g=A(f,m?"set":"values");for(let T of Object.keys(g))if(!Object.hasOwn(s,T))throw new TypeError(`Unknown setting: ${T}`);if(m&&!Object.keys(g).length)throw new TypeError("Set at least one setting");let y={};for(let[T,x]of r){if(!Object.hasOwn(g,T)){if(!m)throw new TypeError(`Missing effective setting: ${T}`);continue}let b=await x.schema["~standard"].validate(g[T]);if(b.issues!==void 0)throw new TypeError(`Invalid setting ${T}: ${b.issues.map(w=>w.message).join(", ")}`);if(b.value===void 0||!["string","boolean","number"].includes(typeof b.value)||typeof b.value=="number"&&!Number.isFinite(b.value))throw new TypeError(`Invalid primitive setting: ${T}`);if(!Object.is(b.value,g[T]))throw new TypeError(`Setting ${T} schema must not transform values`);Object.defineProperty(y,T,{enumerable:!0,value:b.value})}return y},"validateValues"),c=se({type:"object",additionalProperties:!1},f=>{if(Object.keys(A(f,"arguments")).length)throw new TypeError("Settings read accepts empty arguments");return{}}),u=se({type:"object",properties:{set:{...i,required:[],minProperties:1}},required:["set"],additionalProperties:!1},async f=>{let m=A(f,"arguments");if(Object.keys(m).some(g=>g!=="set"))throw new TypeError("Unknown settings update argument");return{set:await d(m.set,!0)}}),p=se({type:"object",properties:{schema:{type:"object"},values:i,layout:{type:"array",items:{type:"object",properties:{kind:{const:"group"},title:{type:"string"},items:{type:"array",items:{type:"object"}}},required:["kind","title","items"]}}},required:["schema","values"]},async f=>{let m=A(f,"settings result");return{...m,values:await d(m.values)}}),h=se({type:"object",properties:{values:i},required:["values"]},async f=>({values:await d(A(f,"settings result").values)}));return{capability:{readTool:t,updateTool:n},schema:i,layout:a,readDefinition:{name:t,inputSchema:c,outputSchema:p,annotations:{readOnlyHint:!0}},updateDefinition:{name:n,inputSchema:u,outputSchema:h}}}o(Yt,"prepareSettings");import{completable as Xt}from"@modelcontextprotocol/server";function $e(e){let t=e.map(String);return n=>{let r=String(n??"").toLowerCase();return t.filter(s=>s.toLowerCase().startsWith(r))}}o($e,"createPrefixCompletion");function uo(e,t){return typeof t=="function"?Xt(e,(n,r)=>t(String(n??""),r)):Xt(e,$e(t))}o(uo,"completable");function Zt(e){let t=Object.create(null);for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=Array.isArray(r)?$e(r):r);return t}o(Zt,"normalizeCompletions");import{ResourceLinkSchema as lo}from"@modelcontextprotocol/core";import{fromJsonSchema as Qt}from"@modelcontextprotocol/server";var po=Qt({type:"object",properties:{query:{type:"string"}},required:["query"]}),fo=Qt({type:"object",properties:{items:{type:"array",items:lo["~standard"].jsonSchema.output({target:"draft-2020-12"})}},required:["items"]});function je(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:{}}o(je,"record");function en(e){if(typeof e.name!="string"||!e.name.trim())throw new TypeError("Mention tool name must be a non-blank string");if(typeof e.search!="function")throw new TypeError("Mention search must be a callback");let{search:t,...n}=e;return{...n,inputSchema:po,outputSchema:fo,annotations:{readOnlyHint:!0,...e.annotations},_meta:{...e._meta,"openai/extensions":{...je(e._meta?.["openai/extensions"]),"mentions/search":{}}}}}o(en,"prepareMentions");function tn(e,t){let n=je(e._meta?.ui),r=e.visibility!==void 0?[e.visibility]:Array.isArray(n.visibility)?n.visibility:[];return{...t,ui:{...je(t?.ui),visibility:[...new Set([...r,"app"])]}}}o(tn,"finalizeMentionsMeta");import{fromJsonSchema as mo}from"@modelcontextprotocol/server";var ho=["get","put","post","delete","options","head","patch","trace"];function sn(e,t){let n=go(t.spec,t),r=bo(n),s=n.length>0?_o(t):void 0;for(let[i,a]of n.entries()){let d=r[i];if(d===void 0||s===void 0)continue;let c=Mo(a);e.tool({name:d,description:Ro(a),inputSchema:vo(t.spec,a,c)},async u=>Ao(a,u,t,c,s))}}o(sn,"registerOpenAPITools");function go(e,t){let n=[];for(let[r,s]of Object.entries(e.paths??{})){let i=H(e,s);if(i===void 0||K(i))continue;let a=nn(e,i.parameters);for(let d of ho){let c=i[d];if(c===void 0)continue;let u=H(e,c);if(u===void 0||K(u))continue;let l=nn(e,u.parameters),p=u.requestBody===void 0?void 0:H(e,u.requestBody),h={method:d,path:r,operation:u,parameters:yo(a,l),...p!==void 0&&!K(p)&&{requestBody:p}};wo(h,t)&&n.push(h)}}return n}o(go,"collectOperations");function nn(e,t){let n=[];for(let r of t??[]){let s=H(e,r);s!==void 0&&!K(s)&&n.push(s)}return n}o(nn,"resolveParameters");function yo(e,t){let n=new Map;for(let r of[...e,...t])n.set(`${r.in}:${r.name}`,r);return[...n.values()]}o(yo,"mergeParameters");function wo(e,t){if(t.tags?.length){let n=new Set(e.operation.tags??[]);if(!t.tags.some(r=>n.has(r)))return!1}return!(t.exclude??[]).some(n=>To(e,n))}o(wo,"isIncluded");function To(e,t){if(t.method&&t.method.toLowerCase()!==e.method||t.operationId&&!rn(t.operationId,e.operation.operationId??"")||t.path&&!rn(t.path,e.path))return!1;if(t.tags?.length){let n=new Set(e.operation.tags??[]);if(!t.tags.some(r=>n.has(r)))return!1}return!0}o(To,"matchesExcludeRule");function rn(e,t){return typeof e=="string"?e===t:(e.lastIndex=0,e.test(t))}o(rn,"matchesPattern");function bo(e){let t=new Map;return e.map(n=>{let r=xo(n.operation.operationId??`${n.method}_${n.path.replace(/[{}]/g,"").replace(/\//g,"_")}`),s=t.get(r)??0;if(t.set(r,s+1),s===0)return r;let i=`_${s+1}`;return`${r.slice(0,64-i.length)}${i}`})}o(bo,"createToolNames");function Ro(e){return[e.operation.summary,e.operation.description,`HTTP: ${e.method.toUpperCase()} ${e.path}`].filter(t=>!!t).join(`
|
|
4
|
+
`)}o(ro,"printTraceDump");function oo(e){let t=String(e);return e>=500?Kt(t):e>=400?oe(t):e>=300?P(t):Wt(t)}o(oo,"styleStatus");function so(e,t){return e!=="GET"&&e!=="HEAD"?!1:t.endsWith("/favicon.ico")}o(so,"isNoisyRequest");function io(e){let{description:t,detail:n}=e;return[...e.prefix===void 0?[]:[Oe(e.prefix)],Zr(t.method)(t.method),...n?.subject===void 0?[]:[Oe(N(n.subject))],e.pathname,oo(e.status),...t.client===void 0?[]:[Ue(`client=${N(t.client)}`)],Ue(`${e.durationMs}ms`),...e.suffix].join(" ")}o(io,"formatRequestLogLine");function Ie(e={}){return e.enabled===!1?(t,n)=>n():async(t,n)=>{let r=Kr(e.level),s=Date.now(),i=t.method,a=new URL(t.url).pathname;if(so(i,a))return n();let d={};r==="trace"&&t.headers.forEach((y,T)=>{d[T]=y});let c;if(i!=="GET"&&i!=="HEAD"){let y=v(t).parsedBody;if(y!==void 0)c=y;else try{c=await t.clone().json(),(t.headers.get("content-type")??"").includes("application/json")&&(v(t).parsedBody=c)}catch{}}let u=Qr(i,a,e.mcpPath,c),l=o((y,T,x=[])=>{console.log(io({prefix:e.prefix,description:u,detail:T,pathname:a,status:y,durationMs:Date.now()-s,suffix:x}))},"logLine"),p;try{p=await n()}catch(y){throw l(500,void 0,[oe(`ERROR ${N(y instanceof Error?y.message:String(y))}`)]),y}let h=u.streaming||p.headers.get("content-type")?.split(";",1)[0]?.trim().toLowerCase()==="text/event-stream",f=u.mcpRequest===void 0?void 0:Gr(u.mcpRequest),m=[];if(u.mcpRequest!==void 0&&f!==void 0){let y=r!=="info";y&&f.input!==void 0&&m.push(Bt(f.input));let T=h?{errorMessage:null}:await to(p,t);y&&u.mcpRequest.method==="tools/call"&&T.errorMessage===null&&T.result!==void 0&&m.push(Ue("->"),Bt(no(T.result))),T.errorMessage!==null?m.push(oe(`ERROR ${N(T.errorMessage)}`)):p.status>=400&&m.push(oe(`ERROR (HTTP ${p.status})`))}l(p.status,f,m);let g=e.mcpPath!==void 0&&a.startsWith(C(e.mcpPath,"oauth/"));return r==="trace"&&!g&&await ro(p,d,c,!h),p}}o(Ie,"requestLogger");import{createMcpHandler as ao}from"@modelcontextprotocol/server";import{trackBufferedResponse as co}from"#mcp-use-buffered-response";function Le(e,t={}){let{path:n="/mcp",handler:r,authInfo:s}=t,i=r?.legacy??"stateless",a=ao(e,{legacy:"stateless",...r});return{handler:a,fetch:o(async c=>{if(!pe(c,n))return new Response("Not Found",{status:404});if(i==="stateless"){let g=c.method.toUpperCase();if(g==="GET"||g==="DELETE"||g==="HEAD")return new Response(null,{status:204})}let u=v(c),l=u.parsedBody;if(l===void 0)try{l=await c.clone().json()}catch{}let p=Ut(l);p!==void 0&&Ot(c,p);let h=s?.(c)??u.authInfo,f=await a.fetch(c,{...l!==void 0&&{parsedBody:l},...h!==void 0&&{authInfo:h}});return f.headers.get("content-type")?.toLowerCase().includes("application/json")?"Bun"in globalThis&&f.body!==null?new Response(await f.arrayBuffer(),{status:f.status,statusText:f.statusText,headers:f.headers}):co(c,f):f},"fetch")}}o(Le,"createMcpMount");function A(e,t){if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError(`${t} must be an object`);return e}o(A,"object");function Gt(e,t){if(!Array.isArray(e))throw new TypeError(`${t} must be an array`);return e}o(Gt,"array");function L(e,t){if(typeof e!="string"||!e.trim())throw new TypeError(`${t} must be a non-blank string`)}o(L,"nonBlank");function se(e,t){return{"~standard":{version:1,vendor:"mcp-use",jsonSchema:{input:o(()=>e,"input"),output:o(()=>e,"output")},async validate(n){try{return{value:await t(n)}}catch(r){return{issues:[{message:r instanceof Error?r.message:String(r)}]}}}}}}o(se,"standard");function Yt(e){let t=e.readTool??"settings.read",n=e.updateTool??"settings.update";if(L(t,"readTool"),L(n,"updateTool"),t===n)throw new TypeError("Settings read and update tools must have different names");A(e.fields,"fields");let r=Object.entries(e.fields).map(([f,m])=>[f,{...m}]);if(!r.length)throw new TypeError("Settings require at least one field");let s={};for(let[f,m]of r){if(L(m.title,`Setting ${f} title`),m.description!==void 0&&typeof m.description!="string")throw new TypeError(`Setting ${f} description must be a string`);let g=m.schema["~standard"].jsonSchema.output({target:"draft-2020-12"}),y=m.schema["~standard"].jsonSchema.input({target:"draft-2020-12"});if(!["boolean","string","number","integer"].includes(String(y.type))||g.type!==y.type||["$ref","anyOf","oneOf","allOf"].some(x=>x in y)||y.enum!==void 0&&(y.type!=="string"||!Array.isArray(y.enum)||!y.enum.length||!y.enum.every(x=>typeof x=="string")))throw new TypeError(`Unsupported native setting ${f}: use boolean, string, string enum, number, or integer`);let T=structuredClone(y);delete T.default,Object.defineProperty(s,f,{enumerable:!0,value:{...T,title:m.title,...m.description!==void 0&&{description:m.description}}})}let i={type:"object",properties:s,required:r.map(([f])=>f),additionalProperties:!1},a=e.layout===void 0?void 0:structuredClone(e.layout);if(a!==void 0)for(let f of Gt(a,"Settings layout")){let m=A(f,"Settings layout group");if(m.kind!=="group")throw new TypeError("Settings layout groups must have kind 'group'");L(m.title,"Settings layout group title");for(let g of Gt(m.items,"Settings layout group items")){let y=A(g,"Settings layout item");if(y.kind==="property"){if(L(y.property,"Settings layout property"),!Object.hasOwn(s,y.property))throw new TypeError(`Settings layout references unknown setting: ${y.property}`)}else if(y.kind==="tool"){if(L(y.tool,"Settings layout action tool"),L(y.title,"Settings layout action title"),y.description!==void 0&&typeof y.description!="string")throw new TypeError("Settings layout action description must be a string")}else throw new TypeError("Settings layout items must have kind 'property' or 'tool'")}}let d=o(async(f,m=!1)=>{let g=A(f,m?"set":"values");for(let T of Object.keys(g))if(!Object.hasOwn(s,T))throw new TypeError(`Unknown setting: ${T}`);if(m&&!Object.keys(g).length)throw new TypeError("Set at least one setting");let y={};for(let[T,x]of r){if(!Object.hasOwn(g,T)){if(!m)throw new TypeError(`Missing effective setting: ${T}`);continue}let b=await x.schema["~standard"].validate(g[T]);if(b.issues!==void 0)throw new TypeError(`Invalid setting ${T}: ${b.issues.map(w=>w.message).join(", ")}`);if(b.value===void 0||!["string","boolean","number"].includes(typeof b.value)||typeof b.value=="number"&&!Number.isFinite(b.value))throw new TypeError(`Invalid primitive setting: ${T}`);if(!Object.is(b.value,g[T]))throw new TypeError(`Setting ${T} schema must not transform values`);Object.defineProperty(y,T,{enumerable:!0,value:b.value})}return y},"validateValues"),c=se({type:"object",additionalProperties:!1},f=>{if(Object.keys(A(f,"arguments")).length)throw new TypeError("Settings read accepts empty arguments");return{}}),u=se({type:"object",properties:{set:{...i,required:[],minProperties:1}},required:["set"],additionalProperties:!1},async f=>{let m=A(f,"arguments");if(Object.keys(m).some(g=>g!=="set"))throw new TypeError("Unknown settings update argument");return{set:await d(m.set,!0)}}),p=se({type:"object",properties:{schema:{type:"object"},values:i,layout:{type:"array",items:{type:"object",properties:{kind:{const:"group"},title:{type:"string"},items:{type:"array",items:{type:"object"}}},required:["kind","title","items"]}}},required:["schema","values"]},async f=>{let m=A(f,"settings result");return{...m,values:await d(m.values)}}),h=se({type:"object",properties:{values:i},required:["values"]},async f=>({values:await d(A(f,"settings result").values)}));return{capability:{readTool:t,updateTool:n},schema:i,layout:a,readDefinition:{name:t,inputSchema:c,outputSchema:p,annotations:{readOnlyHint:!0}},updateDefinition:{name:n,inputSchema:u,outputSchema:h}}}o(Yt,"prepareSettings");import{completable as Xt}from"@modelcontextprotocol/server";function $e(e){let t=e.map(String);return n=>{let r=String(n??"").toLowerCase();return t.filter(s=>s.toLowerCase().startsWith(r))}}o($e,"createPrefixCompletion");function uo(e,t){return typeof t=="function"?Xt(e,(n,r)=>t(String(n??""),r)):Xt(e,$e(t))}o(uo,"completable");function Zt(e){let t=Object.create(null);for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=Array.isArray(r)?$e(r):r);return t}o(Zt,"normalizeCompletions");import{ResourceLinkSchema as lo}from"@modelcontextprotocol/core";import{fromJsonSchema as Qt}from"@modelcontextprotocol/server";var po=Qt({type:"object",properties:{query:{type:"string"}},required:["query"]}),fo=Qt({type:"object",properties:{items:{type:"array",items:lo["~standard"].jsonSchema.output({target:"draft-2020-12"})}},required:["items"]});function je(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:{}}o(je,"record");function en(e){if(typeof e.name!="string"||!e.name.trim())throw new TypeError("Mention tool name must be a non-blank string");if(typeof e.search!="function")throw new TypeError("Mention search must be a callback");let{search:t,...n}=e;return{...n,inputSchema:po,outputSchema:fo,annotations:{readOnlyHint:!0,...e.annotations},_meta:{...e._meta,"openai/extensions":{...je(e._meta?.["openai/extensions"]),"mentions/search":{}}}}}o(en,"prepareMentions");function tn(e,t){let n=je(e._meta?.ui),r=e.visibility!==void 0?[e.visibility]:Array.isArray(n.visibility)?n.visibility:[];return{...t,ui:{...je(t?.ui),visibility:[...new Set([...r,"app"])]}}}o(tn,"finalizeMentionsMeta");import{fromJsonSchema as mo}from"@modelcontextprotocol/server";var ho=["get","put","post","delete","options","head","patch","trace"];function sn(e,t){let n=go(t.spec,t),r=bo(n),s=n.length>0?_o(t):void 0;for(let[i,a]of n.entries()){let d=r[i];if(d===void 0||s===void 0)continue;let c=Mo(a);e.tool({name:d,description:Ro(a),inputSchema:vo(t.spec,a,c)},async u=>Ao(a,u,t,c,s))}}o(sn,"registerOpenAPITools");function go(e,t){let n=[];for(let[r,s]of Object.entries(e.paths??{})){let i=D(e,s);if(i===void 0||K(i))continue;let a=nn(e,i.parameters);for(let d of ho){let c=i[d];if(c===void 0)continue;let u=D(e,c);if(u===void 0||K(u))continue;let l=nn(e,u.parameters),p=u.requestBody===void 0?void 0:D(e,u.requestBody),h={method:d,path:r,operation:u,parameters:yo(a,l),...p!==void 0&&!K(p)&&{requestBody:p}};wo(h,t)&&n.push(h)}}return n}o(go,"collectOperations");function nn(e,t){let n=[];for(let r of t??[]){let s=D(e,r);s!==void 0&&!K(s)&&n.push(s)}return n}o(nn,"resolveParameters");function yo(e,t){let n=new Map;for(let r of[...e,...t])n.set(`${r.in}:${r.name}`,r);return[...n.values()]}o(yo,"mergeParameters");function wo(e,t){if(t.tags?.length){let n=new Set(e.operation.tags??[]);if(!t.tags.some(r=>n.has(r)))return!1}return!(t.exclude??[]).some(n=>To(e,n))}o(wo,"isIncluded");function To(e,t){if(t.method&&t.method.toLowerCase()!==e.method||t.operationId&&!rn(t.operationId,e.operation.operationId??"")||t.path&&!rn(t.path,e.path))return!1;if(t.tags?.length){let n=new Set(e.operation.tags??[]);if(!t.tags.some(r=>n.has(r)))return!1}return!0}o(To,"matchesExcludeRule");function rn(e,t){return typeof e=="string"?e===t:(e.lastIndex=0,e.test(t))}o(rn,"matchesPattern");function bo(e){let t=new Map;return e.map(n=>{let r=xo(n.operation.operationId??`${n.method}_${n.path.replace(/[{}]/g,"").replace(/\//g,"_")}`),s=t.get(r)??0;if(t.set(r,s+1),s===0)return r;let i=`_${s+1}`;return`${r.slice(0,64-i.length)}${i}`})}o(bo,"createToolNames");function Ro(e){return[e.operation.summary,e.operation.description,`HTTP: ${e.method.toUpperCase()} ${e.path}`].filter(t=>!!t).join(`
|
|
5
5
|
|
|
6
|
-
`)}o(Ro,"createToolDescription");function xo(e){return e.trim().replace(/[^a-zA-Z0-9_-]+/g,"_").replace(/_+/g,"_").replace(/^_/,"").replace(/_$/,"").slice(0,64)||"openapi_tool"}o(xo,"slugifyToolName");function vo(e,t,n){let r={},s=[];for(let{parameter:c,inputName:u}of n.parameters){let l=on(e,c.schema??{});r[u]={...l,description:c.description??`${c.in} parameter`},(c.required||c.in==="path")&&s.push(u)}let i=an(t.requestBody);i!==void 0&&n.bodyInputName!==void 0&&(r[n.bodyInputName]=on(e,i),t.requestBody?.required&&s.push(n.bodyInputName));let a=Po(e),d={type:"object",properties:r,additionalProperties:!1,...s.length>0&&{required:s},...a!==void 0&&{$defs:a}};return mo(d)}o(vo,"createToolInputSchema");function Mo(e){let t=e.parameters.filter(a=>a.in!=="cookie"),n=an(e.requestBody)===void 0?void 0:"body",r=new Map;for(let a of t)r.set(a.name,(r.get(a.name)??0)+1);let s=new Set(n===void 0?[]:[n]);return{parameters:t.map(a=>{let c=(r.get(a.name)??0)>1||a.name===n?`${a.name}_${a.in}`:a.name;return{parameter:a,inputName:Eo(c,s)}}),...n!==void 0&&{bodyInputName:n}}}o(Mo,"createInputBindings");function Eo(e,t){let n=e,r=2;for(;t.has(n);)n=`${e}_${r}`,r+=1;return t.add(n),n}o(Eo,"claimInputName");function Po(e){let t=q(e.components?.schemas);if(t===void 0)return;let n={};for(let[r,s]of Object.entries(t))n[r]=W(e,s,new Set);return n}o(Po,"createSchemaDefinitions");function on(e,t){let n=W(e,t,new Set);return q(n)??{}}o(on,"transformSchema");function W(e,t,n){if(Array.isArray(t))return t.map(d=>W(e,d,n));let r=q(t);if(r===void 0)return t;let s=typeof r.$ref=="string"?r.$ref:void 0,i={};for(let[d,c]of Object.entries(r))d!=="$ref"&&(d==="nullable"&&typeof c=="boolean"||So(d)&&typeof c=="boolean"||(i[d]=W(e,c,n)));for(let[d,c]of ko)r[c]===!0&&typeof r[d]=="number"&&(i[c]=r[d],delete i[d]);let a=i;if(s!==void 0){let d=Co(e,s);if(d!==void 0)a={$ref:d,...i};else if(!n.has(s)){let c=H(e,{$ref:s});if(c!==void 0){let u=new Set(n);u.add(s),a={...q(W(e,c,u))??{},...i}}}}return r.nullable===!0?{anyOf:[a,{type:"null"}]}:a}o(W,"transformSchemaNode");var ko=[["minimum","exclusiveMinimum"],["maximum","exclusiveMaximum"]];function So(e){return e==="exclusiveMinimum"||e==="exclusiveMaximum"}o(So,"isExclusiveBoundKey");function Co(e,t){let n="#/components/schemas/";if(t.startsWith(n))return H(e,{$ref:t})===void 0?void 0:`#/$defs/${t.slice(n.length)}`}o(Co,"rewriteSchemaRef");function an(e){let t=e?.content;if(t!==void 0)return t["application/json"]?.schema??t["application/*+json"]?.schema??Object.entries(t).find(([n])=>n.includes("+json"))?.[1].schema}o(an,"getJsonRequestBodySchema");async function Ao(e,t,n,r,s){let i=n.fetch??globalThis.fetch,a=Oo(e,t,r.parameters,s),d=Uo(r.parameters,t,n),c=r.bodyInputName,u=c===void 0||t[c]===void 0?void 0:JSON.stringify(t[c]);u!==void 0&&!$o(d,"content-type")&&(d["content-type"]="application/json");let l=await i(a,{method:e.method.toUpperCase(),headers:d,...u!==void 0&&{body:u}}),p=l.headers.get("content-type")??"";if(!l.ok)return{content:[{type:"text",text:await l.text()}],isError:!0};if(p.includes("application/json")||p.includes("+json")){let h=await l.text();try{let f=JSON.parse(h);return{content:[{type:"text",text:JSON.stringify(f)}],structuredContent:f}}catch{return{content:[{type:"text",text:h}]}}}return{content:[{type:"text",text:await l.text()}]}}o(Ao,"callOpenAPIOperation");function Oo(e,t,n,r){let s=e.path.replace(/{([^}]+)}/g,(a,d)=>{let c=n.find(({parameter:u})=>u.in==="path"&&u.name===d);return encodeURIComponent(String(c===void 0?"":t[c.inputName]??""))}),i=new URL(s.replace(/^\/+/,""),Lo(r));for(let{parameter:a,inputName:d}of n){if(a.in!=="query")continue;let c=t[d];c==null||c===""||Io(i,a.name,c)}return i.toString()}o(Oo,"buildUrl");function Uo(e,t,n){let r={...n.headers??{}};for(let{parameter:s,inputName:i}of e){if(s.in!=="header")continue;let a=t[i];a==null||a===""||(r[s.name]=String(a))}return n.auth?.type==="bearer"&&n.auth.token&&(r.authorization=`Bearer ${n.auth.token}`),n.auth?.type==="header"&&n.auth.value&&(r[n.auth.name]=n.auth.value),r}o(Uo,"buildHeaders");function _o(e){let t=e.baseUrl??e.spec.servers?.[0]?.url;if(t===void 0||t.trim()==="")throw new Error("MCPServer.fromOpenAPI requires options.baseUrl or spec.servers[0].url");return t}o(_o,"resolveBaseUrl");function Io(e,t,n){if(Array.isArray(n)){for(let r of n)r!=null&&r!==""&&e.searchParams.append(t,String(r));return}e.searchParams.set(t,String(n))}o(Io,"appendQueryParam");function Lo(e){return e.endsWith("/")?e:`${e}/`}o(Lo,"ensureTrailingSlash");function $o(e,t){return Object.keys(e).some(n=>n.toLowerCase()===t)}o($o,"hasHeader");function K(e){let t=q(e);return t!==void 0&&typeof t.$ref=="string"}o(K,"isReferenceObject");function H(e,t){if(!K(t))return t;if(!t.$ref.startsWith("#/"))return;let n=t.$ref.slice(2).split("/").map(s=>s.replace(/~1/g,"/").replace(/~0/g,"~")),r=e;for(let s of n){let i=q(r);if(i===void 0||!(s in i))return;r=i[s]}return r}o(H,"resolveRef");function q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}o(q,"readRecord");import{OAuthError as vd,OAuthErrorCode as Md,bearerAuthChallengeResponse as Ed,getOAuthProtectedResourceMetadataUrl as wn,oauthMetadataResponse as Pd,requireBearerAuth as kd,verifyBearerToken as Sd}from"@modelcontextprotocol/server";import{getOAuthProtectedResourceMetadataUrl as ua,oauthMetadataResponse as Vo,requireBearerAuth as la}from"@modelcontextprotocol/server";function D(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}o(D,"isRecord");function O(e){let t=e.hostname.toLowerCase();return t==="localhost"||t.endsWith(".localhost")||t==="[::1]"||/^127(?:\.\d{1,3}){3}$/.test(t)}o(O,"isLocalhost");function F(e,t){let n;try{n=new URL(e)}catch{throw new Error(`${t} must be an absolute URL`)}if(n.origin==="null"||n.username!==""||n.password!=="")throw new Error(`${t} must be an absolute URL without credentials`);return n}o(F,"parseAbsoluteUrl");function J(e,t){if(e.protocol!=="https:"&&!(e.protocol==="http:"&&O(e)))throw new Error(`${t} must use HTTPS, or HTTP for localhost`)}o(J,"assertSecureHttpUrl");function Ne(e){if(e===null||typeof e!="object"||!("issuer"in e)||typeof e.issuer!="string")throw new TypeError("oauthMetadata must include a string issuer");J(F(e.issuer,"oauthMetadata.issuer"),"oauthMetadata.issuer")}o(Ne,"assertOAuthMetadata");import{OAuthError as jo,OAuthErrorCode as No}from"@modelcontextprotocol/server";function M(e,t){let n=new jo(No.InvalidToken,e);return t!==void 0&&(n.cause=t),n}o(M,"invalidToken");function cn(e){let t=e.provider,n=Fe(e.basePath);if(t.resource!==void 0)return He(t.resource,n);if(e.mcpUrl!==void 0)return He(pn(ln(e.mcpUrl,"MCP_URL"),n),n)}o(cn,"resolveConfiguredOAuthResource");function dn(e,t){let n=ln(e,"listen origin");if(!O(n))throw new Error("OAuth listen origin must be localhost or a loopback address");return He(pn(n,Fe(t)),t)}o(dn,"resolveLocalOAuthResource");function He(e,t){let n=Fe(t),r=F(e,"OAuth resource");if(r.search!==""||r.hash!=="")throw new Error("OAuth resource must not include a query string or fragment");if(J(r,"OAuth resource"),fn(r.pathname)!==n)throw new Error(`OAuth resource path must exactly match basePath (${n})`);return r.pathname=n,r}o(He,"validateOAuthResource");function qe(e,t){let n=De(t),r=e.createTokenVerifier(new URL(n.href));if(r===null||typeof r!="object"||typeof r.verifyAccessToken!="function")throw new TypeError("OAuth provider createTokenVerifier must return an OAuthTokenVerifier");return{async verifyAccessToken(s){let i=await r.verifyAccessToken(s);Do(i),Ho(i,n);let a;try{a=e.mapAuthInfo(i)}catch(d){throw M("Token identity mapping failed",d)}return Fo(a),{...i,scopes:[...i.scopes],extra:{...i.extra,...a}}}}}o(qe,"wrapOAuthTokenVerifier");function Ho(e,t){if(e.resource===void 0)throw M("Token verifier did not return a validated protected resource");if(qo(e.resource).href!==De(t).href)throw M("Token resource does not match the protected resource")}o(Ho,"assertResourceBinding");function qo(e){if(!(e instanceof URL))throw M("Token resource must be an absolute HTTPS URL, or HTTP URL for localhost");let t=e;if(!/^https?:$/.test(t.protocol)||t.username!==""||t.password!==""||t.search!==""||t.hash!==""||t.protocol==="http:"&&!O(t))throw M("Token resource must be an absolute HTTPS URL, or HTTP URL for localhost");return De(t)}o(qo,"parseTokenResource");function De(e){let t=new URL(e);return t.pathname=t.pathname==="/"?"/":t.pathname.replace(/\/+$/,""),t}o(De,"normalizeResourceUrl");function un(e,t){let n=e.oauthMetadata;if(typeof n!="function")return n;let r=n(new URL(t.href));return Ne(r),r}o(un,"resolveOAuthMetadata");function ie(e){return{oauthMetadata:e.oauthMetadata,...e.requiredScopes!==void 0&&{requiredScopes:[...e.requiredScopes]},...e.scopesSupported!==void 0&&{scopesSupported:[...e.scopesSupported]},...e.resourceName!==void 0&&{resourceName:e.resourceName},...e.serviceDocumentationUrl!==void 0&&{serviceDocumentationUrl:e.serviceDocumentationUrl}}}o(ie,"getOAuthProviderOptions");function Do(e){if(e===null||typeof e!="object"||typeof e.token!="string"||e.token.length===0||typeof e.clientId!="string"||!Array.isArray(e.scopes)||!e.scopes.every(t=>typeof t=="string")||typeof e.expiresAt!="number"||!Number.isFinite(e.expiresAt)||e.expiresAt<=Date.now()/1e3)throw M("Token verifier returned invalid authentication information")}o(Do,"assertVerifiedAuthInfo");function Fo(e){if(e===null||typeof e!="object"||!("user"in e)||e.user===void 0||!D(e.payload)||!Array.isArray(e.permissions)||!e.permissions.every(t=>typeof t=="string"))throw M("Token identity mapping must return user, payload, and string permissions")}o(Fo,"assertMappedExtra");function ln(e,t){let n=F(e,t);if(n.pathname!=="/"||n.search!==""||n.hash!==""||n.username!==""||n.password!=="")throw new Error(`${t} must be an absolute origin without a path`);return n}o(ln,"requireAbsoluteOrigin");function pn(e,t){let n=new URL(e.origin);return n.pathname=t,n}o(pn,"appendBasePath");function Fe(e){if(!e.startsWith("/")||e.includes("?")||e.includes("#"))throw new Error("basePath must be an absolute URL pathname");return fn(e)}o(Fe,"normalizeBasePath");function fn(e){if(e==="/")return"/";let t=e.length;for(;t>0&&e.charCodeAt(t-1)===47;)t--;return e.slice(0,t)}o(fn,"normalizePathname");function Ve(e,t){let n=ie(e),r=un(e,t);return async(s,i)=>{let a=Vo(s,{oauthMetadata:r,resourceServerUrl:t,...n.scopesSupported!==void 0&&{scopesSupported:[...n.scopesSupported]},...n.resourceName!==void 0&&{resourceName:n.resourceName},...n.serviceDocumentationUrl!==void 0&&{serviceDocumentationUrl:n.serviceDocumentationUrl}});return a!==void 0?a:i()}}o(Ve,"oauthMetadata");function mn(e){return v(e).authInfo}o(mn,"authInfoFromRequest");import{OAuthError as ya}from"@modelcontextprotocol/server";import{createRemoteJWKSet as Ta,jwtVerify as ba,errors as Ra}from"jose";import{OAuthClientMetadataSchema as za}from"@modelcontextprotocol/core";var Ua=new TextEncoder,_a=new TextDecoder("utf-8",{fatal:!0});function Be(){return typeof process>"u"||process.env===void 0?!1:process.env.MCP_USE_PHASE==="build"}o(Be,"isBuilding");var Ya=365*24*60*60;var Xa=5*1024;var Za=300*1e3;import{deleteCookie as yc,getCookie as wc,getSignedCookie as Tc,setSignedCookie as bc}from"hono/cookie";var kc=720*60*60;var Sc=1440*60*60,Cc=365*24*60*60;function ae(e){return e.inputSchema??e.schema}o(ae,"resolveToolInputSchema");import{fromJsonSchema as Yo}from"@modelcontextprotocol/server";var Tn="openai/ui";function Xo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(Xo,"record");function bn(e){let t=e.view?.entrypoints;if(!t?.length)return;let n=ae(e),r=n?Yo(n["~standard"].jsonSchema.input({target:"draft-2020-12"}))["~standard"].validate:void 0;for(let s of t){let i=s.type==="file"?s.extensions.map(a=>({file:{name:`file${a}`,resourceUri:"host-resource://opaque-handle"}})):[{}];if(s.type==="file"&&!r)throw new TypeError(`Tool "${e.name}" file entrypoint requires an inputSchema accepting { file: { name, resourceUri } }.`);for(let a of i){let d=r?.(a);if(d&&("then"in d||d.issues))throw new TypeError(`Tool "${e.name}" ${s.type} entrypoint launch arguments do not satisfy its inputSchema.`)}}}o(bn,"validateEntrypointInput");function Rn(e){let t=e.view?.entrypoints;if(t===void 0)return e._meta;let n=e._meta?.[Tn];return{...e._meta,[Tn]:{...Xo(n)?n:{},entrypoints:t.map(r=>r.type==="file"?{type:r.type,extensions:[...r.extensions]}:{type:r.type})}}}o(Rn,"buildEntrypointMeta");var Zo="mcp_use_sdk_event",Qo="https://eu.i.posthog.com/i/v0/e/",es="phc_lyTtbYwvkdSbrcMQNPiKiiRWrrM1seyKIMjycSvItEI",ts=/(^|_)(arguments?|args|body|command|headers?|location|message|organization|path|query|response|secret|subject|token|uri|url|user_agent)(_|$)/i,ns=new Set("feature action sdk_generation telemetry_schema_version sdk_package sdk_version server_id runtime_id identity_stability distinct_id validation_run_id is_validation".split(" ")),xn;function We(){return xn??=crypto.randomUUID(),xn}o(We,"getRuntimeId");var vn=new Set,ze=new Set,Mn=new Map;function Ke(e){return[...e].some(t=>{let n=t.charCodeAt(0);return n<32||n===127})}o(Ke,"hasControl");function Je(e){return typeof process>"u"?void 0:process.env?.[e]}o(Je,"env");function En(e){let t=Je(e);return t!==void 0&&t.length>0&&t.length<=128&&!Ke(t)?t:void 0}o(En,"safeEnv");function rs(){return typeof process>"u"||process.versions?.node===void 0?!1:!("Deno"in globalThis)}o(rs,"canPersistTelemetryIdentity");function Pn(){if(Je("MCP_USE_ANONYMIZED_TELEMETRY")==="false")return!0;try{return globalThis.__MCP_USE_ANONYMIZED_TELEMETRY__===!1||typeof localStorage<"u"&&localStorage.getItem("MCP_USE_ANONYMIZED_TELEMETRY")==="false"}catch{return!1}}o(Pn,"disabled");function kn(){return Pn()}o(kn,"isUsageDisabled");function os(e){return Object.fromEntries(Object.entries(e).filter(([t,n])=>t.length>128||Ke(t)||t.startsWith("$")||ns.has(t)||ts.test(t)||n===void 0?!1:typeof n=="string"?n.length<=128&&!Ke(n):typeof n=="boolean"||typeof n=="number"&&Number.isFinite(n)))}o(os,"clean");async function ss(e){let t=En("MCP_USE_TELEMETRY_PROJECT_ID");if(t!==void 0)return{id:t,stability:"project"};if(e===void 0||!rs())return{id:We(),stability:"process"};let n=Mn.get(e);if(n!==void 0)return n;let r=(async()=>{try{let s=await import("fs/promises"),i=`${e}/.mcp-use`,a=`${i}/usage.json`,d=o(async()=>{try{let l=JSON.parse(await s.readFile(a,"utf8"));if(typeof l=="object"&&l!==null&&"schemaVersion"in l&&l.schemaVersion===1&&"serverId"in l&&typeof l.serverId=="string"&&/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(l.serverId))return l.serverId}catch{}},"read"),c=await d();if(c!==void 0)return{id:c,stability:"server"};await s.mkdir(i,{recursive:!0,mode:448});let u=crypto.randomUUID();try{return await s.writeFile(a,`${JSON.stringify({schemaVersion:1,serverId:u})}
|
|
7
|
-
`,{flag:"wx",mode:384}),{id:u,stability:"server"}}catch{let l=await d();if(l!==void 0)return{id:l,stability:"server"}}}catch{}return{id:We(),stability:"process"}})();return Mn.set(e,r),r}o(ss,"identity");function is(e,t,n,r,s){let i=En("MCP_USE_TELEMETRY_VALIDATION_ID");if(Pn()||Je("NODE_ENV")==="test"&&i===void 0||ze.size>=16)return;if(r.onceKey!==void 0){if(vn.has(r.onceKey))return;vn.add(r.onceKey)}let a=Math.max(0,Math.min(1,r.sampleRate??1));if(i===void 0&&Math.random()>=a)return;let d=(async()=>{try{let c=await s(),u=JSON.stringify({api_key:es,event:Zo,properties:{...os(n),feature:e,action:t,sdk_generation:"v2",telemetry_schema_version:2,sdk_package:"mcp-use",sdk_version:"2.10.0",server_id:c.id,runtime_id:We(),identity_stability:c.stability,distinct_id:c.id,sample_rate:i===void 0?a:1,$process_person_profile:!1,$geoip_disable:!0,...i!==void 0&&{is_validation:!0,validation_run_id:i}}});await fetch(Qo,{method:"POST",headers:{"content-type":"application/json"},keepalive:!0,body:u})}catch{return}})();ze.add(d),d.then(()=>ze.delete(d))}o(is,"capture");function ce(e,t,n={},r={}){is(e,t,n,r,()=>ss(r.serverRoot))}o(ce,"recordUsage");import{INVALID_PARAMS as Sn,ProtocolError as Cn}from"@modelcontextprotocol/server";function Ye(e){return{"~standard":{version:1,vendor:"mcp-use",validate(t){try{return{value:e(t)}}catch(n){return{issues:[{message:n instanceof Error?n.message:String(n)}]}}}}}}o(Ye,"schema");function Xe(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("params must be an object");return e}o(Xe,"object");var as=Ye(e=>{let n=Xe(e).cursor;if(n!==void 0&&typeof n!="string")throw new TypeError("cursor must be a string");return n===void 0?{}:{cursor:n}}),An=Ye(e=>{let t=Xe(e);if(typeof t.uri!="string")throw new TypeError("uri must be a string");if(t.cursor!==void 0&&typeof t.cursor!="string")throw new TypeError("cursor must be a string");return{uri:t.uri,...typeof t.cursor=="string"&&{cursor:t.cursor}}}),Ge=Ye(e=>Xe(e));function cs(e){try{return decodeURIComponent(e)}catch{return e}}o(cs,"decodePathSegment");function On(e,t){let n=new Map(t.skills.map(r=>[r.uri,r]));for(let r of t.resources)e.registerResource(r.uri,r.uri,{title:r.name,mimeType:r.mimeType},async()=>({contents:[{uri:r.uri,mimeType:r.mimeType,...r.text!==void 0?{text:r.text}:{blob:r.blob}}]}));e.server.setRequestHandler("skills/list",{params:as,result:Ge},async()=>({skills:t.skills})),e.server.setRequestHandler("skills/get",{params:An,result:Ge},async({uri:r})=>{let s=n.get(r);if(s===void 0)throw new Cn(Sn,`Unknown skill: ${r}`);return{skill:s}}),e.server.setRequestHandler("resources/directory/read",{params:An,result:Ge},async({uri:r})=>{let s=r.replace(/\/$/,""),i=new Set(t.directories.map(c=>c.uri)),a=`${s}/`,d=new Map;for(let c of t.resources){if(!c.uri.startsWith(a))continue;let u=c.uri.slice(a.length),[l]=u.split("/");if(l===void 0||l==="")continue;let p=`${s}/${l}`;d.set(p,{uri:p,name:cs(l),mimeType:u.includes("/")?"inode/directory":c.mimeType})}for(let c of t.directories){if(!c.uri.startsWith(a))continue;let u=c.uri.slice(a.length);u===""||u.includes("/")||d.set(c.uri,{uri:c.uri,name:c.name,mimeType:"inode/directory"})}if(!i.has(s))throw new Cn(Sn,`Unknown skill directory: ${r}`);return{resources:[...d.values()].sort((c,u)=>c.uri.localeCompare(u.uri))}})}o(On,"registerSkillsRuntime");var Ze="io.modelcontextprotocol/skills",G=Symbol.for("mcp-use.registerSkills");var Y=Symbol("mcp-use/registerViews");function ds(e,t){if(!e.startsWith("/"))throw new Error(`View manifest asset path must be origin-absolute (start with "/"); got ${JSON.stringify(e)}`);return`${t}${e}`}o(ds,"resolveAssetUrl");function us(e,t){return`${C(e,`_mcp-use/views/${t}`)}/`}o(us,"viewAssetsBasePath");function Qe(e,t,n,r){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("data:")?e:e.startsWith("/")?ds(e,t):`${t}${us(n,r)}${e.replace(/^\/+/,"")}`}o(Qe,"resolveExternalAssetUrl");function ls(e,t){return`${e}${C(t,"_mcp-use/public")}/`}o(ls,"resolvePublicBase");function Un(e){return e.replaceAll(/<\/script/gi,"<\\/script").replaceAll("<!--","\\x3C!--")}o(Un,"escapeInlineScript");function ps(e){return e.replaceAll(/<\/style/gi,"<\\/style")}o(ps,"escapeInlineStyle");function et(e){return e.replaceAll("&","&").replaceAll('"',""").replaceAll("<","<").replaceAll(">",">")}o(et,"escapeHtml");var _n=`<style>
|
|
6
|
+
`)}o(Ro,"createToolDescription");function xo(e){return e.trim().replace(/[^a-zA-Z0-9_-]+/g,"_").replace(/_+/g,"_").replace(/^_/,"").replace(/_$/,"").slice(0,64)||"openapi_tool"}o(xo,"slugifyToolName");function vo(e,t,n){let r={},s=[];for(let{parameter:c,inputName:u}of n.parameters){let l=on(e,c.schema??{});r[u]={...l,description:c.description??`${c.in} parameter`},(c.required||c.in==="path")&&s.push(u)}let i=an(t.requestBody);i!==void 0&&n.bodyInputName!==void 0&&(r[n.bodyInputName]=on(e,i),t.requestBody?.required&&s.push(n.bodyInputName));let a=Po(e),d={type:"object",properties:r,additionalProperties:!1,...s.length>0&&{required:s},...a!==void 0&&{$defs:a}};return mo(d)}o(vo,"createToolInputSchema");function Mo(e){let t=e.parameters.filter(a=>a.in!=="cookie"),n=an(e.requestBody)===void 0?void 0:"body",r=new Map;for(let a of t)r.set(a.name,(r.get(a.name)??0)+1);let s=new Set(n===void 0?[]:[n]);return{parameters:t.map(a=>{let c=(r.get(a.name)??0)>1||a.name===n?`${a.name}_${a.in}`:a.name;return{parameter:a,inputName:Eo(c,s)}}),...n!==void 0&&{bodyInputName:n}}}o(Mo,"createInputBindings");function Eo(e,t){let n=e,r=2;for(;t.has(n);)n=`${e}_${r}`,r+=1;return t.add(n),n}o(Eo,"claimInputName");function Po(e){let t=H(e.components?.schemas);if(t===void 0)return;let n={};for(let[r,s]of Object.entries(t))n[r]=W(e,s,new Set);return n}o(Po,"createSchemaDefinitions");function on(e,t){let n=W(e,t,new Set);return H(n)??{}}o(on,"transformSchema");function W(e,t,n){if(Array.isArray(t))return t.map(d=>W(e,d,n));let r=H(t);if(r===void 0)return t;let s=typeof r.$ref=="string"?r.$ref:void 0,i={};for(let[d,c]of Object.entries(r))d!=="$ref"&&(d==="nullable"&&typeof c=="boolean"||So(d)&&typeof c=="boolean"||(i[d]=W(e,c,n)));for(let[d,c]of ko)r[c]===!0&&typeof r[d]=="number"&&(i[c]=r[d],delete i[d]);let a=i;if(s!==void 0){let d=Co(e,s);if(d!==void 0)a={$ref:d,...i};else if(!n.has(s)){let c=D(e,{$ref:s});if(c!==void 0){let u=new Set(n);u.add(s),a={...H(W(e,c,u))??{},...i}}}}return r.nullable===!0?{anyOf:[a,{type:"null"}]}:a}o(W,"transformSchemaNode");var ko=[["minimum","exclusiveMinimum"],["maximum","exclusiveMaximum"]];function So(e){return e==="exclusiveMinimum"||e==="exclusiveMaximum"}o(So,"isExclusiveBoundKey");function Co(e,t){let n="#/components/schemas/";if(t.startsWith(n))return D(e,{$ref:t})===void 0?void 0:`#/$defs/${t.slice(n.length)}`}o(Co,"rewriteSchemaRef");function an(e){let t=e?.content;if(t!==void 0)return t["application/json"]?.schema??t["application/*+json"]?.schema??Object.entries(t).find(([n])=>n.includes("+json"))?.[1].schema}o(an,"getJsonRequestBodySchema");async function Ao(e,t,n,r,s){let i=n.fetch??globalThis.fetch,a=Oo(e,t,r.parameters,s),d=Uo(r.parameters,t,n),c=r.bodyInputName,u=c===void 0||t[c]===void 0?void 0:JSON.stringify(t[c]);u!==void 0&&!$o(d,"content-type")&&(d["content-type"]="application/json");let l=await i(a,{method:e.method.toUpperCase(),headers:d,...u!==void 0&&{body:u}}),p=l.headers.get("content-type")??"";if(!l.ok)return{content:[{type:"text",text:await l.text()}],isError:!0};if(p.includes("application/json")||p.includes("+json")){let h=await l.text();try{let f=JSON.parse(h);return{content:[{type:"text",text:JSON.stringify(f)}],structuredContent:f}}catch{return{content:[{type:"text",text:h}]}}}return{content:[{type:"text",text:await l.text()}]}}o(Ao,"callOpenAPIOperation");function Oo(e,t,n,r){let s=e.path.replace(/{([^}]+)}/g,(a,d)=>{let c=n.find(({parameter:u})=>u.in==="path"&&u.name===d);return encodeURIComponent(String(c===void 0?"":t[c.inputName]??""))}),i=new URL(s.replace(/^\/+/,""),Lo(r));for(let{parameter:a,inputName:d}of n){if(a.in!=="query")continue;let c=t[d];c==null||c===""||Io(i,a.name,c)}return i.toString()}o(Oo,"buildUrl");function Uo(e,t,n){let r={...n.headers??{}};for(let{parameter:s,inputName:i}of e){if(s.in!=="header")continue;let a=t[i];a==null||a===""||(r[s.name]=String(a))}return n.auth?.type==="bearer"&&n.auth.token&&(r.authorization=`Bearer ${n.auth.token}`),n.auth?.type==="header"&&n.auth.value&&(r[n.auth.name]=n.auth.value),r}o(Uo,"buildHeaders");function _o(e){let t=e.baseUrl??e.spec.servers?.[0]?.url;if(t===void 0||t.trim()==="")throw new Error("MCPServer.fromOpenAPI requires options.baseUrl or spec.servers[0].url");return t}o(_o,"resolveBaseUrl");function Io(e,t,n){if(Array.isArray(n)){for(let r of n)r!=null&&r!==""&&e.searchParams.append(t,String(r));return}e.searchParams.set(t,String(n))}o(Io,"appendQueryParam");function Lo(e){return e.endsWith("/")?e:`${e}/`}o(Lo,"ensureTrailingSlash");function $o(e,t){return Object.keys(e).some(n=>n.toLowerCase()===t)}o($o,"hasHeader");function K(e){let t=H(e);return t!==void 0&&typeof t.$ref=="string"}o(K,"isReferenceObject");function D(e,t){if(!K(t))return t;if(!t.$ref.startsWith("#/"))return;let n=t.$ref.slice(2).split("/").map(s=>s.replace(/~1/g,"/").replace(/~0/g,"~")),r=e;for(let s of n){let i=H(r);if(i===void 0||!(s in i))return;r=i[s]}return r}o(D,"resolveRef");function H(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}o(H,"readRecord");import{OAuthError as vd,OAuthErrorCode as Md,bearerAuthChallengeResponse as Ed,getOAuthProtectedResourceMetadataUrl as wn,oauthMetadataResponse as Pd,requireBearerAuth as kd,verifyBearerToken as Sd}from"@modelcontextprotocol/server";import{getOAuthProtectedResourceMetadataUrl as ua,oauthMetadataResponse as Fo,requireBearerAuth as la}from"@modelcontextprotocol/server";function q(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}o(q,"isRecord");function O(e){let t=e.hostname.toLowerCase();return t==="localhost"||t.endsWith(".localhost")||t==="[::1]"||/^127(?:\.\d{1,3}){3}$/.test(t)}o(O,"isLocalhost");function V(e,t){let n;try{n=new URL(e)}catch{throw new Error(`${t} must be an absolute URL`)}if(n.origin==="null"||n.username!==""||n.password!=="")throw new Error(`${t} must be an absolute URL without credentials`);return n}o(V,"parseAbsoluteUrl");function J(e,t){if(e.protocol!=="https:"&&!(e.protocol==="http:"&&O(e)))throw new Error(`${t} must use HTTPS, or HTTP for localhost`)}o(J,"assertSecureHttpUrl");function Ne(e){if(e===null||typeof e!="object"||!("issuer"in e)||typeof e.issuer!="string")throw new TypeError("oauthMetadata must include a string issuer");J(V(e.issuer,"oauthMetadata.issuer"),"oauthMetadata.issuer")}o(Ne,"assertOAuthMetadata");import{OAuthError as jo,OAuthErrorCode as No}from"@modelcontextprotocol/server";function M(e,t){let n=new jo(No.InvalidToken,e);return t!==void 0&&(n.cause=t),n}o(M,"invalidToken");function cn(e){let t=e.provider,n=Ve(e.basePath);if(t.resource!==void 0)return De(t.resource,n);if(e.mcpUrl!==void 0)return De(pn(ln(e.mcpUrl,"MCP_URL"),n),n)}o(cn,"resolveConfiguredOAuthResource");function dn(e,t){let n=ln(e,"listen origin");if(!O(n))throw new Error("OAuth listen origin must be localhost or a loopback address");return De(pn(n,Ve(t)),t)}o(dn,"resolveLocalOAuthResource");function De(e,t){let n=Ve(t),r=V(e,"OAuth resource");if(r.search!==""||r.hash!=="")throw new Error("OAuth resource must not include a query string or fragment");if(J(r,"OAuth resource"),fn(r.pathname)!==n)throw new Error(`OAuth resource path must exactly match basePath (${n})`);return r.pathname=n,r}o(De,"validateOAuthResource");function He(e,t){let n=qe(t),r=e.createTokenVerifier(new URL(n.href));if(r===null||typeof r!="object"||typeof r.verifyAccessToken!="function")throw new TypeError("OAuth provider createTokenVerifier must return an OAuthTokenVerifier");return{async verifyAccessToken(s){let i=await r.verifyAccessToken(s);qo(i),Do(i,n);let a;try{a=e.mapAuthInfo(i)}catch(d){throw M("Token identity mapping failed",d)}return Vo(a),{...i,scopes:[...i.scopes],extra:{...i.extra,...a}}}}}o(He,"wrapOAuthTokenVerifier");function Do(e,t){if(e.resource===void 0)throw M("Token verifier did not return a validated protected resource");if(Ho(e.resource).href!==qe(t).href)throw M("Token resource does not match the protected resource")}o(Do,"assertResourceBinding");function Ho(e){if(!(e instanceof URL))throw M("Token resource must be an absolute HTTPS URL, or HTTP URL for localhost");let t=e;if(!/^https?:$/.test(t.protocol)||t.username!==""||t.password!==""||t.search!==""||t.hash!==""||t.protocol==="http:"&&!O(t))throw M("Token resource must be an absolute HTTPS URL, or HTTP URL for localhost");return qe(t)}o(Ho,"parseTokenResource");function qe(e){let t=new URL(e);return t.pathname=t.pathname==="/"?"/":t.pathname.replace(/\/+$/,""),t}o(qe,"normalizeResourceUrl");function un(e,t){let n=e.oauthMetadata;if(typeof n!="function")return n;let r=n(new URL(t.href));return Ne(r),r}o(un,"resolveOAuthMetadata");function ie(e){return{oauthMetadata:e.oauthMetadata,...e.requiredScopes!==void 0&&{requiredScopes:[...e.requiredScopes]},...e.scopesSupported!==void 0&&{scopesSupported:[...e.scopesSupported]},...e.resourceName!==void 0&&{resourceName:e.resourceName},...e.serviceDocumentationUrl!==void 0&&{serviceDocumentationUrl:e.serviceDocumentationUrl}}}o(ie,"getOAuthProviderOptions");function qo(e){if(e===null||typeof e!="object"||typeof e.token!="string"||e.token.length===0||typeof e.clientId!="string"||!Array.isArray(e.scopes)||!e.scopes.every(t=>typeof t=="string")||typeof e.expiresAt!="number"||!Number.isFinite(e.expiresAt)||e.expiresAt<=Date.now()/1e3)throw M("Token verifier returned invalid authentication information")}o(qo,"assertVerifiedAuthInfo");function Vo(e){if(e===null||typeof e!="object"||!("user"in e)||e.user===void 0||!q(e.payload)||!Array.isArray(e.permissions)||!e.permissions.every(t=>typeof t=="string"))throw M("Token identity mapping must return user, payload, and string permissions")}o(Vo,"assertMappedExtra");function ln(e,t){let n=V(e,t);if(n.pathname!=="/"||n.search!==""||n.hash!==""||n.username!==""||n.password!=="")throw new Error(`${t} must be an absolute origin without a path`);return n}o(ln,"requireAbsoluteOrigin");function pn(e,t){let n=new URL(e.origin);return n.pathname=t,n}o(pn,"appendBasePath");function Ve(e){if(!e.startsWith("/")||e.includes("?")||e.includes("#"))throw new Error("basePath must be an absolute URL pathname");return fn(e)}o(Ve,"normalizeBasePath");function fn(e){if(e==="/")return"/";let t=e.length;for(;t>0&&e.charCodeAt(t-1)===47;)t--;return e.slice(0,t)}o(fn,"normalizePathname");function Fe(e,t){let n=ie(e),r=un(e,t);return async(s,i)=>{let a=Fo(s,{oauthMetadata:r,resourceServerUrl:t,...n.scopesSupported!==void 0&&{scopesSupported:[...n.scopesSupported]},...n.resourceName!==void 0&&{resourceName:n.resourceName},...n.serviceDocumentationUrl!==void 0&&{serviceDocumentationUrl:n.serviceDocumentationUrl}});return a!==void 0?a:i()}}o(Fe,"oauthMetadata");function mn(e){return v(e).authInfo}o(mn,"authInfoFromRequest");import{OAuthError as ya}from"@modelcontextprotocol/server";import{createRemoteJWKSet as Ta,jwtVerify as ba,errors as Ra}from"jose";import{OAuthClientMetadataSchema as za}from"@modelcontextprotocol/core";var Ua=new TextEncoder,_a=new TextDecoder("utf-8",{fatal:!0});function Be(){return typeof process>"u"||process.env===void 0?!1:process.env.MCP_USE_PHASE==="build"}o(Be,"isBuilding");var Ya=365*24*60*60;var Xa=5*1024;var Za=300*1e3;import{deleteCookie as yc,getCookie as wc,getSignedCookie as Tc,setSignedCookie as bc}from"hono/cookie";var kc=720*60*60;var Sc=1440*60*60,Cc=365*24*60*60;function ae(e){return e.inputSchema??e.schema}o(ae,"resolveToolInputSchema");import{fromJsonSchema as Yo}from"@modelcontextprotocol/server";var Tn="openai/ui";function Xo(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(Xo,"record");function bn(e){let t=e.view?.entrypoints;if(!t?.length)return;let n=ae(e),r=n?Yo(n["~standard"].jsonSchema.input({target:"draft-2020-12"}))["~standard"].validate:void 0;for(let s of t){let i=s.type==="file"?s.extensions.map(a=>({file:{name:`file${a}`,resourceUri:"host-resource://opaque-handle"}})):[{}];if(s.type==="file"&&!r)throw new TypeError(`Tool "${e.name}" file entrypoint requires an inputSchema accepting { file: { name, resourceUri } }.`);for(let a of i){let d=r?.(a);if(d&&("then"in d||d.issues))throw new TypeError(`Tool "${e.name}" ${s.type} entrypoint launch arguments do not satisfy its inputSchema.`)}}}o(bn,"validateEntrypointInput");function Rn(e){let t=e.view?.entrypoints;if(t===void 0)return e._meta;let n=e._meta?.[Tn];return{...e._meta,[Tn]:{...Xo(n)?n:{},entrypoints:t.map(r=>r.type==="file"?{type:r.type,extensions:[...r.extensions]}:{type:r.type})}}}o(Rn,"buildEntrypointMeta");var Zo="mcp_use_sdk_event",Qo="https://eu.i.posthog.com/i/v0/e/",es="phc_lyTtbYwvkdSbrcMQNPiKiiRWrrM1seyKIMjycSvItEI",ts=/(^|_)(arguments?|args|body|command|headers?|location|message|organization|path|query|response|secret|subject|token|uri|url|user_agent)(_|$)/i,ns=new Set("feature action sdk_generation telemetry_schema_version sdk_package sdk_version server_id runtime_id identity_stability distinct_id validation_run_id is_validation".split(" ")),xn;function We(){return xn??=crypto.randomUUID(),xn}o(We,"getRuntimeId");var vn=new Set,ze=new Set,Mn=new Map;function Ke(e){return[...e].some(t=>{let n=t.charCodeAt(0);return n<32||n===127})}o(Ke,"hasControl");function Je(e){return typeof process>"u"?void 0:process.env?.[e]}o(Je,"env");function En(e){let t=Je(e);return t!==void 0&&t.length>0&&t.length<=128&&!Ke(t)?t:void 0}o(En,"safeEnv");function rs(){return typeof process>"u"||process.versions?.node===void 0?!1:!("Deno"in globalThis)}o(rs,"canPersistTelemetryIdentity");function Pn(){if(Je("MCP_USE_ANONYMIZED_TELEMETRY")==="false")return!0;try{return globalThis.__MCP_USE_ANONYMIZED_TELEMETRY__===!1||typeof localStorage<"u"&&localStorage.getItem("MCP_USE_ANONYMIZED_TELEMETRY")==="false"}catch{return!1}}o(Pn,"disabled");function kn(){return Pn()}o(kn,"isUsageDisabled");function os(e){return Object.fromEntries(Object.entries(e).filter(([t,n])=>t.length>128||Ke(t)||t.startsWith("$")||ns.has(t)||ts.test(t)||n===void 0?!1:typeof n=="string"?n.length<=128&&!Ke(n):typeof n=="boolean"||typeof n=="number"&&Number.isFinite(n)))}o(os,"clean");async function ss(e){let t=En("MCP_USE_TELEMETRY_PROJECT_ID");if(t!==void 0)return{id:t,stability:"project"};if(e===void 0||!rs())return{id:We(),stability:"process"};let n=Mn.get(e);if(n!==void 0)return n;let r=(async()=>{try{let s=await import("fs/promises"),i=`${e}/.mcp-use`,a=`${i}/usage.json`,d=o(async()=>{try{let l=JSON.parse(await s.readFile(a,"utf8"));if(typeof l=="object"&&l!==null&&"schemaVersion"in l&&l.schemaVersion===1&&"serverId"in l&&typeof l.serverId=="string"&&/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(l.serverId))return l.serverId}catch{}},"read"),c=await d();if(c!==void 0)return{id:c,stability:"server"};await s.mkdir(i,{recursive:!0,mode:448});let u=crypto.randomUUID();try{return await s.writeFile(a,`${JSON.stringify({schemaVersion:1,serverId:u})}
|
|
7
|
+
`,{flag:"wx",mode:384}),{id:u,stability:"server"}}catch{let l=await d();if(l!==void 0)return{id:l,stability:"server"}}}catch{}return{id:We(),stability:"process"}})();return Mn.set(e,r),r}o(ss,"identity");function is(e,t,n,r,s){let i=En("MCP_USE_TELEMETRY_VALIDATION_ID");if(Pn()||Je("NODE_ENV")==="test"&&i===void 0||ze.size>=16)return;if(r.onceKey!==void 0){if(vn.has(r.onceKey))return;vn.add(r.onceKey)}let a=Math.max(0,Math.min(1,r.sampleRate??1));if(i===void 0&&Math.random()>=a)return;let d=(async()=>{try{let c=await s(),u=JSON.stringify({api_key:es,event:Zo,properties:{...os(n),feature:e,action:t,sdk_generation:"v2",telemetry_schema_version:2,sdk_package:"mcp-use",sdk_version:"2.10.1-canary.0",server_id:c.id,runtime_id:We(),identity_stability:c.stability,distinct_id:c.id,sample_rate:i===void 0?a:1,$process_person_profile:!1,$geoip_disable:!0,...i!==void 0&&{is_validation:!0,validation_run_id:i}}});await fetch(Qo,{method:"POST",headers:{"content-type":"application/json"},keepalive:!0,body:u})}catch{return}})();ze.add(d),d.then(()=>ze.delete(d))}o(is,"capture");function ce(e,t,n={},r={}){is(e,t,n,r,()=>ss(r.serverRoot))}o(ce,"recordUsage");import{INVALID_PARAMS as Sn,ProtocolError as Cn}from"@modelcontextprotocol/server";function Ye(e){return{"~standard":{version:1,vendor:"mcp-use",validate(t){try{return{value:e(t)}}catch(n){return{issues:[{message:n instanceof Error?n.message:String(n)}]}}}}}}o(Ye,"schema");function Xe(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("params must be an object");return e}o(Xe,"object");var as=Ye(e=>{let n=Xe(e).cursor;if(n!==void 0&&typeof n!="string")throw new TypeError("cursor must be a string");return n===void 0?{}:{cursor:n}}),An=Ye(e=>{let t=Xe(e);if(typeof t.uri!="string")throw new TypeError("uri must be a string");if(t.cursor!==void 0&&typeof t.cursor!="string")throw new TypeError("cursor must be a string");return{uri:t.uri,...typeof t.cursor=="string"&&{cursor:t.cursor}}}),Ge=Ye(e=>Xe(e));function cs(e){try{return decodeURIComponent(e)}catch{return e}}o(cs,"decodePathSegment");function On(e,t){let n=new Map(t.skills.map(r=>[r.uri,r]));for(let r of t.resources)e.registerResource(r.uri,r.uri,{title:r.name,mimeType:r.mimeType},async()=>({contents:[{uri:r.uri,mimeType:r.mimeType,...r.text!==void 0?{text:r.text}:{blob:r.blob}}]}));e.server.setRequestHandler("skills/list",{params:as,result:Ge},async()=>({skills:t.skills})),e.server.setRequestHandler("skills/get",{params:An,result:Ge},async({uri:r})=>{let s=n.get(r);if(s===void 0)throw new Cn(Sn,`Unknown skill: ${r}`);return{skill:s}}),e.server.setRequestHandler("resources/directory/read",{params:An,result:Ge},async({uri:r})=>{let s=r.replace(/\/$/,""),i=new Set(t.directories.map(c=>c.uri)),a=`${s}/`,d=new Map;for(let c of t.resources){if(!c.uri.startsWith(a))continue;let u=c.uri.slice(a.length),[l]=u.split("/");if(l===void 0||l==="")continue;let p=`${s}/${l}`;d.set(p,{uri:p,name:cs(l),mimeType:u.includes("/")?"inode/directory":c.mimeType})}for(let c of t.directories){if(!c.uri.startsWith(a))continue;let u=c.uri.slice(a.length);u===""||u.includes("/")||d.set(c.uri,{uri:c.uri,name:c.name,mimeType:"inode/directory"})}if(!i.has(s))throw new Cn(Sn,`Unknown skill directory: ${r}`);return{resources:[...d.values()].sort((c,u)=>c.uri.localeCompare(u.uri))}})}o(On,"registerSkillsRuntime");var Ze="io.modelcontextprotocol/skills",G=Symbol.for("mcp-use.registerSkills");var Y=Symbol("mcp-use/registerViews");function ds(e,t){if(!e.startsWith("/"))throw new Error(`View manifest asset path must be origin-absolute (start with "/"); got ${JSON.stringify(e)}`);return`${t}${e}`}o(ds,"resolveAssetUrl");function us(e,t){return`${C(e,`_mcp-use/views/${t}`)}/`}o(us,"viewAssetsBasePath");function Qe(e,t,n,r){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("data:")?e:e.startsWith("/")?ds(e,t):`${t}${us(n,r)}${e.replace(/^\/+/,"")}`}o(Qe,"resolveExternalAssetUrl");function ls(e,t){return`${e}${C(t,"_mcp-use/public")}/`}o(ls,"resolvePublicBase");function Un(e){return e.replaceAll(/<\/script/gi,"<\\/script").replaceAll("<!--","\\x3C!--")}o(Un,"escapeInlineScript");function ps(e){return e.replaceAll(/<\/style/gi,"<\\/style")}o(ps,"escapeInlineStyle");function et(e){return e.replaceAll("&","&").replaceAll('"',""").replaceAll("<","<").replaceAll(">",">")}o(et,"escapeHtml");var _n=`<style>
|
|
8
8
|
html,body,#root{background:transparent}
|
|
9
9
|
html,body{margin:0}
|
|
10
10
|
#root[data-mcp-use-loading]{display:flex;min-height:100vh;align-items:center;justify-content:center;flex-direction:column;gap:10px;color:rgba(127,127,127,.9)}
|
|
@@ -40,4 +40,4 @@ ${a}
|
|
|
40
40
|
${d}
|
|
41
41
|
<script type="module" src="${et(u)}"></script>
|
|
42
42
|
</body>
|
|
43
|
-
</html>`}o(tt,"synthesizeViewDocument");var fs=".mcp-use/build/views/public",ms="public",hs=".mcp-use/build/views",In=new WeakMap;function Ln(e,t,n,r){let s;try{s=decodeURIComponent(t)}catch{return new Response("Not Found",{status:404})}if(s.includes("\\")||s.split("/").includes(".."))return new Response("Not Found",{status:404});let i=Object.hasOwn(e,s)?e[s]:void 0;if(i===void 0)return new Response("Not Found",{status:404});let a=null;return n.method!=="HEAD"&&(a=In.get(i)??null,a===null&&(a=Uint8Array.from(atob(i.body),d=>d.charCodeAt(0)),In.set(i,a))),new Response(a,{headers:{"Content-Type":i.contentType,"Cache-Control":"public, max-age=0, must-revalidate",...r!==!0&&{"Access-Control-Allow-Origin":"*"}}})}o(Ln,"serveEmbeddedAsset");function nt(e,t,n){if(t.size===0)return;let r=C(e,"_mcp-use/views"),s=n?.projectRoot??process.cwd();return async i=>{if(i.method!=="GET"&&i.method!=="HEAD")return new Response("Method Not Allowed",{status:405});if(!Q(i,r))return new Response("Not Found",{status:404});let d=Z(i).slice(r.length+1),c=d.indexOf("/");if(c<=0||c===d.length-1)return new Response("Not Found",{status:404});let u=d.slice(0,c),l=d.slice(c+1),p=t.get(u);if(p===void 0||p.kind!=="external")return new Response("Not Found",{status:404});if(n?.assets!==void 0)return Ln(n.assets,d,i,n.deferCors);let[{join:h},{resolvePublicFilePath:f,servePublicFile:m}]=await Promise.all([import("path"),import("./public-route-AVKCGJDQ.js")]),g=h(s,hs,u),y=await f(g,l);return y===null?new Response("Not Found",{status:404}):await m(y,{...n?.deferCors===!0&&{deferCors:!0},...i.method==="HEAD"&&{head:!0}})}}o(nt,"createViewAssetsHandler");function rt(e,t,n){if(t.size===0&&n?.enabled!==!0)return;let r=C(e,"_mcp-use/public"),s=n?.dev===!0?ms:fs,i=n?.projectRoot??process.cwd();return async a=>{if(a.method!=="GET"&&a.method!=="HEAD")return new Response("Method Not Allowed",{status:405});if(!Q(a,r))return new Response("Not Found",{status:404});let c=Z(a).slice(r.length+1),u;try{u=decodeURIComponent(c)}catch{return new Response("Not Found",{status:404})}if(u.length===0)return new Response("Not Found",{status:404});if(n?.assets!==void 0)return Ln(n.assets,`public/${c}`,a,n.deferCors);let[{join:l},{resolvePublicFilePath:p,servePublicFile:h}]=await Promise.all([import("path"),import("./public-route-AVKCGJDQ.js")]),f=l(i,s),m=await p(f,u);return m===null?new Response("Not Found",{status:404}):await h(m,{...n?.deferCors===!0&&{deferCors:!0},...a.method==="HEAD"&&{head:!0}})}}o(rt,"createViewPublicHandler");var gs={connectDomains:"CSP_CONNECT_DOMAINS",resourceDomains:"CSP_RESOURCE_DOMAINS",frameDomains:"CSP_FRAME_DOMAINS",baseUriDomains:"CSP_BASE_URI_DOMAINS"};function ys(e){return e===void 0||e.trim()===""?[]:e.split(",").map(t=>t.trim()).filter(t=>t.length>0)}o(ys,"parseDomainList");function $n(e){if(typeof process>"u")return;let t=process.env[e];if(!(t===void 0||t.trim()===""))return ys(t)}o($n,"readEnvDomains");function ws(){return $n("CSP_URLS")??[]}o(ws,"readCspUrlsShortcut");function de(e){let t=$n(gs[e]);return t!==void 0?t:ws()}o(de,"readEnvDomainsForCategory");function X(...e){let t=new Set,n=[];for(let r of e)for(let s of r)t.has(s)||(t.add(s),n.push(s));return n}o(X,"mergeDomainLists");function Ts(e){return e.startsWith("https://")?`wss://${e.slice(8)}`:e.startsWith("http://")?`ws://${e.slice(7)}`:e}o(Ts,"toWebSocketOrigin");function jn(e,t){let n=e?.csp,r=[];t.serverOrigin!==""&&(r.push(t.serverOrigin),t.hmrWs===!0&&r.push(Ts(t.serverOrigin)));let s=[],i=t.explicitAssetsBase?t.assetsOrigin:t.serverOrigin;i!==""&&s.push(i);let a=X(n?.connectDomains??[],de("connectDomains"),r),d=X(n?.resourceDomains??[],de("resourceDomains"),s),c=X(n?.frameDomains??[],de("frameDomains")),u=X(n?.baseUriDomains??[],de("baseUriDomains")),l=X(n?.scriptDirectives??[],t.hmrWs===!0?["'unsafe-eval'"]:[]);return{...n,connectDomains:a,resourceDomains:d,frameDomains:c,baseUriDomains:u,...l.length>0?{scriptDirectives:l}:{}}}o(jn,"buildMergedResourceCsp");function ot(e,t,n){if(e===void 0&&t===void 0&&n===void 0)return;let r={...n},s=n?.["ui"],i=typeof s=="object"&&s!==null&&!Array.isArray(s),a=i?{...s}:{};if(e!==void 0){let d=I(e);a.resourceUri=d,r[te]=d}else delete a.resourceUri,delete r[te];return t!==void 0?a.visibility=[t]:delete a.visibility,(e!==void 0||t!==void 0||i)&&(r["ui"]=a),r}o(ot,"buildToolUiMeta");function st(e){let t=I(e);return{ui:{resourceUri:t},[te]:t}}o(st,"buildToolResultUiMeta");function bs(e){let t=e?.request,n=e?.serverOrigin??(t!==void 0?pt(t):""),r=e?.assetsBase??(t!==void 0?S(t):n);return{serverOrigin:n,assetsOrigin:ft(r),explicitAssetsBase:mt(),...e?.hmrWs===!0?{hmrWs:!0}:{}}}o(bs,"resolveCspOptions");function ue(e,t){let r={csp:jn(e,bs(t))};return e?.permissions!==void 0&&(r.permissions=e.permissions),e?.domain!==void 0&&(r.domain=e.domain),e?.prefersBorder!==void 0&&(r.prefersBorder=e.prefersBorder),{ui:r,...e?.displayModes!==void 0&&{"openai/ui":{availableDisplayModes:e.displayModes.filter(s=>s==="inline"||s==="fullscreen"),...e.preferredDisplayMode!==void 0&&{preferredDisplayMode:e.preferredDisplayMode}}}}}o(ue,"buildResourceUiMeta");function it(e,t,n,r){return{mimeType:ee,...n?.description!==void 0&&{description:n.description},_meta:ue(n,r)}}o(it,"viewResourceConfig");var Nn=".claudemcpcontent.com",Rs=32;function xs(e){let t=e?.name;return typeof t=="string"&&t.toLowerCase().includes("claude")}o(xs,"isClaudeClient");async function vs(e){if(e.endsWith(Nn))return e;let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e));return`${Array.from(new Uint8Array(t),r=>r.toString(16).padStart(2,"0")).join("").slice(0,Rs)}${Nn}`}o(vs,"computeClaudeResourceDomain");async function at(e,t,n){let r=typeof t?.name=="string"||typeof n!="string"||n.trim().length===0?t:{...t,name:n.trim()};if(!xs(r))return e;let s=e["ui"];if(typeof s!="object"||s===null||Array.isArray(s))return e;let i=s.domain;return typeof i!="string"||i.length===0?e:{...e,ui:{...s,domain:await vs(i)}}}o(at,"applyClaudeResourceDomain");function V(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}o(V,"record");function ct(e,t){if(typeof e!="string")return t;let n=e.trim();return n.length>0&&n.length<=64&&![...n].some(r=>{let s=r.charCodeAt(0);return s<32||s===127})?n:t}o(ct,"productId");function Fn(e){if(!Bn(e))return;let t=V(e.params);if(e.method==="initialize"){let i=V(t?.clientInfo),a=V(t?.capabilities)??{};return Vn(i,a,t?.protocolVersion,"legacy")}let n=V(t?._meta),r=V(n?.[Ss]),s=V(n?.[ks]);if(!(r===void 0||s===void 0))return Vn(r,s,n?.[Cs],"modern")}o(Fn,"clientUsageFromBody");function Vn(e,t,n,r){let s=t;return{client_name:ct(e?.name,"other"),client_version:ct(e?.version,"unknown"),protocol_era:r,protocol_version:ct(n,"unknown"),connection_mode:r==="modern"?"stateless_request":"legacy_session",sampling_capability:Object.hasOwn(t,"sampling"),elicitation_capability:Object.hasOwn(t,"elicitation"),roots_capability:Object.hasOwn(t,"roots"),extensions_capability:Object.hasOwn(t,"extensions"),views_capability:ne(s),capability_count:Object.keys(t).length}}o(Vn,"clientUsage");function Os(e,t){e.use("*",async(n,r)=>{let s=await t(n.req.raw,async()=>(await r(),n.res));return n.res=s,s})}o(Os,"registerFetchMiddleware");var dt=class e{static{o(this,"MCPServer")}#e;#q;#o;#t=new Map;#s=new Map;#P=new Map;#a=new Map;#c=new Map;#r;#y;#U=!1;#D;#l=new Map;#w=!1;#T;#p=!1;#d=process.cwd();#_;#F;#f;#k;#b;#S;#C=!1;#V=!1;#I;#B=!1;#L;#R=[];#z=!1;#x=[];#m=[];#W;#v=new Set;#h=new Set;#A=new Set;#O=new Set;#K=0;#$=0;#J=0;#G=0;#Y=0;#X=0;#Z=[];#j=new Set;#Q=!1;app;get;post;put;patch;delete;all;fetch;static fromOpenAPI(t){let n=new e({name:t.name??t.spec.info.title,version:t.version??t.spec.info.version??"1.0.0"});sn(n,t);for(let r of n.#t.keys())n.#v.add(r);return n}constructor(t){if(Et(t),this.#e=t,this.#o=vt(t),this.app=new Dn,this.app.use("*",async(n,r)=>{v(n.req.raw).honoContext=n,await r()}),this.get=this.app.get.bind(this.app),this.post=this.app.post.bind(this.app),this.put=this.app.put.bind(this.app),this.patch=this.app.patch.bind(this.app),this.delete=this.app.delete.bind(this.app),this.all=this.app.all.bind(this.app),this.fetch=async(n,r,s)=>(await this.#g(),this.#u("handler"),this.#F.fetch(n,r,s)),t.oauth!==void 0){let n=typeof process>"u"?void 0:process.env.MCP_URL,r=cn({provider:t.oauth,basePath:this.#i(),...n!==void 0&&{mcpUrl:n}});this.#S=r,this.#C=r!==void 0,this.#V=r===void 0}}get basePath(){return this.#i()}get host(){return this.#e.host}get port(){return this.#e.port}get branding(){return this.#o}getHandler(){return this.fetch}tool(t,n){if(this.#n("tool",t.name),this.#r!==void 0&&[this.#r.capability.readTool,this.#r.capability.updateTool].includes(t.name))throw new Error(`Tool "${t.name}" is reserved for settings`);let r=this.#re(t);return bn(t),this.#le(t),this.#v.delete(t.name),this.#h.delete(t.name),this.#t.set(t.name,{definition:t,callback:n,schemes:r}),Object.freeze({name:t.name})}settings(t){if(this.#n("settings",t.readTool??"settings.read"),this.#r!==void 0)throw new Error("Settings are already registered on this server");let n=Yt(t);for(let i of[n.capability.readTool,n.capability.updateTool])if(this.#t.has(i))throw new Error(`Settings tool "${i}" is already registered`);let r=t.read,s=t.update;this.tool(n.readDefinition,async(i,a)=>({content:[],structuredContent:{schema:n.schema,...n.layout!==void 0&&{layout:n.layout},values:await r(a)}})),this.tool(n.updateDefinition,async({set:i},a)=>({content:[],structuredContent:{values:await s(i,a)}})),this.#r=n}mentions(t){this.#n("mentions",t.name);let n=en(t);if(this.#t.has(t.name))throw new Error(`Mention tool "${t.name}" is already registered`);let r=t.search,s=this.tool(n,async(i,a)=>({content:[],structuredContent:await r(i,a)}));return this.#t.get(t.name).mentions=!0,s}[Y](t,n){if(this.#w)throw new Error("Cannot prime views: the views registry is already primed on this server instance.");this.#n("views","manifest");for(let[r,s]of Object.entries(t))try{we(s.viewConfig)}catch(i){throw new Error(`View "${r}" has an invalid viewConfig: ${i instanceof Error?i.message:String(i)}`,{cause:i})}this.#p=n?.dev===!0,this.#T=n?.assets,n?.projectRoot!==void 0&&(this.#d=n.projectRoot);for(let[r,s]of Object.entries(t))this.#c.set(r,s);this.#w=!0}__primeViews(t,n){this[Y](t,n)}[G](t){this.#n("skills","snapshot"),this.#y=t,this.#U=!0}__primeSkills(t){this[G](t)}__skillsConfig(){return this.#e.skills}async#se(t,n){let{discoverConfiguredSkills:r}=await import("#mcp-use-skills-loader"),s=r(this.#e.skills,t,n);return this[G](s),s}resource(t,n){this.#n("resource",t.name);let r=this.#s.get(t.name);return r!==void 0&&this.#A.delete(r.definition.uri),this.#s.set(t.name,{definition:t,callback:n}),this}resourceTemplate(t,n){this.#n("resourceTemplate",t.name);let r=t.complete===void 0?void 0:Zt(t.complete);return this.#P.set(t.name,{definition:t,...r!==void 0&&{complete:r},callback:n}),this}prompt(t,n){return this.#n("prompt",t.name),this.#O.delete(t.name),this.#a.set(t.name,{definition:t,callback:n}),this}async proxy(t){this.#N("proxy()");let n=(async()=>{let{isProxyConnection:r,mountProxyConnection:s,mountProxyServers:i}=await import("./mcp-proxy-YSI2UFBY.js");if(r(t)){this.#$+=1,await s(this.#te(),t);return}this.#$+=Object.keys(t).length,await i(this.#te(),t)})();this.#j.add(n);try{await n}finally{this.#j.delete(n)}}use(t,...n){if(typeof t=="string"&&t.startsWith("mcp:")){this.#n("middleware",t);let s=n[0];return this.#x.push(Se(t,s)),this}return this.app.use.call(this.app,t,...n),this.#K+=typeof t=="function"?1:n.length,this}on(t,n){return this.#n("event listener",t),this.#m.push(Ce(t,n)),this}__setEventBus(t){this.#n("event bus","shared"),this.#k=t}__setRequestLogPrefix(t){this.#n("request log prefix","development"),this.#q=t}__mount(){if(!this.#U)throw new Error("Cannot mount before skills discovery. CLI tooling must call __primeSkills first.");this.#u("handler")}async notifyToolsChanged(){await this.#g(),await this.#u("handler").handler.notify.toolsChanged()}async notifyPromptsChanged(){await this.#g(),await this.#u("handler").handler.notify.promptsChanged()}async notifyResourcesChanged(){await this.#g(),await this.#u("handler").handler.notify.resourcesChanged()}async notifyResourceUpdated(t){await this.#g(),await this.#u("handler").handler.notify.resourceUpdated(t)}async listen(t=void 0,n={}){this.#N("listen()"),await this.#g();let r=Pt(n.host,this.#e.host),s=kt(t,this.#e.port);return this.#ae(r),new Promise((i,a)=>{let d,c,u=new Promise((m,g)=>{d=m,c=g});u.catch(()=>{});let l=!1,p=o(m=>{l||(l=!0,a(m)),c?.(m),new Promise(g=>f.close(()=>g())).catch(()=>{}).finally(()=>{this.#b===f&&(this.#b=void 0)})},"rejectAndClose"),h=Ct({fetch:o(async m=>(await u)(m),"fetch")}),f=As((m,g)=>{h(m,g)});f.once("error",p),f.listen(s,r,()=>{try{let m=f.address(),g=typeof m=="object"&&m!==null?m.port:s,{fetch:y}=this.#u("listen",g,r);d?.(y),l||(l=!0,i({port:g,url:`http://localhost:${g}${this.#i()}`}))}catch(m){p(m)}}),this.#b=f})}async close(){this.#Q=!0,await Promise.allSettled([...this.#j]);let t=[],n=this.#Z.splice(0),r=await Promise.allSettled(n.map(i=>i.close()));for(let i of r)i.status==="rejected"&&t.push(i.reason);try{await this.#f?.close()}catch(i){t.push(i)}let s=this.#b;if(s!==void 0)try{await new Promise((i,a)=>{s.close(d=>d?a(d):i())}),this.#b=void 0}catch(i){t.push(i)}if(t.length>0)throw new AggregateError(t,"Failed to close MCP server cleanly")}#N(t){if(this.#Q)throw t!==void 0?new Error(`Cannot call ${t} after the server has closed.`):new Error("Cannot use the server after it has closed.")}#i(){return this.#e.basePath??"/mcp"}#ie(t,n,r){if(this.#e.oauth===void 0)return;if(this.#C)return this.#S;let s=r??this.#e.host??"127.0.0.1",i=t==="listen"&&n!==void 0&&["127.0.0.1","localhost","::1"].includes(s);if(this.#V&&i)return this.#S=dn(`http://localhost:${n}`,this.#i()),this.#C=!0,this.#S;throw new Error("OAuth requires an explicit resource or MCP_URL when using server.fetch or listening on a non-local host")}#ae(t){if(this.#e.oauth!==void 0&&!["127.0.0.1","localhost","::1"].includes(t)&&!this.#C)throw new Error("OAuth listen() on a public or wildcard host requires an explicit provider resource or valid MCP_URL.")}#n(t,n){if(this.#f!==void 0)throw new Error(`Cannot register ${t} "${n}" after the server has started: registrations are replayed per request from the registry, so register everything before listen()/server.fetch.`)}#ce(){ce("server","configured",{tools_total:this.#t.size,tools_local:this.#t.size-this.#v.size-this.#h.size,tools_openapi:this.#v.size,tools_proxied:this.#h.size,resources:this.#s.size,resource_templates:this.#P.size,prompts:this.#a.size,views:this.#c.size,proxy_servers_configured:this.#$,proxy_servers_connected:this.#J,proxy_tools_discovered:this.#G,proxy_resources_discovered:this.#Y,proxy_prompts_discovered:this.#X,proxy_tools_mounted:this.#h.size,proxy_resources_mounted:this.#A.size,proxy_prompts_mounted:this.#O.size,http_middleware:this.#K,mcp_middleware:this.#x.length,observers_before:this.#m.filter(({phase:t})=>t==="before").length,observers_complete:this.#m.filter(({phase:t})=>t==="complete").length,oauth_configured:this.#e.oauth!==void 0,cors_configured:this.#e.cors!==void 0,request_state_configured:this.#e.requestState!==void 0,legacy_policy:this.#e.legacy??"stateless"},{onceKey:`${this.#ee()}:server`,serverRoot:this.#d})}#de(t){let n=Fn(t);n!==void 0&&ce("client","observed",{...n},{onceKey:`${this.#ee()}:client:${JSON.stringify(n)}`,serverRoot:this.#d})}#ee(){return this.#W??=crypto.randomUUID(),this.#W}#ue(t,n,r,s){let i=this.#e.oauth?.setup;if(i===void 0||this.#B)return;if(this.#L!==void 0)throw this.#L.error;let a=!0,d=o(u=>{if(!a)throw new Error(`[mcp-use] OAuthProviderHost.${u}() called after the provider's setup hook returned; call it from setup().`)},"assertActive"),c={resourceUrl:t,basePath:n,mixedAuth:this.#e.mixedAuth===!0,mode:r,listenHost:r==="listen"?s:void 0,route:o((u,l,p)=>{if(d("route"),u!=="GET"&&u!=="POST"&&u!=="OPTIONS")throw new TypeError("[mcp-use] OAuthProviderHost.route() method must be GET, POST, or OPTIONS");if(typeof p!="function")throw new TypeError("[mcp-use] OAuthProviderHost.route() handler must be a function");let h=n==="/"?"/":`${n}/`;if(typeof l!="string"||!l.startsWith(h)||l.length===h.length||/[?#*:]/.test(l)||l.split("/").some(f=>f==="."||f===".."))throw new TypeError(`[mcp-use] OAuthProviderHost.route() path must be a literal pathname under ${h}`);if(this.#R.some(f=>f.method===u&&f.path===l))throw new Error(`[mcp-use] OAuth provider route ${u} ${l} is already registered`);this.#R.push({method:u,path:l,handler:p})},"route"),use:o((u,l)=>{d("use"),this.use(u,l)},"use"),tool:o((u,l)=>{if(d("tool"),this.#t.has(u.name))throw new Error(`[mcp-use] Tool "${u.name}" is reserved by the OAuth provider; rename the application tool.`);return this.tool(u,l)},"tool"),resource:o((u,l)=>{if(d("resource"),this.#s.has(u.name))throw new Error(`[mcp-use] Resource "${u.name}" is reserved by the OAuth provider; rename the application resource.`);this.resource(u,l)},"resource"),resourceTemplate:o((u,l)=>{if(d("resourceTemplate"),this.#P.has(u.name))throw new Error(`[mcp-use] Resource template "${u.name}" is reserved by the OAuth provider; rename the application resource template.`);this.resourceTemplate(u,l)},"resourceTemplate"),prompt:o((u,l)=>{if(d("prompt"),this.#a.has(u.name))throw new Error(`[mcp-use] Prompt "${u.name}" is reserved by the OAuth provider; rename the application prompt.`);this.prompt(u,l)},"prompt"),listTools:o(()=>(d("listTools"),[...this.#t.values()].map(({definition:u})=>u)),"listTools"),instructions:o(u=>{d("instructions"),this.#I=u(this.#I??this.#e.instructions)},"instructions")};try{let u=i(c);if(typeof u?.then=="function")throw Promise.resolve(u).catch(()=>{}),new TypeError("[mcp-use] The OAuth provider's setup hook must be synchronous but returned a promise. Do async work before creating the provider.")}catch(u){throw this.#L={error:u},u}finally{a=!1}this.#B=!0}#te(){return{isStarted:o(()=>this.#f!==void 0,"isStarted"),hasTool:o(t=>this.#t.has(t),"hasTool"),hasResource:o(t=>this.#s.has(t),"hasResource"),hasPrompt:o(t=>this.#a.has(t),"hasPrompt"),registerTool:o((t,n)=>{this.#n("tool",t.name),this.#h.add(t.name),this.#t.set(t.name,{definition:t,callback:n,schemes:this.#re(t)})},"registerTool"),registerResource:o((t,n)=>{this.#n("resource",t.name),this.#A.add(t.uri),this.#s.set(t.name,{definition:t,callback:n})},"registerResource"),registerPrompt:o((t,n)=>{this.#n("prompt",t.name),this.#O.add(t.name),this.#a.set(t.name,{definition:t,callback:n})},"registerPrompt"),trackOwner:o(t=>{this.#Z.push(t)},"trackOwner"),trackNamespace:o(({tools:t,resources:n,prompts:r})=>{this.#J+=1,this.#G+=t,this.#Y+=n,this.#X+=r},"trackNamespace")}}async#g(){this.#U||(this.#D??=this.#se(typeof process>"u"?".":process.cwd(),"skills").then(()=>{}),await this.#D)}#ne(t,n){let{allowedHosts:r,allowedOrigins:s}=this.#e,i=n??this.#e.host??"127.0.0.1",a=["127.0.0.1","localhost","::1"].includes(i),d=r!==void 0?[...new Set([...Hn(),...r])]:t==="listen"&&a?Hn():void 0,c=s!==void 0?[...new Set([...Ms(),...s])]:void 0;return{hosts:d,origins:c}}#u(t,n,r){if(this.#N(),this.#_===void 0||this.#f===void 0){let{hosts:s,origins:i}=this.#ne(t,r),a=this.#i(),d=a==="/"?"":a,c=new Dn,u=[Ie({...this.#e.logging,mcpPath:a,prefix:this.#q}),me()],l=this.#e.cors;l!==void 0&&u.unshift($t(l));let p=jt(l);s!==void 0&&u.unshift(he(s)),i!==void 0&&u.push(ge(i,!0,w=>{if(this.#R.length===0)return!1;let R=new URL(w.url).pathname;return this.#R.some(U=>U.method===w.method&&U.path===R)})),s===void 0&&t==="listen"&&console.warn(`[mcp-use] listen() is serving on ${r} without Host validation. Behind a platform edge that only routes your own domains this is expected; if this process is reachable directly, set allowedHosts to restrict it.`);let h=this.#ie(t,n,r);if(h!==void 0){let w=this.#e.oauth;u.push(Ve(w,h))}for(let w of u)Os(c,w);if(h!==void 0){this.#ue(h,a,t,r);for(let w of this.#R)c.on(w.method,w.path,R=>w.handler(R))}for(let w of this.#r?.layout??[])for(let R of w.items)if(R.kind==="tool"&&!this.#t.has(R.tool))throw new Error(`Settings action tool "${R.tool}" is not registered on this server`);this.#pe();let{handler:f,fetch:m}=Le(w=>this.#fe(w),{path:a,...(this.#e.legacy!==void 0||this.#k!==void 0)&&{handler:{...this.#e.legacy!==void 0&&{legacy:this.#e.legacy},...this.#k!==void 0&&{bus:this.#k}}},...h!==void 0&&{authInfo:o(w=>mn(w),"authInfo")}});if(h!==void 0){let w=this.#e.oauth,R=ie(w),U=this.#e.mixedAuth===!0,Wn={verifier:qe(w,h),resourceMetadataUrl:wn(h),baselineScopes:R.requiredScopes??[],mixedAuth:U,toolSchemes:o(_=>this.#t.get(_)?.schemes,"toolSchemes"),openResourceUris:[...this.#l.keys()].map(I)},ut;c.use("*",async(_,le)=>{if(new URL(_.req.url).pathname!==a){await le();return}if((this.#e.publicLandingPage===!0||U)&&fe(_.req.raw)){await le();return}ut??=import("./gate-5X3JUL36.js").then(({createOAuthGate:Kn})=>Kn(Wn));let lt=await(await ut)(_.req.raw,async()=>(await le(),_.res));return _.res=lt,lt})}let g=o(w=>{let R=v(w).parsedBody;return Bn(R)&&(this.#ce(),this.#de(R)),m(w)},"mcpRouteHandler"),y=o(async w=>fe(w)?o(async()=>{let{createLandingPageResponse:U}=await import("./landing-handler-3ZBRKAI2.js");return U(w,a,this.#e,this.#o,this.#t.values(),this.#a.values(),this.#s.values())},"respond")():g(w),"endpointHandler"),T=this.#w?this.#p:process.env.NODE_ENV!=="production",x=Mt(this.#o,{dev:T,projectRoot:this.#d,deferCors:p});x!==void 0&&this.app.all("/favicon.ico",w=>x(w.req.raw));let b=rt(a,this.#c,{dev:this.#w?this.#p:T,projectRoot:this.#d,enabled:xe(this.#o)||[...this.#t.values()].some(w=>w.definition.icons!==void 0&&xe({icons:w.definition.icons})),deferCors:p,...this.#T!==void 0&&{assets:this.#T}});if(b!==void 0&&this.app.on(["GET","HEAD"],`${d}/_mcp-use/public/*`,w=>b(w.req.raw)),!this.#p){let w=nt(a,this.#c,{projectRoot:this.#d,deferCors:p,...this.#T!==void 0&&{assets:this.#T}});w!==void 0&&this.app.on(["GET","HEAD"],`${d}/_mcp-use/views/*`,R=>w(R.req.raw))}this.app.all(a,w=>y(w.req.raw)),c.route("/",this.app),this.#F=c,this.#_=async w=>c.fetch(w),this.#f=f,this.#z=s!==void 0}else if(t==="listen"&&!this.#z&&this.#ne("listen",r).hosts!==void 0)throw new Error("Cannot listen() on a localhost bind after server.fetch mounted the app without Host validation (server.fetch expects a platform edge in front). Call listen() first, or set allowedHosts.");return{fetch:this.#_,handler:this.#f}}#le(t){let n=t.view;if(n===void 0)return;if(t.outputSchema===void 0)throw new Error(`Tool "${t.name}" declares view "${n.name}" but has no outputSchema. View-bound tools require an outputSchema \u2014 the view reads structuredContent typed from it. Use outputSchema: z.object({}) for a view that takes no structured output.`);let r=this.#l.get(n.name);if(r!==void 0)throw new Error(`View "${n.name}" is already bound to tool "${r.toolName}"; tool "${t.name}" cannot bind the same view. Each view may be bound to one tool.`);this.#l.set(n.name,{toolName:t.name,config:n})}#pe(){if(this.#l.size>0&&!this.#w){let t=[...this.#t.values()].find(r=>r.definition.view!==void 0),n=t?.definition.view?.name??"unknown";throw new Error(`Tool "${t?.definition.name??"unknown"}" is bound to view "${n}" but no views were primed. Run \`mcp-use build\` and deploy the built entry, or in dev let the CLI prime views automatically.`)}for(let t of this.#t.values()){let n=t.definition.view?.name;if(n!==void 0&&!this.#c.has(n))throw new Error(`Tool "${t.definition.name}" is bound to view "${n}" which is not in the primed views registry. Run \`mcp-use build\` and deploy the built entry, or in dev let the CLI prime views automatically.`)}for(let t of this.#c.keys())this.#l.has(t)||console.warn(`[mcp-use] View "${t}" is registered but no tool binds it.`)}#fe(t){let{name:n,version:r,title:s,description:i}=this.#e,a=this.#I??this.#e.instructions,d=t.authInfo,c=new Es({name:n,version:r,...s!==void 0&&{title:s},...i!==void 0&&{description:i},...this.#o.websiteUrl!==void 0&&{websiteUrl:this.#o.websiteUrl},...this.#o.icons!==void 0&&{icons:Re(this.#o.icons,t.requestInfo,this.#i())}},{capabilities:{logging:{},tools:{listChanged:!0},prompts:{listChanged:!0},resources:{listChanged:!0,subscribe:!0},...(this.#y!==void 0||this.#r!==void 0)&&{extensions:{...this.#y!==void 0&&{[Ze]:{directoryRead:!0}},...this.#r!==void 0&&{"openai/settings":this.#r.capability}}},...this.#r!==void 0&&{experimental:{"openai/settings":this.#r.capability}}},...a!==void 0&&{instructions:a},...d!==void 0&&{authInfo:d},...this.#e.requestState!==void 0&&{requestState:this.#e.requestState}}),u=t.requestInfo,l=u!==void 0?{request:u,hmrWs:this.#p}:{hmrWs:this.#p},p=this.#i();for(let h of this.#t.values())this.#ge(c,h,u);for(let h of this.#s.values())this.#we(c,h);for(let h of this.#P.values())this.#Te(c,h);for(let h of this.#a.values())this.#Re(c,h);for(let[h,f]of this.#c.entries())this.#ye(c,h,f,l,p);return this.#y!==void 0&&On(c,this.#y),this.#he(c),c}#M(t,n,r){let s=B(r);return Object.assign(s,{method:t,params:n,...r.sessionId!==void 0&&{session:{sessionId:r.sessionId}},...r.http?.authInfo!==void 0&&{auth:r.http.authInfo},state:new Map})}#E(t,n,r){let s=t==="tools/call"&&this.#x.length===0&&this.#m.length===0?r:()=>Dt(this.#x,this.#m,t,n,r);if(kn())return s();let i=performance.now(),a=this.#x.filter(p=>j(p.pattern,t)).length,d=o(p=>this.#m.filter(h=>h.phase===p&&j(h.pattern,t)).length,"matchedObservers"),c=n.request?.raw,u=c===void 0?void 0:Fn(v(c).parsedBody),l=o((p,h)=>{ce("operation","completed",{method:t,outcome:p,duration_ms:Math.max(0,Math.round(performance.now()-i)),primitive_origin:this.#me(t,n.params),matched_middleware:a,observers_before:d("before"),observers_complete:h?d("complete"):0,...u?.protocol_era==="modern"?u:{client_name:"unknown",protocol_era:"legacy"}},{sampleRate:p==="success"?.1:1,serverRoot:this.#d})},"capture");return s().then(p=>{let h=qn(p)?"input_required":t==="tools/call"&&typeof p=="object"&&p!==null&&"isError"in p&&p.isError===!0?"error":"success";return l(h,!0),p},p=>{throw l("error",!1),p})}#me(t,n){if(t==="tools/call"){let r=String(n.name);return this.#h.has(r)?"proxied":this.#v.has(r)?"openapi":"local"}return t==="resources/read"?this.#A.has(String(n.uri))?"proxied":"local":t==="prompts/get"?this.#O.has(String(n.name))?"proxied":"local":"mixed"}#he(t){let n=t.server._requestHandlers;if(n===void 0)return;let r=o((s,i,a)=>{let d=n.get(s);if(d===void 0||d.__mcpListWrapped)return;let c=o(async(u,l)=>{let p=l,h=u.params??{},f=this.#M(s,h,p),m,g=o(async()=>{let x=Ht(u,f.params),b=await d(x,l);if(typeof b!="object"||b===null)throw new TypeError(`[mcp-use] ${s} handler returned a non-object result`);m=b;let w=m[i];if(!Array.isArray(w))throw new TypeError(`[mcp-use] ${s} handler result is missing a ${i} array`);return w},"innerFn"),y=await this.#E(s,f,g);if(!Array.isArray(y))throw new TypeError(`[mcp-use] ${s} middleware must return a ${i} array`);let T=a?.(y)??y;return{...m,[i]:T}},"wrapped");c.__mcpListWrapped=!0,n.set(s,c)},"wrapListMethod");r("tools/list","tools",s=>s.map(i=>{let a=this.#t.get(i.name),d=a!==void 0&&this.#oe(a)?a.schemes:void 0;return d===void 0?i:{...i,securitySchemes:d}})),r("resources/list","resources"),r("prompts/list","prompts")}#ge(t,n,r){let{definition:s,callback:i,schemes:a}=n,d=s.view,c=ot(d?.name,s.visibility,Rn(s)),u=n.mentions?tn(s,c):c,l=this.#oe(n)?{...u,[ye]:a}:u,p={...s.title!==void 0&&{title:s.title},...s.icons!==void 0&&{icons:Re(s.icons,r,this.#i())},...s.description!==void 0&&{description:s.description},...s.annotations!==void 0&&{annotations:s.annotations},...s.outputSchema!==void 0&&{outputSchema:s.outputSchema},...l!==void 0&&{_meta:l}},h=d!==void 0?st(d.name):void 0,f=ae(s),m=o(async(g,y)=>{let T=this.#M("tools/call",{name:s.name,arguments:g,...y.mcpReq._meta!==void 0&&{_meta:y.mcpReq._meta}},y),x=o(async()=>{let b=T.params.arguments??{},w=await i(b,this.#xe(y,a));return qn(w)||h===void 0||w.isError===!0?w:{...w,_meta:{...w._meta,...h}}},"innerFn");return await this.#E("tools/call",T,x)},"invokeTool");f!==void 0?t.registerTool(s.name,{...p,inputSchema:f},async(g,y)=>m(g,y)):t.registerTool(s.name,p,async g=>m({},g))}#ye(t,n,r,s,i){let a=I(n),d=we(r.viewConfig),c={...this.#be(this.#l.get(n)?.config),displayModes:d.displayModes,...d.preferredDisplayMode!==void 0&&{preferredDisplayMode:d.preferredDisplayMode}},u=it(n,r,c,s);t.registerResource(n,a,u,async(l,p)=>{let h=p.http?.req,f=h!==void 0?{request:h,...s.hmrWs===!0?{hmrWs:!0}:{}}:s.hmrWs===!0?{hmrWs:!0}:{},m=h!==void 0?S(h):s.request!==void 0?S(s.request):"",g=tt(r,m,i,n),y=await at(ue(c,f),ve(p),(h??s.request)?.headers.get("user-agent"));return{contents:[{uri:l.href,mimeType:u.mimeType,text:g,_meta:y}]}})}#we(t,{definition:n,callback:r}){t.registerResource(n.name,n.uri,{...n.title!==void 0&&{title:n.title},...n.description!==void 0&&{description:n.description},...n.mimeType!==void 0&&{mimeType:n.mimeType},...n.annotations!==void 0&&{annotations:n.annotations},...n._meta!==void 0&&{_meta:{...n._meta}}},async(s,i)=>{let a=this.#M("resources/read",{uri:s.href,...i.mcpReq._meta!==void 0&&{_meta:i.mcpReq._meta}},i),d=o(async()=>Ee(await r(s,this.#H(i)),s.href),"innerFn");return await this.#E("resources/read",a,d)})}#Te(t,{definition:n,callback:r,complete:s}){let i=new Ps(n.uriTemplate,{list:void 0,...s!==void 0&&{complete:s}});t.registerResource(n.name,i,{...n.title!==void 0&&{title:n.title},...n.description!==void 0&&{description:n.description},...n.mimeType!==void 0&&{mimeType:n.mimeType},...n.annotations!==void 0&&{annotations:n.annotations},...n._meta!==void 0&&{_meta:{...n._meta}}},async(a,d,c)=>{let u=this.#M("resources/read",{uri:a.href,...c.mcpReq._meta!==void 0&&{_meta:c.mcpReq._meta}},c),l=o(async()=>Ee(await r(a,d,this.#H(c)),a.href),"innerFn");return await this.#E("resources/read",u,l)})}#be(t){if(t!==void 0)return{...t.description!==void 0&&{description:t.description},...t.csp!==void 0&&{csp:t.csp},...t.permissions!==void 0&&{permissions:t.permissions},...t.domain!==void 0&&{domain:t.domain},...t.prefersBorder!==void 0&&{prefersBorder:t.prefersBorder}}}#Re(t,{definition:n,callback:r}){let s={...n.title!==void 0&&{title:n.title},...n.description!==void 0&&{description:n.description}},i=o(async(a,d)=>{let c=this.#M("prompts/get",{name:n.name,arguments:a,...d.mcpReq._meta!==void 0&&{_meta:d.mcpReq._meta}},d),u=o(async()=>{let l=c.params.arguments??{};return Lt(await r(l,this.#H(d)))},"innerFn");return await this.#E("prompts/get",c,u)},"invokePrompt");if(n.schema!==void 0)t.registerPrompt(n.name,{...s,argsSchema:n.schema},async(a,d)=>i(a,d));else{let a=o(async d=>i({},d),"handler");t.registerPrompt(n.name,s,a)}}#H(t){return this.#e.oauth===void 0?B(t):Me(t)}#xe(t,n){return this.#e.oauth===void 0||!wt(n)&&t.http?.authInfo===void 0?B(t):Me(t)}#ve(){return{hasOAuth:this.#e.oauth!==void 0,mixedAuth:this.#e.mixedAuth===!0,baselineScopes:this.#e.oauth?.requiredScopes??[]}}#re(t){let n=this.#ve(),r=yt(t.name,t.securitySchemes,n),s=Tt(t.name,t,n);return s!==void 0&&console.warn(s),r}#oe(t){let{definition:n}=t;return n.securitySchemes!==void 0?!0:this.#e.mixedAuth===!0&&n._meta?.[ye]===void 0}};import{acceptedContent as ol,createRequestStateCodec as sl,inputRequired as il,inputResponse as al,isInputRequiredResult as cl}from"@modelcontextprotocol/server";function Us(e){return{content:[{type:"text",text:e}],_meta:{mimeType:"text/plain"}}}o(Us,"text");function _s(e){return{content:[{type:"text",text:e}],_meta:{mimeType:"text/markdown"}}}o(_s,"markdown");function Is(e){return{content:[{type:"text",text:e}],_meta:{mimeType:"text/html"}}}o(Is,"html");function Ls(e){return{content:[{type:"text",text:e}],_meta:{mimeType:"text/xml"}}}o(Ls,"xml");function $s(e){return{content:[{type:"text",text:e}],_meta:{mimeType:"text/css"}}}o($s,"css");function js(e){return{content:[{type:"text",text:e}],_meta:{mimeType:"text/javascript"}}}o(js,"javascript");function Ns(e,t="image/png"){return{content:[{type:"image",data:e,mimeType:t}],_meta:{mimeType:t,isImage:!0}}}o(Ns,"image");function Hs(e,t="audio/wav"){return{content:[{type:"audio",data:e,mimeType:t}],_meta:{mimeType:t,isAudio:!0}}}o(Hs,"audio");function qs(e,t){return{content:[{type:"text",text:e}],_meta:{mimeType:t,isBinary:!0}}}o(qs,"binary");function Ds(e,t,n){if(typeof t=="object"&&t!==null&&"content"in t){let s=t,i,a;if(s._meta&&typeof s._meta=="object"){let c=s._meta;typeof c.mimeType=="string"&&(a=c.mimeType)}let d=s.content?.[0];return d?.type==="text"&&"text"in d&&(i=d.text),{content:[{type:"resource",resource:{uri:e,...a!==void 0&&{mimeType:a},text:i??""}}]}}let r=t;return{content:[{type:"resource",resource:{uri:e,...r!==void 0&&r!==""&&{mimeType:r},text:n??""}}]}}o(Ds,"resource");function Fs(e){return{isError:!0,content:[{type:"text",text:e}]}}o(Fs,"error");function Vs(e){return Array.isArray(e)?zn(e):{content:[{type:"text",text:JSON.stringify(e,null,2)}],structuredContent:e,_meta:{mimeType:"application/json"}}}o(Vs,"object");function zn(e){return{content:[{type:"text",text:JSON.stringify(e,null,2)}],structuredContent:e}}o(zn,"array");function Bs(e){let t=e.props??e.data??{},{output:n,message:r,metadata:s}=e,a={content:r?[{type:"text",text:r}]:Array.isArray(n?.content)&&n.content.length>0?n.content:[{type:"text",text:""}]};return s!==void 0&&Object.keys(s).length>0&&(a._meta=s),n?.structuredContent!==void 0?a.structuredContent=n.structuredContent:Object.keys(t).length>0&&(a.structuredContent=t),a}o(Bs,"widget");function zs(...e){let t=e.filter(i=>i.structuredContent!==void 0),n=t.length>0?t.map(i=>i.structuredContent).reduce((i,a)=>({...i,...typeof a=="object"&&a!==null?a:{}}),{}):void 0,r=e.filter(i=>i._meta!==void 0),s=r.length>0?r.map(i=>i._meta).reduce((i,a)=>({...i,...a!==void 0?a:{}}),{}):void 0;return{content:e.flatMap(i=>i.content),...n!==void 0&&Object.keys(n).length>0&&{structuredContent:n},...s!==void 0&&Object.keys(s).length>0&&{_meta:s}}}o(zs,"mix");export{dt as MCPServer,Ze as SKILLS_EXTENSION_ID,ol as acceptedContent,zn as array,Hs as audio,qs as binary,uo as completable,Jn as composeFetch,qt as composeMiddleware,Ce as createMcpEventListenerEntry,Se as createMcpMiddlewareEntry,Le as createMcpMount,sl as createRequestStateCodec,$s as css,Fs as error,v as getRequestBag,he as hostValidationMiddleware,Is as html,Ns as image,il as inputRequired,al as inputResponse,Be as isBuilding,cl as isInputRequiredResult,js as javascript,me as jsonBodyMiddleware,_s as markdown,pe as matchesPath,Q as matchesPathPrefix,j as matchesPattern,zs as mix,Vs as object,ge as originValidationMiddleware,Z as pathnameOf,G as registerSkills,Y as registerViews,Ie as requestLogger,Ds as resource,Us as text,Bs as widget,Ls as xml};
|
|
43
|
+
</html>`}o(tt,"synthesizeViewDocument");var fs=".mcp-use/build/views/public",ms="public",hs=".mcp-use/build/views",In=new WeakMap;function Ln(e,t,n,r){let s;try{s=decodeURIComponent(t)}catch{return new Response("Not Found",{status:404})}if(s.includes("\\")||s.split("/").includes(".."))return new Response("Not Found",{status:404});let i=Object.hasOwn(e,s)?e[s]:void 0;if(i===void 0)return new Response("Not Found",{status:404});let a=null;return n.method!=="HEAD"&&(a=In.get(i)??null,a===null&&(a=Uint8Array.from(atob(i.body),d=>d.charCodeAt(0)),In.set(i,a))),new Response(a,{headers:{"Content-Type":i.contentType,"Cache-Control":"public, max-age=0, must-revalidate",...r!==!0&&{"Access-Control-Allow-Origin":"*"}}})}o(Ln,"serveEmbeddedAsset");function nt(e,t,n){if(t.size===0)return;let r=C(e,"_mcp-use/views"),s=n?.projectRoot??process.cwd();return async i=>{if(i.method!=="GET"&&i.method!=="HEAD")return new Response("Method Not Allowed",{status:405});if(!Q(i,r))return new Response("Not Found",{status:404});let d=Z(i).slice(r.length+1),c=d.indexOf("/");if(c<=0||c===d.length-1)return new Response("Not Found",{status:404});let u=d.slice(0,c),l=d.slice(c+1),p=t.get(u);if(p===void 0||p.kind!=="external")return new Response("Not Found",{status:404});if(n?.assets!==void 0)return Ln(n.assets,d,i,n.deferCors);let[{join:h},{resolvePublicFilePath:f,servePublicFile:m}]=await Promise.all([import("path"),import("./public-route-AVKCGJDQ.js")]),g=h(s,hs,u),y=await f(g,l);return y===null?new Response("Not Found",{status:404}):await m(y,{...n?.deferCors===!0&&{deferCors:!0},...i.method==="HEAD"&&{head:!0}})}}o(nt,"createViewAssetsHandler");function rt(e,t,n){if(t.size===0&&n?.enabled!==!0)return;let r=C(e,"_mcp-use/public"),s=n?.dev===!0?ms:fs,i=n?.projectRoot??process.cwd();return async a=>{if(a.method!=="GET"&&a.method!=="HEAD")return new Response("Method Not Allowed",{status:405});if(!Q(a,r))return new Response("Not Found",{status:404});let c=Z(a).slice(r.length+1),u;try{u=decodeURIComponent(c)}catch{return new Response("Not Found",{status:404})}if(u.length===0)return new Response("Not Found",{status:404});if(n?.assets!==void 0)return Ln(n.assets,`public/${c}`,a,n.deferCors);let[{join:l},{resolvePublicFilePath:p,servePublicFile:h}]=await Promise.all([import("path"),import("./public-route-AVKCGJDQ.js")]),f=l(i,s),m=await p(f,u);return m===null?new Response("Not Found",{status:404}):await h(m,{...n?.deferCors===!0&&{deferCors:!0},...a.method==="HEAD"&&{head:!0}})}}o(rt,"createViewPublicHandler");var gs={connectDomains:"CSP_CONNECT_DOMAINS",resourceDomains:"CSP_RESOURCE_DOMAINS",frameDomains:"CSP_FRAME_DOMAINS",baseUriDomains:"CSP_BASE_URI_DOMAINS"};function ys(e){return e===void 0||e.trim()===""?[]:e.split(",").map(t=>t.trim()).filter(t=>t.length>0)}o(ys,"parseDomainList");function $n(e){if(typeof process>"u")return;let t=process.env[e];if(!(t===void 0||t.trim()===""))return ys(t)}o($n,"readEnvDomains");function ws(){return $n("CSP_URLS")??[]}o(ws,"readCspUrlsShortcut");function de(e){let t=$n(gs[e]);return t!==void 0?t:ws()}o(de,"readEnvDomainsForCategory");function X(...e){let t=new Set,n=[];for(let r of e)for(let s of r)t.has(s)||(t.add(s),n.push(s));return n}o(X,"mergeDomainLists");function Ts(e){return e.startsWith("https://")?`wss://${e.slice(8)}`:e.startsWith("http://")?`ws://${e.slice(7)}`:e}o(Ts,"toWebSocketOrigin");function jn(e,t){let n=e?.csp,r=[];t.serverOrigin!==""&&(r.push(t.serverOrigin),t.hmrWs===!0&&r.push(Ts(t.serverOrigin)));let s=[],i=t.explicitAssetsBase?t.assetsOrigin:t.serverOrigin;i!==""&&s.push(i);let a=X(n?.connectDomains??[],de("connectDomains"),r),d=X(n?.resourceDomains??[],de("resourceDomains"),s),c=X(n?.frameDomains??[],de("frameDomains")),u=X(n?.baseUriDomains??[],de("baseUriDomains")),l=X(n?.scriptDirectives??[],t.hmrWs===!0?["'unsafe-eval'"]:[]);return{...n,connectDomains:a,resourceDomains:d,frameDomains:c,baseUriDomains:u,...l.length>0?{scriptDirectives:l}:{}}}o(jn,"buildMergedResourceCsp");function ot(e,t,n){if(e===void 0&&t===void 0&&n===void 0)return;let r={...n},s=n?.["ui"],i=typeof s=="object"&&s!==null&&!Array.isArray(s),a=i?{...s}:{};if(e!==void 0){let d=I(e);a.resourceUri=d,r[te]=d}else delete a.resourceUri,delete r[te];return t!==void 0?a.visibility=[t]:delete a.visibility,(e!==void 0||t!==void 0||i)&&(r["ui"]=a),r}o(ot,"buildToolUiMeta");function st(e){let t=I(e);return{ui:{resourceUri:t},[te]:t}}o(st,"buildToolResultUiMeta");function bs(e){let t=e?.request,n=e?.serverOrigin??(t!==void 0?pt(t):""),r=e?.assetsBase??(t!==void 0?S(t):n);return{serverOrigin:n,assetsOrigin:ft(r),explicitAssetsBase:mt(),...e?.hmrWs===!0?{hmrWs:!0}:{}}}o(bs,"resolveCspOptions");function ue(e,t){let r={csp:jn(e,bs(t))};return e?.permissions!==void 0&&(r.permissions=e.permissions),e?.domain!==void 0&&(r.domain=e.domain),e?.prefersBorder!==void 0&&(r.prefersBorder=e.prefersBorder),{ui:r,...e?.description!==void 0&&{"openai/widgetDescription":e.description},...e?.displayModes!==void 0&&{"openai/ui":{availableDisplayModes:e.displayModes.filter(s=>s==="inline"||s==="fullscreen"),...e.preferredDisplayMode!==void 0&&{preferredDisplayMode:e.preferredDisplayMode}}}}}o(ue,"buildResourceUiMeta");function it(e,t,n,r){return{mimeType:ee,...n?.description!==void 0&&{description:n.description},_meta:ue(n,r)}}o(it,"viewResourceConfig");var Nn=".claudemcpcontent.com",Rs=32;function xs(e){let t=e?.name;return typeof t=="string"&&t.toLowerCase().includes("claude")}o(xs,"isClaudeClient");async function vs(e){if(e.endsWith(Nn))return e;let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e));return`${Array.from(new Uint8Array(t),r=>r.toString(16).padStart(2,"0")).join("").slice(0,Rs)}${Nn}`}o(vs,"computeClaudeResourceDomain");async function at(e,t,n){let r=typeof t?.name=="string"||typeof n!="string"||n.trim().length===0?t:{...t,name:n.trim()};if(!xs(r))return e;let s=e["ui"];if(typeof s!="object"||s===null||Array.isArray(s))return e;let i=s.domain;return typeof i!="string"||i.length===0?e:{...e,ui:{...s,domain:await vs(i)}}}o(at,"applyClaudeResourceDomain");function F(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)?e:void 0}o(F,"record");function ct(e,t){if(typeof e!="string")return t;let n=e.trim();return n.length>0&&n.length<=64&&![...n].some(r=>{let s=r.charCodeAt(0);return s<32||s===127})?n:t}o(ct,"productId");function Vn(e){if(!Bn(e))return;let t=F(e.params);if(e.method==="initialize"){let i=F(t?.clientInfo),a=F(t?.capabilities)??{};return Fn(i,a,t?.protocolVersion,"legacy")}let n=F(t?._meta),r=F(n?.[Ss]),s=F(n?.[ks]);if(!(r===void 0||s===void 0))return Fn(r,s,n?.[Cs],"modern")}o(Vn,"clientUsageFromBody");function Fn(e,t,n,r){let s=t;return{client_name:ct(e?.name,"other"),client_version:ct(e?.version,"unknown"),protocol_era:r,protocol_version:ct(n,"unknown"),connection_mode:r==="modern"?"stateless_request":"legacy_session",sampling_capability:Object.hasOwn(t,"sampling"),elicitation_capability:Object.hasOwn(t,"elicitation"),roots_capability:Object.hasOwn(t,"roots"),extensions_capability:Object.hasOwn(t,"extensions"),views_capability:ne(s),capability_count:Object.keys(t).length}}o(Fn,"clientUsage");function Os(e,t){e.use("*",async(n,r)=>{let s=await t(n.req.raw,async()=>(await r(),n.res));return n.res=s,s})}o(Os,"registerFetchMiddleware");var dt=class e{static{o(this,"MCPServer")}#e;#H;#o;#t=new Map;#s=new Map;#P=new Map;#a=new Map;#c=new Map;#r;#y;#U=!1;#q;#l=new Map;#w=!1;#T;#p=!1;#d=process.cwd();#_;#V;#f;#k;#b;#S;#C=!1;#F=!1;#I;#B=!1;#L;#R=[];#z=!1;#x=[];#m=[];#W;#v=new Set;#h=new Set;#A=new Set;#O=new Set;#K=0;#$=0;#J=0;#G=0;#Y=0;#X=0;#Z=[];#j=new Set;#Q=!1;app;get;post;put;patch;delete;all;fetch;static fromOpenAPI(t){let n=new e({name:t.name??t.spec.info.title,version:t.version??t.spec.info.version??"1.0.0"});sn(n,t);for(let r of n.#t.keys())n.#v.add(r);return n}constructor(t){if(Et(t),this.#e=t,this.#o=vt(t),this.app=new qn,this.app.use("*",async(n,r)=>{v(n.req.raw).honoContext=n,await r()}),this.get=this.app.get.bind(this.app),this.post=this.app.post.bind(this.app),this.put=this.app.put.bind(this.app),this.patch=this.app.patch.bind(this.app),this.delete=this.app.delete.bind(this.app),this.all=this.app.all.bind(this.app),this.fetch=async(n,r,s)=>(await this.#g(),this.#u("handler"),this.#V.fetch(n,r,s)),t.oauth!==void 0){let n=typeof process>"u"?void 0:process.env.MCP_URL,r=cn({provider:t.oauth,basePath:this.#i(),...n!==void 0&&{mcpUrl:n}});this.#S=r,this.#C=r!==void 0,this.#F=r===void 0}}get basePath(){return this.#i()}get host(){return this.#e.host}get port(){return this.#e.port}get branding(){return this.#o}getHandler(){return this.fetch}tool(t,n){if(this.#n("tool",t.name),this.#r!==void 0&&[this.#r.capability.readTool,this.#r.capability.updateTool].includes(t.name))throw new Error(`Tool "${t.name}" is reserved for settings`);let r=this.#re(t);return bn(t),this.#le(t),this.#v.delete(t.name),this.#h.delete(t.name),this.#t.set(t.name,{definition:t,callback:n,schemes:r}),Object.freeze({name:t.name})}settings(t){if(this.#n("settings",t.readTool??"settings.read"),this.#r!==void 0)throw new Error("Settings are already registered on this server");let n=Yt(t);for(let i of[n.capability.readTool,n.capability.updateTool])if(this.#t.has(i))throw new Error(`Settings tool "${i}" is already registered`);let r=t.read,s=t.update;this.tool(n.readDefinition,async(i,a)=>({content:[],structuredContent:{schema:n.schema,...n.layout!==void 0&&{layout:n.layout},values:await r(a)}})),this.tool(n.updateDefinition,async({set:i},a)=>({content:[],structuredContent:{values:await s(i,a)}})),this.#r=n}mentions(t){this.#n("mentions",t.name);let n=en(t);if(this.#t.has(t.name))throw new Error(`Mention tool "${t.name}" is already registered`);let r=t.search,s=this.tool(n,async(i,a)=>({content:[],structuredContent:await r(i,a)}));return this.#t.get(t.name).mentions=!0,s}[Y](t,n){if(this.#w)throw new Error("Cannot prime views: the views registry is already primed on this server instance.");this.#n("views","manifest");for(let[r,s]of Object.entries(t))try{we(s.viewConfig)}catch(i){throw new Error(`View "${r}" has an invalid viewConfig: ${i instanceof Error?i.message:String(i)}`,{cause:i})}this.#p=n?.dev===!0,this.#T=n?.assets,n?.projectRoot!==void 0&&(this.#d=n.projectRoot);for(let[r,s]of Object.entries(t))this.#c.set(r,s);this.#w=!0}__primeViews(t,n){this[Y](t,n)}[G](t){this.#n("skills","snapshot"),this.#y=t,this.#U=!0}__primeSkills(t){this[G](t)}__skillsConfig(){return this.#e.skills}async#se(t,n){let{discoverConfiguredSkills:r}=await import("#mcp-use-skills-loader"),s=r(this.#e.skills,t,n);return this[G](s),s}resource(t,n){this.#n("resource",t.name);let r=this.#s.get(t.name);return r!==void 0&&this.#A.delete(r.definition.uri),this.#s.set(t.name,{definition:t,callback:n}),this}resourceTemplate(t,n){this.#n("resourceTemplate",t.name);let r=t.complete===void 0?void 0:Zt(t.complete);return this.#P.set(t.name,{definition:t,...r!==void 0&&{complete:r},callback:n}),this}prompt(t,n){return this.#n("prompt",t.name),this.#O.delete(t.name),this.#a.set(t.name,{definition:t,callback:n}),this}async proxy(t){this.#N("proxy()");let n=(async()=>{let{isProxyConnection:r,mountProxyConnection:s,mountProxyServers:i}=await import("./mcp-proxy-YSI2UFBY.js");if(r(t)){this.#$+=1,await s(this.#te(),t);return}this.#$+=Object.keys(t).length,await i(this.#te(),t)})();this.#j.add(n);try{await n}finally{this.#j.delete(n)}}use(t,...n){if(typeof t=="string"&&t.startsWith("mcp:")){this.#n("middleware",t);let s=n[0];return this.#x.push(Se(t,s)),this}return this.app.use.call(this.app,t,...n),this.#K+=typeof t=="function"?1:n.length,this}on(t,n){return this.#n("event listener",t),this.#m.push(Ce(t,n)),this}__setEventBus(t){this.#n("event bus","shared"),this.#k=t}__setRequestLogPrefix(t){this.#n("request log prefix","development"),this.#H=t}__mount(){if(!this.#U)throw new Error("Cannot mount before skills discovery. CLI tooling must call __primeSkills first.");this.#u("handler")}async notifyToolsChanged(){await this.#g(),await this.#u("handler").handler.notify.toolsChanged()}async notifyPromptsChanged(){await this.#g(),await this.#u("handler").handler.notify.promptsChanged()}async notifyResourcesChanged(){await this.#g(),await this.#u("handler").handler.notify.resourcesChanged()}async notifyResourceUpdated(t){await this.#g(),await this.#u("handler").handler.notify.resourceUpdated(t)}async listen(t=void 0,n={}){this.#N("listen()"),await this.#g();let r=Pt(n.host,this.#e.host),s=kt(t,this.#e.port);return this.#ae(r),new Promise((i,a)=>{let d,c,u=new Promise((m,g)=>{d=m,c=g});u.catch(()=>{});let l=!1,p=o(m=>{l||(l=!0,a(m)),c?.(m),new Promise(g=>f.close(()=>g())).catch(()=>{}).finally(()=>{this.#b===f&&(this.#b=void 0)})},"rejectAndClose"),h=Ct({fetch:o(async m=>(await u)(m),"fetch")}),f=As((m,g)=>{h(m,g)});f.once("error",p),f.listen(s,r,()=>{try{let m=f.address(),g=typeof m=="object"&&m!==null?m.port:s,{fetch:y}=this.#u("listen",g,r);d?.(y),l||(l=!0,i({port:g,url:`http://localhost:${g}${this.#i()}`}))}catch(m){p(m)}}),this.#b=f})}async close(){this.#Q=!0,await Promise.allSettled([...this.#j]);let t=[],n=this.#Z.splice(0),r=await Promise.allSettled(n.map(i=>i.close()));for(let i of r)i.status==="rejected"&&t.push(i.reason);try{await this.#f?.close()}catch(i){t.push(i)}let s=this.#b;if(s!==void 0)try{await new Promise((i,a)=>{s.close(d=>d?a(d):i())}),this.#b=void 0}catch(i){t.push(i)}if(t.length>0)throw new AggregateError(t,"Failed to close MCP server cleanly")}#N(t){if(this.#Q)throw t!==void 0?new Error(`Cannot call ${t} after the server has closed.`):new Error("Cannot use the server after it has closed.")}#i(){return this.#e.basePath??"/mcp"}#ie(t,n,r){if(this.#e.oauth===void 0)return;if(this.#C)return this.#S;let s=r??this.#e.host??"127.0.0.1",i=t==="listen"&&n!==void 0&&["127.0.0.1","localhost","::1"].includes(s);if(this.#F&&i)return this.#S=dn(`http://localhost:${n}`,this.#i()),this.#C=!0,this.#S;throw new Error("OAuth requires an explicit resource or MCP_URL when using server.fetch or listening on a non-local host")}#ae(t){if(this.#e.oauth!==void 0&&!["127.0.0.1","localhost","::1"].includes(t)&&!this.#C)throw new Error("OAuth listen() on a public or wildcard host requires an explicit provider resource or valid MCP_URL.")}#n(t,n){if(this.#f!==void 0)throw new Error(`Cannot register ${t} "${n}" after the server has started: registrations are replayed per request from the registry, so register everything before listen()/server.fetch.`)}#ce(){ce("server","configured",{tools_total:this.#t.size,tools_local:this.#t.size-this.#v.size-this.#h.size,tools_openapi:this.#v.size,tools_proxied:this.#h.size,resources:this.#s.size,resource_templates:this.#P.size,prompts:this.#a.size,views:this.#c.size,proxy_servers_configured:this.#$,proxy_servers_connected:this.#J,proxy_tools_discovered:this.#G,proxy_resources_discovered:this.#Y,proxy_prompts_discovered:this.#X,proxy_tools_mounted:this.#h.size,proxy_resources_mounted:this.#A.size,proxy_prompts_mounted:this.#O.size,http_middleware:this.#K,mcp_middleware:this.#x.length,observers_before:this.#m.filter(({phase:t})=>t==="before").length,observers_complete:this.#m.filter(({phase:t})=>t==="complete").length,oauth_configured:this.#e.oauth!==void 0,cors_configured:this.#e.cors!==void 0,request_state_configured:this.#e.requestState!==void 0,legacy_policy:this.#e.legacy??"stateless"},{onceKey:`${this.#ee()}:server`,serverRoot:this.#d})}#de(t){let n=Vn(t);n!==void 0&&ce("client","observed",{...n},{onceKey:`${this.#ee()}:client:${JSON.stringify(n)}`,serverRoot:this.#d})}#ee(){return this.#W??=crypto.randomUUID(),this.#W}#ue(t,n,r,s){let i=this.#e.oauth?.setup;if(i===void 0||this.#B)return;if(this.#L!==void 0)throw this.#L.error;let a=!0,d=o(u=>{if(!a)throw new Error(`[mcp-use] OAuthProviderHost.${u}() called after the provider's setup hook returned; call it from setup().`)},"assertActive"),c={resourceUrl:t,basePath:n,mixedAuth:this.#e.mixedAuth===!0,mode:r,listenHost:r==="listen"?s:void 0,route:o((u,l,p)=>{if(d("route"),u!=="GET"&&u!=="POST"&&u!=="OPTIONS")throw new TypeError("[mcp-use] OAuthProviderHost.route() method must be GET, POST, or OPTIONS");if(typeof p!="function")throw new TypeError("[mcp-use] OAuthProviderHost.route() handler must be a function");let h=n==="/"?"/":`${n}/`;if(typeof l!="string"||!l.startsWith(h)||l.length===h.length||/[?#*:]/.test(l)||l.split("/").some(f=>f==="."||f===".."))throw new TypeError(`[mcp-use] OAuthProviderHost.route() path must be a literal pathname under ${h}`);if(this.#R.some(f=>f.method===u&&f.path===l))throw new Error(`[mcp-use] OAuth provider route ${u} ${l} is already registered`);this.#R.push({method:u,path:l,handler:p})},"route"),use:o((u,l)=>{d("use"),this.use(u,l)},"use"),tool:o((u,l)=>{if(d("tool"),this.#t.has(u.name))throw new Error(`[mcp-use] Tool "${u.name}" is reserved by the OAuth provider; rename the application tool.`);return this.tool(u,l)},"tool"),resource:o((u,l)=>{if(d("resource"),this.#s.has(u.name))throw new Error(`[mcp-use] Resource "${u.name}" is reserved by the OAuth provider; rename the application resource.`);this.resource(u,l)},"resource"),resourceTemplate:o((u,l)=>{if(d("resourceTemplate"),this.#P.has(u.name))throw new Error(`[mcp-use] Resource template "${u.name}" is reserved by the OAuth provider; rename the application resource template.`);this.resourceTemplate(u,l)},"resourceTemplate"),prompt:o((u,l)=>{if(d("prompt"),this.#a.has(u.name))throw new Error(`[mcp-use] Prompt "${u.name}" is reserved by the OAuth provider; rename the application prompt.`);this.prompt(u,l)},"prompt"),listTools:o(()=>(d("listTools"),[...this.#t.values()].map(({definition:u})=>u)),"listTools"),instructions:o(u=>{d("instructions"),this.#I=u(this.#I??this.#e.instructions)},"instructions")};try{let u=i(c);if(typeof u?.then=="function")throw Promise.resolve(u).catch(()=>{}),new TypeError("[mcp-use] The OAuth provider's setup hook must be synchronous but returned a promise. Do async work before creating the provider.")}catch(u){throw this.#L={error:u},u}finally{a=!1}this.#B=!0}#te(){return{isStarted:o(()=>this.#f!==void 0,"isStarted"),hasTool:o(t=>this.#t.has(t),"hasTool"),hasResource:o(t=>this.#s.has(t),"hasResource"),hasPrompt:o(t=>this.#a.has(t),"hasPrompt"),registerTool:o((t,n)=>{this.#n("tool",t.name),this.#h.add(t.name),this.#t.set(t.name,{definition:t,callback:n,schemes:this.#re(t)})},"registerTool"),registerResource:o((t,n)=>{this.#n("resource",t.name),this.#A.add(t.uri),this.#s.set(t.name,{definition:t,callback:n})},"registerResource"),registerPrompt:o((t,n)=>{this.#n("prompt",t.name),this.#O.add(t.name),this.#a.set(t.name,{definition:t,callback:n})},"registerPrompt"),trackOwner:o(t=>{this.#Z.push(t)},"trackOwner"),trackNamespace:o(({tools:t,resources:n,prompts:r})=>{this.#J+=1,this.#G+=t,this.#Y+=n,this.#X+=r},"trackNamespace")}}async#g(){this.#U||(this.#q??=this.#se(typeof process>"u"?".":process.cwd(),"skills").then(()=>{}),await this.#q)}#ne(t,n){let{allowedHosts:r,allowedOrigins:s}=this.#e,i=n??this.#e.host??"127.0.0.1",a=["127.0.0.1","localhost","::1"].includes(i),d=r!==void 0?[...new Set([...Dn(),...r])]:t==="listen"&&a?Dn():void 0,c=s!==void 0?[...new Set([...Ms(),...s])]:void 0;return{hosts:d,origins:c}}#u(t,n,r){if(this.#N(),this.#_===void 0||this.#f===void 0){let{hosts:s,origins:i}=this.#ne(t,r),a=this.#i(),d=a==="/"?"":a,c=new qn,u=[Ie({...this.#e.logging,mcpPath:a,prefix:this.#H}),me()],l=this.#e.cors;l!==void 0&&u.unshift($t(l));let p=jt(l);s!==void 0&&u.unshift(he(s)),i!==void 0&&u.push(ge(i,!0,w=>{if(this.#R.length===0)return!1;let R=new URL(w.url).pathname;return this.#R.some(U=>U.method===w.method&&U.path===R)})),s===void 0&&t==="listen"&&console.warn(`[mcp-use] listen() is serving on ${r} without Host validation. Behind a platform edge that only routes your own domains this is expected; if this process is reachable directly, set allowedHosts to restrict it.`);let h=this.#ie(t,n,r);if(h!==void 0){let w=this.#e.oauth;u.push(Fe(w,h))}for(let w of u)Os(c,w);if(h!==void 0){this.#ue(h,a,t,r);for(let w of this.#R)c.on(w.method,w.path,R=>w.handler(R))}for(let w of this.#r?.layout??[])for(let R of w.items)if(R.kind==="tool"&&!this.#t.has(R.tool))throw new Error(`Settings action tool "${R.tool}" is not registered on this server`);this.#pe();let{handler:f,fetch:m}=Le(w=>this.#fe(w),{path:a,...(this.#e.legacy!==void 0||this.#k!==void 0)&&{handler:{...this.#e.legacy!==void 0&&{legacy:this.#e.legacy},...this.#k!==void 0&&{bus:this.#k}}},...h!==void 0&&{authInfo:o(w=>mn(w),"authInfo")}});if(h!==void 0){let w=this.#e.oauth,R=ie(w),U=this.#e.mixedAuth===!0,Wn={verifier:He(w,h),resourceMetadataUrl:wn(h),baselineScopes:R.requiredScopes??[],mixedAuth:U,toolSchemes:o(_=>this.#t.get(_)?.schemes,"toolSchemes"),openResourceUris:[...this.#l.keys()].map(I)},ut;c.use("*",async(_,le)=>{if(new URL(_.req.url).pathname!==a){await le();return}if((this.#e.publicLandingPage===!0||U)&&fe(_.req.raw)){await le();return}ut??=import("./gate-5X3JUL36.js").then(({createOAuthGate:Kn})=>Kn(Wn));let lt=await(await ut)(_.req.raw,async()=>(await le(),_.res));return _.res=lt,lt})}let g=o(w=>{let R=v(w).parsedBody;return Bn(R)&&(this.#ce(),this.#de(R)),m(w)},"mcpRouteHandler"),y=o(async w=>fe(w)?o(async()=>{let{createLandingPageResponse:U}=await import("./landing-handler-3ZBRKAI2.js");return U(w,a,this.#e,this.#o,this.#t.values(),this.#a.values(),this.#s.values())},"respond")():g(w),"endpointHandler"),T=this.#w?this.#p:process.env.NODE_ENV!=="production",x=Mt(this.#o,{dev:T,projectRoot:this.#d,deferCors:p});x!==void 0&&this.app.all("/favicon.ico",w=>x(w.req.raw));let b=rt(a,this.#c,{dev:this.#w?this.#p:T,projectRoot:this.#d,enabled:xe(this.#o)||[...this.#t.values()].some(w=>w.definition.icons!==void 0&&xe({icons:w.definition.icons})),deferCors:p,...this.#T!==void 0&&{assets:this.#T}});if(b!==void 0&&this.app.on(["GET","HEAD"],`${d}/_mcp-use/public/*`,w=>b(w.req.raw)),!this.#p){let w=nt(a,this.#c,{projectRoot:this.#d,deferCors:p,...this.#T!==void 0&&{assets:this.#T}});w!==void 0&&this.app.on(["GET","HEAD"],`${d}/_mcp-use/views/*`,R=>w(R.req.raw))}this.app.all(a,w=>y(w.req.raw)),c.route("/",this.app),this.#V=c,this.#_=async w=>c.fetch(w),this.#f=f,this.#z=s!==void 0}else if(t==="listen"&&!this.#z&&this.#ne("listen",r).hosts!==void 0)throw new Error("Cannot listen() on a localhost bind after server.fetch mounted the app without Host validation (server.fetch expects a platform edge in front). Call listen() first, or set allowedHosts.");return{fetch:this.#_,handler:this.#f}}#le(t){let n=t.view;if(n===void 0)return;if(t.outputSchema===void 0)throw new Error(`Tool "${t.name}" declares view "${n.name}" but has no outputSchema. View-bound tools require an outputSchema \u2014 the view reads structuredContent typed from it. Use outputSchema: z.object({}) for a view that takes no structured output.`);let r=this.#l.get(n.name);if(r!==void 0)throw new Error(`View "${n.name}" is already bound to tool "${r.toolName}"; tool "${t.name}" cannot bind the same view. Each view may be bound to one tool.`);this.#l.set(n.name,{toolName:t.name,config:n})}#pe(){if(this.#l.size>0&&!this.#w){let t=[...this.#t.values()].find(r=>r.definition.view!==void 0),n=t?.definition.view?.name??"unknown";throw new Error(`Tool "${t?.definition.name??"unknown"}" is bound to view "${n}" but no views were primed. Run \`mcp-use build\` and deploy the built entry, or in dev let the CLI prime views automatically.`)}for(let t of this.#t.values()){let n=t.definition.view?.name;if(n!==void 0&&!this.#c.has(n))throw new Error(`Tool "${t.definition.name}" is bound to view "${n}" which is not in the primed views registry. Run \`mcp-use build\` and deploy the built entry, or in dev let the CLI prime views automatically.`)}for(let t of this.#c.keys())this.#l.has(t)||console.warn(`[mcp-use] View "${t}" is registered but no tool binds it.`)}#fe(t){let{name:n,version:r,title:s,description:i}=this.#e,a=this.#I??this.#e.instructions,d=t.authInfo,c=new Es({name:n,version:r,...s!==void 0&&{title:s},...i!==void 0&&{description:i},...this.#o.websiteUrl!==void 0&&{websiteUrl:this.#o.websiteUrl},...this.#o.icons!==void 0&&{icons:Re(this.#o.icons,t.requestInfo,this.#i())}},{capabilities:{logging:{},tools:{listChanged:!0},prompts:{listChanged:!0},resources:{listChanged:!0,subscribe:!0},...(this.#y!==void 0||this.#r!==void 0)&&{extensions:{...this.#y!==void 0&&{[Ze]:{directoryRead:!0}},...this.#r!==void 0&&{"openai/settings":this.#r.capability}}},...this.#r!==void 0&&{experimental:{"openai/settings":this.#r.capability}}},...a!==void 0&&{instructions:a},...d!==void 0&&{authInfo:d},...this.#e.requestState!==void 0&&{requestState:this.#e.requestState}}),u=t.requestInfo,l=u!==void 0?{request:u,hmrWs:this.#p}:{hmrWs:this.#p},p=this.#i();for(let h of this.#t.values())this.#ge(c,h,u);for(let h of this.#s.values())this.#we(c,h);for(let h of this.#P.values())this.#Te(c,h);for(let h of this.#a.values())this.#Re(c,h);for(let[h,f]of this.#c.entries())this.#ye(c,h,f,l,p);return this.#y!==void 0&&On(c,this.#y),this.#he(c),c}#M(t,n,r){let s=B(r);return Object.assign(s,{method:t,params:n,...r.sessionId!==void 0&&{session:{sessionId:r.sessionId}},...r.http?.authInfo!==void 0&&{auth:r.http.authInfo},state:new Map})}#E(t,n,r){let s=t==="tools/call"&&this.#x.length===0&&this.#m.length===0?r:()=>qt(this.#x,this.#m,t,n,r);if(kn())return s();let i=performance.now(),a=this.#x.filter(p=>j(p.pattern,t)).length,d=o(p=>this.#m.filter(h=>h.phase===p&&j(h.pattern,t)).length,"matchedObservers"),c=n.request?.raw,u=c===void 0?void 0:Vn(v(c).parsedBody),l=o((p,h)=>{ce("operation","completed",{method:t,outcome:p,duration_ms:Math.max(0,Math.round(performance.now()-i)),primitive_origin:this.#me(t,n.params),matched_middleware:a,observers_before:d("before"),observers_complete:h?d("complete"):0,...u?.protocol_era==="modern"?u:{client_name:"unknown",protocol_era:"legacy"}},{sampleRate:p==="success"?.1:1,serverRoot:this.#d})},"capture");return s().then(p=>{let h=Hn(p)?"input_required":t==="tools/call"&&typeof p=="object"&&p!==null&&"isError"in p&&p.isError===!0?"error":"success";return l(h,!0),p},p=>{throw l("error",!1),p})}#me(t,n){if(t==="tools/call"){let r=String(n.name);return this.#h.has(r)?"proxied":this.#v.has(r)?"openapi":"local"}return t==="resources/read"?this.#A.has(String(n.uri))?"proxied":"local":t==="prompts/get"?this.#O.has(String(n.name))?"proxied":"local":"mixed"}#he(t){let n=t.server._requestHandlers;if(n===void 0)return;let r=o((s,i,a)=>{let d=n.get(s);if(d===void 0||d.__mcpListWrapped)return;let c=o(async(u,l)=>{let p=l,h=u.params??{},f=this.#M(s,h,p),m,g=o(async()=>{let x=Dt(u,f.params),b=await d(x,l);if(typeof b!="object"||b===null)throw new TypeError(`[mcp-use] ${s} handler returned a non-object result`);m=b;let w=m[i];if(!Array.isArray(w))throw new TypeError(`[mcp-use] ${s} handler result is missing a ${i} array`);return w},"innerFn"),y=await this.#E(s,f,g);if(!Array.isArray(y))throw new TypeError(`[mcp-use] ${s} middleware must return a ${i} array`);let T=a?.(y)??y;return{...m,[i]:T}},"wrapped");c.__mcpListWrapped=!0,n.set(s,c)},"wrapListMethod");r("tools/list","tools",s=>s.map(i=>{let a=this.#t.get(i.name),d=a!==void 0&&this.#oe(a)?a.schemes:void 0;return d===void 0?i:{...i,securitySchemes:d}})),r("resources/list","resources"),r("prompts/list","prompts")}#ge(t,n,r){let{definition:s,callback:i,schemes:a}=n,d=s.view,c=ot(d?.name,s.visibility,Rn(s)),u=n.mentions?tn(s,c):c,l=this.#oe(n)?{...u,[ye]:a}:u,p={...s.title!==void 0&&{title:s.title},...s.icons!==void 0&&{icons:Re(s.icons,r,this.#i())},...s.description!==void 0&&{description:s.description},...s.annotations!==void 0&&{annotations:s.annotations},...s.outputSchema!==void 0&&{outputSchema:s.outputSchema},...l!==void 0&&{_meta:l}},h=d!==void 0?st(d.name):void 0,f=ae(s),m=o(async(g,y)=>{let T=this.#M("tools/call",{name:s.name,arguments:g,...y.mcpReq._meta!==void 0&&{_meta:y.mcpReq._meta}},y),x=o(async()=>{let b=T.params.arguments??{},w=await i(b,this.#xe(y,a));return Hn(w)||h===void 0||w.isError===!0?w:{...w,_meta:{...w._meta,...h}}},"innerFn");return await this.#E("tools/call",T,x)},"invokeTool");f!==void 0?t.registerTool(s.name,{...p,inputSchema:f},async(g,y)=>m(g,y)):t.registerTool(s.name,p,async g=>m({},g))}#ye(t,n,r,s,i){let a=I(n),d=we(r.viewConfig),c={...this.#be(this.#l.get(n)?.config),displayModes:d.displayModes,...d.preferredDisplayMode!==void 0&&{preferredDisplayMode:d.preferredDisplayMode}},u=it(n,r,c,s);t.registerResource(n,a,u,async(l,p)=>{let h=p.http?.req,f=h!==void 0?{request:h,...s.hmrWs===!0?{hmrWs:!0}:{}}:s.hmrWs===!0?{hmrWs:!0}:{},m=h!==void 0?S(h):s.request!==void 0?S(s.request):"",g=tt(r,m,i,n),y=await at(ue(c,f),ve(p),(h??s.request)?.headers.get("user-agent"));return{contents:[{uri:l.href,mimeType:u.mimeType,text:g,_meta:y}]}})}#we(t,{definition:n,callback:r}){t.registerResource(n.name,n.uri,{...n.title!==void 0&&{title:n.title},...n.description!==void 0&&{description:n.description},...n.mimeType!==void 0&&{mimeType:n.mimeType},...n.annotations!==void 0&&{annotations:n.annotations},...n._meta!==void 0&&{_meta:{...n._meta}}},async(s,i)=>{let a=this.#M("resources/read",{uri:s.href,...i.mcpReq._meta!==void 0&&{_meta:i.mcpReq._meta}},i),d=o(async()=>Ee(await r(s,this.#D(i)),s.href),"innerFn");return await this.#E("resources/read",a,d)})}#Te(t,{definition:n,callback:r,complete:s}){let i=new Ps(n.uriTemplate,{list:void 0,...s!==void 0&&{complete:s}});t.registerResource(n.name,i,{...n.title!==void 0&&{title:n.title},...n.description!==void 0&&{description:n.description},...n.mimeType!==void 0&&{mimeType:n.mimeType},...n.annotations!==void 0&&{annotations:n.annotations},...n._meta!==void 0&&{_meta:{...n._meta}}},async(a,d,c)=>{let u=this.#M("resources/read",{uri:a.href,...c.mcpReq._meta!==void 0&&{_meta:c.mcpReq._meta}},c),l=o(async()=>Ee(await r(a,d,this.#D(c)),a.href),"innerFn");return await this.#E("resources/read",u,l)})}#be(t){if(t!==void 0)return{...t.description!==void 0&&{description:t.description},...t.csp!==void 0&&{csp:t.csp},...t.permissions!==void 0&&{permissions:t.permissions},...t.domain!==void 0&&{domain:t.domain},...t.prefersBorder!==void 0&&{prefersBorder:t.prefersBorder}}}#Re(t,{definition:n,callback:r}){let s={...n.title!==void 0&&{title:n.title},...n.description!==void 0&&{description:n.description}},i=o(async(a,d)=>{let c=this.#M("prompts/get",{name:n.name,arguments:a,...d.mcpReq._meta!==void 0&&{_meta:d.mcpReq._meta}},d),u=o(async()=>{let l=c.params.arguments??{};return Lt(await r(l,this.#D(d)))},"innerFn");return await this.#E("prompts/get",c,u)},"invokePrompt");if(n.schema!==void 0)t.registerPrompt(n.name,{...s,argsSchema:n.schema},async(a,d)=>i(a,d));else{let a=o(async d=>i({},d),"handler");t.registerPrompt(n.name,s,a)}}#D(t){return this.#e.oauth===void 0?B(t):Me(t)}#xe(t,n){return this.#e.oauth===void 0||!wt(n)&&t.http?.authInfo===void 0?B(t):Me(t)}#ve(){return{hasOAuth:this.#e.oauth!==void 0,mixedAuth:this.#e.mixedAuth===!0,baselineScopes:this.#e.oauth?.requiredScopes??[]}}#re(t){let n=this.#ve(),r=yt(t.name,t.securitySchemes,n),s=Tt(t.name,t,n);return s!==void 0&&console.warn(s),r}#oe(t){let{definition:n}=t;return n.securitySchemes!==void 0?!0:this.#e.mixedAuth===!0&&n._meta?.[ye]===void 0}};import{acceptedContent as ol,createRequestStateCodec as sl,inputRequired as il,inputResponse as al,isInputRequiredResult as cl}from"@modelcontextprotocol/server";function Us(e){return{content:[{type:"text",text:e}],_meta:{mimeType:"text/plain"}}}o(Us,"text");function _s(e){return{content:[{type:"text",text:e}],_meta:{mimeType:"text/markdown"}}}o(_s,"markdown");function Is(e){return{content:[{type:"text",text:e}],_meta:{mimeType:"text/html"}}}o(Is,"html");function Ls(e){return{content:[{type:"text",text:e}],_meta:{mimeType:"text/xml"}}}o(Ls,"xml");function $s(e){return{content:[{type:"text",text:e}],_meta:{mimeType:"text/css"}}}o($s,"css");function js(e){return{content:[{type:"text",text:e}],_meta:{mimeType:"text/javascript"}}}o(js,"javascript");function Ns(e,t="image/png"){return{content:[{type:"image",data:e,mimeType:t}],_meta:{mimeType:t,isImage:!0}}}o(Ns,"image");function Ds(e,t="audio/wav"){return{content:[{type:"audio",data:e,mimeType:t}],_meta:{mimeType:t,isAudio:!0}}}o(Ds,"audio");function Hs(e,t){return{content:[{type:"text",text:e}],_meta:{mimeType:t,isBinary:!0}}}o(Hs,"binary");function qs(e,t,n){if(typeof t=="object"&&t!==null&&"content"in t){let s=t,i,a;if(s._meta&&typeof s._meta=="object"){let c=s._meta;typeof c.mimeType=="string"&&(a=c.mimeType)}let d=s.content?.[0];return d?.type==="text"&&"text"in d&&(i=d.text),{content:[{type:"resource",resource:{uri:e,...a!==void 0&&{mimeType:a},text:i??""}}]}}let r=t;return{content:[{type:"resource",resource:{uri:e,...r!==void 0&&r!==""&&{mimeType:r},text:n??""}}]}}o(qs,"resource");function Vs(e){return{isError:!0,content:[{type:"text",text:e}]}}o(Vs,"error");function Fs(e){return Array.isArray(e)?zn(e):{content:[{type:"text",text:JSON.stringify(e,null,2)}],structuredContent:e,_meta:{mimeType:"application/json"}}}o(Fs,"object");function zn(e){return{content:[{type:"text",text:JSON.stringify(e,null,2)}],structuredContent:e}}o(zn,"array");function Bs(e){let t=e.props??e.data??{},{output:n,message:r,metadata:s}=e,a={content:r?[{type:"text",text:r}]:Array.isArray(n?.content)&&n.content.length>0?n.content:[{type:"text",text:""}]};return s!==void 0&&Object.keys(s).length>0&&(a._meta=s),n?.structuredContent!==void 0?a.structuredContent=n.structuredContent:Object.keys(t).length>0&&(a.structuredContent=t),a}o(Bs,"widget");function zs(...e){let t=e.filter(i=>i.structuredContent!==void 0),n=t.length>0?t.map(i=>i.structuredContent).reduce((i,a)=>({...i,...typeof a=="object"&&a!==null?a:{}}),{}):void 0,r=e.filter(i=>i._meta!==void 0),s=r.length>0?r.map(i=>i._meta).reduce((i,a)=>({...i,...a!==void 0?a:{}}),{}):void 0;return{content:e.flatMap(i=>i.content),...n!==void 0&&Object.keys(n).length>0&&{structuredContent:n},...s!==void 0&&Object.keys(s).length>0&&{_meta:s}}}o(zs,"mix");export{dt as MCPServer,Ze as SKILLS_EXTENSION_ID,ol as acceptedContent,zn as array,Ds as audio,Hs as binary,uo as completable,Jn as composeFetch,Ht as composeMiddleware,Ce as createMcpEventListenerEntry,Se as createMcpMiddlewareEntry,Le as createMcpMount,sl as createRequestStateCodec,$s as css,Vs as error,v as getRequestBag,he as hostValidationMiddleware,Is as html,Ns as image,il as inputRequired,al as inputResponse,Be as isBuilding,cl as isInputRequiredResult,js as javascript,me as jsonBodyMiddleware,_s as markdown,pe as matchesPath,Q as matchesPathPrefix,j as matchesPattern,zs as mix,Fs as object,ge as originValidationMiddleware,Z as pathnameOf,G as registerSkills,Y as registerViews,Ie as requestLogger,qs as resource,Us as text,Bs as widget,Ls as xml};
|
package/dist/internal/usage.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
var EVENT="mcp_use_sdk_event",ENDPOINT="https://eu.i.posthog.com/i/v0/e/",TOKEN="phc_lyTtbYwvkdSbrcMQNPiKiiRWrrM1seyKIMjycSvItEI",CONTENT=/(^|_)(arguments?|args|body|command|headers?|location|message|organization|path|query|response|secret|subject|token|uri|url|user_agent)(_|$)/i,RESERVED=new Set("feature action sdk_generation telemetry_schema_version sdk_package sdk_version server_id runtime_id identity_stability distinct_id validation_run_id is_validation".split(" ")),runtimeId;function getRuntimeId(){return runtimeId??=crypto.randomUUID(),runtimeId}var once=new Set,pending=new Set,identities=new Map;function hasControl(value){return[...value].some(character=>{let code=character.charCodeAt(0);return code<32||code===127})}function env(name){return typeof process>"u"?void 0:process.env?.[name]}function safeEnv(name){let value=env(name);return value!==void 0&&value.length>0&&value.length<=128&&!hasControl(value)?value:void 0}function canPersistTelemetryIdentity(){return typeof process>"u"||process.versions?.node===void 0?!1:!("Deno"in globalThis)}function disabled(){if(env("MCP_USE_ANONYMIZED_TELEMETRY")==="false")return!0;try{return globalThis.__MCP_USE_ANONYMIZED_TELEMETRY__===!1||typeof localStorage<"u"&&localStorage.getItem("MCP_USE_ANONYMIZED_TELEMETRY")==="false"}catch{return!1}}function isUsageDisabled(){return disabled()}function clean(properties){return Object.fromEntries(Object.entries(properties).filter(([key,value])=>key.length>128||hasControl(key)||key.startsWith("$")||RESERVED.has(key)||CONTENT.test(key)||value===void 0?!1:typeof value=="string"?value.length<=128&&!hasControl(value):typeof value=="boolean"||typeof value=="number"&&Number.isFinite(value)))}async function identity(serverRoot){let projectId=safeEnv("MCP_USE_TELEMETRY_PROJECT_ID");if(projectId!==void 0)return{id:projectId,stability:"project"};if(serverRoot===void 0||!canPersistTelemetryIdentity())return{id:getRuntimeId(),stability:"process"};let existing=identities.get(serverRoot);if(existing!==void 0)return existing;let resolving=(async()=>{try{let fs=await import("fs/promises"),directory=`${serverRoot}/.mcp-use`,file=`${directory}/usage.json`,read=async()=>{try{let value=JSON.parse(await fs.readFile(file,"utf8"));if(typeof value=="object"&&value!==null&&"schemaVersion"in value&&value.schemaVersion===1&&"serverId"in value&&typeof value.serverId=="string"&&/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value.serverId))return value.serverId}catch{}},stored=await read();if(stored!==void 0)return{id:stored,stability:"server"};await fs.mkdir(directory,{recursive:!0,mode:448});let created=crypto.randomUUID();try{return await fs.writeFile(file,`${JSON.stringify({schemaVersion:1,serverId:created})}
|
|
2
|
-
`,{flag:"wx",mode:384}),{id:created,stability:"server"}}catch{let raced=await read();if(raced!==void 0)return{id:raced,stability:"server"}}}catch{}return{id:getRuntimeId(),stability:"process"}})();return identities.set(serverRoot,resolving),resolving}function capture(feature,action,properties,options,resolveIdentity){let validationId=safeEnv("MCP_USE_TELEMETRY_VALIDATION_ID");if(disabled()||env("NODE_ENV")==="test"&&validationId===void 0||pending.size>=16)return;if(options.onceKey!==void 0){if(once.has(options.onceKey))return;once.add(options.onceKey)}let rate=Math.max(0,Math.min(1,options.sampleRate??1));if(validationId===void 0&&Math.random()>=rate)return;let request=(async()=>{try{let resolvedIdentity=await resolveIdentity(),body=JSON.stringify({api_key:TOKEN,event:EVENT,properties:{...clean(properties),feature,action,sdk_generation:"v2",telemetry_schema_version:2,sdk_package:"mcp-use",sdk_version:"2.10.0",server_id:resolvedIdentity.id,runtime_id:getRuntimeId(),identity_stability:resolvedIdentity.stability,distinct_id:resolvedIdentity.id,sample_rate:validationId===void 0?rate:1,$process_person_profile:!1,$geoip_disable:!0,...validationId!==void 0&&{is_validation:!0,validation_run_id:validationId}}});await fetch(ENDPOINT,{method:"POST",headers:{"content-type":"application/json"},keepalive:!0,body})}catch{return}})();pending.add(request),request.then(()=>pending.delete(request))}function recordUsage(feature,action,properties={},options={}){capture(feature,action,properties,options,()=>identity(options.serverRoot))}async function flushUsage(){await Promise.all([...pending])}export{flushUsage,isUsageDisabled,recordUsage};
|
|
2
|
+
`,{flag:"wx",mode:384}),{id:created,stability:"server"}}catch{let raced=await read();if(raced!==void 0)return{id:raced,stability:"server"}}}catch{}return{id:getRuntimeId(),stability:"process"}})();return identities.set(serverRoot,resolving),resolving}function capture(feature,action,properties,options,resolveIdentity){let validationId=safeEnv("MCP_USE_TELEMETRY_VALIDATION_ID");if(disabled()||env("NODE_ENV")==="test"&&validationId===void 0||pending.size>=16)return;if(options.onceKey!==void 0){if(once.has(options.onceKey))return;once.add(options.onceKey)}let rate=Math.max(0,Math.min(1,options.sampleRate??1));if(validationId===void 0&&Math.random()>=rate)return;let request=(async()=>{try{let resolvedIdentity=await resolveIdentity(),body=JSON.stringify({api_key:TOKEN,event:EVENT,properties:{...clean(properties),feature,action,sdk_generation:"v2",telemetry_schema_version:2,sdk_package:"mcp-use",sdk_version:"2.10.1-canary.0",server_id:resolvedIdentity.id,runtime_id:getRuntimeId(),identity_stability:resolvedIdentity.stability,distinct_id:resolvedIdentity.id,sample_rate:validationId===void 0?rate:1,$process_person_profile:!1,$geoip_disable:!0,...validationId!==void 0&&{is_validation:!0,validation_run_id:validationId}}});await fetch(ENDPOINT,{method:"POST",headers:{"content-type":"application/json"},keepalive:!0,body})}catch{return}})();pending.add(request),request.then(()=>pending.delete(request))}function recordUsage(feature,action,properties={},options={}){capture(feature,action,properties,options,()=>identity(options.serverRoot))}async function flushUsage(){await Promise.all([...pending])}export{flushUsage,isUsageDisabled,recordUsage};
|
package/dist/tools.d.ts
CHANGED
|
@@ -66,7 +66,8 @@ export interface ToolViewConfig {
|
|
|
66
66
|
entrypoints?: readonly ToolViewEntrypoint[];
|
|
67
67
|
/**
|
|
68
68
|
* Human-readable description of the view resource → the resource's
|
|
69
|
-
* `description` on `resources/list
|
|
69
|
+
* `description` on `resources/list`, and `_meta["openai/widgetDescription"]`
|
|
70
|
+
* on `resources/list` and `resources/read`.
|
|
70
71
|
*/
|
|
71
72
|
description?: string;
|
|
72
73
|
/**
|
package/dist/views/wire.d.ts
CHANGED
|
@@ -55,7 +55,7 @@ export interface BuildResourceUiMetaOptions {
|
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
57
|
* Resource metadata for a primed view, including `_meta.ui` and the
|
|
58
|
-
* OpenAI
|
|
58
|
+
* OpenAI widget-description and display-mode extensions.
|
|
59
59
|
*
|
|
60
60
|
* Emits `csp` by merging author `view.csp`, env (`CSP_URLS` / `CSP_*_DOMAINS`),
|
|
61
61
|
* and MCP auto-append (`MCP_URL` → connect; assets origin → resource).
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-use",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.10.0",
|
|
4
|
+
"version": "2.10.1-canary.0",
|
|
5
5
|
"description": "MCP framework and CLI built on the official v2 SDK",
|
|
6
6
|
"author": "mcp-use, Inc.",
|
|
7
7
|
"license": "MIT",
|
|
@@ -137,8 +137,8 @@
|
|
|
137
137
|
"hono": "^4.13.7",
|
|
138
138
|
"jose": "^6.1.3",
|
|
139
139
|
"oauth4webapi": "^3.8.8",
|
|
140
|
-
"@mcp-use/cli": "4.4.0",
|
|
141
|
-
"@mcp-use/inspector": "20.3.
|
|
140
|
+
"@mcp-use/cli": "4.4.1-canary.0",
|
|
141
|
+
"@mcp-use/inspector": "20.3.21-canary.0"
|
|
142
142
|
},
|
|
143
143
|
"peerDependencies": {
|
|
144
144
|
"@mcp-use/client": "^2.0.1 || ^2.1.0 || ^2.1.1 || ^2.1.2 || ^2.1.3 || ^2.1.4 || ^2.1.5 || ^2.2.0 || ^2.2.1 || ^2.2.2 || ^2.2.3 || ^2.2.4 || ^2.2.5 || ^2.3.0 || ^2.3.1 || ^2.3.2 || ^2.3.3 || ^2.3.4 || ^2.3.5 || ^2.4.0 || ^2.4.1 || ^2.4.2 || ^2.4.3",
|