Skip to main content
Glama

Look up many companies by CUI

lookup_companies
Read-onlyIdempotent

Look up many Romanian companies by CUI in one call (up to 100): one result per input, in input order, each with found true/false and the company record. Each row is one lookup; rows past today's allowance come back not_processed (partial: true, remaining: rows to resend after the reset). fields or compact trims each record.

Input Schema

NameRequiredDescriptionDefault
cuisYesUp to 100 CUIs, as a list or one comma-separated string ('RO', spaces and leading zeros accepted, as in lookup_business).
fieldsNoOptional: keep only these company fields in each row, comma-separated (companyName,cui,county,risk; dotted paths such as risk.level work). Without it the full record is returned.
compactNoOptional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level and what it did not check, phone, website, latest revenue and headcount, record url).

Output Schema

NameRequiredDescriptionDefault
asOfNoWhat to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source.
errorNoSet only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted.
foundNoRows that matched a company.
totalNoNumber of input rows.
errorsNoRows that are input errors (empty, not a CUI, wrong control digit).
fieldsNoThe company fields kept when fields or compact trimmed the rows.
sourceNoData source: onrc (registry) or mfp (Ministry of Finance filings).
messageNoA sentence for the caller.
partialNotrue when today's allowance ran out partway: the first processed rows were answered, the rest have status not_processed (not run, not counted).
resultsNoPer input: input, cui, found, and company (the record) or error/reason; status not_processed for a row today's allowance did not cover.
meteringNoWhat the batch cost: rows, counted, notCounted (input-error rows and rows not processed are not counted), notProcessed (when partial) and the rule.
notFoundNoWell-formed CUIs not in the snapshot.
warningsNoNotes on how the request was read (a clamped limit, a widened CAEN code, an ignored field).
processedNoRows answered, from the first one (input-error rows included).
remainingNoRows not processed (the last ones): send them again after the reset. 0 when the whole batch ran.
dailyLimitNoWhen partial: the daily-limit notice in the refusal vocabulary (error daily_limit_reached, message, limit, used, remaining allowance, resets_at, requested, processed, plan, get_a_key, pricing, docs, upgrade with a key).
attributionNoThe credit line to keep when redistributing the data (CC BY 4.0).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / results / items / properties / company / description
      Previous value: -"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address (a sole trader's PFA/II/IF locality only in an answer listing several companies, with addressScope: locality), county, city, website, phone as declared (+ phoneSource: ANAF, declared by the taxpayer; phoneStatus: valid, corrected with phoneSuggestion, or unverified: check before calling), caenActivities [{code, activity (RO), activityEn}], directors, representatives [{name, role}], status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the company's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."New value: +"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address (a sole trader's PFA/II/IF locality only in an answer listing several companies, with addressScope: locality), county, city, website, phone as declared (+ phoneSource: ANAF, declared by the taxpayer; phoneStatus: valid, corrected with phoneSuggestion, or unverified: check before calling), caenActivities [{code, activity (RO), activityEn}], directors, representatives [{name, role}], status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, cashVat, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the company's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."
  2. Changed3 schema fields changed
    • changedOutput schema / properties / found / description
      Previous value: -"Rows that matched a firm."New value: +"Rows that matched a company."
    • changedOutput schema / properties / results / items / properties / company / description
      Previous value: -"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address (a sole trader's PFA/II/IF locality only in an answer listing several firms, with addressScope: locality), county, city, website, phone (+ phoneSource: ANAF, declared by the taxpayer), caenActivities [{code, activity (RO), activityEn}], directors, representatives [{name, role}], status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the firm's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."New value: +"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address (a sole trader's PFA/II/IF locality only in an answer listing several companies, with addressScope: locality), county, city, website, phone as declared (+ phoneSource: ANAF, declared by the taxpayer; phoneStatus: valid, corrected with phoneSuggestion, or unverified: check before calling), caenActivities [{code, activity (RO), activityEn}], directors, representatives [{name, role}], status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the company's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."
    • changedOutput schema / properties / results / items / properties / found / description
      Previous value: -"Whether a firm has this CUI."New value: +"Whether a company has this CUI."
  3. Changed7 schema fields changed
    • addedOutput schema / properties / dailyLimit
      Added value: +{
      +  "description": "When partial: the daily-limit notice in the refusal vocabulary (error daily_limit_reached, message, limit, used, remaining allowance, resets_at, requested, processed, plan, get_a_key, pricing, docs, upgrade with a key).",
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / metering / description
      Previous value: -"What the batch cost: rows, counted, notCounted (input-error rows are not counted) and the rule."New value: +"What the batch cost: rows, counted, notCounted (input-error rows and rows not processed are not counted), notProcessed (when partial) and the rule."
    • addedOutput schema / properties / partial
      Added value: +{
      +  "description": "true when today's allowance ran out partway: the first processed rows were answered, the rest have status not_processed (not run, not counted).",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / processed
      Added value: +{
      +  "description": "Rows answered, from the first one (input-error rows included).",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / remaining
      Added value: +{
      +  "description": "Rows not processed (the last ones): send them again after the reset. 0 when the whole batch ran.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / results / description
      Previous value: -"Per input: input, cui, found, and company (the record) or error/reason."New value: +"Per input: input, cui, found, and company (the record) or error/reason; status not_processed for a row today's allowance did not cover."
    • addedOutput schema / properties / results / items / properties / status
      Added value: +{
      +  "description": "not_processed (reason daily_limit_reached) for a row not run; absent otherwise.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  4. Changed1 schema field changed
    • changedOutput schema / properties / results / items / properties / company / description
      Previous value: -"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address, county, city, website, phone, caenActivities [{code, activity (RO), activityEn}], directors, representatives [{name, role}], status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the firm's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."New value: +"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address (a sole trader's PFA/II/IF locality only in an answer listing several firms, with addressScope: locality), county, city, website, phone (+ phoneSource: ANAF, declared by the taxpayer), caenActivities [{code, activity (RO), activityEn}], directors, representatives [{name, role}], status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the firm's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."
  5. Changed1 schema field changed
    • changedOutput schema / properties / results / items / properties / company / description
      Previous value: -"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address, county, city, website, phone, caenActivities [{code, activity}], directors, status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the firm's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."New value: +"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address, county, city, website, phone, caenActivities [{code, activity (RO), activityEn}], directors, representatives [{name, role}], status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the firm's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."
  6. Changed1 schema field changed
    • changedInput schema / properties / compact / description
      Previous value: -"Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level, phone, website, latest revenue and headcount, record url)."New value: +"Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level and what it did not check, phone, website, latest revenue and headcount, record url)."
  7. Changed2 schema fields changed
    • changedInput schema / properties / compact / description
      Previous value: -"Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level, phone, website, latest revenue and headcount)."New value: +"Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level, phone, website, latest revenue and headcount, record url)."
    • changedOutput schema / properties / results / items / properties / company / description
      Previous value: -"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address, county, city, website, phone, caenActivities [{code, activity}], directors, status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, and score/match on name searches. With fields or compact, only the requested keys."New value: +"A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address, county, city, website, phone, caenActivities [{code, activity}], directors, status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, url (the firm's public record page to share with the user; null for sole traders and other natural persons), and score/match on name searches. With fields or compact, only the requested keys (compact keeps url)."
  8. Changed2 schema fields changed
    • addedInput schema / properties / cuis / description
      Added value: +"Up to 100 CUIs, as a list or one comma-separated string ('RO', spaces and leading zeros accepted, as in lookup_business)."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "One result per input CUI, in input order.",
      +  "properties": {
      +    "asOf": {
      +      "description": "What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source.",
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "attribution": {
      +      "description": "The credit line to keep when redistributing the data (CC BY 4.0).",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "error": {
      +      "description": "Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "errors": {
      +      "description": "Rows that are input errors (empty, not a CUI, wrong control digit).",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "fields": {
      +      "description": "The company fields kept when fields or compact trimmed the rows.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "found": {
      +      "description": "Rows that matched a firm.",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "message": {
      +      "description": "A sentence for the caller.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "metering": {
      +      "description": "What the batch cost: rows, counted, notCounted (input-error rows are not counted) and the rule.",
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "notFound": {
      +      "description": "Well-formed CUIs not in the snapshot.",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "results": {
      +      "description": "Per input: input, cui, found, and company (the record) or error/reason.",
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "One input row's answer.",
      +        "properties": {
      +          "company": {
      +            "additionalProperties": true,
      +            "description": "A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address, county, city, website, phone, caenActivities [{code, activity}], directors, status [{code, name}], latestFinancials {year, revenue, netResult, employees; RON}, anaf {mainCaen, vatPayer, eFactura, inactive}, risk {level, label, reasons, isLead}, source, asOf, and score/match on name searches. With fields or compact, only the requested keys.",
      +            "type": "object"
      +          },
      +          "cui": {
      +            "description": "The normalised CUI.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "found": {
      +            "description": "Whether a firm has this CUI.",
      +            "type": [
      +              "boolean",
      +              "null"
      +            ]
      +          },
      +          "input": {
      +            "description": "The value as given.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "source": {
      +      "description": "Data source: onrc (registry) or mfp (Ministry of Finance filings).",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "total": {
      +      "description": "Number of input rows.",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "warnings": {
      +      "description": "Notes on how the request was read (a clamped limit, a widened CAEN code, an ignored field).",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  9. Added

TDQS

A4.3/5.0
Behavior5/5

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

Adds a lot beyond the annotations: a hard 100-row cap, a one-result-per-input guarantee in input order, found true/false per row, and the daily-allowance behavior where overflow rows come back not_processed with partial:true and a remaining count. Annotations already cover read-only/idempotent safety, so this quota and result-shape disclosure is pure added value.

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

Conciseness4/5

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

Roughly three sentences, front-loaded with the batch limit and result ordering, and every clause carries information. The parenthetical quota clause ('partial: true, remaining: rows to resend after the reset') is slightly telegraphic, but it is compact rather than padded.

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

Completeness4/5

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

For a batched read tool with an output schema and full annotation coverage, the description covers limits, ordering, per-row status, and quota behavior. What is missing is minor: behavior on invalid or duplicated CUIs and whether the allowance is per-call or global.

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

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are already documented; the description nonetheless explains that fields and compact trim each record, clarifying the interaction of these two optional parameters with the returned row shape rather than just restating them.

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

Purpose5/5

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

States a specific verb (look up), resource (Romanian companies by CUI), and scope (many, up to 100, batched in one call). The batch framing plus the per-input/per-order guarantee clearly separates it from single-company tools like lookup_business or enrich_company.

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

Usage Guidelines3/5

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

The batch nature ('in one call (up to 100)') and the 'rows to resend after the reset' note imply when this is the right tool and how to handle quota exhaustion, but no sibling is named and no explicit when-not-to-use case is given (e.g. use lookup_business for a single CUI).

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources