Skip to main content
Glama

European company EU procurement awards (TED)

get_european_company_eu_procurement
Read-only

European public-procurement contract awards won by a company from Latvia (LV), Norway (NO), Belgium (BE), Denmark (DK), Finland (FI), Sweden (SE), Czechia (CZ), Slovakia (SK), Estonia (EE) or Lithuania (LT), from TED (Tenders Electronic Daily, EU Publications Office): award notices matched by the NATIONAL identifier in every form it takes on TED (variantes_identifiant) — buyer, country, subject, notice-level amount, CPV codes, co-winners, official TED link. Depending on the country, 40 to 86% of award notices carry a readable winner identifier (measured 2026-09-17): nombre_avis: 0 is a NON-conclusive absence. France has get_french_company_eu_procurement, the UK get_uk_company_public_procurement. Live TED query, cached 24 h. Paid via x402 ($0.02 in USDC or EURC).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesNational register identifier, e.g. 40003242722
paysYesISO-3166 alpha-2 country code: LV, NO, BE, DK, FI, SE, CZ, SK, EE or LT
api_keyNoOptional Sirenic API key (srn_live_…) to pay with prepaid credits instead of x402 — no wallet needed. Get one at https://api.sirenic.eu/compte. Ignored when x_payment is provided (the signed payment wins). On insufficient balance the tool returns a credits error, not an x402 quote.
x_paymentNoOptional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
hintNoHow to settle the quote, present when payment_required is true.
quoteNoThe signable x402 payment requirements when payment_required is true: {x402Version, accepts[]} where each entry carries scheme, network, amount, asset and payTo (USDC and EURC options at the same numeric amount). Sign one entry and call again with `x_payment`.
resultatNoThe endpoint's JSON response when payment_required is false. Paid responses carry `source`, `disclaimer` and an Ed25519 signature, and every paid JSON response carries a `provenance` array (all tools since 2026-09-06) — one entry per block served, with the official register, licence, version, `as_of` date and `precision_as_of` (what that date means), plus the common per-block envelope: `etat` in a closed list (servi, absence_mesuree, absence_non_conclusive, partiel, perime, indisponible, sans_objet), `motif` when unavailable, `age_jours` (only for publication or ingestion dates), `couverture` (complete / partielle / non_mesurable with its measure) and `confiance` in bands (faible / moyenne / forte, only where a measure grounds it, never averaged across blocks). Read the states before the numbers: an absence_non_conclusive, indisponible or partiel block is never « nothing to report » — only absence_mesuree asserts an absence. Register codes: GET /v1/provenance/registres ; states, closed lists and reading rules: GET /v1/lecture (both free). The PDF tools carry no JSON envelope (the PDF report prints it).
payment_requiredYesTrue when this response is an x402 payment quote instead of data: settle one of the quote's `accepts` options and call the tool again with `x_payment`.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / pays / description
      Previous value: -"ISO-3166 alpha-2 country code: LV, NO, BE, DK, FI, SE, CZ, SK or EE"New value: +"ISO-3166 alpha-2 country code: LV, NO, BE, DK, FI, SE, CZ, SK, EE or LT"
  2. Added

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=true, so the description doesn't need to restate safety. It adds valuable behavioral context beyond annotations: the matching is by national identifier in all its TED forms, the coverage rate varies by country (40–86%), `nombre_avis: 0` is a non-conclusive absence, the query is live but cached 24h, and payment is via x402 with a cost. It does not fully describe the output schema, but the output schema exists and the description lists the main fields. The only minor gap is not detailing pagination or error behavior beyond the credits error, but the description is rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: scope, matching method, coverage caveat, sibling routing, caching, and payment. It is front-loaded with the core purpose. It is slightly long, but the density of useful information justifies the length. A small deduction for the parenthetical coverage measurement date and the detailed payment sentence, which could be trimmed, but overall it is well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 params, output schema, payment mechanism, country-specific coverage), the description covers all essential aspects: what it returns, how matching works, the non-conclusive absence semantics, caching, payment, and sibling alternatives. The output schema exists, so return values need not be fully enumerated. An agent has enough to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 adds meaning beyond the schema: it explains that `id` is the 'national register identifier' and that it is matched in 'every form it takes on TED (`variantes_identifiant`)', which clarifies the semantics of the id parameter. It also explains the `pays` parameter by listing the exact allowed country codes in prose. The payment parameters are already well described in the schema, and the description adds the cost context. This exceeds the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('get'), a precise resource ('European public-procurement contract awards won by a company from [10 listed countries]'), and the data source (TED). It also names the sibling alternatives for France and the UK, which distinguishes it from get_eu_procurement_awards and the country-specific procurement tools. The scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names alternatives: 'France has get_french_company_eu_procurement, the UK get_uk_company_public_procurement.' It also gives a clear when-to-use signal by listing the exact countries covered and explaining the matching method (national identifier). It implies when not to use it (for France/UK) and points to the right sibling. This is explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources