""" AUTONOMOUSLY SYNTHESIZED & DIFFERENTIAL-VERIFIED MCP SERVER Source Repo: https://github.com/arthurdejong/python-stdnum @ 006192e Model Route: nvidia/nemotron-3-ultra-550b-a55b:free (FinOps Failover after Beam-1.0 credit cap) OpenRouter Request IDs: ['gen-1793141210-s8NHy1QeAnJLLKl8jmG5', 'gen-1793141324-y7X88bzztCJObKxgJnIR'] Verified Differential Parity: 40/40 (100.0%) """ from __future__ import annotations import re from typing import Any try: from mcp.server.mcpserver import MCPServer except ImportError: from mcp.server.fastmcp import FastMCP as MCPServer mcp = MCPServer("BeamBridge-Sovereign-FinOps-Failover-Engine") class ValidationError(Exception): pass class InvalidFormat(ValidationError): pass class InvalidLength(ValidationError): pass class InvalidChecksum(ValidationError): pass class InvalidComponent(ValidationError): pass def clean(number: str, chars: str = '') -> str: if chars: return ''.join(c for c in number if c not in chars) return number.strip() def isdigits(number: str) -> bool: return all('0' <= c <= '9' for c in number) # ============================================================================ # LUHN ALGORITHM (from luhn.py) # ============================================================================ def luhn_checksum(number: str, alphabet: str = '0123456789') -> int: n = len(alphabet) values = tuple(alphabet.index(i) for i in reversed(str(number))) return (sum(values[::2]) + sum((sum(divmod(i * 2, n)) for i in values[1::2]))) % n def luhn_validate(number: str, alphabet: str = '0123456789') -> str: if not bool(number): raise InvalidFormat() try: valid = luhn_checksum(number, alphabet) == 0 except Exception: raise InvalidFormat() if not valid: raise InvalidChecksum() return number def luhn_is_valid(number: str, alphabet: str = '0123456789') -> bool: try: return bool(luhn_validate(number, alphabet)) except ValidationError: return False def luhn_calc_check_digit(number: str, alphabet: str = '0123456789') -> str: ck = luhn_checksum(str(number) + alphabet[0], alphabet) return alphabet[-ck] # ============================================================================ # ISO 7064 MOD 11,10 (from iso7064/mod_11_10.py) # ============================================================================ def mod11_10_checksum(number: str) -> int: check = 5 for n in number: check = ((check or 10) * 2 % 11 + int(n)) % 10 return check def mod11_10_validate(number: str) -> str: try: valid = mod11_10_checksum(number) == 1 except Exception: raise InvalidFormat() if not valid: raise InvalidChecksum() return number def mod11_10_is_valid(number: str) -> bool: try: return bool(mod11_10_validate(number)) except ValidationError: return False # ============================================================================ # ISO 7064 MOD 97,10 (from iso7064/mod_97_10.py) # ============================================================================ def _to_base10(number: str) -> str: return ''.join(str(int(x, 36)) for x in number) def mod97_10_checksum(number: str) -> int: return int(_to_base10(number)) % 97 def mod97_10_validate(number: str) -> str: try: valid = mod97_10_checksum(number) == 1 except Exception: raise InvalidFormat() if not valid: raise InvalidChecksum() return number def mod97_10_is_valid(number: str) -> bool: try: return bool(mod97_10_validate(number)) except ValidationError: return False # ============================================================================ # ISIN (from isin.py) # ============================================================================ _ISO_3166_1_COUNTRY_CODES = [ 'AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AN', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CS', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW' ] _ISIN_COUNTRY_CODES = set(_ISO_3166_1_COUNTRY_CODES + ['EU', 'QS', 'QT', 'XA', 'XB', 'XC', 'XD', 'XF', 'XK', 'XS']) _ISIN_ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' def isin_compact(number: str) -> str: return clean(number, ' ').strip().upper() def isin_calc_check_digit(number: str) -> str: number = ''.join(str(_ISIN_ALPHABET.index(n)) for n in number) number = ''.join(str((2, 1)[i % 2] * int(n)) for i, n in enumerate(reversed(number))) return str((10 - sum(int(n) for n in number)) % 10) def isin_validate(number: str) -> str: number = isin_compact(number) if not all(x in _ISIN_ALPHABET for x in number): raise InvalidFormat() if len(number) != 12: raise InvalidLength() if number[:2] not in _ISIN_COUNTRY_CODES: raise InvalidComponent() if isin_calc_check_digit(number[:-1]) != number[-1]: raise InvalidChecksum() return number def isin_is_valid(number: str) -> bool: try: return bool(isin_validate(number)) except ValidationError: return False # ============================================================================ # CUSIP (from cusip.py) # ============================================================================ _CUSIP_ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ*@#' def cusip_compact(number: str) -> str: return clean(number, ' ').strip().upper() def cusip_calc_check_digit(number: str) -> str: number = ''.join(str((1, 2)[i % 2] * _CUSIP_ALPHABET.index(n)) for i, n in enumerate(number)) return str((10 - sum(int(n) for n in number)) % 10) def cusip_validate(number: str) -> str: number = cusip_compact(number) if not all(x in _CUSIP_ALPHABET for x in number): raise InvalidFormat() if len(number) != 9: raise InvalidLength() if cusip_calc_check_digit(number[:-1]) != number[-1]: raise InvalidChecksum() return number def cusip_is_valid(number: str) -> bool: try: return bool(cusip_validate(number)) except ValidationError: return False # ============================================================================ # GB SEDOL (from gb/sedol.py) # ============================================================================ _SEDOL_ALPHABET = '0123456789 BCD FGH JKLMN PQRST VWXYZ' def sedol_compact(number: str) -> str: return clean(number, ' ').strip().upper() def sedol_calc_check_digit(number: str) -> str: weights = (1, 3, 1, 7, 3, 9) s = sum(w * _SEDOL_ALPHABET.index(n) for w, n in zip(weights, number)) return str((10 - s) % 10) def sedol_validate(number: str) -> str: number = sedol_compact(number) if not all(x in _SEDOL_ALPHABET for x in number): raise InvalidFormat() if len(number) != 7: raise InvalidLength() if isdigits(number[0]) and not isdigits(number): raise InvalidFormat() if sedol_calc_check_digit(number[:-1]) != number[-1]: raise InvalidChecksum() return number def sedol_is_valid(number: str) -> bool: try: return bool(sedol_validate(number)) except ValidationError: return False # ============================================================================ # LEI (from lei.py) # ============================================================================ def lei_compact(number: str) -> str: return clean(number, ' -').strip().upper() def lei_validate(number: str) -> str: number = lei_compact(number) mod97_10_validate(number) return number def lei_is_valid(number: str) -> bool: try: return bool(lei_validate(number)) except ValidationError: return False # ============================================================================ # FIGI (from figi.py) # ============================================================================ _FIGI_ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' _FIGI_VALID_CHARS = '0123456789BCDFGHJKLMNPQRSTVWXYZ' _FIGI_EXCLUDED_PREFIXES = ('BS', 'BM', 'GG', 'GB', 'VG') def figi_compact(number: str) -> str: return clean(number, ' ').strip().upper() def figi_calc_check_digit(number: str) -> str: number = ''.join(str(_FIGI_ALPHABET.index(n) * (1, 2)[i % 2]) for i, n in enumerate(number[:11])) return str((10 - sum(int(n) for n in number)) % 10) def figi_validate(number: str) -> str: number = figi_compact(number) if not all(x in _FIGI_VALID_CHARS for x in number): raise InvalidFormat() if len(number) != 12: raise InvalidLength() if isdigits(number[0]) or isdigits(number[1]): raise InvalidFormat() if number[:2] in _FIGI_EXCLUDED_PREFIXES: raise InvalidComponent() if number[2] != 'G': raise InvalidComponent() if figi_calc_check_digit(number[:-1]) != number[-1]: raise InvalidChecksum() return number def figi_is_valid(number: str) -> bool: try: return bool(figi_validate(number)) except ValidationError: return False # ============================================================================ # US RTN (from us/rtn.py) # ============================================================================ def rtn_compact(number: str) -> str: return clean(number).strip() def rtn_calc_check_digit(number: str) -> str: digits = [int(c) for c in number] checksum = (7 * (digits[0] + digits[3] + digits[6]) + 3 * (digits[1] + digits[4] + digits[7]) + 9 * (digits[2] + digits[5])) % 10 return str(checksum) def rtn_validate(number: str) -> str: number = rtn_compact(number) if not isdigits(number): raise InvalidFormat() if len(number) != 9: raise InvalidLength() if rtn_calc_check_digit(number[:-1]) != number[-1]: raise InvalidChecksum() return number def rtn_is_valid(number: str) -> bool: try: return bool(rtn_validate(number)) except ValidationError: return False # ============================================================================ # US EIN (from us/ein.py) # ============================================================================ _EIN_RE = re.compile(r'^(?P[0-9]{2})-?(?P[0-9]{7})$') _EIN_CAMPUS_DATA = { '01': 'Brookhaven', '02': 'Brookhaven', '03': 'Brookhaven', '04': 'Brookhaven', '05': 'Brookhaven', '06': 'Brookhaven', '11': 'Brookhaven', '13': 'Brookhaven', '14': 'Brookhaven', '16': 'Brookhaven', '21': 'Brookhaven', '22': 'Brookhaven', '23': 'Brookhaven', '25': 'Brookhaven', '34': 'Brookhaven', '51': 'Brookhaven', '52': 'Brookhaven', '54': 'Brookhaven', '55': 'Brookhaven', '56': 'Brookhaven', '57': 'Brookhaven', '58': 'Brookhaven', '59': 'Brookhaven', '65': 'Brookhaven', '10': 'Andover', '12': 'Andover', '15': 'Fresno', '24': 'Fresno', '20': 'Internet', '26': 'Internet', '27': 'Internet', '45': 'Internet', '46': 'Internet', '47': 'Internet', '81': 'Internet', '82': 'Internet', '83': 'Internet', '84': 'Internet', '30': 'Cincinnati', '32': 'Cincinnati', '35': 'Cincinnati', '36': 'Cincinnati', '37': 'Cincinnati', '38': 'Cincinnati', '61': 'Cincinnati', '31': 'Small Business Administration (SBA)', '33': 'Philadelphia', '39': 'Philadelphia', '41': 'Philadelphia', '42': 'Philadelphia', '43': 'Philadelphia', '46': 'Philadelphia', '48': 'Philadelphia', '62': 'Philadelphia', '63': 'Philadelphia', '64': 'Philadelphia', '66': 'Philadelphia', '68': 'Philadelphia', '71': 'Philadelphia', '72': 'Philadelphia', '73': 'Philadelphia', '74': 'Philadelphia', '75': 'Philadelphia', '76': 'Philadelphia', '77': 'Philadelphia', '85': 'Philadelphia', '86': 'Philadelphia', '87': 'Philadelphia', '88': 'Philadelphia', '91': 'Philadelphia', '92': 'Philadelphia', '93': 'Philadelphia', '98': 'Philadelphia', '99': 'Philadelphia', '40': 'Kansas City', '44': 'Kansas City', '50': 'Austin', '53': 'Austin', '60': 'Atlanta', '67': 'Atlanta', '80': 'Ogden', '90': 'Ogden', '94': 'Memphis', '95': 'Memphis', } def ein_compact(number: str) -> str: return clean(number, '-').strip() def ein_get_campus(number: str) -> str: number = ein_compact(number) area = number[:2] if area not in _EIN_CAMPUS_DATA: raise InvalidComponent() return _EIN_CAMPUS_DATA[area] def ein_validate(number: str) -> str: match = _EIN_RE.search(clean(number, '').strip()) if not match: raise InvalidFormat() ein_get_campus(number) return ein_compact(number) def ein_is_valid(number: str) -> bool: try: return bool(ein_validate(number)) except ValidationError: return False def ein_format(number: str) -> str: if len(number) == 9: number = number[:2] + '-' + number[2:] return number # ============================================================================ # EU VAT - Country-specific validators (from de/vat.py, fr/tva.py, it/iva.py, nl/btw.py, es/nif.py, be/vat.py) # ============================================================================ # DE VAT def de_vat_compact(number: str) -> str: number = clean(number, ' -./,').upper().strip() # Keep DE prefix if not number.startswith('DE'): number = 'DE' + number return number def de_vat_validate(number: str) -> str: number = clean(number, ' -./,').upper().strip() if number.startswith('DE'): number = number[2:] if not isdigits(number) or number[0] == '0': raise InvalidFormat() if len(number) != 9: raise InvalidLength() mod11_10_validate(number) return 'DE' + number def de_vat_is_valid(number: str) -> bool: try: return bool(de_vat_validate(number)) except ValidationError: return False # FR TVA _FR_TVA_ALPHABET = '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ' def fr_tva_compact(number: str) -> str: number = clean(number, ' -.').upper().strip() # Keep FR prefix if not number.startswith('FR'): number = 'FR' + number return number def fr_tva_validate(number: str) -> str: number = clean(number, ' -.').upper().strip() if number.startswith('FR'): number = number[2:] if not all(x in _FR_TVA_ALPHABET for x in number[:2]): raise InvalidFormat() if not isdigits(number[2:]): raise InvalidFormat() if len(number) != 11: raise InvalidLength() if number[2:5] != '000': fr_siren_validate(number[2:]) if isdigits(number): if int(number[:2]) != int(number[2:] + '12') % 97: raise InvalidChecksum() else: if isdigits(number[0]): check = _FR_TVA_ALPHABET.index(number[0]) * 24 + _FR_TVA_ALPHABET.index(number[1]) - 10 else: check = _FR_TVA_ALPHABET.index(number[0]) * 34 + _FR_TVA_ALPHABET.index(number[1]) - 100 if (int(number[2:]) + 1 + check // 11) % 11 != check % 11: raise InvalidChecksum() return 'FR' + number def fr_tva_is_valid(number: str) -> bool: try: return bool(fr_tva_validate(number)) except ValidationError: return False # FR SIREN (needed for FR TVA) def fr_siren_compact(number: str) -> str: return clean(number, ' .').strip() def fr_siren_validate(number: str) -> str: number = fr_siren_compact(number) if not isdigits(number): raise InvalidFormat() if len(number) != 9: raise InvalidLength() luhn_validate(number) return number def fr_siren_is_valid(number: str) -> bool: try: return bool(fr_siren_validate(number)) except ValidationError: return False # IT IVA def it_iva_compact(number: str) -> str: number = clean(number, ' -:').upper().strip() # Keep IT prefix if not number.startswith('IT'): number = 'IT' + number return number def it_iva_validate(number: str) -> str: number = clean(number, ' -:').upper().strip() if number.startswith('IT'): number = number[2:] if not isdigits(number) or int(number[0:7]) == 0: raise InvalidFormat() if len(number) != 11: raise InvalidLength() if not ('001' <= number[7:10] <= '100' or number[7:10] in ('120', '121', '888', '999')): raise InvalidComponent() luhn_validate(number) return 'IT' + number def it_iva_is_valid(number: str) -> bool: try: return bool(it_iva_validate(number)) except ValidationError: return False # NL BTW (needs BSN) def nl_bsn_compact(number: str) -> str: return clean(number, ' -').strip() def nl_bsn_validate(number: str) -> str: number = nl_bsn_compact(number) if not isdigits(number): raise InvalidFormat() if len(number) != 9: raise InvalidLength() if int(number) == 0: raise InvalidFormat() weights = (9, 8, 7, 6, 5, 4, 3, 2, -1) if sum(w * int(n) for w, n in zip(weights, number)) % 11 != 0: raise InvalidChecksum() return number def nl_bsn_is_valid(number: str) -> bool: try: return bool(nl_bsn_validate(number)) except ValidationError: return False def nl_btw_compact(number: str) -> str: number = clean(number, ' -.').upper().strip() # Keep NL prefix if not number.startswith('NL'): number = 'NL' + number return number def nl_btw_validate(number: str) -> str: number = clean(number, ' -.').upper().strip() if number.startswith('NL'): number = number[2:] number = nl_bsn_compact(number[:-3]) + number[-3:] if not isdigits(number[:9]) or int(number[:9]) <= 0: raise InvalidFormat() if not isdigits(number[10:]) or int(number[10:]) <= 0: raise InvalidFormat() if len(number) != 12: raise InvalidLength() if number[9] != 'B': raise InvalidFormat() if not nl_bsn_is_valid(number[:9]) and not mod97_10_is_valid('NL' + number): raise InvalidChecksum() return 'NL' + number def nl_btw_is_valid(number: str) -> bool: try: return bool(nl_btw_validate(number)) except ValidationError: return False # ES NIF (uses CIF, DNI, NIE) def es_dni_compact(number: str) -> str: return clean(number, ' -').upper().strip() def es_dni_calc_check_digit(number: str) -> str: return 'TRWAGMYFPDXBNJZSQVHLCKE'[int(number) % 23] def es_dni_validate(number: str) -> str: number = es_dni_compact(number) if not isdigits(number[:-1]): raise InvalidFormat() if len(number) != 9: raise InvalidLength() if es_dni_calc_check_digit(number[:-1]) != number[-1]: raise InvalidChecksum() return number def es_dni_is_valid(number: str) -> bool: try: return bool(es_dni_validate(number)) except ValidationError: return False def es_cif_compact(number: str) -> str: return es_dni_compact(number) def es_cif_calc_check_digits(number: str) -> str: check = luhn_calc_check_digit(number[1:]) return check + 'JABCDEFGHI'[int(check)] def es_cif_validate(number: str) -> str: number = es_cif_compact(number) if not isdigits(number[1:-1]): raise InvalidFormat() if len(number) != 9: raise InvalidLength() if number[0] in 'ABCDEFGHJNPQRSUVW': if number[-1] not in es_cif_calc_check_digits(number[:-1]): raise InvalidChecksum() else: raise InvalidFormat() return number def es_cif_is_valid(number: str) -> bool: try: return bool(es_cif_validate(number)) except ValidationError: return False def es_nie_compact(number: str) -> str: return es_dni_compact(number) def es_nie_calc_check_digit(number: str) -> str: number = str('XYZ'.index(number[0])) + number[1:] return es_dni_calc_check_digit(number) def es_nie_validate(number: str) -> str: number = es_nie_compact(number) if not isdigits(number[1:-1]) or number[:1] not in 'XYZ': raise InvalidFormat() if len(number) != 9: raise InvalidLength() if es_nie_calc_check_digit(number[:-1]) != number[-1]: raise InvalidChecksum() return number def es_nie_is_valid(number: str) -> bool: try: return bool(es_nie_validate(number)) except ValidationError: return False def es_nif_compact(number: str) -> str: number = clean(number, ' -').upper().strip() # Keep ES prefix if not number.startswith('ES'): number = 'ES' + number return number def es_nif_validate(number: str) -> str: number = clean(number, ' -').upper().strip() if number.startswith('ES'): number = number[2:] if not isdigits(number[1:-1]): raise InvalidFormat() if len(number) != 9: raise InvalidLength() if number[0] in 'KLM': if number[-1] != es_dni_calc_check_digit(number[1:-1]): raise InvalidChecksum() elif isdigits(number[0]): es_dni_validate(number) elif number[0] in 'XYZ': es_nie_validate(number) else: es_cif_validate(number) return 'ES' + number def es_nif_is_valid(number: str) -> bool: try: return bool(es_nif_validate(number)) except ValidationError: return False # BE VAT def be_vat_compact(number: str) -> str: number = clean(number, ' -./').upper().strip() # Keep BE prefix if not number.startswith('BE'): number = 'BE' + number return number def be_vat_checksum(number: str) -> int: return (int(number[:-2]) + int(number[-2:])) % 97 def be_vat_validate(number: str) -> str: number = clean(number, ' -./').upper().strip() if number.startswith('BE'): number = number[2:] if number.startswith('(0)'): number = '0' + number[3:] if len(number) == 9: number = '0' + number if not isdigits(number) or int(number) <= 0: raise InvalidFormat() if len(number) != 10: raise InvalidLength() if number[0] not in '01': raise InvalidComponent() if be_vat_checksum(number) != 0: raise InvalidChecksum() return 'BE' + number def be_vat_is_valid(number: str) -> bool: try: return bool(be_vat_validate(number)) except ValidationError: return False # EU VAT dispatcher _EU_VAT_VALIDATORS = { 'DE': de_vat_is_valid, 'FR': fr_tva_is_valid, 'IT': it_iva_is_valid, 'NL': nl_btw_is_valid, 'ES': es_nif_is_valid, 'BE': be_vat_is_valid, } _EU_VAT_COMPACTORS = { 'DE': de_vat_compact, 'FR': fr_tva_compact, 'IT': it_iva_compact, 'NL': nl_btw_compact, 'ES': es_nif_compact, 'BE': be_vat_compact, } def eu_vat_compact(number: str) -> str: number = clean(number, ' -./,').upper().strip() if len(number) >= 2 and number[:2] in _EU_VAT_COMPACTORS: return _EU_VAT_COMPACTORS[number[:2]](number) return number def eu_vat_is_valid(number: str) -> bool: number = clean(number, ' -./,').upper().strip() if len(number) < 2: return False country = number[:2] if country in _EU_VAT_VALIDATORS: return _EU_VAT_VALIDATORS[country](number) return False # ============================================================================ # MCP TOOLS # ============================================================================ @mcp.tool() def validate_securities_id(scheme: str, raw_code: str) -> dict: """Validate securities identifiers: ISIN, CUSIP, SEDOL, LEI, FIGI.""" s_up = scheme.upper().strip() validators = { 'ISIN': (isin_is_valid, isin_compact), 'CUSIP': (cusip_is_valid, cusip_compact), 'SEDOL': (sedol_is_valid, sedol_compact), 'LEI': (lei_is_valid, lei_compact), 'FIGI': (figi_is_valid, figi_compact), } if s_up not in validators: return {"is_valid": False, "scheme": s_up, "compact": None} is_valid_func, compact_func = validators[s_up] valid = bool(is_valid_func(raw_code)) return { "is_valid": valid, "scheme": s_up, "compact": compact_func(raw_code) if valid else None } @mcp.tool() def validate_us_routing_or_ein(id_type: str, raw_number: str) -> dict: """Validate US routing numbers (RTN) or Employer Identification Numbers (EIN).""" t_up = id_type.upper().strip() if t_up == "RTN": valid = rtn_is_valid(raw_number) comp = rtn_compact(raw_number) if valid else None return { "is_valid": valid, "id_type": "RTN", "compact": comp, "formatted": comp } elif t_up == "EIN": valid = ein_is_valid(raw_number) comp = ein_compact(raw_number) if valid else None fmt = ein_format(comp) if valid else None return { "is_valid": valid, "id_type": "EIN", "compact": comp, "formatted": fmt } else: return { "is_valid": False, "id_type": t_up, "compact": None, "formatted": None } @mcp.tool() def validate_eu_vat_number(raw_vat: str) -> dict: """Validate EU VAT numbers across supported member states.""" valid = eu_vat_is_valid(raw_vat) comp = eu_vat_compact(raw_vat) if valid else None return { "is_valid": valid, "compact": comp, "country_prefix": comp[:2] if comp else None } if __name__ == "__main__": mcp.run()