{"name":"Sindri","description":"Utility APIs for AI agents — coding, identity, finance, math, and science tools, plus live weather/FX/crypto data.","keywords":["coding utilities API","fake data generator","password generator API","UUID generator","slug generator","FIRE calculator","mortgage calculator","rental property ROI calculator","savings rate calculator","weather API","currency exchange rate API","crypto price API","matrix operations API","unit conversion API","astronomy ephemeris API","physical constants API","base64 encode","base64 decode","SHA-256 hash","MD5 hash","regex tester","JSON Schema validator","x402","agent payments","pay-per-call API","no-auth API","micropayments","USDC","Base network"],"categories":["coding","identity","finance","data","math","science"],"pricing":{"amount":"$0.01","currency":"USDC","network":"Base","protocol":"x402"},"authRequired":false,"resources":[{"method":"POST","path":"/isEmail","price":"$0.01","description":"Email validation API. Checks whether a string is a syntactically valid email address using the same production-grade validation library trusted across the Node.js ecosystem, catching edge cases a quick regex misses. Returns true or false.","inputSchema":{"type":"object","properties":{"value":{"type":"string","description":"The string to validate as an email address."}},"required":["value"]},"output":{"example":{"ok":true,"data":{"result":true,"params":{"value":"a@b.com"}}}}},{"method":"POST","path":"/isURL","price":"$0.01","description":"URL validation API. Checks whether a string is a syntactically valid URL, catching malformed schemes, hosts, and encoding edge cases a naive check misses. Returns true or false.","inputSchema":{"type":"object","properties":{"value":{"type":"string","description":"The string to validate as a URL."}},"required":["value"]},"output":{"example":{"ok":true,"data":{"result":true,"params":{"value":"https://example.com"}}}}},{"method":"POST","path":"/base64Encode","price":"$0.01","description":"Base64 encoder API. Encodes UTF-8 text to base64 instantly and correctly — skip burning agent tokens hand-computing base64, which LLMs frequently get wrong on padding and edge cases.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"The plain text to encode."}},"required":["text"]},"output":{"example":{"ok":true,"data":{"result":"aGVsbG8=","params":{"text":"hello"}}}}},{"method":"POST","path":"/base64Decode","price":"$0.01","description":"Base64 decoder API. Decodes a base64 string back to UTF-8 text instantly and correctly, avoiding the padding and charset errors LLMs make when decoding base64 by hand.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"The base64-encoded string to decode."}},"required":["text"]},"output":{"example":{"ok":true,"data":{"result":"hello","params":{"text":"aGVsbG8="}}}}},{"method":"POST","path":"/hashSHA256","price":"$0.01","description":"SHA-256 hash generator API. Computes the SHA-256 hex digest of any text. Deterministic and instant — an LLM cannot reliably compute real cryptographic hashes on its own.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"The text to hash."}},"required":["text"]},"output":{"example":{"ok":true,"data":{"result":"2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824","params":{"text":"hello"}}}}},{"method":"POST","path":"/hashMD5","price":"$0.01","description":"MD5 hash generator API. Computes the MD5 hex digest of any text. Deterministic and instant — an LLM cannot reliably compute real cryptographic hashes on its own.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"The text to hash."}},"required":["text"]},"output":{"example":{"ok":true,"data":{"result":"5d41402abc4b2a76b9719d911017c592","params":{"text":"hello"}}}}},{"method":"POST","path":"/urlEncode","price":"$0.01","description":"URL encoder API. Percent-encodes text for safe use in a URL query string or path segment, handling reserved-character rules LLMs often get wrong by hand.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"The text to URL-encode."}},"required":["text"]},"output":{"example":{"ok":true,"data":{"result":"hello%20world","params":{"text":"hello world"}}}}},{"method":"POST","path":"/urlDecode","price":"$0.01","description":"URL decoder API. Decodes percent-encoded URL text back to plain text.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"The percent-encoded text to decode."}},"required":["text"]},"output":{"example":{"ok":true,"data":{"result":"hello world","params":{"text":"hello%20world"}}}}},{"method":"POST","path":"/generatePassword","price":"$0.01","description":"Secure password generator API. Generates a cryptographically random password — true randomness an LLM cannot produce on its own. Accepts optional length (8-128), per-character-class toggles (uppercase/lowercase/numbers/symbols) with guaranteed inclusion, and a pronounceable easy-to-say mode.","inputSchema":{"type":"object","properties":{"length":{"type":"integer","minimum":8,"maximum":128,"default":16,"description":"Desired password length. Defaults to 16."},"includeUppercase":{"type":"boolean","default":true,"description":"Include uppercase letters. Defaults to true."},"includeLowercase":{"type":"boolean","default":true,"description":"Include lowercase letters. Defaults to true."},"includeNumbers":{"type":"boolean","default":true,"description":"Include digits. Defaults to true."},"includeSymbols":{"type":"boolean","default":true,"description":"Include symbols. Defaults to true."},"pronounceable":{"type":"boolean","default":false,"description":"Generate an easy-to-say alternating consonant/vowel password instead. Defaults to false."}},"required":[]},"output":{"example":{"ok":true,"data":{"result":"aB3!xQ9zR7@kLp2M","params":{"length":16,"includeUppercase":true,"includeLowercase":true,"includeNumbers":true,"includeSymbols":true,"pronounceable":false}}}}},{"method":"POST","path":"/generateUUID","price":"$0.01","description":"UUID generator API. Generates a random RFC 4122 version 4 UUID using a cryptographically secure source — not the pseudo-random, collision-prone IDs an LLM would invent. No input required.","inputSchema":{"type":"object","properties":{},"required":[]},"output":{"example":{"ok":true,"data":{"result":"3f2504e0-4f89-4a1e-9c3d-6d1e2f8a9b7c"}}}},{"method":"POST","path":"/generateSlug","price":"$0.01","description":"Slug generator API. Converts any text into a clean, URL-safe slug (lowercase, hyphen-separated, unicode-aware), handling punctuation and accented-character edge cases a naive regex misses.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"The text to slugify."}},"required":["text"]},"output":{"example":{"ok":true,"data":{"result":"hello-world","params":{"text":"Hello World"}}}}},{"method":"POST","path":"/generateNumberData","price":"$0.01","description":"True-random-number generator API. Generates a bounded random number via one of: int, float, binary, octal, hex, bigInt (returned as a string), romanNumeral. Accepts optional locale (default en_US). Numeric args (min, max, multipleOf) are capped to +/-1e15; fractionDigits is capped to 0-20.","inputSchema":{"type":"object","properties":{"field":{"type":"string","enum":["int","float","binary","octal","hex","bigInt","romanNumeral"],"description":"Which number-generation method to call."},"args":{"type":"object","description":"Method-specific options, e.g. {\"min\":1,\"max\":100}."},"locale":{"type":"string","default":"en_US","description":"Locale code, e.g. \"en_US\", \"de\"."}},"required":["field"]},"output":{"example":{"ok":true,"data":{"result":93,"params":{"locale":"en_US","field":"int","min":1,"max":100}}}}},{"method":"POST","path":"/generateStringData","price":"$0.01","description":"True-random-string generator API. Generates a bounded random string via one of: alpha, alphanumeric, binary, octal, hexadecimal, numeric, sample, uuid, ulid, nanoid, symbol. Accepts optional locale (default en_US). length/count-style args are capped to 0-1000.","inputSchema":{"type":"object","properties":{"field":{"type":"string","enum":["alpha","alphanumeric","binary","octal","hexadecimal","numeric","sample","uuid","ulid","nanoid","symbol"],"description":"Which string-generation method to call."},"args":{"type":"object","description":"Method-specific options, e.g. {\"length\":16}."},"locale":{"type":"string","default":"en_US","description":"Locale code, e.g. \"en_US\", \"de\"."}},"required":["field"]},"output":{"example":{"ok":true,"data":{"result":"WqjkDEYH","params":{"locale":"en_US","field":"alpha","length":8}}}}},{"method":"POST","path":"/generateDateData","price":"$0.01","description":"True-random-date generator API. Generates a bounded random date via one of: anytime, past, future, between, betweens, recent, soon, birthdate. between/betweens require \"from\" and \"to\" date strings. Accepts optional locale (default en_US). Date args must parse to a valid date with year 1000-9999.","inputSchema":{"type":"object","properties":{"field":{"type":"string","enum":["anytime","past","future","between","betweens","recent","soon","birthdate"],"description":"Which date-generation method to call."},"args":{"type":"object","description":"Method-specific options, e.g. {\"from\":\"2020-01-01\",\"to\":\"2020-12-31\"}."},"locale":{"type":"string","default":"en_US","description":"Locale code, e.g. \"en_US\", \"de\"."}},"required":["field"]},"output":{"example":{"ok":true,"data":{"result":"2020-12-05T07:26:13.104Z","params":{"locale":"en_US","field":"between","from":"2020-01-01","to":"2020-12-31"}}}}},{"method":"POST","path":"/generateGeoCoordinate","price":"$0.01","description":"True-random-geo-coordinate generator API. Generates a bounded random latitude, longitude, or a coordinate near a given origin (via one of: latitude, longitude, nearbyGPSCoordinate). Accepts optional locale (default en_US). Numeric args are capped to +/-1e15; precision is capped to 0-20; origin must be a [latitude, longitude] pair.","inputSchema":{"type":"object","properties":{"field":{"type":"string","enum":["latitude","longitude","nearbyGPSCoordinate"],"description":"Which geo-coordinate generation method to call."},"args":{"type":"object","description":"Method-specific options, e.g. {\"min\":10,\"max\":20} or {\"origin\":[10,20],\"radius\":5}."},"locale":{"type":"string","default":"en_US","description":"Locale code, e.g. \"en_US\", \"de\"."}},"required":["field"]},"output":{"example":{"ok":true,"data":{"result":19.2962,"params":{"locale":"en_US","field":"latitude","min":10,"max":20}}}}},{"method":"POST","path":"/generateInternetData","price":"$0.01","description":"Network-format generator API. Generates a valid ipv4/ipv6 address (optionally within a CIDR block or named network range) or a well-formed JWT string (via one of: ipv4, ipv6, jwt). Accepts optional locale (default en_US). jwt header/payload objects are capped to 2000 serialized characters.","inputSchema":{"type":"object","properties":{"field":{"type":"string","enum":["ipv4","ipv6","jwt"],"description":"Which network-format generation method to call."},"args":{"type":"object","description":"Method-specific options, e.g. {\"network\":\"private-a\"} or {\"header\":{},\"payload\":{}}."},"locale":{"type":"string","default":"en_US","description":"Locale code, e.g. \"en_US\", \"de\"."}},"required":["field"]},"output":{"example":{"ok":true,"data":{"result":"237.251.81.252","params":{"locale":"en_US","field":"ipv4"}}}}},{"method":"POST","path":"/generateFinanceData","price":"$0.01","description":"Checksummed-financial-identifier generator API. Generates a structurally valid iban, bic, creditCardNumber, bitcoinAddress, litecoinAddress, ethereumAddress, or routingNumber, each computed with its real checksum algorithm (mod-97, Luhn, EIP-55, etc.). Accepts optional locale (default en_US).","inputSchema":{"type":"object","properties":{"field":{"type":"string","enum":["iban","bic","creditCardNumber","bitcoinAddress","litecoinAddress","ethereumAddress","routingNumber"],"description":"Which checksummed financial identifier to generate."},"args":{"type":"object","description":"Method-specific options, e.g. {\"issuer\":\"visa\"}."},"locale":{"type":"string","default":"en_US","description":"Locale code, e.g. \"en_US\", \"de\"."}},"required":["field"]},"output":{"example":{"ok":true,"data":{"result":"TN8510696690038964497008","params":{"locale":"en_US","field":"iban"}}}}},{"method":"POST","path":"/generateChecksumFormat","price":"$0.01","description":"Checksummed-identifier-format generator API. Generates a structurally valid isbn, upc, vin, or imei, each computed with its real check-digit algorithm. vin and imei take no arguments. Accepts optional locale (default en_US).","inputSchema":{"type":"object","properties":{"field":{"type":"string","enum":["isbn","upc","vin","imei"],"description":"Which checksummed identifier format to generate."},"args":{"type":"object","description":"Method-specific options, e.g. {\"variant\":13} for isbn. Not accepted for vin/imei."},"locale":{"type":"string","default":"en_US","description":"Locale code, e.g. \"en_US\", \"de\"."}},"required":["field"]},"output":{"example":{"ok":true,"data":{"result":"XA66JKYM3MUY01268","params":{"locale":"en_US","field":"vin"}}}}},{"method":"POST","path":"/getCurrencyRate","price":"$0.01","description":"Live currency exchange rate API. Returns the current exchange rate between any two ISO 4217 currency codes (e.g. USD to EUR) — live external data an LLM cannot know on its own.","inputSchema":{"type":"object","properties":{"from":{"type":"string","description":"Source currency code, e.g. \"USD\"."},"to":{"type":"string","description":"Target currency code, e.g. \"EUR\"."}},"required":["from","to"]},"output":{"example":{"ok":true,"data":{"rate":0.92,"params":{"from":"USD","to":"EUR"}}}}},{"method":"POST","path":"/getCurrentCryptoPrice","price":"$0.01","description":"Live cryptocurrency price API. Returns the current market price (in USD) of any cryptocurrency by ticker symbol (BTC, ETH, DOGE, etc.) — live market data an LLM cannot know on its own.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Cryptocurrency ticker symbol, e.g. \"BTC\"."}},"required":["symbol"]},"output":{"example":{"ok":true,"data":{"symbol":"BTC","priceUSD":"65000.00","params":{"symbol":"BTC"}}}}},{"method":"POST","path":"/getWeather","price":"$0.01","description":"Live weather API. Returns real-time weather conditions, temperature, feels-like temperature, humidity, wind speed, precipitation, and UV index for any city worldwide — live external data an LLM cannot know on its own. Supports metric/imperial units, 74 languages, and optional 3-day forecast and sun/moon astronomy data.","inputSchema":{"type":"object","properties":{"city":{"type":"string","description":"City name, e.g. \"san-francisco\" or \"london\"."},"units":{"type":"string","enum":["metric","imperial"],"default":"metric","description":"Unit system for temperature and wind speed. Defaults to \"metric\"."},"lang":{"type":"string","default":"en","description":"Language code for the weather conditions text, e.g. \"de\" or \"fr\". Passed through to the weather provider. Defaults to English."},"includeForecast":{"type":"boolean","default":false,"description":"Include a 3-day forecast (min/max/avg temp, UV index, sun hours per day). Defaults to false."},"includeAstronomy":{"type":"boolean","default":false,"description":"Include today's sunrise, sunset, moonrise, moonset, and moon phase. Defaults to false."}},"required":["city"]},"output":{"example":{"ok":true,"data":{"conditions":"Foggy","temperature":"15","feelsLike":"14","humidity":"80","windSpeed":"10","precipitationMM":"0.2","uvIndex":"3","params":{"city":"san-francisco","units":"metric","lang":"en","includeForecast":false,"includeAstronomy":false}}}}},{"method":"POST","path":"/fireCalculator","price":"$0.01","description":"FIRE (Financial Independence, Retire Early) calculator. Projects year-by-year net worth growth to determine how many years until your portfolio can sustainably fund retirement spending at a given safe withdrawal rate — precise compound-growth simulation an LLM cannot reliably run mentally. incomeGrowthRate is deflated by inflationRate internally. Past retirementAge the simulation draws down retirementAnnualSpending with no further income.","inputSchema":{"type":"object","properties":{"currentAge":{"type":"number","description":"Your current age in years (0-100)."},"currentAnnualIncome":{"type":"number","description":"Current annual take-home income."},"currentAnnualSpending":{"type":"number","description":"Current annual spending."},"retirementAnnualSpending":{"type":"number","description":"Expected annual spending in retirement."},"currentNetWorth":{"type":"number","description":"Current invested net worth."},"investmentReturnRate":{"type":"number","description":"Expected annual investment return, as a fraction (e.g. 0.07). Default 0.07. Ignored if assetAllocations is provided.","default":0.07},"assetAllocations":{"type":"array","description":"Optional multi-asset breakdown, e.g. [{name:\"Stocks\",percent:0.9,returnRate:0.08},{name:\"Cash\",percent:0.1,returnRate:0.005}] for a 90% stocks / 10% cash portfolio. Percentages must sum to 1 (within 1%). When provided, the weighted-average return replaces investmentReturnRate.","items":{"type":"object","properties":{"name":{"type":"string","description":"Label for this asset class (e.g. \"Stocks\", \"Bonds\", \"Cash\", \"Other\"). Required."},"percent":{"type":"number","description":"Fraction of the portfolio in this asset class (0-1)."},"returnRate":{"type":"number","description":"Expected annual return for this asset class, as a fraction."}},"required":["name","percent","returnRate"]}},"inflationRate":{"type":"number","description":"Expected annual inflation rate, as a fraction. Default 0.03.","default":0.03},"swr":{"type":"number","description":"Safe withdrawal rate, as a fraction. Default 0.04.","default":0.04},"incomeGrowthRate":{"type":"number","description":"Expected annual (nominal) income growth rate, as a fraction. Default 0. Deflated by inflationRate before use, same as investmentReturnRate.","default":0},"retirementAge":{"type":"number","description":"Age at which you stop earning income and switch to drawing down retirementAnnualSpending each year (between currentAge and 100). Default 67.","default":67},"pretaxAnnualIncome":{"type":"number","description":"Pre-tax annual salary, used only to compute employerMatchPercent. Default: same as currentAnnualIncome."},"employerMatchPercent":{"type":"number","description":"Employer retirement-account match, as a fraction of pretaxAnnualIncome (0-1). Default 0.","default":0}},"required":["currentAge","currentAnnualIncome","currentAnnualSpending","retirementAnnualSpending","currentNetWorth"]},"output":{"example":{"ok":true,"data":{"fireNumber":1000000,"yearsToFI":27,"projectedAge":57,"netWorthTrajectory":[{"year":0,"netWorth":200000}],"params":{"currentAge":30,"currentAnnualIncome":80000,"currentAnnualSpending":50000,"retirementAnnualSpending":40000,"currentNetWorth":200000,"investmentReturnRate":0.07,"inflationRate":0.03,"swr":0.04,"incomeGrowthRate":0,"retirementAge":67,"pretaxAnnualIncome":80000,"employerMatchPercent":0}}}}},{"method":"POST","path":"/coastFireCalculator","price":"$0.01","description":"Coast FIRE calculator. Computes the lump sum needed today, invested with zero further contributions, to grow into your full retirement number by your target retirement age, plus (given an ongoing monthly contribution) a year-by-year projection of when your actual trajectory crosses that lump sum.","inputSchema":{"type":"object","properties":{"currentAge":{"type":"number","description":"Your current age in years."},"retirementAge":{"type":"number","description":"Target traditional retirement age. Default 67.","default":67},"currentNetWorth":{"type":"number","description":"Current invested net worth."},"retirementAnnualSpending":{"type":"number","description":"Expected annual spending in retirement."},"monthlyContribution":{"type":"number","description":"Ongoing monthly contribution toward currentNetWorth. Default 0.","default":0},"investmentReturnRate":{"type":"number","description":"Expected annual investment return, as a fraction. Default 0.07.","default":0.07},"inflationRate":{"type":"number","description":"Expected annual inflation rate, as a fraction. Default 0.03.","default":0.03},"swr":{"type":"number","description":"Safe withdrawal rate, as a fraction. Default 0.04.","default":0.04}},"required":["currentAge","currentNetWorth","retirementAnnualSpending"]},"output":{"example":{"ok":true,"data":{"fireNumberAtRetirement":1000000,"coastFireNumberToday":253415.47072729058,"hasCoastFired":false,"surplusOrDeficit":-153415.47072729058,"yearsToCoastFire":null,"coastFireMessage":"You need to increase your monthly contribution to reach Coast FIRE before age 65","params":{"currentAge":30,"retirementAge":65,"currentNetWorth":100000,"retirementAnnualSpending":40000,"investmentReturnRate":0.07,"inflationRate":0.03,"swr":0.04,"monthlyContribution":0}}}}},{"method":"POST","path":"/fatFireCalculator","price":"$0.01","description":"Fat FIRE calculator. Same year-by-year compound-growth simulation as the standard FIRE calculator, framed for a higher, more lifestyle-preserving retirement spending target.","inputSchema":{"type":"object","properties":{"currentAge":{"type":"number","description":"Your current age in years."},"currentAnnualIncome":{"type":"number","description":"Current annual take-home income."},"currentAnnualSpending":{"type":"number","description":"Current annual spending."},"retirementAnnualSpending":{"type":"number","description":"Target (higher) annual spending in retirement."},"currentNetWorth":{"type":"number","description":"Current invested net worth."},"investmentReturnRate":{"type":"number","description":"Expected annual investment return, as a fraction. Default 0.07.","default":0.07},"inflationRate":{"type":"number","description":"Expected annual inflation rate, as a fraction. Default 0.03.","default":0.03},"swr":{"type":"number","description":"Safe withdrawal rate, as a fraction. Default 0.04.","default":0.04}},"required":["currentAge","currentAnnualIncome","currentAnnualSpending","retirementAnnualSpending","currentNetWorth"]},"output":{"example":{"ok":true,"data":{"fireNumber":5000000,"yearsToFI":25,"projectedAge":55,"netWorthTrajectory":[{"year":0,"netWorth":700000}],"params":{"currentAge":30,"currentAnnualIncome":300000,"currentAnnualSpending":150000,"retirementAnnualSpending":200000,"currentNetWorth":700000,"investmentReturnRate":0.07,"inflationRate":0.03,"swr":0.04,"incomeGrowthRate":0,"retirementAge":67,"pretaxAnnualIncome":300000,"employerMatchPercent":0}}}}},{"method":"POST","path":"/baristaFireCalculator","price":"$0.01","description":"Barista FIRE calculator. Simulates net worth growth through a full-time-saving phase and then a reduced-target phase funded partly by part-time/side income after quitting full-time work, until full financial independence is reached.","inputSchema":{"type":"object","properties":{"currentAge":{"type":"number","description":"Your current age in years."},"baristaAge":{"type":"number","description":"Age at which you switch to part-time/side income."},"currentAnnualIncome":{"type":"number","description":"Current full-time annual income."},"currentAnnualSpending":{"type":"number","description":"Current annual spending."},"baristaAnnualIncome":{"type":"number","description":"Expected part-time/side income after the barista transition."},"retirementAnnualSpending":{"type":"number","description":"Expected annual spending during the barista and retirement phases."},"currentNetWorth":{"type":"number","description":"Current invested net worth."},"investmentReturnRate":{"type":"number","description":"Expected annual investment return, as a fraction. Default 0.07.","default":0.07},"inflationRate":{"type":"number","description":"Expected annual inflation rate, as a fraction. Default 0.03.","default":0.03},"swr":{"type":"number","description":"Safe withdrawal rate, as a fraction. Default 0.04.","default":0.04}},"required":["currentAge","baristaAge","currentAnnualIncome","currentAnnualSpending","baristaAnnualIncome","retirementAnnualSpending","currentNetWorth"]},"output":{"example":{"ok":true,"data":{"fullFireNumber":1000000,"netWorthAtBaristaAge":780801.9796808785,"yearsToFullFI":24,"params":{"currentAge":30,"baristaAge":45,"currentAnnualIncome":80000,"currentAnnualSpending":50000,"baristaAnnualIncome":30000,"retirementAnnualSpending":40000,"currentNetWorth":100000,"investmentReturnRate":0.07,"inflationRate":0.03,"swr":0.04}}}}},{"method":"POST","path":"/windfallFireImpactCalculator","price":"$0.01","description":"Windfall impact on FIRE timeline calculator. Runs the FIRE net-worth simulation twice — with and without a one-time lump sum added at a given year — and reports how many years the windfall shaves off your time to financial independence.","inputSchema":{"type":"object","properties":{"currentAnnualIncome":{"type":"number","description":"Current annual take-home income."},"currentAnnualSpending":{"type":"number","description":"Current annual spending."},"retirementAnnualSpending":{"type":"number","description":"Expected annual spending in retirement."},"currentNetWorth":{"type":"number","description":"Current invested net worth."},"investmentReturnRate":{"type":"number","description":"Expected annual investment return, as a fraction. Default 0.07.","default":0.07},"inflationRate":{"type":"number","description":"Expected annual inflation rate, as a fraction. Default 0.03.","default":0.03},"swr":{"type":"number","description":"Safe withdrawal rate, as a fraction. Default 0.04.","default":0.04},"windfallAmount":{"type":"number","description":"One-time lump sum received."},"windfallYear":{"type":"number","description":"Number of years from now the windfall is received. Default 0.","default":0}},"required":["currentAnnualIncome","currentAnnualSpending","retirementAnnualSpending","currentNetWorth","windfallAmount"]},"output":{"example":{"ok":true,"data":{"fireNumber":1000000,"baselineYearsToFI":20,"withWindfallYearsToFI":19,"yearsSaved":1,"params":{"currentAnnualIncome":80000,"currentAnnualSpending":50000,"retirementAnnualSpending":40000,"currentNetWorth":50000,"investmentReturnRate":0.07,"inflationRate":0.03,"swr":0.04,"windfallAmount":50000,"windfallYear":0}}}}},{"method":"POST","path":"/purchaseFireImpactCalculator","price":"$0.01","description":"Purchase impact on FIRE timeline calculator. Runs the FIRE net-worth simulation twice — with and without a one-time purchase amount deducted at a given year — and reports how many years that purchase delays financial independence, quantifying its true opportunity cost.","inputSchema":{"type":"object","properties":{"currentAnnualIncome":{"type":"number","description":"Current annual take-home income."},"currentAnnualSpending":{"type":"number","description":"Current annual spending."},"retirementAnnualSpending":{"type":"number","description":"Expected annual spending in retirement."},"currentNetWorth":{"type":"number","description":"Current invested net worth."},"investmentReturnRate":{"type":"number","description":"Expected annual investment return, as a fraction. Default 0.07.","default":0.07},"inflationRate":{"type":"number","description":"Expected annual inflation rate, as a fraction. Default 0.03.","default":0.03},"swr":{"type":"number","description":"Safe withdrawal rate, as a fraction. Default 0.04.","default":0.04},"purchaseAmount":{"type":"number","description":"One-time purchase amount."},"purchaseYear":{"type":"number","description":"Number of years from now the purchase is made. Default 0.","default":0}},"required":["currentAnnualIncome","currentAnnualSpending","retirementAnnualSpending","currentNetWorth","purchaseAmount"]},"output":{"example":{"ok":true,"data":{"fireNumber":1000000,"baselineYearsToFI":20,"withPurchaseYearsToFI":21,"yearsDelayed":1,"params":{"currentAnnualIncome":80000,"currentAnnualSpending":50000,"retirementAnnualSpending":40000,"currentNetWorth":50000,"investmentReturnRate":0.07,"inflationRate":0.03,"swr":0.04,"purchaseAmount":20000,"purchaseYear":0}}}}},{"method":"POST","path":"/loanPaymentCalculator","price":"$0.01","description":"Loan payment calculator. Computes the fixed monthly payment for a standard amortizing loan and returns the full month-by-month principal/interest/balance schedule — exact amortization math an LLM cannot reliably compute by hand for hundreds of periods.","inputSchema":{"type":"object","properties":{"principal":{"type":"number","description":"Loan principal amount."},"annualRate":{"type":"number","description":"Annual interest rate, as a fraction (e.g. 0.06 for 6%)."},"termYears":{"type":"number","description":"Loan term in years (1-50). Default 20.","default":20}},"required":["principal","annualRate"]},"output":{"example":{"ok":true,"data":{"monthlyPayment":1199.1,"totalPaid":431676.38,"totalInterest":231676.38,"amortizationSchedule":[{"month":1,"principalPaid":199.1,"interestPaid":1000,"remainingBalance":199800.9}],"params":{"principal":200000,"annualRate":0.06,"termYears":30}}}}},{"method":"POST","path":"/mortgageComparisonCalculator","price":"$0.01","description":"15-year vs 30-year mortgage comparison calculator. Computes monthly payment and total interest for both loan terms on the same purchase price and down payment, and reports the payment and lifetime-interest tradeoff between them.","inputSchema":{"type":"object","properties":{"purchasePrice":{"type":"number","description":"Home purchase price."},"downPaymentPercent":{"type":"number","description":"Down payment as a fraction of purchase price (0-1). Default 0.2.","default":0.2},"interestRate15":{"type":"number","description":"Annual interest rate for the 15-year loan, as a fraction."},"interestRate30":{"type":"number","description":"Annual interest rate for the 30-year loan, as a fraction."}},"required":["purchasePrice","interestRate15","interestRate30"]},"output":{"example":{"ok":true,"data":{"fifteenYear":{"monthlyPayment":1961.0002910907206,"totalInterest":112980.05239633351,"totalPaid":352980.0523963297},"thirtyYear":{"monthlyPayment":1516.9632563831167,"totalInterest":306106.7722979182,"totalPaid":546106.772297922},"monthlyPaymentDifference":444.0370347076039,"totalInterestSavings":193126.7199015847,"params":{"purchasePrice":300000,"downPaymentPercent":0.2,"interestRate15":0.055,"interestRate30":0.065}}}}},{"method":"POST","path":"/compoundInterestCalculator","price":"$0.01","description":"Compound interest calculator. Projects the ending value of an investment given a starting principal, monthly contributions, and an annual interest rate, compounded monthly over a chosen number of years.","inputSchema":{"type":"object","properties":{"initialInvestment":{"type":"number","description":"Starting principal."},"years":{"type":"number","description":"Number of years to project (1-100)."},"monthlyContribution":{"type":"number","description":"Recurring monthly contribution."},"annualInterestRate":{"type":"number","description":"Annual interest rate, as a fraction (e.g. 0.07)."}},"required":["initialInvestment","years","monthlyContribution","annualInterestRate"]},"output":{"example":{"ok":true,"data":{"endingValue":144572.72045492515,"totalContributions":58000,"totalGrowth":86572.72045492515,"yearlyBalances":[13201.41786649044,16634.266489404075,20315.276016835352,24262.386020637212,28494.83292576237,33033.243759878744,37899.736680152215,43118.02876711856,48713.55161098314,54713.57525366362,61147.3410906128,68046.20438012511,75443.78705465242,83376.14157886199,91881.92665300699,101002.5956179077,110782.59847974403,121269.59853923674,132514.70468096953,144572.72045492515],"params":{"initialInvestment":10000,"years":20,"monthlyContribution":200,"annualInterestRate":0.07}}}}},{"method":"POST","path":"/capRateCalculator","price":"$0.01","description":"Cap rate calculator for real estate investing. Runs a full multi-year deal analysis (per-category rent/expense growth, a sale scenario, IRR) and headlines the capitalization rate: first-year NOI divided by purchase price.","inputSchema":{"type":"object","properties":{"purchasePrice":{"type":"number","description":"Property purchase price."},"downPaymentPercent":{"type":"number","description":"Down payment as a fraction of purchase price (0-1). Use 1 for an all-cash purchase."},"interestRate":{"type":"number","description":"Annual mortgage interest rate, as a fraction. Ignored if downPaymentPercent is 1."},"loanTermYears":{"type":"number","description":"Loan term in years (1-50). Ignored if downPaymentPercent is 1."},"closingCosts":{"type":"number","description":"Closing costs. Default 0.","default":0},"rehabCosts":{"type":"number","description":"Upfront rehab/improvement costs. Default 0.","default":0},"monthlyRent":{"type":"number","description":"Total monthly rent collected, before vacancy/management fee."},"rentAnnualIncrease":{"type":"number","description":"Annual rent growth rate, as a fraction. Default 0.03.","default":0.03},"propertyManagementFeeRate":{"type":"number","description":"Property management fee, as a fraction of gross rent (0-1). Default 0.10.","default":0.1},"vacancyRate":{"type":"number","description":"Expected vacancy rate, as a fraction (0-1). Default 0.08.","default":0.08},"annualPropertyTaxes":{"type":"number","description":"Annual property taxes in the first year."},"taxesAnnualIncrease":{"type":"number","description":"Annual property tax growth rate, as a fraction. Default 0.03.","default":0.03},"annualInsurance":{"type":"number","description":"Annual landlord insurance in the first year."},"insuranceAnnualIncrease":{"type":"number","description":"Annual insurance growth rate, as a fraction. Default 0.03.","default":0.03},"monthlyHOA":{"type":"number","description":"Monthly HOA fee. Default 0.","default":0},"hoaAnnualIncrease":{"type":"number","description":"Annual HOA fee growth rate, as a fraction. Default 0.03.","default":0.03},"annualMaintenance":{"type":"number","description":"Annual maintenance budget in the first year."},"maintenanceAnnualIncrease":{"type":"number","description":"Annual maintenance cost growth rate, as a fraction. Default 0.03.","default":0.03},"otherAnnualExpenses":{"type":"number","description":"Other annual operating expenses in the first year. Default 0.","default":0},"otherAnnualIncrease":{"type":"number","description":"Annual growth rate for other expenses, as a fraction. Default 0.03.","default":0.03},"salePrice":{"type":"number","description":"Expected sale price at the end of the holding period."},"saleExpensesRate":{"type":"number","description":"Sale costs (agent commission, closing costs, etc.), as a fraction of sale price (0-1). Default 0.09.","default":0.09},"holdingLengthYears":{"type":"number","description":"Number of years you plan to hold the property before selling (1-50)."}},"required":["purchasePrice","downPaymentPercent","interestRate","loanTermYears","monthlyRent","annualPropertyTaxes","annualInsurance","annualMaintenance","salePrice","holdingLengthYears"]},"output":{"example":{"ok":true,"data":{"investedCash":40000,"monthlyMortgagePayment":1333.33,"firstYear":{"NOI":24000,"capRate":0.12,"cashOnCashReturn":0.2,"cashFlow":8000},"totals":{"rentalIncome":48000,"mortgagePayments":32000,"expenses":0,"NOI":48000,"operatingCashFlow":16000},"sale":{"netProceeds":72000,"totalProfitAfterSale":48000,"impliedAnnualGrowthRate":0},"irr":0.5177,"yearByYear":[{"year":1,"annualIncome":24000,"annualMortgagePayment":16000,"annualExpenses":0,"NOI":24000,"annualCashFlow":8000,"annualCoCReturn":0.2,"interestPortion":0,"principalPortion":16000,"loanBalance":144000,"totalEquity":56000}],"params":{"purchasePrice":200000,"downPaymentPercent":0.2,"interestRate":0,"loanTermYears":10,"closingCosts":0,"rehabCosts":0,"monthlyRent":2000,"rentAnnualIncrease":0,"propertyManagementFeeRate":0,"vacancyRate":0,"annualPropertyTaxes":0,"taxesAnnualIncrease":0,"annualInsurance":0,"insuranceAnnualIncrease":0,"monthlyHOA":0,"hoaAnnualIncrease":0,"annualMaintenance":0,"maintenanceAnnualIncrease":0,"otherAnnualExpenses":0,"otherAnnualIncrease":0,"salePrice":200000,"saleExpensesRate":0,"holdingLengthYears":2}}}}},{"method":"POST","path":"/cashOnCashReturnCalculator","price":"$0.01","description":"Cash-on-cash return calculator for real estate investing. Runs a full multi-year deal analysis (per-category rent/expense growth, a sale scenario, IRR) and headlines the first-year cash-on-cash return: operating cash flow divided by invested cash.","inputSchema":{"type":"object","properties":{"purchasePrice":{"type":"number","description":"Property purchase price."},"downPaymentPercent":{"type":"number","description":"Down payment as a fraction of purchase price (0-1). Use 1 for an all-cash purchase."},"interestRate":{"type":"number","description":"Annual mortgage interest rate, as a fraction. Ignored if downPaymentPercent is 1."},"loanTermYears":{"type":"number","description":"Loan term in years (1-50). Ignored if downPaymentPercent is 1."},"closingCosts":{"type":"number","description":"Closing costs. Default 0.","default":0},"rehabCosts":{"type":"number","description":"Upfront rehab/improvement costs. Default 0.","default":0},"monthlyRent":{"type":"number","description":"Total monthly rent collected, before vacancy/management fee."},"rentAnnualIncrease":{"type":"number","description":"Annual rent growth rate, as a fraction. Default 0.03.","default":0.03},"propertyManagementFeeRate":{"type":"number","description":"Property management fee, as a fraction of gross rent (0-1). Default 0.10.","default":0.1},"vacancyRate":{"type":"number","description":"Expected vacancy rate, as a fraction (0-1). Default 0.08.","default":0.08},"annualPropertyTaxes":{"type":"number","description":"Annual property taxes in the first year."},"taxesAnnualIncrease":{"type":"number","description":"Annual property tax growth rate, as a fraction. Default 0.03.","default":0.03},"annualInsurance":{"type":"number","description":"Annual landlord insurance in the first year."},"insuranceAnnualIncrease":{"type":"number","description":"Annual insurance growth rate, as a fraction. Default 0.03.","default":0.03},"monthlyHOA":{"type":"number","description":"Monthly HOA fee. Default 0.","default":0},"hoaAnnualIncrease":{"type":"number","description":"Annual HOA fee growth rate, as a fraction. Default 0.03.","default":0.03},"annualMaintenance":{"type":"number","description":"Annual maintenance budget in the first year."},"maintenanceAnnualIncrease":{"type":"number","description":"Annual maintenance cost growth rate, as a fraction. Default 0.03.","default":0.03},"otherAnnualExpenses":{"type":"number","description":"Other annual operating expenses in the first year. Default 0.","default":0},"otherAnnualIncrease":{"type":"number","description":"Annual growth rate for other expenses, as a fraction. Default 0.03.","default":0.03},"salePrice":{"type":"number","description":"Expected sale price at the end of the holding period."},"saleExpensesRate":{"type":"number","description":"Sale costs (agent commission, closing costs, etc.), as a fraction of sale price (0-1). Default 0.09.","default":0.09},"holdingLengthYears":{"type":"number","description":"Number of years you plan to hold the property before selling (1-50)."}},"required":["purchasePrice","downPaymentPercent","interestRate","loanTermYears","monthlyRent","annualPropertyTaxes","annualInsurance","annualMaintenance","salePrice","holdingLengthYears"]},"output":{"example":{"ok":true,"data":{"investedCash":40000,"monthlyMortgagePayment":1333.33,"firstYear":{"NOI":24000,"capRate":0.12,"cashOnCashReturn":0.2,"cashFlow":8000},"totals":{"rentalIncome":48000,"mortgagePayments":32000,"expenses":0,"NOI":48000,"operatingCashFlow":16000},"sale":{"netProceeds":72000,"totalProfitAfterSale":48000,"impliedAnnualGrowthRate":0},"irr":0.5177,"yearByYear":[{"year":1,"annualIncome":24000,"annualMortgagePayment":16000,"annualExpenses":0,"NOI":24000,"annualCashFlow":8000,"annualCoCReturn":0.2,"interestPortion":0,"principalPortion":16000,"loanBalance":144000,"totalEquity":56000}],"params":{"purchasePrice":200000,"downPaymentPercent":0.2,"interestRate":0,"loanTermYears":10,"closingCosts":0,"rehabCosts":0,"monthlyRent":2000,"rentAnnualIncrease":0,"propertyManagementFeeRate":0,"vacancyRate":0,"annualPropertyTaxes":0,"taxesAnnualIncrease":0,"annualInsurance":0,"insuranceAnnualIncrease":0,"monthlyHOA":0,"hoaAnnualIncrease":0,"annualMaintenance":0,"maintenanceAnnualIncrease":0,"otherAnnualExpenses":0,"otherAnnualIncrease":0,"salePrice":200000,"saleExpensesRate":0,"holdingLengthYears":2}}}}},{"method":"POST","path":"/rentalPropertyCalculator","price":"$0.01","description":"Rental property investment calculator. Full multi-year deal analysis for a rental property deal: mortgage, per-category rent/expense growth, a sale scenario, IRR, and cumulative totals over the holding period, alongside the first-year NOI/cap-rate/cash-on-cash snapshot.","inputSchema":{"type":"object","properties":{"purchasePrice":{"type":"number","description":"Property purchase price."},"downPaymentPercent":{"type":"number","description":"Down payment as a fraction of purchase price (0-1). Use 1 for an all-cash purchase."},"interestRate":{"type":"number","description":"Annual mortgage interest rate, as a fraction. Ignored if downPaymentPercent is 1."},"loanTermYears":{"type":"number","description":"Loan term in years (1-50). Ignored if downPaymentPercent is 1."},"closingCosts":{"type":"number","description":"Closing costs. Default 0.","default":0},"rehabCosts":{"type":"number","description":"Upfront rehab/improvement costs. Default 0.","default":0},"monthlyRent":{"type":"number","description":"Total monthly rent collected, before vacancy/management fee."},"rentAnnualIncrease":{"type":"number","description":"Annual rent growth rate, as a fraction. Default 0.03.","default":0.03},"propertyManagementFeeRate":{"type":"number","description":"Property management fee, as a fraction of gross rent (0-1). Default 0.10.","default":0.1},"vacancyRate":{"type":"number","description":"Expected vacancy rate, as a fraction (0-1). Default 0.08.","default":0.08},"annualPropertyTaxes":{"type":"number","description":"Annual property taxes in the first year."},"taxesAnnualIncrease":{"type":"number","description":"Annual property tax growth rate, as a fraction. Default 0.03.","default":0.03},"annualInsurance":{"type":"number","description":"Annual landlord insurance in the first year."},"insuranceAnnualIncrease":{"type":"number","description":"Annual insurance growth rate, as a fraction. Default 0.03.","default":0.03},"monthlyHOA":{"type":"number","description":"Monthly HOA fee. Default 0.","default":0},"hoaAnnualIncrease":{"type":"number","description":"Annual HOA fee growth rate, as a fraction. Default 0.03.","default":0.03},"annualMaintenance":{"type":"number","description":"Annual maintenance budget in the first year."},"maintenanceAnnualIncrease":{"type":"number","description":"Annual maintenance cost growth rate, as a fraction. Default 0.03.","default":0.03},"otherAnnualExpenses":{"type":"number","description":"Other annual operating expenses in the first year. Default 0.","default":0},"otherAnnualIncrease":{"type":"number","description":"Annual growth rate for other expenses, as a fraction. Default 0.03.","default":0.03},"salePrice":{"type":"number","description":"Expected sale price at the end of the holding period."},"saleExpensesRate":{"type":"number","description":"Sale costs (agent commission, closing costs, etc.), as a fraction of sale price (0-1). Default 0.09.","default":0.09},"holdingLengthYears":{"type":"number","description":"Number of years you plan to hold the property before selling (1-50)."}},"required":["purchasePrice","downPaymentPercent","interestRate","loanTermYears","monthlyRent","annualPropertyTaxes","annualInsurance","annualMaintenance","salePrice","holdingLengthYears"]},"output":{"example":{"ok":true,"data":{"investedCash":40000,"monthlyMortgagePayment":1333.33,"firstYear":{"NOI":24000,"capRate":0.12,"cashOnCashReturn":0.2,"cashFlow":8000},"totals":{"rentalIncome":48000,"mortgagePayments":32000,"expenses":0,"NOI":48000,"operatingCashFlow":16000},"sale":{"netProceeds":72000,"totalProfitAfterSale":48000,"impliedAnnualGrowthRate":0},"irr":0.5177,"yearByYear":[{"year":1,"annualIncome":24000,"annualMortgagePayment":16000,"annualExpenses":0,"NOI":24000,"annualCashFlow":8000,"annualCoCReturn":0.2,"interestPortion":0,"principalPortion":16000,"loanBalance":144000,"totalEquity":56000}],"params":{"purchasePrice":200000,"downPaymentPercent":0.2,"interestRate":0,"loanTermYears":10,"closingCosts":0,"rehabCosts":0,"monthlyRent":2000,"rentAnnualIncrease":0,"propertyManagementFeeRate":0,"vacancyRate":0,"annualPropertyTaxes":0,"taxesAnnualIncrease":0,"annualInsurance":0,"insuranceAnnualIncrease":0,"monthlyHOA":0,"hoaAnnualIncrease":0,"annualMaintenance":0,"maintenanceAnnualIncrease":0,"otherAnnualExpenses":0,"otherAnnualIncrease":0,"salePrice":200000,"saleExpensesRate":0,"holdingLengthYears":2}}}}},{"method":"POST","path":"/houseHackingCalculator","price":"$0.01","description":"House hacking calculator. Nets rental income from other units/rooms against your mortgage payment and expenses, then adds back the equity you build via principal paydown and the market rent you avoid paying elsewhere, to compute the true monthly net-worth impact of living in and renting out part of a property.","inputSchema":{"type":"object","properties":{"purchasePrice":{"type":"number","description":"Property purchase price."},"downPaymentPercent":{"type":"number","description":"Down payment as a fraction of purchase price (0-1)."},"interestRate":{"type":"number","description":"Annual mortgage interest rate, as a fraction."},"loanTermYears":{"type":"number","description":"Loan term in years (1-50)."},"rentableUnits":{"type":"number","description":"Number of rentable units/rooms other than your own."},"rentPerUnit":{"type":"number","description":"Monthly rent charged per unit."},"vacancyRate":{"type":"number","description":"Expected vacancy rate, as a fraction (0-1)."},"propertyTaxRate":{"type":"number","description":"Annual property tax rate, as a fraction of purchase price (0-1)."},"annualInsurance":{"type":"number","description":"Annual homeowner/landlord insurance."},"monthlyHOA":{"type":"number","description":"Monthly HOA fee. Default 0.","default":0},"annualMaintenance":{"type":"number","description":"Annual maintenance budget."},"rentSavingsPerMonth":{"type":"number","description":"Market rent you avoid paying elsewhere by living in this property, per month. Default 0.","default":0}},"required":["purchasePrice","downPaymentPercent","interestRate","loanTermYears","rentableUnits","rentPerUnit","vacancyRate","propertyTaxRate","annualInsurance","annualMaintenance"]},"output":{"example":{"ok":true,"data":{"monthlyMortgagePayment":2401.8584892732683,"additionalExpensesMonthly":791.6666666666666,"averageIncomeMonthly":2208,"netCashFlowMonthly":-985.525155939935,"principalPaydownMonthly":343.52515593993485,"overallNetWorthImpactMonthly":557.9999999999999,"params":{"purchasePrice":400000,"downPaymentPercent":0.05,"interestRate":0.065,"loanTermYears":30,"rentableUnits":2,"rentPerUnit":1200,"vacancyRate":0.08,"propertyTaxRate":0.01,"annualInsurance":1500,"monthlyHOA":0,"annualMaintenance":4000,"rentSavingsPerMonth":1200}}}}},{"method":"POST","path":"/portfolioRebalancingCalculator","price":"$0.01","description":"Portfolio rebalancing calculator. Given current holdings and target allocation percentages, computes the dollar gap per asset and the monthly buy/sell inflow needed to reach the target allocation over a chosen rebalancing period.","inputSchema":{"type":"object","properties":{"holdings":{"type":"array","description":"Array of holdings, each with name, currentAmount, and targetPercent (must sum to 1 across all holdings). Max 50 entries.","items":{"type":"object","properties":{"name":{"type":"string"},"currentAmount":{"type":"number"},"targetPercent":{"type":"number"}}}},"rebalancingPeriodMonths":{"type":"number","description":"Number of months to spread the rebalancing over. Default 1 (immediate lump-sum rebalance).","default":1}},"required":["holdings"]},"output":{"example":{"ok":true,"data":{"totalValue":100000,"holdings":[{"name":"stocks","currentAmount":60000,"targetAmount":70000,"gap":10000,"monthlyInflow":10000},{"name":"bonds","currentAmount":40000,"targetAmount":30000,"gap":-10000,"monthlyInflow":-10000}],"params":{"holdings":[{"name":"stocks","currentAmount":60000,"targetPercent":0.7},{"name":"bonds","currentAmount":40000,"targetPercent":0.3}],"rebalancingPeriodMonths":1}}}}},{"method":"POST","path":"/savingsRateCalculator","price":"$0.01","description":"Savings rate calculator. Divides the gap between monthly take-home income and spending by income to produce your personal savings rate as a percentage.","inputSchema":{"type":"object","properties":{"monthlyIncome":{"type":"number","description":"Monthly take-home income."},"monthlySpending":{"type":"number","description":"Monthly spending."}},"required":["monthlyIncome","monthlySpending"]},"output":{"example":{"ok":true,"data":{"savingsRate":0.3333333333333333,"monthlySavingsAmount":2000,"params":{"monthlyIncome":6000,"monthlySpending":4000}}}}},{"method":"POST","path":"/emergencyFundCalculator","price":"$0.01","description":"Emergency fund calculator. Multiplies monthly essential expenses by a chosen runway length (in months) to compute a target emergency savings amount.","inputSchema":{"type":"object","properties":{"monthlyExpenses":{"type":"number","description":"Monthly essential expenses."},"runwayMonths":{"type":"number","description":"Desired months of expense coverage. Default 6.","default":6}},"required":["monthlyExpenses"]},"output":{"example":{"ok":true,"data":{"targetAmount":21000,"params":{"monthlyExpenses":3500,"runwayMonths":6}}}}},{"method":"POST","path":"/keepingUpWithInflationCalculator","price":"$0.01","description":"Keeping up with inflation calculator. Computes the pre-tax raise needed under two scenarios — keeping the same dollar amount saved, or maintaining the same savings rate — after inflation raises your spending and a marginal tax rate reduces the raise itself.","inputSchema":{"type":"object","properties":{"annualInflationRate":{"type":"number","description":"Personal annual inflation rate, as a fraction. Default 0.03.","default":0.03},"marginalTaxRate":{"type":"number","description":"Marginal tax rate applied to additional income, as a fraction (0 to <1)."},"monthlyTakeHomePay":{"type":"number","description":"Current monthly take-home pay, before the raise."},"monthlySpending":{"type":"number","description":"Current monthly spending, before inflation."}},"required":["marginalTaxRate","monthlyTakeHomePay","monthlySpending"]},"output":{"example":{"ok":true,"data":{"keepDollarSavingsRaisePercent":0.034188034188034185,"maintainSavingsRateRaisePercent":0.05128205128205109,"params":{"annualInflationRate":0.04,"marginalTaxRate":0.22,"monthlyTakeHomePay":6000,"monthlySpending":4000}}}}},{"method":"POST","path":"/hsaGrowthCalculator","price":"$0.01","description":"HSA (Health Savings Account) growth calculator. Projects year-by-year account balance from a starting value, annual contributions, annual expense withdrawals, and an annual return rate.","inputSchema":{"type":"object","properties":{"startingValue":{"type":"number","description":"Current HSA balance."},"annualContribution":{"type":"number","description":"Total annual contribution, including any employer contribution."},"annualExpenses":{"type":"number","description":"Annual withdrawals for medical expenses."},"annualReturnRate":{"type":"number","description":"Expected annual investment return, as a fraction."},"years":{"type":"number","description":"Number of years to project (1-60)."}},"required":["startingValue","annualContribution","annualExpenses","annualReturnRate","years"]},"output":{"example":{"ok":true,"data":{"endingBalance":183330.39159735557,"yearlyBalances":[9350,14004.5,18984.815000000002,24313.752050000003,30015.714693500006,36116.814722045005,42644.991752588154,49630.141175269324,57104.25105753818,65101.548631565856,73658.65703577547,82814.76302827976,92611.79644025935,103094.6221910775,114311.24574445294,126313.03294656465,139154.9452528242,152895.7914205219,167598.49681995847,183330.39159735557],"params":{"startingValue":5000,"annualContribution":4000,"annualExpenses":0,"annualReturnRate":0.07,"years":20}}}}},{"method":"POST","path":"/upworkFeeCalculator","price":"$0.01","description":"Upwork freelancer fee calculator. Applies a documented tiered marginal service-fee schedule (20%/10%/5% at $500/$10,000 cumulative per-client lifetime billing thresholds) to compute take-home pay on an invoice, correctly splitting fees across a tier boundary like a tax bracket. Platform fee policies can change; verify current rates before relying on this for financial decisions.","inputSchema":{"type":"object","properties":{"invoiceAmount":{"type":"number","description":"Dollar value of the current invoice."},"priorLifetimeEarningsWithClient":{"type":"number","description":"Total prior billings with this client, not including the current invoice. Default 0.","default":0}},"required":["invoiceAmount"]},"output":{"example":{"ok":true,"data":{"feeAmount":180,"takeHomeAmount":1320,"newLifetimeEarnings":1700,"effectiveFeeRate":0.12,"params":{"invoiceAmount":1500,"priorLifetimeEarningsWithClient":200}}}}},{"method":"POST","path":"/alcoholSavingsCalculator","price":"$0.01","description":"Alcohol spending and opportunity-cost calculator. Sums home and going-out drinking costs plus associated rideshare costs into monthly and yearly totals, then projects what that redirected spending could grow into if invested instead, using the future-value-of-an-annuity formula.","inputSchema":{"type":"object","properties":{"homeDaysPerWeek":{"type":"number","description":"Days per week drinking at home."},"homeDrinksPerDay":{"type":"number","description":"Drinks per home-drinking day."},"homeCostPerDrink":{"type":"number","description":"Average cost per drink at home."},"outDaysPerWeek":{"type":"number","description":"Days per week drinking while out."},"outDrinksPerDay":{"type":"number","description":"Drinks per outing."},"outCostPerDrink":{"type":"number","description":"Average cost per drink when out."},"rideshareFrequencyPercent":{"type":"number","description":"Fraction of outings that involve a rideshare (0-1)."},"costPerRide":{"type":"number","description":"Average cost per one-way ride."},"investmentReturnRate":{"type":"number","description":"Annual investment return, as a fraction, used for the opportunity-cost projection. Default 0.07.","default":0.07},"years":{"type":"number","description":"Number of years to project the opportunity cost over (1-60)."}},"required":["homeDaysPerWeek","homeDrinksPerDay","homeCostPerDrink","outDaysPerWeek","outDrinksPerDay","outCostPerDrink","rideshareFrequencyPercent","costPerRide","years"]},"output":{"example":{"ok":true,"data":{"monthlySpending":247,"yearlySpending":2964,"opportunityCostFutureValue":46782.58838023878,"params":{"homeDaysPerWeek":3,"homeDrinksPerDay":1,"homeCostPerDrink":6,"outDaysPerWeek":1,"outDrinksPerDay":3,"outCostPerDrink":9,"rideshareFrequencyPercent":0.5,"costPerRide":12,"investmentReturnRate":0.07,"years":10}}}}},{"method":"POST","path":"/gasMileageSavingsCalculator","price":"$0.01","description":"Gas mileage savings calculator. Compares annual fuel cost between two gas-powered vehicles based on miles driven, gas price, and each vehicle's MPG, and computes the break-even point for any price premium of the more efficient vehicle.","inputSchema":{"type":"object","properties":{"milesPerYear":{"type":"number","description":"Expected annual miles driven."},"gasPricePerGallon":{"type":"number","description":"Local gas price per gallon."},"vehicleA":{"type":"object","properties":{"purchasePrice":{"type":"number","description":"Vehicle purchase price."},"mpg":{"type":"number","description":"Miles per gallon."}}},"vehicleB":{"type":"object","properties":{"purchasePrice":{"type":"number","description":"Vehicle purchase price."},"mpg":{"type":"number","description":"Miles per gallon."}}}},"required":["milesPerYear","gasPricePerGallon","vehicleA","vehicleB"]},"output":{"example":{"ok":true,"data":{"annualCostA":2100,"annualCostB":1050,"annualSavings":1050,"breakEvenYears":3.8095238095238093,"params":{"milesPerYear":15000,"gasPricePerGallon":3.5,"vehicleA":{"purchasePrice":22000,"mpg":25},"vehicleB":{"purchasePrice":26000,"mpg":50}}}}}},{"method":"POST","path":"/hybridVsGasSavingsCalculator","price":"$0.01","description":"Hybrid vs gas savings calculator. Compares annual fuel cost between a hybrid and a conventional gas vehicle based on miles driven, gas price, and each vehicle's MPG, and computes the break-even point for the hybrid's price premium.","inputSchema":{"type":"object","properties":{"milesPerYear":{"type":"number","description":"Expected annual miles driven."},"gasPricePerGallon":{"type":"number","description":"Local gas price per gallon."},"vehicleA":{"type":"object","properties":{"purchasePrice":{"type":"number","description":"Vehicle purchase price."},"mpg":{"type":"number","description":"Miles per gallon."}}},"vehicleB":{"type":"object","properties":{"purchasePrice":{"type":"number","description":"Vehicle purchase price."},"mpg":{"type":"number","description":"Miles per gallon."}}}},"required":["milesPerYear","gasPricePerGallon","vehicleA","vehicleB"]},"output":{"example":{"ok":true,"data":{"annualCostA":1750,"annualCostB":875,"annualSavings":875,"breakEvenYears":4.571428571428571,"params":{"milesPerYear":12000,"gasPricePerGallon":3.5,"vehicleA":{"purchasePrice":22000,"mpg":24},"vehicleB":{"purchasePrice":26000,"mpg":48}}}}}},{"method":"POST","path":"/electricCarSavingsCalculator","price":"$0.01","description":"Electric car savings calculator. Compares annual electricity cost against annual gas cost for a comparable gas vehicle, accounting for free-charging usage, and computes break-even years, cost per full charge, and gas-price-equivalent effective MPG.","inputSchema":{"type":"object","properties":{"milesPerYear":{"type":"number","description":"Expected annual miles driven."},"gasPricePerGallon":{"type":"number","description":"Local gas price per gallon."},"gasVehicle":{"type":"object","properties":{"purchasePrice":{"type":"number"},"mpg":{"type":"number"}}},"electricVehicle":{"type":"object","properties":{"purchasePrice":{"type":"number"},"batteryCapacityKwh":{"type":"number"},"rangeMiles":{"type":"number"},"electricityRatePerKwh":{"type":"number"},"freeChargingPercent":{"type":"number","description":"Fraction of charging that is free (0-1). Default 0.","default":0}}}},"required":["milesPerYear","gasPricePerGallon","gasVehicle","electricVehicle"]},"output":{"example":{"ok":true,"data":{"annualElectricityCost":390,"annualGasCost":1400,"annualSavings":1010,"breakEvenYears":9.900990099009901,"costPerCharge":7.800000000000001,"effectiveMPG":107.6923076923077,"params":{"milesPerYear":12000,"gasPricePerGallon":3.5,"gasVehicle":{"purchasePrice":25000,"mpg":30},"electricVehicle":{"purchasePrice":35000,"batteryCapacityKwh":60,"rangeMiles":240,"electricityRatePerKwh":0.13,"freeChargingPercent":0}}}}}},{"method":"POST","path":"/teslaSavingsCalculator","price":"$0.01","description":"Tesla savings calculator. Compares annual electricity cost for a Tesla against annual gas cost for a comparable gas vehicle, accounting for free-charging usage, and computes break-even years, cost per full charge, and gas-price-equivalent effective MPG.","inputSchema":{"type":"object","properties":{"milesPerYear":{"type":"number","description":"Expected annual miles driven."},"gasPricePerGallon":{"type":"number","description":"Local gas price per gallon."},"gasVehicle":{"type":"object","properties":{"purchasePrice":{"type":"number"},"mpg":{"type":"number"}}},"electricVehicle":{"type":"object","properties":{"purchasePrice":{"type":"number"},"batteryCapacityKwh":{"type":"number"},"rangeMiles":{"type":"number"},"electricityRatePerKwh":{"type":"number"},"freeChargingPercent":{"type":"number","description":"Fraction of charging that is free (0-1). Default 0.","default":0}}}},"required":["milesPerYear","gasPricePerGallon","gasVehicle","electricVehicle"]},"output":{"example":{"ok":true,"data":{"annualElectricityCost":450,"annualGasCost":2035.7142857142853,"annualSavings":1585.7142857142853,"breakEvenYears":8.828828828828831,"costPerCharge":9,"effectiveMPG":126.66666666666667,"params":{"milesPerYear":15000,"gasPricePerGallon":3.8,"gasVehicle":{"purchasePrice":28000,"mpg":28},"electricVehicle":{"purchasePrice":42000,"batteryCapacityKwh":75,"rangeMiles":300,"electricityRatePerKwh":0.15,"freeChargingPercent":0.2}}}}}},{"method":"POST","path":"/evaluateExpression","price":"$0.01","description":"Safe arithmetic expression evaluator. Parses and evaluates expressions with +, -, *, /, ^, and parentheses using a bounded-recursion parser (no eval/Function), avoiding the arithmetic slips an LLM makes on long expressions.","inputSchema":{"type":"object","properties":{"expression":{"type":"string","description":"Arithmetic expression to evaluate, e.g. \"(2 + 3) * 4\". Max 200 characters."}},"required":["expression"]},"output":{"example":{"ok":true,"data":{"result":20,"params":{"expression":"(2 + 3) * 4"}}}}},{"method":"POST","path":"/bigNumberArithmetic","price":"$0.01","description":"Arbitrary-precision integer arithmetic (add, subtract, multiply, power) beyond IEEE-754 float precision, using native BigInt. Operands are passed as digit strings so precision is never lost in transit. For power, the combined magnitude (base digit count x exponent) is capped at 50000 to bound response size, in addition to the per-operand digit cap and exponent cap.","inputSchema":{"type":"object","properties":{"a":{"type":"string","description":"First operand, as a string of digits (optionally negative). Max 1000 digits."},"b":{"type":"string","description":"Second operand (or exponent for power), as a string of digits. Max 1000 digits (max 1000 for exponent on power)."},"operation":{"type":"string","enum":["add","subtract","multiply","power"],"description":"Operation to perform."}},"required":["a","b","operation"]},"output":{"example":{"ok":true,"data":{"result":"1111111111111111110","params":{"a":"123456789123456789","b":"987654321987654321","operation":"add"}}}}},{"method":"POST","path":"/matrixOperations","price":"$0.01","description":"Matrix operations: multiply, transpose, determinant, and invert, for matrices up to 20x20. Uses the ml-matrix library's LU decomposition (LuDecomposition) for determinant and inversion, with a numerical near-singularity guard beyond the library's exact-singular check.","inputSchema":{"type":"object","properties":{"operation":{"type":"string","enum":["multiply","transpose","determinant","invert"],"description":"Operation to perform."},"matrixA":{"type":"array","description":"A 2D array of numbers, up to 20x20."},"matrixB":{"type":"array","description":"A 2D array of numbers, required only for multiply."}},"required":["operation","matrixA"]},"output":{"example":{"ok":true,"data":{"result":[[19,22],[43,50]],"params":{"operation":"multiply","matrixA":[[1,2],[3,4]],"matrixB":[[5,6],[7,8]]}}}}},{"method":"POST","path":"/unitConvert","price":"$0.01","description":"Unit conversion for length, mass, volume, and temperature using exact conversion factors (temperature uses the correct affine formulas, not simple multiplication).","inputSchema":{"type":"object","properties":{"value":{"type":"number","description":"The numeric value to convert."},"from":{"type":"string","description":"Source unit, e.g. \"m\", \"kg\", \"gal\", \"C\"."},"to":{"type":"string","description":"Target unit."},"category":{"type":"string","enum":["length","mass","volume","temperature"],"description":"Unit category."}},"required":["value","from","to","category"]},"output":{"example":{"ok":true,"data":{"result":1,"params":{"value":1000,"from":"m","to":"km","category":"length"}}}}},{"method":"POST","path":"/solveLinearEquation","price":"$0.01","description":"Solves a system of linear equations (Ax = b) using the ml-matrix library's LU decomposition (LuDecomposition), with a near-singularity guard beyond the library's exact-singular check, for systems up to 20x20.","inputSchema":{"type":"object","properties":{"coefficients":{"type":"array","description":"Square 2D array of coefficients (n x n), up to 20x20."},"constants":{"type":"array","description":"Array of n constants (the right-hand side of each equation)."}},"required":["coefficients","constants"]},"output":{"example":{"ok":true,"data":{"solution":[2,1],"params":{"coefficients":[[1,1],[1,-1]],"constants":[3,1]}}}}},{"method":"POST","path":"/primeFactorize","price":"$0.01","description":"Prime factorization of an integer via trial division, returning the full list of prime factors (with repetition).","inputSchema":{"type":"object","properties":{"n":{"type":"number","description":"Integer to factorize (2 to 10^12)."}},"required":["n"]},"output":{"example":{"ok":true,"data":{"factors":[2,2,3,5],"params":{"n":60}}}}},{"method":"POST","path":"/isPrime","price":"$0.01","description":"Deterministic primality test using the Miller-Rabin algorithm with a witness set proven deterministic for all integers below 3.3x10^24, safely covering the full JavaScript safe-integer range.","inputSchema":{"type":"object","properties":{"n":{"type":"number","description":"Non-negative integer to test (0 to 2^53 - 1)."}},"required":["n"]},"output":{"example":{"ok":true,"data":{"isPrime":true,"params":{"n":97}}}}},{"method":"POST","path":"/statisticsSummary","price":"$0.01","description":"Descriptive statistics summary (mean, median, variance, standard deviation, and 25th/75th/90th percentiles via linear interpolation, matching R and numpy's default \"type=7\" method) over a numeric array of up to 10,000 elements.","inputSchema":{"type":"object","properties":{"values":{"type":"array","description":"Non-empty array of numbers, up to 10,000 elements."}},"required":["values"]},"output":{"example":{"ok":true,"data":{"mean":3,"median":3,"variance":2,"stddev":1.4142135623730951,"p25":2,"p75":4,"p90":4.6,"params":{"values":[1,2,3,4,5]}}}}},{"method":"POST","path":"/astronomyEphemeris","price":"$0.01","description":"Sunrise, sunset, solar noon, day length, and moon phase for a given latitude/longitude/date, computed via the suncalc library (standard solar/lunar position algorithms) — precise astronomical math an LLM cannot reliably compute mentally.","inputSchema":{"type":"object","properties":{"latitude":{"type":"number","description":"Latitude in degrees (-90 to 90)."},"longitude":{"type":"number","description":"Longitude in degrees (-180 to 180)."},"date":{"type":"string","description":"ISO date string, e.g. \"2024-06-21\"."}},"required":["latitude","longitude","date"]},"output":{"example":{"ok":true,"data":{"sunrise":"09:25","sunset":"00:30","solarNoon":"16:57","dayLengthHours":15.095476666666666,"polarDayOrNight":false,"moonPhase":{"ageDays":13.636177522134107,"phaseFraction":0.4617644974847433,"phaseName":"Waxing Gibbous"},"params":{"latitude":40.7128,"longitude":-74.006,"date":"2024-06-21"}}}}},{"method":"POST","path":"/physicalConstants","price":"$0.01","description":"Lookup of standard physical constants (speed of light, gravitational constant, Planck constant, elementary charge, Avogadro number, Boltzmann constant, gas constant, electron mass) with exact published CODATA values.","inputSchema":{"type":"object","properties":{"constant":{"type":"string","enum":["speedOfLight","gravitationalConstant","planckConstant","elementaryCharge","avogadroNumber","boltzmannConstant","gasConstant","electronMass"],"description":"Which constant to look up."}},"required":["constant"]},"output":{"example":{"ok":true,"data":{"value":299792458,"unit":"m/s","description":"Speed of light in vacuum","params":{"constant":"speedOfLight"}}}}},{"method":"POST","path":"/chemicalElementLookup","price":"$0.01","description":"Periodic table element lookup by symbol or atomic number, returning name, atomic mass, and category. Covers the most commonly referenced elements.","inputSchema":{"type":"object","properties":{"symbol":{"type":"string","description":"Element symbol, e.g. \"Au\" (case-insensitive). Provide this or atomicNumber."},"atomicNumber":{"type":"number","description":"Atomic number, e.g. 79. Provide this or symbol."}},"required":[]},"output":{"example":{"ok":true,"data":{"atomicNumber":79,"symbol":"Au","name":"Gold","atomicMass":196.97,"category":"transition metal","params":{"symbol":"Au"}}}}},{"method":"POST","path":"/unitConvertScientific","price":"$0.01","description":"Scientific unit conversion for pressure, energy, and molarity using exact conversion factors.","inputSchema":{"type":"object","properties":{"value":{"type":"number","description":"The numeric value to convert."},"from":{"type":"string","description":"Source unit, e.g. \"atm\", \"kcal\", \"mol/l\"."},"to":{"type":"string","description":"Target unit."},"category":{"type":"string","enum":["pressure","energy","molarity"],"description":"Unit category."}},"required":["value","from","to","category"]},"output":{"example":{"ok":true,"data":{"result":101325,"params":{"value":1,"from":"atm","to":"pa","category":"pressure"}}}}},{"method":"POST","path":"/regexTest","price":"$0.01","description":"Tests a regular expression pattern against a string, guarded against catastrophic backtracking (ReDoS) by running the match in an isolated worker thread with a hard 500ms timeout that fails closed.","inputSchema":{"type":"object","properties":{"pattern":{"type":"string","description":"Regular expression pattern (without slashes). Max 200 characters."},"flags":{"type":"string","description":"Regex flags (g, i, m, s, u, y). Optional.","default":""},"testString":{"type":"string","description":"String to test the pattern against. Max 10,000 characters."}},"required":["pattern","testString"]},"output":{"example":{"ok":true,"data":{"matched":true,"params":{"pattern":"^[a-z]+$","flags":"","testString":"hello"}}}}},{"method":"POST","path":"/jsonSchemaValidate","price":"$0.01","description":"Validates a JSON document against a JSON Schema using the industry-standard ajv validator, returning whether it is valid and a list of human-readable error messages if not.","inputSchema":{"type":"object","properties":{"schema":{"type":"object","description":"A JSON Schema object. Max 50KB serialized."},"document":{"description":"The JSON document to validate against the schema. Max 50KB serialized."}},"required":["schema","document"]},"output":{"example":{"ok":true,"data":{"valid":true,"errors":[],"params":{"schema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"document":{"name":"Ada"}}}}}},{"method":"POST","path":"/diffText","price":"$0.01","description":"Line-based diff between two strings using the Myers diff algorithm (via the diff/jsdiff library), returning a list of equal/add/remove operations.","inputSchema":{"type":"object","properties":{"textA":{"type":"string","description":"Original text. Max 50,000 characters and 2,000 lines."},"textB":{"type":"string","description":"Modified text. Max 50,000 characters and 2,000 lines."}},"required":["textA","textB"]},"output":{"example":{"ok":true,"data":{"diff":[{"type":"equal","line":"a"},{"type":"remove","line":"b"},{"type":"add","line":"x"},{"type":"equal","line":"c"}],"params":{"textA":"a\nb\nc","textB":"a\nx\nc"}}}}},{"method":"POST","path":"/cronParse","price":"$0.01","description":"Computes the next N run times for a standard 5-field cron expression, avoiding the mental cron-schedule simulation an LLM often gets subtly wrong.","inputSchema":{"type":"object","properties":{"expression":{"type":"string","description":"A standard 5-field cron expression, e.g. \"0 0 * * *\"."},"count":{"type":"number","description":"Number of future run times to return (1-50). Default 5.","default":5}},"required":["expression"]},"output":{"example":{"ok":true,"data":{"nextRuns":["2026-08-30T07:00:00.000Z","2026-08-31T07:00:00.000Z","2026-09-01T07:00:00.000Z"],"params":{"expression":"0 0 * * *","count":3}}}}},{"method":"POST","path":"/colorConvert","price":"$0.01","description":"Converts a color between hex, rgb, and hsl representations using exact arithmetic.","inputSchema":{"type":"object","properties":{"from":{"type":"string","enum":["hex","rgb","hsl"],"description":"Source color format."},"to":{"type":"string","enum":["hex","rgb","hsl"],"description":"Target color format."},"value":{"description":"The color value: a string for hex, or {r,g,b}/{h,s,l} for rgb/hsl."}},"required":["from","to","value"]},"output":{"example":{"ok":true,"data":{"result":{"r":255,"g":0,"b":0},"params":{"from":"hex","to":"rgb","value":"#ff0000"}}}}},{"method":"POST","path":"/qrCodeGenerate","price":"$0.01","description":"Generates a QR code for the given text, returned as a base64-encoded PNG data URL, computed entirely locally with no external service call.","inputSchema":{"type":"object","properties":{"text":{"type":"string","description":"Text or URL to encode. Max 500 characters."}},"required":["text"]},"output":{"example":{"ok":true,"data":{"dataUrl":"data:image/png;base64,iVBORw0KGgo...","params":{"text":"https://example.com"}}}}},{"method":"POST","path":"/jwtDecode","price":"$0.01","description":"Decodes (does not verify) a JWT by base64url-decoding its header and payload segments. Signature validity is never checked — do not use this to authenticate a token.","inputSchema":{"type":"object","properties":{"token":{"type":"string","description":"A JWT string (header.payload.signature)."}},"required":["token"]},"output":{"example":{"ok":true,"data":{"header":{"alg":"HS256","typ":"JWT"},"payload":{"sub":"1234567890"},"verified":false,"params":{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.fakesignature"}}}}},{"method":"POST","path":"/semverCompare","price":"$0.01","description":"Compares two semantic version strings and reports which is greater, lesser, or equal, using the standard semver comparison rules.","inputSchema":{"type":"object","properties":{"versionA":{"type":"string","description":"First semantic version, e.g. \"1.2.3\"."},"versionB":{"type":"string","description":"Second semantic version, e.g. \"1.2.4\"."}},"required":["versionA","versionB"]},"output":{"example":{"ok":true,"data":{"comparison":-1,"result":"less","params":{"versionA":"1.2.3","versionB":"1.2.4"}}}}}]}