15 deterministic tools your AI agent should call instead of guessing A developer at Hexadata Labs packaged 15 deterministic business-validation tools—covering tax-ID check digits, EU VAT (VIES), IBAN, LEI, postal codes, bank accounts, phone normalization, FX rates, business days, industry and HS tariff codes, VAT rates, Mexican SAT catalogs and payroll—as a single Streamable HTTP MCP server on Apify. Each tool runs against official or open sources with no LLM inside, stores nothing, and costs half a cent per call, returning a consistent envelope with source, source URL and table version so agents can cite provenance. Unanswerable requests return ok:false with codes like INVALID_INPUT or UNSUPPORTED_COUNTRY and are not charged. Ask an LLM whether EKU9003173C9 is a valid Mexican RFC, what the German VAT rate was on a given date, or which HTS code applies to a stainless steel sink, and you get a confident answer. Sometimes it is right. For an invoicing, KYC or customs agent, "sometimes" is not good enough: a check digit is either correct or not, a tariff code is either in the official schedule or not, and a payroll withholding comes from a published table, not from a model's memory. This post is about the class of work an agent should delegate to deterministic tools and how we packaged 15 of them as one MCP server on Apify https://apify.com/hexadatalabs/business-validation-tools-mcp . Everything runs against official or open sources, has no LLM inside, stores nothing, and costs half a cent per call. Three tests. If the answer 1 has a published algorithm or table, 2 is needed many times per task one call per invoice, supplier, shipment or employee and 3 is expensive to get wrong, it belongs in a tool. Business validation passes all three: | Tool | Use this when… | Official source | |---|---|---| | validate tax id | checking a company or taxpayer ID from MX, ES, AR, CL, CO, BR, GB, US, IT, FR, DE, PE, CA, AU or IN | check-digit algorithms published by each tax authority | | validate vat eu | confirming an EU VAT number is registered reverse charge | VIES, European Commission | | validate iban | validating an IBAN and splitting bank, branch and account | ISO 13616 + IBAN registry | | lookup lei | finding the legal entity behind an LEI, or the LEI of a name | GLEIF | | lookup postal code | resolving a postal code to city/region/coordinates in 120+ countries | GeoNames CC BY | | validate bank account | checking a Mexican CLABE, a US ABA routing number or a SWIFT/BIC | Banxico SPEI list, ABA rules, ISO 9362 | | normalize phone | storing a phone as E.164 with country and line type | libphonenumber | | validate email domain | checking syntax and whether the domain receives mail MX, disposable | DNS + open blocklist | | get fx rate | converting with an official rate for a date | ECB reference rates, Banxico FIX | | business days | adding business days or listing holidays in 200+ countries | Nager.Date, Mexican LFT art. 74 | | lookup industry code | classifying an activity with NAICS, NACE, CPV or SCIAN | Census, Eurostat, EU Publications Office, INEGI | | lookup hs code | finding a customs tariff code and the US duty rate | USITC HTS, EU Combined Nomenclature | | get vat rates | getting standard and reduced VAT/GST rates of 35 countries for a date | TEDB + national laws | | lookup sat catalog | picking a Mexican CFDI 4.0 catalog value product key, unit, CFDI use, regime | SAT official workbook | | calc payroll mx | computing Mexican ISR, subsidy, IMSS, Infonavit and net pay | DOF, INEGI, Ley del Seguro Social | Every answer carries the same envelope: ok , the result, source , sourceUrl , sourceDate or tableVersion , and scrapedAt . Items that cannot be answered INVALID INPUT , UNSUPPORTED COUNTRY , SOURCE UNAVAILABLE come back with ok: false and are never charged. UNSUPPORTED COUNTRY free for the rest, so the agent knows when not to trust it. The Actor runs as a Streamable HTTP MCP server. Add it to Claude Desktop, Cursor, VS Code or any MCP client: { "mcpServers": { "hexadata-validation": { "url": "https://hexadatalabs--business-validation-tools-mcp.apify.actor/mcp", "headers": { "Authorization": "Bearer