nordic-data
Server Details
Company, KYB, VAT, sanctions, LEI and address data for 15 EU countries.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- Mnymann/nordic-data-mcp
- GitHub Stars
- 0
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.3/5 across 8 of 8 tools scored.
Each tool has a clearly distinct purpose: address autocomplete, basic company lookup, enriched company data, French history timeline, full KYB report, LEI lookup, sanctions screening, and VAT validation. There is some thematic overlap among company tools, but they operate at different levels of detail and serve different needs.
Most tools follow a verb_noun pattern (e.g., autocomplete_address, lookup_company, validate_vat), but company_enriched, kyb_full, and fr_history deviate by using noun-based or abbreviation styles. The pattern is mostly predictable and still readable.
With 8 tools, the count is well-scoped for a data service covering company information, addresses, sanctions, VAT, and LEI. Each tool provides a specific, valuable operation without redundancy or bloat.
The tool set covers core data needs (company lookup, enrichment, KYB, addresses, sanctions, VAT, LEI) but lacks a general company search by name and tools for specific regions beyond France. Minor gaps exist, but the overall surface is sufficient for most use cases.
Available Tools
8 toolsautocomplete_addressARead-onlyIdempotentInspect
Address autocomplete using each country's authoritative register: DAWA (DK), Kartverket (NO), BAN (FR official), MML (FI), and Nominatim (others). Returns ranked address suggestions with coordinates. Supports 15 countries (DK, NO, SE, FI, IE, UK, FR, DE, CZ, PL, LV, EE, NL, BE, LU). Tier note: NL and DE require a Starter+ subscription — free-tier API keys receive HTTP 402 'upgrade_required'; do NOT retry on 402.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Partial address — street name, postcode, city, or any combination. Min 2 characters. | |
| country | Yes | ISO 3166-1 alpha-2 country code, lowercase. |
Output Schema
| Name | Required | Description |
|---|---|---|
| suggestions | No | Ranked address candidates, best match first. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint, destructiveHint) already indicate safe, idempotent read. Description adds key behaviors: returns ranked suggestions with coordinates, covers 15 countries, and discloses subscription limitation for NL/DE with 402 error handling. No contradictions.
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?
Compact paragraph with clear flow: data source claim, output description, supported countries list, and critical tier note. Every sentence adds value with no redundancy or weak language.
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?
Given the complexity of multi-country autocomplete and presence of an output schema, the description covers sources, countries, output type (ranked with coordinates), and error handling for upgraded subscriptions. Could mention pagination or rate limits but overall sufficient for agent usage.
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?
Input schema already documents both parameters (query and country) with 100% coverage. Description adds minimal extra semantics beyond schema, such as clarifying query is partial address and country is ISO alpha-2 lowercase. Baseline 3 is appropriate as schema carries the burden.
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?
Clearly describes the tool as an address autocomplete using authoritative registers per country. Distinguishes itself from sibling tools (all company/KYB/sanctions/VAT related) by focusing on address lookup with specific country-level data sources.
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?
Explicitly states when to use (address autocomplete), lists supported countries, and provides a critical usage constraint: NL/DE require a Starter+ subscription and 402 errors should not be retried. Lacks explicit when-not-to-use or alternatives, but siblings are unrelated, so context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
company_enrichedARead-onlyIdempotentInspect
Enriched company data: basic registry data + DAWA-validated address with lat/lng + industry statistics (DST for DK, SSB for NO, etc.) + Wikidata enrichment (website, employees, CEO, ticker, logo, Wikipedia URL). One call, multiple sources. Supports 15 countries (DK, NO, SE, FI, IE, UK, FR, DE, CZ, PL, LV, EE, NL, BE, LU). Tier note: NL and DE use paid upstream registries — free-tier API keys receive HTTP 402 'upgrade_required'; do NOT retry on 402. On paid tiers, NL costs 5x quota and DE costs 3x.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | National company identifier — same format as lookup_company. | |
| country | Yes | ISO 3166-1 alpha-2 country code, lowercase. |
Output Schema
| Name | Required | Description |
|---|---|---|
| address | No | DAWA-validated address with lat/lng (or country equivalent). |
| registry | No | Same shape as lookup_company output. |
| wikidata | No | Public profile from Wikidata. |
| industry_stats | No | National industry statistics (DST for DK, SSB for NO, etc.). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint as true/true/false, indicating a safe, idempotent read operation. The description adds behavioral details beyond annotations: it explains the multi-source aggregation, the specific data sources (DAWA, DST, SSB, Wikidata), and the error handling for paid upstream registries (HTTP 402). This provides useful context that annotations alone do not cover.
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?
The description is four sentences, each adding value: first sentence lists data types and sources, second emphasizes efficiency, third enumerates countries, fourth provides a critical usage note. It is front-loaded with the main purpose. Some minor redundancy (e.g., 'One call, multiple sources' is already implied) but overall concise and well-structured.
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?
Given the tool has an output schema (so return values are documented separately), the description covers the key aspects: what data is aggregated, which countries are supported, and a notable error handling case (402 on NL/DE). It does not mention rate limits or authentication requirements, but annotations cover safety and idempotency. For a read-only data retrieval tool with good schema support, the description is sufficiently complete.
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?
Input schema has 100% description coverage: 'id' is described as 'National company identifier — same format as lookup_company' and 'country' as 'ISO 3166-1 alpha-2 country code, lowercase.' The description adds a cross-reference for 'id' to the sibling tool 'lookup_company', which aids understanding. Baseline is 3 due to high schema coverage, but the cross-reference and clarity justify a 4.
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?
The description explicitly states 'Enriched company data' and enumerates the specific data types included (basic registry, validated address, industry statistics, Wikidata enrichment). It distinguishes from the sibling tool 'lookup_company' by emphasizing the multi-source aggregation and broader scope. The purpose is clear and unambiguous.
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?
The description provides context for use: 'One call, multiple sources' implies this tool is for comprehensive data retrieval. It also includes a critical usage note about paid tiers for NL and DE, advising against retrying on HTTP 402. However, it does not explicitly state when to use this versus alternative sibling tools like 'lookup_company' or 'kyb_full', so usage guidance is present but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fr_historyARead-onlyIdempotentInspect
French company history timeline. Returns one event per change to the company's name, activity (NAF code), status (active/closed), legal form, or social-economy flag, derived from INSEE Sirene 3.11's bitemporal periodesUniteLegale array. Includes 'initial:' events that show the state at company creation (date, name, NAF code, etc.). Input: 9-digit SIREN number. Cost: 1 quota unit; free tier supported (France is not tier-gated, unlike NL and DE). Cache: 24h server-side. Errors: 400 invalid_id_format (not 9 digits), 403 non_diffusible (SIREN exists but is privacy-protected under art. R123-232-1), 404 not_found, 503 upstream_unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit French SIREN number. Examples: 652014051 (Carrefour), 775670417 (LVMH). No spaces or punctuation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of history events derived. |
| sigle | No | Acronym / short name, if any. |
| siren | No | 9-digit SIREN echoed back. |
| events | No | Chronologically ordered events. Each event has 'initial:<field>' type for the baseline period or a plain field name for subsequent changes. |
| source | No | Upstream data source — 'api.insee.fr'. |
| fetchedAt | No | ISO-8601 timestamp when the data was fetched upstream. |
| sourceNote | No | Provenance note describing the upstream API and field set used. |
| periodCount | No | Number of bitemporal periods returned by INSEE. |
| dateCreation | No | ISO-8601 date the legal entity was created. |
| categorieEntreprise | No | INSEE company size category: PME, ETI, GE. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. Description adds behavioral details: cache duration, quota cost, error conditions, and data source (INSEE Sirene bitemporal array). No contradictions.
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?
Description is somewhat verbose but well-structured, each sentence provides distinct information. Could be slightly shortened without losing clarity, but overall efficient.
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?
Given the presence of an output schema (not shown but exists), the description adequately covers purpose, input, errors, caching, and data scope. It explains the types of events ('initial:' fields) and underlying array, providing sufficient context for an agent.
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 covers the parameter with description and pattern (100% coverage). Description adds value with concrete examples (Carrefour, LVMH) and explicit formatting rules (no spaces/punctuation).
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?
Description clearly states it provides a timeline of French company history events, covering changes to key attributes. It does not explicitly differentiate from sibling tools like lookup_company or company_enriched, but the purpose is specific and well-defined.
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?
Description includes input format, cost, cache, and error codes, providing some guidance. However, it lacks explicit when-use vs alternatives (e.g., when to use history vs current snapshot), so usage context is partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kyb_fullARead-onlyIdempotentInspect
Full Know-Your-Business master report for a company across 15 EU countries (DK, NO, SE, FI, IE, UK, FR, DE, CZ, PL, LV, EE, NL, BE, LU). Aggregates 9 sections: identity, registered address (geocoded), key persons & directors, financial statements, official filings, LEI + corporate ownership, VAT registration, sanctions + PEP screening, adverse media (GDELT 2.0), and a composite risk score. Single call. Cold cache typically completes in 10-15s; warm cache returns in <100ms. Cached 6h on success, 60s when partial. Partial responses: if any of the 9 sections time out, the report still returns with 'truncated: true' and 'sectionsUnavailable: [{section, reason}]' — caller can retry in 60s for a complete report. Tier note: NL and DE use paid upstream registries — free-tier API keys receive HTTP 402 'upgrade_required'; do NOT retry on 402. On paid tiers, NL costs 5x quota and DE costs 3x.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | National company identifier — same format as lookup_company (e.g. DK CVR 8 digits, NO orgnr 9 digits). | |
| country | Yes | ISO 3166-1 alpha-2 country code, lowercase. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description details performance (cold 10-15s, warm <100ms), caching durations (6h success, 60s partial), partial response format (truncated: true, sectionsUnavailable), and tier restrictions (402 error, quota multipliers). No contradictions with annotations.
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?
Information is front-loaded with purpose, then sections, performance, caching, partial responses, and tier notes. Every sentence is informative with no redundancy. Appropriate length for the complexity.
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?
Despite no output schema, the description fully explains what the report contains (9 sections), response behavior (truncated, sectionsUnavailable), performance characteristics, and error handling. Enough for an agent to use the 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 covers 100% of parameters. Description adds value by listing the 15 supported country codes and clarifying that the id format matches lookup_company, providing context beyond the schema's enum and description.
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?
The description clearly states the tool produces a 'Full Know-Your-Business master report' and lists the 9 specific sections aggregated. It distinguishes from siblings like lookup_company and screen_sanctions by offering a comprehensive single-call report.
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?
Provides explicit when-to-use guidance: single call vs. individual tools, partial response retry logic, and specific warnings for NL and DE paid tiers (do not retry on 402). Also clarifies caching behavior and result availability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_companyARead-onlyIdempotentInspect
Look up basic company data (name, address, status, industry, VAT registration, founding date) from official European business registries. Supports 15 countries: DK (CVR), NO (Brønnøysund), SE (Bolagsverket), FI (YTJ/PRH), IE (CRO), UK (Companies House), FR (INSEE Sirene), DE (Handelsregister), CZ (ARES), PL (KAS+KRS), LV (Uzņēmumu reģistrs), EE (Ariregister), NL (KvK), BE (KBO), LU (RCSL). Tier note: NL and DE use paid upstream registries (KvK and Handelsregister). Free-tier API keys will receive HTTP 402 with error 'upgrade_required' — do NOT retry on 402; surface the upgrade URL from the error message to the user. On paid tiers, NL calls cost 5x quota units and DE calls cost 3x; all other countries cost 1x.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | National company identifier. DK=CVR (8 digits), NO=orgnr (9), SE=orgnr (10), FI=Y-tunnus (NNNNNNN-D), IE=CRO (1-7), UK=8 chars, FR=SIREN (9), DE=HRB number, CZ=IČO (8), PL=NIP (10) or KRS (10), LV=11 digits, EE=8 digits, NL=KvK (8 digits), BE=BCE/KBO (10 digits), LU=RCSL (B + digits). | |
| country | Yes | ISO 3166-1 alpha-2 country code, lowercase. One of: dk, no, se, fi, ie, uk, fr, de, cz, pl, lv, ee, nl, be, lu. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | National company identifier as supplied. |
| vat | No | VAT registration metadata (number, registered flag). |
| name | No | Registered legal name. |
| source | No | Upstream registry name (CVR, Brønnøysund, etc.). |
| status | No | Registry status, e.g. active, dissolved, bankrupt. |
| address | No | Registered address as returned by the source registry. |
| country | No | ISO 3166-1 alpha-2 country code (lowercase). |
| founded | No | ISO-8601 founding date. |
| industry | No | Industry classification (NACE / national code + label). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is read-only and idempotent. The description adds valuable behavioral context: HTTP 402 handling for free-tier NL/DE requests, cost quota differences, and that it uses official registries. No rate limits or pagination details are given, but the added context is significant.
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?
The description is moderately concise; it front-loads the core purpose and then adds necessary tier details. It could be tightened slightly but is well-organized and easy to parse.
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?
Given the output schema exists (not shown), the description covers all key aspects: purpose, supported countries, parameter format hints, free-tier restrictions, and error handling. It is complete enough for an agent to correctly invoke the 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 coverage is 100% with detailed parameter descriptions for 'id' (formats per country) and 'country' (enum). The description does not add significant new semantics beyond the schema; it only provides tier context for certain countries, which is already inferable.
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?
The description clearly states the tool looks up basic company data from official European registries, lists the fields (name, address, etc.) and the 15 supported countries, making the purpose very specific and distinct from siblings like company_enriched or kyb_full.
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?
The description provides clear guidance on when to use the tool (for basic company data from 15 countries) and includes important usage notes like 'do NOT retry on 402' and cost multipliers for paid tiers. However, it does not explicitly contrast with sibling tools to help the agent choose between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_leiARead-onlyIdempotentInspect
Look up a Legal Entity Identifier (LEI) via GLEIF — the global standard for entity identification. Returns legal name, registered address, status, parent + ultimate parent relationships, and child entities (subsidiaries). Also supports reverse lookup from a national company number to LEI across 15 countries (DK, NO, SE, FI, IE, UK, FR, DE, CZ, PL, LV, EE, NL, BE, LU). Tier note (reverse mode only): NL and DE use paid upstream registries — free-tier API keys receive HTTP 402 'upgrade_required'; do NOT retry on 402.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | National company ID. Required when mode='reverse'. | |
| lei | No | 20-character ISO 17442 Legal Entity Identifier. Required when mode='lei'. | |
| mode | Yes | 'lei' = look up by LEI directly. 'reverse' = look up LEI from national company number. | |
| country | No | ISO 3166-1 alpha-2 country code, lowercase. Required when mode='reverse'. | |
| include_relationships | No | If true, also fetch parent and child entities. Only applies when mode='lei'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| lei | No | 20-character ISO 17442 identifier. |
| status | No | ISSUED / LAPSED / RETIRED / etc. |
| legal_name | No | |
| registration | No | GLEIF registration metadata (initial date, last update, status). |
| legal_address | No | |
| relationships | No | Only present when include_relationships=true. |
| headquarters_address | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses behavioral traits beyond annotations: returns relationships, supports reverse lookup across 15 countries, and explains 402 behavior. Annotations already indicate read-only, idempotent, non-destructive; description adds valuable nuance without contradiction.
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?
The description is slightly verbose but well-organized: purpose first, then data returned, then modes, then a critical note. Every sentence provides useful information; no 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?
For a tool with 5 parameters (1 required), 100% schema coverage, and output schema present, the description adequately covers usage, modes, return values, and error handling. No gaps remain.
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?
Input schema has 100% coverage, so baseline is 3. Description adds value by explaining the reverse lookup scope (15 countries), the tier-dependent behavior for NL/DE, and the conditional nature of include_relationships (only applies when mode='lei').
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?
Clearly states the tool looks up a Legal Entity Identifier (LEI) via GLEIF and lists specific data returned (legal name, address, status, parent/child relationships). Distinguishes from siblings on the same server (e.g., lookup_company, company_enriched) by focusing on the global LEI standard.
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?
Explicitly describes two modes (lei and reverse) with required parameters for each. Provides critical guidance: a tier note warns that NL and DE use paid upstream registries and advises against retrying on HTTP 402, preventing wasted API calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_sanctionsARead-onlyIdempotentInspect
Screen one or more names against UN, EU, OFAC and PEP sanctions lists (768K+ entries via OpenSanctions). Returns match scores with source attribution.
| Name | Required | Description | Default |
|---|---|---|---|
| fuzzy | No | Enable fuzzy matching. Default true. | |
| names | Yes | Array of person or company names to screen. Max 1000 names per call. | |
| min_score | No | Minimum fuzzy match score, 0-1. Default 0.7. Lower values return more (lower-confidence) matches. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | No | One entry per input name, in submission order. |
| checked_at | No | ISO-8601 timestamp of the screening. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly, idempotent), the description adds the data scale (768K+ entries) and return format (match scores with source attribution), though does not cover edge cases or detailed behavior.
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?
The description is remarkably concise: two sentences front-load the core purpose and add relevant context (data source, return format) without superfluous words.
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?
Given the presence of an output schema (not shown but confirmed), the description provides sufficient context for usage understanding, though it could hint at output structure or score interpretation.
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?
All three parameters are fully described in the schema (100% coverage), and the description adds no further parameter-specific context, so baseline score 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?
The description clearly states the tool screens names against specific sanctions lists (UN, EU, OFAC, PEP) via OpenSanctions, distinguishing it from sibling tools like company_enriched or validate_vat.
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 guidance on when to use this tool versus alternatives, though the context of sibling tool names implies its use for sanctions screening vs. other business data lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_vatARead-onlyIdempotentInspect
Validate a VAT registration number against the official EU VIES service (or HMRC for GB). Returns validity status, registered name, and registered address.
| Name | Required | Description | Default |
|---|---|---|---|
| country | Yes | ISO 3166-1 alpha-2 country code, UPPERCASE. Use GB for the United Kingdom (HMRC), not UK. Supports all EU member states plus GB and NO. | |
| vat_number | Yes | VAT number WITHOUT country prefix — just the digits/characters. Example: for DK29403473, pass '29403473'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | Registered company name, if disclosed by the source. |
| valid | No | True if VIES / HMRC confirms the number is registered and active. |
| source | No | Either 'VIES' or 'HMRC'. |
| address | No | Registered address, if disclosed. |
| country | No | Country code echoed back (uppercase). |
| checked_at | No | ISO-8601 timestamp of the validation. |
| vat_number | No | Submitted VAT number (without country prefix). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful context beyond annotations: it specifies the official service used (VIES/HMRC) and the return fields (validity, name, address). No contradictions with readOnlyHint and idempotentHint. It could mention error handling but is still strong.
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?
The description is two sentences, concise and front-loaded. Every sentence earns its place: first explains the action, second explains the return. No wasted words.
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?
Given that an output schema exists, the description adequately summarizes return values. Parameters are fully described. Minor missing details (e.g., error handling, rate limits) but overall complete for a validation tool with good annotations.
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 has 100% description coverage, and the description adds a valuable example for vat_number (without country prefix). It also clarifies the country code format (UPPERCASE, GB for UK). This adds meaning beyond the schema.
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?
The description clearly states the verb 'Validate', the resource 'VAT registration number', and the specific service (EU VIES or HMRC for GB). It also distinguishes itself from siblings like autocomplete_address and lookup_company, which do different things.
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?
The description implies when to use (to validate VAT numbers) but does not provide explicit guidance on when not to use or compare to siblings. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!