Jithox payment preflight: check an invoice payment before your AI agent pays
Call preflight_payment before an agent pays an invoice: approval, IBAN, bank change; signed, free.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"jithox": {
"url": "https://jithox.com/api/mcp"
}
}
}원격 엔드포인트
https://jithox.com/api/mcpstreamable-http할 수 있는 일
도구 목록
도구 (8)
🟢kbo_company_search(vatNumber, countryCode)
Look up an EU company by VAT or enterprise number in the EU VIES register, Belgian KBO/BCE included: name, VAT id, address, status. 2 credits (EUR 0.02) per successful call; needs a bearer token.
입력 스키마
{
"type": "object",
"properties": {
"vatNumber": {
"type": "string",
"maxLength": 40,
"description": "EU VAT number, with or without its country prefix — e.g. \"BE0123456789\", \"NL855876323B01\", \"DE811569869\" or the bare Belgian enterprise number \"0123456789\"."
},
"countryCode": {
"default": "BE",
"description": "ISO 3166-1 alpha-2 country code of the issuing EU member state (uppercase), e.g. BE, NL, DE, FR.",
"type": "string"
}
},
"required": [
"vatNumber"
]
}출력 스키마
{
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"data": {
"type": "object"
},
"billing": {
"type": "object"
}
},
"required": [
"kind",
"data",
"billing"
]
}🟢review_invoice(invoiceNumber, issueDate, dueDate, currency, buyerReference, ...)
Check one structured invoice before it is sent: Peppol fields, totals and both VAT numbers in EU VIES, with a fix per finding and the UBL XML. It never sends, and a VAT check VIES did not answer is `unknown`, never a pass. It does not look the receiver up: check_peppol_ready does. 8 credits (EUR 0.08) per review the VAT register answered; needs a bearer token.
입력 스키마
{
"type": "object",
"properties": {
"invoiceNumber": {
"type": "string",
"description": "Human-readable invoice number, e.g. \"INV-2026-0001\"."
},
"issueDate": {
"type": "string",
"format": "date"
},
"dueDate": {
"type": "string",
"format": "date"
},
"currency": {
"description": "ISO 4217 currency code (uppercase).",
"type": "string"
},
"buyerReference": {
"description": "Buyer reference (BT-10), e.g. a PO or cost-centre code.",
"type": "string"
},
"orderReference": {
"description": "Purchase order reference (BT-13). Peppol requires this OR a buyer reference.",
"type": "string"
},
"note": {
"type": "string"
},
"supplier": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"countryCode": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code (uppercase), e.g. BE."
},
"vatId": {
"description": "Legal / VAT registration id, e.g. \"BE0123456789\".",
"type": "string"
},
"registrationName": {
"type": "string"
},
"endpointId": {
"description": "Peppol participant endpoint identifier, e.g. a GLN.",
"type": "string"
},
"endpointScheme": {
"description": "Endpoint scheme id (EAS code), e.g. \"0208\" for a Belgian enterprise number or \"0088\" for a GLN.",
"type": "string",
"maxLength": 10
},
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"postalZone": {
"type": "string",
"maxLength": 20
},
"iban": {
"description": "IBAN written on the invoice.",
"type": "string"
}
},
"required": [
"name",
"countryCode"
],
"description": "Seller / accounting supplier party, including an optional IBAN for the payment check."
},
"customer": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"countryCode": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code (uppercase), e.g. BE."
},
"vatId": {
"description": "Legal / VAT registration id, e.g. \"BE0123456789\".",
"type": "string"
},
"registrationName": {
"type": "string"
},
"endpointId": {
"description": "Peppol participant endpoint identifier, e.g. a GLN.",
"type": "string"
},
"endpointScheme": {
"description": "Endpoint scheme id (EAS code), e.g. \"0208\" for a Belgian enterprise number or \"0088\" for a GLN.",
"type": "string",
"maxLength": 10
},
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"postalZone": {
"type": "string",
"maxLength": 20
},
"email": {
"type": "string"
}
},
"required": [
"name",
"countryCode"
],
"description": "Buyer / accounting customer party, including an optional draft e-mail recipient."
},
"lines": {
"minItems": 1,
"maxItems": 500,
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string"
},
"quantity": {
"type": "number",
"exclusiveMinimum": 0
},
"unitPrice": {
"type": "number",
"minimum": 0,
"description": "Price per unit, excluding VAT."
},
"vatPercent": {
"description": "VAT rate as a percentage (0–100).",
"type": "number",
"minimum": 0,
"maximum": 100
},
"unitCode": {
"description": "UN/ECE Rec 20 unit code, e.g. \"HUR\".",
"type": "string",
"maxLength": 10
},
"taxCategory": {
"description": "Override the derived UNCL5305 VAT category.",
"type": "string",
"enum": [
"S",
"Z",
"E",
"AE",
"K",
"G",
"O",
"L",
"M"
]
},
"lineTotal": {
"description": "Caller-stated line total excluding VAT, compared with quantity × unit price by this review.",
"type": "number"
},
"lineNetAmount": {
"description": "Caller-stated line total excluding VAT (BT-131), used by the shared Peppol arithmetic rules.",
"type": "number"
}
},
"required": [
"description",
"quantity",
"unitPrice"
]
}
},
"payment": {
"description": "Payment instruction carried by the invoice, when it names an IBAN.",
"type": "object",
"properties": {
"iban": {
"description": "IBAN written on the invoice.",
"type": "string"
}
}
},
"totalWithoutVat": {
"description": "Caller-stated invoice total excluding VAT (BT-109), used by the arithmetic rule checks.",
"type": "number"
},
"totalVat": {
"description": "Caller-stated total VAT (BT-110), used by the arithmetic rule checks.",
"type": "number"
},
"totalWithVat": {
"description": "Caller-stated invoice total including VAT (BT-112), used by the arithmetic rule checks.",
"type": "number"
}
},
"required": [
"invoiceNumber",
"issueDate",
"supplier",
"customer",
"lines"
]
}출력 스키마
{
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"data": {
"type": "object"
},
"billing": {
"type": "object"
}
},
"required": [
"kind",
"data",
"billing"
]
}🟢verify_iban(iban, expectedCountry)
Check an IBAN's structure and check digits for 70+ countries, offline. It never claims the account exists or who owns it. Free, no token.
입력 스키마
{
"type": "object",
"properties": {
"iban": {
"type": "string",
"description": "The account number to check, as written — spaces and dashes are fine, e.g. \"BE68 5390 0754 7034\"."
},
"expectedCountry": {
"description": "Optional ISO 3166-1 alpha-2 country of the party being paid.",
"type": "string",
"minLength": 2,
"maxLength": 2
}
},
"required": [
"iban"
]
}출력 스키마
{
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"data": {
"type": "object"
}
},
"required": [
"kind",
"data"
]
}🟢check_peppol_ready(invoiceNumber, issueDate, currency, buyerReference, orderReference, ...)
Check your own invoice against 21 published Peppol BIS Billing 3.0 rules, and whether the customer's Peppol address is registered; each finding names the rule and the fix. A listed subset, not the official validator. Free, no token.
입력 스키마
{
"type": "object",
"properties": {
"invoiceNumber": {
"description": "The invoice number (BT-1).",
"type": "string"
},
"issueDate": {
"description": "The issue date (BT-2).",
"type": "string",
"maxLength": 40
},
"currency": {
"description": "Three-letter currency code (BT-5), e.g. EUR.",
"type": "string",
"maxLength": 8
},
"buyerReference": {
"description": "The reference the customer asked you to put on the invoice (BT-10). Peppol requires this OR an order reference.",
"type": "string"
},
"orderReference": {
"description": "The purchase order number (BT-13).",
"type": "string"
},
"supplier": {
"description": "You, the sender.",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"countryCode": {
"description": "ISO 3166-1 alpha-2 country code, e.g. BE.",
"type": "string",
"maxLength": 2
},
"endpointId": {
"description": "The party's Peppol address — the identifier the network delivers to, e.g. a Belgian enterprise number.",
"type": "string"
},
"endpointScheme": {
"description": "The four-digit EAS code the address is stated under, e.g. \"0208\" for a Belgian enterprise number.",
"type": "string",
"maxLength": 10
}
}
},
"customer": {
"description": "The customer, the receiver.",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"countryCode": {
"description": "ISO 3166-1 alpha-2 country code, e.g. BE.",
"type": "string",
"maxLength": 2
},
"endpointId": {
"description": "The party's Peppol address — the identifier the network delivers to, e.g. a Belgian enterprise number.",
"type": "string"
},
"endpointScheme": {
"description": "The four-digit EAS code the address is stated under, e.g. \"0208\" for a Belgian enterprise number.",
"type": "string",
"maxLength": 10
}
}
},
"lines": {
"maxItems": 1000,
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string"
},
"quantity": {
"type": "number"
},
"unitPrice": {
"type": "number"
},
"vatPercent": {
"description": "The VAT rate on this line, as a percentage, e.g. 21.",
"type": "number"
},
"lineNetAmount": {
"description": "The line total excluding VAT, when you already computed it.",
"type": "number"
}
}
}
},
"documentAllowances": {
"description": "Discounts on the WHOLE invoice, not on one line (BG-20).",
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": {
"description": "The amount, excluding VAT (BT-92 for an allowance, BT-99 for a charge).",
"type": "number"
},
"vatPercent": {
"description": "The VAT rate it is taxed at, e.g. 21 (BT-96 / BT-103).",
"type": "number"
},
"reason": {
"description": "Why, e.g. \"Discount\" or \"Freight\".",
"type": "string"
}
}
}
},
"documentCharges": {
"description": "Charges on the WHOLE invoice, e.g. freight (BG-21).",
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": {
"description": "The amount, excluding VAT (BT-92 for an allowance, BT-99 for a charge).",
"type": "number"
},
"vatPercent": {
"description": "The VAT rate it is taxed at, e.g. 21 (BT-96 / BT-103).",
"type": "number"
},
"reason": {
"description": "Why, e.g. \"Discount\" or \"Freight\".",
"type": "string"
}
}
}
},
"totalWithoutVat": {
"description": "Invoice total excluding VAT (BT-109).",
"type": "number"
},
"totalVat": {
"description": "Total VAT (BT-110).",
"type": "number"
},
"totalWithVat": {
"description": "Invoice total including VAT (BT-112).",
"type": "number"
}
}
}출력 스키마
{
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"data": {
"type": "object"
}
},
"required": [
"kind",
"data"
]
}🟢lookup_peppol_participant(identifier, scheme)
Ask the live Peppol registers whether a third party can receive e-invoices, which document types, and who to call when a send fails. Never a promise that an invoice arrives. Free, no token.
입력 스키마
{
"type": "object",
"properties": {
"identifier": {
"type": "string",
"description": "The customer's enterprise or VAT number, as written on the invoice — \"BE 0403.170.701\", \"0403170701\" and \"BE0403170701\" are all accepted."
},
"scheme": {
"description": "The four-digit Peppol scheme the number is registered under, when you know it: \"0208\" for a Belgian enterprise number (the mandatory primary scheme for Belgian businesses), \"9925\" for a Belgian VAT number, \"0192\" for a Norwegian organisation number.",
"type": "string",
"maxLength": 10
}
},
"required": [
"identifier"
]
}출력 스키마
{
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"data": {
"type": "object"
}
},
"required": [
"kind",
"data"
]
}🟢check_payment_change(newIban, ibanOnFile, supplierCountry)
Check a supplier's bank-detail change before the vendor record is touched: returns no_change, verify_first, stop or invalid_new_account with call-back steps. It never says an account is safe. Free, no token.
입력 스키마
{
"type": "object",
"properties": {
"newIban": {
"type": "string",
"description": "The account number in the change request, as written — spaces and dashes are fine, e.g. \"DE89 3704 0044 0532 0130 00\"."
},
"ibanOnFile": {
"description": "The account currently on the vendor record.",
"type": "string"
},
"supplierCountry": {
"description": "ISO 3166-1 alpha-2 country where the supplier is established, e.g. BE.",
"type": "string",
"minLength": 2,
"maxLength": 2,
"pattern": "^[A-Za-z]{2}$"
}
},
"required": [
"newIban"
]
}출력 스키마
{
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"data": {
"type": "object"
},
"evidence": {
"description": "Signed decision evidence, present when a signing key is configured.",
"type": "object"
}
},
"required": [
"kind",
"data"
]
}🟢preflight_payment(rail, approved, mandate, instructionSource, checks, ...)
Call once before you move money for a person: compares what they approved (payee, amount, currency) with what is about to be paid and runs the rail's checks (invoice: IBAN, account change). Returns stop, review_required or no_blockers_found with every check and signed evidence. Never pays; a check that did not run is never a pass. Free, no token.
입력 스키마
{
"type": "object",
"properties": {
"rail": {
"type": "string",
"enum": [
"invoice_bank",
"x402",
"card_or_giftcard",
"crypto_bridge"
],
"description": "Required: approved.amount and payment.amount/currency (not x402); invoice_bank also approved.payee.name, payment.iban/payeeName; card_or_giftcard approved.payee.merchant, payment.merchant/instrument; crypto_bridge approved.payee.merchant, payment.provider/merchant; x402 approved.amountAtomic/asset/network/payee.payTo, payment.challenge/resourceUrl."
},
"approved": {
"type": "object",
"properties": {
"amount": {
"type": "string",
"pattern": "^\\d{1,18}(\\.\\d{1,18})?$"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3,5}$"
},
"payee": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"iban": {
"type": "string"
},
"payTo": {
"type": "string"
},
"merchant": {
"type": "string"
}
},
"additionalProperties": false
},
"purpose": {
"type": "string"
},
"amountAtomic": {
"type": "string",
"pattern": "^\\d{1,78}$"
},
"asset": {
"type": "string"
},
"network": {
"type": "string"
}
},
"required": [
"currency",
"payee"
],
"additionalProperties": false
},
"mandate": {
"type": "object",
"properties": {
"maxAmount": {
"type": "string",
"pattern": "^\\d{1,18}(\\.\\d{1,18})?$"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3,5}$"
},
"validUntil": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})$"
},
"maxAmountAtomic": {
"type": "string",
"pattern": "^\\d{1,78}$"
}
},
"additionalProperties": false
},
"instructionSource": {
"type": "string",
"enum": [
"human",
"ingested_content",
"third_party"
]
},
"checks": {
"description": "Opt-in registers, run only on a connected door.",
"maxItems": 2,
"type": "array",
"items": {
"type": "string",
"enum": [
"vat_register",
"sanctions"
]
}
},
"payment": {
"type": "object",
"properties": {
"iban": {
"type": "string"
},
"amount": {
"type": "string",
"pattern": "^\\d{1,18}(\\.\\d{1,18})?$"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3,5}$"
},
"payeeName": {
"type": "string"
},
"supplierCountry": {
"description": "ISO 3166-1 alpha-2, e.g. BE.",
"type": "string"
},
"peppolId": {
"description": "e.g. 0208:0403170701",
"type": "string"
},
"supplierVatId": {
"type": "string",
"maxLength": 32
},
"challenge": {
"type": "object"
},
"resourceUrl": {
"type": "string"
},
"acceptIndex": {
"type": "integer",
"minimum": 0,
"maximum": 63
},
"payer": {
"type": "string"
},
"merchant": {
"type": "string"
},
"instrument": {
"type": "string",
"enum": [
"card",
"giftcard"
]
},
"provider": {
"type": "string"
},
"payTo": {
"type": "string"
}
},
"additionalProperties": false
},
"ibanOnFile": {
"description": "The account on the vendor record.",
"type": "string"
},
"invoice": {
"description": "The invoice as review_invoice takes it.",
"type": "object"
}
},
"required": [
"rail",
"approved",
"payment"
],
"additionalProperties": false
}출력 스키마
{
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"data": {
"type": "object"
},
"evidence": {
"description": "Signed decision evidence, present when a signing key is configured.",
"type": "object"
}
},
"required": [
"kind",
"data"
]
}🟢check_vat_list(rows, requesterVatId)
Check up to 20 rows of EU VAT numbers in EU VIES, row for row; a malformed or non-EU row is judged locally (`not_covered`, never `invalid`). UNKNOWN COSTS NOTHING, and the balance must cover the whole call (20 credits for 20 rows) before it runs. Optional requesterVatId adds a consultation number registered to you; a requester VIES refuses costs nothing. 1 credit (EUR 0.01) per answered row; needs a bearer token.
입력 스키마
{
"type": "object",
"properties": {
"rows": {
"minItems": 1,
"maxItems": 200,
"type": "array",
"items": {
"type": "object",
"properties": {
"reference": {
"description": "Your own label for the row — a customer number, a name. It is echoed back, never interpreted.",
"type": "string"
},
"vatId": {
"type": "string",
"description": "The VAT number as written, WITH its two-letter country prefix, e.g. \"BE0400378485\" or \"NL 8558.76.323.B01\"."
}
},
"required": [
"vatId"
]
},
"description": "The list: 1 to 20 rows per call."
},
"requesterVatId": {
"description": "Your OWN EU VAT number with country prefix (e.g. BE0403170701). Never stored.",
"type": "string",
"maxLength": 20
}
},
"required": [
"rows"
]
}출력 스키마
{
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"data": {
"type": "object"
},
"billing": {
"type": "object"
}
},
"required": [
"kind",
"data",
"billing"
]
}커뮤니티
증거