sample-aws-pricing-calculator-mcp 1.2.5 → 1.2.7
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/mcp-server.js +3 -3
- package/mcp-server.js +10 -1
- package/package.json +1 -1
package/dist/mcp-server.js
CHANGED
|
@@ -52,7 +52,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
52
52
|
deps: ${r}}`};var bG={keyword:"dependencies",type:"object",schemaType:"object",error:zn.error,code(e){let[t,r]=_G(e);x1(e,t),w1(e,r)}};function _G({schema:e}){let t={},r={};for(let i in e){if(i==="__proto__")continue;let n=Array.isArray(e[i])?t:r;n[i]=e[i]}return[t,r]}function x1(e,t=e.schema){let{gen:r,data:i,it:n}=e;if(Object.keys(t).length===0)return;let a=r.let("missing");for(let o in t){let s=t[o];if(s.length===0)continue;let c=(0,Xs.propertyInData)(r,i,o,n.opts.ownProperties);e.setParams({property:o,depsCount:s.length,deps:s.join(", ")}),n.allErrors?r.if(c,()=>{for(let u of s)(0,Xs.checkReportMissingProp)(e,u)}):(r.if((0,_v._)`${c} && (${(0,Xs.checkMissingProp)(e,s,a)})`),(0,Xs.reportMissingProp)(e,a),r.else())}}zn.validatePropertyDeps=x1;function w1(e,t=e.schema){let{gen:r,data:i,keyword:n,it:a}=e,o=r.name("valid");for(let s in t)(0,yG.alwaysValidSchema)(a,t[s])||(r.if((0,Xs.propertyInData)(r,i,s,a.opts.ownProperties),()=>{let c=e.subschema({keyword:n,schemaProp:s},o);e.mergeValidEvaluated(c,o)},()=>r.var(o,!0)),e.ok(o))}zn.validateSchemaDeps=w1;zn.default=bG});var P1=b(xv=>{"use strict";Object.defineProperty(xv,"__esModule",{value:!0});var $1=pe(),xG=we(),wG={message:"property name must be valid",params:({params:e})=>(0,$1._)`{propertyName: ${e.propertyName}}`},SG={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:wG,code(e){let{gen:t,schema:r,data:i,it:n}=e;if((0,xG.alwaysValidSchema)(n,r))return;let a=t.name("valid");t.forIn("key",i,o=>{e.setParams({propertyName:o}),e.subschema({keyword:"propertyNames",data:o,dataTypes:["string"],propertyName:o,compositeRule:!0},a),t.if((0,$1.not)(a),()=>{e.error(!0),n.allErrors||t.break()})}),e.ok(a)}};xv.default=SG});var Sv=b(wv=>{"use strict";Object.defineProperty(wv,"__esModule",{value:!0});var qd=vr(),Mr=pe(),$G=ni(),Ud=we(),PG={message:"must NOT have additional properties",params:({params:e})=>(0,Mr._)`{additionalProperty: ${e.additionalProperty}}`},OG={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:PG,code(e){let{gen:t,schema:r,parentSchema:i,data:n,errsCount:a,it:o}=e;if(!a)throw new Error("ajv implementation error");let{allErrors:s,opts:c}=o;if(o.props=!0,c.removeAdditional!=="all"&&(0,Ud.alwaysValidSchema)(o,r))return;let u=(0,qd.allSchemaProperties)(i.properties),l=(0,qd.allSchemaProperties)(i.patternProperties);d(),e.ok((0,Mr._)`${a} === ${$G.default.errors}`);function d(){t.forIn("key",n,w=>{!u.length&&!l.length?g(w):t.if(p(w),()=>g(w))})}function p(w){let P;if(u.length>8){let T=(0,Ud.schemaRefOrVal)(o,i.properties,"properties");P=(0,qd.isOwnProperty)(t,T,w)}else u.length?P=(0,Mr.or)(...u.map(T=>(0,Mr._)`${w} === ${T}`)):P=Mr.nil;return l.length&&(P=(0,Mr.or)(P,...l.map(T=>(0,Mr._)`${(0,qd.usePattern)(e,T)}.test(${w})`))),(0,Mr.not)(P)}function m(w){t.code((0,Mr._)`delete ${n}[${w}]`)}function g(w){if(c.removeAdditional==="all"||c.removeAdditional&&r===!1){m(w);return}if(r===!1){e.setParams({additionalProperty:w}),e.error(),s||t.break();return}if(typeof r=="object"&&!(0,Ud.alwaysValidSchema)(o,r)){let P=t.name("valid");c.removeAdditional==="failing"?(_(w,P,!1),t.if((0,Mr.not)(P),()=>{e.reset(),m(w)})):(_(w,P),s||t.if((0,Mr.not)(P),()=>t.break()))}}function _(w,P,T){let I={keyword:"additionalProperties",dataProp:w,dataPropType:Ud.Type.Str};T===!1&&Object.assign(I,{compositeRule:!0,createErrors:!1,allErrors:!1}),e.subschema(I,P)}}};wv.default=OG});var I1=b(Pv=>{"use strict";Object.defineProperty(Pv,"__esModule",{value:!0});var jG=Zs(),O1=vr(),$v=we(),j1=Sv(),IG={keyword:"properties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,parentSchema:i,data:n,it:a}=e;a.opts.removeAdditional==="all"&&i.additionalProperties===void 0&&j1.default.code(new jG.KeywordCxt(a,j1.default,"additionalProperties"));let o=(0,O1.allSchemaProperties)(r);for(let d of o)a.definedProperties.add(d);a.opts.unevaluated&&o.length&&a.props!==!0&&(a.props=$v.mergeEvaluated.props(t,(0,$v.toHash)(o),a.props));let s=o.filter(d=>!(0,$v.alwaysValidSchema)(a,r[d]));if(s.length===0)return;let c=t.name("valid");for(let d of s)u(d)?l(d):(t.if((0,O1.propertyInData)(t,n,d,a.opts.ownProperties)),l(d),a.allErrors||t.else().var(c,!0),t.endIf()),e.it.definedProperties.add(d),e.ok(c);function u(d){return a.opts.useDefaults&&!a.compositeRule&&r[d].default!==void 0}function l(d){e.subschema({keyword:"properties",schemaProp:d,dataProp:d},c)}}};Pv.default=IG});var C1=b(Ov=>{"use strict";Object.defineProperty(Ov,"__esModule",{value:!0});var T1=vr(),Ld=pe(),E1=we(),k1=we(),TG={keyword:"patternProperties",type:"object",schemaType:"object",code(e){let{gen:t,schema:r,data:i,parentSchema:n,it:a}=e,{opts:o}=a,s=(0,T1.allSchemaProperties)(r),c=s.filter(_=>(0,E1.alwaysValidSchema)(a,r[_]));if(s.length===0||c.length===s.length&&(!a.opts.unevaluated||a.props===!0))return;let u=o.strictSchema&&!o.allowMatchingProperties&&n.properties,l=t.name("valid");a.props!==!0&&!(a.props instanceof Ld.Name)&&(a.props=(0,k1.evaluatedPropsToName)(t,a.props));let{props:d}=a;p();function p(){for(let _ of s)u&&m(_),a.allErrors?g(_):(t.var(l,!0),g(_),t.if(l))}function m(_){for(let w in u)new RegExp(_).test(w)&&(0,E1.checkStrictMode)(a,`property ${w} matches pattern ${_} (use allowMatchingProperties)`)}function g(_){t.forIn("key",i,w=>{t.if((0,Ld._)`${(0,T1.usePattern)(e,_)}.test(${w})`,()=>{let P=c.includes(_);P||e.subschema({keyword:"patternProperties",schemaProp:_,dataProp:w,dataPropType:k1.Type.Str},l),a.opts.unevaluated&&d!==!0?t.assign((0,Ld._)`${d}[${w}]`,!0):!P&&!a.allErrors&&t.if((0,Ld.not)(l),()=>t.break())})})}}};Ov.default=TG});var R1=b(jv=>{"use strict";Object.defineProperty(jv,"__esModule",{value:!0});var EG=we(),kG={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(e){let{gen:t,schema:r,it:i}=e;if((0,EG.alwaysValidSchema)(i,r)){e.fail();return}let n=t.name("valid");e.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},n),e.failResult(n,()=>e.reset(),()=>e.error())},error:{message:"must NOT be valid"}};jv.default=kG});var M1=b(Iv=>{"use strict";Object.defineProperty(Iv,"__esModule",{value:!0});var CG=vr(),RG={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:CG.validateUnion,error:{message:"must match a schema in anyOf"}};Iv.default=RG});var D1=b(Tv=>{"use strict";Object.defineProperty(Tv,"__esModule",{value:!0});var Fd=pe(),MG=we(),DG={message:"must match exactly one schema in oneOf",params:({params:e})=>(0,Fd._)`{passingSchemas: ${e.passing}}`},AG={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:DG,code(e){let{gen:t,schema:r,parentSchema:i,it:n}=e;if(!Array.isArray(r))throw new Error("ajv implementation error");if(n.opts.discriminator&&i.discriminator)return;let a=r,o=t.let("valid",!1),s=t.let("passing",null),c=t.name("_valid");e.setParams({passing:s}),t.block(u),e.result(o,()=>e.reset(),()=>e.error(!0));function u(){a.forEach((l,d)=>{let p;(0,MG.alwaysValidSchema)(n,l)?t.var(c,!0):p=e.subschema({keyword:"oneOf",schemaProp:d,compositeRule:!0},c),d>0&&t.if((0,Fd._)`${c} && ${o}`).assign(o,!1).assign(s,(0,Fd._)`[${s}, ${d}]`).else(),t.if(c,()=>{t.assign(o,!0),t.assign(s,d),p&&e.mergeEvaluated(p,Fd.Name)})})}}};Tv.default=AG});var A1=b(Ev=>{"use strict";Object.defineProperty(Ev,"__esModule",{value:!0});var ZG=we(),zG={keyword:"allOf",schemaType:"array",code(e){let{gen:t,schema:r,it:i}=e;if(!Array.isArray(r))throw new Error("ajv implementation error");let n=t.name("valid");r.forEach((a,o)=>{if((0,ZG.alwaysValidSchema)(i,a))return;let s=e.subschema({keyword:"allOf",schemaProp:o},n);e.ok(n),e.mergeEvaluated(s)})}};Ev.default=zG});var N1=b(kv=>{"use strict";Object.defineProperty(kv,"__esModule",{value:!0});var Bd=pe(),z1=we(),NG={message:({params:e})=>(0,Bd.str)`must match "${e.ifClause}" schema`,params:({params:e})=>(0,Bd._)`{failingKeyword: ${e.ifClause}}`},qG={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:NG,code(e){let{gen:t,parentSchema:r,it:i}=e;r.then===void 0&&r.else===void 0&&(0,z1.checkStrictMode)(i,'"if" without "then" and "else" is ignored');let n=Z1(i,"then"),a=Z1(i,"else");if(!n&&!a)return;let o=t.let("valid",!0),s=t.name("_valid");if(c(),e.reset(),n&&a){let l=t.let("ifClause");e.setParams({ifClause:l}),t.if(s,u("then",l),u("else",l))}else n?t.if(s,u("then")):t.if((0,Bd.not)(s),u("else"));e.pass(o,()=>e.error(!0));function c(){let l=e.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},s);e.mergeEvaluated(l)}function u(l,d){return()=>{let p=e.subschema({keyword:l},s);t.assign(o,s),e.mergeValidEvaluated(p,o),d?t.assign(d,(0,Bd._)`${l}`):e.setParams({ifClause:l})}}}};function Z1(e,t){let r=e.schema[t];return r!==void 0&&!(0,z1.alwaysValidSchema)(e,r)}kv.default=qG});var q1=b(Cv=>{"use strict";Object.defineProperty(Cv,"__esModule",{value:!0});var UG=we(),LG={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:e,parentSchema:t,it:r}){t.if===void 0&&(0,UG.checkStrictMode)(r,`"${e}" without "if" is ignored`)}};Cv.default=LG});var U1=b(Rv=>{"use strict";Object.defineProperty(Rv,"__esModule",{value:!0});var FG=hv(),BG=g1(),VG=vv(),HG=b1(),JG=_1(),GG=S1(),KG=P1(),WG=Sv(),XG=I1(),YG=C1(),QG=R1(),eK=M1(),tK=D1(),rK=A1(),nK=N1(),iK=q1();function aK(e=!1){let t=[QG.default,eK.default,tK.default,rK.default,nK.default,iK.default,KG.default,WG.default,GG.default,XG.default,YG.default];return e?t.push(BG.default,HG.default):t.push(FG.default,VG.default),t.push(JG.default),t}Rv.default=aK});var L1=b(Mv=>{"use strict";Object.defineProperty(Mv,"__esModule",{value:!0});var We=pe(),oK={message:({schemaCode:e})=>(0,We.str)`must match format "${e}"`,params:({schemaCode:e})=>(0,We._)`{format: ${e}}`},sK={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:oK,code(e,t){let{gen:r,data:i,$data:n,schema:a,schemaCode:o,it:s}=e,{opts:c,errSchemaPath:u,schemaEnv:l,self:d}=s;if(!c.validateFormats)return;n?p():m();function p(){let g=r.scopeValue("formats",{ref:d.formats,code:c.code.formats}),_=r.const("fDef",(0,We._)`${g}[${o}]`),w=r.let("fType"),P=r.let("format");r.if((0,We._)`typeof ${_} == "object" && !(${_} instanceof RegExp)`,()=>r.assign(w,(0,We._)`${_}.type || "string"`).assign(P,(0,We._)`${_}.validate`),()=>r.assign(w,(0,We._)`"string"`).assign(P,_)),e.fail$data((0,We.or)(T(),I()));function T(){return c.strictSchema===!1?We.nil:(0,We._)`${o} && !${P}`}function I(){let M=l.$async?(0,We._)`(${_}.async ? await ${P}(${i}) : ${P}(${i}))`:(0,We._)`${P}(${i})`,R=(0,We._)`(typeof ${P} == "function" ? ${M} : ${P}.test(${i}))`;return(0,We._)`${P} && ${P} !== true && ${w} === ${t} && !${R}`}}function m(){let g=d.formats[a];if(!g){T();return}if(g===!0)return;let[_,w,P]=I(g);_===t&&e.pass(M());function T(){if(c.strictSchema===!1){d.logger.warn(R());return}throw new Error(R());function R(){return`unknown format "${a}" ignored in schema at path "${u}"`}}function I(R){let J=R instanceof RegExp?(0,We.regexpCode)(R):c.code.formats?(0,We._)`${c.code.formats}${(0,We.getProperty)(a)}`:void 0,be=r.scopeValue("formats",{key:a,ref:R,code:J});return typeof R=="object"&&!(R instanceof RegExp)?[R.type||"string",R.validate,(0,We._)`${be}.validate`]:["string",R,be]}function M(){if(typeof g=="object"&&!(g instanceof RegExp)&&g.async){if(!l.$async)throw new Error("async format in sync schema");return(0,We._)`await ${P}(${i})`}return typeof w=="function"?(0,We._)`${P}(${i})`:(0,We._)`${P}.test(${i})`}}}};Mv.default=sK});var F1=b(Dv=>{"use strict";Object.defineProperty(Dv,"__esModule",{value:!0});var cK=L1(),uK=[cK.default];Dv.default=uK});var B1=b(mo=>{"use strict";Object.defineProperty(mo,"__esModule",{value:!0});mo.contentVocabulary=mo.metadataVocabulary=void 0;mo.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"];mo.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]});var H1=b(Av=>{"use strict";Object.defineProperty(Av,"__esModule",{value:!0});var lK=Q$(),dK=f1(),pK=U1(),fK=F1(),V1=B1(),mK=[lK.default,dK.default,(0,pK.default)(),fK.default,V1.metadataVocabulary,V1.contentVocabulary];Av.default=mK});var G1=b(Vd=>{"use strict";Object.defineProperty(Vd,"__esModule",{value:!0});Vd.DiscrError=void 0;var J1;(function(e){e.Tag="tag",e.Mapping="mapping"})(J1||(Vd.DiscrError=J1={}))});var W1=b(zv=>{"use strict";Object.defineProperty(zv,"__esModule",{value:!0});var ho=pe(),Zv=G1(),K1=Id(),hK=zs(),vK=we(),gK={message:({params:{discrError:e,tagName:t}})=>e===Zv.DiscrError.Tag?`tag "${t}" must be string`:`value of tag "${t}" must be in oneOf`,params:({params:{discrError:e,tag:t,tagName:r}})=>(0,ho._)`{error: ${e}, tag: ${r}, tagValue: ${t}}`},yK={keyword:"discriminator",type:"object",schemaType:"object",error:gK,code(e){let{gen:t,data:r,schema:i,parentSchema:n,it:a}=e,{oneOf:o}=n;if(!a.opts.discriminator)throw new Error("discriminator: requires discriminator option");let s=i.propertyName;if(typeof s!="string")throw new Error("discriminator: requires propertyName");if(i.mapping)throw new Error("discriminator: mapping is not supported");if(!o)throw new Error("discriminator: requires oneOf keyword");let c=t.let("valid",!1),u=t.const("tag",(0,ho._)`${r}${(0,ho.getProperty)(s)}`);t.if((0,ho._)`typeof ${u} == "string"`,()=>l(),()=>e.error(!1,{discrError:Zv.DiscrError.Tag,tag:u,tagName:s})),e.ok(c);function l(){let m=p();t.if(!1);for(let g in m)t.elseIf((0,ho._)`${u} === ${g}`),t.assign(c,d(m[g]));t.else(),e.error(!1,{discrError:Zv.DiscrError.Mapping,tag:u,tagName:s}),t.endIf()}function d(m){let g=t.name("valid"),_=e.subschema({keyword:"oneOf",schemaProp:m},g);return e.mergeEvaluated(_,ho.Name),g}function p(){var m;let g={},_=P(n),w=!0;for(let M=0;M<o.length;M++){let R=o[M];if(R?.$ref&&!(0,vK.schemaHasRulesButRef)(R,a.self.RULES)){let be=R.$ref;if(R=K1.resolveRef.call(a.self,a.schemaEnv.root,a.baseId,be),R instanceof K1.SchemaEnv&&(R=R.schema),R===void 0)throw new hK.default(a.opts.uriResolver,a.baseId,be)}let J=(m=R?.properties)===null||m===void 0?void 0:m[s];if(typeof J!="object")throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${s}"`);w=w&&(_||P(R)),T(J,M)}if(!w)throw new Error(`discriminator: "${s}" must be required`);return g;function P({required:M}){return Array.isArray(M)&&M.includes(s)}function T(M,R){if(M.const)I(M.const,R);else if(M.enum)for(let J of M.enum)I(J,R);else throw new Error(`discriminator: "properties/${s}" must have "const" or "enum"`)}function I(M,R){if(typeof M!="string"||M in g)throw new Error(`discriminator: "${s}" values must be unique strings`);g[M]=R}}}};zv.default=yK});var X1=b((upe,bK)=>{bK.exports={$schema:"http://json-schema.org/draft-07/schema#",$id:"http://json-schema.org/draft-07/schema#",title:"Core schema meta-schema",definitions:{schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},type:["object","boolean"],properties:{$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},default:!0}});var Jd=b((Ue,Nv)=>{"use strict";Object.defineProperty(Ue,"__esModule",{value:!0});Ue.MissingRefError=Ue.ValidationError=Ue.CodeGen=Ue.Name=Ue.nil=Ue.stringify=Ue.str=Ue._=Ue.KeywordCxt=Ue.Ajv=void 0;var _K=J$(),xK=H1(),wK=W1(),Y1=X1(),SK=["/properties"],Hd="http://json-schema.org/draft-07/schema",vo=class extends _K.default{_addVocabularies(){super._addVocabularies(),xK.default.forEach(t=>this.addVocabulary(t)),this.opts.discriminator&&this.addKeyword(wK.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;let t=this.opts.$data?this.$dataMetaSchema(Y1,SK):Y1;this.addMetaSchema(t,Hd,!1),this.refs["http://json-schema.org/schema"]=Hd}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(Hd)?Hd:void 0)}};Ue.Ajv=vo;Nv.exports=Ue=vo;Nv.exports.Ajv=vo;Object.defineProperty(Ue,"__esModule",{value:!0});Ue.default=vo;var $K=Zs();Object.defineProperty(Ue,"KeywordCxt",{enumerable:!0,get:function(){return $K.KeywordCxt}});var go=pe();Object.defineProperty(Ue,"_",{enumerable:!0,get:function(){return go._}});Object.defineProperty(Ue,"str",{enumerable:!0,get:function(){return go.str}});Object.defineProperty(Ue,"stringify",{enumerable:!0,get:function(){return go.stringify}});Object.defineProperty(Ue,"nil",{enumerable:!0,get:function(){return go.nil}});Object.defineProperty(Ue,"Name",{enumerable:!0,get:function(){return go.Name}});Object.defineProperty(Ue,"CodeGen",{enumerable:!0,get:function(){return go.CodeGen}});var PK=Od();Object.defineProperty(Ue,"ValidationError",{enumerable:!0,get:function(){return PK.default}});var OK=zs();Object.defineProperty(Ue,"MissingRefError",{enumerable:!0,get:function(){return OK.default}})});var oP=b(qn=>{"use strict";Object.defineProperty(qn,"__esModule",{value:!0});qn.formatNames=qn.fastFormats=qn.fullFormats=void 0;function Nn(e,t){return{validate:e,compare:t}}qn.fullFormats={date:Nn(rP,Fv),time:Nn(Uv(!0),Bv),"date-time":Nn(Q1(!0),iP),"iso-time":Nn(Uv(),nP),"iso-date-time":Nn(Q1(),aP),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:CK,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i,regex:NK,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte:RK,int32:{type:"number",validate:AK},int64:{type:"number",validate:ZK},float:{type:"number",validate:tP},double:{type:"number",validate:tP},password:!0,binary:!0};qn.fastFormats={...qn.fullFormats,date:Nn(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,Fv),time:Nn(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,Bv),"date-time":Nn(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,iP),"iso-time":Nn(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,nP),"iso-date-time":Nn(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,aP),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i};qn.formatNames=Object.keys(qn.fullFormats);function jK(e){return e%4===0&&(e%100!==0||e%400===0)}var IK=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,TK=[0,31,28,31,30,31,30,31,31,30,31,30,31];function rP(e){let t=IK.exec(e);if(!t)return!1;let r=+t[1],i=+t[2],n=+t[3];return i>=1&&i<=12&&n>=1&&n<=(i===2&&jK(r)?29:TK[i])}function Fv(e,t){if(e&&t)return e>t?1:e<t?-1:0}var qv=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function Uv(e){return function(r){let i=qv.exec(r);if(!i)return!1;let n=+i[1],a=+i[2],o=+i[3],s=i[4],c=i[5]==="-"?-1:1,u=+(i[6]||0),l=+(i[7]||0);if(u>23||l>59||e&&!s)return!1;if(n<=23&&a<=59&&o<60)return!0;let d=a-l*c,p=n-u*c-(d<0?1:0);return(p===23||p===-1)&&(d===59||d===-1)&&o<61}}function Bv(e,t){if(!(e&&t))return;let r=new Date("2020-01-01T"+e).valueOf(),i=new Date("2020-01-01T"+t).valueOf();if(r&&i)return r-i}function nP(e,t){if(!(e&&t))return;let r=qv.exec(e),i=qv.exec(t);if(r&&i)return e=r[1]+r[2]+r[3],t=i[1]+i[2]+i[3],e>t?1:e<t?-1:0}var Lv=/t|\s/i;function Q1(e){let t=Uv(e);return function(i){let n=i.split(Lv);return n.length===2&&rP(n[0])&&t(n[1])}}function iP(e,t){if(!(e&&t))return;let r=new Date(e).valueOf(),i=new Date(t).valueOf();if(r&&i)return r-i}function aP(e,t){if(!(e&&t))return;let[r,i]=e.split(Lv),[n,a]=t.split(Lv),o=Fv(r,n);if(o!==void 0)return o||Bv(i,a)}var EK=/\/|:/,kK=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function CK(e){return EK.test(e)&&kK.test(e)}var eP=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function RK(e){return eP.lastIndex=0,eP.test(e)}var MK=-(2**31),DK=2**31-1;function AK(e){return Number.isInteger(e)&&e<=DK&&e>=MK}function ZK(e){return Number.isInteger(e)}function tP(){return!0}var zK=/[^\\]\\Z/;function NK(e){if(zK.test(e))return!1;try{return new RegExp(e),!0}catch{return!1}}});var sP=b(yo=>{"use strict";Object.defineProperty(yo,"__esModule",{value:!0});yo.formatLimitDefinition=void 0;var qK=Jd(),Dr=pe(),Di=Dr.operators,Gd={formatMaximum:{okStr:"<=",ok:Di.LTE,fail:Di.GT},formatMinimum:{okStr:">=",ok:Di.GTE,fail:Di.LT},formatExclusiveMaximum:{okStr:"<",ok:Di.LT,fail:Di.GTE},formatExclusiveMinimum:{okStr:">",ok:Di.GT,fail:Di.LTE}},UK={message:({keyword:e,schemaCode:t})=>(0,Dr.str)`should be ${Gd[e].okStr} ${t}`,params:({keyword:e,schemaCode:t})=>(0,Dr._)`{comparison: ${Gd[e].okStr}, limit: ${t}}`};yo.formatLimitDefinition={keyword:Object.keys(Gd),type:"string",schemaType:"string",$data:!0,error:UK,code(e){let{gen:t,data:r,schemaCode:i,keyword:n,it:a}=e,{opts:o,self:s}=a;if(!o.validateFormats)return;let c=new qK.KeywordCxt(a,s.RULES.all.format.definition,"format");c.$data?u():l();function u(){let p=t.scopeValue("formats",{ref:s.formats,code:o.code.formats}),m=t.const("fmt",(0,Dr._)`${p}[${c.schemaCode}]`);e.fail$data((0,Dr.or)((0,Dr._)`typeof ${m} != "object"`,(0,Dr._)`${m} instanceof RegExp`,(0,Dr._)`typeof ${m}.compare != "function"`,d(m)))}function l(){let p=c.schema,m=s.formats[p];if(!m||m===!0)return;if(typeof m!="object"||m instanceof RegExp||typeof m.compare!="function")throw new Error(`"${n}": format "${p}" does not define "compare" function`);let g=t.scopeValue("formats",{key:p,ref:m,code:o.code.formats?(0,Dr._)`${o.code.formats}${(0,Dr.getProperty)(p)}`:void 0});e.fail$data(d(g))}function d(p){return(0,Dr._)`${p}.compare(${r}, ${i}) ${Gd[n].fail} 0`}},dependencies:["format"]};var LK=e=>(e.addKeyword(yo.formatLimitDefinition),e);yo.default=LK});var Jv=b((Ys,lP)=>{"use strict";Object.defineProperty(Ys,"__esModule",{value:!0});var bo=oP(),FK=sP(),Vv=pe(),cP=new Vv.Name("fullFormats"),BK=new Vv.Name("fastFormats"),Hv=(e,t={keywords:!0})=>{if(Array.isArray(t))return uP(e,t,bo.fullFormats,cP),e;let[r,i]=t.mode==="fast"?[bo.fastFormats,BK]:[bo.fullFormats,cP],n=t.formats||bo.formatNames;return uP(e,n,r,i),t.keywords&&(0,FK.default)(e),e};Hv.get=(e,t="full")=>{let i=(t==="fast"?bo.fastFormats:bo.fullFormats)[e];if(!i)throw new Error(`Unknown format "${e}"`);return i};function uP(e,t,r,i){var n,a;(n=(a=e.opts.code).formats)!==null&&n!==void 0||(a.formats=(0,Vv._)`require("ajv-formats/dist/formats").${i}`);for(let o of t)e.addFormat(o,r[o])}lP.exports=Ys=Hv;Object.defineProperty(Ys,"__esModule",{value:!0});Ys.default=Hv});var pP=b(_o=>{"use strict";var dP=_o&&_o.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(_o,"__esModule",{value:!0});_o.AjvJsonSchemaValidator=void 0;var VK=dP(Jd()),HK=dP(Jv());function JK(){let e=new VK.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0}),t=HK.default;return t(e),e}var Gv=class{constructor(t){this._ajv=t??JK()}getValidator(t){let r="$id"in t&&typeof t.$id=="string"?this._ajv.getSchema(t.$id)??this._ajv.compile(t):this._ajv.compile(t);return i=>r(i)?{valid:!0,data:i,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(r.errors)}}};_o.AjvJsonSchemaValidator=Gv});var mP=b(Kd=>{"use strict";Object.defineProperty(Kd,"__esModule",{value:!0});Kd.ExperimentalServerTasks=void 0;var fP=ca(),Kv=class{constructor(t){this._server=t}requestStream(t,r,i){return this._server.requestStream(t,r,i)}createMessageStream(t,r){let i=this._server.getClientCapabilities();if((t.tools||t.toolChoice)&&!i?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(t.messages.length>0){let n=t.messages[t.messages.length-1],a=Array.isArray(n.content)?n.content:[n.content],o=a.some(l=>l.type==="tool_result"),s=t.messages.length>1?t.messages[t.messages.length-2]:void 0,c=s?Array.isArray(s.content)?s.content:[s.content]:[],u=c.some(l=>l.type==="tool_use");if(o){if(a.some(l=>l.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!u)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(u){let l=new Set(c.filter(p=>p.type==="tool_use").map(p=>p.id)),d=new Set(a.filter(p=>p.type==="tool_result").map(p=>p.toolUseId));if(l.size!==d.size||![...l].every(p=>d.has(p)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params:t},fP.CreateMessageResultSchema,r)}elicitInputStream(t,r){let i=this._server.getClientCapabilities(),n=t.mode??"form";switch(n){case"url":{if(!i?.elicitation?.url)throw new Error("Client does not support url elicitation.");break}case"form":{if(!i?.elicitation?.form)throw new Error("Client does not support form elicitation.");break}}let a=n==="form"&&t.mode===void 0?{...t,mode:"form"}:t;return this.requestStream({method:"elicitation/create",params:a},fP.ElicitResultSchema,r)}async getTask(t,r){return this._server.getTask({taskId:t},r)}async getTaskResult(t,r,i){return this._server.getTaskResult({taskId:t},r,i)}async listTasks(t,r){return this._server.listTasks(t?{cursor:t}:void 0,r)}async cancelTask(t,r){return this._server.cancelTask({taskId:t},r)}};Kd.ExperimentalServerTasks=Kv});var hP=b(Wd=>{"use strict";Object.defineProperty(Wd,"__esModule",{value:!0});Wd.assertToolsCallTaskCapability=GK;Wd.assertClientRequestTaskCapability=KK;function GK(e,t,r){if(!e)throw new Error(`${r} does not support task creation (required for ${t})`);switch(t){case"tools/call":if(!e.tools?.call)throw new Error(`${r} does not support task creation for tools/call (required for ${t})`);break;default:break}}function KK(e,t,r){if(!e)throw new Error(`${r} does not support task creation (required for ${t})`);switch(t){case"sampling/createMessage":if(!e.sampling?.createMessage)throw new Error(`${r} does not support task creation for sampling/createMessage (required for ${t})`);break;case"elicitation/create":if(!e.elicitation?.create)throw new Error(`${r} does not support task creation for elicitation/create (required for ${t})`);break;default:break}}});var yP=b(Xd=>{"use strict";Object.defineProperty(Xd,"__esModule",{value:!0});Xd.Server=void 0;var vP=xS(),Ze=ca(),WK=pP(),Qs=hs(),XK=mP(),gP=hP(),Wv=class extends vP.Protocol{constructor(t,r){super(r),this._serverInfo=t,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(Ze.LoggingLevelSchema.options.map((i,n)=>[i,n])),this.isMessageIgnored=(i,n)=>{let a=this._loggingLevels.get(n);return a?this.LOG_LEVEL_SEVERITY.get(i)<this.LOG_LEVEL_SEVERITY.get(a):!1},this._capabilities=r?.capabilities??{},this._instructions=r?.instructions,this._jsonSchemaValidator=r?.jsonSchemaValidator??new WK.AjvJsonSchemaValidator,this.setRequestHandler(Ze.InitializeRequestSchema,i=>this._oninitialize(i)),this.setNotificationHandler(Ze.InitializedNotificationSchema,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(Ze.SetLevelRequestSchema,async(i,n)=>{let a=n.sessionId||n.requestInfo?.headers["mcp-session-id"]||void 0,{level:o}=i.params,s=Ze.LoggingLevelSchema.safeParse(o);return s.success&&this._loggingLevels.set(a,s.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new XK.ExperimentalServerTasks(this)}),this._experimental}registerCapabilities(t){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=(0,vP.mergeCapabilities)(this._capabilities,t)}setRequestHandler(t,r){let n=(0,Qs.getObjectShape)(t)?.method;if(!n)throw new Error("Schema is missing a method literal");let a;if((0,Qs.isZ4Schema)(n)){let s=n;a=s._zod?.def?.value??s.value}else{let s=n;a=s._def?.value??s.value}if(typeof a!="string")throw new Error("Schema method literal must be a string");if(a==="tools/call"){let s=async(c,u)=>{let l=(0,Qs.safeParse)(Ze.CallToolRequestSchema,c);if(!l.success){let g=l.error instanceof Error?l.error.message:String(l.error);throw new Ze.McpError(Ze.ErrorCode.InvalidParams,`Invalid tools/call request: ${g}`)}let{params:d}=l.data,p=await Promise.resolve(r(c,u));if(d.task){let g=(0,Qs.safeParse)(Ze.CreateTaskResultSchema,p);if(!g.success){let _=g.error instanceof Error?g.error.message:String(g.error);throw new Ze.McpError(Ze.ErrorCode.InvalidParams,`Invalid task creation result: ${_}`)}return g.data}let m=(0,Qs.safeParse)(Ze.CallToolResultSchema,p);if(!m.success){let g=m.error instanceof Error?m.error.message:String(m.error);throw new Ze.McpError(Ze.ErrorCode.InvalidParams,`Invalid tools/call result: ${g}`)}return m.data};return super.setRequestHandler(t,s)}return super.setRequestHandler(t,r)}assertCapabilityForMethod(t){switch(t){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${t})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${t})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${t})`);break;case"ping":break}}assertNotificationCapability(t){switch(t){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${t})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${t})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${t})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${t})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${t})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(t){if(this._capabilities)switch(t){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${t})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${t})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${t})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${t})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${t})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${t})`);break;case"ping":case"initialize":break}}assertTaskCapability(t){(0,gP.assertClientRequestTaskCapability)(this._clientCapabilities?.tasks?.requests,t,"Client")}assertTaskHandlerCapability(t){this._capabilities&&(0,gP.assertToolsCallTaskCapability)(this._capabilities.tasks?.requests,t,"Server")}async _oninitialize(t){let r=t.params.protocolVersion;return this._clientCapabilities=t.params.capabilities,this._clientVersion=t.params.clientInfo,{protocolVersion:Ze.SUPPORTED_PROTOCOL_VERSIONS.includes(r)?r:Ze.LATEST_PROTOCOL_VERSION,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},Ze.EmptyResultSchema)}async createMessage(t,r){if((t.tools||t.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(t.messages.length>0){let i=t.messages[t.messages.length-1],n=Array.isArray(i.content)?i.content:[i.content],a=n.some(u=>u.type==="tool_result"),o=t.messages.length>1?t.messages[t.messages.length-2]:void 0,s=o?Array.isArray(o.content)?o.content:[o.content]:[],c=s.some(u=>u.type==="tool_use");if(a){if(n.some(u=>u.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!c)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(c){let u=new Set(s.filter(d=>d.type==="tool_use").map(d=>d.id)),l=new Set(n.filter(d=>d.type==="tool_result").map(d=>d.toolUseId));if(u.size!==l.size||![...u].every(d=>l.has(d)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return t.tools?this.request({method:"sampling/createMessage",params:t},Ze.CreateMessageResultWithToolsSchema,r):this.request({method:"sampling/createMessage",params:t},Ze.CreateMessageResultSchema,r)}async elicitInput(t,r){switch(t.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let n=t;return this.request({method:"elicitation/create",params:n},Ze.ElicitResultSchema,r)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let n=t.mode==="form"?t:{...t,mode:"form"},a=await this.request({method:"elicitation/create",params:n},Ze.ElicitResultSchema,r);if(a.action==="accept"&&a.content&&n.requestedSchema)try{let s=this._jsonSchemaValidator.getValidator(n.requestedSchema)(a.content);if(!s.valid)throw new Ze.McpError(Ze.ErrorCode.InvalidParams,`Elicitation response content does not match requested schema: ${s.errorMessage}`)}catch(o){throw o instanceof Ze.McpError?o:new Ze.McpError(Ze.ErrorCode.InternalError,`Error validating elicitation response: ${o instanceof Error?o.message:String(o)}`)}return a}}}createElicitationCompletionNotifier(t,r){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:t}},r)}async listRoots(t,r){return this.request({method:"roots/list",params:t},Ze.ListRootsResultSchema,r)}async sendLoggingMessage(t,r){if(this._capabilities.logging&&!this.isMessageIgnored(t.level,r))return this.notification({method:"notifications/message",params:t})}async sendResourceUpdated(t){return this.notification({method:"notifications/resources/updated",params:t})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}};Xd.Server=Wv});var _P=b(Xt=>{"use strict";Object.defineProperty(Xt,"__esModule",{value:!0});Xt.McpZodTypeKind=Xt.COMPLETABLE_SYMBOL=void 0;Xt.completable=YK;Xt.isCompletable=QK;Xt.getCompleter=eW;Xt.unwrapCompletable=tW;Xt.COMPLETABLE_SYMBOL=Symbol.for("mcp.completable");function YK(e,t){return Object.defineProperty(e,Xt.COMPLETABLE_SYMBOL,{value:{complete:t},enumerable:!1,writable:!1,configurable:!1}),e}function QK(e){return!!e&&typeof e=="object"&&Xt.COMPLETABLE_SYMBOL in e}function eW(e){return e[Xt.COMPLETABLE_SYMBOL]?.complete}function tW(e){return e}var bP;(function(e){e.Completable="McpCompletable"})(bP||(Xt.McpZodTypeKind=bP={}))});var SP=b(Yd=>{"use strict";Object.defineProperty(Yd,"__esModule",{value:!0});Yd.UriTemplate=void 0;var xP=1e6,Xv=1e6,wP=1e4,rW=1e6,Yv=class e{static isTemplate(t){return/\{[^}\s]+\}/.test(t)}static validateLength(t,r,i){if(t.length>r)throw new Error(`${i} exceeds maximum length of ${r} characters (got ${t.length})`)}get variableNames(){return this.parts.flatMap(t=>typeof t=="string"?[]:t.names)}constructor(t){e.validateLength(t,xP,"Template"),this.template=t,this.parts=this.parse(t)}toString(){return this.template}parse(t){let r=[],i="",n=0,a=0;for(;n<t.length;)if(t[n]==="{"){i&&(r.push(i),i="");let o=t.indexOf("}",n);if(o===-1)throw new Error("Unclosed template expression");if(a++,a>wP)throw new Error(`Template contains too many expressions (max ${wP})`);let s=t.slice(n+1,o),c=this.getOperator(s),u=s.includes("*"),l=this.getNames(s),d=l[0];for(let p of l)e.validateLength(p,Xv,"Variable name");r.push({name:d,operator:c,names:l,exploded:u}),n=o+1}else i+=t[n],n++;return i&&r.push(i),r}getOperator(t){return["+","#",".","/","?","&"].find(i=>t.startsWith(i))||""}getNames(t){let r=this.getOperator(t);return t.slice(r.length).split(",").map(i=>i.replace("*","").trim()).filter(i=>i.length>0)}encodeValue(t,r){return e.validateLength(t,Xv,"Variable value"),r==="+"||r==="#"?encodeURI(t):encodeURIComponent(t)}expandPart(t,r){if(t.operator==="?"||t.operator==="&"){let o=t.names.map(c=>{let u=r[c];if(u===void 0)return"";let l=Array.isArray(u)?u.map(d=>this.encodeValue(d,t.operator)).join(","):this.encodeValue(u.toString(),t.operator);return`${c}=${l}`}).filter(c=>c.length>0);return o.length===0?"":(t.operator==="?"?"?":"&")+o.join("&")}if(t.names.length>1){let o=t.names.map(s=>r[s]).filter(s=>s!==void 0);return o.length===0?"":o.map(s=>Array.isArray(s)?s[0]:s).join(",")}let i=r[t.name];if(i===void 0)return"";let a=(Array.isArray(i)?i:[i]).map(o=>this.encodeValue(o,t.operator));switch(t.operator){case"":return a.join(",");case"+":return a.join(",");case"#":return"#"+a.join(",");case".":return"."+a.join(".");case"/":return"/"+a.join("/");default:return a.join(",")}}expand(t){let r="",i=!1;for(let n of this.parts){if(typeof n=="string"){r+=n;continue}let a=this.expandPart(n,t);a&&((n.operator==="?"||n.operator==="&")&&i?r+=a.replace("?","&"):r+=a,(n.operator==="?"||n.operator==="&")&&(i=!0))}return r}escapeRegExp(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}partToRegExp(t){let r=[];for(let a of t.names)e.validateLength(a,Xv,"Variable name");if(t.operator==="?"||t.operator==="&"){for(let a=0;a<t.names.length;a++){let o=t.names[a],s=a===0?"\\"+t.operator:"&";r.push({pattern:s+this.escapeRegExp(o)+"=([^&]+)",name:o})}return r}let i,n=t.name;switch(t.operator){case"":i=t.exploded?"([^/,]+(?:,[^/,]+)*)":"([^/,]+)";break;case"+":case"#":i="(.+)";break;case".":i="\\.([^/,]+)";break;case"/":i="/"+(t.exploded?"([^/,]+(?:,[^/,]+)*)":"([^/,]+)");break;default:i="([^/]+)"}return r.push({pattern:i,name:n}),r}match(t){e.validateLength(t,xP,"URI");let r="^",i=[];for(let s of this.parts)if(typeof s=="string")r+=this.escapeRegExp(s);else{let c=this.partToRegExp(s);for(let{pattern:u,name:l}of c)r+=u,i.push({name:l,exploded:s.exploded})}r+="$",e.validateLength(r,rW,"Generated regex pattern");let n=new RegExp(r),a=t.match(n);if(!a)return null;let o={};for(let s=0;s<i.length;s++){let{name:c,exploded:u}=i[s],l=a[s+1],d=c.replace("*","");u&&l.includes(",")?o[d]=l.split(","):o[d]=l}return o}};Yd.UriTemplate=Yv});var OP=b(ec=>{"use strict";Object.defineProperty(ec,"__esModule",{value:!0});ec.validateToolName=$P;ec.issueToolNameWarning=PP;ec.validateAndWarnToolName=iW;var nW=/^[A-Za-z0-9._-]{1,128}$/;function $P(e){let t=[];if(e.length===0)return{isValid:!1,warnings:["Tool name cannot be empty"]};if(e.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${e.length})`]};if(e.includes(" ")&&t.push("Tool name contains spaces, which may cause parsing issues"),e.includes(",")&&t.push("Tool name contains commas, which may cause parsing issues"),(e.startsWith("-")||e.endsWith("-"))&&t.push("Tool name starts or ends with a dash, which may cause parsing issues in some contexts"),(e.startsWith(".")||e.endsWith("."))&&t.push("Tool name starts or ends with a dot, which may cause parsing issues in some contexts"),!nW.test(e)){let r=e.split("").filter(i=>!/[A-Za-z0-9._-]/.test(i)).filter((i,n,a)=>a.indexOf(i)===n);return t.push(`Tool name contains invalid characters: ${r.map(i=>`"${i}"`).join(", ")}`,"Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)"),{isValid:!1,warnings:t}}return{isValid:!0,warnings:t}}function PP(e,t){if(t.length>0){console.warn(`Tool name validation warning for "${e}":`);for(let r of t)console.warn(` - ${r}`);console.warn("Tool registration will proceed, but this may cause compatibility issues."),console.warn("Consider updating the tool name to conform to the MCP tool naming standard."),console.warn("See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.")}}function iW(e){let t=$P(e);return PP(e,t.warnings),t.isValid}});var jP=b(Qd=>{"use strict";Object.defineProperty(Qd,"__esModule",{value:!0});Qd.ExperimentalMcpServerTasks=void 0;var Qv=class{constructor(t){this._mcpServer=t}registerToolTask(t,r,i){let n={taskSupport:"required",...r.execution};if(n.taskSupport==="forbidden")throw new Error(`Cannot register task-based tool '${t}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(t,r.title,r.description,r.inputSchema,r.outputSchema,r.annotations,n,r._meta,i)}};Qd.ExperimentalMcpServerTasks=Qv});var eg=b(Lt=>{"use strict";var IP=Lt&&Lt.__createBinding||(Object.create?(function(e,t,r,i){i===void 0&&(i=r);var n=Object.getOwnPropertyDescriptor(t,r);(!n||("get"in n?!t.__esModule:n.writable||n.configurable))&&(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,n)}):(function(e,t,r,i){i===void 0&&(i=r),e[i]=t[r]})),aW=Lt&&Lt.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),oW=Lt&&Lt.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)r!=="default"&&Object.prototype.hasOwnProperty.call(e,r)&&IP(t,e,r);return aW(t,e),t},sW=Lt&&Lt.__exportStar||function(e,t){for(var r in e)r!=="default"&&!Object.prototype.hasOwnProperty.call(t,r)&&IP(t,e,r)};Object.defineProperty(Lt,"__esModule",{value:!0});Lt.z=void 0;var TP=oW(ws());Lt.z=TP;sW(ws(),Lt);Lt.default=TP});var AP=b(xo=>{"use strict";Object.defineProperty(xo,"__esModule",{value:!0});xo.ResourceTemplate=xo.McpServer=void 0;var cW=yP(),Ge=hs(),EP=Qm(),ee=ca(),tg=_P(),uW=SP(),kP=OP(),lW=jP(),dW=eg(),rg=class{constructor(t,r){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new cW.Server(t,r)}get experimental(){return this._experimental||(this._experimental={tasks:new lW.ExperimentalMcpServerTasks(this)}),this._experimental}async connect(t){return await this.server.connect(t)}async close(){await this.server.close()}setToolRequestHandlers(){this._toolHandlersInitialized||(this.server.assertCanSetRequestHandler(Ai(ee.ListToolsRequestSchema)),this.server.assertCanSetRequestHandler(Ai(ee.CallToolRequestSchema)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(ee.ListToolsRequestSchema,()=>({tools:Object.entries(this._registeredTools).filter(([,t])=>t.enabled).map(([t,r])=>{let i={name:t,title:r.title,description:r.description,inputSchema:(()=>{let n=(0,Ge.normalizeObjectSchema)(r.inputSchema);return n?(0,EP.toJsonSchemaCompat)(n,{strictUnions:!0,pipeStrategy:"input"}):pW})(),annotations:r.annotations,execution:r.execution,_meta:r._meta};if(r.outputSchema){let n=(0,Ge.normalizeObjectSchema)(r.outputSchema);n&&(i.outputSchema=(0,EP.toJsonSchemaCompat)(n,{strictUnions:!0,pipeStrategy:"output"}))}return i})})),this.server.setRequestHandler(ee.CallToolRequestSchema,async(t,r)=>{try{let i=this._registeredTools[t.params.name];if(!i)throw new ee.McpError(ee.ErrorCode.InvalidParams,`Tool ${t.params.name} not found`);if(!i.enabled)throw new ee.McpError(ee.ErrorCode.InvalidParams,`Tool ${t.params.name} disabled`);let n=!!t.params.task,a=i.execution?.taskSupport,o="createTask"in i.handler;if((a==="required"||a==="optional")&&!o)throw new ee.McpError(ee.ErrorCode.InternalError,`Tool ${t.params.name} has taskSupport '${a}' but was not registered with registerToolTask`);if(a==="required"&&!n)throw new ee.McpError(ee.ErrorCode.MethodNotFound,`Tool ${t.params.name} requires task augmentation (taskSupport: 'required')`);if(a==="optional"&&!n&&o)return await this.handleAutomaticTaskPolling(i,t,r);let s=await this.validateToolInput(i,t.params.arguments,t.params.name),c=await this.executeToolHandler(i,s,r);return n||await this.validateToolOutput(i,c,t.params.name),c}catch(i){if(i instanceof ee.McpError&&i.code===ee.ErrorCode.UrlElicitationRequired)throw i;return this.createToolError(i instanceof Error?i.message:String(i))}}),this._toolHandlersInitialized=!0)}createToolError(t){return{content:[{type:"text",text:t}],isError:!0}}async validateToolInput(t,r,i){if(!t.inputSchema)return;let a=(0,Ge.normalizeObjectSchema)(t.inputSchema)??t.inputSchema,o=await(0,Ge.safeParseAsync)(a,r);if(!o.success){let s="error"in o?o.error:"Unknown error",c=(0,Ge.getParseErrorMessage)(s);throw new ee.McpError(ee.ErrorCode.InvalidParams,`Input validation error: Invalid arguments for tool ${i}: ${c}`)}return o.data}async validateToolOutput(t,r,i){if(!t.outputSchema||!("content"in r)||r.isError)return;if(!r.structuredContent)throw new ee.McpError(ee.ErrorCode.InvalidParams,`Output validation error: Tool ${i} has an output schema but no structured content was provided`);let n=(0,Ge.normalizeObjectSchema)(t.outputSchema),a=await(0,Ge.safeParseAsync)(n,r.structuredContent);if(!a.success){let o="error"in a?a.error:"Unknown error",s=(0,Ge.getParseErrorMessage)(o);throw new ee.McpError(ee.ErrorCode.InvalidParams,`Output validation error: Invalid structured content for tool ${i}: ${s}`)}}async executeToolHandler(t,r,i){let n=t.handler;if("createTask"in n){if(!i.taskStore)throw new Error("No task store provided.");let o={...i,taskStore:i.taskStore};if(t.inputSchema){let s=n;return await Promise.resolve(s.createTask(r,o))}else{let s=n;return await Promise.resolve(s.createTask(o))}}if(t.inputSchema){let o=n;return await Promise.resolve(o(r,i))}else{let o=n;return await Promise.resolve(o(i))}}async handleAutomaticTaskPolling(t,r,i){if(!i.taskStore)throw new Error("No task store provided for task-capable tool.");let n=await this.validateToolInput(t,r.params.arguments,r.params.name),a=t.handler,o={...i,taskStore:i.taskStore},s=n?await Promise.resolve(a.createTask(n,o)):await Promise.resolve(a.createTask(o)),c=s.task.taskId,u=s.task,l=u.pollInterval??5e3;for(;u.status!=="completed"&&u.status!=="failed"&&u.status!=="cancelled";){await new Promise(p=>setTimeout(p,l));let d=await i.taskStore.getTask(c);if(!d)throw new ee.McpError(ee.ErrorCode.InternalError,`Task ${c} not found during polling`);u=d}return await i.taskStore.getTaskResult(c)}setCompletionRequestHandler(){this._completionHandlerInitialized||(this.server.assertCanSetRequestHandler(Ai(ee.CompleteRequestSchema)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(ee.CompleteRequestSchema,async t=>{switch(t.params.ref.type){case"ref/prompt":return(0,ee.assertCompleteRequestPrompt)(t),this.handlePromptCompletion(t,t.params.ref);case"ref/resource":return(0,ee.assertCompleteRequestResourceTemplate)(t),this.handleResourceCompletion(t,t.params.ref);default:throw new ee.McpError(ee.ErrorCode.InvalidParams,`Invalid completion reference: ${t.params.ref}`)}}),this._completionHandlerInitialized=!0)}async handlePromptCompletion(t,r){let i=this._registeredPrompts[r.name];if(!i)throw new ee.McpError(ee.ErrorCode.InvalidParams,`Prompt ${r.name} not found`);if(!i.enabled)throw new ee.McpError(ee.ErrorCode.InvalidParams,`Prompt ${r.name} disabled`);if(!i.argsSchema)return tc;let a=(0,Ge.getObjectShape)(i.argsSchema)?.[t.params.argument.name];if(!(0,tg.isCompletable)(a))return tc;let o=(0,tg.getCompleter)(a);if(!o)return tc;let s=await o(t.params.argument.value,t.params.context);return RP(s)}async handleResourceCompletion(t,r){let i=Object.values(this._registeredResourceTemplates).find(o=>o.resourceTemplate.uriTemplate.toString()===r.uri);if(!i){if(this._registeredResources[r.uri])return tc;throw new ee.McpError(ee.ErrorCode.InvalidParams,`Resource template ${t.params.ref.uri} not found`)}let n=i.resourceTemplate.completeCallback(t.params.argument.name);if(!n)return tc;let a=await n(t.params.argument.value,t.params.context);return RP(a)}setResourceRequestHandlers(){this._resourceHandlersInitialized||(this.server.assertCanSetRequestHandler(Ai(ee.ListResourcesRequestSchema)),this.server.assertCanSetRequestHandler(Ai(ee.ListResourceTemplatesRequestSchema)),this.server.assertCanSetRequestHandler(Ai(ee.ReadResourceRequestSchema)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(ee.ListResourcesRequestSchema,async(t,r)=>{let i=Object.entries(this._registeredResources).filter(([a,o])=>o.enabled).map(([a,o])=>({uri:a,name:o.name,...o.metadata})),n=[];for(let a of Object.values(this._registeredResourceTemplates)){if(!a.resourceTemplate.listCallback)continue;let o=await a.resourceTemplate.listCallback(r);for(let s of o.resources)n.push({...a.metadata,...s})}return{resources:[...i,...n]}}),this.server.setRequestHandler(ee.ListResourceTemplatesRequestSchema,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([r,i])=>({name:r,uriTemplate:i.resourceTemplate.uriTemplate.toString(),...i.metadata}))})),this.server.setRequestHandler(ee.ReadResourceRequestSchema,async(t,r)=>{let i=new URL(t.params.uri),n=this._registeredResources[i.toString()];if(n){if(!n.enabled)throw new ee.McpError(ee.ErrorCode.InvalidParams,`Resource ${i} disabled`);return n.readCallback(i,r)}for(let a of Object.values(this._registeredResourceTemplates)){let o=a.resourceTemplate.uriTemplate.match(i.toString());if(o)return a.readCallback(i,o,r)}throw new ee.McpError(ee.ErrorCode.InvalidParams,`Resource ${i} not found`)}),this._resourceHandlersInitialized=!0)}setPromptRequestHandlers(){this._promptHandlersInitialized||(this.server.assertCanSetRequestHandler(Ai(ee.ListPromptsRequestSchema)),this.server.assertCanSetRequestHandler(Ai(ee.GetPromptRequestSchema)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(ee.ListPromptsRequestSchema,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,t])=>t.enabled).map(([t,r])=>({name:t,title:r.title,description:r.description,arguments:r.argsSchema?fW(r.argsSchema):void 0}))})),this.server.setRequestHandler(ee.GetPromptRequestSchema,async(t,r)=>{let i=this._registeredPrompts[t.params.name];if(!i)throw new ee.McpError(ee.ErrorCode.InvalidParams,`Prompt ${t.params.name} not found`);if(!i.enabled)throw new ee.McpError(ee.ErrorCode.InvalidParams,`Prompt ${t.params.name} disabled`);if(i.argsSchema){let n=(0,Ge.normalizeObjectSchema)(i.argsSchema),a=await(0,Ge.safeParseAsync)(n,t.params.arguments);if(!a.success){let c="error"in a?a.error:"Unknown error",u=(0,Ge.getParseErrorMessage)(c);throw new ee.McpError(ee.ErrorCode.InvalidParams,`Invalid arguments for prompt ${t.params.name}: ${u}`)}let o=a.data,s=i.callback;return await Promise.resolve(s(o,r))}else{let n=i.callback;return await Promise.resolve(n(r))}}),this._promptHandlersInitialized=!0)}resource(t,r,...i){let n;typeof i[0]=="object"&&(n=i.shift());let a=i[0];if(typeof r=="string"){if(this._registeredResources[r])throw new Error(`Resource ${r} is already registered`);let o=this._createRegisteredResource(t,void 0,r,n,a);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),o}else{if(this._registeredResourceTemplates[t])throw new Error(`Resource template ${t} is already registered`);let o=this._createRegisteredResourceTemplate(t,void 0,r,n,a);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),o}}registerResource(t,r,i,n){if(typeof r=="string"){if(this._registeredResources[r])throw new Error(`Resource ${r} is already registered`);let a=this._createRegisteredResource(t,i.title,r,i,n);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),a}else{if(this._registeredResourceTemplates[t])throw new Error(`Resource template ${t} is already registered`);let a=this._createRegisteredResourceTemplate(t,i.title,r,i,n);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),a}}_createRegisteredResource(t,r,i,n,a){let o={name:t,title:r,metadata:n,readCallback:a,enabled:!0,disable:()=>o.update({enabled:!1}),enable:()=>o.update({enabled:!0}),remove:()=>o.update({uri:null}),update:s=>{typeof s.uri<"u"&&s.uri!==i&&(delete this._registeredResources[i],s.uri&&(this._registeredResources[s.uri]=o)),typeof s.name<"u"&&(o.name=s.name),typeof s.title<"u"&&(o.title=s.title),typeof s.metadata<"u"&&(o.metadata=s.metadata),typeof s.callback<"u"&&(o.readCallback=s.callback),typeof s.enabled<"u"&&(o.enabled=s.enabled),this.sendResourceListChanged()}};return this._registeredResources[i]=o,o}_createRegisteredResourceTemplate(t,r,i,n,a){let o={resourceTemplate:i,title:r,metadata:n,readCallback:a,enabled:!0,disable:()=>o.update({enabled:!1}),enable:()=>o.update({enabled:!0}),remove:()=>o.update({name:null}),update:u=>{typeof u.name<"u"&&u.name!==t&&(delete this._registeredResourceTemplates[t],u.name&&(this._registeredResourceTemplates[u.name]=o)),typeof u.title<"u"&&(o.title=u.title),typeof u.template<"u"&&(o.resourceTemplate=u.template),typeof u.metadata<"u"&&(o.metadata=u.metadata),typeof u.callback<"u"&&(o.readCallback=u.callback),typeof u.enabled<"u"&&(o.enabled=u.enabled),this.sendResourceListChanged()}};this._registeredResourceTemplates[t]=o;let s=i.uriTemplate.variableNames;return Array.isArray(s)&&s.some(u=>!!i.completeCallback(u))&&this.setCompletionRequestHandler(),o}_createRegisteredPrompt(t,r,i,n,a){let o={title:r,description:i,argsSchema:n===void 0?void 0:(0,Ge.objectFromShape)(n),callback:a,enabled:!0,disable:()=>o.update({enabled:!1}),enable:()=>o.update({enabled:!0}),remove:()=>o.update({name:null}),update:s=>{typeof s.name<"u"&&s.name!==t&&(delete this._registeredPrompts[t],s.name&&(this._registeredPrompts[s.name]=o)),typeof s.title<"u"&&(o.title=s.title),typeof s.description<"u"&&(o.description=s.description),typeof s.argsSchema<"u"&&(o.argsSchema=(0,Ge.objectFromShape)(s.argsSchema)),typeof s.callback<"u"&&(o.callback=s.callback),typeof s.enabled<"u"&&(o.enabled=s.enabled),this.sendPromptListChanged()}};return this._registeredPrompts[t]=o,n&&Object.values(n).some(c=>{let u=c instanceof dW.ZodOptional?c._def?.innerType:c;return(0,tg.isCompletable)(u)})&&this.setCompletionRequestHandler(),o}_createRegisteredTool(t,r,i,n,a,o,s,c,u){(0,kP.validateAndWarnToolName)(t);let l={title:r,description:i,inputSchema:CP(n),outputSchema:CP(a),annotations:o,execution:s,_meta:c,handler:u,enabled:!0,disable:()=>l.update({enabled:!1}),enable:()=>l.update({enabled:!0}),remove:()=>l.update({name:null}),update:d=>{typeof d.name<"u"&&d.name!==t&&(typeof d.name=="string"&&(0,kP.validateAndWarnToolName)(d.name),delete this._registeredTools[t],d.name&&(this._registeredTools[d.name]=l)),typeof d.title<"u"&&(l.title=d.title),typeof d.description<"u"&&(l.description=d.description),typeof d.paramsSchema<"u"&&(l.inputSchema=(0,Ge.objectFromShape)(d.paramsSchema)),typeof d.outputSchema<"u"&&(l.outputSchema=(0,Ge.objectFromShape)(d.outputSchema)),typeof d.callback<"u"&&(l.handler=d.callback),typeof d.annotations<"u"&&(l.annotations=d.annotations),typeof d._meta<"u"&&(l._meta=d._meta),typeof d.enabled<"u"&&(l.enabled=d.enabled),this.sendToolListChanged()}};return this._registeredTools[t]=l,this.setToolRequestHandlers(),this.sendToolListChanged(),l}tool(t,...r){if(this._registeredTools[t])throw new Error(`Tool ${t} is already registered`);let i,n,a,o;if(typeof r[0]=="string"&&(i=r.shift()),r.length>1){let c=r[0];if(ig(c))n=r.shift(),r.length>1&&typeof r[0]=="object"&&r[0]!==null&&!ig(r[0])&&(o=r.shift());else if(typeof c=="object"&&c!==null){if(Object.values(c).some(u=>typeof u=="object"&&u!==null))throw new Error(`Tool ${t} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);o=r.shift()}}let s=r[0];return this._createRegisteredTool(t,void 0,i,n,a,o,{taskSupport:"forbidden"},void 0,s)}registerTool(t,r,i){if(this._registeredTools[t])throw new Error(`Tool ${t} is already registered`);let{title:n,description:a,inputSchema:o,outputSchema:s,annotations:c,_meta:u}=r;return this._createRegisteredTool(t,n,a,o,s,c,{taskSupport:"forbidden"},u,i)}prompt(t,...r){if(this._registeredPrompts[t])throw new Error(`Prompt ${t} is already registered`);let i;typeof r[0]=="string"&&(i=r.shift());let n;r.length>1&&(n=r.shift());let a=r[0],o=this._createRegisteredPrompt(t,void 0,i,n,a);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),o}registerPrompt(t,r,i){if(this._registeredPrompts[t])throw new Error(`Prompt ${t} is already registered`);let{title:n,description:a,argsSchema:o}=r,s=this._createRegisteredPrompt(t,n,a,o,i);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),s}isConnected(){return this.server.transport!==void 0}async sendLoggingMessage(t,r){return this.server.sendLoggingMessage(t,r)}sendResourceListChanged(){this.isConnected()&&this.server.sendResourceListChanged()}sendToolListChanged(){this.isConnected()&&this.server.sendToolListChanged()}sendPromptListChanged(){this.isConnected()&&this.server.sendPromptListChanged()}};xo.McpServer=rg;var ng=class{constructor(t,r){this._callbacks=r,this._uriTemplate=typeof t=="string"?new uW.UriTemplate(t):t}get uriTemplate(){return this._uriTemplate}get listCallback(){return this._callbacks.list}completeCallback(t){return this._callbacks.complete?.[t]}};xo.ResourceTemplate=ng;var pW={type:"object",properties:{}};function MP(e){return e!==null&&typeof e=="object"&&"parse"in e&&typeof e.parse=="function"&&"safeParse"in e&&typeof e.safeParse=="function"}function DP(e){return"_def"in e||"_zod"in e||MP(e)}function ig(e){return typeof e!="object"||e===null||DP(e)?!1:Object.keys(e).length===0?!0:Object.values(e).some(MP)}function CP(e){if(e){if(ig(e))return(0,Ge.objectFromShape)(e);if(!DP(e))throw new Error("inputSchema must be a Zod schema or raw shape, received an unrecognized object");return e}}function fW(e){let t=(0,Ge.getObjectShape)(e);return t?Object.entries(t).map(([r,i])=>{let n=(0,Ge.getSchemaDescription)(i),a=(0,Ge.isSchemaOptional)(i);return{name:r,description:n,required:!a}}):[]}function Ai(e){let r=(0,Ge.getObjectShape)(e)?.method;if(!r)throw new Error("Schema is missing a method literal");let i=(0,Ge.getLiteralValue)(r);if(typeof i=="string")return i;throw new Error("Schema method literal must be a string")}function RP(e){return{completion:{values:e.slice(0,100),total:e.length,hasMore:e.length>100}}}var tc={completion:{values:[],hasMore:!1}}});var zP=b(wo=>{"use strict";Object.defineProperty(wo,"__esModule",{value:!0});wo.ReadBuffer=void 0;wo.deserializeMessage=ZP;wo.serializeMessage=hW;var mW=ca(),ag=class{append(t){this._buffer=this._buffer?Buffer.concat([this._buffer,t]):t}readMessage(){if(!this._buffer)return null;let t=this._buffer.indexOf(`
|
|
53
53
|
`);if(t===-1)return null;let r=this._buffer.toString("utf8",0,t).replace(/\r$/,"");return this._buffer=this._buffer.subarray(t+1),ZP(r)}clear(){this._buffer=void 0}};wo.ReadBuffer=ag;function ZP(e){return mW.JSONRPCMessageSchema.parse(JSON.parse(e))}function hW(e){return JSON.stringify(e)+`
|
|
54
54
|
`}});var UP=b(So=>{"use strict";var vW=So&&So.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(So,"__esModule",{value:!0});So.StdioServerTransport=void 0;var NP=vW(require("node:process")),qP=zP(),og=class{constructor(t=NP.default.stdin,r=NP.default.stdout){this._stdin=t,this._stdout=r,this._readBuffer=new qP.ReadBuffer,this._started=!1,this._ondata=i=>{this._readBuffer.append(i),this.processReadBuffer()},this._onerror=i=>{this.onerror?.(i)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let t=this._readBuffer.readMessage();if(t===null)break;this.onmessage?.(t)}catch(t){this.onerror?.(t)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(t){return new Promise(r=>{let i=(0,qP.serializeMessage)(t);this._stdout.write(i)?r():this._stdout.once("drain",r)})}};So.StdioServerTransport=og});var ep=b(($pe,LP)=>{var{AsyncLocalStorage:gW}=require("node:async_hooks"),sg=new gW;function yW(e,t){return sg.run({sessionId:e},t)}function bW(){let e=sg.getStore();return e&&e.sessionId}LP.exports={sessionStorage:sg,runWithSession:yW,currentSessionId:bW}});var lg=b((Ppe,HP)=>{var{currentSessionId:cg}=ep(),_W=new Set(["on","1","true","yes"]);function ug(){let e=process.env.TRACE;return e!=null&&_W.has(String(e).trim().toLowerCase())}function tp(e,t){if(!ug())return;let r=JSON.stringify({ts:new Date().toISOString(),event:e,...t});process.stderr.write(r+`
|
|
55
|
-
`)}var FP=500,BP=1e4,xW=" \u2026[truncated]",wW=new Set(["name","description"]);function SW(){let e=process.env.TRACE_RESULT_TEXT_MAX;if(!e)return FP;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:FP}function rc(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(rc);let t={};for(let[r,i]of Object.entries(e))wW.has(r)&&typeof i=="string"?t[r]=`[redacted: ${i.length} chars]`:t[r]=rc(i);return t}function $W(e){if(!e||typeof e!="object")return e;let t=e;if(typeof e.services=="string")try{t={...e,services:JSON.stringify(rc(JSON.parse(e.services)))}}catch{}return rc(t)}function PW(e){if(typeof e!="string"||e.length===0)return e;try{return JSON.stringify(rc(JSON.parse(e)))}catch{return e}}function OW(e){if(!e)return"";let t=(e.content||[]).find(r=>r&&r.type==="text");return t&&t.text||""}function VP(e,t){if(typeof e!="string")return"";let r=t??SW();return e.length<=r?e:e.slice(0,r)+xW}function jW(e){if(!e||typeof e!="object")return;let t=e.estimate_id;return typeof t=="string"&&t.length>0?t:void 0}function IW(e){if(typeof e!="string"||e.length===0)return;let t;try{t=JSON.parse(e)}catch{return}if(!t||typeof t!="object")return;let r=t.estimate_id;return typeof r=="string"&&r.length>0?r:void 0}function TW(e,t){return async function(i,...n){if(!ug())return t(i,...n);let a=Date.now(),o=jW(i);try{tp("tool.call",{name:e,args:$W(i),estimateId:o,mcpSessionId:cg()})}catch{}let s,c;try{s=await t(i,...n)}catch(l){c=l}let u=Date.now()-a;if(c){try{let l=c.stack||c.message||String(c);tp("tool.result",{name:e,isError:!0,resultText:VP(l,BP),resultLength:l.length,durationMs:u,estimateId:o,mcpSessionId:cg()})}catch{}throw c}try{let l=OW(s),d=PW(l),p=!!(s&&s.isError),m=o??IW(l);tp("tool.result",{name:e,isError:p,resultText:VP(d,p?BP:void 0),resultLength:l.length,durationMs:u,estimateId:m,mcpSessionId:cg()})}catch{}return s}}HP.exports={emit:tp,traceTool:TW,isTraceEnabled:ug}});var nc=b((Ope,JP)=>{var{emit:ai}=lg(),{currentSessionId:EW}=ep();function oi(e){return{...e,mcpSessionId:EW()}}var kW={send:e=>ai("save.send",oi(e)),ok:e=>ai("save.ok",oi(e)),fail:e=>ai("save.fail",oi(e))};function CW(e){ai("lint",oi(e))}var RW={needsGrounding:e=>ai("build_estimate.needs_grounding",oi(e))},MW={redirectToParent:e=>ai("get_service_fields.redirect_to_parent",oi(e))},DW={unverified:e=>ai("template_hint.unverified",oi(e))},AW={start:e=>ai("session.start",oi(e))},ZW={tenancyRemap:e=>ai("ec2.tenancy_remap",oi(e))};JP.exports={save:kW,lint:CW,buildEstimate:RW,getServiceFields:MW,templateHint:DW,session:AW,ec2:ZW}});var KP=b((jpe,GP)=>{var zW=nc(),NW=/^(?:ri|reserved|convertible|instanceSavings|computeSavings|ondemand)(?:(\d)yr)?(?:(No|Partial|All)Upfront)?$/i,qW={ri:"reserved",reserved:"reserved",standard:"reserved",convertible:"convertible",instancesavings:"instanceSavings",computesavings:"computeSavings",ondemand:"ondemand"},UW={ondemand:"on-demand",reserved:"standard",standard:"standard",convertible:"convertible",instanceSavings:"instance-savings",computeSavings:"compute-savings",spot:"spot"},LW={No:"None",Partial:"Partial",All:"All"};function FW(e){if(typeof e=="string")return BW(e);let t=e.value?.model?e.value:e;return VW(t.model||"ondemand",t.term||"1yr",t.upfrontPayment||t.options||"None")}function BW(e){let t=e.match(NW);if(t){let o=e.match(/^[a-zA-Z]+/)[0].toLowerCase();return{model:qW[o]||o,term:t[1]?`${t[1]}yr`:"1yr",upfrontPayment:t[2]?LW[t[2]]||t[2]:"None"}}let r=e.toLowerCase(),i="ondemand";/instance.savings/i.test(r)?i="instanceSavings":/compute.savings/i.test(r)?i="computeSavings":r.includes("convertible")?i="convertible":r.includes("reserved")||/ ri\b/.test(r)?i="reserved":r.includes("spot")&&(i="spot");let n=r.match(/(\d)\s*(?:yr|year)/),a="None";return r.includes("all upfront")?a="All":r.includes("partial")&&(a="Partial"),{model:i,term:n?`${n[1]}yr`:"1yr",upfrontPayment:a}}function VW(e,t,r){return r=r.replace(/Upfront$/i,""),r==="No"&&(r="None"),{model:e,term:t,upfrontPayment:r}}function HW(e,t,r){let{model:i,term:n,upfrontPayment:a}=e,o=n==="3yr"?"3 Year":"1 Year";if(!r||r==="shared"){let c=i;if(i==="reserved"&&(i="instanceSavings"),i==="convertible"&&(i="computeSavings"),c!==i)try{zW.ec2.tenancyRemap({asked:c,got:i,tenancy:r||"shared"})}catch{}}let s=UW[i]||"on-demand";return i==="ondemand"?{value:{selectedOption:"on-demand",term:o,utilizationValue:t||"100",utilizationUnit:"%Utilized/Month"}}:{value:{selectedOption:s,term:o,upfrontPayment:a,model:i}}}var rp={gp3:"Storage General Purpose gp3 GB Mo",gp2:"Storage General Purpose GB Mo",io1:"Storage Provisioned IOPS GB Mo",io2:"Storage Provisioned IOPS io2 GB month",st1:"Storage Throughput Optimized HDD GB Mo",sc1:"Storage Cold HDD GB Mo",magnetic:"Storage Magnetic GB Mo"};function JW(e){let t=e.tenancy||"shared",r=FW(e.pricingStrategy||"ondemand"),i=e.pricingStrategy&&typeof e.pricingStrategy=="object"?e.pricingStrategy:null,n=i?.value?.utilizationValue??i?.utilizationValue,a=e.utilization??n,o=a!=null?String(a):"100",s=e.workload!==void 0?e.workload:e.quantity,c;s&&typeof s=="object"&&"value"in s?c=s:s&&typeof s=="object"?c={value:{workloadType:"consistent",data:"1"}}:c={value:{workloadType:"consistent",data:String(s||"1")}};let u=e.storageType||null;u||(e.gp3Iops||e.gp3Throughput?u="Storage General Purpose gp3 GB Mo":e.iops?u="Storage Provisioned IOPS GB Mo":e.iops2||e.storageAmountIo2?u="Storage Provisioned IOPS io2 GB month":e.storageAmount&&(u="Storage General Purpose gp3 GB Mo")),u&&rp[u.toLowerCase()]&&(u=rp[u.toLowerCase()]);let l=e.storageTypeDH||null;!l&&t==="host"&&(e.gp3IopsDH||e.gp3ThroughputDH||e.storageAmountDH?l="Storage General Purpose gp3 GB Mo":u&&(l=u)),l&&rp[l.toLowerCase()]&&(l=rp[l.toLowerCase()]);let d=e.storageAmountDH||(t==="host"?e.storageAmount:null),p=e.gp3IopsDH||(t==="host"?e.gp3Iops:null),m=e.gp3ThroughputDH||(t==="host"?e.gp3Throughput:null),g=e.iopsDH||(t==="host"?e.iops:null),_=e.iops2DH||(t==="host"?e.iops2:null);return{tenancy:{value:t},selectedOS:{value:e.selectedOS||"linux"},workloadSelection:{value:"consistent"},instanceType:{value:e.instanceType||""},workload:c,pricingStrategy:HW(r,o,t),ec2AdvancedPricingMetrics:{value:1},detailedMonitoringCheckbox:{value:!1},...u&&t!=="host"&&{storageType:{value:u}},...e.storageAmount&&t!=="host"&&{storageAmount:typeof e.storageAmount=="object"?e.storageAmount:{value:String(e.storageAmount),unit:"gb|NA"}},...e.snapshotFrequency!=null&&{snapshotFrequency:{value:String(e.snapshotFrequency)}},...e.gp3Iops&&t!=="host"&&{gp3Iops:typeof e.gp3Iops=="object"?e.gp3Iops:{value:String(e.gp3Iops)}},...e.gp3Throughput&&t!=="host"&&{gp3Throughput:typeof e.gp3Throughput=="object"?e.gp3Throughput:{value:String(e.gp3Throughput),unit:"mbps"}},...e.iops&&t!=="host"&&{iops:typeof e.iops=="object"?e.iops:{value:String(e.iops)}},...e.iops2&&t!=="host"&&{iops2:typeof e.iops2=="object"?e.iops2:{value:String(e.iops2)}},...e.storageAmountIo2&&t!=="host"&&{storageAmountIo2:typeof e.storageAmountIo2=="object"?e.storageAmountIo2:{value:String(e.storageAmountIo2),unit:"gb|NA"}},...l&&{storageTypeDH:{value:l}},...d&&{storageAmountDH:typeof d=="object"?d:{value:String(d),unit:"gb|NA"}},...p&&{gp3IopsDH:typeof p=="object"?p:{value:String(p)}},...m&&{gp3ThroughputDH:typeof m=="object"?m:{value:String(m),unit:"mbps"}},...g&&{iopsDH:typeof g=="object"?g:{value:String(g)}},..._&&{iops2DH:typeof _=="object"?_:{value:String(_)}},...e.dataTransferForEC2&&{dataTransferForEC2:e.dataTransferForEC2}}}GP.exports={transformConfig:JW}});var ic=b((Ipe,ip)=>{var np=require("crypto"),{PARTITIONS:dg,resolvePartition:WP,loadManifest:GW,findService:KW,fetchServiceDefinition:pg,saveEstimate:WW,extractInputFields:XW}=Po(),YW=KP(),fg={"us-east-1":"US East (N. Virginia)","us-east-2":"US East (Ohio)","us-west-1":"US West (N. California)","us-west-2":"US West (Oregon)","af-south-1":"Africa (Cape Town)","ap-east-1":"Asia Pacific (Hong Kong)","ap-south-1":"Asia Pacific (Mumbai)","ap-south-2":"Asia Pacific (Hyderabad)","ap-southeast-1":"Asia Pacific (Singapore)","ap-southeast-2":"Asia Pacific (Sydney)","ap-southeast-3":"Asia Pacific (Jakarta)","ap-southeast-4":"Asia Pacific (Melbourne)","ap-northeast-1":"Asia Pacific (Tokyo)","ap-northeast-2":"Asia Pacific (Seoul)","ap-northeast-3":"Asia Pacific (Osaka)","ca-central-1":"Canada (Central)","ca-west-1":"Canada West (Calgary)","eu-central-1":"Europe (Frankfurt)","eu-central-2":"Europe (Zurich)","eu-west-1":"Europe (Ireland)","eu-west-2":"Europe (London)","eu-west-3":"Europe (Paris)","eu-south-1":"Europe (Milan)","eu-south-2":"Europe (Spain)","eu-north-1":"Europe (Stockholm)","il-central-1":"Israel (Tel Aviv)","me-south-1":"Middle East (Bahrain)","me-central-1":"Middle East (UAE)","sa-east-1":"South America (Sao Paulo)","us-iso-east-1":"US ISO East","us-iso-west-1":"US ISO West","us-isob-east-1":"US ISOB East (Ohio)"};function $o(e){if(e==null)return"";let t=String(e);return t=t.replace(/=cmd/gi,""),t=t.replace(/[<>]/g,""),t=t.replace(/&(?!(?:apos|quot|gt|lt|amp);)/g,""),t=t.replace(/^[\s@=+-]+/,""),t}function XP(e){let t={};for(let[r,i]of Object.entries(e))r==="region"||r==="description"||i!=null&&(t[r]=typeof i=="object"?i:{value:String(i)});return t}function YP(e){let t=e?.templates;if(!Array.isArray(t))return null;for(let r of t)for(let i of r?.cards||e?.cards||[])for(let n of i?.inputSection?.components||[])if((n.subType==="columnFormIPM"||n.type==="columnFormIPM")&&n.remap?.keyValue)return n.remap.keyValue;return null}function QP(e,t){if(!t)return;let r=i=>typeof i=="string"&&i in t?t[i]:i;for(let i of Object.values(e)){let n=i?.value;if(Array.isArray(n)){for(let a of n)if(!(!a||typeof a!="object"))for(let o of Object.values(a))!o||typeof o!="object"||(o.value&&typeof o.value=="object"?o.value.selectedId=r(o.value.selectedId):o.value=r(o.value))}}}function QW(e){return Object.entries(e).filter(([t,r])=>t!=="region"&&t!=="description"&&r!=null).map(([t,r])=>`${t} (${r&&typeof r=="object"?r.value:r})`).join(", ")}var mg=class e{constructor(t="My Estimate",r=null){this.id=np.randomUUID(),this.name=t,this.partition=r,this.services={},this.groups={},this.usedKeys=new Set,this.templateHints=new Map}addService(t,r,{group:i,templateIdHint:n}={}){this.usedKeys.has(t)&&r?.description&&(t=`${t}:${r.description.replace(/\s+/g,"")}`),this.usedKeys.add(t),n&&this.templateHints.set(t,n);let a=i?this._resolveGroupPath(i).services:this.services;a[t]=r}_resolveGroupPath(t){let r=t.split("/").map(a=>a.trim()).filter(Boolean),i=this.groups,n;for(let a of r)i[a]??={services:{},groups:{}},n=i[a],i=n.groups??={};return n}_allGroupServices(){let t=r=>{let i=[];for(let n of Object.values(r))i.push(...Object.values(n.services||{})),n.groups&&i.push(...t(n.groups));return i};return t(this.groups)}_resolvePartition(){if(this.partition)return this.partition;let t=[...Object.values(this.services),...this._allGroupServices()];for(let r of t)if(r.region){let i=WP(r.region);if(i!=="aws")return i}return"aws"}_validatePartitionConsistency(){let t=[...Object.values(this.services),...this._allGroupServices()],r=new Set;for(let i of t)i.region&&r.add(WP(i.region));if(r.size>1)throw new Error(`Mixed-partition estimates are not supported. Found regions from partitions: ${[...r].join(", ")}`)}async toAWSPayload(){let t=this._resolvePartition();this._validatePartitionConsistency();let r=await GW(t),i=new Map;for(let[,c]of r)if(c.subType==="subServiceSelector"&&Array.isArray(c.templates))for(let u of c.templates)i.set(u,c);let n=async c=>{let u={},l=new Map;for(let[d,p]of Object.entries(c)){let m=d.split(":")[0],g=KW(r,m);if(!g)continue;let _=this.templateHints.get(d);if(g.subType==="subService"&&i.has(m)){let w=i.get(m),P=await pg(r,w.key,t),T=await pg(r,g.key,t),I=p.region||"us-east-1";QP(p,YP(T));let M={calculationComponents:XP(p),serviceCode:T?.serviceCode||g.key,region:I,estimateFor:this._inferTemplateId(T,p,_),version:T?.version||"0.0.1",description:$o(p.description)||null},R=l.get(w.key);if(!R){let J=`${w.key}-${np.randomUUID()}`;R={serviceCode:P?.serviceCode||w.key,region:I,estimateFor:P?.templateId||"template",description:$o(p.description)||null,subServices:[],serviceName:w.name,regionName:fg[I]||I,version:P?.version||"0.0.1",configSummary:""},u[J]=R,l.set(w.key,R)}R.subServices.push(M);continue}u[`${this._payloadKey(g)}-${np.randomUUID()}`]=await this._buildServiceConfig(r,g,p,t,_)}return u},a=async c=>{let u={};for(let[l,d]of Object.entries(c)){let p=$o(l);u[`${p}-${np.randomUUID()}`]={name:p,services:await n(d.services),groups:d.groups?await a(d.groups):{}}}return u},o=await a(this.groups),s={name:$o(this.name)||"My Estimate",services:await n(this.services),groups:o,groupSubtotal:{},support:{},metaData:{locale:"en_US",currency:"USD",createdOn:new Date().toISOString(),source:"calculator-platform"}};return t!=="aws"&&t!=="aws-eusc"&&(s.settings={subTotalModifier:{type:"VOLUME_DISCOUNT",value:0,valuePercentage:0,label:"Discount"},monthlyTimeFrame:12,timeFrame:{length:12,unit:"month"},awsPartition:dg[t].awsPartition}),t==="aws-eusc"&&(s.metaData.currency="EUR"),s}async export(){let t=await this.toAWSPayload(),r=this._resolvePartition(),i=await WW(t,{estimateId:this.id,partition:r});return{estimateId:i.estimateId,shareableUrl:this._buildShareUrl(i.estimateId,r)}}_buildShareUrl(t,r){let i=dg[r]?.shareableBase;if(i)return`${i}${t}`;let n=dg[r]?.contract;return n?`https://calculator.aws/#/estimate?ctrct=${n}&volume_discount=0&id=${t}`:`https://calculator.aws/#/estimate?id=${t}`}_hasTransform(t){return t.key.toLowerCase()==="ec2enhancement"}_payloadKey(t){return this._hasTransform(t)?"ec2Enhancement":t.key}_inferTemplateId(t,r,i){let n=t.templates;if(!Array.isArray(n)||n.length===0)return"template";if(i&&n.some(p=>(typeof p=="string"?p:p&&p.id)===i))return i;if(n.length===1)return n[0].id;let a=Object.keys(r).filter(d=>d!=="region"&&d!=="description");if(a.length===0)return n[0].id;let o=XW(t),s=new Map;for(let d of o)d.templateId&&s.set(d.id,d.templateId);let c=new Map;for(let d of a){let p=s.get(d);p&&c.set(p,(c.get(p)||0)+1)}if(c.size===0)return n[0].id;let u=n[0].id,l=-1;for(let d of n){let p=c.get(d.id)||0;p>l&&(l=p,u=d.id)}return u}async _buildServiceConfig(t,r,i,n,a){let o=i.region||"us-east-1",s=this._payloadKey(r),c="0.0.1",u=s,l="template";try{let d=await pg(t,s,n);d&&(c=d.version||c,u=d.serviceCode||u,l=this._inferTemplateId(d,i,a),QP(i,YP(d)))}catch(d){console.error(`Failed to fetch definition for ${s}: ${d.message}`)}return{serviceCode:u,region:o,estimateFor:l,description:$o(i.description),serviceName:r.name,regionName:fg[o]||o,version:c,calculationComponents:this._hasTransform(r)?YW.transformConfig(i):XP(i),configSummary:QW(i)}}toJSON(){return{id:this.id,name:this.name,partition:this.partition,services:this.services,groups:this.groups,usedKeys:[...this.usedKeys],templateHints:[...this.templateHints]}}static fromJSON(t){let r=new e(t.name,t.partition);return r.id=t.id,r.services=t.services||{},r.groups=t.groups||{},r.usedKeys=new Set(t.usedKeys||[]),r.templateHints=new Map(t.templateHints||[]),r}};ip.exports=mg;ip.exports.sanitize=$o;ip.exports.REGIONS=fg});var Po=b((Tpe,nO)=>{var hg=nc(),eX=process.env.AWS_SAVE_URL||"https://dnd5zrqcec4or.cloudfront.net/Prod/v2/saveAs",_g="https://d1qsjq9pzbk1k6.cloudfront.net",br={aws:{manifestPath:"/manifest/en_US.json",cdnPrefix:"",contract:null,awsPartition:"aws",regions:{}},"aws-iso":{manifestPath:"/aws-iso/manifest/en_US.json",cdnPrefix:"/aws-iso",contract:"5423f8cd3b711c6f899ba4dade31b50c",awsPartition:"aws-iso",regions:{"us-iso-east-1":"US ISO East","us-iso-west-1":"US ISO West"}},"aws-iso-b":{manifestPath:"/aws-iso-b/manifest/en_US.json",cdnPrefix:"/aws-iso-b",contract:"5423f8cd3b711c6f899ba4dade31b50c",awsPartition:"aws-iso-b",regions:{"us-isob-east-1":"US ISOB East (Ohio)"}},"aws-eusc":{manifestPath:"/getAllServiceDetails/aws-eusc/manifest/en_US.json",cdnPrefix:"/getAllServiceDetails/aws-eusc",cdnBase:"https://pricing.calculator.aws.eu",saveUrl:"https://bieyocog1d.execute-api.eusc-de-east-1.amazonaws.eu/Prod/v2/saveAs",readBase:"https://pricing.calculator.aws.eu/getSavedEstimates",shareableBase:"https://pricing.calculator.aws.eu/#/estimate?id=",contract:null,awsPartition:"aws-eusc",regions:{"eusc-de-east-1":"AWS European Sovereign Cloud (Germany)"}}};function tX(e){return e?e.startsWith("us-iso-")?"aws-iso":e.startsWith("us-isob-")?"aws-iso-b":e.startsWith("eusc-")?"aws-eusc":"aws":"aws"}var ap=new Map,vg=new Map,gg=new Map,op=new Map,yg=new Map,rX="/manifest/regionList/publish.json";async function nX(e="aws"){if(e!=="aws")return null;if(op.has(e))return op.get(e);let t=`${_g}${rX}`,r=(async()=>{let i=await fetch(t);return i.ok?i.json():null})();return op.set(e,r),r.catch(()=>op.delete(e)),r}var tO="https://calculator.aws";async function rO(e){if(!e||e.mappingDefinitionVersion!=="PLC_2.0")return null;let t=e.mappingDefinitionURL;if(!t||!t.endsWith("metadata.json"))return null;let r=`${tO}/${t.replace("[currency]","USD")}`;if(gg.has(r))return gg.get(r);let i=(async()=>{try{let n=await fetch(r);if(!n.ok)return null;let a=await n.json();return{valueAttributes:a.valueAttributes||{},primarySelectors:a.primarySelectors||[],secondarySelectors:a.secondarySelectors||[],regionLocations:a.regionAttributes&&Array.isArray(a.regionAttributes.Location)?a.regionAttributes.Location:[]}}catch{return null}})();return gg.set(r,i),i}function eO(e){if(typeof e!="string")return null;let t=e.match(/\(([^)]+)\)/);return t?t[1].trim().toLowerCase():null}async function iX(e,t,r){if(!e||!t||!r)return null;let i=e.mappingDefinitions;if(!Array.isArray(i))return null;let n=i.find(g=>g&&g.mappingDefinitionName===t.mappingDefinitionName);if(!n||n.mappingDefinitionVersion!=="PLC_2.0")return null;let a=n.mappingDefinitionURL;if(!a||!a.endsWith("metadata.json"))return null;let o=a.replace("[currency]","USD").replace(/\/metadata\.json$/,""),{REGIONS:s}=ic(),c=s[r]||r,u=await rO(n);if(!u||!Array.isArray(u.regionLocations)||u.regionLocations.length===0)return null;let l=eO(c);if(!l)return null;let d=u.regionLocations.find(g=>eO(g)===l);if(!d)return null;let p=`${tO}/${o}/${encodeURIComponent(d)}/primary-selector-aggregations.json`;if(yg.has(p))return yg.get(p);let m=(async()=>{try{let g=await fetch(p);if(!g.ok)return null;let _=await g.json();return!_||!Array.isArray(_.aggregations)?null:_.aggregations.map(w=>w&&w.selectors).filter(w=>w&&typeof w=="object")}catch{return null}})();return yg.set(p,m),m}async function aX(e="aws"){if(!br[e])throw new Error(`Unknown partition '${e}'. Valid partitions: ${Object.keys(br).join(", ")}`);if(ap.has(e))return ap.get(e);let t=`${br[e].cdnBase||_g}${br[e].manifestPath}`,r=(async()=>{let i=await fetch(t);if(!i.ok)throw new Error(`Manifest fetch failed: HTTP ${i.status}`);let n=await i.json(),a=new Map;return n.awsServices.forEach(o=>{let s=o.key||o.serviceCode;s&&a.set(s,{...o,key:s})}),console.error(`Loaded ${a.size} services from manifest (partition: ${e})`),a})();return ap.set(e,r),r.catch(()=>{ap.delete(e)}),r}function oX(e,t){let r=t.toLowerCase();for(let[i,n]of e)if(i.toLowerCase()===r)return n;for(let[,i]of e)if(i.name&&i.name.toLowerCase()===r)return i;for(let[,i]of e)if(i.name&&i.name.toLowerCase().includes(r))return i;return null}function sX(e,t,r=10){let i=t.toLowerCase(),n=[];for(let[a,o]of e)if((a.toLowerCase().includes(i)||o.name&&o.name.toLowerCase().includes(i))&&(n.push({key:a,name:o.name}),n.length>=r))break;return n}function cX(e,t){let r=t.split(",").map(a=>a.trim().toLowerCase()).filter(Boolean),i=a=>{let o=[];for(let[s,c]of e){if(c.subType==="subServiceSelector"||c.isActive==="false")continue;(s.toLowerCase().includes(a)||c.name&&c.name.toLowerCase().includes(a)||c.searchKeywords?.some(l=>l.toLowerCase().includes(a)))&&o.push({key:s,name:c.name})}return o};if(r.length===1)return i(r[0]);let n={};for(let a of r)n[a]=i(a);return n}async function uX(e,t,r="aws"){let i=`${r}:${t}`;if(vg.has(i))return vg.get(i);let n=e.get(t);if(!n)return null;let a=n.serviceDefinitionUrlPath||`/data/${t}/en_US.json`,o=br[r]?.cdnPrefix||"",s=br[r]?.cdnBase||_g,c=await fetch(`${s}${o}${a}`);if(!c.ok)throw new Error(`Definition fetch failed for ${t}: HTTP ${c.status}`);let u=await c.json();return vg.set(i,u),u}function bg(e){let t;try{t=JSON.parse(e)}catch{throw new Error("AWS save API returned invalid JSON")}let r;try{r=JSON.parse(t.body)}catch{throw new Error("AWS save API returned invalid body")}if(!r.savedKey)throw new Error(`AWS save API did not return a savedKey: ${JSON.stringify(r).substring(0,200)}`);return r}async function lX(e,{estimateId:t,partition:r}={}){let i=JSON.stringify(e);hg.save.send({bytes:i.length,groupCount:Object.keys(e.groups||{}).length,serviceCount:Object.keys(e.services||{}).length,estimateId:t});let n=br[r]?.saveUrl||eX,a=br[r]?.shareableBase?br[r].shareableBase.replace(/#.*/,""):"https://calculator.aws/",o=await fetch(n,{method:"POST",headers:{"content-type":"application/json",Referer:a},body:i}),s=await o.text();if(!o.ok){hg.save.fail({status:o.status,body:s.substring(0,500),estimateId:t});let l;try{l=bg(s).message||s.substring(0,200)}catch{l=s.substring(0,200)}throw new Error(`AWS save API returned HTTP ${o.status}: ${l}`)}let c=bg(s);hg.save.ok({savedKey:c.savedKey,estimateId:t});let u=br[r]?.shareableBase||"https://calculator.aws/#/estimate?id=";return{estimateId:c.savedKey,shareableUrl:`${u}${c.savedKey}`}}var dX=new Set(["input","numericInput","frequency","fileSize","durationInput","percentInput"]),pX=new Set(["dropdown","numericInput","frequency","fileSize","durationInput","columnFormIPM","dataTransferV2"]),fX='columnFormIPM expects {value: [rowObject]} \u2014 an array of one or more row objects. Each row is keyed by the selectorId (or label where no selectorId is defined; the utilization row uses the literal key "undefined"). Every cell wraps its value as {value: ...}. Example for RDS: {value: [{"Number of Nodes": {value: "1"}, "Instance Type": {value: "db.r6g.xlarge"}, "undefined": {value: {unit: "100", selectedId: "%Utilized/Month"}}, "Deployment Option": {value: "Single-AZ"}, "TermType": {value: "OnDemand"}}]}.';function mX(e){let t=[],r=new Set,i=(a,o)=>{if(!(!a||typeof a!="object")){if(a.id&&(dX.has(a.type)||pX.has(a.subType))){let s=a.subType||a.type;if(!["bodyText","headerText","alert"].includes(s)){if(!(a.isDisabled==="true"||a.isDisabled===!0)){if(!(a.id.includes("WithoutFreeTier")||a.id.includes("_withoutFree")||a.id.endsWith("_MVP"))){let c=a.id+":"+s;if(!r.has(c)){r.add(c);let u={id:a.id,type:s};if(o&&(u.templateId=o),a.label&&(u.label=a.label),a.defaultValue!==void 0&&(u.defaultValue=a.defaultValue),a.placeholder&&a.placeholder!=="Enter the amount"&&a.placeholder!=="Enter amount"&&(u.placeholder=a.placeholder),a.options&&(u.options=a.options.filter(l=>l.id!==void 0||l.label!==void 0).map(l=>{let d={};return l.id!==void 0&&(d.id=l.id),l.label&&(d.label=l.label),d})),a.unit&&(u.unit=a.unit),a.validations&&(a.validations.minValue!=null&&(u.minValue=a.validations.minValue),a.validations.maxValue!=null&&(u.maxValue=a.validations.maxValue),a.validations.allowDecimals!=null&&(u.allowDecimals=a.validations.allowDecimals)),a.defaultValue!==void 0&&(u.defaultValue=a.defaultValue),a.defaultDropDownItem!==void 0&&(u.defaultValue=a.defaultDropDownItem),s==="fileSize"){let l=a.dropDownSize?.map(m=>m.value||m.id)||["gb"],d=a.defaultOption?.size||a.outputSize||"gb",p=a.defaultOption?.frequency||a.outputFrequency||"NA";u.unitFormat=`{value}|{size}|{frequency} \u2014 sizes: [${l.join(", ")}], default: "${d}|${p}"`,u.validSizes=l,u.defaultUnit=`${d}|${p}`}s==="columnFormIPM"&&(u.mappingDefinitionName=a.mappingDefinitionName||null,u.row=(a.row||[]).map(l=>{let d={label:l.label,selectorId:l.selectorId,type:l.type};return l.exportValueAs&&(d.exportValueAs=l.exportValueAs),l.isInstanceType&&(d.isInstanceType=!0),l.mappingValue&&(d.mappingValue=l.mappingValue),d}),u.valueShape=fX),t.push(u)}}}}}for(let s of Object.values(a))Array.isArray(s)?s.forEach(c=>i(c,o)):typeof s=="object"&&i(s,o)}},n=Array.isArray(e.templates)?e.templates:null;if(n&&n.length>0)for(let a of n)i(a,a.id);else i(e,null);return t}async function hX(e,t){let r=e.mappingDefinitions;if(!Array.isArray(r)||r.length===0)return t;let i=new Set;for(let a of t)a.type==="columnFormIPM"&&a.mappingDefinitionName&&i.add(a.mappingDefinitionName);if(i.size===0)return t;let n=new Map;await Promise.all([...i].map(async a=>{let o=r.find(c=>c.mappingDefinitionName===a),s=await rO(o);s&&n.set(a,s)}));for(let a of t)if(a.type==="columnFormIPM"&&a.mappingDefinitionName){let o=n.get(a.mappingDefinitionName);if(o){let s=new Set(a.row.map(u=>u.selectorId).filter(Boolean)),c={};for(let[u,l]of Object.entries(o.valueAttributes))s.has(u)&&(c[u]=l);Object.keys(c).length>0&&(a.selectorValues=c)}}return t}var vX="https://d3knqfixx3sbls.cloudfront.net";async function gX(e,{partition:t}={}){let r=br[t]?.readBase||vX,i=await fetch(`${r}/${e}`);if(!i.ok)throw new Error(`Failed to fetch estimate: HTTP ${i.status}`);return i.json()}function yX(e){let t=[`# ${e.name||"AWS Estimate"}
|
|
55
|
+
`)}var FP=500,BP=1e4,xW=" \u2026[truncated]",wW=new Set(["name","description"]);function SW(){let e=process.env.TRACE_RESULT_TEXT_MAX;if(!e)return FP;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:FP}function rc(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(rc);let t={};for(let[r,i]of Object.entries(e))wW.has(r)&&typeof i=="string"?t[r]=`[redacted: ${i.length} chars]`:t[r]=rc(i);return t}function $W(e){if(!e||typeof e!="object")return e;let t=e;if(typeof e.services=="string")try{t={...e,services:JSON.stringify(rc(JSON.parse(e.services)))}}catch{}return rc(t)}function PW(e){if(typeof e!="string"||e.length===0)return e;try{return JSON.stringify(rc(JSON.parse(e)))}catch{return e}}function OW(e){if(!e)return"";let t=(e.content||[]).find(r=>r&&r.type==="text");return t&&t.text||""}function VP(e,t){if(typeof e!="string")return"";let r=t??SW();return e.length<=r?e:e.slice(0,r)+xW}function jW(e){if(!e||typeof e!="object")return;let t=e.estimate_id;return typeof t=="string"&&t.length>0?t:void 0}function IW(e){if(typeof e!="string"||e.length===0)return;let t;try{t=JSON.parse(e)}catch{return}if(!t||typeof t!="object")return;let r=t.estimate_id;return typeof r=="string"&&r.length>0?r:void 0}function TW(e,t){return async function(i,...n){if(!ug())return t(i,...n);let a=Date.now(),o=jW(i);try{tp("tool.call",{name:e,args:$W(i),estimateId:o,mcpSessionId:cg()})}catch{}let s,c;try{s=await t(i,...n)}catch(l){c=l}let u=Date.now()-a;if(c){try{let l=c.stack||c.message||String(c);tp("tool.result",{name:e,isError:!0,resultText:VP(l,BP),resultLength:l.length,durationMs:u,estimateId:o,mcpSessionId:cg()})}catch{}throw c}try{let l=OW(s),d=PW(l),p=!!(s&&s.isError),m=o??IW(l);tp("tool.result",{name:e,isError:p,resultText:VP(d,p?BP:void 0),resultLength:l.length,durationMs:u,estimateId:m,mcpSessionId:cg()})}catch{}return s}}HP.exports={emit:tp,traceTool:TW,isTraceEnabled:ug}});var nc=b((Ope,JP)=>{var{emit:ai}=lg(),{currentSessionId:EW}=ep();function oi(e){return{...e,mcpSessionId:EW()}}var kW={send:e=>ai("save.send",oi(e)),ok:e=>ai("save.ok",oi(e)),fail:e=>ai("save.fail",oi(e))};function CW(e){ai("lint",oi(e))}var RW={needsGrounding:e=>ai("build_estimate.needs_grounding",oi(e))},MW={redirectToParent:e=>ai("get_service_fields.redirect_to_parent",oi(e))},DW={unverified:e=>ai("template_hint.unverified",oi(e))},AW={start:e=>ai("session.start",oi(e))},ZW={tenancyRemap:e=>ai("ec2.tenancy_remap",oi(e))};JP.exports={save:kW,lint:CW,buildEstimate:RW,getServiceFields:MW,templateHint:DW,session:AW,ec2:ZW}});var KP=b((jpe,GP)=>{var zW=nc(),NW=/^(?:ri|reserved|convertible|instanceSavings|computeSavings|ondemand)(?:(\d)yr)?(?:(No|Partial|All)Upfront)?$/i,qW={ri:"reserved",reserved:"reserved",standard:"reserved",convertible:"convertible",instancesavings:"instanceSavings",computesavings:"computeSavings",ondemand:"ondemand"},UW={ondemand:"on-demand",reserved:"standard",standard:"standard",convertible:"convertible",instanceSavings:"instance-savings",computeSavings:"compute-savings",spot:"spot"},LW={No:"None",Partial:"Partial",All:"All"};function FW(e){if(typeof e=="string")return BW(e);let t=e.value?.model?e.value:e;return VW(t.model||"ondemand",t.term||"1yr",t.upfrontPayment||t.options||"None")}function BW(e){let t=e.match(NW);if(t){let o=e.match(/^[a-zA-Z]+/)[0].toLowerCase();return{model:qW[o]||o,term:t[1]?`${t[1]}yr`:"1yr",upfrontPayment:t[2]?LW[t[2]]||t[2]:"None"}}let r=e.toLowerCase(),i="ondemand";/instance.savings/i.test(r)?i="instanceSavings":/compute.savings/i.test(r)?i="computeSavings":r.includes("convertible")?i="convertible":r.includes("reserved")||/ ri\b/.test(r)?i="reserved":r.includes("spot")&&(i="spot");let n=r.match(/(\d)\s*(?:yr|year)/),a="None";return r.includes("all upfront")?a="All":r.includes("partial")&&(a="Partial"),{model:i,term:n?`${n[1]}yr`:"1yr",upfrontPayment:a}}function VW(e,t,r){return r=r.replace(/Upfront$/i,""),r==="No"&&(r="None"),{model:e,term:t,upfrontPayment:r}}function HW(e,t,r){let{model:i,term:n,upfrontPayment:a}=e,o=n==="3yr"?"3 Year":"1 Year";if(!r||r==="shared"){let c=i;if(i==="reserved"&&(i="instanceSavings"),i==="convertible"&&(i="computeSavings"),c!==i)try{zW.ec2.tenancyRemap({asked:c,got:i,tenancy:r||"shared"})}catch{}}let s=UW[i]||"on-demand";return i==="ondemand"?{value:{selectedOption:"on-demand",term:o,utilizationValue:t||"100",utilizationUnit:"%Utilized/Month"}}:{value:{selectedOption:s,term:o,upfrontPayment:a,model:i}}}var rp={gp3:"Storage General Purpose gp3 GB Mo",gp2:"Storage General Purpose GB Mo",io1:"Storage Provisioned IOPS GB Mo",io2:"Storage Provisioned IOPS io2 GB month",st1:"Storage Throughput Optimized HDD GB Mo",sc1:"Storage Cold HDD GB Mo",magnetic:"Storage Magnetic GB Mo"};function JW(e){let t=e.tenancy||"shared",r=FW(e.pricingStrategy||"ondemand"),i=e.pricingStrategy&&typeof e.pricingStrategy=="object"?e.pricingStrategy:null,n=i?.value?.utilizationValue??i?.utilizationValue,a=e.utilization??n,o=a!=null?String(a):"100",s=e.workload!==void 0?e.workload:e.quantity,c;s&&typeof s=="object"&&"value"in s?c=s:s&&typeof s=="object"?c={value:{workloadType:"consistent",data:"1"}}:c={value:{workloadType:"consistent",data:String(s||"1")}};let u=e.storageType||null;u||(e.gp3Iops||e.gp3Throughput?u="Storage General Purpose gp3 GB Mo":e.iops?u="Storage Provisioned IOPS GB Mo":e.iops2||e.storageAmountIo2?u="Storage Provisioned IOPS io2 GB month":e.storageAmount&&(u="Storage General Purpose gp3 GB Mo")),u&&rp[u.toLowerCase()]&&(u=rp[u.toLowerCase()]);let l=e.storageTypeDH||null;!l&&t==="host"&&(e.gp3IopsDH||e.gp3ThroughputDH||e.storageAmountDH?l="Storage General Purpose gp3 GB Mo":u&&(l=u)),l&&rp[l.toLowerCase()]&&(l=rp[l.toLowerCase()]);let d=e.storageAmountDH||(t==="host"?e.storageAmount:null),p=e.gp3IopsDH||(t==="host"?e.gp3Iops:null),m=e.gp3ThroughputDH||(t==="host"?e.gp3Throughput:null),g=e.iopsDH||(t==="host"?e.iops:null),_=e.iops2DH||(t==="host"?e.iops2:null);return{tenancy:{value:t},selectedOS:{value:e.selectedOS||"linux"},workloadSelection:{value:"consistent"},instanceType:{value:e.instanceType||""},workload:c,pricingStrategy:HW(r,o,t),ec2AdvancedPricingMetrics:{value:1},detailedMonitoringCheckbox:{value:!1},...u&&t!=="host"&&{storageType:{value:u}},...e.storageAmount&&t!=="host"&&{storageAmount:typeof e.storageAmount=="object"?e.storageAmount:{value:String(e.storageAmount),unit:"gb|NA"}},...e.snapshotFrequency!=null&&{snapshotFrequency:{value:String(e.snapshotFrequency)}},...e.gp3Iops&&t!=="host"&&{gp3Iops:typeof e.gp3Iops=="object"?e.gp3Iops:{value:String(e.gp3Iops)}},...e.gp3Throughput&&t!=="host"&&{gp3Throughput:typeof e.gp3Throughput=="object"?e.gp3Throughput:{value:String(e.gp3Throughput),unit:"mbps"}},...e.iops&&t!=="host"&&{iops:typeof e.iops=="object"?e.iops:{value:String(e.iops)}},...e.iops2&&t!=="host"&&{iops2:typeof e.iops2=="object"?e.iops2:{value:String(e.iops2)}},...e.storageAmountIo2&&t!=="host"&&{storageAmountIo2:typeof e.storageAmountIo2=="object"?e.storageAmountIo2:{value:String(e.storageAmountIo2),unit:"gb|NA"}},...l&&{storageTypeDH:{value:l}},...d&&{storageAmountDH:typeof d=="object"?d:{value:String(d),unit:"gb|NA"}},...p&&{gp3IopsDH:typeof p=="object"?p:{value:String(p)}},...m&&{gp3ThroughputDH:typeof m=="object"?m:{value:String(m),unit:"mbps"}},...g&&{iopsDH:typeof g=="object"?g:{value:String(g)}},..._&&{iops2DH:typeof _=="object"?_:{value:String(_)}},...e.dataTransferForEC2&&{dataTransferForEC2:e.dataTransferForEC2}}}GP.exports={transformConfig:JW}});var ic=b((Ipe,ip)=>{var np=require("crypto"),{PARTITIONS:dg,resolvePartition:WP,loadManifest:GW,findService:KW,fetchServiceDefinition:pg,saveEstimate:WW,extractInputFields:XW}=Po(),YW=KP(),fg={"us-east-1":"US East (N. Virginia)","us-east-2":"US East (Ohio)","us-west-1":"US West (N. California)","us-west-2":"US West (Oregon)","af-south-1":"Africa (Cape Town)","ap-east-1":"Asia Pacific (Hong Kong)","ap-south-1":"Asia Pacific (Mumbai)","ap-south-2":"Asia Pacific (Hyderabad)","ap-southeast-1":"Asia Pacific (Singapore)","ap-southeast-2":"Asia Pacific (Sydney)","ap-southeast-3":"Asia Pacific (Jakarta)","ap-southeast-4":"Asia Pacific (Melbourne)","ap-northeast-1":"Asia Pacific (Tokyo)","ap-northeast-2":"Asia Pacific (Seoul)","ap-northeast-3":"Asia Pacific (Osaka)","ca-central-1":"Canada (Central)","ca-west-1":"Canada West (Calgary)","eu-central-1":"Europe (Frankfurt)","eu-central-2":"Europe (Zurich)","eu-west-1":"Europe (Ireland)","eu-west-2":"Europe (London)","eu-west-3":"Europe (Paris)","eu-south-1":"Europe (Milan)","eu-south-2":"Europe (Spain)","eu-north-1":"Europe (Stockholm)","il-central-1":"Israel (Tel Aviv)","me-south-1":"Middle East (Bahrain)","me-central-1":"Middle East (UAE)","sa-east-1":"South America (Sao Paulo)","us-iso-east-1":"US ISO East","us-iso-west-1":"US ISO West","us-isob-east-1":"US ISOB East (Ohio)"};function $o(e){if(e==null)return"";let t=String(e);return t=t.replace(/=cmd/gi,""),t=t.replace(/[<>]/g,""),t=t.replace(/&(?!(?:apos|quot|gt|lt|amp);)/g,""),t=t.replace(/^[\s@=+-]+/,""),t}function XP(e){let t={};for(let[r,i]of Object.entries(e))r==="region"||r==="description"||i!=null&&(t[r]=typeof i=="object"?i:{value:String(i)});return t}function YP(e){let t=e?.templates;if(!Array.isArray(t))return null;for(let r of t)for(let i of r?.cards||e?.cards||[])for(let n of i?.inputSection?.components||[])if((n.subType==="columnFormIPM"||n.type==="columnFormIPM")&&n.remap?.keyValue)return n.remap.keyValue;return null}function QP(e,t){if(!t)return;let r=i=>typeof i=="string"&&i in t?t[i]:i;for(let i of Object.values(e)){let n=i?.value;if(Array.isArray(n)){for(let a of n)if(!(!a||typeof a!="object"))for(let o of Object.values(a))!o||typeof o!="object"||(o.value&&typeof o.value=="object"?o.value.selectedId=r(o.value.selectedId):o.value=r(o.value))}}}function QW(e){return Object.entries(e).filter(([t,r])=>t!=="region"&&t!=="description"&&r!=null).map(([t,r])=>`${t} (${r&&typeof r=="object"?r.value:r})`).join(", ")}var mg=class e{constructor(t="My Estimate",r=null){this.id=np.randomUUID(),this.name=t,this.partition=r,this.services={},this.groups={},this.usedKeys=new Set,this.templateHints=new Map}addService(t,r,{group:i,templateIdHint:n}={}){this.usedKeys.has(t)&&r?.description&&(t=`${t}:${r.description.replace(/\s+/g,"")}`),this.usedKeys.add(t),n&&this.templateHints.set(t,n);let a=i?this._resolveGroupPath(i).services:this.services;a[t]=r}_resolveGroupPath(t){let r=t.split("/").map(a=>a.trim()).filter(Boolean),i=this.groups,n;for(let a of r)i[a]??={services:{},groups:{}},n=i[a],i=n.groups??={};return n}_allGroupServices(){let t=r=>{let i=[];for(let n of Object.values(r))i.push(...Object.values(n.services||{})),n.groups&&i.push(...t(n.groups));return i};return t(this.groups)}_resolvePartition(){if(this.partition)return this.partition;let t=[...Object.values(this.services),...this._allGroupServices()];for(let r of t)if(r.region){let i=WP(r.region);if(i!=="aws")return i}return"aws"}_validatePartitionConsistency(){let t=[...Object.values(this.services),...this._allGroupServices()],r=new Set;for(let i of t)i.region&&r.add(WP(i.region));if(r.size>1)throw new Error(`Mixed-partition estimates are not supported. Found regions from partitions: ${[...r].join(", ")}`)}async toAWSPayload(){let t=this._resolvePartition();this._validatePartitionConsistency();let r=await GW(t),i=new Map;for(let[,c]of r)if(c.subType==="subServiceSelector"&&Array.isArray(c.templates))for(let u of c.templates)i.set(u,c);let n=async c=>{let u={},l=new Map;for(let[d,p]of Object.entries(c)){let m=d.split(":")[0],g=KW(r,m);if(!g)continue;let _=this.templateHints.get(d);if(g.subType==="subService"&&i.has(m)){let w=i.get(m),P=await pg(r,w.key,t),T=await pg(r,g.key,t),I=p.region||"us-east-1";QP(p,YP(T));let M={calculationComponents:XP(p),serviceCode:T?.serviceCode||g.key,region:I,estimateFor:this._inferTemplateId(T,p,_),version:T?.version||"0.0.1",description:$o(p.description)||null},R=l.get(w.key);if(!R){let J=`${w.key}-${np.randomUUID()}`;R={serviceCode:P?.serviceCode||w.key,region:I,estimateFor:P?.templateId||"template",description:$o(p.description)||null,subServices:[],serviceName:w.name,regionName:fg[I]||I,version:P?.version||"0.0.1",configSummary:""},u[J]=R,l.set(w.key,R)}R.subServices.push(M);continue}u[`${this._payloadKey(g)}-${np.randomUUID()}`]=await this._buildServiceConfig(r,g,p,t,_)}return u},a=async c=>{let u={};for(let[l,d]of Object.entries(c)){let p=$o(l);u[`${p}-${np.randomUUID()}`]={name:p,services:await n(d.services),groups:d.groups?await a(d.groups):{}}}return u},o=await a(this.groups),s={name:$o(this.name)||"My Estimate",services:await n(this.services),groups:o,groupSubtotal:{},support:{},metaData:{locale:"en_US",currency:"USD",createdOn:new Date().toISOString(),source:"calculator-platform"}};return t!=="aws"&&t!=="aws-eusc"&&(s.settings={subTotalModifier:{type:"VOLUME_DISCOUNT",value:0,valuePercentage:0,label:"Discount"},monthlyTimeFrame:12,timeFrame:{length:12,unit:"month"},awsPartition:dg[t].awsPartition}),t==="aws-eusc"&&(s.metaData.currency="EUR"),s}async export(){let t=await this.toAWSPayload(),r=this._resolvePartition(),i=await WW(t,{estimateId:this.id,partition:r});return{estimateId:i.estimateId,shareableUrl:this._buildShareUrl(i.estimateId,r)}}_buildShareUrl(t,r){let i=dg[r]?.shareableBase;if(i)return`${i}${t}`;let n=dg[r]?.contract;return n?`https://calculator.aws/#/estimate?ctrct=${n}&volume_discount=0&id=${t}`:`https://calculator.aws/#/estimate?id=${t}`}_hasTransform(t){return t.key.toLowerCase()==="ec2enhancement"}_payloadKey(t){return this._hasTransform(t)?"ec2Enhancement":t.key}_inferTemplateId(t,r,i){let n=t.templates;if(!Array.isArray(n)||n.length===0)return"template";if(i&&n.some(p=>(typeof p=="string"?p:p&&p.id)===i))return i;if(n.length===1)return n[0].id;let a=Object.keys(r).filter(d=>d!=="region"&&d!=="description");if(a.length===0)return n[0].id;let o=XW(t),s=new Map;for(let d of o)d.templateId&&s.set(d.id,d.templateId);let c=new Map;for(let d of a){let p=s.get(d);p&&c.set(p,(c.get(p)||0)+1)}if(c.size===0)return n[0].id;let u=n[0].id,l=-1;for(let d of n){let p=c.get(d.id)||0;p>l&&(l=p,u=d.id)}return u}async _buildServiceConfig(t,r,i,n,a){let o=i.region||"us-east-1",s=this._payloadKey(r),c="0.0.1",u=s,l="template";try{let d=await pg(t,s,n);d&&(c=d.version||c,u=d.serviceCode||u,l=this._inferTemplateId(d,i,a),QP(i,YP(d)))}catch(d){console.error(`Failed to fetch definition for ${s}: ${d.message}`)}return{serviceCode:u,region:o,estimateFor:l,description:$o(i.description),serviceName:r.name,regionName:fg[o]||o,version:c,calculationComponents:this._hasTransform(r)?YW.transformConfig(i):XP(i),configSummary:QW(i)}}toJSON(){return{id:this.id,name:this.name,partition:this.partition,services:this.services,groups:this.groups,usedKeys:[...this.usedKeys],templateHints:[...this.templateHints]}}static fromJSON(t){let r=new e(t.name,t.partition);return r.id=t.id,r.services=t.services||{},r.groups=t.groups||{},r.usedKeys=new Set(t.usedKeys||[]),r.templateHints=new Map(t.templateHints||[]),r}};ip.exports=mg;ip.exports.sanitize=$o;ip.exports.REGIONS=fg});var Po=b((Tpe,nO)=>{var hg=nc(),eX=process.env.AWS_SAVE_URL||"https://dnd5zrqcec4or.cloudfront.net/Prod/v2/saveAs",_g="https://d1qsjq9pzbk1k6.cloudfront.net",br={aws:{manifestPath:"/manifest/en_US.json",cdnPrefix:"",contract:null,awsPartition:"aws",regions:{}},"aws-iso":{manifestPath:"/aws-iso/manifest/en_US.json",cdnPrefix:"/aws-iso",contract:"5423f8cd3b711c6f899ba4dade31b50c",awsPartition:"aws-iso",regions:{"us-iso-east-1":"US ISO East","us-iso-west-1":"US ISO West"}},"aws-iso-b":{manifestPath:"/aws-iso-b/manifest/en_US.json",cdnPrefix:"/aws-iso-b",contract:"5423f8cd3b711c6f899ba4dade31b50c",awsPartition:"aws-iso-b",regions:{"us-isob-east-1":"US ISOB East (Ohio)"}},"aws-eusc":{manifestPath:"/getAllServiceDetails/aws-eusc/manifest/en_US.json",cdnPrefix:"/getAllServiceDetails/aws-eusc",cdnBase:"https://pricing.calculator.aws.eu",saveUrl:"https://bieyocog1d.execute-api.eusc-de-east-1.amazonaws.eu/Prod/v2/saveAs",readBase:"https://pricing.calculator.aws.eu/getSavedEstimates",shareableBase:"https://pricing.calculator.aws.eu/#/estimate?id=",contract:null,awsPartition:"aws-eusc",regions:{"eusc-de-east-1":"AWS European Sovereign Cloud (Germany)"}}};function tX(e){return e?e.startsWith("us-iso-")?"aws-iso":e.startsWith("us-isob-")?"aws-iso-b":e.startsWith("eusc-")?"aws-eusc":"aws":"aws"}var ap=new Map,vg=new Map,gg=new Map,op=new Map,yg=new Map,rX="/manifest/regionList/publish.json";async function nX(e="aws"){if(e!=="aws")return null;if(op.has(e))return op.get(e);let t=`${_g}${rX}`,r=(async()=>{let i=await fetch(t);return i.ok?i.json():null})();return op.set(e,r),r.catch(()=>op.delete(e)),r}var tO="https://calculator.aws";async function rO(e){if(!e||e.mappingDefinitionVersion!=="PLC_2.0")return null;let t=e.mappingDefinitionURL;if(!t||!t.endsWith("metadata.json"))return null;let r=`${tO}/${t.replace("[currency]","USD")}`;if(gg.has(r))return gg.get(r);let i=(async()=>{try{let n=await fetch(r);if(!n.ok)return null;let a=await n.json();return{valueAttributes:a.valueAttributes||{},primarySelectors:a.primarySelectors||[],secondarySelectors:a.secondarySelectors||[],regionLocations:a.regionAttributes&&Array.isArray(a.regionAttributes.Location)?a.regionAttributes.Location:[]}}catch{return null}})();return gg.set(r,i),i}function eO(e){if(typeof e!="string")return null;let t=e.match(/\(([^)]+)\)/);return t?t[1].trim().toLowerCase():null}async function iX(e,t,r){if(!e||!t||!r)return null;let i=e.mappingDefinitions;if(!Array.isArray(i))return null;let n=i.find(g=>g&&g.mappingDefinitionName===t.mappingDefinitionName);if(!n||n.mappingDefinitionVersion!=="PLC_2.0")return null;let a=n.mappingDefinitionURL;if(!a||!a.endsWith("metadata.json"))return null;let o=a.replace("[currency]","USD").replace(/\/metadata\.json$/,""),{REGIONS:s}=ic(),c=s[r]||r,u=await rO(n);if(!u||!Array.isArray(u.regionLocations)||u.regionLocations.length===0)return null;let l=eO(c);if(!l)return null;let d=u.regionLocations.find(g=>eO(g)===l);if(!d)return null;let p=`${tO}/${o}/${encodeURIComponent(d)}/primary-selector-aggregations.json`;if(yg.has(p))return yg.get(p);let m=(async()=>{try{let g=await fetch(p);if(!g.ok)return null;let _=await g.json();return!_||!Array.isArray(_.aggregations)?null:_.aggregations.map(w=>w&&w.selectors).filter(w=>w&&typeof w=="object")}catch{return null}})();return yg.set(p,m),m}async function aX(e="aws"){if(!br[e])throw new Error(`Unknown partition '${e}'. Valid partitions: ${Object.keys(br).join(", ")}`);if(ap.has(e))return ap.get(e);let t=`${br[e].cdnBase||_g}${br[e].manifestPath}`,r=(async()=>{let i=await fetch(t);if(!i.ok)throw new Error(`Manifest fetch failed: HTTP ${i.status}`);let n=await i.json(),a=new Map;return n.awsServices.forEach(o=>{let s=o.key||o.serviceCode;s&&a.set(s,{...o,key:s})}),console.error(`Loaded ${a.size} services from manifest (partition: ${e})`),a})();return ap.set(e,r),r.catch(()=>{ap.delete(e)}),r}function oX(e,t){let r=t.toLowerCase();for(let[i,n]of e)if(i.toLowerCase()===r)return n;for(let[,i]of e)if(i.name&&i.name.toLowerCase()===r)return i;for(let[,i]of e)if(i.name&&i.name.toLowerCase().includes(r))return i;return null}function sX(e,t,r=10){let i=t.toLowerCase(),n=[];for(let[a,o]of e)if((a.toLowerCase().includes(i)||o.name&&o.name.toLowerCase().includes(i))&&(n.push({key:a,name:o.name}),n.length>=r))break;return n}function cX(e,t){let r=t.split(",").map(a=>a.trim().toLowerCase()).filter(Boolean),i=a=>{let o=[];for(let[s,c]of e){if(c.subType==="subServiceSelector"||c.isActive==="false")continue;(s.toLowerCase().includes(a)||c.name&&c.name.toLowerCase().includes(a)||c.searchKeywords?.some(l=>l.toLowerCase().includes(a)))&&o.push({key:s,name:c.name})}return o};if(r.length===1)return i(r[0]);let n={};for(let a of r)n[a]=i(a);return n}async function uX(e,t,r="aws"){let i=`${r}:${t}`;if(vg.has(i))return vg.get(i);let n=e.get(t);if(!n)return null;let a=n.serviceDefinitionUrlPath||`/data/${t}/en_US.json`,o=br[r]?.cdnPrefix||"",s=br[r]?.cdnBase||_g,c=await fetch(`${s}${o}${a}`);if(!c.ok)throw new Error(`Definition fetch failed for ${t}: HTTP ${c.status}`);let u=await c.json();return vg.set(i,u),u}function bg(e){let t;try{t=JSON.parse(e)}catch{throw new Error("AWS save API returned invalid JSON")}let r;try{r=JSON.parse(t.body)}catch{throw new Error("AWS save API returned invalid body")}if(!r.savedKey)throw new Error(`AWS save API did not return a savedKey: ${JSON.stringify(r).substring(0,200)}`);return r}async function lX(e,{estimateId:t,partition:r}={}){let i=JSON.stringify(e);hg.save.send({bytes:i.length,groupCount:Object.keys(e.groups||{}).length,serviceCount:Object.keys(e.services||{}).length,estimateId:t});let n=br[r]?.saveUrl||eX,a=br[r]?.shareableBase?br[r].shareableBase.replace(/#.*/,""):"https://calculator.aws/",o=await fetch(n,{method:"POST",headers:{"content-type":"application/json",Referer:a},body:i}),s=await o.text();if(!o.ok){hg.save.fail({status:o.status,body:s.substring(0,500),estimateId:t});let l;try{l=bg(s).message||s.substring(0,200)}catch{l=s.substring(0,200)}throw new Error(`AWS save API returned HTTP ${o.status}: ${l}`)}let c=bg(s);hg.save.ok({savedKey:c.savedKey,estimateId:t});let u=br[r]?.shareableBase||"https://calculator.aws/#/estimate?id=";return{estimateId:c.savedKey,shareableUrl:`${u}${c.savedKey}`}}var dX=new Set(["input","numericInput","frequency","fileSize","durationInput","percentInput"]),pX=new Set(["dropdown","numericInput","frequency","fileSize","durationInput","columnFormIPM","dataTransferV2"]),fX='columnFormIPM expects {value: [rowObject]} \u2014 an array of one or more row objects. Each row is keyed by the selectorId (or label where no selectorId is defined; the utilization row uses the literal key "undefined"). Every cell wraps its value as {value: ...}. Example for RDS: {value: [{"Number of Nodes": {value: "1"}, "Instance Type": {value: "db.r6g.xlarge"}, "undefined": {value: {unit: "100", selectedId: "%Utilized/Month"}}, "Deployment Option": {value: "Single-AZ"}, "TermType": {value: "OnDemand"}}]}.';function mX(e){let t=[],r=new Set,i=(a,o)=>{if(!(!a||typeof a!="object")){if(a.id&&(dX.has(a.type)||pX.has(a.subType))){let s=a.subType||a.type;if(!["bodyText","headerText","alert"].includes(s)){if(!(a.isDisabled==="true"||a.isDisabled===!0)){if(!(a.id.includes("WithoutFreeTier")||a.id.includes("_withoutFree")||a.id.endsWith("_MVP"))){let c=a.id+":"+s;if(!r.has(c)){r.add(c);let u={id:a.id,type:s};if(o&&(u.templateId=o),a.label&&(u.label=a.label),a.defaultValue!==void 0&&(u.defaultValue=a.defaultValue),a.placeholder&&a.placeholder!=="Enter the amount"&&a.placeholder!=="Enter amount"&&(u.placeholder=a.placeholder),a.options&&(u.options=a.options.filter(l=>l.id!==void 0||l.label!==void 0).map(l=>{let d={};return l.id!==void 0&&(d.id=l.id),l.label&&(d.label=l.label),l.value!==void 0&&(d.value=l.value),d})),a.unit&&(u.unit=a.unit),a.validations&&(a.validations.minValue!=null&&(u.minValue=a.validations.minValue),a.validations.maxValue!=null&&(u.maxValue=a.validations.maxValue),a.validations.allowDecimals!=null&&(u.allowDecimals=a.validations.allowDecimals)),a.defaultValue!==void 0&&(u.defaultValue=a.defaultValue),a.defaultDropDownItem!==void 0&&(u.defaultValue=a.defaultDropDownItem),s==="fileSize"){let l=a.dropDownSize?.map(m=>m.value||m.id)||["gb"],d=a.defaultOption?.size||a.outputSize||"gb",p=a.defaultOption?.frequency||a.outputFrequency||"NA";u.unitFormat=`{value}|{size}|{frequency} \u2014 sizes: [${l.join(", ")}], default: "${d}|${p}"`,u.validSizes=l,u.defaultUnit=`${d}|${p}`}s==="columnFormIPM"&&(u.mappingDefinitionName=a.mappingDefinitionName||null,u.row=(a.row||[]).map(l=>{let d={label:l.label,selectorId:l.selectorId,type:l.type};return l.exportValueAs&&(d.exportValueAs=l.exportValueAs),l.isInstanceType&&(d.isInstanceType=!0),l.mappingValue&&(d.mappingValue=l.mappingValue),d}),u.valueShape=fX),t.push(u)}}}}}for(let s of Object.values(a))Array.isArray(s)?s.forEach(c=>i(c,o)):typeof s=="object"&&i(s,o)}},n=Array.isArray(e.templates)?e.templates:null;if(n&&n.length>0)for(let a of n)i(a,a.id);else i(e,null);return t}async function hX(e,t){let r=e.mappingDefinitions;if(!Array.isArray(r)||r.length===0)return t;let i=new Set;for(let a of t)a.type==="columnFormIPM"&&a.mappingDefinitionName&&i.add(a.mappingDefinitionName);if(i.size===0)return t;let n=new Map;await Promise.all([...i].map(async a=>{let o=r.find(c=>c.mappingDefinitionName===a),s=await rO(o);s&&n.set(a,s)}));for(let a of t)if(a.type==="columnFormIPM"&&a.mappingDefinitionName){let o=n.get(a.mappingDefinitionName);if(o){let s=new Set(a.row.map(u=>u.selectorId).filter(Boolean)),c={};for(let[u,l]of Object.entries(o.valueAttributes))s.has(u)&&(c[u]=l);Object.keys(c).length>0&&(a.selectorValues=c)}}return t}var vX="https://d3knqfixx3sbls.cloudfront.net";async function gX(e,{partition:t}={}){let r=br[t]?.readBase||vX,i=await fetch(`${r}/${e}`);if(!i.ok)throw new Error(`Failed to fetch estimate: HTTP ${i.status}`);return i.json()}function yX(e){let t=[`# ${e.name||"AWS Estimate"}
|
|
56
56
|
`],r=e.totalCost;r&&t.push(`**Total Monthly Cost:** $${r.monthly?.toFixed(2)||"0.00"}${r.upfront?` | **Upfront:** $${r.upfront.toFixed(2)}`:""}
|
|
57
57
|
`);let i=(n,a="")=>{for(let[,o]of Object.entries(n)){let s=o.serviceCost?.monthly!=null?` \u2014 $${o.serviceCost.monthly.toFixed(2)}/mo`:"";t.push(`${a}- **${o.serviceName}** (${o.regionName})${s}`),o.description&&t.push(`${a} - Description: ${o.description}`),o.configSummary&&t.push(`${a} - Config: ${o.configSummary}`)}};if(e.services&&Object.keys(e.services).length>0&&(t.push(`## Services
|
|
58
58
|
`),i(e.services)),e.groups)for(let[,n]of Object.entries(e.groups))t.push(`
|
|
@@ -125,7 +125,7 @@ If any service fails validation, returns a structured needs_field_grounding redi
|
|
|
125
125
|
|
|
126
126
|
The estimate is kept in the in-memory store, so the returned aws_estimate_id can be passed to add_service/export_estimate to extend it.
|
|
127
127
|
|
|
128
|
-
For large estimates (20+ services / line items), prefer create_estimate + multiple add_service calls + export_estimate. This avoids token-generation limits and allows incremental building.`+Tg;Un.IMPORT_ESTIMATE="Download an existing AWS Pricing Calculator estimate by URL or ID. Returns the estimate in JSON (raw, for modifications like region swaps) or Markdown (for LLM consumption, summaries, funding recommendations). Use JSON format when you need to modify and re-export the estimate; use Markdown format when summarizing or presenting costs to the user."});var ZO=b((Upe,tQ)=>{tQ.exports={name:"sample-aws-pricing-calculator-mcp",version:"1.2.5",bin:"dist/mcp-server.js",files:["dist/mcp-server.js","catalog/schema.json","catalog/services/*.json"],description:"MCP server for creating, reading, updating AWS Pricing Calculator estimates through natural language.",license:"MIT-0",main:"mcp-server.js",scripts:{test:"npm run validate-catalog && SKIP_NETWORK=1 node --test test/*.test.js","test:roundtrip":"node --test test/catalog-roundtrip.test.js",mcp:"node mcp-server.js","validate-catalog":"node scripts/validate-catalog.js","validate-catalog:cost":"node scripts/validate-verified-catalog.js",build:"esbuild mcp-server.js --bundle --platform=node --outfile=dist/mcp-server.js --format=cjs --minify --external:@aws-sdk/client-dynamodb --external:@aws-sdk/lib-dynamodb && node scripts/emit-bundle-contract.js && rm -f dist/aws-calculator.zip && zip dist/aws-calculator.zip mcp-server.js lib/aws-client.js lib/estimate-builder.js lib/ec2.js package.json"},dependencies:{"@modelcontextprotocol/sdk":"1.29.0",express:"5.2.1"},peerDependencies:{"@aws-sdk/client-dynamodb":">=3.700.0","@aws-sdk/lib-dynamodb":">=3.700.0"},peerDependenciesMeta:{"@aws-sdk/client-dynamodb":{optional:!0},"@aws-sdk/lib-dynamodb":{optional:!0}},devDependencies:{"@aws-sdk/client-dynamodb":"3.1046.0","@aws-sdk/lib-dynamodb":"3.1046.0",ajv:"8.20.0","ajv-formats":"3.0.1",esbuild:"0.28.1",playwright:"1.60.0"}}});var YO=b((Lpe,XO)=>{"use strict";var rQ=Object.create,vp=Object.defineProperty,nQ=Object.getOwnPropertyDescriptor,iQ=Object.getOwnPropertyNames,aQ=Object.getPrototypeOf,oQ=Object.prototype.hasOwnProperty,sQ=(e,t)=>{for(var r in t)vp(e,r,{get:t[r],enumerable:!0})},qO=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of iQ(t))!oQ.call(e,n)&&n!==r&&vp(e,n,{get:()=>t[n],enumerable:!(i=nQ(t,n))||i.enumerable});return e},cQ=(e,t,r)=>(r=e!=null?rQ(aQ(e)):{},qO(t||!e||!e.__esModule?vp(r,"default",{value:e,enumerable:!0}):r,e)),uQ=e=>qO(vp({},"__esModule",{value:!0}),e),UO={};sQ(UO,{RequestError:()=>Zi,createAdaptorServer:()=>WO,getRequestListener:()=>KO,serve:()=>jQ});XO.exports=uQ(UO);var lQ=require("http"),Cg=require("http2"),Eg=require("http2"),zO=require("stream"),Zi=class extends Error{constructor(e,t){super(e,t),this.name="RequestError"}},dQ=e=>e instanceof Zi?e:new Zi(e.message,{cause:e}),pQ=global.Request,sc=class extends pQ{constructor(e,t){typeof e=="object"&&To in e&&(e=e[To]()),typeof t?.body?.getReader<"u"&&(t.duplex??="half"),super(e,t)}},fQ=e=>{let t=[],r=e.rawHeaders;for(let i=0;i<r.length;i+=2){let{[i]:n,[i+1]:a}=r;n.charCodeAt(0)!==58&&t.push([n,a])}return new Headers(t)},LO=Symbol("wrapBodyStream"),mQ=(e,t,r,i,n)=>{let a={method:e,headers:r,signal:n.signal};if(e==="TRACE"){a.method="GET";let o=new sc(t,a);return Object.defineProperty(o,"method",{get(){return"TRACE"}}),o}if(!(e==="GET"||e==="HEAD"))if("rawBody"in i&&i.rawBody instanceof Buffer)a.body=new ReadableStream({start(o){o.enqueue(i.rawBody),o.close()}});else if(i[LO]){let o;a.body=new ReadableStream({async pull(s){try{o||=zO.Readable.toWeb(i).getReader();let{done:c,value:u}=await o.read();c?s.close():s.enqueue(u)}catch(c){s.error(c)}}})}else a.body=zO.Readable.toWeb(i);return new sc(t,a)},To=Symbol("getRequestCache"),FO=Symbol("requestCache"),mp=Symbol("incomingKey"),hp=Symbol("urlKey"),hQ=Symbol("headersKey"),Io=Symbol("abortControllerKey"),vQ=Symbol("getAbortController"),cc={get method(){return this[mp].method||"GET"},get url(){return this[hp]},get headers(){return this[hQ]||=fQ(this[mp])},[vQ](){return this[To](),this[Io]},[To](){return this[Io]||=new AbortController,this[FO]||=mQ(this.method,this[hp],this.headers,this[mp],this[Io])}};["body","bodyUsed","cache","credentials","destination","integrity","mode","redirect","referrer","referrerPolicy","signal","keepalive"].forEach(e=>{Object.defineProperty(cc,e,{get(){return this[To]()[e]}})});["arrayBuffer","blob","clone","formData","json","text"].forEach(e=>{Object.defineProperty(cc,e,{value:function(){return this[To]()[e]()}})});Object.defineProperty(cc,Symbol.for("nodejs.util.inspect.custom"),{value:function(e,t,r){let i={method:this.method,url:this.url,headers:this.headers,nativeRequest:this[FO]};return`Request (lightweight) ${r(i,{...t,depth:e==null?null:e-1})}`}});Object.setPrototypeOf(cc,sc.prototype);var gQ=(e,t)=>{let r=Object.create(cc);r[mp]=e;let i=e.url||"";if(i[0]!=="/"&&(i.startsWith("http://")||i.startsWith("https://"))){if(e instanceof Eg.Http2ServerRequest)throw new Zi("Absolute URL for :path is not allowed in HTTP/2");try{let s=new URL(i);r[hp]=s.href}catch(s){throw new Zi("Invalid absolute URL",{cause:s})}return r}let n=(e instanceof Eg.Http2ServerRequest?e.authority:e.headers.host)||t;if(!n)throw new Zi("Missing host header");let a;if(e instanceof Eg.Http2ServerRequest){if(a=e.scheme,!(a==="http"||a==="https"))throw new Zi("Unsupported scheme")}else a=e.socket&&e.socket.encrypted?"https":"http";let o=new URL(`${a}://${n}${i}`);if(o.hostname.length!==n.length&&o.hostname!==n.replace(/:\d+$/,""))throw new Zi("Invalid host header");return r[hp]=o.href,r},Rg=Symbol("responseCache"),jo=Symbol("getResponseCache"),$a=Symbol("cache"),Ag=global.Response,Eo=class BO{#t;#e;[jo](){return delete this[$a],this[Rg]||=new Ag(this.#t,this.#e)}constructor(t,r){let i;if(this.#t=t,r instanceof BO){let n=r[Rg];if(n){this.#e=n,this[jo]();return}else this.#e=r.#e,i=new Headers(r.#e.headers)}else this.#e=r;(typeof t=="string"||typeof t?.getReader<"u"||t instanceof Blob||t instanceof Uint8Array)&&(this[$a]=[r?.status||200,t,i||r?.headers])}get headers(){let t=this[$a];return t?(t[2]instanceof Headers||(t[2]=new Headers(t[2]||{"content-type":"text/plain; charset=UTF-8"})),t[2]):this[jo]().headers}get status(){return this[$a]?.[0]??this[jo]().status}get ok(){let t=this.status;return t>=200&&t<300}};["body","bodyUsed","redirected","statusText","trailers","type","url"].forEach(e=>{Object.defineProperty(Eo.prototype,e,{get(){return this[jo]()[e]}})});["arrayBuffer","blob","clone","formData","json","text"].forEach(e=>{Object.defineProperty(Eo.prototype,e,{value:function(){return this[jo]()[e]()}})});Object.defineProperty(Eo.prototype,Symbol.for("nodejs.util.inspect.custom"),{value:function(e,t,r){let i={status:this.status,headers:this.headers,ok:this.ok,nativeResponse:this[Rg]};return`Response (lightweight) ${r(i,{...t,depth:e==null?null:e-1})}`}});Object.setPrototypeOf(Eo,Ag);Object.setPrototypeOf(Eo.prototype,Ag.prototype);async function yQ(e){return Promise.race([e,Promise.resolve().then(()=>Promise.resolve(void 0))])}function VO(e,t,r){let i=s=>{e.cancel(s).catch(()=>{})};return t.on("close",i),t.on("error",i),(r??e.read()).then(o,n),e.closed.finally(()=>{t.off("close",i),t.off("error",i)});function n(s){s&&t.destroy(s)}function a(){e.read().then(o,n)}function o({done:s,value:c}){try{if(s)t.end();else if(!t.write(c))t.once("drain",a);else return e.read().then(o,n)}catch(u){n(u)}}}function bQ(e,t){if(e.locked)throw new TypeError("ReadableStream is locked.");return t.destroyed?void 0:VO(e.getReader(),t)}var Mg=e=>{let t={};e instanceof Headers||(e=new Headers(e??void 0));let r=[];for(let[i,n]of e)i==="set-cookie"?r.push(n):t[i]=n;return r.length>0&&(t["set-cookie"]=r),t["content-type"]??="text/plain; charset=UTF-8",t},_Q="x-hono-already-sent",xQ=cQ(require("crypto"));typeof global.crypto>"u"&&(global.crypto=xQ.default);var Zg=Symbol("outgoingEnded"),NO=Symbol("incomingDraining"),wQ=500,SQ=64*1024*1024,kg=e=>{let t=e;if(e.destroyed||t[NO])return;if(t[NO]=!0,e instanceof Cg.Http2ServerRequest){try{e.stream?.close?.(Cg.constants.NGHTTP2_NO_ERROR)}catch{}return}let r=0,i=()=>{clearTimeout(a),e.off("data",o),e.off("end",i),e.off("error",i)},n=()=>{i();let s=e.socket;s&&!s.destroyed&&s.destroySoon()},a=setTimeout(n,wQ);a.unref?.();let o=s=>{r+=s.length,r>SQ&&n()};e.on("data",o),e.on("end",i),e.on("error",i),e.resume()},$Q=()=>new Response(null,{status:400}),HO=e=>new Response(null,{status:e instanceof Error&&(e.name==="TimeoutError"||e.constructor.name==="TimeoutError")?504:500}),Dg=(e,t)=>{let r=e instanceof Error?e:new Error("unknown error",{cause:e});r.code==="ERR_STREAM_PREMATURE_CLOSE"?console.info("The user aborted a request."):(console.error(e),t.headersSent||t.writeHead(500,{"Content-Type":"text/plain"}),t.end(`Error: ${r.message}`),t.destroy(r))},JO=e=>{"flushHeaders"in e&&e.writable&&e.flushHeaders()},GO=async(e,t)=>{let[r,i,n]=e[$a],a=!1;if(!n)n={"content-type":"text/plain; charset=UTF-8"};else if(n instanceof Headers)a=n.has("content-length"),n=Mg(n);else if(Array.isArray(n)){let o=new Headers(n);a=o.has("content-length"),n=Mg(o)}else for(let o in n)if(o.length===14&&o.toLowerCase()==="content-length"){a=!0;break}a||(typeof i=="string"?n["Content-Length"]=Buffer.byteLength(i):i instanceof Uint8Array?n["Content-Length"]=i.byteLength:i instanceof Blob&&(n["Content-Length"]=i.size)),t.writeHead(r,n),typeof i=="string"||i instanceof Uint8Array?t.end(i):i instanceof Blob?t.end(new Uint8Array(await i.arrayBuffer())):(JO(t),await bQ(i,t)?.catch(o=>Dg(o,t))),t[Zg]?.()},PQ=e=>typeof e.then=="function",OQ=async(e,t,r={})=>{if(PQ(e))if(r.errorHandler)try{e=await e}catch(n){let a=await r.errorHandler(n);if(!a)return;e=a}else e=await e.catch(HO);if($a in e)return GO(e,t);let i=Mg(e.headers);if(e.body){let n=e.body.getReader(),a=[],o=!1,s;if(i["transfer-encoding"]!=="chunked"){let c=2;for(let u=0;u<c;u++){s||=n.read();let l=await yQ(s).catch(d=>{console.error(d),o=!0});if(!l){if(u===1){await new Promise(d=>setTimeout(d)),c=3;continue}break}if(s=void 0,l.value&&a.push(l.value),l.done){o=!0;break}}o&&!("content-length"in i)&&(i["content-length"]=a.reduce((u,l)=>u+l.length,0))}t.writeHead(e.status,i),a.forEach(c=>{t.write(c)}),o?t.end():(a.length===0&&JO(t),await VO(n,t,s))}else i[_Q]||(t.writeHead(e.status,i),t.end());t[Zg]?.()},KO=(e,t={})=>{let r=t.autoCleanupIncoming??!0;return t.overrideGlobalObjects!==!1&&global.Request!==sc&&(Object.defineProperty(global,"Request",{value:sc}),Object.defineProperty(global,"Response",{value:Eo})),async(i,n)=>{let a,o;try{o=gQ(i,t.hostname);let s=!r||i.method==="GET"||i.method==="HEAD";if(s||(i[LO]=!0,i.on("end",()=>{s=!0}),i instanceof Cg.Http2ServerRequest&&(n[Zg]=()=>{s||setTimeout(()=>{s||setTimeout(()=>{kg(i)})})}),n.on("finish",()=>{s||kg(i)})),n.on("close",()=>{o[Io]&&(i.errored?o[Io].abort(i.errored.toString()):n.writableFinished||o[Io].abort("Client connection prematurely closed.")),s||setTimeout(()=>{s||setTimeout(()=>{kg(i)})})}),a=e(o,{incoming:i,outgoing:n}),$a in a)return GO(a,n)}catch(s){if(a)return Dg(s,n);if(t.errorHandler){if(a=await t.errorHandler(o?s:dQ(s)),!a)return}else o?a=HO(s):a=$Q()}try{return await OQ(a,n,t)}catch(s){return Dg(s,n)}}},WO=e=>{let t=e.fetch,r=KO(t,{hostname:e.hostname,overrideGlobalObjects:e.overrideGlobalObjects,autoCleanupIncoming:e.autoCleanupIncoming});return(e.createServer||lQ.createServer)(e.serverOptions||{},r)},jQ=(e,t)=>{let r=WO(e);return r.listen(e?.port??3e3,e.hostname,()=>{let i=r.address();t&&t(i)}),r}});var QO=b(gp=>{"use strict";Object.defineProperty(gp,"__esModule",{value:!0});gp.WebStandardStreamableHTTPServerTransport=void 0;var ct=ca(),zg=class{constructor(t={}){this._started=!1,this._hasHandledRequest=!1,this._streamMapping=new Map,this._requestToStreamMapping=new Map,this._requestResponseMap=new Map,this._initialized=!1,this._enableJsonResponse=!1,this._standaloneSseStreamId="_GET_stream",this.sessionIdGenerator=t.sessionIdGenerator,this._enableJsonResponse=t.enableJsonResponse??!1,this._eventStore=t.eventStore,this._onsessioninitialized=t.onsessioninitialized,this._onsessionclosed=t.onsessionclosed,this._allowedHosts=t.allowedHosts,this._allowedOrigins=t.allowedOrigins,this._enableDnsRebindingProtection=t.enableDnsRebindingProtection??!1,this._retryInterval=t.retryInterval}async start(){if(this._started)throw new Error("Transport already started");this._started=!0}createJsonErrorResponse(t,r,i,n){let a={code:r,message:i};return n?.data!==void 0&&(a.data=n.data),new Response(JSON.stringify({jsonrpc:"2.0",error:a,id:null}),{status:t,headers:{"Content-Type":"application/json",...n?.headers}})}validateRequestHeaders(t){if(this._enableDnsRebindingProtection){if(this._allowedHosts&&this._allowedHosts.length>0){let r=t.headers.get("host");if(!r||!this._allowedHosts.includes(r)){let i=`Invalid Host header: ${r}`;return this.onerror?.(new Error(i)),this.createJsonErrorResponse(403,-32e3,i)}}if(this._allowedOrigins&&this._allowedOrigins.length>0){let r=t.headers.get("origin");if(r&&!this._allowedOrigins.includes(r)){let i=`Invalid Origin header: ${r}`;return this.onerror?.(new Error(i)),this.createJsonErrorResponse(403,-32e3,i)}}}}async handleRequest(t,r){if(!this.sessionIdGenerator&&this._hasHandledRequest)throw new Error("Stateless transport cannot be reused across requests. Create a new transport per request.");this._hasHandledRequest=!0;let i=this.validateRequestHeaders(t);if(i)return i;switch(t.method){case"POST":return this.handlePostRequest(t,r);case"GET":return this.handleGetRequest(t);case"DELETE":return this.handleDeleteRequest(t);default:return this.handleUnsupportedRequest()}}async writePrimingEvent(t,r,i,n){if(!this._eventStore||n<"2025-11-25")return;let a=await this._eventStore.storeEvent(i,{}),o=`id: ${a}
|
|
128
|
+
For large estimates (20+ services / line items), prefer create_estimate + multiple add_service calls + export_estimate. This avoids token-generation limits and allows incremental building.`+Tg;Un.IMPORT_ESTIMATE="Download an existing AWS Pricing Calculator estimate by URL or ID. Returns the estimate in JSON (raw, for modifications like region swaps) or Markdown (for LLM consumption, summaries, funding recommendations). Use JSON format when you need to modify and re-export the estimate; use Markdown format when summarizing or presenting costs to the user."});var ZO=b((Upe,tQ)=>{tQ.exports={name:"sample-aws-pricing-calculator-mcp",version:"1.2.7",bin:"dist/mcp-server.js",files:["dist/mcp-server.js","catalog/schema.json","catalog/services/*.json"],description:"MCP server for creating, reading, updating AWS Pricing Calculator estimates through natural language.",license:"MIT-0",main:"mcp-server.js",scripts:{test:"npm run validate-catalog && SKIP_NETWORK=1 node --test test/*.test.js","test:roundtrip":"node --test test/catalog-roundtrip.test.js",mcp:"node mcp-server.js","validate-catalog":"node scripts/validate-catalog.js","validate-catalog:cost":"node scripts/validate-verified-catalog.js",build:"esbuild mcp-server.js --bundle --platform=node --outfile=dist/mcp-server.js --format=cjs --minify --external:@aws-sdk/client-dynamodb --external:@aws-sdk/lib-dynamodb && node scripts/emit-bundle-contract.js && rm -f dist/aws-calculator.zip && zip dist/aws-calculator.zip mcp-server.js lib/aws-client.js lib/estimate-builder.js lib/ec2.js package.json"},dependencies:{"@modelcontextprotocol/sdk":"1.29.0",express:"5.2.1"},peerDependencies:{"@aws-sdk/client-dynamodb":">=3.700.0","@aws-sdk/lib-dynamodb":">=3.700.0"},peerDependenciesMeta:{"@aws-sdk/client-dynamodb":{optional:!0},"@aws-sdk/lib-dynamodb":{optional:!0}},devDependencies:{"@aws-sdk/client-dynamodb":"3.1046.0","@aws-sdk/lib-dynamodb":"3.1046.0",ajv:"8.20.0","ajv-formats":"3.0.1",esbuild:"0.28.1",playwright:"1.60.0"}}});var YO=b((Lpe,XO)=>{"use strict";var rQ=Object.create,vp=Object.defineProperty,nQ=Object.getOwnPropertyDescriptor,iQ=Object.getOwnPropertyNames,aQ=Object.getPrototypeOf,oQ=Object.prototype.hasOwnProperty,sQ=(e,t)=>{for(var r in t)vp(e,r,{get:t[r],enumerable:!0})},qO=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of iQ(t))!oQ.call(e,n)&&n!==r&&vp(e,n,{get:()=>t[n],enumerable:!(i=nQ(t,n))||i.enumerable});return e},cQ=(e,t,r)=>(r=e!=null?rQ(aQ(e)):{},qO(t||!e||!e.__esModule?vp(r,"default",{value:e,enumerable:!0}):r,e)),uQ=e=>qO(vp({},"__esModule",{value:!0}),e),UO={};sQ(UO,{RequestError:()=>Zi,createAdaptorServer:()=>WO,getRequestListener:()=>KO,serve:()=>jQ});XO.exports=uQ(UO);var lQ=require("http"),Cg=require("http2"),Eg=require("http2"),zO=require("stream"),Zi=class extends Error{constructor(e,t){super(e,t),this.name="RequestError"}},dQ=e=>e instanceof Zi?e:new Zi(e.message,{cause:e}),pQ=global.Request,sc=class extends pQ{constructor(e,t){typeof e=="object"&&To in e&&(e=e[To]()),typeof t?.body?.getReader<"u"&&(t.duplex??="half"),super(e,t)}},fQ=e=>{let t=[],r=e.rawHeaders;for(let i=0;i<r.length;i+=2){let{[i]:n,[i+1]:a}=r;n.charCodeAt(0)!==58&&t.push([n,a])}return new Headers(t)},LO=Symbol("wrapBodyStream"),mQ=(e,t,r,i,n)=>{let a={method:e,headers:r,signal:n.signal};if(e==="TRACE"){a.method="GET";let o=new sc(t,a);return Object.defineProperty(o,"method",{get(){return"TRACE"}}),o}if(!(e==="GET"||e==="HEAD"))if("rawBody"in i&&i.rawBody instanceof Buffer)a.body=new ReadableStream({start(o){o.enqueue(i.rawBody),o.close()}});else if(i[LO]){let o;a.body=new ReadableStream({async pull(s){try{o||=zO.Readable.toWeb(i).getReader();let{done:c,value:u}=await o.read();c?s.close():s.enqueue(u)}catch(c){s.error(c)}}})}else a.body=zO.Readable.toWeb(i);return new sc(t,a)},To=Symbol("getRequestCache"),FO=Symbol("requestCache"),mp=Symbol("incomingKey"),hp=Symbol("urlKey"),hQ=Symbol("headersKey"),Io=Symbol("abortControllerKey"),vQ=Symbol("getAbortController"),cc={get method(){return this[mp].method||"GET"},get url(){return this[hp]},get headers(){return this[hQ]||=fQ(this[mp])},[vQ](){return this[To](),this[Io]},[To](){return this[Io]||=new AbortController,this[FO]||=mQ(this.method,this[hp],this.headers,this[mp],this[Io])}};["body","bodyUsed","cache","credentials","destination","integrity","mode","redirect","referrer","referrerPolicy","signal","keepalive"].forEach(e=>{Object.defineProperty(cc,e,{get(){return this[To]()[e]}})});["arrayBuffer","blob","clone","formData","json","text"].forEach(e=>{Object.defineProperty(cc,e,{value:function(){return this[To]()[e]()}})});Object.defineProperty(cc,Symbol.for("nodejs.util.inspect.custom"),{value:function(e,t,r){let i={method:this.method,url:this.url,headers:this.headers,nativeRequest:this[FO]};return`Request (lightweight) ${r(i,{...t,depth:e==null?null:e-1})}`}});Object.setPrototypeOf(cc,sc.prototype);var gQ=(e,t)=>{let r=Object.create(cc);r[mp]=e;let i=e.url||"";if(i[0]!=="/"&&(i.startsWith("http://")||i.startsWith("https://"))){if(e instanceof Eg.Http2ServerRequest)throw new Zi("Absolute URL for :path is not allowed in HTTP/2");try{let s=new URL(i);r[hp]=s.href}catch(s){throw new Zi("Invalid absolute URL",{cause:s})}return r}let n=(e instanceof Eg.Http2ServerRequest?e.authority:e.headers.host)||t;if(!n)throw new Zi("Missing host header");let a;if(e instanceof Eg.Http2ServerRequest){if(a=e.scheme,!(a==="http"||a==="https"))throw new Zi("Unsupported scheme")}else a=e.socket&&e.socket.encrypted?"https":"http";let o=new URL(`${a}://${n}${i}`);if(o.hostname.length!==n.length&&o.hostname!==n.replace(/:\d+$/,""))throw new Zi("Invalid host header");return r[hp]=o.href,r},Rg=Symbol("responseCache"),jo=Symbol("getResponseCache"),$a=Symbol("cache"),Ag=global.Response,Eo=class BO{#t;#e;[jo](){return delete this[$a],this[Rg]||=new Ag(this.#t,this.#e)}constructor(t,r){let i;if(this.#t=t,r instanceof BO){let n=r[Rg];if(n){this.#e=n,this[jo]();return}else this.#e=r.#e,i=new Headers(r.#e.headers)}else this.#e=r;(typeof t=="string"||typeof t?.getReader<"u"||t instanceof Blob||t instanceof Uint8Array)&&(this[$a]=[r?.status||200,t,i||r?.headers])}get headers(){let t=this[$a];return t?(t[2]instanceof Headers||(t[2]=new Headers(t[2]||{"content-type":"text/plain; charset=UTF-8"})),t[2]):this[jo]().headers}get status(){return this[$a]?.[0]??this[jo]().status}get ok(){let t=this.status;return t>=200&&t<300}};["body","bodyUsed","redirected","statusText","trailers","type","url"].forEach(e=>{Object.defineProperty(Eo.prototype,e,{get(){return this[jo]()[e]}})});["arrayBuffer","blob","clone","formData","json","text"].forEach(e=>{Object.defineProperty(Eo.prototype,e,{value:function(){return this[jo]()[e]()}})});Object.defineProperty(Eo.prototype,Symbol.for("nodejs.util.inspect.custom"),{value:function(e,t,r){let i={status:this.status,headers:this.headers,ok:this.ok,nativeResponse:this[Rg]};return`Response (lightweight) ${r(i,{...t,depth:e==null?null:e-1})}`}});Object.setPrototypeOf(Eo,Ag);Object.setPrototypeOf(Eo.prototype,Ag.prototype);async function yQ(e){return Promise.race([e,Promise.resolve().then(()=>Promise.resolve(void 0))])}function VO(e,t,r){let i=s=>{e.cancel(s).catch(()=>{})};return t.on("close",i),t.on("error",i),(r??e.read()).then(o,n),e.closed.finally(()=>{t.off("close",i),t.off("error",i)});function n(s){s&&t.destroy(s)}function a(){e.read().then(o,n)}function o({done:s,value:c}){try{if(s)t.end();else if(!t.write(c))t.once("drain",a);else return e.read().then(o,n)}catch(u){n(u)}}}function bQ(e,t){if(e.locked)throw new TypeError("ReadableStream is locked.");return t.destroyed?void 0:VO(e.getReader(),t)}var Mg=e=>{let t={};e instanceof Headers||(e=new Headers(e??void 0));let r=[];for(let[i,n]of e)i==="set-cookie"?r.push(n):t[i]=n;return r.length>0&&(t["set-cookie"]=r),t["content-type"]??="text/plain; charset=UTF-8",t},_Q="x-hono-already-sent",xQ=cQ(require("crypto"));typeof global.crypto>"u"&&(global.crypto=xQ.default);var Zg=Symbol("outgoingEnded"),NO=Symbol("incomingDraining"),wQ=500,SQ=64*1024*1024,kg=e=>{let t=e;if(e.destroyed||t[NO])return;if(t[NO]=!0,e instanceof Cg.Http2ServerRequest){try{e.stream?.close?.(Cg.constants.NGHTTP2_NO_ERROR)}catch{}return}let r=0,i=()=>{clearTimeout(a),e.off("data",o),e.off("end",i),e.off("error",i)},n=()=>{i();let s=e.socket;s&&!s.destroyed&&s.destroySoon()},a=setTimeout(n,wQ);a.unref?.();let o=s=>{r+=s.length,r>SQ&&n()};e.on("data",o),e.on("end",i),e.on("error",i),e.resume()},$Q=()=>new Response(null,{status:400}),HO=e=>new Response(null,{status:e instanceof Error&&(e.name==="TimeoutError"||e.constructor.name==="TimeoutError")?504:500}),Dg=(e,t)=>{let r=e instanceof Error?e:new Error("unknown error",{cause:e});r.code==="ERR_STREAM_PREMATURE_CLOSE"?console.info("The user aborted a request."):(console.error(e),t.headersSent||t.writeHead(500,{"Content-Type":"text/plain"}),t.end(`Error: ${r.message}`),t.destroy(r))},JO=e=>{"flushHeaders"in e&&e.writable&&e.flushHeaders()},GO=async(e,t)=>{let[r,i,n]=e[$a],a=!1;if(!n)n={"content-type":"text/plain; charset=UTF-8"};else if(n instanceof Headers)a=n.has("content-length"),n=Mg(n);else if(Array.isArray(n)){let o=new Headers(n);a=o.has("content-length"),n=Mg(o)}else for(let o in n)if(o.length===14&&o.toLowerCase()==="content-length"){a=!0;break}a||(typeof i=="string"?n["Content-Length"]=Buffer.byteLength(i):i instanceof Uint8Array?n["Content-Length"]=i.byteLength:i instanceof Blob&&(n["Content-Length"]=i.size)),t.writeHead(r,n),typeof i=="string"||i instanceof Uint8Array?t.end(i):i instanceof Blob?t.end(new Uint8Array(await i.arrayBuffer())):(JO(t),await bQ(i,t)?.catch(o=>Dg(o,t))),t[Zg]?.()},PQ=e=>typeof e.then=="function",OQ=async(e,t,r={})=>{if(PQ(e))if(r.errorHandler)try{e=await e}catch(n){let a=await r.errorHandler(n);if(!a)return;e=a}else e=await e.catch(HO);if($a in e)return GO(e,t);let i=Mg(e.headers);if(e.body){let n=e.body.getReader(),a=[],o=!1,s;if(i["transfer-encoding"]!=="chunked"){let c=2;for(let u=0;u<c;u++){s||=n.read();let l=await yQ(s).catch(d=>{console.error(d),o=!0});if(!l){if(u===1){await new Promise(d=>setTimeout(d)),c=3;continue}break}if(s=void 0,l.value&&a.push(l.value),l.done){o=!0;break}}o&&!("content-length"in i)&&(i["content-length"]=a.reduce((u,l)=>u+l.length,0))}t.writeHead(e.status,i),a.forEach(c=>{t.write(c)}),o?t.end():(a.length===0&&JO(t),await VO(n,t,s))}else i[_Q]||(t.writeHead(e.status,i),t.end());t[Zg]?.()},KO=(e,t={})=>{let r=t.autoCleanupIncoming??!0;return t.overrideGlobalObjects!==!1&&global.Request!==sc&&(Object.defineProperty(global,"Request",{value:sc}),Object.defineProperty(global,"Response",{value:Eo})),async(i,n)=>{let a,o;try{o=gQ(i,t.hostname);let s=!r||i.method==="GET"||i.method==="HEAD";if(s||(i[LO]=!0,i.on("end",()=>{s=!0}),i instanceof Cg.Http2ServerRequest&&(n[Zg]=()=>{s||setTimeout(()=>{s||setTimeout(()=>{kg(i)})})}),n.on("finish",()=>{s||kg(i)})),n.on("close",()=>{o[Io]&&(i.errored?o[Io].abort(i.errored.toString()):n.writableFinished||o[Io].abort("Client connection prematurely closed.")),s||setTimeout(()=>{s||setTimeout(()=>{kg(i)})})}),a=e(o,{incoming:i,outgoing:n}),$a in a)return GO(a,n)}catch(s){if(a)return Dg(s,n);if(t.errorHandler){if(a=await t.errorHandler(o?s:dQ(s)),!a)return}else o?a=HO(s):a=$Q()}try{return await OQ(a,n,t)}catch(s){return Dg(s,n)}}},WO=e=>{let t=e.fetch,r=KO(t,{hostname:e.hostname,overrideGlobalObjects:e.overrideGlobalObjects,autoCleanupIncoming:e.autoCleanupIncoming});return(e.createServer||lQ.createServer)(e.serverOptions||{},r)},jQ=(e,t)=>{let r=WO(e);return r.listen(e?.port??3e3,e.hostname,()=>{let i=r.address();t&&t(i)}),r}});var QO=b(gp=>{"use strict";Object.defineProperty(gp,"__esModule",{value:!0});gp.WebStandardStreamableHTTPServerTransport=void 0;var ct=ca(),zg=class{constructor(t={}){this._started=!1,this._hasHandledRequest=!1,this._streamMapping=new Map,this._requestToStreamMapping=new Map,this._requestResponseMap=new Map,this._initialized=!1,this._enableJsonResponse=!1,this._standaloneSseStreamId="_GET_stream",this.sessionIdGenerator=t.sessionIdGenerator,this._enableJsonResponse=t.enableJsonResponse??!1,this._eventStore=t.eventStore,this._onsessioninitialized=t.onsessioninitialized,this._onsessionclosed=t.onsessionclosed,this._allowedHosts=t.allowedHosts,this._allowedOrigins=t.allowedOrigins,this._enableDnsRebindingProtection=t.enableDnsRebindingProtection??!1,this._retryInterval=t.retryInterval}async start(){if(this._started)throw new Error("Transport already started");this._started=!0}createJsonErrorResponse(t,r,i,n){let a={code:r,message:i};return n?.data!==void 0&&(a.data=n.data),new Response(JSON.stringify({jsonrpc:"2.0",error:a,id:null}),{status:t,headers:{"Content-Type":"application/json",...n?.headers}})}validateRequestHeaders(t){if(this._enableDnsRebindingProtection){if(this._allowedHosts&&this._allowedHosts.length>0){let r=t.headers.get("host");if(!r||!this._allowedHosts.includes(r)){let i=`Invalid Host header: ${r}`;return this.onerror?.(new Error(i)),this.createJsonErrorResponse(403,-32e3,i)}}if(this._allowedOrigins&&this._allowedOrigins.length>0){let r=t.headers.get("origin");if(r&&!this._allowedOrigins.includes(r)){let i=`Invalid Origin header: ${r}`;return this.onerror?.(new Error(i)),this.createJsonErrorResponse(403,-32e3,i)}}}}async handleRequest(t,r){if(!this.sessionIdGenerator&&this._hasHandledRequest)throw new Error("Stateless transport cannot be reused across requests. Create a new transport per request.");this._hasHandledRequest=!0;let i=this.validateRequestHeaders(t);if(i)return i;switch(t.method){case"POST":return this.handlePostRequest(t,r);case"GET":return this.handleGetRequest(t);case"DELETE":return this.handleDeleteRequest(t);default:return this.handleUnsupportedRequest()}}async writePrimingEvent(t,r,i,n){if(!this._eventStore||n<"2025-11-25")return;let a=await this._eventStore.storeEvent(i,{}),o=`id: ${a}
|
|
129
129
|
data:
|
|
130
130
|
|
|
131
131
|
`;this._retryInterval!==void 0&&(o=`id: ${a}
|
|
@@ -187,7 +187,7 @@ return fn.apply(this, arguments)
|
|
|
187
187
|
</body>
|
|
188
188
|
</html>
|
|
189
189
|
`}function Bce(){return function(){this.error(404)}}function Vce(){return function(t){if(this.hasTrailingSlash()){this.error(404);return}var r=Xb.original(this.req);r.path=null,r.pathname=Lce(r.pathname+"/");var i=Ace(qce.format(r)),n=Fce("Redirecting","Redirecting to "+Zce(i));t.statusCode=301,t.setHeader("Content-Type","text/html; charset=UTF-8"),t.setHeader("Content-Length",Buffer.byteLength(n)),t.setHeader("Content-Security-Policy","default-src 'none'"),t.setHeader("X-Content-Type-Options","nosniff"),t.setHeader("Location",i),t.end(n)}}});var MC=b((Pr,RC)=>{"use strict";var Sf=lk(),Hce=require("node:events").EventEmitter,IC=pk(),TC=y4(),EC=Cb(),kC=J4(),CC=PC();Pr=RC.exports=Jce;function Jce(){var e=function(t,r,i){e.handle(t,r,i)};return IC(e,Hce.prototype,!1),IC(e,TC,!1),e.request=Object.create(kC,{app:{configurable:!0,enumerable:!0,writable:!0,value:e}}),e.response=Object.create(CC,{app:{configurable:!0,enumerable:!0,writable:!0,value:e}}),e.init(),e}Pr.application=TC;Pr.request=kC;Pr.response=CC;Pr.Route=EC.Route;Pr.Router=EC;Pr.json=Sf.json;Pr.raw=Sf.raw;Pr.static=jC();Pr.text=Sf.text;Pr.urlencoded=Sf.urlencoded});var AC=b((hhe,DC)=>{"use strict";DC.exports=MC()});var{McpServer:Gce}=AP(),{StdioServerTransport:Kce}=UP(),{z:Rt}=eg(),ZC=require("node:path"),{PARTITIONS:Wce,loadManifest:zC,findService:Xce,fetchServiceDefinition:Yce,extractInputFields:Qce,searchServices:eue,fetchEstimate:tue,estimateToMarkdown:rue}=Po(),NC=ic(),{createEstimateStore:nue}=sO(),{loadCatalog:iue}=cp(),{nextStepFor:aue}=dp(),{traceTool:hi}=lg(),qC=nc(),{runWithSession:oue}=ep(),{createHandlerHelpers:sue,mcpJsonOk:Gn,mcpTextErr:Da,checkPartition:$f,parseServicesArg:UC}=DO(),vi=AO(),cue=require("node:fs");function uue(){if(process.env.CALCMCP_CATALOG_DIR)return process.env.CALCMCP_CATALOG_DIR;let e=[ZC.join(__dirname,"catalog","services"),ZC.join(__dirname,"..","catalog","services")];for(let t of e)if(cue.existsSync(t))return t;return e[0]}var LC=uue();process.env.CALCMCP_CATALOG_DIR&&process.stderr.write(`NOTE: catalog override active \u2014 loading from ${LC}
|
|
190
|
-
`);var FC=iue(LC,{strict:!1}),Aa=nue(),Mc=ZO(),Or=new Gce({name:Mc.name,version:Mc.version}),lue=sue({catalog:FC}),{addEntries:Yb,lintEstimate:BC,estimateNotFoundResult:Qb,exportWithLint:e_,buildFieldsResult:due,maybeBuildRedirectResult:pue,maybeBuildProductRedirect:fue,annotateSearchResults:mue}=lue;Or.tool("get_server_info",vi.GET_SERVER_INFO,{},hi("get_server_info",async()=>Gn({name:Mc.name,version:Mc.version,description:Mc.description,tools:["search_services","get_service_fields","create_estimate","add_service","build_estimate","validate_estimate","export_estimate","import_estimate","get_server_info"],partitions:Object.keys(Wce)})));Or.tool("search_services",vi.SEARCH_SERVICES,{query:Rt.string().describe('One or more search terms, comma-separated (e.g. "Lambda, S3, Amazon Personalize, API Gateway, CloudWatch")'),partition:Rt.string().optional().describe('AWS partition to search in (default: "aws"). Valid values: "aws", "aws-iso", "aws-iso-b", "aws-eusc"')},hi("search_services",async({query:e,partition:t})=>{let r=t||"aws",i=$f(r);if(i)return i;let n=await zC(r);return Gn(mue(eue(n,e)))}));Or.tool("get_service_fields",vi.GET_SERVICE_FIELDS,{service:Rt.string().describe('One or more service keys, comma-separated (e.g. "aWSLambda, amazonS3, stepFunctionStandard, amazonApiGateway")'),partition:Rt.string().optional().describe('AWS partition to fetch from (default: "aws"). Valid values: "aws", "aws-iso", "aws-iso-b", "aws-eusc"')},hi("get_service_fields",async({service:e,partition:t})=>{let r=t||"aws",i=$f(r);if(i)return i;let n=await zC(r),a=e.split(",").map(u=>u.trim()).filter(Boolean),o=[],s=[];for(let u of a){let l=Xce(n,u);if(!l){s.push(`Service "${u}" not found.`);continue}let d=await fue({svc:l,partition:r});if(d){o.push(d);continue}let p=await Yce(n,l.key,r);if(!p){s.push(`Failed to fetch definition for "${l.key}".`);continue}let m=Qce(p),g=await pue({svc:l,fields:m,partition:r});if(g){o.push(g);continue}let _=await due(l,r);_&&o.push(_)}let c=s.length?{services:o,errors:s}:a.length===1?o[0]:o;return Gn(c)}));Or.tool("create_estimate",vi.CREATE_ESTIMATE,{name:Rt.string().optional().describe('Name for the estimate (default: "My Estimate")'),partition:Rt.string().optional().describe('AWS partition for this estimate (default: "aws"). Valid values: "aws", "aws-iso", "aws-iso-b", "aws-eusc"')},hi("create_estimate",async({name:e,partition:t})=>{let r=$f(t);if(r)return r;let i=new NC(e,t||void 0);return await Aa.put(i),qC.session.start({estimateId:i.id,partition:t||"aws",origin:"create_estimate"}),Gn({estimate_id:i.id,name:i.name})}));Or.tool("add_service",vi.ADD_SERVICE,{estimate_id:Rt.string().describe("Estimate ID from create_estimate"),services:Rt.string().describe('JSON array of service entries. Each entry: {"service":"serviceKey","instance":"optional","group":"optional","config":{...with region, description, and field values}}. Example: [{"service":"aWSLambda","group":"Prod","config":{"region":"eu-west-1","description":"Compute","numberOfRequests":{"value":"19","unit":"millionPerMonth"}}}]')},hi("add_service",async({estimate_id:e,services:t})=>{let r=await Aa.get(e);if(!r)return Qb(e);let i=UC(t);if(i.error)return i.error;let n=await Yb(r,i.entries);return n.some(a=>a.error)||await Aa.put(r),Gn(n)}));Or.tool("validate_estimate",vi.VALIDATE_ESTIMATE,{estimate_id:Rt.string().describe("Estimate ID from create_estimate or build_estimate")},hi("validate_estimate",async({estimate_id:e})=>{let t=await Aa.get(e);if(!t)return Qb(e);try{let{blob:r,lintResult:i}=await BC(t),n=aue(i,FC);return Gn({lint_verdict:i.status,next_step:n,lint_services:i.services,would_be_payload:r})}catch(r){return Da(`Validate failed: ${r.message}`)}}));Or.tool("export_estimate",vi.EXPORT_ESTIMATE,{estimate_id:Rt.string().describe("Estimate ID from create_estimate")},hi("export_estimate",async({estimate_id:e})=>{let t=await Aa.get(e);if(!t)return Qb(e);try{let r=await e_(t);return r.isError?Da(r.text):Gn({sharable_url:r.sharable_url,aws_estimate_id:r.aws_estimate_id})}catch(r){return Da(`Export failed: ${r.message}`)}}));async function VC({services:e,name:t,partition:r}){let i=$f(r);if(i)return i;let n=UC(e);if(n.error)return n.error;if(n.entries.length===0)return Da("No services provided.");let a=new NC(t,r||void 0),o=await Yb(a,n.entries),s=o.filter(c=>c.error);if(s.length>0){let c=[...new Set(s.map(u=>String(u.service||"").split(":")[0]).filter(Boolean))];try{qC.buildEstimate.needsGrounding({estimateId:a.id,servicesToInspect:c,failureCount:s.length})}catch{}return{...Gn({estimate_id:a.id,status:"needs_field_grounding",next_step:`Field IDs/values for ${c.join(", ")} did not match the schema. Call get_service_fields for those services to discover valid field IDs and value shapes, then retry build_estimate with the corrected payload.`,services_to_inspect:c,issues:o}),isError:!1}}await Aa.put(a);try{let c=await e_(a);return c.isError?Da(JSON.stringify({estimate_id:a.id,error:c.text})):Gn({estimate_id:a.id,sharable_url:c.sharable_url,aws_estimate_id:c.aws_estimate_id,services:o})}catch(c){return Da(JSON.stringify({estimate_id:a.id,error:`Build failed: ${c.message}`}))}}Or.tool("build_estimate",vi.BUILD_ESTIMATE,{services:Rt.string().describe('JSON array of service entries. Same shape as add_service. Each entry: {"service":"serviceKey","instance":"optional","group":"optional","config":{...with region, description, and field values}}.'),name:Rt.string().optional().describe('Estimate name (default: "My Estimate")'),partition:Rt.string().optional().describe('AWS partition (default: "aws"). Valid values: "aws", "aws-iso", "aws-iso-b", "aws-eusc", "aws-eusc"')},hi("build_estimate",VC));Or.tool("import_estimate",vi.IMPORT_ESTIMATE,{estimate_id:Rt.string().describe('Estimate ID or full calculator.aws URL (e.g. "bedb9a10..." or "https://calculator.aws/#/estimate?id=bedb9a10...")'),format:Rt.enum(["json","markdown"]).optional().describe('Output format: "json" for raw data (default), "markdown" for LLM-friendly summary')},hi("import_estimate",async({estimate_id:e,format:t})=>{let r=e,i,n=e.match(/[?&]id=([a-f0-9]+)/);n&&(r=n[1]),e.includes("pricing.calculator.aws.eu")&&(i="aws-eusc");try{let a=await tue(r,{partition:i});return{content:[{type:"text",text:t==="markdown"?rue(a):JSON.stringify(a,null,2)}]}}catch(a){return Da(`Import failed: ${a.message}`)}}));async function hue(){if(process.env.MCP_TRANSPORT==="http"){let{StreamableHTTPServerTransport:e}=tj(),t=AC(),r=t();r.use(t.json()),r.post("/mcp",async(a,o)=>{await Or.close();let s=new e({sessionIdGenerator:void 0});o.on("close",()=>s.close()),await Or.connect(s);let c=a.headers["mcp-session-id"]||null;await oue(c,()=>s.handleRequest(a,o,a.body))}),r.get("/mcp",(a,o)=>o.writeHead(405).end("Method Not Allowed")),r.delete("/mcp",(a,o)=>o.writeHead(405).end("Method Not Allowed"));let i=process.env.PORT||8e3,n=process.env.HOST||"127.0.0.1";r.listen(i,n,()=>console.error(`MCP server listening on ${n}:${i}`))}else{let e=new Kce;await Or.connect(e)}}module.exports={__test:{store:Aa,addEntries:Yb,exportWithLint:e_,lintEstimate:BC,buildEstimateHandler:VC}};(require.main===module||process.env.MCP_TRANSPORT==="http")&&hue().catch(e=>{console.error(e),process.exit(1)});
|
|
190
|
+
`);var FC=iue(LC,{strict:!1}),Aa=nue(),Mc=ZO(),Or=new Gce({name:Mc.name,version:Mc.version}),lue=sue({catalog:FC}),{addEntries:Yb,lintEstimate:BC,estimateNotFoundResult:Qb,exportWithLint:e_,buildFieldsResult:due,maybeBuildRedirectResult:pue,maybeBuildProductRedirect:fue,annotateSearchResults:mue}=lue;Or.tool("get_server_info",vi.GET_SERVER_INFO,{},{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},hi("get_server_info",async()=>Gn({name:Mc.name,version:Mc.version,description:Mc.description,tools:["search_services","get_service_fields","create_estimate","add_service","build_estimate","validate_estimate","export_estimate","import_estimate","get_server_info"],partitions:Object.keys(Wce)})));Or.tool("search_services",vi.SEARCH_SERVICES,{query:Rt.string().describe('One or more search terms, comma-separated (e.g. "Lambda, S3, Amazon Personalize, API Gateway, CloudWatch")'),partition:Rt.string().optional().describe('AWS partition to search in (default: "aws"). Valid values: "aws", "aws-iso", "aws-iso-b", "aws-eusc"')},{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},hi("search_services",async({query:e,partition:t})=>{let r=t||"aws",i=$f(r);if(i)return i;let n=await zC(r);return Gn(mue(eue(n,e)))}));Or.tool("get_service_fields",vi.GET_SERVICE_FIELDS,{service:Rt.string().describe('One or more service keys, comma-separated (e.g. "aWSLambda, amazonS3, stepFunctionStandard, amazonApiGateway")'),partition:Rt.string().optional().describe('AWS partition to fetch from (default: "aws"). Valid values: "aws", "aws-iso", "aws-iso-b", "aws-eusc"')},{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},hi("get_service_fields",async({service:e,partition:t})=>{let r=t||"aws",i=$f(r);if(i)return i;let n=await zC(r),a=e.split(",").map(u=>u.trim()).filter(Boolean),o=[],s=[];for(let u of a){let l=Xce(n,u);if(!l){s.push(`Service "${u}" not found.`);continue}let d=await fue({svc:l,partition:r});if(d){o.push(d);continue}let p=await Yce(n,l.key,r);if(!p){s.push(`Failed to fetch definition for "${l.key}".`);continue}let m=Qce(p),g=await pue({svc:l,fields:m,partition:r});if(g){o.push(g);continue}let _=await due(l,r);_&&o.push(_)}let c=s.length?{services:o,errors:s}:a.length===1?o[0]:o;return Gn(c)}));Or.tool("create_estimate",vi.CREATE_ESTIMATE,{name:Rt.string().optional().describe('Name for the estimate (default: "My Estimate")'),partition:Rt.string().optional().describe('AWS partition for this estimate (default: "aws"). Valid values: "aws", "aws-iso", "aws-iso-b", "aws-eusc"')},{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},hi("create_estimate",async({name:e,partition:t})=>{let r=$f(t);if(r)return r;let i=new NC(e,t||void 0);return await Aa.put(i),qC.session.start({estimateId:i.id,partition:t||"aws",origin:"create_estimate"}),Gn({estimate_id:i.id,name:i.name})}));Or.tool("add_service",vi.ADD_SERVICE,{estimate_id:Rt.string().describe("Estimate ID from create_estimate"),services:Rt.string().describe('JSON array of service entries. Each entry: {"service":"serviceKey","instance":"optional","group":"optional","config":{...with region, description, and field values}}. Example: [{"service":"aWSLambda","group":"Prod","config":{"region":"eu-west-1","description":"Compute","numberOfRequests":{"value":"19","unit":"millionPerMonth"}}}]')},{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},hi("add_service",async({estimate_id:e,services:t})=>{let r=await Aa.get(e);if(!r)return Qb(e);let i=UC(t);if(i.error)return i.error;let n=await Yb(r,i.entries);return n.some(a=>a.error)||await Aa.put(r),Gn(n)}));Or.tool("validate_estimate",vi.VALIDATE_ESTIMATE,{estimate_id:Rt.string().describe("Estimate ID from create_estimate or build_estimate")},{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},hi("validate_estimate",async({estimate_id:e})=>{let t=await Aa.get(e);if(!t)return Qb(e);try{let{blob:r,lintResult:i}=await BC(t),n=aue(i,FC);return Gn({lint_verdict:i.status,next_step:n,lint_services:i.services,would_be_payload:r})}catch(r){return Da(`Validate failed: ${r.message}`)}}));Or.tool("export_estimate",vi.EXPORT_ESTIMATE,{estimate_id:Rt.string().describe("Estimate ID from create_estimate")},{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},hi("export_estimate",async({estimate_id:e})=>{let t=await Aa.get(e);if(!t)return Qb(e);try{let r=await e_(t);return r.isError?Da(r.text):Gn({sharable_url:r.sharable_url,aws_estimate_id:r.aws_estimate_id})}catch(r){return Da(`Export failed: ${r.message}`)}}));async function VC({services:e,name:t,partition:r}){let i=$f(r);if(i)return i;let n=UC(e);if(n.error)return n.error;if(n.entries.length===0)return Da("No services provided.");let a=new NC(t,r||void 0),o=await Yb(a,n.entries),s=o.filter(c=>c.error);if(s.length>0){let c=[...new Set(s.map(u=>String(u.service||"").split(":")[0]).filter(Boolean))];try{qC.buildEstimate.needsGrounding({estimateId:a.id,servicesToInspect:c,failureCount:s.length})}catch{}return{...Gn({estimate_id:a.id,status:"needs_field_grounding",next_step:`Field IDs/values for ${c.join(", ")} did not match the schema. Call get_service_fields for those services to discover valid field IDs and value shapes, then retry build_estimate with the corrected payload.`,services_to_inspect:c,issues:o}),isError:!1}}await Aa.put(a);try{let c=await e_(a);return c.isError?Da(JSON.stringify({estimate_id:a.id,error:c.text})):Gn({estimate_id:a.id,sharable_url:c.sharable_url,aws_estimate_id:c.aws_estimate_id,services:o})}catch(c){return Da(JSON.stringify({estimate_id:a.id,error:`Build failed: ${c.message}`}))}}Or.tool("build_estimate",vi.BUILD_ESTIMATE,{services:Rt.string().describe('JSON array of service entries. Same shape as add_service. Each entry: {"service":"serviceKey","instance":"optional","group":"optional","config":{...with region, description, and field values}}.'),name:Rt.string().optional().describe('Estimate name (default: "My Estimate")'),partition:Rt.string().optional().describe('AWS partition (default: "aws"). Valid values: "aws", "aws-iso", "aws-iso-b", "aws-eusc", "aws-eusc"')},{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},hi("build_estimate",VC));Or.tool("import_estimate",vi.IMPORT_ESTIMATE,{estimate_id:Rt.string().describe('Estimate ID or full calculator.aws URL (e.g. "bedb9a10..." or "https://calculator.aws/#/estimate?id=bedb9a10...")'),format:Rt.enum(["json","markdown"]).optional().describe('Output format: "json" for raw data (default), "markdown" for LLM-friendly summary')},{readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},hi("import_estimate",async({estimate_id:e,format:t})=>{let r=e,i,n=e.match(/[?&]id=([a-f0-9]+)/);n&&(r=n[1]),e.includes("pricing.calculator.aws.eu")&&(i="aws-eusc");try{let a=await tue(r,{partition:i});return{content:[{type:"text",text:t==="markdown"?rue(a):JSON.stringify(a,null,2)}]}}catch(a){return Da(`Import failed: ${a.message}`)}}));async function hue(){if(process.env.MCP_TRANSPORT==="http"){let{StreamableHTTPServerTransport:e}=tj(),t=AC(),r=t();r.use(t.json({limit:"10mb"})),r.post("/mcp",async(a,o)=>{await Or.close();let s=new e({sessionIdGenerator:void 0});o.on("close",()=>s.close()),await Or.connect(s);let c=a.headers["mcp-session-id"]||null;await oue(c,()=>s.handleRequest(a,o,a.body))}),r.get("/mcp",(a,o)=>o.writeHead(405).end("Method Not Allowed")),r.delete("/mcp",(a,o)=>o.writeHead(405).end("Method Not Allowed"));let i=process.env.PORT||8e3,n=process.env.HOST||"127.0.0.1";r.listen(i,n,()=>console.error(`MCP server listening on ${n}:${i}`))}else{let e=new Kce;await Or.connect(e)}}module.exports={__test:{store:Aa,addEntries:Yb,exportWithLint:e_,lintEstimate:BC,buildEstimateHandler:VC}};(require.main===module||process.env.MCP_TRANSPORT==="http")&&hue().catch(e=>{console.error(e),process.exit(1)});
|
|
191
191
|
/*! Bundled license information:
|
|
192
192
|
|
|
193
193
|
depd/index.js:
|
package/mcp-server.js
CHANGED
|
@@ -83,6 +83,7 @@ server.tool(
|
|
|
83
83
|
'get_server_info',
|
|
84
84
|
desc.GET_SERVER_INFO,
|
|
85
85
|
{},
|
|
86
|
+
{ readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
86
87
|
traceTool('get_server_info', async () => mcpJsonOk({
|
|
87
88
|
name: pkg.name,
|
|
88
89
|
version: pkg.version,
|
|
@@ -99,6 +100,7 @@ server.tool(
|
|
|
99
100
|
query: z.string().describe('One or more search terms, comma-separated (e.g. "Lambda, S3, Amazon Personalize, API Gateway, CloudWatch")'),
|
|
100
101
|
partition: z.string().optional().describe('AWS partition to search in (default: "aws"). Valid values: "aws", "aws-iso", "aws-iso-b", "aws-eusc"'),
|
|
101
102
|
},
|
|
103
|
+
{ readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
102
104
|
traceTool('search_services', async ({ query, partition }) => {
|
|
103
105
|
const p = partition || 'aws';
|
|
104
106
|
const partErr = checkPartition(p);
|
|
@@ -120,6 +122,7 @@ server.tool(
|
|
|
120
122
|
service: z.string().describe('One or more service keys, comma-separated (e.g. "aWSLambda, amazonS3, stepFunctionStandard, amazonApiGateway")'),
|
|
121
123
|
partition: z.string().optional().describe('AWS partition to fetch from (default: "aws"). Valid values: "aws", "aws-iso", "aws-iso-b", "aws-eusc"'),
|
|
122
124
|
},
|
|
125
|
+
{ readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
123
126
|
traceTool('get_service_fields', async ({ service, partition }) => {
|
|
124
127
|
const p = partition || 'aws';
|
|
125
128
|
const partErr = checkPartition(p);
|
|
@@ -169,6 +172,7 @@ server.tool(
|
|
|
169
172
|
name: z.string().optional().describe('Name for the estimate (default: "My Estimate")'),
|
|
170
173
|
partition: z.string().optional().describe('AWS partition for this estimate (default: "aws"). Valid values: "aws", "aws-iso", "aws-iso-b", "aws-eusc"'),
|
|
171
174
|
},
|
|
175
|
+
{ readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
172
176
|
traceTool('create_estimate', async ({ name, partition }) => {
|
|
173
177
|
const partErr = checkPartition(partition);
|
|
174
178
|
if (partErr) return partErr;
|
|
@@ -194,6 +198,7 @@ server.tool(
|
|
|
194
198
|
estimate_id: z.string().describe('Estimate ID from create_estimate'),
|
|
195
199
|
services: z.string().describe('JSON array of service entries. Each entry: {"service":"serviceKey","instance":"optional","group":"optional","config":{...with region, description, and field values}}. Example: [{"service":"aWSLambda","group":"Prod","config":{"region":"eu-west-1","description":"Compute","numberOfRequests":{"value":"19","unit":"millionPerMonth"}}}]'),
|
|
196
200
|
},
|
|
201
|
+
{ readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
197
202
|
traceTool('add_service', async ({ estimate_id, services: servicesStr }) => {
|
|
198
203
|
const estimate = await estimates.get(estimate_id);
|
|
199
204
|
if (!estimate) return estimateNotFoundResult(estimate_id);
|
|
@@ -217,6 +222,7 @@ server.tool(
|
|
|
217
222
|
'validate_estimate',
|
|
218
223
|
desc.VALIDATE_ESTIMATE,
|
|
219
224
|
{ estimate_id: z.string().describe('Estimate ID from create_estimate or build_estimate') },
|
|
225
|
+
{ readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
220
226
|
traceTool('validate_estimate', async ({ estimate_id }) => {
|
|
221
227
|
const estimate = await estimates.get(estimate_id);
|
|
222
228
|
if (!estimate) return estimateNotFoundResult(estimate_id);
|
|
@@ -245,6 +251,7 @@ server.tool(
|
|
|
245
251
|
'export_estimate',
|
|
246
252
|
desc.EXPORT_ESTIMATE,
|
|
247
253
|
{ estimate_id: z.string().describe('Estimate ID from create_estimate') },
|
|
254
|
+
{ readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
|
|
248
255
|
traceTool('export_estimate', async ({ estimate_id }) => {
|
|
249
256
|
const estimate = await estimates.get(estimate_id);
|
|
250
257
|
if (!estimate) return estimateNotFoundResult(estimate_id);
|
|
@@ -342,6 +349,7 @@ server.tool(
|
|
|
342
349
|
name: z.string().optional().describe('Estimate name (default: "My Estimate")'),
|
|
343
350
|
partition: z.string().optional().describe('AWS partition (default: "aws"). Valid values: "aws", "aws-iso", "aws-iso-b", "aws-eusc", "aws-eusc"'),
|
|
344
351
|
},
|
|
352
|
+
{ readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
|
|
345
353
|
traceTool('build_estimate', buildEstimateHandler)
|
|
346
354
|
);
|
|
347
355
|
|
|
@@ -352,6 +360,7 @@ server.tool(
|
|
|
352
360
|
estimate_id: z.string().describe('Estimate ID or full calculator.aws URL (e.g. "bedb9a10..." or "https://calculator.aws/#/estimate?id=bedb9a10...")'),
|
|
353
361
|
format: z.enum(['json', 'markdown']).optional().describe('Output format: "json" for raw data (default), "markdown" for LLM-friendly summary'),
|
|
354
362
|
},
|
|
363
|
+
{ readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
355
364
|
traceTool('import_estimate', async ({ estimate_id, format }) => {
|
|
356
365
|
// Extract ID from URL if needed
|
|
357
366
|
let id = estimate_id;
|
|
@@ -382,7 +391,7 @@ async function main() {
|
|
|
382
391
|
// nosemgrep: lazy-load-module
|
|
383
392
|
const express = require('express');
|
|
384
393
|
const app = express();
|
|
385
|
-
app.use(express.json());
|
|
394
|
+
app.use(express.json({ limit: '10mb' }));
|
|
386
395
|
// No CSRF middleware: this endpoint speaks JSON-RPC, not HTML forms.
|
|
387
396
|
// It uses no cookies and relies on transport-level auth (bearer token /
|
|
388
397
|
// SigV4 / network policy) configured by the deployment, not browser
|