VerifyDesk
Server Details
Verify French and UK companies, EU VAT and IBANs; screen OFAC, UN, EU and UK sanctions lists.
- Status
- Healthy
- Uptime
- 100.0% over 23 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- agenttoolworks/mcp-servers
- GitHub Stars
- 0
TDQS
Scored across 6 tools
enrich_company and verify_company are the closest pair: both take country + registration number and return legal form/address, so an agent could hesitate on which to call. The descriptions do resolve it well (verify = status verification with name-query support, enrich = officers/directors deep data), and the remaining four tools (usage, sanctions, IBAN, VAT) are cleanly distinct.
All six names follow a strict verb_noun snake_case pattern with no deviation: enrich_company, get_usage, screen_sanctions, validate_iban, verify_company, verify_vat. The verbs are varied but consistently descriptive of the action performed.
Six tools is well-scoped for a KYC/compliance verification desk: one per verification primitive (company, enrichment, sanctions, IBAN, VAT) plus a usage endpoint. Nothing feels redundant or padded.
Covers company verification, company enrichment, sanctions screening (persons and companies), IBAN structure, and EU VAT validation, plus self-usage metering — a coherent surface with no dead ends. Gaps are minor: no individual identity/PEP check distinct from sanctions, no adverse-media or batch endpoints, and the company tools are limited to FR/GB.
Available Tools
6 toolsenrich_companyEnrich a company with officers and registry detailsAInspect
Returns extended registry data for one company identified by its registration number: officers/directors currently in office (name and role), legal form, activity, address, headcount range when available. Input: country (FR or GB) and the exact registration number (SIREN for FR, company number for GB). Costs 1 credit.
| Name | Required | Description | Default |
|---|---|---|---|
| country | Yes | Registry to query: FR (France, SIRENE/RNE) or GB (UK Companies House) | |
| registration_number | Yes | Exact SIREN (FR) or company number (GB) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and it does volunteer one genuinely useful trait: the call 'Costs 1 credit'. It says nothing about authentication, failure modes for an unknown registration number, or result freshness/caching, which matters for a paid registry lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the return payload, then the two required inputs, then the cost in one short clause. Every sentence carries information and nothing is repeated from the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly enumerates the returned fields and flags the optional headcount, so an agent knows what to expect. It is complete enough for a two-parameter read tool, with the only gap being error behavior on non-matching registration numbers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema, including the FR/GB enum values and the SIREN vs company-number distinction. The description restates these mappings without adding format, validation, or lookup hints beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns extended registry data for one company') and enumerates the payload (officers/directors in office, legal form, activity, address, headcount range). It never names or contrasts with the sibling verify_company, so an agent must infer why it would use this enrichment call rather than the plain verification one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the input contract ('country (FR or GB) and the exact registration number'), which tells the agent the prerequisite keys but not when this tool beats verify_company or screen_sanctions. No when-not-to-use or alternative routing is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageGet usage and credit balanceAInspect
Returns your current plan, remaining credit balance and call volume over the last 30 days. Free to call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the cost profile ('Free to call') and the data window ('last 30 days'), which are genuine behavioral facts beyond the schema. It does not mention auth requirements or rate limits, so it falls short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the contents front-loaded and the cost note appended. Every clause earns its place; nothing is repeated from the schema or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must hint at the return shape, and it does by naming the three returned fields and their window. No annotations exist either, and the 'free to call' note covers the main behavioral concern. Minor gap: no mention of formatting or staleness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case. The description adds no parameter semantics because none exist, and needs none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (usage) and enumerates exactly what is returned: plan, remaining credit balance, and call volume over the last 30 days. It is clearly distinguishable from the invoice-oriented siblings (extract_invoice, generate_invoice, validate_invoice, describe_coverage).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance and no named alternatives, but for a zero-parameter, cost-free read tool the implied usage ('check your balance/usage') is reasonably self-evident. It provides no routing conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_sanctionsScreen a name against sanctions listsAInspect
Screens a person or company name against official sanctions lists: OFAC SDN and OFAC Consolidated (US Treasury), the UN Security Council Consolidated List, the EU consolidated financial sanctions list and the UK Sanctions List, primary names and aliases. Matching ignores case, accents, punctuation, word order and legal forms (LLC, PJSC, GmbH), and tolerates one typo in a word of 4+ letters and common transliterations (Sergei, Sergey, Sergej). Each match has a score from 0 to 1 and a match_type (exact, alias, fuzzy); only scores at or above min_score (default 0.85) are returned, at most 10 designated parties. Always reports which lists were screened, which were unavailable and when each was last refreshed: keep 'data_as_of' with the result as evidence of the check. Latin-script names only; dates of birth, nationalities and addresses are not compared. A match is a signal for enhanced due diligence, never a legal determination. Costs 1 credit.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Person or company name to screen, in Latin script, e.g. 'Rosneft Oil Company PJSC' or 'Sergei Aksyonov' | |
| min_score | No | Optional. Lowest match score returned, 0.7 to 1, default 0.85. Lower finds more spelling variants and more false positives, higher fewer of both, e.g. 0.9 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: matching normalization rules (case, accents, punctuation, word order, legal forms), fuzzy tolerance (one typo in 4+ letter words, transliterations), score range and type, the 10-party cap, list-availability reporting, Latin-script-only limits, the exclusion of DOB/nationality/address comparison, and a 1-credit cost. This is unusually thorough behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph whose sentences each carry distinct payload (what/list scope, matching behavior, scoring, output/evidence, limitations, cost). It is front-loaded with the core purpose, though the length pushes the practical guidance (cost, limitations) toward the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, yet the description explains the returned fields (score, match_type, data_as_of, lists screened/unavailable/last refreshed), the cap of 10 results, and the non-legal nature of matches. An agent has everything needed to invoke and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: it explains the trade-off behind min_score (lower finds more variants and more false positives, higher finds fewer of both) and restates the default 0.85 and the Latin-script constraint on the name. That is more than the schema alone conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (screens) and resource (a person or company name) and enumerates the exact lists consulted: OFAC SDN, OFAC Consolidated, UN, EU, UK. This is immediately distinguishable from the sibling tools (verify_company, verify_vat, validate_iban, enrich_company), none of which perform sanctions screening.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: 'A match is a signal for enhanced due diligence, never a legal determination' and instructs the agent to retain 'data_as_of' as evidence of the check. It does not explicitly state when to prefer this over a sibling or when not to call it, but no sibling offers overlapping functionality, so the routing gap is minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_ibanValidate an IBAN and BICAInspect
Validates an IBAN offline against the SWIFT IBAN Registry (Release 103, Sep 2026, all 89 countries): registered country, length, the national account format (BBAN), check digits 02-98 and the ISO 7064 mod-97 checksum. Returns valid, and when invalid a stable reason_code (malformed, unknown_country, wrong_length, bad_bban_format, bad_check_digits, checksum_failed) with a human reason; on a valid IBAN, the bank_code and branch_code the registry defines for that country. Optional bic: checks the ISO 9362 format and its country code, returned as bic.valid; a BIC country that differs from the IBAN country is a warnings entry, not an invalid result. 'valid' is about the IBAN only. This checks structure, not that the account or BIC exists. Light read: costs 0.2 credit.
| Name | Required | Description | Default |
|---|---|---|---|
| bic | No | Optional BIC (SWIFT code) of the bank holding the account, 8 or 11 characters, e.g. 'COBADEFFXXX'. Checked for format and compared with the IBAN country. | |
| iban | Yes | IBAN to validate, spaces allowed, e.g. 'DE89 3704 0044 0532 0130 00'. Not a VAT number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses offline/non-existence semantics, the stable reason_code taxonomy for invalid input, the exact return fields (valid, reason, bank_code, branch_code, bic.valid), a subtle edge case ('a BIC country that differs from the IBAN country is a warnings entry, not an invalid result'), the scope limit of 'valid' to the IBAN only, and a credit cost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the primary action and then densely packed with return-value detail; nearly every clause adds information (registry release, reason codes, warnings semantics, cost). It is delivered as one long block without visual breaks, so a reader must parse a run-on sentence to reach the BIC rules, costing a point on structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain returns, and it does thoroughly: success fields, invalid reason codes with human-readable reasons, BIC validation results, and the warnings-vs-invalid distinction. An agent has everything needed to call the tool and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description goes further by tying the optional bic to its downstream behavior (bic.valid, country comparison, warnings rather than failure) and clarifying that 'valid' refers to the IBAN alone, which the schema cannot express. It does not restate the iban space/format syntax, which the schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Validates an IBAN offline against the SWIFT IBAN Registry, Release 103') and enumerates exactly what is checked: country registration, length, BBAN format, check digits and ISO 7064 mod-97. This is clearly separable from siblings like verify_vat and verify_company, and the schema even adds 'Not a VAT number' to close the ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong usage context: 'offline' checking, an explicit boundary ('This checks structure, not that the account or BIC exists'), and a cost signal ('Light read: costs 0.2 credit'). It stops short of explicitly routing the agent to alternatives such as verify_vat when a tax identifier is at hand, so no formal when-not/alternative guidance is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_companyVerify a company in an official registryAInspect
Verifies a company against its official state registry and returns its legal status. France (SIREN/SIRET) and the United Kingdom (Companies House company number) are supported. Input: country and a query that is either a registration number or a company name. Returns up to 5 normalized records: registration number, legal name, active/closed status, legal form, activity code, registered address, creation date. Costs 1 credit.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Registration number or company name, e.g. '552032534' or 'Danone' | |
| country | Yes | Registry to query: FR (France, SIRENE/RNE) or GB (UK Companies House) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the credit cost, the result cap (up to 5 records), the two supported registries, and the returned field set. It omits failure behavior (no match found), permission/auth requirements, and whether results are cached or live.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the purpose, then scope, input, return shape, and cost. No filler, though the input sentence largely duplicates the schema and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description compensates by enumerating returned fields, disclosing cost, and bounding result count. Missing only edge-case behavior (no-match/error handling) and permission requirements for a verification call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters including the enum and example formats. The description's restatement ('country and a query that is either a registration number or a company name') adds no syntax or nuance beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (verifies) and resource (company against its official state registry) plus the outcome (legal status). The registry scoping (FR SIREN/SIRET, GB Companies House) makes it clearly distinguishable from siblings like screen_sanctions or verify_vat without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the context of use (checking a company against an official registry) and tells the agent which countries and query forms are valid, but gives no explicit when-not-to-use guidance and never names an alternative such as enrich_company. Usage is inferable rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_vatValidate an EU VAT number (VIES)AInspect
Validates an EU VAT number live against VIES (European Commission) and returns whether it is currently valid, with the registered name and address when the member state provides them. Input: the full VAT number with its country prefix, e.g. 'FR40303265045'. Optional: requester_vat_number, your own EU VAT number; VIES then issues a consultationNumber, its official proof that you made this check at checkedAt. If VIES or the member state is down, returns the last answer VIES gave us for that number within the past 7 days, marked stale: true with its original checkedAt and never a consultation number; with no such answer, a retryable error. Fresh answers carry stale: false. Light read: costs 0.2 credit.
| Name | Required | Description | Default |
|---|---|---|---|
| vat_number | Yes | EU VAT number to check, with its 2-letter country prefix (EL for Greece, XI for Northern Ireland), e.g. 'FR40303265045'. Not an IBAN or a company registration number. | |
| requester_vat_number | No | Optional: YOUR OWN EU VAT number, with country prefix, e.g. 'DE811569869'. When given, VIES returns a consultationNumber proving the check. VIES refuses a requester it does not know as valid. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses the 7-day stale-cache fallback, that stale answers carry stale:true, their original checkedAt, and never a consultation number, that no cached answer yields a retryable error, and that a fresh check costs 0.2 credit. These are exactly the behavioral traits an agent cannot infer from schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and result before detailing fallback and cost semantics. It is dense and semicolon-chained, but each clause (fallback, staleness markers, cost) conveys distinct operational information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns — and it does: validity, registered name and address when provided, stale flag, checkedAt, consultationNumber, and error behavior. An agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description goes beyond it by explaining the functional consequence of requester_vat_number — that VIES issues a consultationNumber as official proof, and that an unknown requester is refused — which the schema only states in passing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (validates an EU VAT number live against VIES) and names the authoritative source. It is trivially distinguishable from sibling validate_iban, and the schema even reinforces the boundary by stating the input is not an IBAN.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: use it to check current VAT validity, and supply requester_vat_number when you need VIES's official proof of the check. It does not explicitly position itself against verify_company or validate_iban, so routing between siblings is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
screen_sanctions2 fields changed- added
Input schema / properties / min_scoreAdded value: +{ + "description": "Optional. Lowest match score returned, 0.7 to 1, default 0.85. Lower finds more spelling variants and more false positives, higher fewer of both, e.g. 0.9", + "maximum": 1, + "minimum": 0.7, + "type": "number" +} - changed
Input schema / properties / name / descriptionPrevious value: -"Person or company name to screen, e.g. 'Acme Trading LLC'"New value: +"Person or company name to screen, in Latin script, e.g. 'Rosneft Oil Company PJSC' or 'Sergei Aksyonov'"
2 tool updates
- Changed
validate_iban2 fields changed- added
Input schema / properties / bicAdded value: +{ + "description": "Optional BIC (SWIFT code) of the bank holding the account, 8 or 11 characters, e.g. 'COBADEFFXXX'. Checked for format and compared with the IBAN country.", + "maxLength": 40, + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / iban / descriptionPrevious value: -"IBAN to validate, spaces allowed, e.g. 'DE89 3704 0044 0532 0130 00'"New value: +"IBAN to validate, spaces allowed, e.g. 'DE89 3704 0044 0532 0130 00'. Not a VAT number."
- Changed
verify_vat2 fields changed- added
Input schema / properties / requester_vat_numberAdded value: +{ + "description": "Optional: YOUR OWN EU VAT number, with country prefix, e.g. 'DE811569869'. When given, VIES returns a consultationNumber proving the check. VIES refuses a requester it does not know as valid.", + "minLength": 4, + "type": "string" +} - changed
Input schema / properties / vat_number / descriptionPrevious value: -"Full VAT number with country prefix, e.g. 'FR40303265045'"New value: +"EU VAT number to check, with its 2-letter country prefix (EL for Greece, XI for Northern Ireland), e.g. 'FR40303265045'. Not an IBAN or a company registration number."
6 tool updates
- First observed
enrich_company - First observed
get_usage - First observed
screen_sanctions - First observed
validate_iban - First observed
verify_company - First observed
verify_vat
Related MCP Connectors
Verify companies, domains and counterparties before transacting. Sanctions, UBO, fraud scoring.
Company and domain due diligence for agents: registers, sanctions, VAT, domain. Pay per call.
EU company dossiers and health, sanctions, PEP, invoice checks, watches, x402 pay guard.
EU compliance checks for AI agents: sanctions, company, VAT ID, IBAN, email. Pay per call.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceCompany data for Spain, France, the UK, Ireland and Poland — registry, KYB and sanctions.1,582 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables screening companies or people against OFAC, UN, EU and UK sanctions lists, looking up SEC EDGAR records, checking domain age and email records, and compiling due-diligence reports with source links and a clear, review, or hold verdict.-
- AlicenseAqualityDmaintenanceFrench compliance and KYC MCP server offering VAT validation (VIES), BODACC legal announcements, and company risk scoring using open data.4MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to look up, resolve, verify and sanctions-screen legal entities across the UK and Europe by merging company registries, GLEIF LEIs and VIES VAT data into one profile with per-field provenance. Supports KYB and due-diligence workflows through name and identifier search, officer and ownership tracing, filings and insolvency checks, and honest reporting of gaps, stale sources or unavailable data.9Elastic 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.