Ten tools across two trust models. Six are Nexiel Verify/Age tools, all either initiate-or-read-only (nothing here can resolve or clear a POSSIBLE_MATCH result, and no tool ever returns raw PII), authorized by whatever bearer token your MCP client was configured with. See the quickstart for how that token is scoped and forwarded. Four are Nexiel Invoice/ViDA tools: pure compute, no bearer token, no persistence. See the compute badge below and the quickstart's "Nexiel Invoice / ViDA tools" section for exactly what that does and does not cover.
create_verification_session initiatesInitiates a Nexiel Verify EUDI wallet session for a full AML/identity check (checkType "aml-identity"). The wallet discloses given_name/family_name/birthdate/nationalities, and the holder is screened against sanctions/PEP data via the shared matching engine once the wallet responds.
clientId (string), required. Opaque correlation id for the verification subject, never a name, email, or other directly-identifying value.idempotencyKey (string (optional)) Client-supplied idempotency key. Generated automatically when omitted, never skipped.sessionId, templateVersion, authorizationRequest (the DCQL query object), authorizationRequestUri (for a wallet to resolve), expiresAt.
create_age_verification_session initiatesInitiates a Nexiel Age / Nexiel Verify EUDI wallet session (checkType "age-verification") offering the wallet two alternative ways to answer, via DCQL credential_sets: the EU's official Age Verification (AV) attestation, if the wallet holds one -- a native age_over_18 boolean, no birthdate ever disclosed at all -- or the PID's birthdate claim as a fallback where it doesn't, used solely to compute the same boolean server-side and discarded immediately. A conformant wallet answers exactly one: selective disclosure by construction, not by convention, either way.
clientId (string), required. Opaque correlation id for the verification subject.idempotencyKey (string (optional)) Same semantics as create_verification_session.sessionId, templateVersion, authorizationRequest, authorizationRequestUri, expiresAt.
get_verification_session read-onlyReads back a session's full status and, once completed, its decision.
sessionId (string (uuid)), required. The sessionId returned by either create_* tool.sessionId, clientId, checkType, templateVersion, status ("pending" | "completed" | "failed" | "expired"), createdAt, expiresAt, and decision (null until completed): method, booleanProofs, amlResult, pepFlag, sanctionedFlag, listsChecked, humanReviewRequired, frozenDecisionArtifact, evidencePackCiphertext, decidedAt.
get_verification_session_result read-onlyA narrower projection of get_verification_session: just the decision, for a caller that only cares about the outcome, not session metadata. It always reads the same session data, never a separate or stale copy.
sessionId (string (uuid)), required. The sessionId to read back.sessionId, status, and decision (or, if not yet completed, decision: null plus an explanatory note naming the current status).
list_verification_sessions read-onlyLists verification sessions scoped to the calling API key's own client identity, most-recently-created first.
clientId (string (optional)) Only consulted against an unauthenticated sandbox-mode verify-api deployment, ignored for any real, authenticated caller (your own key's identity always wins).limit (integer 1-100 (optional)) Defaults to 20.sessions: an array of the same shape get_verification_session returns.
get_decision_artifact read-onlyReturns ONLY the frozen decision artifact for a completed aml-identity session: the exact, re-derivable answer to "what logic ran for this case."
sessionId (string (uuid)), required. The sessionId to read the artifact for.sessionId, frozenDecisionArtifact: { engineVersion, gatesHash, ensembleWeightsHash, listSnapshotIds }, or null with an explanatory note if the session is not yet completed, or is an age-verification check (which never runs an AML/PEP screen at all).
validate_en16931_invoice computeRuns @nexiel/einvoice's real 32-rule EN 16931 business-rule validator (the same engine that gates real invoice issuance in the Nexiel Invoice dashboard) against a fully-formed invoice you supply.
invoice (EN16931Invoice object), required. The full semantic invoice model (@nexiel/einvoice's own EN16931Invoice shape): seller/buyer, lines, vatBreakdown, and totals. This tool does NOT compute totals or VAT breakdown for you. Supply an already-balanced invoice exactly as the real rules (BR-CO-10..17 etc.) expect to check it.valid (boolean) and ruleResults: the full list of every rule checked, including passing ones, each with a ruleId/passed/message.
generate_en16931_invoice_document computeValidates a fully-formed invoice (same real rule engine as validate_en16931_invoice) and, if valid, serializes it to a real Peppol BIS Billing 3.0 UBL 2.1 or CII XML document via @nexiel/einvoice's actual serializers.
invoice (EN16931Invoice object), required. Same shape as validate_en16931_invoice.syntax ("UBL" | "CII" (optional)) Defaults to "UBL".valid (boolean) plus either xml (the generated document text, syntax "UBL"|"CII") when valid, or ruleResults (only the failing rules) plus an explanatory note when invalid.
submit_invoice_to_sandbox_peppol computeExercises @nexiel/peppol-transport's real, vendor-agnostic transport interface: always against the SANDBOX provider (send, then immediately check delivery status, in the same call).
invoice (MinimalInvoice object), required. peppol-transport's own narrower invoice shape (seller/buyer/lines/totals): a different, smaller shape than validate_en16931_invoice's EN16931Invoice, by design (see the quickstart's note on why these two shapes are kept separate).recipient (array of { scheme, id }), required. At least one Peppol participant identifier, e.g. { scheme: "IE:VAT", id: "IE1234567T" }.documentType ("invoice" | "credit_note" (optional)) Defaults to "invoice".legalEntityId (string), required. Opaque sandbox sender identity. No real vendor account concept exists behind this.idempotencyKey (string), required. Required (every mutating action needs one). The sandbox provider dedupes on it.submission (the send() result) and delivery (the immediate getDeliveryStatus() result), plus an explanatory note.
check_peppol_participant_can_receive computeExercises @nexiel/peppol-transport's real checkParticipantCanReceive() discovery call: always against the sandbox provider.
identifier ({ scheme, id }), required. The Peppol participant identifier to check.identifier, canReceive (boolean), providerName (always "sandbox-mock").