commerce-validators

Commerce validators: live EU VAT (VIES), EORI, email/MX lookups; IBAN/ABA/GTIN checksums; VAT rates.

Should I use this

Quality & Safety

A
Description quality
92%
Schema completeness
79%
Naming quality
92%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • LOWTool 'payout_reconciliation' description lacks action verbin payout_reconciliation
  • LOWTool 'reorder_point' description lacks action verbin reorder_point

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,355Tokens (tool definitions)
~758 BTypical response size
Moderate attention impact (1.06% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "commerce-validators": {
      "url": "https://mcp.scienceswarm.org/mcp"
    }
  }
}

Remote endpoints

https://mcp.scienceswarm.org/mcpstreamable-http

What it can do

Tool inventory

Tools (10)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪validate_iban(iban)

Validate an IBAN (International Bank Account Number) by structure + the ISO 7064 mod-97 checksum. Catches typos/invalid accounts before you initiate a transfer. Pure-algorithm; no data leaves the machine.

Input Schema

{
  "type": "object",
  "properties": {
    "iban": {
      "title": "Iban",
      "type": "string"
    }
  },
  "required": [
    "iban"
  ],
  "title": "validate_ibanArguments"
}
🟢validate_gtin(code)

Validate a GTIN / UPC / EAN barcode (GTIN-8/12/13/14) by its check digit. Catches mistyped product barcodes in inventory/catalog workflows. Pure-algorithm.

Input Schema

{
  "type": "object",
  "properties": {
    "code": {
      "title": "Code",
      "type": "string"
    }
  },
  "required": [
    "code"
  ],
  "title": "validate_gtinArguments"
}
⚪validate_aba_routing(routing_number)

Validate a US ABA bank routing number (9 digits) by its checksum. Catch typos before initiating an ACH/wire payout. Pure-algorithm; nothing leaves the machine.

Input Schema

{
  "type": "object",
  "properties": {
    "routing_number": {
      "title": "Routing Number",
      "type": "string"
    }
  },
  "required": [
    "routing_number"
  ],
  "title": "validate_aba_routingArguments"
}
⚪validate_eu_vat(vat_number)

Validate an EU VAT number against the official EU VIES service (live government lookup). Returns whether it is registered/valid and, if available, the registered trader name + address. An LLM cannot know this without the real lookup — use this before invoicing/reverse-charging an EU B2B customer. Input e.g. 'DE811569869' or 'IE6388047V' (country code + number).

Input Schema

{
  "type": "object",
  "properties": {
    "vat_number": {
      "title": "Vat Number",
      "type": "string"
    }
  },
  "required": [
    "vat_number"
  ],
  "title": "validate_eu_vatArguments"
}
🟢validate_eori(eori)

Validate an EORI number (Economic Operators Registration and Identification) against the official EU customs database (live lookup). An EORI is required for EU imports/exports — check a trading partner's or your own EORI before customs filings / freight bookings. Input e.g. 'DE1234567890123' (country code + number).

Input Schema

{
  "type": "object",
  "properties": {
    "eori": {
      "title": "Eori",
      "type": "string"
    }
  },
  "required": [
    "eori"
  ],
  "title": "validate_eoriArguments"
}
🟢check_email_domain(email_or_domain)

Check whether a domain can actually receive email (has MX records) via a real DNS-over-HTTPS lookup — validate a customer/supplier email's domain before sending or invoicing. An LLM can't know current DNS; this does the live lookup.

Input Schema

{
  "type": "object",
  "properties": {
    "email_or_domain": {
      "title": "Email Or Domain",
      "type": "string"
    }
  },
  "required": [
    "email_or_domain"
  ],
  "title": "check_email_domainArguments"
}
🟡vat_rate_by_country(country_code, date)

EU VAT rates (standard / reduced / super-reduced / parking) for a country, from the maintained ibericode/vat-rates dataset (fetched live, cached 24h) — including which rate set was in force on an optional 'date' (YYYY-MM-DD) and the names of regional exceptions (e.g. Canary Islands). Input e.g. 'DE', 'FR', 'HU'.

Input Schema

{
  "type": "object",
  "properties": {
    "country_code": {
      "title": "Country Code",
      "type": "string"
    },
    "date": {
      "default": "",
      "title": "Date",
      "type": "string"
    }
  },
  "required": [
    "country_code"
  ],
  "title": "vat_rate_by_countryArguments"
}
🟢stripe_connect_split(charge_amount, application_fee_pct, application_fee_fixed, processing_pct, processing_fixed, ...)

Compute the Stripe Connect three-way split for one charge. Returns what the buyer pays, what Stripe takes, what the platform nets (its application fee), and what the connected seller nets — plus the platform's effective take rate. fee_bearer: 'seller' | 'platform' | 'buyer' (who absorbs the Stripe processing fee). Rates are editable; defaults are US card standard 2.9%+$0.30.

Input Schema

{
  "type": "object",
  "properties": {
    "charge_amount": {
      "title": "Charge Amount",
      "type": "number"
    },
    "application_fee_pct": {
      "default": 0,
      "title": "Application Fee Pct",
      "type": "number"
    },
    "application_fee_fixed": {
      "default": 0,
      "title": "Application Fee Fixed",
      "type": "number"
    },
    "processing_pct": {
      "default": 2.9,
      "title": "Processing Pct",
      "type": "number"
    },
    "processing_fixed": {
      "default": 0.3,
      "title": "Processing Fixed",
      "type": "number"
    },
    "fee_bearer": {
      "default": "seller",
      "title": "Fee Bearer",
      "type": "string"
    }
  },
  "required": [
    "charge_amount"
  ],
  "title": "stripe_connect_splitArguments"
}
🟢payout_reconciliation(gross_sales, refunds, processing_fees, chargebacks, other_deductions, ...)

Explain why a payout is less than sales: walk gross -> deductions -> expected, and (if actual_deposit given) flag the unexplained gap (shortfall/surplus).

Input Schema

{
  "type": "object",
  "properties": {
    "gross_sales": {
      "title": "Gross Sales",
      "type": "number"
    },
    "refunds": {
      "default": 0,
      "title": "Refunds",
      "type": "number"
    },
    "processing_fees": {
      "default": 0,
      "title": "Processing Fees",
      "type": "number"
    },
    "chargebacks": {
      "default": 0,
      "title": "Chargebacks",
      "type": "number"
    },
    "other_deductions": {
      "default": 0,
      "title": "Other Deductions",
      "type": "number"
    },
    "actual_deposit": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Actual Deposit"
    }
  },
  "required": [
    "gross_sales"
  ],
  "title": "payout_reconciliationArguments"
}
⚪reorder_point(avg_daily_sales, lead_time_days, safety_stock, on_hand)

Reorder point = lead-time demand + safety stock. If on_hand is given, returns whether to reorder now and the days of cover remaining.

Input Schema

{
  "type": "object",
  "properties": {
    "avg_daily_sales": {
      "title": "Avg Daily Sales",
      "type": "number"
    },
    "lead_time_days": {
      "title": "Lead Time Days",
      "type": "number"
    },
    "safety_stock": {
      "default": 0,
      "title": "Safety Stock",
      "type": "number"
    },
    "on_hand": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "On Hand"
    }
  },
  "required": [
    "avg_daily_sales",
    "lead_time_days"
  ],
  "title": "reorder_pointArguments"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded10 tools