Sirenic
Server Details
French & European company registry for AI agents: KYB, sanctions, annual accounts. x402, no API key.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 108 tools
Most tools are highly specific to a country, resource, and action (e.g., get_french_company_financials vs get_french_company_profile), making them distinguishable. However, there is some overlap among related tools like get_french_company_kyb_file, get_french_company_intelligence, and get_french_company_health_summary, which all provide consolidated company reports and could cause selection ambiguity.
The naming convention is largely consistent: get_<country>_<resource> for lookups, list_<country>_<resource> for listings, search_<entity> for searches, and create_/renew_/stop_ for watch lifecycle. Minor deviations exist (e.g., check_french_regulator_alerts, detect_company_identifiers, suggest_company_names, validate_eu_vat_number, verify_french_invoice) that don't follow the dominant get_/list_/search_ pattern, but they are still readable and predictable.
108 tools is a very large surface for a single MCP server. While the domain (European company intelligence) is broad, the count is excessive and will overwhelm agents; many tools are near-duplicates across countries (e.g., get_*_company_officers for 8+ countries) that could be consolidated into parameterized endpoints.
The tool surface is remarkably comprehensive for the stated domain: identity, financials, officers, insolvency, procurement, sanctions, and monitoring are all covered across many European countries. Minor gaps exist (e.g., no update/delete for watchlists beyond renew/stop, no tool for some countries' officers or filings), but the core workflows are well-covered.
Available Tools
108 toolscheck_french_regulator_alertsFrench regulator alerts (AMF)ARead-onlyInspect
French financial regulator (AMF) alerts and registers — scam check: screen a name against the official AMF blacklists (unauthorized investment websites, scams, AMF impersonation) and look up PSAN crypto-provider registrations and licensed asset-management companies (SGP) by name or SIREN. Use before trusting an investment site, a crypto provider or an asset manager operating in France. Official AMF open data, refreshed daily. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| nom | No | Name to screen (site, brand, company) — required unless siren is given | |
| siren | No | 9-digit SIREN for PSAN/SGP register lookup — required unless nom is given | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
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. The description adds value by mentioning official AMF open data, daily refresh, payment via x402 at a fixed price, and the api_key alternative. This gives the agent useful expectations about data source, freshness, and how the transaction works.
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 reasonably meaty, front-loads the core purpose in the first sentence, and uses a short imperative for use cases. The payment sentence is slightly dense, but it earns its place because it clarifies billing behavior. It could be trimmed without much loss, but it does not feel padded.
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?
The tool has meaningful complexity: multiple register types (blacklists, PSAN, SGP), dual lookup keys (nom/siren), and a dual payment path (x402/api_key). The description covers all of these, and the output schema exists to explain return data. The only minor gap is that it doesn't explicitly say that providing both nom and siren is discouraged, but the schema already implies the either/or requirement.
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%: the schema already documents nom, siren, api_key, and x_payment with clear descriptions. The tool description adds a little semantic context by explaining that the tool screens names against blacklists and lookups by SIREN, but it doesn't go beyond the schema's parameter descriptions. Baseline 3 is appropriate because the schema carries the load.
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 states a specific verb ('screen... against official AMF blacklists' and 'look up PSAN crypto-provider registrations and licensed asset-management companies'), a clear resource (French AMF official data), and defines the exact scope. It is easily distinguished from sibling tools like screen_sanctions_lists or search_eu_financial_authorisations because it names AMF, PSAN, SGP, and the scam-check use case explicitly.
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 gives an explicit use case: 'Use before trusting an investment site, a crypto provider or an asset manager operating in France.' This is clear context for when to choose this tool. It doesn't explicitly name alternative tools to exclude, but the AMF-specific scope and the 'Use before trusting' instruction provide enough orientation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_french_companiesCompare French companiesARead-onlyInspect
Use when asked to compare, rank or choose between 2 to 5 French companies (suppliers, candidates, competitors). Returns a cross-table (identity, deterministic default-risk score, latest filed accounts with their accounting scope, BODACC legal alerts, sanctions screening of the legal name), per-axis rankings and — importantly — an explicit comparabilite block stating when the companies are NOT comparable (different sectors, different sizes, a holding in the batch). NEVER returns an overall winner: a holding with no debt outranks a large industrial group on default risk, which would be misread as a verdict on quality. Since 2026-09-08 nine rankings (risk, revenue, net result, EBITDA margin, lowest debt ratio, liquidity, revenue growth, cash vs short-term debt, seniority) each carry a status in eligibilite_classements (statut autorise/interdit with raison, type evaluatif/descriptif, donnee, perimetre, exercices, couverture): the evaluative risque_le_plus_faible is served ONLY when the batch is comparable for a score and the ranked scores rest on exactly the same axes (axes_communs); amounts are forbidden across different fiscal years, ratios also across different sectors or sizes; a forbidden ranking is absent from classements — never rank companies from solidite.score_risque or the ratios yourself when it is interdit. solidite.classement_risque repeats per company whether it is eligible, ranked, and why not (score_non_concluant, axes_differents); the score stays served with its couverture_axes. Billed per company at $0.12 via x402 — the amount is the unit price times the number of SIREN.
| Name | Required | Description | Default |
|---|---|---|---|
| sirens | Yes | List of 2 to 5 nine-digit SIRENs | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though readOnlyHint and openWorldHint already cover basic safety, the description goes far beyond: it discloses the cross-table contents, the comparability block, the never-returns-an-overall-winner rule, ranking eligibility statuses, and the prohibition on self-ranking when a ranking is interdit. These are exactly the non-obvious behaviors an agent must know.
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 front-loaded with purpose and output summary, followed by caveats and billing. It is dense and contains a very long sentence around ranking statuses, which could be split for readability, but every sentence carries substantive decision-relevant information with 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?
Given the tool's complexity, the rich output schema, and the annotations, the description is complete: it covers purpose, output axes, comparability limitations, ranking restrictions, no-winner behavior, and billing. Nothing an agent needs for correct invocation or interpretation is missing.
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 schema already documents all three parameters adequately. The description adds billing semantics tied to SIREN count and x402, but it does not add meaningful semantic detail per parameter beyond what the schema provides.
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 opens with an explicit trigger: 'Use when asked to compare, rank or choose between 2 to 5 French companies'. It names the resource type and scope precisely, and the comparison/ranking focus clearly separates it from the many single-company get_french_company_* siblings.
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 gives a clear when-to-use rule with concrete use cases (suppliers, candidates, competitors) and batch size constraints. However, it does not explicitly name alternative sibling tools or state when not to use it, so the routing guidance is strong but not fully complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_surveillance_watchCreate a company watchAInspect
Company monitoring for France — use when the relationship OUTLASTS the check (supplier, borrower, portfolio company): create a 30, 90 or 365-day watchlist over French companies and/or directors. Sirenic checks every target DAILY (BODACC filings, status & officer changes, sanctions and AMF-blacklist matches, PSAN/SGP status, Seveso/ICPE changes, new French & EU procurement awards; for directors: new/ended public offices) and delivers events via Ed25519-signed webhook and/or e-mail digest — always pollable with the returned bearer token, plus an expiry reminder 7 days ahead. No account. Paid via x402, per target AND per duration: $0.05 for 30 days, $0.135 for 90 days, $0.50 for 365 days (amount = that unit price × number of targets, so up to $50.00 for 100 targets over a year). No pro-rata refund. A full-size request quotes up to $50.00, above the $1.00 single-payment cap that x402 clients apply BY DEFAULT since @x402/core 2.23 (spendControls): raise spendControls.maxAmountPerPayment, or set spendControls: false, before signing — otherwise your own client rejects the quote without ever calling us.
| Name | Required | Description | Default |
|---|---|---|---|
| duree | No | Watch duration in days (default 30). Sets the unit price per target: 30 = $0.05, 90 = $0.135 (-10%), 365 = $0.50 (-17.8% vs the monthly rate). | |
| No | Optional e-mail address for digests | ||
| cibles | Yes | 1-100 comma-separated targets: 9-digit SIRENs, RNA numbers (W + 9, associations — JOAFE notices) and/or dirigeant:Name entries | |
| api_key | No | Optional 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. | |
| webhook | No | Optional public https URL for signed event batches | |
| x_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses daily monitoring cadence, signed webhook/email delivery, bearer-token polling, a 7-day expiry reminder, pricing per target and duration, no pro-rata refund, and the x402 spend-control cap failure mode. These are material behavioral traits the annotations alone do not convey.
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 definition is dense and front-loaded with purpose and use case. It is long because of genuinely useful pricing and spend-cap details rather than repetition, though splitting payment guidance into a separate paragraph would improve scannability.
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 paid, long-running watch creation tool, it covers what is monitored, how events are delivered, how polling and expiry work, cost calculation, auth options (x402 vs api_key), and a known client-side payment-cap pitfall. Nothing essential for a correct call is missing.
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. The description adds meaningful value by linking duree to unit prices, cibles to the 1-100 target count and max cost, api_key to the credits fallback, and x_payment to the quote-vs-payment behavior.
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 leads with a specific verb and resource: 'create a 30, 90 or 365-day watchlist' over French companies and/or directors. It also frames the tool as ongoing monitoring 'when the relationship OUTLASTS the check,' which distinguishes it from one-shot sibling lookups.
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 explicitly states when to use the tool — when the relationship outlasts a single check — with concrete examples such as supplier, borrower, and portfolio company. It stops short of naming the alternative check tools or stating an explicit 'do not use this for one-off checks.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_company_identifiersDetect company identifiers in text (free)ARead-onlyInspect
FREE. Paste any text (email, invoice, contract, web page) and detect French/EU company identifiers: SIREN, SIRET (Luhn-checked), EU VAT numbers, LEI (ISO 17442 checksum) — each with the recommended Sirenic call and its price. Use this FIRST whenever a company appears in your workflow (supplier onboarding, payment to send, due diligence) to know exactly what to verify and what it costs. Deterministic pattern matching; the text is never stored or logged.
| Name | Required | Description | Default |
|---|---|---|---|
| texte | Yes | Raw text to scan (max 10,000 chars) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already signals non-mutating behavior, but the description adds genuinely useful behavioral context: 'Deterministic pattern matching' and 'the text is never stored or logged.' It also discloses the free pricing angle. These details go beyond what annotations provide and reassure an agent about side effects and persistence. No contradiction 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?
The description is front-loaded with 'FREE' and organized in three purposeful sentences: what it detects, when to use it, and how it behaves. Every sentence contributes, but 'FREE.' partly repeats the title's '(free)' marker, and the routing sentence is slightly long. Still, it is compact and readable.
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 read-only, single-parameter detection tool with an output schema, the description covers input flexibility, identifier types, validation characteristics, recommended follow-up, and privacy. There is no missing information an agent would need to decide to call it and invoke it 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?
The single parameter 'texte' already has 100% schema description coverage with min/max length. The description adds helpful examples of acceptable input ('email, invoice, contract, web page') and reinforces 'any text,' but for a single simple parameter this adds modest value rather than essential semantics. Baseline 3 is appropriate.
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 states a specific verb ('detect'), a precise resource ('text'), and a well-defined set of identifiers: SIREN, SIRET, EU VAT, and LEI. It also clarifies the free and advisory nature ('recommended Sirenic call and its price'), which distinguishes it from the many get_/search_ sibling tools. An agent can tell exactly what this tool does and what it does not do.
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 gives explicit, concrete usage guidance: 'Use this FIRST whenever a company appears in your workflow' with examples like supplier onboarding, payment to send, and due diligence. It clearly tells the agent when to invoke the tool, but it does not name a sibling alternative or state when not to use it, so it falls just short of full routing completeness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_french_company_documentDownload French company documentARead-onlyInspect
Download an official company document (PDF) from the INPI RNE registry. Use IDs from list_french_company_documents. Filed annual accounts (type bilans): any payer, x402 or api_key. Legal deeds (type actes: statutes, general-meeting minutes) are RESERVED to identified Sirenic accounts since 2026-09-19 because they carry personal data: pass api_key, otherwise 401 compte_requis and nothing is charged. Returns the PDF as base64 — documents typically weigh 1-10 MB. $0.10 (x402 in USDC or EURC, or account credits).
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Document family from the list tool | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| document_id | Yes | Document `id` from list_french_company_documents |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint=true, the description adds substantial behavioral context: legal deeds carry personal data, authentication failure returns 401 and charges nothing, insufficient balance returns a credits error rather than an x402 quote, output is base64 PDF, and typical size is 1–10 MB. No contradiction 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?
The description is dense but every sentence earns its place: purpose, prerequisite IDs, type-specific rules, authentication failure behavior, return format, size, and cost. It is front-loaded with the core purpose and avoids 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?
Despite having no output schema, the description fully covers the return format (base64 PDF), expected size, cost, payment methods, and failure modes. Given the tool's complexity around document types and payer eligibility, this is complete enough for an agent to call it 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 meaningful semantics: it explains what each type enum represents (bilans = filed annual accounts; actes = statutes, general-meeting minutes), which types require an api_key, and that document_id must come from the list tool. This goes beyond the schema without repeating it verbatim.
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 (Download), the resource (official company document PDF from INPI RNE registry), and connects to the list tool for IDs. It is specific enough to understand what this tool does, though it does not explicitly distinguish itself from similarly named siblings like get_french_company_pdf_report or get_french_company_file.
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 gives explicit when-to-use guidance: use IDs from list_french_company_documents, and explains type-specific eligibility (bilans for any payer, actes reserved to identified Sirenic accounts). It also clearly states what happens if requirements are not met (401 compte_requis) and names payment alternatives (x402 or api_key).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_expiring_french_public_contractsExpiring French public contractsARead-onlyInspect
Tender anticipation for France: public contracts EXPIRING within a window (1-24 months, default 12) — buyers re-tender 4 to 9 months before expiry, so this surfaces opportunities BEFORE any notice is published. Filter by CPV prefix (45 = construction) and department. Returns buyer, incumbent holders, amounts, lot number when stated, whether the amount is a firm price or an ENVELOPE (call-off orders, subsequent contracts, optional tranches), declared subcontracting, framework-agreement flag (its amount is a MAXIMUM CEILING over the duration, not spend), estimated end dates (initial declared duration; duration amendments are absent from the source). From official DECP open data. Paid via x402 ($0.05 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| cpv | No | Optional CPV prefix, 2-8 digits (45 = construction works) | |
| page | No | Page, 50 per page | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| departement | No | Optional French department code (69, 2A, 971...) | |
| fenetre_mois | No | Window in months, 1-24 (default 12) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint, so the description carries the behavioral burden and delivers substantially. It discloses nuanced return semantics: firm price vs ENVELOPE meaning, framework-agreement amount as a MAXIMUM CEILING not spend, and the data limitation that duration amendments are absent from the source. It also discloses the x402 payment mechanism and pricing, going well beyond structured fields.
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 dense but every sentence earns its place: purpose, filter guidance, return semantics, caveats, source, and pricing. The core value proposition is front-loaded and the technical caveats (ENVELOPE, ceiling, missing amendments) are necessary to prevent misinterpretation of returned data. Slightly long, but justified by the semantic 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?
For a tool with 6 optional parameters, an output schema, and a paid access model, nothing critical is missing. Filter options, payment flow, data source, and return-field semantics are all covered. Pagination and parameter details are already in the schema, and the output schema obviates the need to describe return structure.
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. The description adds meaning beyond the schema by connecting the filters to the use case ('Filter by CPV prefix (45 = construction) and department') and by framing the window parameter with its default and strategic timing rationale. The payment semantics ($0.05) also enrich the api_key and x_payment parameters beyond their schema descriptions.
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 leads with a specific verb and resource: 'Tender anticipation for France: public contracts EXPIRING within a window (1-24 months, default 12)'. It clearly differentiates itself from siblings by stating it 'surfaces opportunities BEFORE any notice is published', which sets it apart from award-based tools like get_eu_procurement_awards and get_french_company_public_procurement.
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 gives clear context for when to use the tool: buyers re-tender 4 to 9 months before expiry, so this is for anticipating opportunities before notices exist. However, it does not explicitly name alternative tools or state when NOT to use it, leaving the exclusion logic implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_belgian_company_filingBelgian annual accounts (NBB)ARead-onlyInspect
One Belgian annual-account deposit as filed (NBB CBSO Authentic Data) — Belgian company financial statements: structured JSON when the NBB publishes one, otherwise the official PDF returned base64-encoded. The filing date does not predict which of the two you get. Reference comes from list_belgian_company_filings. Deposits are immutable. Paid via x402 ($0.15 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 10-digit Belgian enterprise number (KBO/BCE) | |
| api_key | No | Optional 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. | |
| reference | Yes | Deposit reference taken from the filings list, e.g. 2026-00123205 | |
| x_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the readOnlyHint and openWorldHint annotations: the output format (structured JSON vs base64-encoded PDF) is unpredictable, deposits are immutable, the call incurs a $0.15 x402 fee, and the reference must come from a prior list call. These details inform the agent's expectations about output handling, caching, and 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?
Five compact sentences, each carrying a distinct piece of information: the resource and return formats, the unpredictability of the format, the reference source, immutability, and the payment requirement. The core function is front-loaded in the first sentence, and there is no redundant or filler text.
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 adequately conveys the dual return format and the high-level content ('Belgian company financial statements'). It also covers cost, immutability, and the dependency on list_belgian_company_filings. A minor gap is the lack of detail about JSON fields, but for a single-filing retrieval tool this is acceptable.
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 input schema covers 100% of parameters with detailed descriptions, including reference provenance, api_key vs x_payment priority, and the payment-quote behavior. The tool description only adds the fee amount and reinforces the reference provenance, neither of which materially changes how parameters are populated, 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?
The description states a specific verb+resource: 'One Belgian annual-account deposit as filed (NBB CBSO Authentic Data)' and clearly distinguishes itself from the list sibling by using 'One' and by stating 'Reference comes from list_belgian_company_filings.' This leaves no ambiguity about what the tool retrieves or how it differs from the many country-specific filing tools.
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 explicitly establishes a precondition: 'Reference comes from list_belgian_company_filings,' which routes the agent to call the list tool first. It does not explicitly enumerate when-not-to-use alternatives, but the country and deposit specificity in the name and description make the intended usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_belgian_insider_transactionsBelgian insider transactionsARead-onlyInspect
Insider transactions at a Belgian listed company — managers transactions under MAR Article 19, as notified to the FSMA: are its managers buying or selling? Issuer-level aggregate over a rolling 12 months — notification counts, gross buy and sell amounts, net flow, breakdown by declarer category, plus the underlying notifications. No individual is ever named, and the breakdown is withheld when it would single someone out. Use it as a governance signal before investing in or contracting with a listed Belgian company. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 10-digit Belgian enterprise number (KBO/BCE) | |
| depuis | No | Start date YYYY-MM-DD (default: rolling 12 months) | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile; the description adds genuinely non-obvious behavior: rolling 12-month aggregation window, the privacy guarantee that no individual is ever named, and that the breakdown is withheld when it would single someone out. It also discloses the x402 payment cost. No contradiction 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?
Five compact sentences where each carries distinct information: purpose, output composition, privacy caveat, usage context, and cost. The purpose is front-loaded. Slightly longer than strictly necessary — the 'are its managers buying or selling?' flourish restates the first sentence — but nothing is 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?
With an output schema documenting returns, annotations covering the read-only safety profile, and 100% parameter coverage, the description adequately fills the remaining gaps: legal basis, aggregation semantics, privacy withholding, use case, and cost. The only missing piece is explicit sibling routing for non-Belgian jurisdictions.
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 (id pattern and KBO/BCE meaning, depuis format and default, api_key payment fallback, x_payment precedence). The description reinforces the rolling-12-month default and payment cost but adds no new parameter-level semantics, 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 precisely what the tool returns: insider transactions of Belgian listed companies' managers under MAR Article 19, FSMA-notified, at issuer-level aggregate (notification counts, gross buy/sell amounts, net flow, declarer-category breakdown, underlying notifications). The explicit 'Belgian' + 'FSMA' scoping distinguishes it immediately from sibling get_german_insider_transactions.
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 a clear trigger: 'Use it as a governance signal before investing in or contracting with a listed Belgian company,' and the territorial scoping (Belgian, FSMA) implies the boundary with country-specific siblings. It stops short of explicitly naming alternatives or stating when-not-to-use cases, such as routing German requests to get_german_insider_transactions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_licencesFrench regulatory authorisationsARead-onlyInspect
Regulatory authorisations of a French company by SIREN: payment institution, e-money institution, account-information provider, payment agent or exempt entity (EBA PSD2 register, refreshed daily), insurance undertaking (EIOPA), electronic-communications operator (ARCEP) — with authorisation dates, licensed PSD2 services, EEA passporting and withdrawals. Use it before paying, onboarding or contracting with a regulated counterparty. Not authorised is an answer too. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds valuable behaviors: data freshness ('refreshed daily'), the semantic claim that 'Not authorised is an answer too' (absence of a license is a meaningful result), and the x402 payment cost. These details help an agent set expectations about output interpretation and the paywall — all without contradicting the 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?
Three tightly written sentences each earn their place: the first lists covered authorisation types and sources, the second gives the decision use case, the third clarifies the meaning of absence and the payment method. No redundant or filler content exists.
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 one required parameter, a rich output schema, and read-only annotations, the description covers all critical aspects: data scope, source registers, refresh cadence, use case, and payment mechanism. Nothing essential for selecting or invoking the tool correctly is missing.
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 references 'by SIREN' and mentions x402 payment, but the schema already fully explains siren, api_key, and x_payment, including the 9-digit pattern and the credit-vs-x402 fallback. The description adds no parameter-level detail beyond what the schema provides.
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 opens with a precise, action-oriented statement: 'Regulatory authorisations of a French company by SIREN' and enumerates concrete categories (payment institution, e-money institution, insurance undertaking, etc.) with their source registers. This clearly distinguishes the tool from broad French company profile tools and EU-wide search tools among the siblings.
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 gives an explicit use case: 'Use it before paying, onboarding or contracting with a regulated counterparty,' and clarifies that a 'Not authorised' result is meaningful. However, it does not name alternatives or state when not to use this tool (e.g., when an EU-wide search would be more appropriate), leaving some routing to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_procurement_competitorsFrench procurement competitorsARead-onlyInspect
Competitive intelligence on French public procurement: who wins contracts on the SAME CPV segments as a given company (SIREN) — top rival contractors over the last 3 years with counts, amounts and shared segments. From official DECP open data. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses key behavioral facts: the tool is paid via x402 at a specific cost ($0.02), uses official DECP open data, covers a 3-year window, and returns counts, amounts, and shared segments. This adds meaningful operational context beyond what annotations alone convey.
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 a single dense sentence that front-loads the core value proposition, then adds the source, timeframe, and payment details without any fluff. Every clause earns its place and the structure is easy to parse quickly.
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, return values do not need explanation. The description covers purpose, input concept (SIREN), data source, time window, payment requirement, and high-level outputs. It lacks explicit sibling routing, but the core calling context 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?
Schema description coverage is 100%, so all three parameters are already documented. The tool description mostly repeats 'SIREN' and adds no new parameter-specific meaning; the baseline of 3 applies because the schema handles the heavy lifting.
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 a specific purpose: identifying rival contractors who win French public procurement contracts on the same CPV segments as a given SIREN, with counts, amounts, and shared segments. This differentiates it from sibling tools like get_eu_procurement_awards or get_french_company_public_procurement by emphasizing competitor analysis rather than contract lists or awards.
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 use case is implied through phrases like 'competitive intelligence' and 'top rival contractors', so an agent can infer when to choose it. However, it never explicitly names alternative tools or states when NOT to use it, leaving the decision to inference rather than clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_croatian_company_accountsCroatian company annual-accounts filingsARead-onlyInspect
Croatian company annual-accounts filings recorded at the Sudski registar (daily snapshot): per financial year, the filing type (GFI-POD report, statement of inactivity, statement of correction), consolidation flag, period covered and filing date, newest first — metadata only, never the document. aucun_depot: true is a measured fact. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| oib | Yes | 11-digit Croatian OIB (e.g. 92803032010); an 8- or 9-digit MBS court-register number is accepted too | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark read-only and open-world, and the description adds substantial behavioral context: daily snapshot, ordering, specific filing types, no document delivery, the measured-fact semantics of 'aucun_depot', and payment via x402 with exact pricing. No contradiction 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?
Two dense sentences front-load the core scope and output, then add the crucial metadata-only caveat and pricing. Every clause adds useful information with no padding.
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 an output schema exists and the input schema is fully documented, this description provides the remaining operational context an agent needs: source, freshness, ordering, scope of results, payment requirements, and a precise data-quality note. Nothing required to invoke the tool correctly is missing.
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 covers all three parameters with rich descriptions (OIB format, optional api_key and x_payment semantics), so the description adds no additional parameter-level meaning. Baseline 3 applies because schema coverage is 100%.
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 resource ('Croatian company annual-accounts filings'), source registry ('Sudski registar'), and exactly what is returned (filing type, consolidation flag, period, filing date, newest first). This distinguishes it from sibling tools by explicit content scope and metadata-only nature.
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?
Clearly defines the use case: retrieving Croatian annual-accounts filing metadata, with a firm exclusion ('metadata only, never the document'). It does not name alternative tools for documents, events, or insolvency, so it stops short of full when-to-use-vs-alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_croatian_company_eventsCroatian company court-register entriesARead-onlyInspect
Croatian company statutory entries from the official Sudski registar (daily snapshot): every typed entry in register order (108 types: founding act, statute, legal form, capital changes, mergers and divisions, enterprise contracts, dissolution grounds, court decisions). The published text is served only for a closed list of entry types without natural persons (texte_retenu: true otherwise); court decisions come as court, reference and date. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| oib | Yes | 11-digit Croatian OIB (e.g. 92803032010); an 8- or 9-digit MBS court-register number is accepted too | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint, but the description adds substantial behavioral detail: it is a paid tool via x402 ($0.02), the published text is restricted to certain entry types (texte_retenu), and court decisions have a specific format (court, reference, date). This goes beyond annotations and helps the agent understand non-obvious 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 dense but well-structured: the first sentence defines the resource and scope, the second covers text restrictions and payment. It is front-loaded with the core purpose, and each clause adds necessary information, though it could be slightly more streamlined.
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's complexity (payment, text restrictions, 108 types) and the presence of an output schema, the description covers the essential aspects: data content, payment mechanism, and special formatting. It does not mention pagination or rate limits, but these are minor given the output schema exists.
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 fully documents oib, api_key, and x_payment. The description does not add parameter-level semantics beyond what the schema already provides, so the baseline of 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?
The description states a specific verb and resource: it retrieves Croatian company statutory entries from the official Sudski registar. It enumerates 108 entry types, which distinguishes it from siblings like get_croatian_company_accounts or get_croatian_company_insolvency by content.
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 usage for statutory entries from the court register but does not explicitly name alternative tools or state when not to use it. The context is clear, but there are no direct exclusions or cross-references to other Croatian-specific tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_croatian_company_insolvencyCroatian company insolvency (Sudski registar)ARead-onlyInspect
Croatian company insolvency status from the official Sudski registar (court register, daily snapshot of the open API, Otvorena dozvola): running procedure — bankruptcy (stečaj), liquidation, pre-bankruptcy stages, bankruptcy or liquidation estate — and every published court decision with its extracted facts (court, case reference, date), never the decision text. aucune_procedure: true is a measured fact on the complete snapshot. Unknown OIB/MBS = 404 (deleted subjects are not published by the API). Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| oib | Yes | 11-digit Croatian OIB (e.g. 92803032010); an 8- or 9-digit MBS court-register number is accepted too | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnly/openWorld annotations, the description reveals important behavior: it never returns decision text, `aucune_procedure: true` is a measured fact on the complete snapshot, unknown identifiers produce 404 because deleted subjects are unpublished, and the call is paid via x402. This is substantive, non-obvious behavioral context that helps the agent interpret results correctly.
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 essential purpose is front-loaded, and the extra clauses about source, output scope, the no-procedure flag, 404 semantics, and pricing are each informative. The long first sentence is dense but not wasteful; a small structural cleanup would make it very strong.
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 read-only, paid, country-specific insolvency lookup, the description covers data source, output content limitations, key flag semantics, error behavior for unknown identifiers, and cost. With the output schema and annotations also available, nothing an agent needs to call and interpret this tool is missing.
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 input schema already describes all three parameters with 100% coverage, so the baseline applies. The description reinforces that OIB/MBS strings are valid and mentions payment-related handling, but it does not add material 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 names a specific verb and resource — retrieving Croatian insolvency status from the official Sudski registar — and enumerates the covered procedures and court decisions. This scope clearly differentiates it from country-specific siblings such as get_croatian_company_accounts/events and other countries' insolvency tools.
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 Croatian court-register subject matter gives clear context for when this tool is appropriate, and the 404/unknown-OIB behavior plus payment requirement set expectations. It does not explicitly name alternative siblings or state 'when not to use', but the country/data-source framing makes the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cypriot_company_officersCypriot company officers (DRCOR)ARead-onlyInspect
Cypriot company officers from the Registrar of Companies open data (DRCOR, data.gov.cy, CC BY 4.0, monthly national snapshot): every mandate published for the company — directors, alternate directors, company secretaries, assistant and deputy secretaries, authorised persons of overseas companies — with the register's Greek role label and a closed-list family (role.famille), sorted by family then name; aucun_mandat_publie is measured on the complete snapshot. Name and role only: the source publishes no birth date, address, nationality or appointment date, and does not tell natural persons and corporate officers apart. Legal persons only: HE (company) and AE (overseas company); business names, partnerships and BN are refused before payment. 503 fail-closed when the monthly snapshot is missing or older than 45 days. Paid via x402 ($0.01).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Cypriot registration number with its prefix: HE (company) or AE (overseas company), e.g. HE165 or AE1 (ΗΕ 165 accepted) | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only declare readOnlyHint and openWorldHint, while the description adds substantial behavioral context: monthly snapshot semantics, 503 fail-closed behavior, sorting order, lack of natural/corporate distinction, and the $0.01 payment requirement. No contradiction with annotations exists.
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 front-loaded with the core purpose and contains no true filler, but the opening sentence is dense, combining source attribution, license, role enumeration, sorting, and a field reference. It is justified information but would benefit from clearer separation.
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 read-only officer lookup with a rich schema and output schema, the description covers return semantics, source limitations, unsupported legal forms, payment behavior, and failure mode. No significant decision-relevant information is missing.
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 input schema already documents all three parameters with 100% coverage. The description reinforces the HE/AE interpretation and adds that invalid entity classes are refused before payment, but it does not materially expand meaning beyond what the schema provides, so the baseline of 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?
The description states a specific resource and scope: Cypriot company officers from DRCOR, with the exact officer types returned and the role-family structure. This clearly distinguishes it from sibling tools like get_danish_company_officers or get_uk_company_officers.
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 gives explicit boundaries: only HE/AE legal persons are accepted, business names/partnerships/BN are refused, and the source lacks appointment dates and personal details, helping an agent decide when this tool is not appropriate. It does not name a specific alternative sibling, but the entity-type and country exclusions are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_czech_company_insolvencyCzech company insolvency (ISIR)ARead-onlyInspect
Insolvency record of a Czech company from the official ISIR register (Insolvenční rejstřík, Ministry of Justice), history since 2008: every proceeding with its case number (spisová značka), court, published status (úpadek, konkurs, reorganizace, oddlužení...), opening and closing dates, claim-filing deadline and its event trail with official document links — Czech labels as published. The event list is capped at the 100 MOST RECENT events per case: nombre_evenements carries the real total and evenements_tronques says whether it is truncated. Publication is compulsory by Czech law, so a company with no proceeding gets an explicit positive answer (aucune_procedure: true), dated by collecte_le (last complete collection; a stale stock returns 503 rather than a stale clean answer). LEGAL-PERSON debtors only: natural persons are excluded at ingestion (GDPR minimisation), so a sole trader's or other natural person's IČO — the majority of Czech IČOs — is refused (404) rather than reported as clean. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| ico | Yes | 8-digit Czech IČO (company identification number), e.g. 45274649 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the readOnlyHint and openWorldHint annotations: event lists are capped at 100 most recent events, truncation is indicated by evenements_tronques, stale data return 503 rather than a stale clean answer, and natural persons get a 404 rather than a clean result. These are non-obvious behaviors an agent needs to interpret responses correctly.
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?
Although fairly long, the description is dense and front-loaded: it states the resource first, then enumerates the returned data, then critical edge cases. Every sentence conveys necessary operational information such as truncation, staleness handling, legal-person restrictions, and payment.
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's complexity and the presence of an output schema, the description is remarkably complete. It covers input constraints, error semantics (404 for natural persons, 503 for stale stocks), truncation behavior, absence-of-proceeding representation, collection timing, and payment mechanism. An agent has enough information to invoke the tool correctly and interpret its results.
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 schema already covers all three parameters with descriptions, so the baseline is 3. The description adds meaningful semantic value by clarifying that the ico parameter must belong to a legal person, that natural-person IČOs will be refused, and that the tool is paid via x402 at a known cost. This goes beyond the schema's pattern and example.
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 identifies the tool's purpose: retrieving a Czech company's insolvency record from the official ISIR register, with a specific list of included data such as case numbers, courts, statuses, dates, and document links. It is easily distinguished from sibling tools like get_uk_company_insolvency and get_latvian_company_insolvency by naming the Czech register and country explicitly.
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 gives clear when-to-use context, explicitly stating that legal-person debtors are the only supported subjects and that natural persons' IČOs will be refused with a 404. It does not name alternative tools for natural persons or other countries, but the exclusion and error behavior effectively guide the agent away from invalid usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_danish_company_filingDanish annual accountsARead-onlyInspect
One Danish fiscal year — financial statements decoded from the company's XBRL annual report (Erhvervsstyrelsen): revenue (null = not published, never zero), gross result, operating result, pre-tax and net result, equity, total assets, debts, average employees, plus prior-year comparatives as published in the same filing. Amounts in the filing currency (mostly DKK); the official XBRL document URL is included. Closing date comes from list_danish_company_filings. Paid via x402 ($0.05 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 8-digit Danish CVR number | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| date_cloture | Yes | Fiscal-year closing date, YYYY-MM-DD, e.g. 2025-12-31 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint and openWorldHint; the description adds valuable caveats beyond that: revenue is 'null = not published, never zero', amounts are in the filing currency (mostly DKK), and the official XBRL URL is included. No contradiction with the read-only annotation — the description consistently describes a read operation. The payment detail (x402, $0.05) is also disclosed, which the annotations 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?
Two sentences carry all essential information: what data is returned, null semantics, currency, URL inclusion, the prerequisite list call, and pricing. No filler, no repetition of schema details — each clause earns its place.
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?
An output schema exists, so return values need no explanation in the description. The description covers the input workflow (list first), output contents, currency caveat, null semantics, and payment mechanism, making it complete for an agent to call this read-only 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 description coverage is 100%, so all parameters (id, api_key, x_payment, date_cloture) are already documented in the schema. The description adds a workflow hint connecting date_cloture to list_danish_company_filings, but does not add meaning beyond that, matching the baseline of 3 for full schema coverage.
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 states a specific verb+resource+scope: it decodes one Danish fiscal year's financial statements from the company's XBRL annual report (Erhvervsstyrelsen) and enumerates the exact fields returned. It distinguishes itself from the sibling list_danish_company_filings by referencing it as the source of the closing date. The Danish-specific framing and CVR-based id separate it from country-specific siblings like get_french_company_filing and get_belgian_company_filing.
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 gives an explicit workflow cue — 'Closing date comes from list_danish_company_filings' — telling the agent to list filings first and then call this tool with the chosen date. It does not explicitly state when-not-to-use or name alternative tools, but the Danish scope and the list-then-get pattern provide clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_danish_company_officersDanish company officers (CVR)ARead-onlyInspect
Danish company officers and directors, live from CVR, the official Danish company registry (Erhvervsstyrelsen): executive board (Direktion), board of directors (Bestyrelse) with deputies and how each member was elected, fully liable partners of an I/S or K/S, and auditors — name, body, role and mandate dates. Active mandates by default; inclure_anciens adds ended mandates, which is where founders (stiftere) normally are. Long boards are capped at 300 active / 200 ended mandates, flagged by tronque (the counts stay exact). Beneficial owners (reelle ejere) are NOT exposed by this access and are never guessed. GDPR minimisation: no address, no personal identifier, and the register publishes no date of birth here. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| cvr | Yes | 8-digit Danish CVR number, e.g. 24256790 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| inclure_anciens | No | Also return ended mandates, each with its end date |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses substantial operational behavior: long boards are capped at 300 active and 200 ended mandates and flagged by tronque while counts stay exact, GDPR minimisation means no address or personal identifier is returned, beneficial owners are never guessed, and the output is paid via x402 at $0.01. This goes well beyond what the annotations alone convey.
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 dense but front-loaded with the core purpose, and every subsequent sentence adds non-obvious operational context: mandate defaults, cap behavior, GDPR privacy constraints, exclusions, and payment. There is no filler and no unnecessary repetition of the schema.
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 4-parameter tool with an output schema and readOnlyHint/openWorldHint annotations, the description covers data scope, defaults, limitations, privacy, exclusions, and payment. Nothing needed to correctly select and invoke the tool is missing.
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 real meaning beyond the schema. It clarifies that active mandates are the default, that inclure_anciens is where founders are normally found, and that capped results are flagged by tronque while counts remain exact.
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 states a specific verb and resource: retrieving Danish company officers and directors live from CVR, with an explicit list of included body types and data fields such as name, body, role, and mandate dates. It also differentiates itself by explicitly disclaiming beneficial owners, which separates it from sibling beneficial-owner tools.
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 gives clear context: live CVR data, active mandates by default, and when the inclure_anciens parameter is needed — ended mandates, where founders usually appear. It explicitly states an exclusion, that beneficial owners are not exposed by this access, but it does not name alternative sibling tools or offer explicit when-to-use/not-use routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_estonian_company_accountsEstonian annual accountsARead-onlyInspect
Estonian company annual accounts — annual-report key figures from the official e-Business Register open data (RIK, CC BY 4.0, refreshed MONTHLY): EVERY published financial year since 2019 in one call — balance sheet (assets, equity, current/non-current liabilities, cash), revenue, employee expense, depreciation, operating profit, profit before tax, net profit and average FTE headcount, in EUR as published (null = not published, never zero). Statutory and consolidated figures kept apart. Filings submitted as PDF only carry no structured figures and are not served. No default-risk score is computed for this country yet: the response carries score_defaillance (statut non_evaluable, closed-list reasons — GET /v1/lecture explains them); never read it as a low score. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| registrikood | Yes | 8-digit Estonian registry code (registrikood, e-Business Register), e.g. 10003666 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint. The description adds substantial behavioral context: data source (RIK, CC BY 4.0), monthly refresh, null semantics (null = not published, never zero), statutory/consolidated separation, PDF-only handling, absence of default-risk score, and payment via x402. It also explicitly warns not to misread score_defaillance as a low score, which is critical for correct interpretation.
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 a single dense paragraph but well-organized: it opens with the core purpose, then lists covered figures, then notes on PDF and default risk, and ends with payment. Every sentence adds value; there is no fluff. It is not as short as possible but appropriate for the information density. Front-loaded with the main purpose.
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 data-retrieval tool with an output schema (which explains return values), the description covers all operational aspects an agent needs: data source, refresh cadence, coverage, null handling, statutory/consolidated, PDF limitation, default-risk caveat, and payment. No critical usage information is missing.
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% and parameter descriptions are already detailed (e.g., api_key payment method, x_payment header, registrikood pattern). The description adds the exact cost ($0.02) and clarifies that payment is via x402, and reiterates that registrikood is an 8-digit code. This goes slightly beyond schema, justifying a 4 rather than baseline 3.
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+resource: 'Estonian company annual accounts — annual-report key figures'. It clearly distinguishes from siblings by country (Estonia) and scope (every financial year since 2019). It also notes statutory vs. consolidated figures and PDF-only limitation, further refining its purpose.
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 clear context: 'EVERY published financial year since 2019 in one call' and notes limitations ('Filings submitted as PDF only... are not served', 'No default-risk score is computed for this country yet'). While it doesn't name alternative tools explicitly, the country-specific naming and coverage statements make usage intent clear. It lacks explicit 'use instead' guidance but is still strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_estonian_company_officersEstonian company officers and governanceARead-onlyInspect
Officers and governance of an Estonian company from the official e-Business Register open data (RIK, CC BY 4.0), refreshed daily from the national photo: management board members, procurators, liquidators, bankruptcy trustees, general and limited partners, contact persons, share-register keepers (persons entered on the registry card), plus supervisory board members and chair, audit firms, auditors and bankruptcy committee members recorded beside the card. organe and role are closed lists with the register's code and wording (GET /v1/lecture); current mandates only — the source publishes no end date or history — with the registration date; standard representation rules (statutory template texts) and special conditions (type only). GDPR: natural persons come with first name, last name and role only — never the published identifier hash, birth date, address or e-mail. Legal persons only: sole proprietorships (FIE) are refused (404, payment cancelled). A known legal person with no registered role gets aucun_mandat_inscrit: true. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| registrikood | Yes | 8-digit Estonian registry code (registrikood, e-Business Register), e.g. 10003666 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint and openWorldHint annotations: it discloses the current-mandates-only limitation, absence of end dates/history, GDPR redaction rules, the 404/payment cancellation for FIE, the no-role marker, and the x402 payment cost. This is rich behavioral disclosure with no contradiction to 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?
The description is long but exceptionally information-dense, with the core purpose front-loaded and every clause contributing a constraint or behavioral detail. The phrasing is occasionally awkward, but there is no fluff and no sentence fails to earn its place.
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?
An output schema exists, so return-value details are already covered. The description adds coverage of data source, refresh cadence, role taxonomy, current-mandate scope, GDPR limitations, legal-person restriction, error behavior, and payment mechanism. An agent has everything needed to decide whether and how to call 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 adds meaningful context by clarifying that registrikood must belong to a legal person (FIE is rejected) and by explaining the x402 payment flow that governs the x_payment parameter.
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 identifies the resource as officers and governance of an Estonian company and enumerates the exact role categories returned. This distinguishes it from Estonian siblings like get_estonian_company_accounts and get_estonian_company_shareholders, as well as from other countries' officer tools.
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 gives clear context: it is for Estonian companies only, returns current mandates only, and explicitly excludes sole proprietorships (FIE), which are refused with a 404. It does not name alternative sibling tools, so it falls short of full routing guidance, but the usage conditions are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_estonian_company_registry_rulingsEstonian registry rulingsARead-onlyInspect
Registry rulings (määrused) of an Estonian company from the official e-Business Register open data (RIK, CC BY 4.0, DAILY national photo): registry entries, orders to remedy defects, warnings of striking-off for an unfiled annual report, warnings of compulsory dissolution for insufficient net assets, and annual-report fines — each with its date, extra deadline, status and force date, Estonian codes and labels as published. An alerte flag marks the CLOSED list of warning/fine types returned with the answer; nombre_alertes excludes only rulings whose etat_code is EXPLICITLY known as resolved (currently L only) — a qualified ruling later resolved that way keeps alerte: true but no longer counts, while every other state (including J, K, or any code not yet seen) still counts, fail-closed on the unknown. types_non_qualifies lists this entity's other rule types, so a zero is never read as “no warning”. A still-registered entity with no ruling returns an explicit positive answer, dated with the photo actually served (photo_le); a struck-off entity leaves the open data entirely and returns 404 instead of a false clean sheet. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| registrikood | Yes | 8-digit Estonian registry code (registrikood, e-Business Register), e.g. 10003666 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint=true and openWorldHint=true, the description adds substantial behavior beyond annotations: fail-closed counting for unknown etat_code codes, the distinction between alerte and nombre_alertes, the explicit positive answer for a still-registered entity with no ruling, the 404 for struck-off entities, and the x402/prepaid-credit payment 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 dense and front-loaded with the core resource and scope, then proceeds to nuanced edge cases and payment details. It is long, but every sentence carries decision-relevant information about result interpretation or failure behavior; only slight restructuring would improve readability.
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's complexity, the description covers data source, ruling types, status fields, counting semantics, no-data cases, struck-off behavior, and payment options. With the output schema also provided, an agent has everything needed to call the tool correctly and interpret its response.
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 all three parameters well. The description adds useful contextual information about payment and output semantics, but it does not materially deepen the meaning of the parameters themselves, matching the baseline for full schema coverage.
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 identifies a specific resource (Estonian company registry rulings from the official e-Business Register open data) with a clear read operation and enumerated content types: registry entries, warnings, fines, and orders. This distinguishes it from siblings like get_estonian_company_accounts and other country-specific tools without 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?
The description gives strong contextual guidance for when the tool applies: it targets Estonian companies, includes both no-ruling and struck-off edge cases, and specifies the data source and licensing. It does not explicitly name alternatives or state when not to use it, but the scope is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eu_procurement_awardsEU procurement awards (TED)ARead-onlyInspect
European public procurement — government contracts and tender award notices won by a French company, from official TED data: buyer, country, subject, notice-level amount, CPV codes and official links. Identifier-matched only (SIREN/SIRET incl. spaced variants) — coverage is eForms notices since 2023-10-25 above EU thresholds, and ~57% of award notices carry a usable identifier, so an empty list is not proof of absence. Complements get_french_company_public_procurement (French DECP, below-threshold). Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, openWorldHint), the description discloses critical non-obvious behavior: only ~57% of award notices carry a usable identifier, so an empty list is not proof of absence; coverage starts at 2023-10-25; and the tool is paid via x402 at $0.02. It also clarifies the identifier-matching behavior (SIREN/SIRET with spaced variants). This goes well beyond the annotations and no contradiction exists.
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 dense but well-organized: scope and content first, then coverage caveat, then complementary tool, then payment. Every sentence earns its place; it is slightly long with embedded clauses, but no waste and no repetition.
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?
An output schema exists, so return-value details are unnecessary. The description covers purpose, coverage limitations, the empty-result caveat, the complementary sibling, and cost. The payment flow is further detailed in the parameter descriptions, and no essential context for correctly invoking the tool is missing.
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%, with siren, api_key, and x_payment all documented in the schema. The tool description adds identifier-matching nuance but no additional parameter-level meaning or syntax beyond what the schema already provides, so the baseline score of 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?
The description states a specific verb and resource: retrieving European public procurement awards won by a French company from official TED data. It enumerates the returned content (buyer, country, subject, notice-level amount, CPV codes, links) and explicitly differentiates itself from the sibling get_french_company_public_procurement, so an agent can immediately tell what this tool does and how it differs.
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 names the alternative tool explicitly ('Complements get_french_company_public_procurement (French DECP, below-threshold)') and supplies coverage conditions: eForms notices since 2023-10-25, above EU thresholds, identifier-matched. This gives a clear context for when to choose this tool over the French national one, though it could be even more explicit about 'use this when you need EU-wide above-threshold awards.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_european_company_eu_procurementEuropean company EU procurement awards (TED)ARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | National register identifier, e.g. 40003242722 | |
| pays | Yes | ISO-3166 alpha-2 country code: LV, NO, BE, DK, FI, SE, CZ, SK, EE or LT | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
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.
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.
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.
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.
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.
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.
get_european_company_profileEuropean company profileARead-onlyInspect
European company registry lookup — unified European company profile by country and national register ID, same JSON schema for every country (identity, legal form, normalized status, head office, VAT, LEI, official register link): Belgium (KBO/BCE, incl. NACEBEL activities and establishment units), Norway, Estonia, Latvia, Lithuania (JAR — registre_lt and fiscalite_lt blocks: capital, VAT, filing compliance, shareholder headcounts, tax arrears), Cyprus (DRCOR — registre_cy block: type, sub-type, dated register status family, registered office, mandates count; HE/AE numbers, legal persons only), Romania (ONRC — registre_ro block: every registration of the CUI, status codes in closed families, registered office, EU branches, mandates count; legal persons only), Croatia (Sudski registar), Czechia (ARES), Slovakia (RPO), Finland (PRH), Poland (KRS), Switzerland (Zefix); Denmark/UK when enabled; elsewhere via GLEIF (LEI). For LEI holders the profile carries groupe_lei: the GLEIF level-2 group — direct and ultimate CONSOLIDATING parents (named) or the declared reason for having none (accounting consolidation, never capital ownership or beneficial owners; sans_objet without a LEI). Belgian, Danish, Finnish, Swedish, Czech, Swiss, Norwegian and Latvian profiles also carry financements_ue: Horizon 2020 / Horizon Europe projects from CORDIS matched by the published VAT number (sans_objet elsewhere). No default-risk score is computed for this country yet: the response carries score_defaillance (statut non_evaluable, closed-list reasons — GET /v1/lecture explains them); never read it as a low score. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | National register identifier, e.g. 923609016 | |
| pays | Yes | ISO-3166 alpha-2 country code, e.g. NO | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint. The description adds substantial behavioral context: it warns that no default-risk score is computed and that score_defaillance carries statut non_evaluable ('never read it as a low score'), explains the GLEIF group fields and the financements_ue block for certain countries, and details the payment mechanism (x402 vs api_key). This goes well beyond the annotation hints and discloses edge cases and caveats.
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 a single, very long paragraph with dense information about many countries, blocks, and special cases. While it starts with a clear purpose statement, the rest is a wall of text that is hard to scan. It could be structured with bullet points or separated by country groups. The lack of conciseness reduces its usability despite the richness of content.
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's complexity (multiple countries, country-specific blocks, LEI and funding data, payment, and no-risk-score caveat), the description covers almost everything an agent needs to call it correctly. It mentions coverage, exceptions, and behavioral notes. An output schema exists, so return values are covered. It is slightly overwhelming but 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?
Schema coverage is 100% and every parameter has a description. The tool description adds some context about the parameters (e.g., id is the national register identifier, pays is ISO-3166 alpha-2), but it does not substantially extend the schema's own descriptions. It does mention examples in the schema already, and the description does not introduce new parameter-specific constraints beyond what is in the schema. Baseline 3 is appropriate.
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 a specific verb ('lookup') and resource ('unified European company profile by country and national register ID'), and lists many countries, which distinguishes it from the numerous country-specific profile tools in the sibling list (e.g., get_french_company_profile). The scope is unambiguous and the 'same JSON schema for every country' conveys a consistent contract.
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 this is the general European profile tool by listing many countries, but it never explicitly says when to use it instead of a country-specific sibling (e.g., get_french_company_profile). It does give some coverage guidance ('Denmark/UK when enabled', 'elsewhere via GLEIF'), but no explicit exclusions or alternative recommendations. Usage context is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_finnish_company_eventsFinnish trade-register notices (PRH)ARead-onlyInspect
Finnish company trade-register notices from the PRH open data (avoindata.prh.fi, CC BY 4.0, live with a 24 h cache): every notice registered since late 2014, newest first — date, record number, notice type (creation, modification, comptes_annuels, rectification, fusion; source code always served) and the register entry codes it carries, each with the PRH labels in EN/FI/SV and a closed-list family (direction, representation, capital, shares, registered office, auditors, articles, bankruptcy, restructuring, liquidation, removal, merger, demerger…); procedures_inscrites summarises bankruptcy / restructuring / liquidation / removal codes with their latest date; register memberships (trade register, VAT, prepayment, employer) with dates and tva_active. Codes and dates only — never a person. Unknown Business ID = 404 (no charge). Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Finnish Business ID (Y-tunnus), NNNNNNN-N, e.g. 0112038-9 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, and the description adds meaningful behavioral context: the 24h cache, the 404 for unknown Business ID with no charge, the payment mechanism (x402 or api_key), and the explicit statement that codes and dates only — never a person. It also discloses that procedures_inscrites summarises specific code families. This goes beyond the annotations without contradicting them.
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 dense but well-organized: it front-loads the source and scope, then details the content, then the payment and error behavior. Every sentence carries information, though the long parenthetical list of notice types and family codes makes it slightly heavy. It earns its length given the complexity of the data.
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 and the annotations cover safety (readOnly, openWorld), the description is complete: it explains the data source, coverage, ordering, content, error behavior, and payment. An agent has everything needed to decide whether to call this tool and what to expect. The only minor omission is pagination, but the description says 'every notice' and 'newest first', which is sufficient for a first 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 all three parameters. The description adds value by explaining the payment flow (x402 quote vs api_key prepaid credits) and the 404 behavior tied to the id parameter. It does not repeat the schema's regex or example, but it clarifies the operational semantics of the parameters, which is useful.
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 states a specific verb and resource: it retrieves Finnish trade-register notices from the PRH open data, and it enumerates the exact content (date, record number, notice type, register entry codes, procedures_inscrites, register memberships). It clearly distinguishes itself from siblings like get_finnish_company_filing and list_finnish_company_filings by focusing on notices/events rather than filings.
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 gives clear context: it covers notices since late 2014, newest first, and notes the 24h cache and live data source. It does not explicitly name alternative tools or state when not to use it, but the scope is specific enough that an agent can infer when to select it over filing-oriented siblings. A small gap: no explicit exclusion of when to prefer get_finnish_company_filing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_finnish_company_filingFinnish annual accounts (PRH)ARead-onlyInspect
One Finnish fiscal year — financial statements decoded from the company's PRH XBRL filing: revenue (null = not published, never zero), operating and net result, equity, total assets, debts, plus the prior-year comparatives as published in the same filing (EUR). Closing date comes from list_finnish_company_filings. Paid via x402 ($0.15 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Finnish Business ID (Y-tunnus), NNNNNNN-N | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| date_cloture | Yes | Fiscal-year closing date, YYYY-MM-DD, e.g. 2024-12-31 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint; the description adds meaningful behavioral detail beyond them: null revenue means 'not published' rather than zero, prior-year comparatives are as published in the same filing, and payment is via x402. No contradiction 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?
The description is three short, well-structured sentences with no filler. The core scope and data fields are front-loaded, followed by the prerequisite and payment detail. Every clause earns its place.
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 and the annotations already cover read-only and open-world behavior, the description supplies all critical operational context: data source, exact scope, field null semantics, prerequisite for date_cloture, and payment cost. An agent has enough information to call 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 coverage is 100%, so the baseline is 3. The description adds value by tying date_cloture to the output of list_finnish_company_filings and by clarifying that the filing covers exactly one fiscal year, which gives extra meaning to both required parameters.
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 identifies the tool as retrieving financial statements for one Finnish fiscal year from a PRH XBRL filing, and specifies the exact metrics returned. This distinguishes it from list_finnish_company_filings and other national filing tools.
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 explicitly states that the closing date comes from list_finnish_company_filings, giving the agent a clear preparatory step. It does not enumerate when-not-to-use cases, but the narrow scope of 'one Finnish fiscal year' and the tool name make the intended use case obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_association_noticesFrench association JOAFE noticesARead-onlyInspect
Official Journal notices (JOAFE, DILA) of a French association by RNA number — the association equivalent of BODACC: creations, modifications (title, purpose, registered office), dissolutions, corrections, most recent first, with issue and declaration dates, prefecture, purpose themes and the PDF file name. Carries couverture (first and last loaded issue): no notice inside that window is a fact, not a gap. Weekly issue loaded every Tuesday; a stale stock returns 503 and is not charged. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| rna | Yes | RNA number (W + 9 characters, e.g. W011006690) | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint/openWorldHint annotations by disclosing data completeness semantics (couverture), update cadence, error behavior (503 on stale stock), and payment implications. This is rich, honest behavioral context that an agent needs before invoking the tool.
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 dense but every sentence adds value: scope, content, ordering, completeness guarantee, update cadence, error semantics, and pricing. It is somewhat long but effectively front-loaded with the core resource and purpose.
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 rich annotations and output schema, the description still contributes essential information: what notices are included, the couverture guarantee, freshness semantics, failure mode, and cost. An agent has everything needed to select and invoke 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 description coverage is 100%, so the schema already documents rna, api_key, and x_payment fully. The description adds the RNA-based lookup context but does not need to repeat parameter details; baseline 3 is appropriate.
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 uses a specific verb ('get') and resource ('Official Journal notices (JOAFE, DILA) of a French association by RNA number'), and differentiates the tool by describing the exact notice types, fields, and ordering. The BODACC analogy further distinguishes it from profile or search tools.
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 clearly implies when to use it — when JOAFE official journal notices for a French association are needed — and provides important operational context like weekly loading and stale-stock behavior. It does not explicitly name alternative tools or state when not to use it, but the scope is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_association_profileFrench association profile (RNA)ARead-onlyInspect
Official profile of a French association (loi 1901) by RNA number from the Répertoire national des associations (Ministry of the Interior, monthly export): title, purpose and Waldec purpose codes, nature and grouping, position (active/dissolved/deleted), creation, declaration, JO publication and dissolution dates, registered office, website, RUP number as declared, prefecture, and the SIREN when Sirene confirms an association. Covers associations WITHOUT a SIREN — use search_french_associations first when you only have a name. No officer or declarant data; Alsace-Moselle excluded (local law). Unknown identifier = 404, not charged. Paid via x402 ($0.005 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| rna | Yes | RNA number (W + 9 characters, e.g. W751004076) or legacy RNA identifier as published (3-14 characters) | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, and the description adds meaningful behavioral context: unknown identifier returns 404 without charge, payment is via x402 or optional API key, and the SIREN appears only when Sirene confirms an association. It also discloses data exclusions. The only minor gap is no explicit statement about rate limits or response delays, but for a read-only profile lookup this is adequate.
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 dense but efficient, front-loading the core purpose and resource. Every sentence adds information: data source, field list, SIREN condition, SIREN-less coverage, exclusions, error behavior, and pricing. Only minor trimming could improve flow.
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 read-only lookup tool with an output schema and rich annotations, the description covers the essential context: data source, scope, exclusions, payment model, and error semantics. An agent has enough information to select and invoke it correctly, and the output schema handles return structure.
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 schema already documents all three parameters. The description adds value by clarifying the RNA format (W + 9 characters, e.g. W751004076), the meaning of the API key payment fallback, and the x402 payment flow. It does not repeat the schema verbatim.
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), resource (French association profile), and identifier (RNA number) with an explicit source (Répertoire national des associations) and scope (official profile, loi 1901). The list of fields and the limitation to associations without SIREN distinguish it clearly from sibling tools like search_french_associations and get_french_company_profile.
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 tells the agent to use search_french_associations first when only a name is available, and clarifies exclusions (no officer/declarant data, Alsace-Moselle excluded). This directly addresses alternatives and when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_capitalFrench company share capitalARead-onlyInspect
Ownership / share capital structure of a French company, extracted by AI from the latest PUBLIC articles of association filed at the INPI registry: share capital, legal form, shareholders — CORPORATE holders named with role and ownership %, natural persons COUNTED with their % and never named since 2026-09-19 (associes_personnes_physiques, detenu_par_personnes_physiques_pct; GDPR, CJEU C-798/24) — notable clauses, with confidence and the source document. Reconstructed from public filed deeds — NOT a beneficial-ownership register (RBE) or a beneficial-owner identification. Paid via x402 ($0.35 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that data is AI-extracted from public filed deeds, natural persons are never named due to GDPR/CJEU, and results include confidence and source. It also cautions that this is reconstructed public data, not an official register—valuable behavioral context.
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 dense but well-structured, front-loading the core purpose and then adding important caveats about GDPR, source reliability, and payment. It earns its length, though the heavy punctuation and caps slightly reduce readability.
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, annotations, and full parameter coverage, the description is complete: it explains the source, limitations, privacy behavior, payment mechanism, and what the data is not. An agent has enough context to select and invoke 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 description coverage is 100%, so the schema already documents siren, api_key, and x_payment. The description adds payment context (x402, $0.35) but does not add new field-level meaning beyond what the schema provides, matching the baseline.
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 identifies the resource as the ownership/share capital structure of a French company, sourced from public INPI articles. It explicitly distinguishes itself from beneficial-ownership registers, which differentiates it from siblings like get_uk_beneficial_owners.
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 gives a clear when-not-to-use signal: this is NOT a beneficial-ownership register or beneficial-owner identification. It also specifies the source (INPI articles) and purpose. However, it does not explicitly mention sibling alternatives such as get_french_company_profile or get_french_company_file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_changesFrench company changes (BODACC)ARead-onlyInspect
Company monitoring for France: new official BODACC gazette announcements for a French company SINCE a given date (poll-mode watchlist surveillance for a portfolio) — insolvency, deregistration, sales, filings, changes, reverse-chronological. Detects new BODACC publications, not field-level edits of the profile. A company with no new announcement returns an empty list. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| depuis | Yes | List announcements since this date (YYYY-MM-DD) | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, it discloses that results are reverse-chronological, that an empty list is returned when there are no new announcements, that it is paid via x402, and that it does not detect profile edits. This gives the agent concrete expectations about the call outcome and side effects.
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 compact and information-dense: scope, use case, event types, exclusion, empty-result behavior, and payment are all covered without filler. The structure front-loads the core purpose and then adds supporting operational details.
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 an output schema present and all parameters documented, the description covers the remaining operational needs: the monitoring use case, the empty-list behavior, and the x402 payment mechanism. An agent has enough information to select and invoke 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?
All parameters are already fully documented in the schema, so the 100% schema coverage sets a baseline of 3. The description adds only contextual meaning for the date parameter ('SINCE a given date') and does not provide meaningful additional parameter semantics 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 states a specific resource (French company BODACC gazette announcements) and a specific operation (get new announcements since a date). It also explicitly distinguishes itself from profile-level tools by saying it detects new BODACC publications, not field-level edits of the profile.
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 clearly frames the intended use case as 'poll-mode watchlist surveillance for a portfolio' and clarifies that it is about new publications, not profile changes. However, it does not explicitly name alternative tools such as search_bodacc_announcements or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_collective_agreementsFrench company collective agreementsARead-onlyInspect
Company-level collective agreements of a French company (SIREN) published on Légifrance (ACCO fund, mandatory publication since 2017-09-01): title, nature (accord / avenant), DILA themes (pay, working time, telework, gender equality, profit-sharing…), signature, effect and end dates, collective-agreement code (IDCC) checked against Sirene, signatory unions and the official Légifrance link — metadata only, never the text nor a person's name. Searched by filing SIRET over the establishments known to Sirene (25 at most, the rest counted): an empty list never means « no social dialogue » (headcount threshold, unpublished decisions). A sole proprietorship or restricted-diffusion entity answers 400 and is never charged. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN of a legal entity | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint, but the description goes far further: metadata-only scope (never text nor a person's name), a 400 response for sole proprietorships / restricted-diffusion entities that is never charged, and the paid x402 pricing ($0.02 in USDC/EURC). It also discloses the empty-result semantic and the establishment-cap behavior, all of which an agent needs.
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 purpose is front-loaded and every clause (source, scope, payment, error behavior) carries real information. It is a single heavily-parenthesized run-on sentence, which is dense but not padded.
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 an output schema exists, the description need not explain return fields, yet it covers scope limits, error/payment behavior, and empty-result interpretation. Nothing material for a correct call is missing.
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 both siren and the two payment parameters are already fully documented in the schema, establishing the baseline of 3. The description adds only the pricing model and confirmation that lookups key on SIREN, not new syntax or per-parameter meaning.
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 (company-level collective agreements of a French SIREN) and pins the data source (Légifrance ACCO fund, mandatory since 2017-09-01). It enumerates the returned fields (title, nature, DILA themes, IDCC, signatories, link), which makes it unmistakably distinct from sibling tools like get_french_company_file or get_french_company_legal_alerts.
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 explains the search mechanics (queried via filing SIRET over establishments known to Sirene, capped at 25) and the crucial interpretation caveat that an empty list never means 'no social dialogue'. However, it never states when to prefer this tool over the many adjacent French-company siblings, so routing guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_court_decisionsFrench company court decisionsARead-onlyInspect
Commercial-court decisions linked to a French company (SIREN) from the Cour de cassation open data (Judilibre): counts, closed-list nature (insolvency judgment, order or judgment to pay, summary proceedings, expert appraisal, other dispute), the company's role (claimant, defendant), the other companies involved (SIREN only) and the official link to each decision. No text, no individual's name, no amount: read the decision at the source. Coverage is partial and measured (about 62% of decisions carry a usable identifier) — no result never means no litigation; insolvency judgments are also served by get_french_company_legal_alerts. A sole proprietorship answers 400 and is never charged. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN of a legal entity | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and openWorld annotations, it discloses specific behaviors: coverage is partial (~62%), missing results don't rule out litigation, sole proprietorships return 400, and the payment mechanism (x402) and cost are specified. This added context is actionable and not redundant 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?
The description is dense but every sentence contributes: purpose, content, exclusions, coverage, alternative, error case, and pricing. It is front-loaded with the core purpose and then adds necessary caveats without excessive verbosity.
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?
The description covers all essential operational aspects: what data is returned, what is excluded, coverage limitations, an alternative tool, error handling for sole proprietorships, and pricing. Given that an output schema exists, the description is comprehensive enough for an agent to invoke 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 description coverage is 100% for all three parameters (siren, api_key, x_payment), so the schema already fully explains them. The description does not add parameter-level detail beyond what the schema provides, so it remains at the baseline for high schema coverage.
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 it provides commercial-court decisions for a French company (SIREN) from Judilibre, and enumerates the specific content (counts, closed-list nature, role, other companies, official link). It also names a related sibling tool (get_french_company_legal_alerts) for insolvency judgments, helping distinguish it.
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 gives clear context on what to expect (partial coverage, absence of results doesn't mean no litigation) and mentions an alternative for insolvency judgments (get_french_company_legal_alerts). However, it does not explicitly state when to use this tool versus other siblings beyond that single alternative, so it stops short of a full usage guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_default_riskFrench company default risk scoreARead-onlyInspect
Company default-risk score (0-100) for a French company at ~12 months — credit risk and insolvency risk scoring from filed financial ratios (structure, profitability, liquidity, net cash, debt service, trend) + company age + a hard BODACC override (active insolvency / liquidation / closure for insufficiency of assets = proven default). Returns score, qualitative band, every component with its threshold, and a confidence level. Decision-support only — NOT a solvency opinion or credit rating. couverture_axes names the axes the scale could evaluate and the silent ones with a closed-list reason (no published ratio, holding lens, single-year trend, uncovered line items): a silent axis cannot penalise, so fewer computed axes means possibly understated risk, never a better score. Paid via x402 ($0.10 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, it discloses the deterministic BODACC override that marks active insolvency/liquidation/closure as proven default, and it fully explains the couverture_axes semantics: silent axes cannot penalise, so fewer computed axes imply possibly understated risk rather than a better score. It also explains payment behavior and the failure mode on insufficient balance, with no contradiction of the 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?
The description is long but every sentence earns its place: scoring inputs, output fields, the BODACC override, the decision-support caveat, silent-axis interpretation, and payment details. It is front-loaded with the core purpose and remains readable despite the density.
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 paid, multi-component risk tool, the description is exceptionally complete: it covers scoring inputs, output shape, confidence, override behavior, silent-axis interpretation, decision-support limits, cost, and payment failure mode. The presence of an output schema already handles detailed return structure, so nothing essential is missing.
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 schema already documents all three parameters with 100% coverage, including the api_key/x_payment precedence and the siren pattern. The description adds the cost context ($0.10 via x402) but does not materially enrich the meaning of the siren parameter beyond what the schema provides, so the baseline of 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?
The first sentence names the exact resource (French company default-risk score) and scope: a 0-100 score at ~12 months built from financial ratios plus a BODACC insolvency override. This clearly differentiates it from sibling tools such as health_summary or industrial_risk, since the focus is specifically on credit/insolvency default rather than general health or industry risk.
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 its use case — when a default-risk score for a French company is needed — and adds an important caveat that it is decision-support only, not a solvency opinion or credit rating. However, it never explicitly routes to alternatives among the many French-company getters (financials, health_summary, industrial_risk), leaving the agent to infer when to pick this over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_eu_fundingEU research funding received (CORDIS)ARead-onlyInspect
EU research and innovation funding received by a French company, from CORDIS (European Commission, CC BY 4.0): every Horizon 2020 (2014-2020) and Horizon Europe (2021-2027) project the company appears in — role (coordinateur, participant, partenaire_associe, tiers…), EU contribution, total cost, dates, project status (signe / clos / termine) and the official CORDIS link — plus totals (projects, EU contribution in EUR, projects under way). The company is matched by the VAT number CORDIS publishes (about 90% of French participations carry a readable one): aucun_financement: true is a NON-conclusive absence, never “never funded”. Facts only, no score. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, but the description goes further: it discloses the payment mechanism (x402), the VAT matching method, the non-conclusive absence semantics (aucun_financement), and states 'Facts only, no score'. This adds substantial behavioral context beyond the annotations, with 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?
The description is dense but efficient: it front-loads the core purpose, then lists specific output fields, and adds critical caveats (open world, payment) without fluff. It is longer than typical, but every sentence earns its place given the tool's 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?
The description covers everything an agent needs to call this tool correctly: data source, matching method, output contents, payment details, the meaning of absence, and licensing. Given the output schema is also provided, no critical information is missing.
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% and parameter descriptions are already informative (siren, api_key, x_payment). The description adds context about the payment flow (x402 vs api_key) but that is already present in the schema. No extra parameter-level meaning is added beyond what the schema provides, so a baseline of 3 is appropriate.
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 states exactly what the tool does: retrieves EU research funding data for a French company from CORDIS, with a precise list of fields and totals. It is clearly distinct from all sibling tools, none of which cover EU research funding, so there is no 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?
The description clearly implies when to use it (for EU Horizon funding info about a French company) and even notes the payment method and required SIREN. It does not explicitly name alternatives or say 'use this instead of X', but given its unique scope among siblings, the use case is unambiguous. A minor gap is no explicit exclusion of other funding sources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_fileFrench company file (choose blocks)ARead-onlyInspect
Full French company file in ONE call, paying only for the blocks you ask for — for when you need several things about the same company and do not want to chain calls. The identity base is $0.005; add any of etablissements, alertes_bodacc, contentieux, finances, marches_publics, marches_publics_ue, lobbying, risques_industriels, agrements, pi, documents, facturation_prep, score. Each block costs exactly what its dedicated endpoint costs, and the total is capped at $0.35. Any block that cannot be served is NAMED with a reason from a closed list: aucune_donnee (a negative answer, e.g. no patents), non_diffusible (GDPR/partial disclosure) or panne_amont (upstream register down). If EVERY requested block is down, the call returns 503 and nothing is charged. For a verdict rather than raw blocks, use get_french_company_intelligence ($1.00). Paid via x402 in USDC or EURC.
| Name | Required | Description | Default |
|---|---|---|---|
| blocs | Yes | Comma-separated blocks, e.g. finances,pi,score. Available: etablissements, alertes_bodacc, contentieux, finances, marches_publics, marches_publics_ue, lobbying, risques_industriels, agrements, pi, documents, facturation_prep, score | |
| siren | Yes | 9-digit SIREN, e.g. 552032534 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnlyHint/openWorldHint annotations, description goes well beyond: discloses per-block pricing, block-level failure semantics with a closed reason list (aucune_donnee, non_diffusible, panne_amont), 503 on total failure, and the x402 vs api_key payment behavior. This is rich behavioral context that annotations can't capture. No 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?
Front-loaded with the core value (one call, pay per block), followed by pricing, error semantics-case. It's dense but every sentence adds info; the key distinctions and failure modes are stated early. Might be slightly long but all content earns its place.
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 rich schema describing parameters and annotations covering read-only safety, the description covers selection criteria vs sibling, pricing, failure semanticschen and alternative. No output schema but lifecycle (503, 402, charging) is stated.
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% – parameters siren, blocs, api_key, x_payment already described in the schema. The description doesn't add much beyond that (it restates the block list). Baseline 3 is appropriate; schema carries the load.
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 a specific verb+resource: retrieve a French company file by selecting blocks. It differentiates itself from siblings by saying this is the consolidated multi-block call, and it explicitly routes to get_french_company_intelligence when the user wants a verdict. This is a well-scoped, actionable definition.
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?
States when to use: 'when you want several things about the same company' and don't want separate calls. Names the alternative (get_french_company_intelligence) and explains when to prefer it. Also mentions optional api_key vs x402 payment modes, which guides request setup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_financialsFrench company financialsARead-onlyInspect
Annual accounts and financial statements data of a French company from filed accounts (revenue, EBITDA, net income, ratios — INPI/Banque de France), plus the full structured tax-form line items (liasse fiscale) from the INPI registry, for up to the 20 latest public fiscal years. Every fiscal year carries a qualite grade (exploitable / a_verifier / non_exploitable, with anomaly codes and doubtful fields): read it before trusting an amount; rows the source published twice or that are demonstrably wrong are served under exercices_ecartes, never silently dropped. Consolidated accounts come apart, graded the same way. Carries decalage_analytique: the latest statement filed at the register (INPI, live) vs the latest year in the ratio dataset, with a closed-list reason — the dataset lags filings by months, so the newest filing may be served raw in bilans_saisis_inpi while ratios, trends and scores still rest on the previous year. interpretabilite says whether revenue-based ratios measure this entity's activity: for a holding or head office (NAF 64.20 / 70.10) they are computable but economically limited — income comes from financial products booked after EBITDA. Since 2026-09-06 each statutory fiscal year repeats that flag next to the ratios it concerns (exercices[].ratios_interpretabilite.<ratio> = limitee), so a reader of the ratios alone is warned; decalage_analytique.decalage is the machine-readable lag flag (true when a newer filing than the analysed year is known). Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behaviors: duplicated or wrong rows are served under exercices_ecartes rather than silently dropped, consolidated accounts are split out, analytical lag is flagged, ratio interpretability is warned for holdings, and the payment mechanism is clearly explained. These details go well beyond the readOnly annotation and are not contradicted by it.
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 dense and long, but each sentence carries substantive caveats or behavioral details that support correct use. It is structured in flowing prose rather than crisp bullets, so it is not maximally concise, but it remains purposeful.
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?
The description gives a complete picture for an agent: data source, year range, data quality warnings, lag semantics, interpretability limitations, and payment requirements. Combined with the output schema, it covers the important decision-relevant context with no major gaps.
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 input schema already provides full descriptions for all three parameters, including the siren pattern and payment-related behavior of api_key and x_payment. The tool description adds payment context but does not materially improve parameter understanding 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 that the tool returns French company annual accounts and financial statement data, including liasse fiscale line items, for up to 20 fiscal years. This makes its purpose distinct from the many sibling profile, risk, and filing tools.
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 scope of the data implies when the tool should be used, but the description does not explicitly name sibling alternatives or state when the tool should not be used. Usage guidance is therefore implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_health_summaryFrench company health summaryARead-onlyInspect
Business-health and risk read-out of a French company, in French AND English, from official data only: verdict, strengths, warning signs, activity trend, confidence level, plus the reconciled grid in machine-readable codes. A model fills a closed evaluation grid (no free text, no name, no figure of its own); every number, date and sentence is assembled by Sirenic, and deterministic guards overrule the model when the filed accounts contradict it — corrections are listed in divergences_modele. Entities that file no annual accounts (non-profits, sole traders, companies under a year old, ceased companies) return verdict: "non_concluant" with most fields non_evaluable, and the prose says so explicitly — call get_french_company_profile instead if you only need identity. Cached 7 days. Paid via x402 ($0.15 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only establish read-only and open-world characteristics. The description adds substantial behavioral disclosure: a model fills a closed evaluation grid, deterministic guards overrule model errors, corrections appear in divergences_modele, non-filing entities get non_evaluable fields, results are cached 7 days, and payment is handled via x402. This goes well beyond the 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?
The description is dense but every clause earns its place: purpose, output composition, model-override behavior, edge cases, alternative routing, caching, and pricing. It is front-loaded with the core function and avoids redundant restatement of the schema.
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, the description need not restate return values. It covers edge cases, alternative selection, deterministic override behavior, data provenance, caching, and payment flow, making the tool self-sufficient for correct invocation.
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 input schema already documents all three parameters thoroughly, including api_key and x_payment semantics. The description adds value by naming the exact x402 price and confirming the prepaid-credit alternative, but much of the parameter-level detail is already in the schema, so this is a modest increment rather than a heavy 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?
The description opens with a specific verb and resource: 'Business-health and risk read-out of a French company', and lists concrete outputs (verdict, strengths, warning signs, activity trend, confidence level, reconciled grid). It also distinguishes itself from identity-focused tools by explicitly recommending get_french_company_profile when only identity is needed.
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 states when to use the tool, gives a clear when-not case (entities filing no annual accounts return non_concluant), and names an explicit alternative for identity-only needs. This gives an agent enough routing information without opening sibling schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_hiring_signalsFrench hiring signalsARead-onlyInspect
Hiring signals for a French company, derived on demand from France Travail data (snapshot under 24 h, nothing stored): actively-hiring yes/no/unprovable (null means absence is not provable), active-postings count — SIREN-keyed via France Travail's own employer page when one exists, else strict company-name matching over the company's known locations (lower bound: brand names and temp agencies not counted; the path used is stated in methode.comptage) — top ROME occupation families, contract-type mix, share of postings displaying a pay amount, plus the Egapro gender-equality index (last 3 years) and the INSEE workforce bracket. Aggregated signals only — never posting texts or recruiter contacts. Use for sales intelligence (a hiring company is an active company) and HR/expansion signals. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN of the company, e.g. 095580841 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond what annotations (readOnlyHint, openWorldHint) already convey: data is derived on demand from a sub-24h snapshot with nothing stored, the count is a lower bound with brand names and temp agencies excluded, the SIREN-keying vs name-matching fallback path is disclosed, and the x402 payment cost is stated. It even reinforces openWorldHint by explaining that null means absence is not provable. No contradiction 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?
Front-loaded with the core purpose, and every clause earns its place: data source, freshness, privacy, methodology caveats, exclusions, use cases, and pricing. Deduction only for structure — the opening sentence is a dense run-on with heavy parenthetical asides that could be split for readability.
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 an output schema present, the description needn't document return values, yet it still enumerates all returned fields. It covers the what, the how (matching methodology and caveats), the when, the privacy posture, and the cost; the parameters are fully documented in the schema. Nothing an agent needs to call or interpret this tool correctly is missing.
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 baseline is 3; the description adds meaning on top by explaining how the siren parameter drives behavior (matched via France Travail's employer page when one exists, else strict company-name matching over known locations, yielding a lower-bound count) and by adding the $0.02 x402 price context relevant to the payment parameters.
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 names a specific resource (France Travail data) and enumerates the exact deliverable: hiring signals for a French company, listing every signal type (actively-hiring flag, active-postings count, ROME families, contract-type mix, pay-amount share, Egapro index, INSEE workforce bracket). This uniquely distinguishes it from the 60+ siblings — no other tool covers hiring, so an agent can identify it unambiguously.
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: 'Use for sales intelligence (a hiring company is an active company) and HR/expansion signals,' and what not to expect from it ('never posting texts or recruiter contacts'). It does not name alternative tools, but no sibling provides hiring signals, so the when-not guidance carries the weight here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_industrial_riskFrench industrial risk (ICPE)ARead-onlyInspect
Industrial-risk and environment (ESG) profile of a French company from the official ICPE register (Géorisques/DGPR): classified facilities with Seveso status (upper/lower tier), authorisation regime, activity state, IED flag and a per-SIREN risk synthesis. A company with no classified facility returns level aucun — the clean answer is the signal. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, it discloses the payment requirement and cost via x402 ($0.01) and, crucially, the no-classified-facility behavior: return level 'aucun', with the clean answer being the signal. This prevents an agent from treating a legitimate absence as an error. No contradiction 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?
Three sentences front-load the core output and source, then cover the key edge-case signal and pricing. The data-element list is dense but every item is relevant, and there is 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?
Given the output schema and full parameter coverage, the description provides the essential operational context: source, included fields, the 'aucun' sentinel, and payment mechanism. An agent has enough information to call the tool correctly and interpret its key result.
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 siren, api_key, and x_payment are already fully documented in the input schema. The description adds the per-SIREN synthesis framing and payment context but no new parameter-level meaning, so the baseline 3 is appropriate.
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 names a specific resource — the ICPE industrial-risk and environment profile from the official Géorisques/DGPR register — and lists concrete data elements such as Seveso status, authorisation regime, activity state, and IED flag. This clearly distinguishes it from sibling financial-risk or compliance tools.
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 establishes a clear domain: French industrial-risk and environmental ESG assessment via classified facilities, so an agent can infer when this tool is appropriate over siblings like get_french_company_default_risk or get_french_company_legal_alerts. It does not explicitly name alternatives or state exclusions, so it stops short of perfect routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_intellectual_propertyFrench company IP portfolioARead-onlyInspect
Intellectual-property portfolio of a French company from INPI open data: trademarks, patents and designs filed (counts + items with number, title, status, ISO dates and classification; trademarks also carry registration and expiry dates). Every date states what it is in date_nature, and every block its ordering in liste_ordre — trademarks and designs date-descending, patents NOT sorted upstream. An R&D/brand-value signal. Patent inventor names (natural persons) are never returned. Paid via x402 ($0.03 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses important behaviors: patents are NOT sorted upstream while trademarks and designs are date-descending, every date has a date_nature field, blocks have liste_ordre, patent inventor names are never returned, and the tool is paid via x402 at a specific price. These details materially shape how an agent interprets results and sets expectations.
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 dense but every sentence adds necessary context: data source, payload structure, ordering caveats, a conspicuous redaction rule, a usage signal, and payment mechanism. It is front-loaded with the main purpose and then layers on essential caveats without fluff.
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?
The description covers the data source, what counts and items are included, field-level semantics like date_nature and liste_ordre, sorting exceptions, personal-data redaction, payment options, and the intended analytical signal. With an output schema also available, an agent has everything needed to call 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 description coverage is 100%, with meaningful descriptions for siren, api_key, and x_payment. The tool description adds no parameter-level meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
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 names a specific resource ('intellectual-property portfolio of a French company from INPI open data') and enumerates the concrete data types and fields returned: trademarks, patents and designs with counts, numbers, titles, statuses, ISO dates, classifications, and trademark registration/expiry dates. This clearly distinguishes it from sibling French-company tools focused on financials, legal alerts, capital, or filings.
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 gives clear context for when the tool is relevant by labeling it 'An R&D/brand-value signal,' which tells an agent this is the IP-focused lookup among many French company tools. It does not name explicit alternative tools or exclusions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_intelligenceFrench company intelligence reportARead-onlyInspect
Use for a GO/NO-GO decision (credit, investment, partnership) on a French company. Company INTELLIGENCE report — every Sirenic block cross-referenced in one call: identity & officers, financials with 3-year trend, sector positioning vs NAF peers, failure-risk score, BODACC legal alerts, commercial-court decisions linked to the company (Judilibre stock since 2024-12-31: counts, closed-list nature and role, official links; partial coverage stated — never « no litigation »), sanctions screening (6 official lists, company + each officer), public procurement (French DECP + EU TED), IP assets, cached capital structure, industrial-risk synthesis (Seveso/ICPE), AMF PSAN/SGP register statuses, HATVP lobbying summary and a live VIES VAT check. Returns closed-list SIGNALS traced to their register source, synthese.conclusions_interdites (closed list of what THIS report does not allow you to infer — never a probability of default, a credit rating or an absence of risk; plus group health, current situation, cash position or an established sanction when the read data cannot support them), a deterministic verdict (solide/correct/fragile/critique) with synthese.motifs_verdict (closed-list codes that decided it) and synthese.verdict_plafonne_par (name-match doubts that capped it at « correct »: when non-empty, read « correct » as « correct subject to verification »), and strengths/vigilance points. The financial block carries decalage_analytique (latest filing known at the register vs latest year analysed) and the summary says it when a newer filing exists. Since v1.7 the synthese also carries reserves (closed-list reading caveats: holding scope, newer filing not analysed, old accounts, unpublished cash, weak name matches, unavailable blocks…), portee (what the verdict covers), confiance_financiere (the score band) and par_domaine (ten domains, each in its own closed list, all projected from blocks already served) — the verdict word itself is unchanged. Every block states the official register it comes from and its as_of date, so the report is auditable offline once the Ed25519 signature is verified. Since 2026-09-06 a company with no computable financial ratio (in practice no public accounts) and no other adverse signal gets indeterminable — insufficient public data, neither good nor bad — instead of correct. The flagship due-diligence call. Paid via x402 ($1.00 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint and openWorldHint, but the description adds extensive behavioral context: paid via x402 at $1.00, credit-vs-x402 payment precedence, closed-list signals traced to source registers, deterministic verdict codes and capping logic, indeterminate-verdict edge case, reserves/portee/confidence fields, and Ed25519-signed auditable output. Far beyond what annotations disclose, with 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?
The single most important framing (GO/NO-GO due-diligence call) is correctly front-loaded, and most sentences carry real output-semantics value. But the description is an exceptionally long single-paragraph wall packing dozens of field names and version notes, which hurts scanability and pushes well past what is needed to select the tool.
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 highly complex financial tool with an output schema, annotations, and three parameters, the description covers purpose, payment model, verdict semantics, capping/indeterminate edge cases, and auditability comprehensively. An agent has everything needed to decide to call it and interpret the result 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 all three parameters (siren, api_key, x_payment) are already fully documented in the schema. The description adds the pricing fact ($1.00 in USDC or EURC) and payment-model context that is useful for the payment params, but no syntax or format detail beyond the schema, making the baseline 3 appropriate.
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 purpose (GO/NO-GO credit, investment, partnership decision) and resource (French company intelligence report), and explicitly positions itself as the aggregator that cross-references every Sirenic block in one call. This clearly distinguishes it from the many single-block siblings like get_french_company_financials or get_french_company_legal_alerts.
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?
Opens with an explicit use case (GO/NO-GO due-diligence decisions) and calls itself 'the flagship due-diligence call', giving strong context for when to pick it. However, it never names an alternative or states when NOT to use it (e.g. use a granular single-block tool for a narrower question), so routing against siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_kyb_batchFrench KYB batch (2 to 100)ARead-onlyInspect
Batch KYB: full KYB files for 2 to 100 French companies in one call. Billed per company at $0.105 (30% off the $0.15 unit price) via x402 — the amount is the unit price times the number of SIREN. A SIREN with no diffusible company is returned with trouve=false and billed as one lookup. Each file carries its own per-block provenance (official register + as_of date). Ideal for prospecting and compliance agents processing lists. A full-size request quotes up to $10.50, above the $1.00 single-payment cap that x402 clients apply BY DEFAULT since @x402/core 2.23 (spendControls): raise spendControls.maxAmountPerPayment, or set spendControls: false, before signing — otherwise your own client rejects the quote without ever calling us.
| Name | Required | Description | Default |
|---|---|---|---|
| sirens | Yes | List of 2 to 100 nine-digit SIRENs | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, but the description adds substantial behavior beyond them: per-company billing at $0.105 with a 30% discount, the trouve=false + billed-as-one-lookup behavior for non-diffusible SIRENs, per-block provenance, and the critical spendControls failure mode where x402 clients reject the quote above $1.00. No contradiction 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?
Purpose is front-loaded in the first sentence, and the rest of the description packs pricing, edge-case behavior, provenance, and a payment failure mode into roughly 120 words. The final sentence on spendControls is long and dense, but it earns its place because it describes a real client-side failure an agent would otherwise hit blindly.
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 billing, batch processing, and a payment-flow caveat, this description is remarkably complete: output schema covers return values, annotations cover the read-only/open-world profile, and the description covers pricing, missing-company behavior, provenance, target use cases, and the x402 cap fix. Nothing an agent needs to invoke it correctly is missing.
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 with the schema doing the heavy lifting. The description adds genuine meaning on top: each sirens entry is billed at $0.105, a non-diffusible SIREN still costs one lookup, and the x_payment flow is tied to the $10.50 cap issue. This elevates it above baseline but stops short of 5 since the schema already documents parameter formats well.
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 opens with 'Batch KYB: full KYB files for 2 to 100 French companies in one call,' a specific verb+resource+scope statement that clearly identifies the batch operation and its bounds. The batch framing cleanly distinguishes it from the single-company sibling get_french_company_kyb_file without needing to name it.
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 states when to use the tool: 'Ideal for prospecting and compliance agents processing lists.' The 2-to-100 range and batch framing imply that single-company lookups should go elsewhere, but there is no explicit exclusion or named alternative (e.g., 'use get_french_company_kyb_file for one company'). Clear context, but no explicit when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_kyb_fileFrench company KYB fileARead-onlyInspect
Complete KYB (Know Your Business) file for a French company in one call — a comprehensive BUNDLE consolidating identity, officers, BODACC legal alerts, filed financials, sanctions screening of the company and each officer (6 official lists), VAT number and a completeness score. Use this when you want the whole due-diligence picture at once; if you only need one part, call the dedicated tool instead (get_french_company_profile, get_french_company_legal_alerts, get_french_company_financials, or screen_sanctions_lists) — they are cheaper. Every block carries its provenance: official register, licence, version and as_of date, plus precision_as_of telling whether that date is the upstream official publication, Sirenic's ingestion or a live consultation. Paid via x402 ($0.15 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already establish that this is a safe read operation, lowering the burden on the description. The description adds useful behavioral context by specifying that every block carries provenance including official register, licence, version, as_of date, and precision_as_of semantics. It does not cover failure modes or latency, but for a read-only annotated tool this is a reasonable gap.
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?
Every sentence in the description earns its place: the bundle definition, the explicit usage rule, the provenance explanation, and the pricing. The text is dense but not padded, and the most decision-relevant information is front-loaded.
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 annotations cover the read-only/open-world profile, and the schema fully documents the parameters, the description is complete enough for an agent to invoke the tool correctly. It covers scope, alternatives, payment path, and provenance semantics.
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 schema already documents all three parameters with 100% coverage, including detailed semantics for api_key and x_payment, so the description does not need to repeat that. The description adds general payment and bundle-content context but not new parameter-level meaning, so the baseline score of 3 is appropriate.
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 that this tool returns a complete KYB bundle for a French company in one call and enumerates the consolidated contents: identity, officers, BODACC legal alerts, financials, sanctions screening, VAT number, and a completeness score. It also names the narrower sibling tools, so an agent can easily distinguish it from dedicated single-purpose tools.
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 explicitly says when to use this tool: when the whole due-diligence picture is needed at once, and when not to use it: when only one part is needed, in which case it names the dedicated alternatives and notes they are cheaper. This is direct routing guidance with concrete exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_legal_alertsFrench company legal alertsARead-onlyInspect
Legal alerts and legal notices for a French company from BODACC, the official French gazette: insolvency proceedings (procedures collectives), court filings, deregistrations, business sales — grouped, most recent first. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses meaningful operational behavior: results are grouped and sorted most-recent-first, and the tool is paid via x402 at a specific price. This adds context that structured annotations do not convey, and nothing contradicts the 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?
The description is a single compact sentence that front-loads the primary purpose, then appends scoping, content types, ordering, and payment details. Every clause adds information; there is no filler or redundancy.
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, read-only annotation, and full parameter documentation, the description provides all essential context: source (BODACC), scope (specific French company), content types, ordering, and cost. The only minor omission—explicit differentiation from siblings—is covered by the purpose clarity and usage context already present.
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%: siren, api_key, and x_payment are all documented in the input schema. The tool description only adds a passing mention of payment, which does not meaningfully supplement per-parameter semantics, so the schema bears the full burden and 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?
The description states a specific verb ('get'), a clear resource ('legal alerts and legal notices for a French company from BODACC'), and enumerates concrete content types (insolvency proceedings, court filings, deregistrations, business sales). It also adds formatting/scoping details ('grouped, most recent first') that distinguish it from broader BODACC search tools or generic regulator-alert tools.
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 makes the tool's context clear: it is for French company legal alerts from the official BODACC gazette, which strongly implies when an agent should reach for it. However, it does not explicitly name alternative siblings or state when not to use it (e.g., versus search_bodacc_announcements or get_french_company_changes), leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_lobbyingFrench lobbying register (HATVP)ARead-onlyInspect
Lobbying and transparency profile of a French company from the official HATVP register of interest representatives: registration status, category, lobbying-expense brackets per year, recent subjects with intervention domains, clients (for consulting firms), affiliations, declaration defaults. Organisation-level only — no personal data. inscrit: false is a meaningful answer. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, the description adds vital behavior: `inscrit: false` is a meaningful answer rather than an error, the tool is organisation-level and returns no personal data, and payment occurs via x402 at a known cost. These details materially shape agent expectations and error handling.
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 front-loaded with the core purpose and source, then efficiently lists data fields in a compact flow, followed by two crucial caveats and pricing. Every sentence provides information an agent needs; there is no filler or repetition of schema content.
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 an output schema present and one clearly documented required parameter, the description is complete for invocation: it explains scope, data categories, meaningful false semantics, and payment behavior. No critical operational detail is missing for selecting and calling 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?
The input schema already provides 100% coverage with clear descriptions for siren, api_key, and x_payment. The tool description does not add meaning about individual parameters, so the baseline of 3 applies; it neither harms nor significantly improves parameter understanding.
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 uses a specific verb and resource: it returns a 'lobbying and transparency profile of a French company' from the 'official HATVP register'. It enumerates concrete content (status, category, expense brackets, subjects, clients, affiliations) and distinguishes itself from generic company-profile tools by focusing on interest-representation data and organization-level scope.
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 clearly implies when to use the tool: when an agent needs official French lobbying-register data for an organization. It also states an explicit exclusion — 'Organisation-level only — no personal data' — which prevents misuse for individual searches. It does not name sibling alternatives, but the source and scope are unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_pdf_reportFrench company PDF reportARead-onlyInspect
On-demand PDF report of a French company — a shareable due-diligence dossier (formatted KYB file: identity, officers, legal alerts, financials, sanctions screening; includes the AI health summary when cached). Returns the PDF as base64. Paid via x402 ($0.50 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool readOnly and openWorld, and the description adds genuinely new behavioral facts: the call costs $0.50 via x402, the result is a base64-encoded PDF, and the AI health summary is included only when cached. This goes beyond the annotation baseline, though it stops short of disclosing generation latency or per-call regeneration semantics.
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?
Three terse sentences front-load the artifact type and scope before moving to contents, return format, and cost. The parenthetical content list is dense but every clause earns its place; there is no redundant phrasing or 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?
Given no output schema, the description compensates by stating the return as a base64 PDF and the conditional inclusion of the health summary; the schema fills in the two-step payment flow (omit x_payment for a quote). Minor gaps remain — generation latency and whether each call incurs the fee — but nothing that would prevent a correct invocation.
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% — siren's format is fully specified by pattern and description, and both api_key and x_payment carry detailed behavioral descriptions (prepaid credits vs. the x402 quote flow). The description adds only the price point that contextualizes the payment parameters, so it stays at the baseline for fully covered schemas.
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 states a specific produced artifact — an on-demand PDF report of a French company — and enumerates its contents (identity, officers, legal alerts, financials, sanctions screening, cached AI health summary) plus the return format (base64 PDF). It distinguishes the tool from data-returning siblings in the French company group by emphasizing the 'shareable due-diligence dossier' format, though it does not explicitly contrast with the closely named get_french_company_kyb_file.
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 the use case — a shareable due-diligence/KYB dossier — and signals that this is a paid premium report ('Paid via x402 ($0.50 in USDC or EURC)'). However, it never names an alternative or states when not to use it, leaving the agent to infer the boundary against siblings like get_french_company_kyb_file or get_french_company_file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_profileFrench company profile (SIREN)ARead-onlyInspect
Full official company profile of a French company by SIREN, from the French company registry (INSEE Sirene / INPI RNE): legal name, legal form, head office, NAF code, workforce, officers, collective agreements (conventions_collectives, with conventions_collectives_notes reading out technical IDCC codes — 9999 means no collective agreement is assigned, it is not an agreement number to look up), VAT number, plus groupe_lei for LEI holders: the GLEIF level-2 group — direct and ultimate CONSOLIDATING parents (named) or the declared reason for having none (accounting consolidation, never capital ownership or beneficial owners; sans_objet without a LEI). The core company data lookup for KYB and due diligence on France. Paid via x402 ($0.005 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint true, the description goes well beyond annotations: it clarifies the data sources (INSEE Sirene / INPI RNE), explains the meaning of conventions_collectives and that IDCC 9999 means no agreement, and defines groupe_lei as consolidating parent LEI info rather than capital ownership or beneficial owners. It also discloses the paid nature and api_key/x402 behavior, which is important for correct invocation.
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 long but information-dense; every clause adds semantic value covering data fields, sources, disambiguation of 9999, LEI semantics, and pricing. There is a slight readability cost from long parenthetical clauses and run-on structure, but the main purpose is front-loaded and the detail is justified for this tool's 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?
For a read-only lookup with an output schema and fully documented parameters, the description covers what the data is, where it comes from, how payment works, and how to interpret tricky fields (9999, groupe_lei). Nothing essential for an agent to correctly call this tool is missing.
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. The description adds value by detailing the payment flow (x402, $0.005 in USDC or EURC), prepaid api_key credits, and the relationship between api_key and x_payment, though much of that detail also exists in the schema. It does not add new meaning to the siren parameter beyond what the schema provides.
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: 'Full official company profile of a French company by SIREN', then enumerates exact data points (legal name, legal form, head office, NAF code, workforce, officers, VAT, groupe_lei). The closing line positions it as the core company data lookup for KYB and due diligence on France, which distinguishes it from financials, filings, intelligence, and association tools among siblings.
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 gives clear context: use this as the core official profile for KYB and due diligence on a French company. It does not explicitly name sibling alternatives or state when not to use it, so it misses the top bar for exclusion guidance, but the contextual cue is strong enough for an agent to select it among many similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_company_public_procurementFrench public contracts wonARead-onlyInspect
Public procurement in France: government contracts and tenders won by a French company (official DECP data) — buyers, amounts, dates, lot number when the subject states one, joint-holder count, and how to READ the amount: modalitesExecution tells whether it is a firm price or an ENVELOPE (call-off orders, subsequent contracts, optional tranches — 43% of contracts), and declared subcontracting with its amount tells what the holder does not keep. An amount covers the whole awarded contract or LOT over its full duration, excl. VAT; on a framework agreement it is a MAXIMUM CEILING, not spend (the total is split into ceilings vs firm commitments). Also CCAG, price type, advance and its rate, EU/French content ratios, amendment rank and dates, and the platform that published the record. Totals come as TWO BOUNDS: nombre_marches/montant_total count every published row (upper bound), nombre_marches_dedoublonne/montant_total_dedoublonne count one row per (buyer, notification date, amount, CPV) key (lower bound) — the same award is often published twice (two platforms, two establishments of the holder, repeated row, amendment); each row carries publication.statut (closed list) and its linked rows, and identifiant_partage flags a buyer id reused for distinct purchases. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint, so the description carries the burden of behavioral disclosure. It does this excellently by explaining how to interpret amounts (firm price vs envelope, framework maximum ceilings, excl. VAT), the two-bounds deduplication logic, duplicate publication across platforms, and the x402 payment 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?
The description is front-loaded with the core purpose and every sentence carries meaningful information, with no filler. However, it is a single dense paragraph with many parenthetical asides, which makes quick agent parsing harder than a more structured multi-sentence layout would.
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's complexity, the description is remarkably complete: it covers amount semantics, deduplication, duplicate rows, publication status, linked rows, and payment options. Since an output schema exists, there is no need to describe return values, and nothing critical for selecting or invoking the tool is missing.
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%, giving a baseline of 3. The description adds extra context by stating the x402 payment cost and clarifying the relation between api_key and x_payment, which goes beyond the schema's field descriptions. It does not add new semantics for siren, but that parameter is already self-explanatory.
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 states the exact purpose: retrieving public procurement contracts and tenders won by a French company, sourced from official DECP data. It enumerates the returned fields (buyers, amounts, dates, lot number, joint-holder count) and clearly distinguishes it from sibling tools focused on competitors, buyers, or expiring contracts.
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 usage context is strongly implied: use this tool when you need French public contracts won by a company identified by SIREN. However, it never explicitly contrasts it with related tools such as get_company_procurement_competitors or find_expiring_french_public_contracts, nor states when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_public_buyer_profileFrench public buyer profileARead-onlyInspect
Procurement profile of a French public buyer (by SIRET): contract volumes by year, top CPV segments, incumbent suppliers with their contracts expiring within 18 months, framework-agreement share, share of amounts that are envelopes rather than firm prices, share of contracts with declared subcontracting, share granting an advance, dominant CCAG and price type, publishing platform, average bids received per tender and median publication delay — the buying habits to know before a sourcing meeting. From official DECP open data. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siret | Yes | 14-digit SIRET of the public buyer, e.g. 26310012500016 (CHU de Toulouse) | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context: official DECP open data as the source, and a fixed x402 payment cost. It does not contradict annotations and provide sufficient additional context for a read-only open-data tool.
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 a single dense sentence that front-loads the core purpose and then lists the returned data points. Every clause adds selection-relevant value, though the long comma-separated list could be slightly more scannable. No truly 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?
For a data-rich read tool with an output schema and fully documented parameters, the description covers the essential context: what the tool returns, the identifier needed, the use case, the data source, and the cost. The agent has enough information to select and invoke it 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 schema already documents siret, api_key, and x_payment thoroughly. The description adds little parameter-level meaning beyond confirming the lookup is by SIRET and that payment is via x402. This is acceptable since the schema carries the full 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?
The description states a specific resource — a French public buyer's procurement profile keyed by SIRET — and enumerates concrete data points such as contract volumes, top CPV segments, expiring contracts, and advance share. It clearly distinguishes itself from company-centric siblings by focusing on the buyer side and pre-sourcing needs.
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 explicitly frames the tool for pre-sourcing meeting preparation: 'the buying habits to know before a sourcing meeting.' It gives clear context for when to use it but does not name explicit alternatives or state when not to use it versus sibling tools like get_french_company_public_procurement or find_expiring_french_public_contracts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_french_sector_benchmarksFrench sector benchmarks (NAF)ARead-onlyInspect
Sector benchmarks and sector statistics for a French NAF activity code (any level: 68, 68.2, 68.20, 68.20B): number of active companies, median company age (+quartiles), workforce-bracket distribution, and — when at least 5 companies file public accounts — median revenue, EBITDA margin, pre-tax result and debt ratio. Peer comparison: place a company against its peers. Aggregates only, no personal data. Paid via x402 ($0.05 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | Optional 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. | |
| code_naf | Yes | NAF activity code, any level | |
| x_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the existing readOnlyHint and openWorldHint annotations, the description discloses aggregation behavior, conditional metric availability when at least 5 companies file public accounts, absence of personal data, and payment requirements via x402 at a specific cost. This gives the agent substantial operational context.
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 dense but well-structured, front-loading the resource and NAF-code scope, then listing output metrics, then adding the peer-comparison use case and payment detail. Every sentence contributes useful information without repetition.
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 an output schema present, the description covers the remaining context an agent needs: what data is returned, when fields are available, the fact that data is aggregated and non-personal, and how payment works. It is complete for correct selection and invocation.
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. The description adds value by clarifying that code_naf accepts any NAF level with concrete examples (68, 68.2, 68.20, 68.20B), which helps agents format the parameter correctly.
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 defines the tool as returning sector benchmarks and statistics for a French NAF activity code, listing the exact metrics included. The 'sector' level and NAF-code resource distinguish it from company-specific siblings like get_french_company_financials and get_french_company_profile.
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 establishes a clear use case: aggregate sector statistics keyed by NAF code, with the explicit note 'Aggregates only' signaling that this is not for company-level lookups. It does not name alternative tools or explicit when-not conditions, but the context is strong and unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_german_insider_transactionsGerman insider transactionsARead-onlyInspect
Insider transactions at a German listed company — directors' dealings under MAR Article 19, as notified to BaFin: are its managers buying or selling? Issuer-level aggregate over a rolling 12 months — notification counts, gross buy and sell amounts, net flow, breakdown by declarer category, plus the underlying notifications. Query by LEI or ISIN (BaFin publishes no company register number). No individual is ever named, and the breakdown is withheld when it would single someone out. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | LEI (20 chars, ISO 17442) or ISIN (12 chars) of the German listed issuer | |
| depuis | No | Start date YYYY-MM-DD (default: rolling 12 months; BaFin keeps 12 months) | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, openWorldHint) establish a safe read on live data, and the description adds non-obvious traits beyond them: no individual is ever named, the breakdown is withheld when it would single someone out, BaFin retains only 12 months of data, and the call is paid via x402 at $0.02. These are exactly the behaviors an agent cannot infer from annotations or schema.
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?
Three sentences, each load-bearing: purpose and regulatory basis, payload contents, then identifier/privacy/cost. Well front-loaded with the core question 'are its managers buying or selling?', but the rhetorical flourish is mild redundancy with the immediately following list of amounts and flows, keeping it just below a 5.
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?
Complete for a read-only data tool: the output schema covers return structure, annotations cover the safety profile, and the description covers scope, identifier rules, privacy suppression, the 12-month horizon, and pricing. The two-step x402 flow is covered in the x_payment parameter description, which the agent sees at invocation time. Nothing needed to call it correctly is missing.
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% and parameter syntax is already documented, so the baseline is 3. The description adds real meaning on top: why LEI/ISIN are the only identifiers ('BaFin publishes no company register number'), the rolling-12-month default context tied to depuis, and the concrete pricing tied to x_payment/api_key — all of which inform parameter choice.
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 the specific verb+resource: 'Insider transactions at a German listed company' under 'MAR Article 19, as notified to BaFin'. It specifies the aggregation level (issuer-level, rolling 12 months) and the payload (notification counts, gross buy/sell amounts, net flow, declarer breakdown, underlying notifications), which differentiates it from siblings like get_belgian_insider_transactions by jurisdiction and regulatory basis.
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 clear use context: German listed issuer, directors' dealings, queryable by LEI or ISIN, rolling 12-month window, with an explicit cost. It does not explicitly name alternatives or exclusions (e.g., 'for Belgian issuers use get_belgian_insider_transactions'), so it stops short of a 5, but 'German listed company' is a strong routing cue among 60+ siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_irish_company_insolvencyIrish company insolvency status (CRO)ARead-onlyInspect
Insolvency status of an Irish company from the Companies Registration Office register (CRO Open Data, CC BY 4.0, complete daily snapshot): procedure DERIVED from the published status — liquidation, liquidation stayed, examinership, administration — with its date; strike-off (listed or struck off) and dissolution reported separately; aucune_procedure is a measured fact on the complete snapshot (the CRO publishes neither the liquidator nor court orders). 400 without charge for a malformed number, 404 without charge when unknown, 503 fail-closed without a fresh snapshot. Price $0.01. The company file itself is served by the generic EU company lookup with pays=IE.
| Name | Required | Description | Default |
|---|---|---|---|
| numero | Yes | Irish CRO company number: 1 to 7 digits, e.g. 600161 (IE prefix and leading zeros tolerated) | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses that the procedure is DERIVED from published status, that 'aucune_procedure' is a measured fact, and that the CRO publishes neither the liquidator nor court orders. It also details error behavior (400/404/503), pricing, and the complete daily snapshot, adding rich behavioral context not present in 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?
The description is dense but every clause earns its place: purpose, derivation caveat, missing-data limitation, error codes, pricing, and an explicit pointer to the alternative tool. It is front-loaded with the core resource and finishes with actionable logistics, with no fluff.
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?
An output schema exists, so return values do not need to be described. The description covers data provenance, licensing, derivation semantics, error handling, and the alternative file lookup, leaving no obvious gap an agent would need to resolve before calling 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 descriptions for numero, api_key, and x_payment. The description adds slight context by linking the 400 error to 'malformed number' and explaining unknown numbers produce 404, but it does not substantially enrich parameter semantics beyond what the schema already provides.
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 'Insolvency status of an Irish company from the Companies Registration Office register', identifying the specific resource, country, and data source. It further distinguishes itself by noting 'The company file itself is served by the generic EU company lookup with pays=IE', so an agent knows exactly what this tool is and is not.
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 explicitly routes the agent to an alternative: 'The company file itself is served by the generic EU company lookup with pays=IE', and it gives error semantics (400/404/503) that shape expectations. However, it does not explicitly name sibling country-specific insolvency tools for other jurisdictions, relying instead on the title and sibling list to convey that scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latvian_company_accountsLatvian annual accountsARead-onlyInspect
Latvian company annual accounts from official VID filings (Uzņēmumu reģistrs open data, CC0, refreshed daily) — financial statements for EVERY filed fiscal year in one call: balance sheet, P&L (revenue null = not published, never zero), cash flow when filed, employees. Figures as published: filing currency (EUR, LVL before 2014) and published rounding unit (THOUSANDS = thousands); statutory and consolidated filings kept apart. No default-risk score is computed for this country yet: the response carries score_defaillance (statut non_evaluable, closed-list reasons — GET /v1/lecture explains them); never read it as a low score. Paid via x402 ($0.03 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| regnr | Yes | 11-digit Latvian registration number (Uzņēmumu reģistrs), e.g. 40003032065 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations readOnlyHint=true and openWorldHint=true, the tool is already known to be safe and not exhaustive. The description adds significant behavioral context: it details data source freshness, the custom logic for revenue null vs zero, handling of currency and rounding units, separation of statutory vs consolidated filings, and the meaning of the default-risk field. It even warns against misinterpreting the score as low, which is exactly the kind of disclosure that goes beyond 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?
The description is dense but every sentence adds value: source, data scope, content list, data quirks, currency/rounding clarifications, default-risk clarification, and payment method. It front-loads the core purpose and then provides essential caveats in a logical order. No fluff or repetition; it is long but justified given the complexity of the financial data.
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?
The description fully covers what an agent needs to invoke and interpret this tool: what data is returned (balance sheet, P&L, cash flow, employees), how to interpret missing revenue, currency and rounding nuances, the distinction between filing types, the meaning of the default-risk field, and payment options. An output schema exists, so return structure details are handled there. This is a comprehensive description for a complex financial data tool with no obvious gaps.
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 schema descriptions for all three parameters are thorough: regnr has format and an example, api_key explains its role and error behavior, x_payment explains when to omit it. Since schema coverage is 100%, the description adds little beyond reinforcing that regnr is the key identifier. The description does emphasize that figures are as published, which helps interpret results but does not add new parameter semantics 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 precisely identifies the tool as fetching Latvian company annual accounts from official VID filings, covering all fiscal years in one call. It clearly enumerates the included financial statements (balance sheet, P&L, cash flow, employees) and distinguishes this from sibling country-specific account tools. The phrasing also clarifies data nuances like revenue null vs zero and currency/rounding, making the tool's exact purpose unmistakable.
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 implicitly conveys that this tool is for accessing Latvian annual accounts, but does not explicitly contrast it with related Latvian tools like beneficial owners, officers, or insolvency. However, the context that it is comprehensive (ALL filings) and includes a key caveat about default-risk score guides when to use it. No explicit alternatives are named, but the coverage is clear enough for basic selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latvian_company_eventsLatvian company legal eventsARead-onlyInspect
Latvian company legal events from the official Uzņēmumu reģistrs open data (CC0, daily national photo): liquidations and activity terminations (incl. by court or tax authority), mergers, acquisitions, divisions and transformations with the other company's number, VID activity suspensions, and securing measures (prohibitions, liens, attachments) with the registering institution. Closed-list types plus source code and wording; a registered company with no event gets aucun_evenement: true.
| Name | Required | Description | Default |
|---|---|---|---|
| regnr | Yes | 11-digit Latvian registration number (Uzņēmumu reģistrs), e.g. 40003032065 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds meaningful context beyond that: the exact data source (official Uzņēmumu reģistrs, CC0, daily national photo), the controlled vocabulary ('closed-list types plus source code and wording'), and a specific no-event response flag ('aucun_evenement: true'). It does not discuss authentication or rate limits, but for a read-only open-data tool this is reasonably transparent.
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 a single dense sentence that front-loads the core purpose and then packs in source, scope, and a special-case behavior. There is no redundancy, but the long enumerations and semicolon-separated clauses make it somewhat harder to scan quickly.
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?
An output schema exists, so the description does not need to explain return values. It covers the data source, update frequency, event taxonomy, and the no-event behavior, which is sufficient for a read-only legal-events tool. It could explicitly mention historical depth or pagination, but openWorldHint and the output schema soften that gap.
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 the 11-digit regnr format and the api_key/x_payment semantics. The description adds no new parameter-level meaning beyond implying that the tool expects a registered Latvian company, so the baseline score of 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 ('get Latvian company legal events') and enumerates the distinct event types (liquidations, terminations, mergers, acquisitions, divisions, transformations, VID suspensions, securing measures), which clearly differentiates it from siblings like get_latvian_company_insolvency and get_latvian_company_officers. It also cites the official source, further anchoring the tool's purpose.
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 clear context about the covered event categories, so an agent can infer when to use this tool versus sibling tools for accounts, officers, or insolvency. However, it does not explicitly name alternatives or state when not to use it, leaving the contrast mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latvian_company_insolvencyLatvian company insolvencyARead-onlyInspect
Latvian company insolvency record from the official Uzņēmumu reģistrs open data (CC0, daily national photo since 2008): insolvency and legal-protection proceedings with dates, resolution, court and case number — null end date means ongoing. A registered company with no proceeding returns an explicit positive answer (aucune_procedure: true) — the register is authoritative. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| regnr | Yes | 11-digit Latvian registration number (Uzņēmumu reģistrs), e.g. 40003032065 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the readOnlyHint and openWorldHint annotations: it names the official CC0 open-data source, notes daily national snapshots since 2008, explains that a null end date means ongoing proceedings, and clarifies that a registered company with no proceeding returns an explicit positive answer. Payment model and cost are also disclosed. No contradiction 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?
The description is compact and well-structured: the first sentence delivers the core behavior and contents, the second adds edge-case behavior and payment details. Every sentence earns its place, and there is no filler or redundancy.
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 single-record lookup with a rich output schema and fully documented parameters, the description covers all essential context: source authority, temporal coverage, field semantics, no-proceeding behavior, and cost. No important information needed for correct invocation appears to be missing.
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 already fully described in the input schema, including regnr's 11-digit pattern, api_key's prepaid-credit behavior, and x_payment's signed payment semantics. The description adds no parameter-specific detail beyond what the schema provides, so the 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 states a specific verb and resource: retrieving a Latvian company insolvency record from the official Uzņēmumu reģistrs. It enumerates the exact content covered (insolvency and legal-protection proceedings with dates, resolution, court, case number), making it unmistakable and distinct from sibling tools for other countries or other Latvian company data.
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 intended use is implied clearly by the country and topic, but the description does not explicitly say when to prefer this tool over alternatives or when not to use it. No alternative tools are named, so an agent must infer usage from the tool name and description context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latvian_company_officersLatvian company officersARead-onlyInspect
Latvian company officers and directors from the official Uzņēmumu reģistrs open data (CC0, refreshed daily): board members, chairs, liquidators and other representatives with role, governing body, representation rights and registration date; corporate officers carry their own registration number. GDPR minimisation: never the Latvian personal identity number, birth month+year only when published. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| regnr | Yes | 11-digit Latvian registration number (Uzņēmumu reģistrs), e.g. 40003032065 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a safe read-only, open-world operation, and the description adds meaningful behavioral context: official source, CC0 licensing, daily refresh, GDPR minimization around personal identity numbers, and x402 payment expectations. This goes beyond the structured annotations and helps the agent understand privacy and pricing 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 dense but organized: it states what the tool returns, sources the data, notes freshness, lists representative content, and then flags GDPR and payment constraints. Every sentence adds useful information, and the highest-value scope statement appears first.
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 a full output schema, complete parameter documentation, and annotations covering safety, the description adds the missing context: data provenance, refresh cadence, privacy safeguards, and payment model. Nothing essential for selecting or invoking the tool is left unexplained.
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 input schema already fully documents all three parameters, including pattern, example, and payment semantics for api_key and x_payment. The description reinforces the payment context but does not add parameter-specific details beyond what the schema provides, so the baseline of 3 is appropriate.
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 names a specific verb-resource pair: retrieving Latvian company officers and directors from the official Uzņēmumu reģistrs open data. It lists concrete officer types (board members, chairs, liquidators) and data fields, which makes the tool's scope unmistakable and distinguishes it from sibling tools like get_latvian_company_beneficial_owners or get_latvian_company_accounts.
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 clearly implies this tool is for Latvian company officer/director data and goes into detail about the contents, but it does not explicitly state when to use it versus alternatives or mention any exclusions. The context is clear enough for a well-informed agent, but the description leaves the comparison to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latvian_company_public_procurementLatvian company public procurement (IUB)ARead-onlyInspect
Public-procurement record of a Latvian company from the IUB (Iepirkumu uzraudzības birojs) daily open-data notices (CC0, e-forms since 2023-10-25): contracts WON (attributions: buyer, subject, CPV, contract reference, value in EUR, conclusion / decision / start / end dates, contract status, winner size) and notices ISSUED as a buyer (avis_emis), newest first, 100 each at most with tronque_*, totals (nombre_attributions, valeur_totale_eur, nombre_avis_emis) and stock (first and last day collected). Natural-person winners are never served. About 3% of Latvian winners are published without an identifier and the stock starts on 2023-10-25: aucune_attribution: true is a NON-conclusive absence. Facts only, no score. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| regnr | Yes | 11-digit Latvian registration number (Uzņēmumu reģistrs), e.g. 40003032065 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint and openWorldHint annotations. It discloses specific behaviors: newest-first ordering, pagination limit of 100, tronque_* fields, totals, stock range, natural-person winners never served, and the critical caveat that aucune_attribution: true is non-conclusive. It also reveals the pricing mechanism. This is exceptional transparency with no contradiction to 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?
The description is dense and packed with necessary caveats, but it is not verbose or redundant. It front-loads the core purpose and then layers in important behavioral and data-quality details. It is longer than typical descriptions, but each clause adds value, so it earns a 4 rather than a 3.
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 this complexity—multiple data categories, pagination, caveats, and payment requirements—the description is remarkably complete. It covers data source, fields, ordering, limits, missing data implications, and cost. The output schema covers return structure, so nothing critical is missing for an agent to call it 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 adds minimal parameter-specific context beyond the schema; it mentions the x402 payment and the $0.02 cost, which gives context to x_payment, but it does not elaborate on regnr or api_key beyond what the schema already provides. This aligns with the baseline.
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 it returns the public-procurement record of a Latvian company from the IUB, specifying it covers contracts won and notices issued. It distinguishes from sibling tools by naming the specific Latvian source (IUB) and the country, making it unambiguous which tool to select among many get_* tools.
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 implicitly indicates when to use this tool: when a Latvian company's procurement record is needed. It provides context like the data source start date (2023-10-25) and limitations (3% missing identifiers), which helps decide if the tool is suitable. However, it does not explicitly name alternative tools or state 'use this instead of X', so it falls short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lithuanian_company_accountsLithuanian annual accountsARead-onlyInspect
Lithuanian company annual accounts — balance sheets and profit-and-loss statements filed at the Juridinių asmenų registras (Registrų centras open data on data.gov.lt, CC BY 4.0, financial years 2015+, daily snapshot): EVERY filed financial year in one call — non-current and current assets, total assets (published or summed), equity, liabilities, tangible fixed assets, revenue, income, profit before tax, net profit, in EUR as published; filing template and standard, filing date. Only structured filings exist in the source (partial coverage stated); source lines published twice are merged and any disagreement is flagged in postes_divergents. Null = not published, never zero. Unknown JAR code or no structured filing = 404 (no charge). Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| kodas | Yes | 9-digit Lithuanian JAR code (Juridinių asmenų registras), e.g. 304500803 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses payment requirements and cost, null-value semantics, 404 behavior, source merging with divergence flags, and data freshness (daily snapshot, 2015+). This is far richer than the annotations alone and gives the agent an accurate model of side effects and edge cases.
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 dense and front-loaded with the core resource and fields, then covers caveats, payment, and edge cases. It is long but every clause carries needed information; the heavy use of semicolons compresses it into a single readable block. Slight overpacking prevents a 5, but no fluff is present.
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 a paid tool with error semantics, null handling, source limitations, and duplicate-merge behavior, the description covers all operational concerns an agent needs. An output schema exists, so return-value structure is already documented; the description adds the missing contextual and contractual details.
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 input schema already documents all three parameters with descriptions and a pattern for kodas, giving 100% schema coverage. The description adds context about 404 behavior and payment, but does not meaningfully extend per-parameter semantics beyond what the schema provides, so the baseline of 3 is appropriate.
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 states a specific resource (Lithuanian company annual accounts) with a clear verb implied by the tool name, enumerating the exact data fields (assets, equity, liabilities, revenue, profit). It distinguishes itself from sibling country-account tools by country and from get_lithuanian_company_insolvency by content, so an agent can select it confidently.
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 the tool (when Lithuanian structured annual accounts are needed) and provides useful limitations (only structured filings, partial coverage), but it does not explicitly contrast it with alternatives or state when not to use it. Coverage and filing-date constraints are present, yet no explicit 'use this instead of X' guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lithuanian_company_insolvencyLithuanian company insolvency (JAR and AVNT)ARead-onlyInspect
Lithuanian company insolvency status from two official open-data sources (data.gov.lt, CC BY 4.0, daily snapshot): the legal status at the Juridinių asmenų registras (31 closed-list codes — bankruptcy opened, bankrupt, in liquidation, liquidation due to bankruptcy, restructuring, removed…) and the AVNT case files since 2020 — bankruptcies (court, initiator, opening, liquidation, termination, closing and removal dates, simplified procedure, intentional-bankruptcy ruling), restructurings (plan approval, end) and intentional bankruptcies, each with en_cours derived from the published dates. aucune_procedure: true is a measured fact on both complete snapshots for a company known to the register; AVNT only goes back to 2020. Unknown JAR code = 404 (no charge). Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| kodas | Yes | 9-digit Lithuanian JAR code (Juridinių asmenų registras), e.g. 304500803 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply readOnlyHint and openWorldHint, and the description substantially extends them with source provenance, license, snapshot frequency, closed-list code coverage, date fields, derived en_cours status, and the measured-fact semantics of aucune_procedure. It also states the 404/no-charge behavior and x402 payment details. No statement contradicts the 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?
The description is dense but every clause carries relevant information: data sources, scope, date coverage, edge cases, and pricing. It is front-loaded with the core purpose and avoids filler; the only minor downside is that it is one long, heavily parenthesized sentence rather than broken into scannable parts.
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 read-only, paid API tool, the description covers the input, payment method, error/edge-case behavior, data sources, coverage limitations, and key output semantics. Because an output schema exists, the description does not need to enumerate return fields, and nothing critical is missing for an agent to invoke it 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?
Since the input schema documents kodas, api_key, and x_payment at 100% coverage, the description does not need to re-explain them. It adds useful context—JAR code meaning, 404 for unknown codes, and $0.02 pricing—but not enough to raise the score above the high-schema-coverage baseline.
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 names a precise verb/resource ('get Lithuanian company insolvency status') and details exactly what is returned: legal-status codes from JAR and AVNT case files since 2020, including bankruptcies and restructurings. This clearly distinguishes it from other country insolvency tools in the sibling list (e.g., get_latvian_company_insolvency) and from general company data tools.
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 intended use case—Lithuanian company insolvency checks—is clear, and the description supplies important usage boundaries: data is a daily snapshot, AVNT coverage starts in 2020, and unknown JAR codes return 404. It does not explicitly name alternatives or state when not to use the tool, but the country-specific scope is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_norwegian_company_accountsNorwegian annual accountsARead-onlyInspect
Annual accounts of a Norwegian company from the official Regnskapsregisteret (Brønnøysundregistrene, NLOD 2.0): the latest filed fiscal year fetched live, plus every earlier year accumulated since 2026-07 (the register only serves the latest one). Balance sheet (assets, equity, debts), P&L (operating income and result, net result), figures as published in the filing currency — can be USD, never converted. Banks and insurers are not served by the source. No default-risk score is computed for this country yet: the response carries score_defaillance (statut non_evaluable, closed-list reasons — GET /v1/lecture explains them); never read it as a low score. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 9-digit Norwegian organisasjonsnummer, no spaces, e.g. 923609016 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, the description discloses the live-fetch behavior, the historical accumulation limitation since 2026-07, the lack of currency conversion, source exclusions, and the non-evaluable score semantics. This is rich, specific, and very useful for an agent.
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 information-dense and front-loads the core purpose before moving to caveats. The first sentence is quite long with several clauses, but every sentence carries necessary details, so it is reasonably concise 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?
For a single-required-parameter tool with an output schema, the description is nearly complete: it covers data source, live vs accumulated historical filing, report contents, currency behavior, coverage restrictions, score interpretation, and payment options. An agent has enough to decide and invoke 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?
The schema already covers all three parameters at 100% and provides format and usage details for id, api_key, and x_payment. The description adds little parameter-specific meaning beyond the payment amount and method, so the baseline 3 is appropriate.
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 identifies the tool as returning annual accounts of Norwegian companies from a specific official register, names the report contents (balance sheet, P&L), and gives country scope. This distinguishes it from other country-account tools and the Norwegian legal-events sibling.
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 gives strong context on when to use it (Norwegian company accounts) and on exclusions (banks and insurers not served), plus explicit guidance not to interpret score_defaillance as a low default score. It does not name specific alternative sibling tools, but the purpose and exclusions are clear enough for routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_norwegian_company_legal_eventsNorwegian legal eventsARead-onlyInspect
Legal events of a Norwegian company from the official Enhetsregisteret (Brønnøysundregistrene, NLOD 2.0): bankruptcy (konkurs, with the date the register publishes), voluntary winding-up, compulsory winding-up / forced dissolution, and strike-off — plus the current flags, re-checked live at call time. A registered company with no event returns an explicit positive answer (aucun_evenement: true), asserted only when the record was live-verified, no flag is raised, it is not struck off and the journal is current. Coarser than the French BODACC: the Norwegian bankruptcy register is not public, so there is no ruling text, no court and no insolvency practitioner; origine_date tells a register-published date from a Sirenic observation date, and date_au_plus_tard: true marks a date that is only an upper bound (flag already raised when first observed — started on or before). 3-year window (the source's own republication limit), except a still-open procedure, whose opening is always served. Only legal persons are served: natural-person forms (ENK, PERS, TVAM), estates named after one (KBO, BO) and any unrecognised form are refused. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 9-digit Norwegian organisasjonsnummer, no spaces, e.g. 923609016 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the readOnlyHint/openWorldHint annotations: it specifies the negative-result protocol (aucun_evenement: true only when live-verified, no flag raised, not struck off, journal current), live re-checking, the 3-year republication window with the open-procedure exception, the precise semantics of origine_date and date_au_plus_tard, refusal of unrecognised entity forms, and the $0.02 x402 cost. These details enrich rather than contradict the 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?
Six dense sentences, each carrying distinct information: event types and source, negative-result semantics, data-coverage comparison and date semantics, time window, entity scope, and pricing. Core purpose is front-loaded and no sentence is redundant or padded.
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 jurisdiction-specific legal-events tool with an existing output schema, the description covers everything an agent needs to invoke it correctly: source, event taxonomy, negative-result behavior, temporal bounds, valid entity scope, and payment. Return-structure details are left to the output schema, so nothing material is missing.
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% and the schema already documents id, api_key and x_payment thoroughly, including the credits-vs-x402 interaction and the insufficient-balance error, so the baseline is 3. The description adds only marginal parameter context: the $0.02 price point and the legal-person constraint that limits which organisasjonsnummer values are valid.
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: retrieving the legal events (bankruptcy, voluntary/compulsory winding-up, strike-off) of a Norwegian company from the official Enhetsregisteret (Brønnøysundregistrene). It enumerates the exact event types and source, and contrasts itself with the French BODACC, so an agent can distinguish it from siblings like get_norwegian_company_accounts or get_uk_company_insolvency.
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 explicit scope constraints: only legal persons are served, natural-person forms (ENK, PERS, TVAM) and estates (KBO, BO) are refused, events are limited to a 3-year window unless a procedure is still open, and the BODACC comparison signals that ruling text/court/insolvency-practitioner details are unavailable. It does not, however, name sibling alternatives by tool name, so explicit alternative-routing is partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_norwegian_company_local_unitsNorwegian company local units (establishments)ARead-onlyInspect
Local units (underenheter, the Norwegian equivalent of French SIRET establishments) of a Norwegian company from the official Enhetsregisteret (Brønnøysundregistrene, NLOD 2.0), refreshed daily from the national bulk: each unit's own 9-digit orgnr, name, main activity (NACE-NO), secondary and auxiliary activities, headcount as published (effectif_publie tells whether the register recorded one), location and postal addresses, registration, activity-start and ownership-change dates, VAT registration — plus the unit count and cumulative published headcount, largest first. The bulk holds only units still registered. Legal persons only (a sole proprietorship's units carry a person's name and are refused, payment cancelled). A known legal person with no unit gets aucune_unite_locale: true. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 9-digit Norwegian organisasjonsnummer, no spaces, e.g. 923609016 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Behavioral transparency is strong: it discloses the official data source, daily refresh, that only still-registered units are in the bulk, the legal-person restriction, payment via x402, and the edge case where a known legal person has no units. This goes well beyond the readOnlyHint and openWorldHint annotations and helps the agent predict side effects and failure modes.
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 front-loaded with the core concept and packs a great deal of useful detail into a compact text. The first sentence is a very long enumeration of returned fields and metadata, which is dense but not wasteful. Minor structural improvement would come from splitting that sentence, but every clause earns its place.
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's single required id parameter, the output schema, and the readOnly/openWorld annotations, the description covers everything an agent needs: source, scope, exclusions, edge cases, ordering, headcount semantics, and payment. There is no material gap that would cause incorrect invocation or misinterpretation.
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. The description adds meaningful parameter semantics by clarifying that the id must belong to a legal person and that sole-proprietorship calls are refused with payment cancelled. It also contextualizes api_key and x_payment by mentioning the $0.01 x402 charge and credit-payment behavior.
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 names a precise resource, 'local units (underenheter)' of a Norwegian company, and gives concrete content expectations such as orgnr, NACE activities, addresses, and headcounts. It is easy to distinguish from sibling Norwegian tools like get_norwegian_company_officers or get_norwegian_company_accounts, even without comparing schemas.
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 clearly communicates when the tool applies: for establishments of a legal-person Norwegian company. It also gives an important exclusion for sole proprietorships, whose units are refused. However, it does not explicitly name alternatives or say 'use this instead of X', so guidance about competing sibling tools is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_norwegian_company_officersNorwegian company officers and boardARead-onlyInspect
Officers and board of a Norwegian company from the official Enhetsregisteret (Brønnøysundregistrene, NLOD 2.0), refreshed daily from the national roles bulk: general manager, board chair, deputy chair, members and deputies (with who elected them: shareholder class or employees), fully liable partners with their liability share, general partner, holder, licensed auditor and accountant with their own orgnr and licence status, Norwegian representative of a foreign entity. Current mandates by default; inclure_anciens=true adds deregistered roles, both counts stay exact. organe and role are closed lists with the register's code and wording (GET /v1/lecture); no appointment or end dates exist in the source. GDPR: natural persons come with first name, last name, role and deceased flag only — never the birth date the register publishes. Legal persons only: sole proprietorships, estates and unknown forms are refused (404, payment cancelled). A known legal person with no registered role gets aucun_mandat_inscrit: true. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 9-digit Norwegian organisasjonsnummer, no spaces, e.g. 923609016 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| inclure_anciens | No | true to add deregistered (historical) mandates; default lists current mandates only |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint and openWorldHint annotations, the description goes far beyond: daily refresh, 'inclure_anciens=true adds deregistered roles', closed vocabularies ('organe and role are closed lists... (GET /v1/lecture)'), absence of appointment/end dates, GDPR minimization (first/last name, role, deceased flag only), payment via x402, and 404 refusal behavior. No contradiction 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?
The core purpose is front-loaded in the first sentence, followed by dense but relevant detail in a single paragraph. It is longer than necessary due to redundancy with the title (officers and board) and a few run-on clauses, but every sentence carries useful behavioral or legal information; no padding.
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 an output schema already present, the description does not need to describe return values. It covers source, refresh cadence, role taxonomy, GDPR handling, legal-form restrictions, empty-result signal (aucun_mandat_inscrit: true), absence of dates, and payment details, making the tool fully invocable without guesswork.
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 id, api_key, x_payment and inclure_anciens. The description reinforces the inclure_anciens behavior ('adds deregistered roles, both counts stay exact') and gives cost context for x402, but adds little per-parameter semantic beyond the schema; baseline 3 is appropriate.
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 opens with the specific resource—'Officers and board of a Norwegian company'—and names the official source (Enhetsregisteret/Brønnøysundregistrene). It lists the exact officer types returned and distinguishes itself from sibling Norwegian tools by the role-focused scope and the legal-person restriction.
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 clearly states this tool is for officers/board of Norwegian legal persons, defaults to current mandates, and explains that sole proprietorships, estates and unknown forms are refused. It does not explicitly name alternative sibling tools for related data (e.g., accounts), but the context is clear enough that an agent can decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_polish_company_public_procurementPolish company public procurement (BZP)ARead-onlyInspect
Public-procurement record of a Polish company from the Biuletyn Zamówień Publicznych (e-Zamówienia public API, UZP, CC0; national below-EU-threshold notices since 2021, daily updates): contracts WON matched by legal-person NIP (attributions, one per awarded part: buyer with NIP, subject, CPV, closed-list outcome, tenders received, awarded price and contract value in PLN as published, contract date, declared enterprise size) and notices ISSUED as a buyer (avis_emis); newest first, capped at 100 with tronque_*. Winners are served only when PROVEN legal persons (legal form in the name or KRS from the VAT white list): sole traders — 37 % of winners — are never served (400 without charge), a NIP not yet classified answers 404 without charge (stock.gagnants_a_classer). Partial coverage: zero never means “never won a contract”.
| Name | Required | Description | Default |
|---|---|---|---|
| nip | Yes | Polish NIP (tax identifier): ten digits, separators and PL prefix tolerated, e.g. 7812034808 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark read-only and open-world, and the description adds substantial behavioral detail beyond that: two record categories, newest-first ordering capped at 100, 400 for sole-trader winners, 404 for unclassified NIPs, 'without charge' for both, and the 'zero never means never won a contract' caveat. This goes well beyond the annotations and makes runtime behavior predictable.
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 dense but mostly earns its length: each clause conveys coverage, limitations, or edge-case behavior. It is front-loaded with the core purpose before caveats. It loses a point for minor provenance/licensing details and internal field names that are not necessary for an agent to invoke the tool correctly.
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 an output schema present and readOnly/openWorld annotations already supplied, the description covers everything else essential: data source, temporal coverage, update frequency, result structure, result cap, error semantics, and the open-world caveat. No critical invocation information is missing.
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 nip, api_key, and x_payment are already well documented structurally. The description adds the meaningful detail that winners are matched by legal-person NIP, but does not need to and does not restate the schema-level parameter formats.
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 states a precise verb and resource: retrieving a Polish company's BZP public-procurement record, split into won contracts (attributions) and issued notices (avis_emis). The source and scope (Biuletyn Zamówień Publicznych, national below-EU-threshold notices) clearly distinguish it from sibling procurement tools for other countries.
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 gives clear context on when this tool is appropriate: Polish company NIP, national BZP data since 2021, daily updates, and explicit limitations for sole traders and unclassified NIPs. However, it does not explicitly name sibling tools like get_latvian_company_public_procurement or get_eu_procurement_awards to state when not to use them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_polish_company_registry_eventsPolish registry events (KRS)ARead-onlyInspect
Registry EVENTS of a Polish company, derived from the official KRS daily bulletin (Krajowy Rejestr Sądowy, Ministry of Justice): liquidation opened or closed, bankruptcy, restructuring, activity suspension and resumption, dissolution, mergers and transformations, tax or social-security arrears and enforcement, annual-accounts filings, changes of name, legal form, registered office or share capital, and strike-off. Each event carries the bulletin day it appeared on and, when the register publishes one, the register's own date. The response always states the observation window (gap-free by construction) — the register publishes no retroactive event history. IMPORTANT: this endpoint does NOT check that the KRS number exists — a non-existent number returns exactly the same aucun_evenement: true answer as a real company that stayed quiet; the existence block says which case applies, and get_european_company_profile (pays=PL) settles existence with a 404. GDPR by design: no officers, shareholders, liquidators or curators, never a PESEL — and no FREE TEXT from the register either: the narrative wording of a decision can name a notary or a receiver, so it is read only to extract a date and then discarded (that date is flagged date_source_inferee). What is served: the event type from a closed list, its register section, its dates, its wpis number, amounts, and the deciding court or authority. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| krs | Yes | 10-digit Polish KRS number, leading zeros included, e.g. 0000006865 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the readOnlyHint/openWorldHint annotations: the existence-check trap (non-existent KRS returns the same result as a quiet company), the gap-free observation-window guarantee with no retroactive history, GDPR filtering (no PESEL, no free text, narrative discarded after date extraction), the date_source_inferee flag, and the $0.02 x402 cost. These are genuinely non-obvious traits an agent must know before invoking.
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 long and dense, but every sentence earns its place: event types, date semantics, the open-world window, the IMPORTANT existence caveat, GDPR constraints, served fields, and pricing. The critical warnings are front-loaded and marked with 'IMPORTANT'. It could be better structured with clearer paragraph breaks, but no sentence is wasted.
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, return values don't need duplication, and the description covers everything else: data source, event taxonomy, date behavior, existence ambiguity, open-world limitations, GDPR exclusions, served fields, payment method, and the sibling that resolves existence. For a tool with this many non-obvious caveats, nothing an agent needs to call it correctly is missing.
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 and the schema already documents krs, api_key, and x_payment fully. The description adds meaningful semantics on top: what a given krs value produces in edge cases (non-existent → same as silent company, disambiguated by the existence block) and how api_key interacts with the x402 payment. That elevates it above baseline, though it doesn't add format details 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 opens with a specific verb-resource pair — 'Registry EVENTS of a Polish company' — and anchors it to the official KRS daily bulletin, then enumerates the covered event types (liquidation, bankruptcy, restructuring, mergers, strike-off, etc.). This clearly differentiates it from country-specific siblings like get_swedish_company_registry_events and from profile tools like get_european_company_profile.
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 gives explicit guidance for the key decision point: it warns that a non-existent KRS number yields the same empty result as a real quiet company and directs the agent to get_european_company_profile (pays=PL) to settle existence. It also implies exclusion via the GDPR note (no officers/shareholders → those needs belong elsewhere). It stops short of a full when-to-use/when-not-to-use enumeration against all siblings, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portuguese_company_public_procurementPortuguese company public procurement (Portal BASE)ARead-onlyInspect
Public-procurement record of a Portuguese company from IMPIC's Portal BASE (weekly open-data files on dados.gov.pt, public domain; every public contract since 2012): contracts WON by NIPC — buyer, subject, procedure and contract type (closed lists), CPV, lots, contract/base/final prices in EUR, dates, duration, framework agreement, closure, bidder count, contract modifications —, contracts ISSUED as a buyer, notices in the Diário da República; newest first, capped at 100. Winners and bidders published without a NIF are never named, only counted. 400 without charge for a natural-person NIF or an invalid check digit; 404 without charge when nothing is found (absence is not conclusive). Price $0.02.
| Name | Required | Description | Default |
|---|---|---|---|
| nipc | Yes | Portuguese NIPC (tax identifier of a legal person): nine digits with a valid check digit, PT prefix and separators tolerated, e.g. 504904493 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, the description reveals concrete behaviors: the cap of 100 results, newest-first ordering, anonymization of winners/bidders without a NIF, and the 400/404 error states with the caveat that absence is not conclusive. It also discloses the data source and public-domain nature. No contradiction 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?
The description is dense but each element adds information: source, scope, fields, cap, anonymization, errors, price. It front-loads the main purpose and keeps the field list compact in parentheses. The single run-on sentence packs many clauses, but no sentence is 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?
Given the tool's complexity (many procurement fields, several error modes) and that an output schema exists, the description covers everything an agent needs: what data is returned, in what order, with what limits, and how failures are signaled. It even includes the price, which is relevant for the agent's decision to call. Nothing critical is missing.
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 nipc's check-digit pattern, api_key's purpose, and x_payment's role. The description's mention of NIPC and error states is contextual rather than parameter-level. Hence the baseline score of 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?
The description specifies a concrete resource – the public-procurement record of a Portuguese company from IMPIC's Portal BASE – and enumerates exactly what is returned: contracts won, contracts issued as buyer, and Diário da República notices. It distinguishes this from sibling country procurement tools by naming Portugal and the source. The cap and field list (CPV, prices, dates, etc.) leave no ambiguity about scope.
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 clearly frames the tool as serving Portuguese NIPCs and states the data scope (since 2012, capped at 100, newest first). It also gives boundary conditions ('400… for a natural-person NIF or an invalid check digit; 404… absence is not conclusive'). However, it never explicitly contrasts this with sibling procurement tools, so the 'when vs alternatives' guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_romanian_company_accountsRomanian annual accounts (Ministry of Finance)ARead-onlyInspect
Romanian company annual accounts from the Ministry of Finance open data (data.gov.ro, CC BY 4.0, financial years 2019-2024, every published year in one call): balance sheet (fixed and current assets, inventories, receivables, cash, liabilities, provisions, equity, paid-up capital), income statement (net turnover, total income and expenses, gross and net profit or loss), average headcount, CAEN Rev. 2 activity class and filing format (abridged or full). Amounts in RON as published, null = not published, never zero. Legal persons only; a company with no published statement answers 404 without charge (banks, insurers, NBFIs and NGOs file in separate, unserved files).
| Name | Required | Description | Default |
|---|---|---|---|
| cui | Yes | Romanian CUI / fiscal code, 1 to 10 digits, with or without the RO prefix, e.g. 412052 or RO412052 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, it discloses the data source and license, that amounts are in RON, that null means not published and never zero, that the API responds 404 without charge for absent statements, and that separate filing types are unserved. This gives the agent concrete behavioral expectations well beyond the 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?
The description is dense and front-loaded with the essential purpose, followed by useful scope and failure semantics. It is a single long sentence that could be broken up for readability, but every clause adds substantive information and there is 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 read-only data-retrieval tool with an output schema, the description covers the source, years, covered entities, returned fields, formatting, null semantics, and the no-result 404 behavior. Nothing needed to decide whether to call the tool and interpret its result is missing.
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%, with all three parameters (cui, api_key, x_payment) already documented in the schema. The description adds no parameter-level detail beyond the schema; the baseline of 3 applies because the schema carries the parameter documentation 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?
The description opens with 'Romanian company annual accounts from the Ministry of Finance open data', naming the exact resource and scope, then enumerates the specific balance-sheet and income-statement fields returned. This makes it immediately distinguishable from sibling tools like get_romanian_company_insolvency or get_uk_company_accounts.
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 gives clear applicability context: financial years 2019-2024, all published years in one call, legal persons only, and a 404 rather than an empty result for companies without a statement. It does not name an alternative tool explicitly, but it states exclusions (banks, insurers, NBFIs, NGOs) that tell the agent when not to expect results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_romanian_company_insolvencyRomanian company insolvency (ONRC register)ARead-onlyInspect
Romanian company insolvency from the ONRC register open data (data.gov.ro, CC BY 4.0, monthly national snapshot): the register status codes of the bankruptcy (faliment), insolvency (Law 85/2014, Law 85/2006, Law 64/1995, judicial reorganisation, financial recovery), liquidation and dissolution families with their published Romanian labels and a closed family, plus the insolvency practitioners published among the legal representatives (judicial liquidator, judicial administrator, special or concordat administrator, liquidator — name and capacity only); aucune_procedure = no such status AND no practitioner, measured on the complete snapshot for a known CUI; statuses are undated and court decisions are not published, so a closed proceeding may remain recorded (autres_statuts carries the other register entries). Legal persons only. 503 fail-closed when the snapshot is missing or older than 70 days. Paid via x402 ($0.02).
| Name | Required | Description | Default |
|---|---|---|---|
| cui | Yes | Romanian CUI / fiscal code, 1 to 10 digits, with or without the RO prefix, e.g. 412052 or RO412052 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint; the description adds substantial behavior: 503 fail-closed on missing/over-70-day snapshot, $0.02 x402 payment, undated statuses where closed proceedings may remain recorded, and the CC BY 4.0 licensed monthly national snapshot. No contradiction with the 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-dense and front-loaded with purpose, but delivered as a single run-on paragraph with heavy parentheticals (law citations, multiple administrator types) that is hard to scan. Every sentence earns its place, yet the formatting undercuts readability.
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 an output schema exists and the tool is complex (multiple status families, practitioners, payment, failure modes), the description covers data source, license, staleness caveat, fail-closed behavior, and payment. Nearly everything an agent needs is present, slightly marred by unstructured delivery.
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 per-parameter descriptions (CUI pattern with examples, api_key behavior, x_payment precedence). The description adds only marginal parameter context (works on a known CUI, measured on complete snapshot), so baseline 3 is appropriate.
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 (Romanian company insolvency from the ONRC register open data) and enumerates exact status families (bankruptcy, insolvency, liquidation, dissolution) plus practitioners. The Romanian scope and topic clearly separate it from the many sibling insolvency tools (Croatian, Latvian, UK, Swiss) and from get_romanian_company_officers.
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 clear scope context (legal persons only, known CUI, complete snapshot) but never names an alternative tool or states when not to use it. With roughly ten sibling insolvency tools and a Romanian officers tool, explicit routing would help, though the country+topic in the name already disambiguates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_romanian_company_officersRomanian company legal representatives (ONRC)ARead-onlyInspect
Romanian company legal representatives from the ONRC open data (data.gov.ro, CC BY 4.0, monthly national snapshot): every mandate published for every registration of the CUI — administrators, permanent representatives of corporate administrators, general director, supervisory board and directorate members, liquidators, judicial and special administrators — with the register's Romanian label, a closed-list family (role.famille) and the nature (natural person or entity, inferred from the presence of a birth date); sorted by family then name, duplicates across re-registrations merged; aucun_mandat_publie is measured on the complete snapshot. Name and role only: birth date, birthplace and domicile published by the source are never stored. Legal persons only (sole traders and family enterprises are refused 404). 503 fail-closed when the monthly snapshot is missing or older than 70 days. Paid via x402 ($0.01).
| Name | Required | Description | Default |
|---|---|---|---|
| cui | Yes | Romanian CUI / fiscal code, 1 to 10 digits, with or without the RO prefix, e.g. 412052 or RO412052 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the readOnlyHint and openWorldHint annotations, disclosing the data source (ONRC open data, CC BY 4.0, monthly snapshot), sorting and deduplication behavior, privacy policy (birth date, birthplace, domicile never stored), refusal conditions, and fail-closed error behavior for stale snapshots. It also mentions payment via x402.
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 dense but efficiently structured, leading with the core purpose and data source, then enumerating details in a logical flow. Every sentence contributes meaningful information, though it is lengthy; it earns a high score for being comprehensive without redundancy.
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 appropriately omits return-value details and instead covers the critical operational aspects: data freshness, error handling, exclusions, sorting, deduplication, privacy constraints, and payment mechanism. Nothing essential for calling the tool correctly is missing.
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 all three parameters (cui, api_key, x_payment). The description does not add significant parameter-level semantics beyond what the schema provides; it mainly adds context about the tool's output limitations (name and role only) rather than parameter specifics.
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 states precisely that it retrieves Romanian company legal representatives from ONRC open data, enumerating the types of representatives and the fields returned. It clearly distinguishes itself from other country-specific officer tools by its Romanian scope and specific data source.
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 provides clear context on when to use it (for legal persons) and explicit exclusions (sole traders and family enterprises are refused 404). It does not explicitly name alternative tools, but the country-specific purpose is self-evident among the many sibling officer tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_slovak_company_filingSlovak annual accounts (RUZ)ARead-onlyInspect
One Slovak fiscal year decoded from the structured statements filed with the RÚZ — balance sheet and profit and loss, 16 key items: net turnover (null = not published, never zero), operating income and costs, value added, staff costs, operating, financial, pre-tax and net result, income tax, total assets, non-current and current assets, equity, share capital, liabilities — plus prior-year comparatives as published in the same filing. Amounts in euros, never converted. Closing date comes from list_slovak_company_filings; scope defaults to the statutory filing. Paid via x402 ($0.03 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| ico | Yes | 8-digit Slovak IČO, e.g. 36417475 | |
| api_key | No | Optional 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. | |
| perimetre | No | Filing scope: statutory (default) or consolidated — never merged | |
| x_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| type_depot | No | Filing type from the filings list (Riadna, Mimoriadna…), when two filings share the same closing date; defaults to the ordinary one | |
| date_cloture | Yes | Fiscal-year closing date, YYYY-MM-DD, e.g. 2025-12-31 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only and open-world, and the description adds meaningful behavior beyond that: null means not published and never zero, amounts are in euros and never converted, prior-year comparatives are as published, and payment is via x402 at a listed price with api_key as alternative. No contradiction 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?
Front-loaded with the core purpose and packed with high-value details, but the enumeration of 16 financial items makes it denser than strictly necessary. Still, every sentence earns its place; the long list defines the exact return scope an agent needs.
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 an output schema present, the description doesn't need to document return structure. It covers source, defaults, pricing, payment flow, parameter disambiguation, and the two required parameters' provenance, leaving no obvious gap for invocation.
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?
Despite 100% schema coverage, the description enriches several parameters: date_cloture comes from list_slovak_company_filings, perimetre defaults to statutory and is never merged, and type_depot disambiguates filings sharing a closing date. It also explains api_key payment behavior and the credits error case.
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-less but clear operation: decoding one Slovak fiscal year from RÚZ structured statements, enumerating exact financial items. It is instantly distinguishable from list_slovak_company_filings (which provides the closing date) and from other countries' filing tools.
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?
Clearly describes the data scope, source, and the default statutory/ordinary-filing behavior, and points to list_slovak_company_filings for the required closing date. It doesn't explicitly spell out exclusions or when-not-to-use, but the jurisdiction-specific name and sibling list make the context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spanish_company_actsSpanish company acts (BORME)ARead-onlyInspect
Spanish company acts from the official BORME gazette (Registro Mercantil, section A) by hoja registral — the register key, e.g. VI-23141, returned by search_european_companies for Spain: incorporations, officer appointments and dismissals (role + name), capital changes, mergers, dissolutions, insolvency. Daily flow since 2009, newest first (100 max + total count). Spanish personal IDs (DNI/NIE) and natural-person sole-shareholder names are redacted at ingestion, marked « […] ». Basado en datos de la Agencia Estatal Boletín Oficial del Estado. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| hoja | Yes | Hoja registral (register-sheet key), e.g. VI-23141 — from search_european_companies with pays=ES. The BORME does not publish the NIF. | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description adds meaningful behavioral detail: redaction of DNI/NIE and sole-shareholder names, ordering (newest first), pagination behavior (100 max + total count), temporal coverage since 2009, and x402 pricing. This gives the agent realistic expectations about the response and side effects.
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 information-dense and front-loaded with the core resource and key, followed by coverage details, redaction policy, and payment. Almost every sentence adds value, though the Spanish attribution boilerplate could be trimmed without losing much.
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 and annotations, the description is largely complete: it covers what data is returned, how it is ordered, the maximum result count, redactions, and payment requirements. It does not explicitly discuss empty-result behavior or pagination beyond the max count, but these are minor given the existing structured context.
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 all three parameters in detail. The description reinforces the hoja relationship with search_european_companies but adds little beyond what the schema's hoja description already states. Baseline 3 is appropriate.
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 names a specific resource (Spanish company acts from the official BORME gazette, Registro Mercantil section A) and the exact key needed (hoja registral). It enumerates the act types covered, giving concrete examples, and is clearly distinct from the many other country-specific sibling tools.
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 explicitly tells the agent where the required hoja value comes from: search_european_companies for Spain. This provides a clear prerequisite and usage path. It does not explicitly say 'use this instead of other country filing tools,' but the country/source specificity and the search-to-hoja flow make the intended usage unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spanish_company_public_procurementSpanish company public procurement (PLACSP)ARead-onlyInspect
Public-procurement record of a Spanish company from the Plataforma de Contratación del Sector Público (Ministerio de Hacienda CODICE feeds: hosted profiles and aggregated regional platforms, archives since 2012, daily updates): contracts WON matched by legal-person NIF (attributions: buyer with DIR3, subject, CPV, lot, closed-list result such as awarded or formalised, award date, amounts in EUR excl. and incl. tax as published, tenders received, SME flag) and notices ISSUED as a buyer (avis_emis, public entities with a NIF); newest first, capped at 100 with tronque_*. Never a natural-person winner (DNI/NIE refused without charge) nor a consortium without its own NIF. Partial coverage: zero never means “never won a contract”; a NIF with no row answers 404 without charge.
| Name | Required | Description | Default |
|---|---|---|---|
| nif | Yes | Spanish legal-person NIF: one letter (A-H, J, N, P-S, U-W), seven digits and a check character, e.g. A28582013 — DNI/NIE (natural persons) are refused | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare read-only and open-world behavior. The description adds substantial operational detail: newest-first ordering, a 100-result cap with `tronque_*`, archives since 2012, daily updates, no-charge refusal of DNI/NIE, the difference between a zero result and a 404, and coverage limitations. No contradiction with the 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?
The description is dense but efficiently organized: the core function and source are front-loaded, followed by structured data categories and operational caveats. Each clause carries necessary selection or invocation information, with 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?
The description is complete for an agent to select and invoke the tool correctly: it covers input constraints, data categories, ordering, pagination cap, coverage semantics, and non-charge error behavior. The presence of a full output schema means return-value details do not need to be repeated in the description.
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 schema already documents `nif`, `api_key`, and `x_payment`. The description adds value beyond the schema by explaining that the NIF is a legal-person identifier matched against `attributions`, that DNI/NIE are refused, and that the result is capped with `tronque_*` fields.
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 states a specific verb and resource: it retrieves the public-procurement record of a Spanish company from PLACSP, and distinguishes two data perspectives (contracts won as `attributions` and notices issued as a buyer as `avis_emis`). This is precise enough to separate it from sibling tools like get_french_company_public_procurement or get_eu_procurement_awards.
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 gives strong when-to-use and when-not-to-use context: it applies to Spanish legal persons with a NIF, excludes natural persons (DNI/NIE refused) and consortia without their own NIF, and warns about partial coverage. It does not explicitly name alternative sibling tools, so the 'vs alternatives' routing is implicit rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_surveillance_watchCompany watch statusARead-onlyInspect
Status and accumulated events of a watchlist created with create_surveillance_watch. Free — the surveillance_id token IS the capability.
| Name | Required | Description | Default |
|---|---|---|---|
| surveillance_id | Yes | Token returned at creation |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations by stating that the tool is free and that the surveillance_id token itself is the capability, which signals no additional authentication or payment setup is required. It also implies that events accumulate over time, which is useful behavioral information.
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 short sentences with no filler. The core purpose is front-loaded, and the capability/pricing note is a valuable second sentence that earns its place. Every word contributes to the agent's understanding.
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 simple one-parameter read tool with an output schema and safety-related annotations, the description covers everything needed: what the tool returns, how the watchlist was created, and the free capability-based access model. Nothing important is missing for correct invocation.
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%, and the parameter already has a description ('Token returned at creation'). The description adds extra semantic value by emphasizing that the token 'IS the capability', which clarifies that the parameter is not merely an ID but a self-contained authorization artifact. This goes beyond the schema's basic field 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 returns 'Status and accumulated events of a watchlist' and ties it directly to create_surveillance_watch. This specific verb-resource pairing and creation mention distinguish it from the other watch-related siblings like renew_surveillance_watch and stop_surveillance_watch.
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 gives clear context: use this for the status and accumulated events of a previously created watchlist, identified by its surveillance_id. It does not explicitly name alternatives or state when not to use it, but its relationship to create_surveillance_watch makes the intended usage obvious. The 'Free — token IS capability' note also clarifies access expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_swedish_company_accountsSwedish annual accountsARead-onlyInspect
Annual accounts of a Swedish company, decoded from the official iXBRL filings Bolagsverket publishes free of charge (EU high-value datasets, since 3 February 2025): EVERY digitally filed fiscal year in one call — turnover (null = not disclosed under the K2 abridged format, never zero), operating and net result, total assets, equity, long- and short-term debt, average employees, plus the prior-year column as filed. Figures as published, in the filing currency (SEK). IMPORTANT COVERAGE LIMIT: digital filing is OPTIONAL in Sweden (~63% of annual reports in 2025, 53% in 2024) and the corpus starts with filings RECEIVED from 2020 — a company that is absent may simply have filed on paper. Officers (företrädare) are NOT available for Sweden: they are not part of the free datasets. No default-risk score is computed for this country yet: the response carries score_defaillance (statut non_evaluable, closed-list reasons — GET /v1/lecture explains them); never read it as a low score. Paid via x402 ($0.03 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| orgnr | Yes | 10-digit Swedish organisationsnummer, with or without hyphen, e.g. 5560401977 or 556040-1977 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses that a missing company may be due to paper filing (open world), explains null vs zero for turnover, states the paid nature ($0.03), and warns that score_defaillance is not a low score. It also notes the absence of officers and default-risk computation. This is exemplary transparency well beyond 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?
The description is a single dense paragraph but every sentence carries important operational information (coverage limits, null semantics, payment, risk-score caveat). It front-loads the core purpose before caveats. It is somewhat long but avoids verbosity; minor trimming would be possible without loss.
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 an output schema available, the description need not detail return fields. It covers all operational essentials: coverage window, filing optionality, null handling, absence of officers, default-risk behavior, and payment mechanism. Together with annotations and schema, an agent has everything needed to invoke correctly and interpret results.
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 parameters (orgnr, api_key, x_payment) are already well documented in the schema. The description adds no new semantic meaning about parameters; it only reiterates payment context already covered. Given the high schema coverage, a score of 3 is appropriate.
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 returns 'Annual accounts of a Swedish company', explicitly naming the resource (Swedish company accounts) and the source (iXBRL filings). It distinguishes from siblings by focusing on Sweden and lists specific financial fields (turnover, operating/net result, assets, equity, debt, employees), making it unmistakable what data is provided.
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 implicitly handles when to use this tool by scoping to Swedish companies (as opposed to other country-specific siblings). It provides critical usage caveats: digital filing is optional, corpus starts 2020, and officers are not available, which prevents misinterpretation of absent data. However, it does not explicitly name alternative tools for officers or other jurisdictions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_swedish_company_registry_eventsSwedish registry eventsARead-onlyInspect
Registry events of a Swedish company from Bolagsverket's official weekly national file (free EU high-value dataset): incorporation date, ONGOING winding-up or restructuring proceedings (bankruptcy/konkurs, liquidation, company reconstruction, composition, merger, division, cross-border conversion, bank resolution) with their start dates, and deregistration with its coded reason. Use it to check whether a Swedish counterparty is bankrupt, in liquidation or already struck off before signing or paying. A registered company with NO proceeding returns an explicit positive answer (procedure_en_cours: false) — the register is authoritative. Note: only ONGOING proceedings are published, and a company already struck off returns procedure_en_cours: false — the proceeding ended with the striking-off, whose coded reason carries the outcome. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| orgnr | Yes | 10-digit Swedish organisationsnummer, with or without hyphen, e.g. 5560401977 or 556040-1977 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses critical semantics: only ongoing proceedings are published, a struck-off company returns procedure_en_cours: false with the outcome carried by the coded reason, and a registered company with no proceeding returns an explicit authoritative negative. It also adds payment details and the source's authoritative nature. No contradiction 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?
The description is dense but efficient: it front-loads the tool's scope, follows with the practical use case, and then covers essential caveats and pricing. Every sentence and clause earns its place without filler or repetition of schema content.
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 correctly focuses on what an agent needs to know to select and invoke the tool: source authority, exact event coverage, the meaning of false results, boundary conditions, and payment method. Nothing important appears missing.
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 input schema already provides 100% coverage of all three parameters, including orgnr format and payment-related fields. The description adds useful context about the Swedish registry and x402 payment, but does not need to redefine parameter syntax, so the baseline score of 3 is appropriate.
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 identifies the tool as retrieving registry events for a Swedish company from Bolagsverket's official weekly file, and enumerates the specific event types: incorporation, ongoing winding-up/restructuring proceedings, and deregistration with coded reason. This distinguishes it from country-specific sibling tools like get_norwegian_company_legal_events or get_polish_company_registry_events.
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 a concrete, actionable use case: check whether a Swedish counterparty is bankrupt, in liquidation, or struck off before signing or paying. It does not explicitly name alternatives or formal when-not-to-use conditions, but the Swedish scope and the caveats about ongoing proceedings are clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_swiss_company_eventsSwiss commercial-register publications (SOGC)ARead-onlyInspect
Swiss company commercial-register publications from the Swiss Official Gazette of Commerce (SOGC/SHAB, SECO — public API, live with a 24 h cache, online since July 2018): every registration, change and deletion carrying the company's UID, newest first — date, publication number, canton, office, the company as published (name, UID, seat, eCH legal-form code, purpose, capital, address without the c/o line) before and after the change, and closed-list change flags (name, seat, address, purpose, capital, legal form, bankruptcy, liquidation, suspension, re-entry, other entries). The published free text is withheld (texte_retenu: true): it names persons. Beyond 60 listed publications the most recent are detailed and troncature says so. Unknown UID = 404 (no charge). Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Swiss UID (Unternehmens-Identifikationsnummer), CHE-xxx.xxx.xxx, e.g. CHE-102.732.681 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already present, the description still adds substantial behavioral context: the 24h cache, live source, withholding of free text (texte_retenu) because it names persons, troncature behavior beyond 60 publications, and the 404-on-unknown-UID semantics. No contradiction with the readOnlyHint or openWorldHint annotations — this is genuinely additive 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?
The purpose is front-loaded and every sentence carries substantive information (source, ordering, content, withholding, truncation, errors, pricing). It is dense but not padded. It reads as one long run-on paragraph, which slightly hurts scannability, but there is zero waste.
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 payment mechanics, caching, truncation behavior, and an output schema, the description covers every operational aspect an agent needs: what is returned, what is withheld and why, truncation rules, error semantics (404, credits error), and both payment paths. Nothing an agent needs to invoke it correctly is missing.
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 schema already documents all three parameters well. The description adds value beyond the schema by explaining the payment flow — x402 paid mode, prepaid credits alternative, and that omitting x_payment returns the payment quote — which is contextual meaning not present in the property definitions.
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 opens with a specific verb+resource ('Swiss company commercial-register publications from the Swiss Official Gazette of Commerce (SOGC/SHAB)') and enumerates exactly what is returned — registrations, changes, deletions with UID, newest first. It clearly differentiates from the many sibling tools by being Swiss-specific and events/publications-focused, distinct from get_swiss_company_insolvency and the other country event tools.
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 gives strong contextual framing: what the source is (SECO public API, live since July 2018), the output ordering, and the closed-list of change flags covered. However, it does not explicitly name alternative tools or state when to prefer another sibling, so exclusions are left implicit rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_swiss_company_insolvencySwiss company bankruptcy publications (SOGC)ARead-onlyInspect
Swiss company bankruptcy publications from the SOGC/SHAB (SECO — public API, live, 24 h cache, online since 2021): every publication whose debtor is the company (natural persons never served), newest first — preliminary bankruptcy notice, bankruptcy publication and call to creditors, suspension, schedule of claims and inventory, distribution list, closing, revocation, real-estate auction, recognition of a foreign bankruptcy — with decision date, deadlines, office, canton and the official labels in DE/FR/IT/EN. aucune_procedure: true is a fact bounded by the online archive for a company known to Zefix; bankruptcy and liquidation flags recorded in the register itself come with get_swiss_company_events. Unknown UID = 404 (no charge). Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Swiss UID (Unternehmens-Identifikationsnummer), CHE-xxx.xxx.xxx, e.g. CHE-102.732.681 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, but the description adds substantial behavioral context: live/public API with a 24h cache, online since 2021, newest-first ordering, the bounded meaning of aucune_procedure, 404 behavior for unknown UIDs, and the x402 payment model. No contradiction 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?
Dense but purposeful: every clause contributes either scope, return-content detail, source context, an alternative tool, an error case, or pricing. It is somewhat long and could be structured more visually, but it contains no filler and the most important scoping information appears early.
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 and annotations cover safety, the description is complete for invocation: it covers content type, ordering, language labels, archive-bound semantics, the relevant sibling tool, error behavior, and cost. An agent has enough information to call 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 description coverage is 100%, so the schema already fully documents id, api_key, and x_payment, including the id pattern and example. The description adds payment context but no meaningful parameter-level semantics beyond what the schema provides, so the baseline 3 is appropriate.
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 states a concrete resource: bankruptcy publications from the SOGC/SHAB for Swiss companies, and enumerates the specific publication types returned. It clearly distinguishes this tool from the Swiss sibling get_swiss_company_events and from other countries' insolvency tools.
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 explicitly defines scope (company debtors only, natural persons never served) and names the alternative get_swiss_company_events for register-level bankruptcy/liquidation flags. It also documents the unknown-UID 404 case, helping an agent understand when results may legitimately be empty or when a different tool is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_uk_beneficial_ownersUK persons with significant control (PSC, legal entities)ARead-onlyInspect
UK persons with significant control (PSC register) of a UK company, live from Companies House, the official UK registry — LEGAL-ENTITY controllers only since 2026-09-19 (corporate entities and legal persons: name, register identification, natures of control as ownership/voting bands, notification dates) plus the official PSC statements and the listed-company exemption flag. Natural-person controllers are COUNTED in personnes_physiques_omises and never named (GDPR, CJEU C-798/24 Jautiva). Ceased PSCs are excluded by default (inclure_cesses adds them with their ceased date). Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| company_number | Yes | Companies House company number, 8 characters incl. leading zeros, e.g. 00102498 or SC123456 | |
| inclure_cesses | No | Include ceased PSCs (with their ceased_on date). Default false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, the description discloses material behaviors: legal-entity-only scope since a specific date, GDPR/CJEU-driven suppression of natural-person names, default exclusion of ceased PSCs, and the x402 payment cost. These are exactly the non-obvious traits an agent needs before invoking.
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 dense but every clause carries value: scope, source, exclusions, legal reasoning, and cost are all present, with the primary purpose front-loaded. There is no filler or redundant repetition of 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?
Given the full output schema, readOnly/openWorld annotations, and detailed input schema, this description covers the unusual legal-entity restriction, natural-person GDPR limitation, ceased-PSC behavior, and payment flow. Nothing critical is missing for correct selection and invocation.
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% and the schema already fully describes api_key, x_payment, company_number, and inclure_cesses. The description adds contextual color around ceased PSCs and payment, but it does not materially improve parameter understanding 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 names a specific resource ('UK persons with significant control (PSC register) of a UK company') and a specific live source (Companies House). It also precisely scopes the tool to legal-entity controllers only, which clearly differentiates it from officer, account, and other UK company sibling tools.
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 gives clear selection context: use this for UK PSC legal-entity data from the official registry, and it is explicit about exclusions (natural persons are only counted, ceased PSCs are excluded by default). It does not explicitly name a sibling alternative such as get_uk_company_officers, so it stops short of full when/when-not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_uk_company_accountsUK annual accounts (iXBRL)ARead-onlyInspect
One UK financial year — UK company financial statements decoded from the iXBRL accounts filed at Companies House: balance sheet (fixed and current assets, stocks, debtors, cash, creditors split by maturity, provisions, net assets, equity), average employees, and the profit and loss account when filed (turnover, operating, pre-tax and net result — most small companies file a balance sheet only), plus prior-year comparatives as published. Null = not published, never zero. Balance-sheet date comes from list_uk_company_accounts. Paid via x402 ($0.05 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| date_cloture | Yes | Balance-sheet date, YYYY-MM-DD, e.g. 2025-12-31 | |
| company_number | Yes | Companies House company number, 8 characters incl. leading zeros, e.g. 00095407 or SC123456 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description adds substantial behavioral detail beyond that: null means not published and never zero, the P&L is only present when filed, prior-year comparatives are as published, and the request is paid via x402 at a specific cost. This is valuable operational context an agent needs before calling.
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 dense but every sentence earns its place: scope, contents, null semantics, filing caveats, prerequisite, and payment. The long field enumeration is justified because it lets the agent know exactly what data to expect. It is front-loaded with the core purpose and then layers details efficiently.
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 financial statements, the x402 payment mechanism, and the presence of an output schema, the description is remarkably complete. It covers data availability caveats, null handling, source of the balance-sheet date, cost, and payment path, leaving no critical ambiguity for a correct 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 coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by explaining that date_cloture is the balance-sheet date and that it comes from list_uk_company_accounts, and by clarifying the x402 payment context for x_payment/api_key. This enriches the parameter understanding without duplicating schema text.
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 states a specific verb and resource: it decodes UK company financial statements from iXBRL accounts filed at Companies House for one UK financial year. It enumerates the exact financial statement components, making it unmistakably distinct from sibling tools for other jurisdictions or filing types.
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 gives clear usage context: it is the UK annual accounts tool, expects a balance-sheet date, and tells the agent that the date comes from list_uk_company_accounts. It does not explicitly name alternatives for other jurisdictions, but the UK-specific scope and cross-reference to the prerequisite listing tool provide solid guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_uk_company_gazette_noticesUK insolvency notices (The Gazette)ARead-onlyInspect
Corporate insolvency notices of a UK company from The Gazette, the official journal (London, Edinburgh and Belfast; OGL v3.0), collected daily from the category-24 feed: winding-up resolutions and petitions, appointment of liquidators and administrators, winding-up orders, creditors' notices, dividends, moratoria — each with the official notice code, a closed-list type and regime, publication date and link. The procedural journal Companies House does not give (use get_uk_company_insolvency for the current status). Coverage is PARTIAL and said so: the stock starts at stock.depuis and ~30% of notices (creditors' notices, dividends, meetings) are attached to the company number in a deferred pass at the pace the site tolerates — stock.avis_en_attente_de_rattachement counts them; aucune_annonce: true is a bounded answer for a company confirmed at Companies House. No personal data (practitioners, notice text). Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| company_number | Yes | Companies House company number, 8 characters incl. leading zeros, e.g. 00102498 or SC123456 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only readOnlyHint and openWorldHint, but the description goes far beyond. It discloses partial coverage (~30% of notices attached in a deferred pass), the stock start point (stock.depuis), the pending-attachment counter (stock.avis_en_attente_de_rattachement), the bounded 'aucune_annonce' response, and privacy exclusions (no personal data). It also reveals the payment mechanism (x402 or api_key). None of this contradicts annotations; it enriches them.
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 a single dense paragraph, but it is arranged logically: purpose first, then source and notice types, then coverage caveats, then payment. Every sentence carries substantive information (coverage, payment, exclusions). It is longer than ideal, but given the complexity (3 params, partial data, payment), the length is justified and there is no fluff.
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 an output schema and 3 parameters, the description is remarkably complete: it specifies the data returned (notice code, type, regime, date, link), coverage limitations and how to interpret them, payment options, and the sibling for the complementary data. An agent has everything needed to call it correctly, including edge cases like pending attachment and bounded answers.
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% — every parameter (api_key, x_payment, company_number) already has a clear description in the schema. The tool description adds little parameter-specific meaning beyond what the schema provides; it mentions payment indirectly but the schema already explains the api_key and x_payment details. Baseline 3 applies since the description does not materially exceed 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 states a specific verb and resource: 'Corporate insolvency notices of a UK company from The Gazette', and enumerates the exact notice types (winding-up resolutions, petitions, liquidators, administrators, etc.). It also distinguishes itself from the sibling get_uk_company_insolvency by noting it covers procedural notices rather than current status. This makes the purpose unmistakable.
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 guidance is explicit: 'The procedural journal Companies House does not give (use get_uk_company_insolvency for the current status)'. This names the alternative tool and the condition for choosing it. It also clarifies coverage limitations and when a bounded answer (aucune_annonce: true) is appropriate, leaving no ambiguity about when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_uk_company_insolvencyUK company insolvencyARead-onlyInspect
UK company insolvency record, live from Companies House, the official UK company registry: cases (compulsory or voluntary liquidation, administration, receivership...) with dates and insolvency practitioners (name and role only, no addresses). A company with no recorded case returns an explicit positive answer (aucune_procedure: true) — the register is authoritative. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| company_number | Yes | Companies House company number, 8 characters incl. leading zeros, e.g. 00102498 or SC123456 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint and openWorldHint annotations by disclosing that data is live, the register is authoritative, no-procedure cases return an explicit positive answer (aucune_procedure: true), and practitioner data excludes addresses. Payment cost and mechanism are also disclosed. No contradiction 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?
The description is compact and front-loaded: resource, source, content, and limitations appear first, followed by no-case behavior and payment details. Every sentence adds value with no filler or repetition.
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 one required parameter, full schema coverage, and an output schema available, the description covers the essential contextual needs: source, jurisdiction, data scope, no-record semantics, and payment/auth. Nothing critical is missing for an agent to call 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 description coverage is 100%, so the schema already documents company_number format, api_key behavior, and x_payment handling. The description adds only high-level payment context (x402, $0.02) rather than meaningful per-parameter semantics beyond the schema, so the baseline of 3 is appropriate.
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 states a specific resource — UK company insolvency record — with a clear source (Companies House) and concrete content (case types, dates, practitioners). This clearly differentiates it from country-specific insolvency siblings like get_czech_company_insolvency and get_latvian_company_insolvency, as well as other UK company tools.
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 gives clear context: use this for UK company insolvency records from the official Companies House register. It does not explicitly name exclusions or alternative tools, but the UK/jurisdiction framing and the sibling list make the appropriate use case obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_uk_company_officersUK company officersARead-onlyInspect
UK company officers and directors, live from Companies House, the official UK company registry: directors and secretaries with role, appointment date, nationality, occupation, country of residence and month+year of birth only — never a correspondence address (GDPR minimisation). Includes active/resigned counts. Open Government Licence v3.0. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| company_number | Yes | Companies House company number, 8 characters incl. leading zeros, e.g. 00102498 or SC123456 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the bar is lower. The description adds valuable behavior context: live Companies House data, GDPR minimisation (no correspondence address), active/resigned counts, Open Government Licence, and x402 payment at a fixed price. This goes beyond the annotations without contradicting them.
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 sentence that front-loads the resource and source, then efficiently adds data fields, GDPR caveat, counts, licence, and pricing. Each clause earns its place, though the density could be slightly improved with splitting.
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 an output schema present and full parameter coverage, the description covers all essential contextual aspects: data source, field scope, privacy minimisation, licence, and cost. No critical operational detail is missing for a read-only lookup 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 mentions payment via x402 and the data fields returned, but does not add parameter-specific meaning beyond what the schema already provides for api_key, x_payment, or company_number.
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: 'UK company officers and directors', and enumerates exact data fields (role, appointment date, nationality, occupation, country of residence, birth month/year). It clearly distinguishes itself from siblings like get_uk_beneficial_owners by specifying directors/secretaries and the Companies House source.
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 usage by naming the resource and data source, but never explicitly states when to choose this over alternatives such as get_uk_beneficial_owners or get_latvian_company_officers. No when-not or alternative routing is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_uk_company_public_procurementUK company public procurement (FTS, Contracts Finder)ARead-onlyInspect
Public-procurement record of a UK company from Find a Tender (above-threshold notices since 2021) and Contracts Finder (below-threshold since 2023), Cabinet Office OCDS feeds under OGL v3: contracts WON matched by company number (attributions: buyer, subject, contract value in GBP, award / signature dates, contract period, status, official notice link, source fts | cf) and notices ISSUED as a buyer (avis_emis), newest first, 100 each at most with tronque_*, totals (nombre_attributions, valeur_totale_gbp, nombre_avis_emis) and stock per feed. Only about half of suppliers carry a company number and natural persons never do: aucune_attribution: true is a NON-conclusive absence; aucun_marche: true means the company was confirmed at Companies House with nothing matched. Facts only, no score. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| company_number | Yes | 8-character UK company number, leading zeros included (e.g. 10868035, SC540982) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, and the description adds substantial behavioral context beyond that: the data is 'facts only, no score', the absence semantics are explicitly disclosed, the pagination limit (100 each, `tronque_*`), the totals fields, and the licensing (OGL v3). It also discloses the payment behavior (x402 vs api_key, and the credits error path). This is rich 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?
The description is dense and information-rich, front-loading the core purpose and data sources before the caveats and payment details. It is long, but every sentence carries meaningful information that an agent needs. Slightly over-stuffed, but not wasteful.
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 and the annotations cover safety, the description is complete: it explains the data sources, the matching key, the fields returned, the pagination, the absence semantics, the licensing, and the payment options. An agent has everything needed to call this tool correctly and interpret the result.
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 all three parameters. The description adds context about the company_number format (leading zeros) and the payment flow, but the parameter semantics are largely carried by the schema. Baseline 3 is appropriate.
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 names a specific verb and resource ('Public-procurement record of a UK company'), identifies the two data sources (Find a Tender and Contracts Finder), and distinguishes the two directions of data (contracts WON vs notices ISSUED). It clearly differentiates from siblings like get_french_company_public_procurement and get_latvian_company_public_procurement by the UK scope and the named feeds.
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 gives clear context on when the data is meaningful: it explains that only about half of suppliers carry a company number, that natural persons never do, and that `aucune_attribution: true` is non-conclusive while `aucun_marche: true` is conclusive. It does not explicitly name alternative tools for when this one is not appropriate, but the coverage caveats effectively tell the agent when the result is not conclusive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_belgian_company_filingsBelgian filings list (NBB)ARead-onlyInspect
Belgian company annual accounts — list every published deposit of a Belgian company at the NBB CBSO (Central Balance Sheet Office, Authentic Data): deposit references with filing metadata as published. Unique on x402: no other service exposes Belgian filed accounts. No default-risk score is computed for this country yet: the response carries score_defaillance (statut non_evaluable, closed-list reasons — GET /v1/lecture explains them); never read it as a low score. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 10-digit Belgian enterprise number (KBO/BCE), e.g. 0403170701 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
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 response carries score_defaillance with statut non_evaluable and closed-list reasons, explicitly warning 'never read it as a low score.' It also discloses the payment mechanism (x402 at $0.01, or prepaid credits via api_key) and the error behavior for insufficient balance. This is meaningful behavioral disclosure beyond what annotations provide. Minor gap: it doesn't describe pagination or the exact return structure, but the output schema exists.
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 compact and front-loaded with the core purpose ('Belgian company annual accounts — list every published deposit...'). Each sentence earns its place: uniqueness, default-risk caveat, and payment. It is slightly dense with parentheticals and technical terms (NBB CBSO, x402, score_defaillance), but not bloated. The structure is logical: purpose → uniqueness → caveat → payment.
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's complexity (payment mechanism, default-risk caveat, uniqueness claim) and the presence of an output schema, the description covers the essential context an agent needs: what it lists, why it's unique, how to interpret a potentially misleading field, and how payment works. The output schema covers return values, so the description needn't explain them. Minor gaps: no explicit mention of pagination or date filtering, and no explicit alternative routing to get_belgian_company_filing for a single filing. But overall, it is complete enough for correct invocation.
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 all three parameters. The description adds context beyond the schema: it explains the payment flow (omit x_payment to receive the payment quote; api_key is ignored when x_payment is provided) and clarifies the error mode for insufficient balance. It also reinforces that id is the Belgian enterprise number. This exceeds the baseline 3 for full schema coverage by adding payment-related semantics not present in 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 states a specific verb ('list'), a specific resource ('every published deposit of a Belgian company at the NBB CBSO'), and the scope ('deposit references with filing metadata as published'). It also explicitly distinguishes itself from siblings by claiming uniqueness on x402: 'no other service exposes Belgian filed accounts.' This clearly differentiates it from get_belgian_company_filing and other list_*_filings tools.
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 context for when to use this tool: when you need Belgian company annual accounts/deposits from the NBB CBSO. It explicitly states uniqueness ('no other service exposes Belgian filed accounts'), which serves as an implicit exclusion of alternatives. However, it does not explicitly name sibling alternatives like get_belgian_company_filing or list_uk_company_accounts, nor does it state when NOT to use it (e.g., for a single filing, use get_belgian_company_filing). The payment guidance is useful but not usage-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_danish_company_filingsDanish filings list (CVR)ARead-onlyInspect
Danish company annual accounts — list the fiscal years of a Danish company whose XBRL annual report (Erhvervsstyrelsen, virk.dk publication index) has been decoded: closing dates, period, entity name, currency. Danish-taxonomy (fsa) filings only — IFRS/ESEF-only groups are not decoded, an empty answer does not mean no accounts exist. No default-risk score is computed for this country yet: the response carries score_defaillance (statut non_evaluable, closed-list reasons — GET /v1/lecture explains them); never read it as a low score. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 8-digit Danish CVR number, e.g. 41235292 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations readOnlyHint and openWorldHint, it discloses several important behaviors: the tool never computes a default-risk score, score_defaillance is statut non_evaluable, it is paid via x402, and an empty result must not be interpreted as 'no accounts exist'. These genuinely prevent misuse.
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 dense and front-loads its core purpose, then adds critical scope and payment caveats. Every sentence carries useful information, but it is fairly long; still, the content justifies the length.
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 an output schema and clear annotations, the description covers the core operation, taxology scope, empty-result interpretation, default-score caveat, cost, and payment path. No important guidance for correct invocation is missing.
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 input schema already documents all 3 parameters with 100% coverage, including the CVR pattern, api_key purpose, and x_payment behavior. The description adds only general payment context but no additional per-parameter semantics, so the baseline of 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?
The description opens with a specific verb and resource: 'list the fiscal years of a Danish company whose XBRL annual report has been decoded'. It also narrows scope explicitly to Danish-taxonomy (fsa) filings, which distinguishes it from generic filing tools and the sibling singular get_danish_company_filing.
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 gives clear context and caveats: only Danish-taxonomy filings are decoded, IFRS/ESEF-only groups are not covered, and an empty answer does not mean no accounts exist. It stops short of explicitly naming alternative tools for different filing types, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_finnish_company_filingsFinnish filings list (PRH)ARead-onlyInspect
Finnish company annual accounts — list the fiscal years a Finnish company has filed in XBRL with the PRH (Finnish Patent and Registration Office, CC BY 4.0). Only ~5% of Finnish limited companies file digitally — an empty answer does not mean no accounts exist. Empty filings are filtered out: every listed year carries figures. No default-risk score is computed for this country yet: the response carries score_defaillance (statut non_evaluable, closed-list reasons — GET /v1/lecture explains them); never read it as a low score. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Finnish Business ID (Y-tunnus), NNNNNNN-N, e.g. 0103396-3 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, the description discloses substantial behavioral traits: the 5% digital-filing coverage bias, the empty-filings-are-filtered behavior (every returned year carries figures), the response's score_defaillance always being statut non_evaluable, and the x402 $0.01 payment requirement. It adds far more context than the annotations alone, and nothing contradicts them.
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 dense but economical: each sentence adds one distinct fact (what/authority, coverage caveat, why, filtering, score semantics, price). The purpose is front-loaded and there is no filler or repetition; every sentence earns its place despite the length.
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 and the annotations, the description covers the most important non-structured context: data coverage bias, output-filtering guarantees, the score field's interpretation hazard, and the payment vector. The only notable omission is an explicit pointer to the sibling tool for fetching an individual filing or for asking-plans when the user needs a single document.
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 only 100%, so the id format (Y-tunnus pattern), api_key prepaid credits, and x_payment precedence are already documented in the schema, making 3 the baseline. The description adds the payment amount/currency facts ($0.01 in USDC or EURC) and clarifies the billing context, which gives some added meaning for the payment-related params.
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 opens with 'Finnish company annual filings — list the fiscal years a Finnish company has filed in XBRL with the PRH', giving a specific verb, resource, scope, and authority. It is clearly distinguished from the sibling get_finnish_company_filing by describing a list of fiscal years rather than a single document, and from other country list tools by naming Finland and XBRL filings specifically.
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 gives strong interpretation guidance: an empty answer must not be read as 'no accounts exist' (only ~5% of Finnish companies file digitally), score_defaillance is always non_evaluable and must never be read as a low score, and GET /v1/lecture is pointed to for closed-list reasons. What is missing is an explicit routing rule toward alternatives like get_finnish_company_filing or a risk-scoring sibling; the when-to-use vs. alternatives is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_french_company_documentsList French company documents (INPI)ARead-onlyInspect
List official documents filed by a French company at the INPI RNE registry: legal deeds (statutes, general-meeting minutes, mergers...) and filed annual accounts, with document IDs to download the PDFs. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint, and the description adds valuable behavioral context: the tool is paid via x402 ($0.02) and returns document IDs rather than PDFs themselves. The api_key parameter description transparently explains prepaid credit behavior, fallback, precedence, and error conditions. This exceeds what annotations alone convey.
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 a single tight sentence front-loaded with the core purpose (list official documents) followed by the key qualification about document IDs and payment. Every clause earns its place with no redundancy.
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 a 100% schema coverage, an output schema present, a readOnlyHint, and an explicit payment/error behavior description, the description is complete for an agent to correctly invoke the tool and interpret the workflow. The only minor gap is not specifying the return schema fields, but the output schema handles that.
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. The description adds meaningful context for api_key (payment model, interaction with x_payment, error behavior) and explains what the returned document IDs are for. It doesn't add much about the siren parameter beyond the pattern, but the schema already covers it fully.
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 the tool lists official documents filed by a French company at the INPI RNE registry, enumerates document types (legal deeds, annual accounts), and clarifies it returns document IDs for PDF download. This clearly distinguishes it from sibling tools like download_french_company_document, get_french_company_file, and other list_* filings.
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 clearly identifies the resource and registry (French company, INPI RNE), and the context signals plus having a dedicated sibling download_french_company_document imply the list-then-download workflow. However, it doesn't explicitly state when to use this over alternatives like get_french_company_file or other filing listers, leaving some usage context implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_french_company_establishmentsFrench company establishments (SIRET)ARead-onlyInspect
List all establishments (SIRET) of a French company — branches and addresses with open/closed status, from the official French company registry. Paid via x402 ($0.003 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful behavioral context beyond annotations: the data source, that it returns both branches and addresses with open/closed status, and that the tool is paid via x402 at a specific 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?
The description is a single, efficient sentence that front-loads the core functionality and output details, then adds the payment context. Every part earns its place with no redundant wording or 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?
With an output schema, readOnly annotation, and one required parameter, the description is nearly complete. It covers the purpose, output scope, data source, and pricing. A small gap is the absence of an explicit 'use when' or alternative-routing statement, but this is minor given the clear scope.
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 input schema fully documents siren, api_key, and x_payment. The description adds no additional parameter-level meaning beyond what the schema already provides, matching the baseline of 3.
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 uses a specific verb and resource: 'List all establishments (SIRET) of a French company — branches and addresses with open/closed status.' It clearly identifies the data source and differentiates this tool from the many French-company sibling tools by focusing specifically on establishments/SIRET details.
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 gives clear context for when to use the tool: to retrieve all SIRET establishments, branches, addresses, and their open/closed status from the official French registry. It does not explicitly name alternatives or exclusions, but the scoped purpose makes the appropriate usage readily apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_slovak_company_filingsSlovak filings list (RUZ)ARead-onlyInspect
Slovak company annual accounts — list the fiscal years of a Slovak company whose STRUCTURED financial statements have been decoded from the official Register účtovných závierok (RÚZ, registeruz.sk, Ministry of Finance, CC0): closing date, period, filing type (ordinary/extraordinary), form model, statutory vs consolidated scope, and the official document link. Filings served as PDF only — which includes every IFRS group — carry no structured data and are absent: an empty answer does not mean no accounts exist. Sole traders are not served (GDPR minimisation). No default-risk score is computed for this country yet: the response carries score_defaillance (statut non_evaluable, closed-list reasons — GET /v1/lecture explains them); never read it as a low score. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| ico | Yes | 8-digit Slovak IČO, e.g. 36417475 | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, the description adds valuable behavior: the empty-vs-absent semantics, the GDPR-driven exclusions, the score field being statut specific with non_evaluable reasons (not a low score), and the paid-call requirement with exact price. This is substantial context, though a note on result volume/pagination behavior would have rounded it out.
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 long but dense: the purpose is front-loaded, exclusions and edge-case warnings follow, and the payment/caveat ends. Every sentence earns its place; only the transitional 'never read it as a low score' phrasing and the encrypted 'closed-list reasons — GET /v1/lecture explains them' cross-reference add moderate noise.
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 an output schema present, the description covers the essential operational lifecycle: what is covered (structured RÚZ statements), what is excluded, empty-result semantics, the third-party score pitfall, and the payment mechanism. The required 1-param call with an optional api_key/x_payment split is fully transparent, leaving no critical calling decision ambiguous.
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 schema already documents ico's 8-digit pattern and the api_key/x_payment payment interplay. The description adds country-level context around payment but no parameter-specific semantics beyond what the schema provides, 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?
The description names a specific verb and resource ('list the fiscal years of a Slovak company whose structured financial statements have been decoded from the official RÚZ') and enumerates the exact fields returned (closing date, period, filing type, form model, scope, document link). It differentiates itself from siblings such as get_slovak_company_filing and the other country-specific list_* tools through its RÚZ/structured-data scope and country.
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 gives clear use-context and explicit exclusion boundaries: PDF-only filings (including all IFRS groups) are absent, sole traders are not served, an empty answer does not mean no accounts exist, and the score field must never be read as a low risk. It stops short of naming the alternative tool for single filings or PDF documents, so a sibling-routing statement is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_uk_company_accountsUK accounts list (Companies House)ARead-onlyInspect
UK company annual accounts — list the financial years of a UK company whose iXBRL accounts (Companies House Accounts Data Product, Open Government Licence v3.0) have been decoded: balance-sheet dates, period, entity name, currency, accounting framework (micro-entity, FRS 102...) and accounts type. Electronically filed accounts only (~75% of UK filings) and depth accumulated since 2026-07 — an empty answer does not mean no accounts exist. No default-risk score is computed for this country yet: the response carries score_defaillance (statut non_evaluable, closed-list reasons — GET /v1/lecture explains them); never read it as a low score. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| company_number | Yes | Companies House company number, 8 characters incl. leading zeros, e.g. 00095407 or SC123456 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and open-world, and the description goes far beyond them: it discloses data-source licensing, that only ~75% of UK filings are covered, that depth is limited since 2026-07, that an empty answer does not prove absence of accounts, that no default-risk score is computed, and that the score_defaillance field must not be misread as a low score. This is rich, accurate 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?
The description is front-loaded with the core purpose, then moves through key limitations, a warning about a misleading field, and payment information. Every sentence carries distinct, decision-relevant information and there is no redundancy or 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 read-only listing tool with a single required parameter, an output schema, and open-world annotations, the description is complete. It covers scope, coverage caveats, interpretation of empty results, the special score_defaillance field, and payment mechanics — nothing material is missing for an agent to call it 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?
The input schema already covers all three parameters completely, including the company_number pattern and the payment fields. The description adds context around pricing and the score_defaillance field, but it does not add new meaning about the parameters themselves. Baseline 3 is appropriate given 100% schema coverage.
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 names a specific verb and resource — 'list the financial years of a UK company' — and enumerates what the response contains: balance-sheet dates, period, entity name, currency, accounting framework, and accounts type. It clearly establishes this as a listing operation over decoded iXBRL accounts, distinguishing it from the accounts-related sibling that likely fetches a single filing.
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 purpose and limitations imply when to use the tool: for UK company annual accounts that were filed electronically and decoded from iXBRL. However, it never explicitly says when to prefer this over alternatives such as get_uk_company_accounts, nor does it state exclusions. The usage context is clear, but direction is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_european_invoice_filePrepare Belgian or Polish invoice fileARead-onlyInspect
Use when the company you are about to invoice or pay is BELGIAN or POLISH and you must verify the supplier before payment (for France, use prepare_french_invoice_file). ONE call returns official registry identity, the VAT number checked against VIES, Peppol reachability for Belgium — whose structured B2B e-invoicing mandate has been in force since 1 January 2026 — and, uniquely in Poland, whether the IBAN is actually DECLARED by that taxpayer in the official White List (wykaz podatnikow VAT). The Polish check has FISCAL scope: paying more than 15,000 PLN into an undeclared account costs the buyer the deduction and creates joint liability for the supplier's VAT (art. 117ba Ordynacja podatkowa), so an undeclared account is a blocking reason. Everywhere else the bank leg is a FORM check (ISO 13616 structure + mod-97 key) plus bank identification — never a payee verification: with an iban supplied, verdict.non_verifie sits next to the verdict and names what is not checked (account existence, holder name), and the White List itself proves the account is DECLARED by that taxpayer, never who holds it. Returns a deterministic pret_a_facturer verdict with closed-list reasons, each tagged blocking or informational. The response is Ed25519-signed and carries provenance[] — one entry per block served, with the official register, its licence and its as_of date, the White List entry carrying the date actually sent to the ministry's API — so the payment decision is provable to an auditor offline. Paid via x402 ($0.03 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Belgian enterprise number (10 digits, KBO/BCE) or Polish NIP (10 digits); dots, spaces and dashes are tolerated | |
| iban | No | IBAN of the account you are about to pay, unpunctuated (spaces tolerated) — optional, but it is what unlocks the Polish White List account check, and everywhere the structure check plus bank identification | |
| pays | Yes | Country of the counterparty: BE (Belgium) or PL (Poland). For France use prepare_french_invoice_file. | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, so the safety profile is already known, but the description goes far beyond that: it discloses the deterministic verdict shape with closed-list reasons, blocking vs informational tags, Ed25519 signing, provenance per block served, the Polish fiscal consequences of paying into an undeclared account, and the explicit limitation that the bank leg is only a structure check, never payee verification. This is unusually transparent behavior disclosure for an external-data tool.
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 long but dense and every clause carries decision-relevant information: the use case, the France alternative, the country-specific checks, the fiscal blocking reason, the verification limitations, the signed/provenance output, and the payment mechanism. It front-loads the core routing condition and then layers detail in an order that matches an agent's decision flow.
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 having a rich input schema and an output schema, this tool needs legal and behavioral context to be invoked safely, and the description provides it: Polish White List consequences, VIES verification, Peppol reachability for Belgium, what the bank check can and cannot prove, and how the response is provable to an auditor. An agent has enough information to decide whether to call this tool, with which parameters, and what the answer means.
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 coverage is 100%, so the baseline is 3, but the description adds meaningful semantic value beyond field names: it explains that `iban` is what unlocks the Polish White List account check and the structure-plus-bank-identification leg elsewhere, that `pays` routes the country-specific logic, and that x402 versus api_key are alternative payment paths with distinct failure modes. It does not repeat every schema detail, which keeps it efficient, but the added IBAN/payment semantics 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 names a specific verb ('prepare'), a precise resource ('European invoice file' narrowed to Belgium/Poland), and the exact triggering condition (counterparty is Belgian or Polish and supplier must be verified before payment). It explicitly differentiates itself from prepare_french_invoice_file for France, so an agent can route correctly without opening the 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?
The description gives an explicit when-to-use condition ('Use when the company you are about to invoice or pay is BELGIAN or POLISH and you must verify the supplier before payment') and an explicit when-not-to-use with the named alternative ('for France, use prepare_french_invoice_file'). It also clarifies the optional IBAN behavior and the blocking nature of an undeclared Polish account, which tells the agent when this tool's result should stop a payment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_french_einvoicing_recipientPrepare French e-invoicing recipientARead-onlyInspect
Use when you need to PREPARE a compliant French e-invoice for a company (invoice header, VAT number, addressing) rather than decide whether paying it is safe — for the full verify-the-supplier-before-payment verdict, IBAN included, call prepare_french_invoice_file. The French e-invoicing mandate applies from 1 September 2026: receiving becomes obligatory for every VAT-liable company on that date, issuing is phased (large and mid-sized companies 1 September 2026, SMEs and micro-enterprises 1 September 2027; art. 91 of the 2024 Finance Act). Returns legal name & form, active/ceased status, computed intra-EU VAT number (+ VIES-check pointer), establishments (SIRET) with addresses, NAF code and indicative send/receive obligation dates from the INSEE size category. The response is Ed25519-signed and carries provenance[] — one entry per block served, with the official register, its licence and its as_of date — so the preparation is auditable offline. Preparation only — Sirenic is not an accredited platform (PDP), does not access the central directory and never issues, transmits or routes invoices, nor confirms PPF/PDP registration. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | 9-digit SIREN of the company to be invoiced (digits only, no spaces); use search_french_companies first if you only have a name | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint, and the description adds substantial behavioral context beyond those: the response is Ed25519-signed with provenance entries, Sirenic is not an accredited PDP, does not access the central directory, and never issues/transmits/routes invoices. It also discloses pricing and payment mechanics, giving the agent a full picture of side effects and limitations.
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 dense but purposeful: it front-loads the primary use and core distinction from the closest sibling, then adds regulatory dates, return contents, security/provenance, limitations, and pricing in a logical order. It is longer than typical, but every sentence contributes either selection guidance, behavioral disclosure, or invocation context.
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 high complexity of French e-invoicing regulation, the description covers all essential context: what the tool prepares, what it returns, how it differs from the verification tool, its legal/regulatory basis, its limitations, and its payment method. The output schema exists and the description also sketches the response shape, so an agent has sufficient information to invoke it 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%, and each parameter already has a detailed description, including the siren pattern, api_key behavior, and x_payment semantics. The description adds high-level context about payment and return content but does not materially extend the parameter-level meaning beyond what the schema already provides, so the baseline of 3 is appropriate.
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 leads with a specific verb and resource: 'PREPARE a compliant French e-invoice for a company (invoice header, VAT number, addressing)'. It also explicitly distinguishes this tool from prepare_french_invoice_file, which covers the verify-the-supplier-before-payment use case, preventing confusion with the most similar sibling.
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 explicitly states when to use this tool ('when you need to PREPARE a compliant French e-invoice') and when not to ('rather than decide whether paying it is safe'), naming the alternative to call instead. It adds the regulatory timeline, which helps the agent understand when the mandate applies and what the returned obligation dates mean.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_french_invoice_filePrepare French invoice fileARead-onlyInspect
Use when you are about to invoice or pay a FRENCH company and must verify the supplier before payment: onboarding, first invoice, first payment, or bank details that just changed. The French e-invoicing mandate applies from 1 September 2026 (receiving obligatory for every VAT-liable company; issuing phased: large and mid-sized companies 1 September 2026, SMEs and micro-enterprises 1 September 2027), so every French counterparty has to be checked. ONE call returns the whole agent-side file: legal identity & obligation dates, the computed intra-EU VAT number verified LIVE against VIES, an IBAN FORM check (ISO 13616 structure + mod-97 key) with the bank identified from official registries when iban is supplied, and a deterministic verdict pret_a_facturer (true/false) whose reasons come from a CLOSED list, each tagged blocking or informational and traced to its source. A VIES outage yields an honest informational reason, never a false invalid. Not a payee verification, and the verdict says so where the decision is read: with an iban supplied, verdict.non_verifie sits NEXT TO pret_a_facturer and names what is never checked — the account's existence and the holder's name. An IBAN on a published list of known documentation samples is flagged by the informational reason iban_exemple_documentation, whose absence is not proof of the contrary (the verdict stays green: such an IBAN is well-formed; the account's existence is not tested). The response is Ed25519-signed and carries provenance[] — one entry per block served, with the official register, its licence and its as_of date — so the decision stays auditable offline months later. Paid via x402 ($0.03 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| iban | No | IBAN of the account you are about to pay (spaces and dashes tolerated). Supplying it adds the structure check and the bank identification, and lets the verdict block on iban_invalide; omitting it yields the informational reason iban_non_fourni | |
| siren | Yes | 9-digit SIREN of the French counterparty being checked — the customer you will invoice or the supplier you will pay (digits only, no spaces) | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavioral context beyond the readOnly/openWorld annotations: VIES outages 'yield an honest informational reason, never a false invalid'; verdict reasons come from a CLOSED list tagged blocking/informational and traced to source; the response is Ed25519-signed with provenance[] for offline auditability; and the open-world caveat is reinforced ('absence is not proof of the contrary'). The description actively reinforces the openWorldHint rather than contradicting either annotation.
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 long but front-loaded with the use case and each sentence carries functional content. Some tightening is possible — the IBAN documentation-sample paragraph restates the open-world point at length, and the regulatory-date sentence could be shorter — but the structure logically flows from when-to-use to what-returns to edge cases to cost.
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 complex tool with 4 parameters, live VIES lookups, verdict logic, signing, and payment, the description covers every decision-relevant aspect: trigger conditions, return contents, edge-case behavior (VIES outage, sample IBANs, missing iban), scope exclusions, cost, and auditability. Since an output schema exists, detailed return shape documentation is not required in the description, and the summary of the file contents is sufficient for correct invocation.
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 schema already documents all four parameters (baseline 3). The description adds value beyond the schema by linking iban presence to verdict behavior (iban_invalide vs iban_non_fourni), explaining the api_key/x_payment precedence ('the signed payment wins'), the $0.03 x402 cost, and the insufficient-balance error path. It does not fully compensate for every parameter nuance, but meaningfully extends 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 states a precise deliverable: 'ONE call returns the whole agent-side file' comprising legal identity, a LIVE VIES-checked intra-EU VAT number, an IBAN FORM check, and a deterministic pret_a_facturer verdict. It differentiates from siblings by declaring it is 'Not a payee verification' and scoping it to French counterparties, which separates it from prepare_european_invoice_file and verify_french_invoice.
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 trigger scenarios — 'onboarding, first invoice, first payment, or bank details that just changed' — plus a regulatory rationale with concrete mandate dates that makes the check mandatory. It also gives a clear when-not boundary ('Not a payee verification') and explains what happens when iban is omitted. The only minor gap is not naming a specific sibling tool as the alternative, but the when/when-not guidance is exceptionally explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prospect_french_companiesProspect French companiesARead-onlyInspect
French B2B prospecting and lead generation — build company lists over the full French registry (29.8M companies): filter by NAF activity code, departement/postal code, legal form, workforce, age, RGE certification, gender-equality index. Returns up to 100 active companies per page; each page is one x402 payment ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| naf | No | NAF/APE code or prefix, e.g. 62 or 62.01Z | |
| rge | No | true = active RGE environmental certification | |
| page | No | Page number (one payment per page) | |
| age_max | No | Maximum company age in years | |
| age_min | No | Minimum company age in years | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| egapro_min | No | Minimum gender-equality index (0-100) | |
| code_postal | No | Postal-code prefix (2-5 digits), exclusive with departement | |
| departement | No | French departement: 75, 2A, 971… | |
| effectif_max | No | Maximum workforce (number of employees) | |
| effectif_min | No | Minimum workforce (number of employees) | |
| forme_juridique | No | INSEE legal-category prefix, e.g. 54 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, and the description adds genuinely new behavioral context: results are limited to 100 active companies per page, each page incurs a fixed $0.02 x402 payment, and the search spans the full registry. The api_key parameter description further discloses the credits-vs-x402 fallback ('On insufficient balance the tool returns a credits error, not an x402 quote'). No contradiction with the read-only annotation.
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 sentences with zero filler: the core purpose is front-loaded, the filter list is compressed into a single clause, and the payment/pagination constraint occupies a single closing sentence. Every element earns its place.
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 13-parameter, 0-required tool with an output schema and safety annotations already present, the description covers purpose, scope, filters, pagination, and cost. Remaining gaps are minor: it never states what happens when called with zero filters (which openWorldHint implies is valid), and it never routes the agent to search_french_companies.
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 of 3 applies. The main description's filter enumeration (NAF, departement/postal, legal form, workforce, age, RGE, gender-equality index) mirrors what each schema property already documents without adding format, exclusivity, or precedence details — the code_postal/departement exclusivity is already stated in the schema. The description adds registry-scope context but no new parameter-level meaning.
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 states a specific outcome ('build company lists') over a defined scope ('full French registry (29.8M companies)') and enumerates the filter axes, making it clearly distinct from the per-company get_french_company_* siblings. However, it never explicitly names or contrasts the closest sibling, search_french_companies, so differentiation is implicit rather than explicit.
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?
There is no when-to-use or when-not-to-use guidance, and no alternative tool is named. This is a significant gap given 80+ siblings including the near-twin search_french_companies and the many single-company get_french_company_* tools. The only cue is the 'B2B prospecting and lead generation' framing, which implies a list-building use case but never states an exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renew_surveillance_watchRenew a company watchAInspect
Renew a watchlist for 30, 90 or 365 more days (possible until 7 days after expiry). The duration is a FREE choice: it need not match the original one, so a 30-day watch can be extended by a full year. The cibles parameter must repeat the exact watched targets — the quote is computed from it. The extension starts from the current expiry date and cannot push it beyond 400 days from now. Paid via x402, per target: $0.05 for 30 days, $0.135 for 90 days, $0.50 for 365 days. A full-size request quotes up to $50.00, above the $1.00 single-payment cap that x402 clients apply BY DEFAULT since @x402/core 2.23 (spendControls): raise spendControls.maxAmountPerPayment, or set spendControls: false, before signing — otherwise your own client rejects the quote without ever calling us.
| Name | Required | Description | Default |
|---|---|---|---|
| duree | No | Extension in days (default 30), independent of the original duration. Unit price per target: 30 = $0.05, 90 = $0.135, 365 = $0.50. | |
| cibles | Yes | The exact watched targets | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| surveillance_id | Yes | Watchlist capability token returned at creation (sw_…) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations by disclosing payment mechanics, per-target pricing, the x402 spendControls cap issue, the alternative api_key payment path, the 400-day limit, and the 'must repeat exact targets' constraint. It also explains failure behavior on insufficient prepaid credits, which is valuable behavioral context.
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 dense but every sentence earns its place, covering the core renewal action, constraints, pricing, and a critical client-side payment caveat. The most important information is front-loaded, with technical payment details following naturally.
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, complex payment rules, and an output schema already present, the description is exceptionally complete. It covers prerequisites, duration selection, expiry rules, pricing, payment alternatives, and a known failure mode, leaving no obvious gap for an agent to call it 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 baseline is 3, but the description adds meaning: cibles must repeat exact watched targets and drives the quote; duree is independent of the original duration; omitting x_payment returns a quote; api_key is an alternative payment method. This is materially richer than the schema alone.
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 states a specific action, 'Renew a watchlist,' with explicit durations (30, 90, or 365 days) and a clear extension rule. It differentiates this from sibling tools like create_surveillance_watch and stop_surveillance_watch by focusing on extension of an existing watch, including the post-expiry window.
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 gives clear operational context: renewal is for existing watches, possible until 7 days after expiry, and the extension starts from the current expiry date. It does not explicitly name alternatives or say when not to use it, but the context strongly implies this tool is for extending a watch rather than creating or stopping one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_sanctions_listsSanctions screening (AML)ARead-onlyInspect
Use BEFORE any payment, contract or onboarding involving the name. AML sanctions screening of a person or company name against 6 official sanctions lists (UN consolidated, EU FSF, US OFAC SDN, UK Sanctions List, French asset-freeze register, Swiss SECO list). Returns fuzzy matches with a 0-100 confidence score — never a bare yes/no. Each list is reported with its entry count, its publication date and what that date means (official upstream publication vs. Sirenic ingestion — OFAC publishes none). Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Person or company name to screen | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| birth_year | No | Optional birth year (YYYY) to refine person matches |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint/openWorldHint, the description discloses essential behavioral traits: results are fuzzy matches with a 0-100 confidence score ('never a bare yes/no'), each list reports entry count and publication date with the date's provenance meaning (upstream vs. Sirenic ingestion; OFAC publishes none), and the call costs $0.02 via x402. These are exactly the non-obvious behaviors an agent needs before invoking.
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 dense sentences with zero filler: trigger condition first, then scope, output behavior, then payment. Details like the OFAC no-publication quirk earn their place by preventing misinterpretation of the reported date field.
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 paid multi-list screening tool with four parameters, an output schema, and safety annotations, the description covers the operational essentials: when to use, what is checked, how results are shaped, and what it costs. The x402 two-step mechanics and credit-fallback behavior live in the schema descriptions, which is an acceptable division of labor.
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 the schema text for api_key and x_payment already explains the credit path, the two-step x402 quote flow, and the insufficient-balance error. The description adds only the $0.02 price tag, which enriches payment context but does not further document parameters. Baseline 3 is appropriate when the schema carries the heavy lifting.
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 names a specific verb ('screen') and resource ('person or company name against 6 official sanctions lists'), enumerating each list (UN consolidated, EU FSF, US OFAC SDN, UK, French, Swiss SECO). This precise scope cleanly separates it from compliance-adjacent siblings like check_french_regulator_alerts and search_eu_financial_authorisations.
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?
'Use BEFORE any payment, contract or onboarding involving the name' states the trigger condition explicitly and is the strongest kind of usage guidance. It does not name exclusions or route explicitly to an alternative sibling, though the six named lists make the boundary with regulator-alert tools reasonably inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_bodacc_announcementsSearch BODACC announcementsARead-onlyInspect
Search French BODACC legal announcements by CRITERIA instead of by company — the monitoring question no other Sirenic tool answers: WHICH companies entered insolvency proceedings in department 59 this week? Pick a family (collective/insolvency proceedings, deregistrations, sales and transfers, incorporations, accounts filings, conciliation, professional recovery, modifications, registrations, miscellaneous), a date window (depuis, optional jusqu_a) and optionally a French department code. Returns up to 100 announcements, newest first, each with SIREN, court, town, department and a STRUCTURED judgment (nature, date, family), plus tronque when there were more. The judgment's operative FREE TEXT is deliberately removed everywhere — it names court-appointed administrators with their address — so facts living only in that text (the date of cessation of payments, for one) are NOT here: follow url_bodacc, or get_french_company_alerts for a single company. Announcements about SOLE TRADERS are deliberately EXCLUDED (their name is personal data) and their count is returned in exclues_personnes_physiques, and records whose person type was unreadable are counted apart in exclues_type_indetermine (fail-closed guard). An announcement is not a verdict: the insolvency family also contains closures and cancellations — read the CURRENT state with get_french_company_alerts or get_french_company_failure_score. Paid via x402 ($0.03 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| depuis | Yes | Start of the publication window, YYYY-MM-DD, e.g. 2026-08-04 | |
| api_key | No | Optional 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. | |
| famille | Yes | Family code (upstream BODACC codes): dpc (accounts filings, the largest family), modification, creation, radiation, collective (insolvency proceedings), vente, immatriculation, divers, conciliation, retablissement_professionnel | |
| jusqu_a | No | Optional end of the window, YYYY-MM-DD | |
| x_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| departement | No | Optional French department code: 01-95 except 20, 2A, 2B, 971-978 (e.g. 59 for Nord) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint, and the description adds substantial behavioral detail beyond that: the 100-result cap with newest-first ordering, the `tronque` flag, deliberate removal of free-text judgment details, exclusion of sole traders with separate counts, and the fail-closed guard for unreadable person types. It also discloses the x402 payment mechanism. No contradiction 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?
The description is long and dense, but every sentence adds operational value: exclusions, limits, payment, alternative tools, and interpretive caveats. It is front-loaded with the core differentiator and the monitoring question, though a more structured layout could improve scannability.
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 the tool's complexity, the description covers the purpose, output shape, limits, exclusions, caveats, payment, and routing to alternatives. Since an output schema exists, the description does not need to enumerate return fields, and it provides everything an agent needs to select and call 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 coverage is 100%, so the baseline is 3, but the description adds real semantic value by mapping family codes to human-readable categories, explaining the date window with `depuis`/`jusqu_a`, and clarifying the department code scope. It also gives the payment-related parameters meaningful context about x402 vs api_key behavior.
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 states a specific verb and resource: "Search French BODACC legal announcements by CRITERIA instead of by company" and immediately frames the unique monitoring question it answers. It clearly distinguishes the tool from company-scoped siblings like get_french_company_legal_alerts and get_french_company_alerts.
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 explicitly explains when to use this tool — for criteria-based questions such as which companies entered insolvency in a department — and names alternatives for different needs, including get_french_company_alerts for a single company and get_french_company_failure_score for current state. It also warns that verdict-like interpretation is wrong because the family contains closures and cancellations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eu_financial_authorisationsSearch EU financial authorisations (ESMA, ECB, EIOPA)ARead-onlyInspect
Search EU financial authorisations in three official registers by name or LEI: ESMA Registers (~14,000 MiFID-regulated entities across all EU/EEA countries: status, home and host member states, competent authority, dates), the ECB list of supervised entities (supervision_bce: banking union, significant banks under direct ECB supervision and less significant ones under national authorities, group, remarks, monthly changes; absence is conclusive only for a LEI and never means unsupervised outside the banking union) the ESMA register of benchmark administrators (administrateurs_indices) the ESMA register of money market funds (fonds_monetaires: fund and manager LEI, type, domicile, authorisation status incl. Withdrawn, dates) and the EIOPA register of occupational pension institutions (iorp: national authority, registration dates incl. closed registrations, cross-border activity, managing entity; only 30% carry a LEI, so zero by LEI is never conclusive). A block listed in blocs_absents could not be read. Use to verify that a financial firm is actually regulated somewhere in the EU. Data freely available at the sources. Paid via x402 ($0.01 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Entity name or 20-character LEI. Unsupported characters are stripped, not rejected. | |
| pays | No | Optional ISO-3166 alpha-2 home-member-state filter (FR, DE...) | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only state readOnlyHint and openWorldHint, but the description goes far beyond them by exposing coverage limitations, failure modes, and payment behavior. It discloses that 'A block listed in `blocs_absents` could not be read', that IORP entries often lack a LEI, and that the tool is paid via x402 at a specific price. This gives the agent essential context about data reliability and operational constraints.
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 dense and not a model of brevity, but it is well front-loaded with the core purpose and then systematically adds register details, limitations, use case, and payment note. Every sentence contributes substantive information, though a bulleted structure would improve scannability.
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 multi-register search tool with an output schema already available, the description is exceptionally complete. It specifies which registers are searched, what fields are covered, how to interpret absent results, what blocks exist, and how payment works. The agent has enough context to set expectations and cite limitations 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% by the context signals, and the schema already describes q as 'Entity name or 20-character LEI', pays as an ISO filter, and both payment parameters. The description adds extra context like LEI-related caveats and the $0.01 fee, but most parameter meaning is already present in the schema, so the description does not carry a heavy burden here.
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 begins with a specific verb and resource: 'Search EU financial authorisations in three official registers by name or LEI' and then enumerates exactly which registers are covered (ESMA, ECB, EIOPA). This clearly distinguishes the tool from country-specific sibling tools like get_french_company_profile or search_european_companies. The minor mismatch in calling them 'three' while listing more register types does not obscure the core purpose.
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 an explicit use case: 'Use to verify that a financial firm is actually regulated somewhere in the EU.' It also gives important when-not-to-over-interpret guidance, such as 'absence is conclusive only for a LEI' and 'only 30% carry a LEI, so zero by LEI is never conclusive.' However, it does not name sibling alternatives or explicitly say when a different tool should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_european_companiesSearch European companies by nameARead-onlyInspect
European company search — company lookup by name across official European company registers in one unified schema (Norway, Estonia, Latvia, Lithuania, Cyprus, Romania, Croatia, Spain — BORME base, hoja key — local; Czechia, Slovakia, Finland, Poland, Switzerland live; Denmark/UK when enabled; worldwide GLEIF/LEI coverage). Each match carries a score_confiance (0-1 match confidence). Spanish matches return the hoja registral to use with get_spanish_company_acts. Paid via x402 ($0.003 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Company name (2 characters minimum once cleaned up). Unsupported characters are stripped, not rejected. | |
| pays | No | Optional ISO-3166 alpha-2 country filter, e.g. NO, EE, LV | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the annotations (readOnlyHint, openWorldHint): payment via x402 with a specific cost, per-match confidence score (score_confiance), Spanish hoja registral output for a downstream tool, and conditional availability of certain countries. All align with the read-only and open-world hints, with 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?
The description is dense but well-structured, front-loading the core purpose before listing countries, payment, and special output. Each clause adds information (coverage, confidence, hoja, payment). It is not overly verbose for the amount of detail, though it packs many facts into one paragraph.
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?
The description covers key aspects: country coverage, payment details, confidence score, and a follow-up tool. It also notes conditional availability (Denmark/UK). The output schema likely documents return structure, so not re-explaining it is acceptable. Missing elements like pagination or error handling are minor given the output schema exists.
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 input schema has 100% coverage, so all four parameters (q, pays, api_key, x_payment) are already described with types, constraints, and purposes. The description adds context about the payment mechanism (x402) and the output confidence score, but does not add meaning to the input parameters themselves beyond what the schema already provides.
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's purpose: 'European company search — company lookup by name across official European company registers in one unified schema.' It names the resource (European companies), the verb (search), and differentiates itself from country-specific siblings like search_french_companies by explicitly listing covered countries and emphasizing the unified 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?
The description implies when to use it (pan-European or cross-country search) and mentions a follow-up tool (get_spanish_company_acts) for Spanish matches. It also notes conditional availability for Denmark/UK. However, it does not explicitly state when not to use it (e.g., when a country-specific search would be more appropriate) or directly compare with alternatives like search_french_companies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_french_associationsSearch French associations by nameARead-onlyInspect
Use FIRST whenever a French association (loi 1901, nonprofit, charity, club) is mentioned by NAME without an identifier. Searches the Répertoire national des associations (RNA) by trigram similarity on the title, with optional postal-code, department and position filters. Returns up to 20 matches with score_confiance (0-1) and the RNA number to pass to get_french_association_profile or get_french_association_notices; siren when Sirene confirms it. Associations with AND without a SIREN; the legacy file (no declaration since 2009) is flagged fichier_source: import. Paid via x402 ($0.002 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Association title, or an RNA number (resolved directly). Unsupported characters are stripped, not rejected. | |
| api_key | No | Optional 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. | |
| position | No | Position filter; default all | |
| x_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| code_postal | No | Postal code or prefix (2-5 digits) of the registered office | |
| departement | No | Department: 01-95, 2A, 2B or 971-989 (ignored when code_postal is given) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and openWorldHint already present, the description adds valuable non-obvious behavior: fuzzy trigram matching, up to 20 matches, confidence score (0-1), SIREN included only when Sirene confirms it, legacy files flagged via fichier_source: import, and payment via x402 at $0.002. This significantly informs result interpretation and invocation expectations beyond the 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?
Every sentence earns its place: use-case, search behavior, output and downstream tools, SIREN/legacy handling, and cost. The opening (Use FIRST...) is immediately decision-relevant, and the overall structure is dense but not padded.
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 read-only search tool with an output schema, the description covers the trigger, filtering options, result limit, scoring, downstream usage, and payment. Edge cases like missing SIREN and legacy filings are addressed, so an agent has what it needs to decide and invoke 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. The description adds meaning for the q parameter by noting 'trigram similarity on the title', which is not in the schema's description. It also summarizes the optional filters (postal-code, department, position) but does not add detail beyond the schema for those params.
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 'Use FIRST whenever a French association (loi 1901, nonprofit, charity, club) is mentioned by NAME without an identifier' and goes on to specify the RNA registry, trigram similarity, and result contents. It also distinguishes itself from the get_french_association_profile/get_french_association_notices siblings by naming them as downstream consumers of the RNA number returned by this tool.
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 gives an explicit condition for when to use the tool ('mentioned by NAME without an identifier'), which implies the alternative when an identifier is available. It also names the downstream functions that accept the RNA number, providing a clear routing path for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_french_companiesSearch French companies by nameARead-onlyInspect
Use FIRST whenever a French company is mentioned by NAME without an identifier. French company search and company lookup by name or SIREN in the official French company registry (INSEE Sirene / INPI RNE data). Returns the top 10 matches, each with a score_confiance (0-1 match confidence, helps pick among homonyms). etages_abandonnes is always present: an empty array means the top 10 is complete; a non-empty one (with resultats_partiels: true) means the local index was degraded and the real-time fallback failed, so the list is partial — retry in a few seconds. If aucune_correspondance_fiable is true, no result resembles the name you asked for (best confidence < 0.5): do NOT treat the top hit as the company — check the spelling or retry. Paid via x402 ($0.002 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Company name, or a French identifier (SIREN, SIRET, VAT number) — spaced or labelled ("SIREN : 552 032 534") is fine, it resolves directly. Unsupported characters are stripped, not rejected. | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, the description explains match confidence (score_confiance), partial-result degradation (etages_abandonnes), no-match behavior (aucune_correspondance_fiable), and the x402 payment model. This gives an agent actionable expectations about edge cases, fallback behavior, and costs.
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?
Every sentence in the description earns its place: the 'FIRST' directive, the registry scope, result count and confidence, partial-result degradation, no-match guardrail, and payment mechanism are all operationally relevant. It is dense but well-structured, with usage guidance front-loaded.
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?
The description is unusually complete for a search tool: it covers expected match count, homonym handling, degraded-index fallback, no-match interpretation, and the payment prerequisite. With an output schema present, return values do not need description-level detail, and this description exceeds what is necessary.
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 the input schema already provides detailed descriptions for q, api_key, and x_payment. The tool description adds no further parameter-level meaning beyond confirming q accepts names or SIRENs, so the baseline of 3 is appropriate.
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 opens with 'Use FIRST whenever a French company is mentioned by NAME without an identifier' and then clearly states it searches the official French company registry (INSEE Sirene / INPI RNE data) by name or SIREN. This gives a specific verb, resource, and scope, and distinguishes it from broader tools like search_european_companies or get_french_company_profile.
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?
There is an explicit trigger condition: 'Use FIRST whenever a French company is mentioned by NAME without an identifier.' However, it does not explicitly name alternatives or state when to use sibling tools like detect_company_identifiers or get_french_company_profile, and the later mention of SIREN lookup slightly muddies the 'without an identifier' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_french_company_directorsSearch French company directorsARead-onlyInspect
Reverse search for company directors and officers in France — a people search by surname: list the French companies where a person of a given surname holds (or held) an office, with the company SIREN, name and the person's role — for due diligence and network mapping. Person data limited to surname, first names, role and birth year. Homonyms are not disambiguated; common names are capped. Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| nom | Yes | Director surname to search. Unsupported characters are stripped, not rejected. | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the readOnlyHint and openWorldHint annotations: homonyms are not disambiguated, common names are capped, person data is limited to surname, first names, role, and birth year, and results cover current and past offices. It also discloses the payment cost explicitly, giving the agent important operational context.
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 dense but tightly structured, front-loading the core action ('Reverse search') and then delivering scope, output fields, use case, limitations, and pricing in three sentences. No sentence is wasted.
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 and the schema documents the payment-related parameters, the description covers all necessary operational aspects: purpose, scope, limitations, data fields, and payment model. An agent has enough information to select and invoke 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?
The schema already provides full descriptions for all three parameters (100% coverage), so the baseline is 3. The description reinforces that 'nom' is a surname and adds behavioral context like common-name caps, but it does not add parameter-specific syntax or formatting details 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 names a specific verb ('reverse search') and resource ('company directors and officers in France'), and clearly states the output: companies where a person of a given surname holds or held an office, including SIREN, name, and role. It also differentiates itself from sibling tools by framing itself as a people search rather than a company-centric search.
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 gives clear usage context: 'for due diligence and network mapping' and 'a people search by surname.' It implies when to use this tool over company-focused siblings, but it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_surveillance_watchStop a company watchADestructiveIdempotentInspect
Stop a watchlist and purge its data immediately (free).
| Name | Required | Description | Default |
|---|---|---|---|
| surveillance_id | Yes | Watchlist capability token returned at creation (sw_…) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly discloses that this tool purges data immediately, which aligns with the destructiveHint=true annotation and adds concrete detail beyond it. It also communicates that the action is free and immediate, giving the agent useful behavioral expectations.
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 a single, front-loaded sentence with no filler. It packs the action, the destructive consequence, the timing, and the cost into a compact and scannable statement.
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 one-parameter tool with a rich input schema, explicit annotations, and an output schema, the description covers the essential behavior needed to invoke it correctly. Nothing critical is missing.
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 the parameter description already explains that surveillance_id is the watchlist capability token returned at creation (sw_…). The tool description adds no further parameter detail, so the baseline score of 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?
The description states a clear action ('Stop a watchlist') and its consequence ('purge its data immediately'), plus a notable attribute ('free'). This distinguishes it from related sibling tools like create_surveillance_watch, renew_surveillance_watch, and get_surveillance_watch.
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 makes the intended use obvious: call this when you want to stop a watch and delete associated data. It does not explicitly list when not to use it or contrast with alternatives, but the context is clear enough for an agent to select it over create/renew/get surveillance tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_company_namesSuggest French company names (free)ARead-onlyInspect
FREE. French company name autocomplete: type the beginning of a company name and get up to 5 matches with SIREN, city, postcode, NAF code and active/ceased status. Use it FIRST to turn a name into the SIREN that every other Sirenic tool takes as input — no account, no API key, no payment. Source: the official INSEE Sirene register (open data), companies and sole traders whose record is publicly diffusible. Matches the START of the name, then whole words; no typo tolerance and no match-confidence score — for those, plus the full profile, use search_french_companies ($0.002) and get_french_company_profile ($0.005).
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Start of the company name (3 characters minimum once cleaned up), or a 9-digit SIREN — labelled ("SIREN : 552 032 534") is fine. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations cover safety, and the description adds substantial behavioral context beyond them: FREE and no account/API key/payment (auth requirements), the official INSEE Sirene open-data source, the publicly-diffusible population restriction, the result cap of 5, and the matching algorithm (START of name then whole words, no typo tolerance). No contradiction 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?
Four sentences, each earning its place: cost/access, core function, usage sequencing, source and population, matching behavior, and alternative routing with prices. The description is front-loaded with the purpose before the caveats and alternatives.
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?
Complete for a single-parameter tool with an output schema and annotations. It covers purpose, input format, key output fields, result limits, cost, authentication needs, data provenance, population scope, matching limitations, and differentiated alternatives. Nothing an agent needs to invoke it correctly is missing.
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% — the schema already documents q thoroughly (name prefix, 3-char minimum, SIREN alternative, labelled format). The description adds value by explaining the runtime semantics of q (matches START of name then whole words, no typo tolerance, no confidence score), which clarifies what the input actually triggers.
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 — 'French company name autocomplete' — with precise output details (up to 5 matches with SIREN, city, postcode, NAF code, active/ceased status). It also distinguishes itself from siblings by naming search_french_companies and get_french_company_profile as the alternatives for typo tolerance and full profiles.
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 frames the tool as the FIRST step in a pipeline: 'Use it FIRST to turn a name into the SIREN that every other Sirenic tool takes as input.' It also gives exclusion conditions — no typo tolerance and no confidence score — and routes the agent to specific priced alternatives when those are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_eu_vat_numberValidate EU VAT number (VIES)ARead-onlyInspect
VAT number check against VIES — use when you only need the tax half of verifying a supplier before payment: confirm that a counterparty's intra-community VAT number really exists before invoicing it, applying the reverse charge or paying it. It is a required check under the French e-invoicing mandate of 1 September 2026 and under the Belgian B2B mandate in force since 1 January 2026. Validates any EU intra-community VAT number against the official VIES service (all member states) and returns valid / invalid / unavailable, the registered name and address when the member state publishes them, and the VIES consultation identifier as proof. A member-state outage is reported as unavailable, never as a false invalid. The response is Ed25519-signed and carries provenance[]: the VIES entry with the date the number was really consulted, never a fabricated one. Paid via x402 ($0.003 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. | |
| vat_number | Yes | Full VAT number with its 2-letter country prefix and no spaces, e.g. FR27552032534 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint, so the description carries the burden. It discloses outage behavior ('reported as unavailable, never as a false invalid'), the Ed25519-signed response with provenance[], the VIES consultation identifier, and the payment mechanism. This is rich behavioral context beyond what annotations provide.
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?
Every sentence earns its place: purpose, usage trigger, regulatory relevance, behavior, outage handling, provenance, and pricing. It is front-loaded with the core check and all added detail is operational 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?
Given the output schema exists and the input schema is fully documented, the description covers everything else an agent needs: when to call it, what behavioral and failure semantics to expect, how payment works, and what proof is returned. Nothing critical is missing.
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 all three parameters with patterns and examples. The description adds payment context but no additional per-parameter meaning, which matches the baseline of 3 when the schema does the heavy lifting.
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 opens with a specific verb and resource: 'VAT number check against VIES'. It also states the exact business purpose — confirming an intra-community VAT number before invoicing, reverse charge, or payment — which distinguishes it clearly from the many company-profile and document tools in the sibling list.
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 gives clear context for when to use the tool: 'use when you only need the tax half of verifying a supplier before payment' and cites specific regulatory mandates. It implies when not to use it, but does not explicitly name an alternative tool, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_french_invoiceVerify a French invoiceARead-onlyInspect
Invoice verification for France — use when you HOLD an invoice (or its extracted fields) and must check that the identifiers it displays belong together before paying it. Cross-checks in ONE call: the SIREN against the official registry (existence and active status, live), the VAT number printed on the invoice against the one computed from the SIREN (the French key is deterministic) AND live against VIES, and the IBAN's ISO 13616 form + key digits with the bank identified. Returns a deterministic verdict coherent/incoherent/inverifiable with closed-list reasons traced to their source — flags a VAT number that belongs to ANOTHER company, a ceased supplier, or a key-invalid IBAN. A VIES outage yields inverifiable, never a false invalid. NOT a payee verification: the bank leg checks form only — a valid-but-swapped IBAN is not detectable, and non_verifie says so next to the verdict. At least one of tva/iban is required (a SIREN alone is a profile, not a cross-check). Paid via x402 ($0.02 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| tva | No | VAT number printed on the invoice, e.g. FR27552032534 — cross-checked against the SIREN and live against VIES. At least one of tva/iban is required | |
| iban | No | IBAN printed on the invoice (spaces tolerated) — form + key + bank identification, never a holder-name check. At least one of tva/iban is required | |
| siren | Yes | 9-digit SIREN printed on the invoice (digits only) | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=true and openWorldHint=true, so the description carries the real burden — and it delivers: live registry/VIES checks, deterministic verdict with closed-list sourced reasons, graceful degradation ('a VIES outage yields inverifiable, never a false invalid'), a documented false-negative limitation (form-only bank check), and payment behavior (x402 cost, api_key fallback, credits error). No contradiction with either annotation.
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?
Every sentence is load-bearing — purpose, three checks, verdict semantics, exclusion, input constraint, payment — and the purpose is front-loaded. It loses a point only because the entire payload is one dense unbroken block; light structuring (a break between verification semantics, exclusions, and payment) would improve scanability for an agent.
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 5-parameter, paid, multi-leg verification tool with an output schema, the description covers every operational need: when to call it, what each leg checks, verdict vocabulary and failure modes, known blind spots, required parameter combinations, and cost/payment path. Nothing an agent needs to decide on calling or interpreting the call correctly is missing.
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?
Despite 100% schema coverage, the description adds genuine cross-parameter semantics the schema structure cannot express: the 'at least one of tva/iban required' constraint (qualifying the schema's bare 'siren required'), the deterministic relationship between tva and siren (French key), and the interaction between api_key and x_payment (signed payment wins). This goes well beyond the baseline 3 for covered schemas.
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+resource: 'verify a French invoice' via a cross-check that identifiers belong together before paying. It enumerates the three verification legs (SIREN registry, VAT vs computed key + VIES, IBAN form/key/bank) which immediately distinguishes it from retrieval siblings like get_french_company_profile and single-purpose validators like verify_iban_bank or validate_eu_vat_number.
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 an explicit when-to-use ('when you HOLD an invoice... must check that the identifiers it displays belong together before paying it') and a clear when-not ('NOT a payee verification... valid-but-swapped IBAN is not detectable'). It stops short of a 5 because it never names the sibling alternatives (verify_iban_bank, validate_eu_vat_number) that should be used for standalone single-checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_iban_bankVerify IBAN and bank (SEPA)ARead-onlyInspect
IBAN verification and bank validation for SEPA — use when you are about to pay a NEW or CHANGED IBAN, or when onboarding a supplier's bank details, and want the cheapest check of the supplier before payment. Runs a FORM check on the IBAN (ISO 13616 structure + mod-97 key), identifies the bank from FREE official registers (France: name+LEI+SIREN via ACPR/REGAFI; Belgium, Austria, Netherlands: name+BIC; Germany when the Bundesbank file is loaded, incl. LEI where available; French banks get their BIC via the GLEIF/SWIFT BIC-to-LEI mapping). Explicitly NOT a payee verification — the account holder's name is never checked and the account's existence is not tested (verification_titulaire: non_disponible): a well-formed IBAN at an identified bank is no proof that the account belongs to your supplier. The answer says this in machine-readable form next to valide: nature_du_controle (forme | forme_et_registres), non_verifie [account existence, holder name] and exemple_de_documentation — true for IBANs on a published list of known documentation samples, which pass every check; the account's existence is not tested; false is not proof of the contrary. The response is Ed25519-signed and carries provenance[] — one entry per block served, naming the official register actually consulted, its licence and its as_of date. For the full invoicing verdict on a French counterparty, call prepare_french_invoice_file instead. Paid via x402 ($0.005 in USDC or EURC).
| Name | Required | Description | Default |
|---|---|---|---|
| iban | Yes | IBAN of the account to check, any ISO 13616 country (spaces and dashes tolerated); bank identification is limited to the registers listed in the tool description | |
| api_key | No | Optional 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_payment | No | Optional signed x402 PAYMENT-SIGNATURE header value. Omit to receive the payment quote. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | How to settle the quote, present when payment_required is true. |
| quote | No | The 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`. |
| resultat | No | The 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_required | Yes | True 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`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and openWorld hints, the description discloses the exact verification depth (ISO 13616 structure + mod-97), the registers consulted, the absence of payee/account verification, the Ed25519-signed response with provenance, and the x402 payment cost. No contradictions with the 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?
The description is long and dense, but almost every clause carries essential selection or invocation information. It is front-loaded with the core use case and keeps related details together; some repetition around account-existence non-verification could be trimmed, but the density is justified for a paid financial-checking tool.
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 paid tool with subtle limitations, the description is complete: it covers when to use it, what it verifies, what it cannot verify, how to interpret valide and exemple_de_documentation, response provenance/signing, pricing, payment mechanics, and the relevant sibling alternative. The output schema handles structured return details.
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 input schema already covers all parameters at 100%, so the baseline is 3. The description adds meaningful context beyond the schema: the IBAN validation formula, which countries/registers are covered, and the payment/credit behavior of api_key and x_payment.
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 states a precise verb and resource: IBAN form validation plus bank identification from official registers, for SEPA payments. It also distinguishes itself from payee verification and names prepare_french_invoice_file as the alternative for a full French invoicing verdict, so an agent can select it without 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?
It explicitly tells the agent when to use the tool: before paying a NEW or CHANGED IBAN, or when onboarding a supplier's bank details, and when the cheapest pre-payment check is desired. It also clearly states what the tool does NOT do (holder name verification, account existence testing) and routes to a sibling for a broader invoicing verdict.
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
- Removed
get_latvian_company_beneficial_owners
1 tool update
- Added
get_irish_company_insolvency
1 tool update
- Added
get_portuguese_company_public_procurement
1 tool update
- Added
get_polish_company_public_procurement
1 tool update
- Added
get_spanish_company_public_procurement
1 tool update
- Added
get_romanian_company_accounts
2 tool updates
- Added
get_romanian_company_insolvency - Added
get_romanian_company_officers
1 tool update
- Added
get_cypriot_company_officers
2 tool updates
- Added
get_swiss_company_events - Added
get_swiss_company_insolvency
1 tool update
- Added
get_finnish_company_events
5 tool updates
- Added
get_estonian_company_officers - Added
get_estonian_company_shareholders - Changed
get_european_company_eu_procurement1 field changed- changed
Input schema / properties / pays / descriptionPrevious 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"
- Added
get_lithuanian_company_accounts - Added
get_lithuanian_company_insolvency
3 tool updates
- Added
get_croatian_company_accounts - Added
get_croatian_company_events - Added
get_croatian_company_insolvency
1 tool update
- Added
get_european_company_eu_procurement
1 tool update
- Added
get_uk_company_public_procurement
1 tool update
- Added
get_latvian_company_public_procurement
1 tool update
- Added
get_french_company_eu_funding
1 tool update
- Added
get_uk_company_gazette_notices
Related MCP Connectors
European business verification for AI agents: registry, VAT, sanctions, IBAN. Pay-per-call x402.
Pay-per-call data APIs for AI agents: business, compliance, procurement, VAT and IBAN via x402.
European business data — French company check, EU VAT validation, legal search.
Search French companies: financials, directors, ownership, M&A and insolvency events.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to search and retrieve detailed profiles of 25 million French companies from the official government registry, including directors, activity codes, and establishment data, without requiring an API key.-

Sirenicofficial
AlicenseNot gradedqualityBmaintenanceProvides official French and European company data (INSEE Sirene, INPI RNE) for AI agents via pay-per-call USDC on Base, including search, profiles, KYB, sanctions screening, financials, and more.MIT- AlicenseAqualityCmaintenanceStructured business intelligence for AI agents. 5.5M verified entities across 34 countries, 40.3M BORME mercantile acts, EU VAT validation, GLEIF, healthcare registries. 20 tools.61MIT
- AlicenseNot gradedqualityBmaintenanceCompany data for Spain, France, the UK, Ireland and Poland — registry, KYB and sanctions.46 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.