Skip to main content
Glama

Companero – Romanian Company Data

Server Details

Official MCP server for Companero, the Romanian company data platform. Search 2.7M Romanian companies by name, CUI, county, CAEN and financials; get profiles, balance sheets, financial health, ANAF tax debts, legal representatives, company networks, SEAP public contracts, market stats, B2B prospect lists, portfolio screening and due diligence. Official ONRC, ANAF, Ministry of Finance and SEAP data. Free tools without an account; OAuth for premium.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

A4/5.0

Scored across 19 tools

Disambiguation3/5

Many tools have clear purposes (e.g., get_balance_sheets vs get_financial_health), but there is significant overlap between get_company, get_financial_health, get_balance_sheets, and due_diligence, which all provide financial data about a company. Also, get_company_competitors and get_cpv_market both deal with procurement markets, and search_cities/search_counties could be confused with search_companies, though descriptions help clarify the distinction.

Naming Consistency3/5

Most tools follow a verb_noun pattern (e.g., get_company, search_companies, list_industries), but there is inconsistency between search_* and get_* for similar operations (search_companies vs get_company, search_persons vs get_person). The naming is readable but not perfectly consistent; mixing 'search' and 'get' for related queries is a minor deviation.

Tool Count4/5

With 19 tools, the count is slightly high but acceptable given the diverse data sources (financials, procurement, people, geography). The scope covers a comprehensive business intelligence platform, but a few tools could be consolidated (e.g., search_cities and search_counties could be combined into a single 'list_regions' tool). Overall, the count is reasonable for the apparent domain breadth.

Completeness4/5

The tool surface covers the main workflows: company profiles, financials, debts, procurement, people, and market statistics. There are minor gaps such as missing direct integration for company filings (e.g., Monitorul Oficial is excluded from due_diligence), and no tool for creating or managing custom lists or profiles. However, core CRUD-type operations are well covered for data retrieval, and the presence of get_screening complements screen_companies, so agents can complete most tasks without dead ends.

Available Tools

19 tools
due_diligenceAInspect

Keywords: due diligence, raport, audit, verificare firmă, KYC, risc, bonitate, analiză, profil financiar, situație juridică, datorii ANAF, insolvență, administratori, asociați, reprezentanți legali, contracte publice, SEAP, exposure cross-company, beneficial owner, AI report, business intelligence, company report, risk assessment, romanian company audit.

Generează o «Analiză firmă» pentru o firmă românească, dat CUI-ul (Cod Unic de Înregistrare). Este o EVALUARE ORIENTATIVĂ pe baza datelor publice (ONRC, ANAF, SEAP) — NU un verdict, o recomandare sau un raport de bonitate. Raportul este produs de un agent AI care agregează:

  • profilul ONRC (nume, județ, oraș, CAEN principal, dată înregistrare, stare juridică, număr de ordine în registrul comerțului, plătitor de TVA)

  • bilanțuri ANAF ultimii 5 ani (cifră de afaceri, profit/pierdere, active, datorii, capital social, angajați declarați, capital propriu) plus cifrele derivate calculate de noi (marje, grad de îndatorare, variații anuale) — modelul NU calculează, primește rezultatele

  • indicatorii de sănătate financiară (aceiași cu get_financial_health)

  • reprezentanți legali activi, cu rolurile grupate și „exposure cross-company" (în câte alte firme apare aceeași persoană)

  • datorii ANAF curente (trimestrul cel mai recent importat), cu distincția explicită între „are datorii", „confirmat FĂRĂ datorii la trimestrul X" și „încă nu avem trimestru importat"

  • contracte publice SEAP ca furnizor la stat (valorile de acord-cadru raportate SEPARAT de contractele ordinare) plus „dependența de stat" (valoare contracte ÷ cifră de afaceri, serie anuală)

Monitorul Oficial NU intră în acest raport; insolvența, dizolvarea, lichidarea și radierea se citesc din starea juridică de la registru.

Un agent AI produce, pe baza acestor date, un raport JSON structurat cu:

  • oneLineSummary — rezumat scurt factual (max 200 caractere)

  • executiveSummary — 3-5 propoziții, situație generală

  • financialOverview, governanceOverview, legalOverview — câte un paragraf per dimensiune

  • riskFlags[] — listă de semnale de risc cu severitate (critical/high/ medium/informational), categorie (financial/legal/governance/tax/ operational/reputational), titlu, descriere, și evidence[] — citate concrete din dossier (NU fapte inventate — agentul este forțat să trimită la câmpul-sursă)

  • confidence — încrederea agentului în raport (0..1)

Când îl folosești:

  • "Vreau un raport de due diligence pentru firma cu CUI X"

  • "Verifică bonitatea firmei Y"

  • "Cât de riscantă e firma cu CUI Z?"

  • "Pot să fac afaceri cu firma X? Sunt vreun semnal de risc?"

  • "Generează un raport pentru această companie / acest CUI"

  • "Audit / KYC pe firma X"

Cost & caching: 300 credite (15 RON) per raport PER versiune-de-date. Abonamentul Pro include O analiză pe lună calendaristică — prima rulare nouă a lunii nu consumă credite; următoarele se taxează normal. Dacă tu (sau oricine altcineva) ai cerut deja raportul pe acest CUI și nu s-au schimbat datele subordonate (bilanț nou, schimbare administrator, contract public nou, datorii ANAF noi), apelul folosește un cache existent și e gratuit oricum — un raport din cache NU consumă analiza inclusă a lunii. În _meta primești chargedThisRequest (bool) ca să știi dacă creditele s-au consumat sau nu, și bannerNewerAvailable (bool) care semnalizează că datele sursă s-au schimbat faţă de versiunea pentru care utilizatorul a plătit anterior.

Output: obiect JSON cu status, report (câmpul schemaVersion din răspuns spune versiunea exactă), _meta. Rapoartele cu severity=critical trec automat printr-o coadă de review uman înainte de publicare (status=pending_review).

Confirmarea costului: un apel care ar consuma credite are nevoie de confirm: true. Fără el primești DEVIZUL (cost în credite și RON, soldul contului, alternativa gratuită dacă există) și nu se consumă nimic — reia apoi EXACT același apel cu confirm: true, după ce omul a acceptat costul.

ParametersJSON Schema
NameRequiredDescriptionDefault
taxIdYesRomanian CUI (Cod Unic de Înregistrare), e.g. 37418771.
confirmNoAcordul utilizatorului de a consuma credite pentru acest apel. Fără el, apelul întoarce DEVIZUL (cost, sold, alternativa gratuită) și nu consumă nimic. Nu îl trimite din proprie inițiativă: întreabă întâi omul.
refreshNoForce a fresh report even if a cached version exists for

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries full weight and is unusually transparent: it states the report is AI-generated, indicative rather than a verdict, subject to human review for critical severity, cached per data version, and requires explicit user confirmation before consuming credits. It also spells out the deviz behavior and cache charging semantics.

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

Conciseness3/5

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

The body is well-structured with bullet lists and front-loaded purpose, but it opens with a long keyword dump (due diligence, raport, audit, KYC, ...) that adds noise. It is verbose overall, though most sentences carry useful behavioral or usage information.

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

Completeness5/5

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

Despite no output schema, the description documents the JSON report shape (`oneLineSummary`, `executiveSummary`, `riskFlags[]`, `confidence`), the `report`/`_meta` envelope, cost, caching, human-review queue, and confirmation flow. An agent has everything needed to decide, invoke, and handle the response correctly.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already explains `taxId`, `confirm`, and `refresh`; the description reinforces the confirmation policy but adds little per-parameter semantics beyond it. Cost, cache, and `_meta` fields are behavioral context rather than new parameter meaning.

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

Purpose5/5

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

The description opens with a specific verb and resource: it generates a company analysis report for a Romanian firm given a CUI, and explicitly states what it is not ('NU un verdict, o recomandare sau un raport de bonitate'). It enumerates the report dimensions and excludes Monitorul Oficial, which separates it from data-retrieval siblings like get_company or get_anaf_debts.

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

Usage Guidelines4/5

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

It provides an explicit 'Când îl folosești' section with concrete user phrasings ('Vreau un raport de due diligence...', 'Verifică bonitatea...') and describes the cost/confirmation protocol. It does not name sibling tools as alternatives for narrower data needs, though it notes the financial-health indicators are the same as `get_financial_health`.

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

find_prospectsAInspect

Keywords: prospectare, prospectare B2B, clienți potențiali, potențiali clienți, listă de prospecți, generare de lead-uri, leaduri, găsește clienți noi, firme țintă, firme în creștere, profil de client ideal, ICP, piață țintă, vânzări B2B, listă de firme pentru vânzări. Keywords (EN): find prospects, find leads, lead generation, sales prospecting, B2B leads, scored leads, lead scoring, prospect list, ideal customer profile, target accounts, growing companies, new business, sales pipeline, Romanian companies, company leads Romania.

Găsește firme românești care se potrivesc profilului de client ideal descris de utilizator și le returnează ca listă de prospecți scorată și motivată, din baza Companero de 2,7 milioane de firme (date ANAF, ONRC, contracte publice).

Input — criterii structurate, toate opționale: industrie sau coduri CAEN, județe, interval de angajați, interval de cifră de afaceri, creștere (cifră de afaceri / angajați), are website sau telefon, exclude firmele cu datorii ANAF, doar câștigători de contracte publice, vârsta firmei.

Output — listă ordonată după un scor de potrivire 0–100, cu breakdown transparent pe criterii (creștere CA, creștere angajați, contactabilitate, mărime în țintă, datorii ANAF, prospețimea bilanțului, contracte publice), motivare în limbaj natural per firmă (ex.: „+34% cifră de afaceri în 2024", „12 → 19 angajați", „fără datorii la ANAF"), link către profilul firmei și webOrderUrl pentru exportul CSV al listei.

Când îl folosești:

  • „Caută-mi firme de transport din Ardeal, în creștere, cu minim 10 angajați."

  • „Am nevoie de o listă de clienți potențiali pentru serviciile noastre de marketing."

  • „Ce firme de producție din Cluj și Bihor au site și n-au datorii la ANAF?"

  • „Găsește-mi magazine online în creștere cărora le-aș putea vinde logistică."

  • „Vreau prospecți B2B: clinici private din București, între 10 și 50 de angajați."

  • „Care firme HoReCa înființate recent angajează și au buget?"

  • „Build me a scored prospect list of growing Romanian software companies."

  • MOD LOOKALIKE (firme similare cu clienții mei / lookalike / ICP by example): „Găsește-mi firme care seamănă cu clienții mei buni: CUI 33592480 și 8955860." → dă seedCompanies cu CUI-urile lor; caut firme SIMILARE (motor de embeddings) filtrate + scorate ca mai sus.

Tarifare: anonim - teaser gratuit cu primele 5 rezultate (fără breakdown de scor și fără date de contact); autentificat cu ApiKey - lista completă scorată, 3 credite per căutare.

Telefonul NU se afișează aici. Fiecare rezultat poartă contact.phone.known (avem sau nu numărul) și, când îl avem, contact.phone.seeOn - pagina firmei pe companero.ro, unde se vede cu cont, în plafonul lunar. Site-ul (contact.website) vine ca atare. Spune-i utilizatorului câte firme din listă au telefon și trimite-l la linkuri; nu promite numere în chat.

Important: scorul măsoară potrivirea cu criteriile cerute, NU calitatea firmei — Companero arată fapte, nu dă verdicte. Câmpurile lipsă (ex. bilanț nedepus) sunt raportate explicit în dataGaps, nu ascunse.

Confirmarea costului: un apel care ar consuma credite are nevoie de confirm: true. Fără el primești DEVIZUL (cost în credite și RON, soldul contului, alternativa gratuită dacă există) și nu se consumă nimic — reia apoi EXACT același apel cu confirm: true, după ce omul a acceptat costul.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoCâte firme returnezi (max 50; anonim maxim 5).
countyNoJudețe — array de nume sau ID-uri (ex: ["Cluj","Bihor"]).
offsetNoOffset paginare (default 0).
confirmNoAcordul utilizatorului de a consuma credite pentru acest apel. Fără el, apelul întoarce DEVIZUL (cost, sold, alternativa gratuită) și nu consumă nimic. Nu îl trimite din proprie inițiativă: întreabă întâi omul.
industryNoIndustrii — array de ID-uri (din `list_industries`) sau nume/slug (ex: ["IT și software"] sau [21]). Se expandează automat la coduri CAEN.
naceCodeNoCoduri CAEN clasă (4 cifre), ca string-uri (ex: ["7311","7312"]). Se combină cu industriile.
maxTurnoverNoCifră de afaceri maximă (RON).
minTurnoverNoCifră de afaceri minimă (RON, ultimul an disponibil).
growthFilterNoFiltru de creștere a cifrei de afaceri an/an: "growing", "stable", "any" (implicit). Pragul implicit e 10%; îl schimbi cu `minGrowthPercent`.
maxEmployeesNoPrag maxim număr mediu angajați.
minEmployeesNoPrag minim număr mediu angajați (din bilanț).
seedCompaniesNoMOD LOOKALIKE: CUI-urile clienților buni ai userului (ex: [33592480, 8955860]). Când e dat, caut firme SIMILARE cu ele (motor de embeddings companero-ai) și le combin cu scorul determinist. Gol = mod normal pe criterii.
requireContactNoDacă true, doar firme cu website SAU telefon cunoscut.
requireWebsiteNoDacă true, doar firme cu website cunoscut.
minGrowthPercentNoPragul în procente pentru `growthFilter` (ex: 20 pentru „creștere peste 20%"). Fără el, "growing" înseamnă ≥ +10%.
maxCompanyAgeYearsNoVârstă maximă a firmei (ani de la înregistrare).
minCompanyAgeYearsNoVârstă minimă a firmei (ani de la înregistrare).
excludeStateDebtorsNoDacă true, exclude firmele cu datorii ANAF cunoscute.
publicSectorWinnersNoContracte publice: "only" (doar câștigători SEAP), "exclude" (fără câștigători), "any" (implicit).

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description must fully disclose behavior. It explains the scoring is not a quality verdict, phone numbers are not shown directly, missing data is reported exhaustively, and cost confirmation requirements. It also details the output structure, including scoring breakdown and data gaps.

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

Conciseness4/5

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

The description is long but well-structured, front-loading the purpose with keywords, then details. It could be more concise, but each section serves a purpose: input, output, examples, lookalike mode, pricing, and phone handling. The length is justified by the tool's complexity.

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

Completeness5/5

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

Despite no output schema, the description thoroughly explains the output format, including score breakdown, motivations, and links. It also covers edge cases like missing data and cost confirmation. The complexity of 19 parameters is well-addressed.

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?

While the schema has 100% coverage, the description adds context: explains how industry expands to CAEN codes, clarifies growth filter default, and details the lookalike seedCompanies behavior. One minor flag: it misidentifies integer CUI as string, but that's a schema issue.

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

Purpose5/5

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

The description clearly states it finds Romanian companies matching an ideal customer profile and returns a scored list. It distinguishes itself from sibling search tools like search_companies by focusing on matching/scoring and from screen_companies by emphasizing the prospect list output.

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

Usage Guidelines5/5

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

Provides explicit usage guidance: when to use (query examples in both Romanian and English), including the lookalike mode. Does not explicitly state when NOT to use it, but the examples and context make it clear.

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

get_anaf_debtsAInspect

Keywords: datorii ANAF, restanțe fiscale, obligații restante, tax debts, arieratele, datorii fiscale, conformitate fiscală, ANAF.ro/restante, ANAF debt list, tax compliance, restante, datorii buget stat, asigurări sociale, șomaj, sănătate, beneficial debt, romanian tax debts, fiscal compliance check, debt history quarter.

Returnează situația datoriilor fiscale ale unei firme românești după CUI, conform listei publice ANAF de restanțe (publicată trimestrial pe anaf.ro/restante).

Două tier-uri (toggle prin detail):

  • detail: "summary" (DEFAULT, FREE): răspunde rapid la întrebarea "are firma datorii?" — {hasDebt, totalGeneral, checkedAtQuarter, checkedAtReferenceDate}. Folosește pentru screening sau confirmare rapidă.

  • detail: "full" (PAID, 100 credite): istoricul COMPLET multi-trimestru cu breakdown per buget (stat / asigurări sociale / șomaj / sănătate), fiecare cu valori principale / accesorii / total / contestate / necontestate. Folosește pentru evaluări detaliate, due diligence, trend analysis fiscal.

IMPORTANT — pragurile de publicare ANAF: lista publică ANAF de restanțe conține DOAR firmele cu datorii fiscale peste anumite plafoane legale:

  • 100.000 RON pentru firme obișnuite (majoritatea)

  • 250.000 RON pentru contribuabili mijlocii

  • 500.000 RON pentru mari contribuabili Absența unei firme din listă NU înseamnă "fără datorii" — înseamnă "datoriile, dacă există, sunt sub pragul de publicare".

Stări semantice cheie (interpretează cu atenție):

  • hasDebt: true → firma figurează în lista publică ANAF la trimestrul raportat (datorii peste plafon). Folosește totalGeneral și (în tier-ul full) detaliile pe buget. Acest fapt în sine e un semnal serios pentru due diligence.

  • hasDebt: false ȘI checkedAtQuarter setat → firma NU apare în lista publică ANAF la trimestrul respectiv. Semnifică "fără datorii publice materiale" — NU "fără datorii deloc". Datoriile sub prag (max 99.999 RON pentru firme obișnuite) pot exista fără să fie publicate.

  • hasDebt: null ȘI checkedAtQuarter: null → Companero nu a importat încă date ANAF. Singura stare reală de "informație lipsă".

Când îl folosești:

  • "Are firma X datorii la ANAF?"

  • "Verifică situația fiscală a firmei cu CUI Y"

  • "Cât datorează firma Z la stat?"

  • "Istoricul datoriilor ANAF pentru firma X în ultimele trimestre"

  • Pre-screening B2B, KYC, factoring, credit decision

Cost & caching: free pentru detail=summary, 100 credite pentru detail=full. Abonamentul Pro include istoricul complet pentru 200 de firme pe lună (lună calendaristică, deduplicat pe firmă): când apelul e acoperit de plafon, răspunsul poartă _meta.coveredByPlan: true și creditsCharged: 0. Peste plafon, detail=full se taxează normal. Datele se actualizează trimestrial când ANAF publică o nouă listă (~aprilie, iulie, octombrie, ianuarie).

Confirmarea costului: un apel care ar consuma credite are nevoie de confirm: true. Fără el primești DEVIZUL (cost în credite și RON, soldul contului, alternativa gratuită dacă există) și nu se consumă nimic — reia apoi EXACT același apel cu confirm: true, după ce omul a acceptat costul.

ParametersJSON Schema
NameRequiredDescriptionDefault
taxIdYesRomanian CUI (Cod Unic de Înregistrare).
detailNo"summary" (free, default) or "full" (paid, see ActionCostCatalog).
confirmNoAcordul utilizatorului de a consuma credite pentru acest apel. Fără el, apelul întoarce DEVIZUL (cost, sold, alternativa gratuită) și nu consumă nimic. Nu îl trimite din proprie inițiativă: întreabă întâi omul.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description fully carries the behavioral burden and does so comprehensively. It discloses publication thresholds, the semantic meaning of hasDebt values (true/false/null), the distinction between 'no public debt' and 'no debt', the cost and caching rules, the confirm requirement, and update frequency. 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.

Conciseness4/5

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

The description is well-structured with clear sections (keywords, tiers, thresholds, semantics, usage, cost), but it is quite long and includes a large keyword block at the start that is unnecessary for an agent's understanding. The essential information is front-loaded and organized, but could be trimmed without losing clarity.

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

Completeness5/5

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

Given the tool's complexity (tiers, costs, thresholds, confirm flow, semantic nuances), the description covers every aspect an agent needs: how to interpret hasDebt, the publication thresholds, the cost implications, the need for user confirmation, and update timing. It also describes return fields for summary, compensating for the lack of an output schema.

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

Parameters5/5

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 substantial value beyond the schema. It explains the default of detail ('summary'), the credit cost for 'full' (100 credits), the exact return fields for summary, and the crucial confirm flow (never send confirm without user approval, otherwise get a quote). This is essential for correct invocation.

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

Purpose5/5

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

The description explicitly states the tool retrieves Romanian companies' tax debt status from the public ANAF list by CUI, with a clear verb-resource pair. It further differentiates between summary and full detail tiers, making it distinct from sibling tools like get_company or get_financial_health, which focus on other data.

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

Usage Guidelines5/5

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

The description includes a dedicated 'Când îl folosești' section with concrete example queries (e.g., 'Are firma X datorii la ANAF?') and use cases (pre-screening, KYC, factoring). It also implies when not to use it by explaining that absence from the list doesn't mean no debt, preventing misinterpretation.

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

get_balance_sheetsAInspect

Keywords: bilanț, bilanțuri, situații financiare, indicatori financiari, cifră de afaceri, profit net, pierdere, datorii, active, capital, număr angajați, raportare ANAF, an fiscal, evoluție financiară; balance sheet, financials, financial indicators, turnover, revenue, net profit, employees, fiscal year.

Returnează indicatorii financiari disponibili (cifră de afaceri, profit net, datorii, active, capital, număr de angajați) pe ani fiscali pentru o companie identificată prin CUI, inclusiv istoricul anterior ferestrei curente ANAF. Opțional filtrează după un an specific. FREE. Notă: dacă ai nevoie și de profilul companiei, preferă get_company cu include: {"balanceSheets": ...} ca să faci un singur apel.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoOptional fiscal year (e.g. 2023). When null, returns all available years.
taxIdYesRomanian CUI (Cod Unic de Înregistrare).

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden itself. It adds useful behavioral context such as returning histories beyond the current ANAF window and listing the indicator categories. However, it omits response shape, pagination, limits, or error behavior, which remains a gap for a tool with no output schema.

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

Conciseness2/5

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

The core instruction is concise and meaningful, but the large opening keyword block adds significant noise and delays the actual description. Several keywords repeat what the tool name already makes obvious. The structure is not front-loaded for an agent trying to decide when to use the tool.

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 simple two-parameter read tool with fully described parameters, the description is adequate: it states what is returned, the optional filter, the input identifier, and the relevant sibling for a broader request. Missing output-format details are minor here.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description restates that year is an optional filter and taxId is the Romanian CUI, but adds little beyond what the schema already documents.

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

Purpose5/5

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

The description uses a specific verb ('Returnează') and identifies the exact resource: financial indicators by fiscal year for a company identified by CUI. It enumerates the specific indicators returned and distinguishes itself from the sibling get_company by noting when get_company is preferable.

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

Usage Guidelines4/5

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

The description clearly implies its primary use case: retrieving financial indicators. It explicitly advises using get_company with include balanceSheets when the company profile is also needed, providing a concrete alternative and a condition for choosing it. It does not spell out exclusions for other siblings, but the guidance is clear enough.

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

get_companyAInspect

Keywords: companie, firmă, profil firmă, date firmă, CUI, CIF, cod fiscal, ONRC, ANAF, sediu social, CAEN, stare firmă, radiată, reprezentanți legali, administrator, asociat, bilanț, cifră de afaceri, profit; company profile, company lookup, company details, Romanian company by tax ID, VAT number, registration data, financials, legal representatives.

Returnează profilul unei companii românești după CUI (Cod Unic de Înregistrare / cod fiscal / CIF). Folosește-l când ai deja CUI-ul unei firme și vrei profilul ei — alternativa la search_companies (care găsește firme după criterii). Profilul de bază (nume, județ, oraș, CAEN principal, dată înregistrare, status) este FREE. Pentru date suplimentare folosește parametrul include:

  • balanceSheets: indicatori financiari ANAF (FREE). Default: ultimii 5 ani. Pentru alți ani transmite obiect, ex: {"balanceSheets":{"years":[2022,2023]}} sau {"balanceSheets":{"last":10}} sau {"balanceSheets":"all"}.

  • legalRepresentatives: reprezentanții legali activi din ONRC (GRATUIT — 0 credite — dar necesită autentificare, ȘI intră într-un plafon lunar de firme: 25 pe contul gratuit, 200 pe abonamentul Pro, deduplicat pe firmă, luna calendaristică). Răspunsul are două grupe separate: governance (administratori, directori, reprezentanți) și procedural (lichidatori, administratori judiciari — semnal de insolvență/lichidare, NU conducerea firmei). Nu le amesteca și nu prezenta un rol procedural drept „administrator". Pe firmele radiate, note spune explicit că persoanele FIGURAU ca reprezentanți la ultima publicare ONRC — folosește formularea aia, nu prezentul. ⚠️ Peste plafon primești legalRepresentatives.capReached: true, governanceCount/proceduralCount (câte persoane există) și capMessage, cu listele GOALE. Asta NU înseamnă că firma n-are administratori - înseamnă că plafonul lunii e atins. Spune-i utilizatorului exact asta, cu mesajul din capMessage; nu raporta „firma nu are reprezentanți legali". Peste plafon poți debloca firma curentă cu unlock: true - 1 credit, o singură dată pe lună per firmă. E o cheltuială: cere-o DOAR după ce utilizatorul a spus că e de acord, și spune-i prețul înainte. Alternativa gratuită e să aștepte 1 ale lunii sau să treacă pe Pro.

Telefonul firmei NU se dă în chat. Răspunsul poartă phone.known (avem sau nu numărul) și, când îl avem, phone.seeOn - linkul paginii firmei de pe companero.ro, unde se vede cu un cont gratuit, în plafonul lunar al contului. Trimite utilizatorul la acel link; nu încerca să reconstitui numărul din alte surse și nu spune că firma n-are telefon când known e true.

Folosirea include într-un singur apel este preferabilă față de mai multe tool-call-uri: răspunsul include _meta.creditsUsed cu costul total. Pentru * se aduce balanceSheets. legalRepresentatives se cere pe nume, fiindcă are nevoie de cont.

Confirmarea costului: un apel care ar consuma credite are nevoie de confirm: true. Fără el primești DEVIZUL (cost în credite și RON, soldul contului, alternativa gratuită dacă există) și nu se consumă nimic — reia apoi EXACT același apel cu confirm: true, după ce omul a acceptat costul.

ParametersJSON Schema
NameRequiredDescriptionDefault
taxIdYesRomanian CUI (Cod Unic de Înregistrare), e.g. 37418771.
unlockNoDeblochează reprezentanții legali PESTE plafonul lunar, pentru firma asta: 1 credit, o singură dată pe lună per firmă (a doua cerere pe aceeași firmă nu mai costă). Fără el, peste plafon primești doar `capReached` și numărătoarea. Sub plafon nu costă nimic - parametrul e ignorat. Cere-l DOAR dacă utilizatorul a spus că vrea să cheltuie credite.
confirmNoAcordul utilizatorului de a consuma credite pentru acest apel. Fără el, apelul întoarce DEVIZUL (cost, sold, alternativa gratuită) și nu consumă nimic. Nu îl trimite din proprie inițiativă: întreabă întâi omul.
includeNoSub-resurse opționale. Trimite ca LISTĂ de tokens, ex: ["balanceSheets:last5","legalRepresentatives"] sau ["*"]. Forma OBIECT e și ea acceptată: {"balanceSheets":{"last":5},"legalRepresentatives":true} sau {"balanceSheets":{"years":[2022,2023]}}. Componente disponibile: "balanceSheets" (FREE; modifier-i: "balanceSheets" (default ultimii 5 ani), "balanceSheets:all", "balanceSheets:last10", "balanceSheets:2023", "balanceSheets:2020-2024"); "legalRepresentatives" (0 credite, necesită autentificare, plafon lunar de firme: 25 gratuit / 200 Pro); "

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden, and it is exceptionally thorough. It discloses cap behavior (`capReached`, empty lists, meaning of cap message), distinguishes `governance from `procedural` legal representatives, warns about radiated companies, explains phone-number handling (`phone.known`, `phone.seeOn`), and details the quote-vs-confirm flow. This goes well beyond a minimal description.

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

Conciseness4/5

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

The description is long, but the length is justified by the tool's complexity: costs, caps, free alternatives, and a confirmation flow all need explanation. It is organized into clear paragraphs and uses clear warnings. The leading keyword block is somewhat redundant and could be trimmed, but the rest is dense and purposeful rather than filler.

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

Completeness5/5

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

For a tool with no output schema and no annotations, the description covers the full operational contract: required CUI, available sub-resources, credit costs, cap semantics, confirmation flow, and even how to phrase results to users regarding radiated companies and capped legal representatives. An agent has enough context to call the tool correctly and to handle edge cases.

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?

The schema already documents `taxId`, `unlock`, `confirm`, and `include` well, giving a baseline of 3; the description enriches this substantially by enumerating accepted modifiers like `balanceSheets:last10`, `balanceSheets:2020-2024`, `"*"`, and object-form examples. However, there is a conflict: the description claims the `include` parameter can be an object, while the input schema declares `include` as `array` or `null` only. This inconsistency slightly muddies what an agent can safely send.

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

Purpose5/5

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

The description states a specific verb and resource: 'Returnează profilul unei companii românești după CUI' and explicitly contrasts it with `search_companies`, which finds companies by criteria. This clearly distinguishes the tool and disambiguates it from its closest sibling. The additional `include` options further specify what is possible without ambiguity.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: use it when you already have the CUI and want a profile, naming `search_companies` as the alternative. It also gives prescriptive usage rules: prefer a single `include` call over multiple tool-calls, requires `confirm: true` for credit-consuming calls, and instructs when to use `unlock` only after explicit user consent. This is actionable and prevents misuse.

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

get_company_competitorsAInspect

Keywords: competitori licitații, concurență achiziții publice, cu cine concurează firma, rivali la stat, competitor analysis, procurement competitors, who competes with, bidding rivals, aceleași licitații, SEAP, SICAP, competiție contracte publice, benchmarking furnizori stat.

Identifică COMPETITORII unei firme românești (după CUI) în achizițiile publice: furnizorii cu cele mai mari valori câștigate în ACELEAȘI clase CPV (4 cifre) în care firma a câștigat contracte în ultimii 2 ani acoperiți, excluzând firma însăși. [PAID, 3 credite]

Returnează:

  • firmClasses: clasele CPV în care activează firma (valoare, cel mai bun rank în piață per clasă);

  • competitors: top competitori agregați peste clasele partajate, fiecare îmbogățit cu date Companero: județ, stare firmă, flag datorii ANAF — combinația unică (date SEAP + date fiscale + registru). Îmbogățirea permite prioritizarea competiției: cine e activ, solvabil și local.

IMPORTANT la interpretare:

  • Valorile de acord-cadru sunt separate (frameworkValue) — nu le aduna.

  • Contractele în asociere apar cu valoarea integrală la fiecare membru.

  • „Competitor" = activitate în aceleași clase CPV — nu garantează ofertare în aceleași proceduri.

Când îl folosești:

  • "Cu cine concurează firma X la licitații?"

  • "Cine mai câștigă contracte în domeniile firmei Y?"

  • "Analizează concurența firmei Z în achizițiile publice"

  • Pregătirea unei oferte; due diligence comercial; analiză de piață.

Pentru piața unui domeniu CPV folosește get_cpv_market; pentru contractele firmei, get_company_contracts.

Confirmarea costului: un apel care ar consuma credite are nevoie de confirm: true. Fără el primești DEVIZUL (cost în credite și RON, soldul contului, alternativa gratuită dacă există) și nu se consumă nimic — reia apoi EXACT același apel cu confirm: true, după ce omul a acceptat costul.

ParametersJSON Schema
NameRequiredDescriptionDefault
taxIdYesRomanian CUI (Cod Unic de Înregistrare).
confirmNoAcordul utilizatorului de a consuma credite pentru acest apel. Fără el, apelul întoarce DEVIZUL (cost, sold, alternativa gratuită) și nu consumă nimic. Nu îl trimite din proprie inițiativă: întreabă întâi omul.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden, and it does so thoroughly: it discloses the paid cost, the confirm-before-consumption mechanism, the frameworkValue caveat, the joint-contract value rule, and the important semantic caveat that 'competitor' means shared CPV activity, not necessarily bidding in the same procedures. This goes well beyond what the schema or 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.

Conciseness4/5

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

The description is well-structured with clear sections, but it opens with a long keyword list that delays the actual purpose statement, and the confirmation behavior is partly repeated from the parameter schema. Once past the keyword block, most content earns its place by explaining output fields, interpretation rules, and alternatives.

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

Completeness5/5

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

For a paid, data-rich tool with no output schema, the description is complete: it enumerates returned fields (firmClasses, competitors), explains enrichment with fiscal/registry data, warns about interpretation pitfalls, gives cost confirmation behavior, and points to sibling tools for other use cases. An agent has enough to decide when to call it and how to handle the response.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds essential meaning beyond the schema, especially for confirm: it explains that without confirm the call returns a DEVIZUL (cost, balance, free alternative) and consumes nothing, and that the exact same call must be retried with confirm true. It also frames taxId as the Romanian CUI, which matches the schema but is reinforced contextually.

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

Purpose5/5

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

The description clearly states the verb, resource, and exact scope: it identifies competitors of a Romanian company by CUI, based on shared 4-digit CPV classes in the last 2 covered years, excluding the company itself. It also names sibling alternatives (get_cpv_market, get_company_contracts), which makes it easy to distinguish from related tools.

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

Usage Guidelines5/5

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

The 'Când îl folosești' section gives explicit query examples, and the final paragraph tells the agent which sibling to use for market-level CPV analysis and for company contracts. It additionally explains the paid-call confirmation flow, which is crucial for correct invocation.

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

get_company_contractsAInspect

Keywords: achiziții publice, licitații, contracte de stat, SEAP, SICAP, furnizor stat, achiziție directă, acord-cadru, contracte câștigate, bani publici, public procurement, public contracts, tenders, government contracts, awarded contracts, supplier to public sector, CPV, dependență de stat, due diligence achiziții, e-licitatie.

Returnează implicarea unei firme românești (după CUI) în achizițiile publice, conform datelor deschise SEAP/SICAP (data.gov.ro). Vizează firma în rol de FURNIZOR (ofertant câștigător).

Două tier-uri (toggle prin detail):

  • detail: "summary" (DEFAULT, FREE): rollup rapid — {hasPublicContracts, contractCount, contractValue, frameworkValue, distinctAuthorities, lastAwardDate, topCpvCodes}. Răspunde la "câștigă firma contracte publice și cât?".

  • detail: "full" (PAID, 2 credite): summary + lista contractelor recente (autoritate contractantă, CPV, valoare, tip procedură, dată) + stateShare — „dependența de stat": seria anuală valoare-contracte ÷ cifră de afaceri (sharePct poate depăși 100% legitim — contract multianual semnat într-un an; sharePctDisplay e plafonat la 100). Pentru due diligence detaliat și analiza dependenței de bani publici.

IMPORTANT — acord-cadru vs contract: contractValue însumează DOAR contractele obișnuite. Acordurile-cadru repetă valoarea totală pe fiecare lot, deci sunt ținute separat în frameworkValue (limită superioară de capacitate, NU cheltuială efectivă). Nu le aduna.

Ce spune fiecare câmp (fapte, nu verdicte — nu le transforma în concluzii despre firmă):

  • distinctAuthorities = câte autorități contractante distincte apar în contractele firmei. Mai multe autorități pe un contractValue mare = venituri publice împrăștiate pe mai mulți clienți; distinctAuthorities: 1 pe un contractValue mare = toate veniturile publice vin de la un singur client public. Atât — raportează numărul și autoritatea, nu explicația.

  • lastAwardDate raportat la data de înregistrare a firmei = de cât timp exista firma la ultima atribuire. E un fapt datat, nu un semnal: spune intervalul, cu ambele date, și lasă concluzia utilizatorului.

  • hasPublicContracts: false → fără contracte publice cunoscute în datele importate (NU garanție că n-a avut niciodată).

Când îl folosești:

  • "Ce contracte publice a câștigat firma X?"

  • "Câștigă firma Y bani de la stat?"

  • "Cât a luat firma Z din achiziții publice și de la cine?"

  • "În ce domenii (CPV) furnizează firma X către instituții publice?"

  • Due diligence, KYC, evaluare dependență de bani publici.

Sursă: open-data SEAP/SICAP (data.gov.ro), licență deschisă. Date despre persoane juridice și cheltuieli publice (transparență — fără date personale).

Confirmarea costului: un apel care ar consuma credite are nevoie de confirm: true. Fără el primești DEVIZUL (cost în credite și RON, soldul contului, alternativa gratuită dacă există) și nu se consumă nimic — reia apoi EXACT același apel cu confirm: true, după ce omul a acceptat costul.

ParametersJSON Schema
NameRequiredDescriptionDefault
taxIdYesRomanian CUI (Cod Unic de Înregistrare).
detailNo"summary" (free, default) or "full" (paid, 2 credits).
confirmNoAcordul utilizatorului de a consuma credite pentru acest apel. Fără el, apelul întoarce DEVIZUL (cost, sold, alternativa gratuită) și nu consumă nimic. Nu îl trimite din proprie inițiativă: întreabă întâi omul.

TDQS

A4.7/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden, and it delivers: tier behavior (summary vs full), credit consumption and confirm semantics, acord-cadru vs contract separation, interpretation caveats, and the non-guarantee meaning of hasPublicContracts:false. It even warns against drawing conclusions beyond facts.

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

Conciseness4/5

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

The text is long but well organized with headings and bullet-like separations, and each section earns its place. The keyword block at the top and license/source sentence add some redundancy and delay the core action, so it is not maximally concise.

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

Completeness5/5

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

For a paid metered tool with no output schema, the description is unusually complete: it enumerates summary fields, full-mode additions, stateShare semantics, field-by-field facts, data source/licensing, and the confirm flow. An agent has enough context to invoke it correctly and interpret results.

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

Parameters5/5

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

Although the schema already covers all three parameters, the description adds material meaning: detail defaults to free summary vs paid full with 2 credits, confirm triggers a non-consuming 'deviz' unless true, and taxId means Romanian CUI. This goes well beyond the baseline for 100% schema coverage.

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

Purpose5/5

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

The description states a specific action and object: returning a Romanian company's involvement in public procurement as supplier (by CUI) from SEAP/SICAP. It clearly distinguishes this from sibling tools by limiting scope to awarded-supplier contracts rather than market stats, debts, or general company data.

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

Usage Guidelines4/5

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

Provides an explicit 'Când îl folosești' section with five concrete query types and due-diligence/KYC use cases. It does not name sibling alternatives or state when not to use it, 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.

get_company_networkAInspect

Keywords: grup de firme, firme legate, rețea de firme, conexiuni firmă, company group, related companies, company network, connected companies, administrator comun, asociat comun, shared director, beneficial owner network, firme radiate, istoric administratori, due diligence, KYC, risc de contrapartidă, counterparty risk, verificare partener, legături între firme, afiliați, affiliated companies, group structure, ownership links.

Returnează GRUPUL DE FIRME al unei companii românești (după CUI): alte firme conectate prin aceleași persoane (legături prin administratori și, unde sunt cunoscute, prin acționari), împreună cu istoricul factual al fiecărei persoane care leagă firmele: câte firme are în total, câte active, câte radiate, câte cu insolvență, câte cu datorii la stat.

Diferență față de due_diligence (raport complet, 300 credite): acest tool răspunde STRICT la dimensiunea de rețea/grup — cine leagă firma de ce alte firme și ce istoric au acele legături. Pentru profil financiar și bilanțuri folosește get_financial_health și get_balance_sheets.

Două tier-uri (toggle prin detail):

  • detail: "summary" (DEFAULT, FREE): {groupSize, connectorCount, deletedInGroupCount, computedAt} — răspunde rapid la "face parte firma dintr-un grup și câte dintre firmele grupului sunt radiate?".

  • detail: "full" (PAID, 10 credite): expansiunea completă 2-hop: connectors[] (persoanele care leagă firma: nume, roluri, câte firme au în total, statistici — câte active/radiate/cu insolvență/cu datorii ANAF) + groupMembers[] (firmele din grup, deduplicate, cu starea lor și prin cine sunt conectate).

Semantici cheie (interpretează corect):

  • Muchiile folosesc DOAR legături cu încredere high/medium din rezoluția de identitate; persoanele cu nume comune neambiguizate sunt EXCLUSE structural — nu presupune niciodată că două firme sunt legate doar pentru că administratorii au același nume.

  • Practicienii în insolvență (lichidatori, administratori judiciari) NU creează muchii de grup — mandatele lor sunt procedurale.

  • Persoanele cu foarte multe firme (>50) apar ca isHub: true și nu extind grupul.

  • Cifrele sunt fapte publice ONRC (mandate, radieri, date), nu aprecieri. O firmă radiată în istoricul unui administrator NU e, prin ea însăși, un semnal negativ: radierea voluntară e obișnuită. Absența datelor de datorii pentru firme radiate demult NU înseamnă că erau curate.

  • Corelarea acestor fapte într-un tipar de comportament (persoane cu firme radiate care înregistrează firme noi) NU e expusă prin acest tool și nu apare în răspuns; e o prelucrare pentru care așteptăm evaluarea de impact (DPIA, art. 35 GDPR). Nu o deduce singur din cifre și nu o prezenta utilizatorului ca pe un rezultat al platformei.

  • computed: false → rebuild-ul de rețea nu a rulat încă pentru acest set de date.

Când îl folosești:

  • "Ce alte firme are administratorul firmei X?" / "Firme legate de X"

  • "Face parte firma X dintr-un grup de firme?"

  • "Are firma X administratori cu firme radiate în urmă?"

  • "Verifică istoricul oamenilor din spatele firmei X" (KYC, credit, contract nou, factoring)

Cost: free pentru detail=summary, 10 credite pentru detail=full. Datele se recalculează după fiecare import ONRC lunar.

Confirmarea costului: un apel care ar consuma credite are nevoie de confirm: true. Fără el primești DEVIZUL (cost în credite și RON, soldul contului, alternativa gratuită dacă există) și nu se consumă nimic — reia apoi EXACT același apel cu confirm: true, după ce omul a acceptat costul.

ParametersJSON Schema
NameRequiredDescriptionDefault
taxIdYesRomanian CUI (Cod Unic de Înregistrare).
detailNo"summary" (free, default) or "full" (paid, see ActionCostCatalog).
confirmNoAcordul utilizatorului de a consuma credite pentru acest apel. Fără el, apelul întoarce DEVIZUL (cost, sold, alternativa gratuită) și nu consumă nimic. Nu îl trimite din proprie inițiativă: întreabă întâi omul.

TDQS

A4.5/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It discloses key behaviors: edge construction uses only high/medium confidence identity links, excludes ambiguous common names, insolvency practitioners don't create edges, hubs (>50 firms) don't expand, data are public ONRC facts, no pattern inference is exposed (DPIA), and computed:false indicates network rebuild pending. It also explains cost tiers and confirmation flow, plus data refresh after monthly ONRC import. This is exemplary 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.

Conciseness3/5

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

The description is long and comprehensive but structured with clear sections (keywords, main purpose, differentiation, tiers, semantics, usage, cost). It is not concise – there is a large keyword block that adds little value for an AI agent (keywords are likely for internal search). The key information is front-loaded after keywords, but the keyword list is noise. Some redundancy exists (cost mentioned in two places). However, the structure is logical and every major behavioral aspect is covered, though the length could be trimmed.

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

Completeness5/5

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

For a complex tool with no output schema and no annotations, the description is remarkably complete. It covers purpose, usage scenarios, tier details, behavioral semantics, cost confirmation, data freshness, and limitations (no pattern inference). The output structure for both tiers is described with field names. Even though there's no output schema, the description provides enough for an agent to understand what will be returned. Nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100% – all three parameters (taxId, detail, confirm) have descriptions in the schema. The description adds semantic detail: detail toggles between summary and full with different response shapes and costs, confirm is required for credit-consuming calls and returns a quote otherwise. While the schema already provides basic descriptions, the description enriches meaning with tier definitions and confirmation semantics, but much of this could be inferred from the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description explicitly states the tool returns the company group of a Romanian company by CUI, including connected firms and factual history of connecting persons. It clearly distinguishes itself from due_diligence by focusing strictly on network/group dimension. The verb 'Returnează' plus resource 'GRUPUL DE FIRME' and scope (after CUI) is specific and unambiguous.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use examples ('Ce alte firme are administratorul firmei X?', 'Face parte firma X dintr-un grup de firme?') and explicit exclusions (does not cover financial profile – use get_financial_health and get_balance_sheets). It also distinguishes from due_diligence with cost and scope. The 'Când îl folosești' section gives concrete trigger scenarios, and the cost confirmation behavior is clearly explained.

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

get_cpv_marketAInspect

Keywords: piață achiziții publice, cod CPV, licitații pe domenii, cine câștigă licitații, top furnizori stat, cotă de piață achiziții, concentrare piață, HHI, SEAP, SICAP, contracte publice pe domenii, public procurement market, CPV market analysis, top government suppliers, market share tenders, market concentration, procurement analytics.

Analizează PIAȚA unui domeniu CPV în achizițiile publice românești (date SEAP/SICAP de pe data.gov.ro): cine câștigă, la ce valori, cât de concentrată e piața. Parametrul cpvPrefix = diviziune CPV de 2 cifre (ex. "45" = lucrări de construcții, "33" = echipamente medicale, "72" = servicii IT) sau clasă de 4 cifre (ex. "4523" = construcții de drumuri). Opțional year (implicit: ultimul an cu date).

Două tier-uri (toggle prin detail):

  • detail: "summary" (DEFAULT, FREE): totaluri piață (valoare contracte, plafoane acorduri-cadru separat, nr. furnizori), TOP 10 furnizori cu cote de piață, indicele HHI + eticheta de concentrare, trend anual.

  • detail: "full" (PAID, 3 credite): la fel, dar TOP 100 furnizori — pentru analiză de piață completă.

IMPORTANT la interpretare:

  • contractValue = DOAR contracte ordinare; frameworkValue (acorduri- cadru) e plafon maxim contractabil, raportat separat — NU le aduna.

  • Contractele câștigate în asociere apar cu valoarea integrală la fiecare membru al asocierii (SEAP nu publică split-ul).

  • Acoperire: atribuiri publicate din 2018 încoace (fără achiziții directe); 2021–2024 parțial trunchiați la sursă (plafonul XLS de 65k rânduri), T2-2019 nepublicat — trendurile multi-an sunt orientative.

Când îl folosești:

  • "Cine câștigă licitațiile de construcții / IT / medicale în România?"

  • "Cât de concentrată e piața achizițiilor publice de X?"

  • "Top furnizori la stat pe domeniul Y" / "market share în CPV 45"

  • "Cât s-a atribuit prin SEAP pe domeniul Z în 2025?"

  • Analiză competitivă înainte de a licita; jurnalism de investigație.

Pentru contractele UNEI firme folosește get_company_contracts; pentru competitorii unei firme, get_company_competitors.

Confirmarea costului: un apel care ar consuma credite are nevoie de confirm: true. Fără el primești DEVIZUL (cost în credite și RON, soldul contului, alternativa gratuită dacă există) și nu se consumă nimic — reia apoi EXACT același apel cu confirm: true, după ce omul a acceptat costul.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoCalendar year (default: latest covered year).
detailNo"summary" (free, top 10, default) or "full" (paid 3 credits, top 100).
confirmNoAcordul utilizatorului de a consuma credite pentru acest apel. Fără el, apelul întoarce DEVIZUL (cost, sold, alternativa gratuită) și nu consumă nimic. Nu îl trimite din proprie inițiativă: întreabă întâi omul.
cpvPrefixYesCPV division (2 digits, e.g. "45") or class (4 digits, e.g. "4523").

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations present, the description carries the full burden and does it thoroughly: it discloses data sources, coverage limitations, the separated reporting of framework values, consortium award handling, and the credit-confirmation behavior. It even warns against summing contractValue and frameworkValue.

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

Conciseness4/5

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

The description is long and includes a redundant keyword block, so it is not maximally concise. However, it is well-structured into clear sections (interpretation, usage, cost confirmation) and front-loads the core purpose before diving into parameter detail.

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

Completeness5/5

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

Given the tool's complexity, four parameters, no output schema, and no annotations, the description is remarkably complete. It covers what the tool does, how to invoke it, what outputs to expect at each tier, data caveats, and the credit-confirmation protocol. Nothing critical is missing for correct usage.

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

Parameters5/5

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

Schema coverage is already 100%, but the description adds substantial meaning: cpvPrefix gets concrete examples and format rules, year gets a default explanation, detail gets tier semantics, and confirm gets a full behavioral explanation about returning a quote instead of executing. This goes well beyond the schema.

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

Purpose5/5

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

The description names a specific verb and resource: analyze the CPV market in Romanian public procurement. It clearly differentiates itself from sibling tools by stating that for a single company's contracts one should use get_company_contracts and for competitors get_company_competitors.

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

Usage Guidelines5/5

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

Provides explicit when-to-use examples (e.g., 'Cine câștigă licitațiile de construcții?', 'Cât de concentrată e piața?') and explicitly names alternatives for related but different tasks. Also clearly explains the paid/free tier behavior and the confirm flow.

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

get_financial_healthAInspect

Keywords: indicatori financiari, lichiditate, solvabilitate, profitabilitate, marjă, Altman Z, bonitate, analiză financiară, sănătate financiară, current ratio, quick ratio, cash ratio, debt to equity, leverage, working capital, net margin, operating margin, ROE, ROA, turnover growth, revenuePerEmployee, financial ratios, liquidity, solvency, financial health, company health, financial analysis, balance sheet ratios, indicatori bilanț, poziționare industrie, industry position, CAEN percentile, financial score, financial indicators.

Calculează și returnează indicatori financiari determiniști pentru o firmă românească după CUI, din bilanțurile ANAF (și surse publice agregate pentru ani mai vechi). Calcul pur, fără LLM — rezultate instant, cost marginal zero.

Grupe de indicatori: lichiditate (currentRatio, quickRatio, cashRatio) · solvabilitate / structură (debtToEquity, leverageRatio, workingCapital) · profitabilitate (netMargin, operatingMargin, roe, roa) · eficiență / dinamică (receivablesDays, turnoverGrowth, employeeGrowth, revenuePerEmployee) · Altman Z″-score (model academic: „zona sigură" Z″>2.6, „zona gri" 1.1–2.6, „zona de presiune financiară" <1.1; cu componente X1–X4) · poziționare în industrie față de percentilele P25/median/P75 din industry_pulse_agg (turnover, profit, angajați, segmentul CAEN × județ cu fallback național; disponibil doar pentru segmente ≥ 30 firme).

Două tier-uri (detail):

  • detail: "summary" (DEFAULT, FREE): netMargin + leverageRatio + turnoverGrowth pentru ultimul an cu bilanț + poziționare față de industrie. „Cum stă firma față de concurență?" (Lichiditatea și Altman Z″ apar doar în full, unde există date — bilanțul ANAF simplificat nu le conține pentru majoritatea firmelor.)

  • detail: "full" (PAID, 2 credite): toți indicatorii pe toți anii disponibili (serie multi-an) + Altman Z″ cu componente + poziționare vs. ambele segmente (CAEN × județ și național) + nota metodologică. Folosește pentru due diligence complet, analiză de credit, comparație competitivă.

IMPORTANT — interpretare:

  • null pe un indicator = necalculabil din lipsă de date (microentitățile nu raportează toate câmpurile bilanțului). null ≠ 0.

  • Altman Z″ este un model academic — nu un verdict sau rating Companero. Prezintă zonele cu denumirile academice.

  • Capitaluri proprii ≤ 0 → debtToEquity și roe emit flag negativeEquity.

Când îl folosești:

  • „Care e lichiditatea / solvabilitatea firmei X?"

  • „Cum se compară cifra de afaceri a firmei Z cu industria ei?"

  • „Ce indică Altman Z-score pentru firma W?"

  • „Evoluția marjei nete în ultimii 5 ani la firma V"

  • Due diligence financiar pre-colaborare (furnizor, client, partener)

  • Analiză de credit sau factoring · screening B2B

Cost: free pentru detail=summary, 2 credite pentru detail=full.

Confirmarea costului: un apel care ar consuma credite are nevoie de confirm: true. Fără el primești DEVIZUL (cost în credite și RON, soldul contului, alternativa gratuită dacă există) și nu se consumă nimic — reia apoi EXACT același apel cu confirm: true, după ce omul a acceptat costul.

ParametersJSON Schema
NameRequiredDescriptionDefault
taxIdYesRomanian CUI (Cod Unic de Înregistrare).
detailNo"summary" (free, default) or "full" (paid, see ActionCostCatalog).
confirmNoAcordul utilizatorului de a consuma credite pentru acest apel. Fără el, apelul întoarce DEVIZUL (cost, sold, alternativa gratuită) și nu consumă nimic. Nu îl trimite din proprie inițiativă: întreabă întâi omul.

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does it thoroughly. It discloses null semantics (null ≠ 0), the academic nature of Altman Z (not a verdict), the negativeEquity flag, the free vs paid tiers, and the confirm flow for paid calls (DEVIZ first, then replay with confirm:true). It also mentions data limitations (microentities may lack fields).

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

Conciseness3/5

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

The description begins with a large keyword block that is redundant and does not help an agent select the tool. The rest is structured with sections, bold titles, and clear indicator groupings, but the overall length is inflated. Valuable information is present, but some sentences are repetitive (e.g., cost details are repeated), so it does not fully earn its length.

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 tool with no output schema and complex behavior (two detail tiers, paid confirmation), the description compensates well by listing indicator groups, explicating the Altman Z zones, and clarifying the confirmation flow. It does not give an exact response JSON shape, but an agent can infer what to expect. Slightly more explicit response structure would make it a 5.

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

Parameters4/5

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

Schema description coverage is 100% for all parameters, so the baseline is 3. The description adds value beyond the schema by explaining what each detail level returns (indicator groups, multi-year series) and by elaborating the confirm behavior (returns a quote without consuming credits). It does not substantially expand on taxId beyond the schema's 'Romanian CUI', but the added detail/confirm context justifies a 4.

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

Purpose5/5

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

The description clearly states the tool computes and returns deterministic financial indicators for a Romanian company by CUI from ANAF balance sheets. This distinguishes it from sibling tools like get_balance_sheets, which would provide raw data. The two detail tiers are also clearly explained, so an agent can understand what the tool does at a glance.

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

Usage Guidelines4/5

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

The description includes a concrete 'Când îl folosești' section listing example questions and use cases (due diligence, credit analysis, B2B screening). It also explains when to choose 'summary' vs 'full' and notes the cost difference. However, it does not explicitly mention alternative tools or when not to use this one, stopping 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_market_statsAInspect

Keywords: statistici industrie/sector, medie cifra de afaceri pe sector, cifra de afaceri mediană, mediana profitului, câte firme active/noi/radiate, percentile P25/median/P75, benchmark de piață, mărimea pieței, market sizing, cod CAEN, industrie, județ, market statistics, industry/sector stats, median turnover, average revenue by sector, company counts by industry/county Romania, new vs dissolved companies, market benchmark, percentiles.

Statistici AGREGATE pentru un segment de piață din România (o industrie SAU un cod CAEN de clasă, opțional restrâns la un județ). Returnează: număr de firme active, firme noi și radiate în anul curent, și percentilele P25 / mediană / P75 pentru cifra de afaceri, profit și număr de angajați — plus un trend multi-anual. Datele vin din bilanțurile ANAF + registrul ONRC, precalculate; percentilele există doar pe segmente cu ≥30 de firme cu bilanț (altfel fallback pe percentilele naționale, marcat prin usedNationalFallback; segmentul local prea mic e semnalat în smallSegment).

Segmentul se dă prin EXACT UNUL dintre:

  • caenCode: cod CAEN de clasă, 4 cifre (ex. "6201" software la comandă, "0111" cultura cerealelor). Codurile de 2–3 cifre NU sunt suportate (percentilele nu se pot agrega din percentile) — folosește un cod de 4 cifre sau industry.

  • industry: nume, slug sau id al uneia dintre cele 34 de industrii Companero (ex. "IT și software", "Imobiliare"). Dacă nu știi valoarea, apelează list_industries. Opțional county (nume sau id, ex. "Cluj") pentru statistici județene și year pentru count-urile unui an anume (percentilele rămân pe anul de referință).

Când îl folosești:

  • „Care e cifra de afaceri mediană a firmelor de software din Cluj?"

  • „Câte firme s-au înființat / radiat în construcții anul acesta?"

  • „Câte firme active sunt în industria imobiliară?"

  • „Cât câștigă în medie o firmă de contabilitate?" (mediană + P25/P75)

  • „Cât de mare e piața pentru CAEN 6201?" / „market sizing pe un sector"

  • Context de piață înainte de a evalua o firmă individuală.

Disambiguare (NU confunda cu):

  • search_companies GĂSEȘTE FIRME individuale — folosește-l pentru „top N firme după cifra de afaceri" sau liste/export. get_market_stats dă STATISTICI de segment, nu firme.

  • list_industries = taxonomia (id/nume/slug ale industriilor).

  • get_cpv_market = piața ACHIZIȚIILOR PUBLICE (SEAP), nu piața comercială.

  • get_financial_health = poziționarea UNEI firme față de industria ei.

Gratuit.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoAn opțional pentru count-uri (default: anul de referință). Percentilele rămân pe anul de referință.
countyNoJudeț opțional (nume sau id, ex. "Cluj"). Omite pentru statistici naționale.
caenCodeNoCod CAEN de clasă (4 cifre, ex. "6201"). Exclusiv cu `industry`.
industryNoIndustrie Companero — nume, slug sau id (ex. "IT și software"). Exclusiv cu `caenCode`.

TDQS

A4.9/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full behavioral burden. It does so thoroughly: it discloses data sources (ANAF + ONRC), precomputation, the ≥30-firm threshold for percentiles, fallback behavior via `usedNationalFallback`, the `smallSegment` flag, the exact-one-of-two segment rule, and that the tool is free ('Gratuit'). The agent knows what will happen, including edge cases, 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.

Conciseness4/5

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

The description is well-structured with clear sections: keyword block, main definition, parameter constraints, usage examples, and disambiguation. It is longer than average, and the opening keyword list is somewhat repetitive with the body, but every section adds operational value. The main behavior and exclusions are front-loaded early.

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

Completeness5/5

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

For a 4-parameter, no-output-schema tool with no annotations, this description is exceptionally complete. It explains what is returned, how the segment is uniquely selected, what optional filters do, when fallbacks occur, and which sibling tools to use instead. An agent has enough information to invoke it correctly and interpret the important edge cases without any missing context.

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

Parameters5/5

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

Although input schema coverage is 100%, the description adds meaning the schema does not: `caenCode` must be a 4-digit class code and 2–3 digit codes are explicitly unsupported, `industry` must come from the 34 Companero industries with `list_industries` as a fallback, and the two are mutually exclusive. It also clarifies that `year` affects only counts while percentiles remain on the reference year. This is substantive semantic guidance beyond the schema descriptions.

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

Purpose5/5

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

The description opens with a specific definition: 'Statistici AGREGATE pentru un segment de piață din România' and lists exact return values (active/new/dissolved firms, P25/median/P75 percentiles, multi-year trend). It distinguishes itself from siblings in the 'Disambiguare' section, explicitly contrasting with search_companies, list_industries, get_cpv_market, and get_financial_health. This is far beyond a vague restatement of the tool name.

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

Usage Guidelines5/5

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

The 'Când îl folosești' section provides concrete natural-language queries that map directly to this tool, such as 'Care e cifra de afaceri mediană a firmelor de software din Cluj?' and 'Câte firme s-au înființat / radiat în construcții anul acesta?'. The 'NU confunda cu' section explicitly says when to prefer alternative sibling tools, e.g., search_companies for individual companies. No usage context 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_personAInspect

Keywords: profil persoană, lista firme, administrator, asociat, reprezentant legal, lichidator, insolvență, due diligence, KYC, beneficiar real, person profile, company list, ONRC.

Returnează profilul complet al unei persoane fizice (administrator, asociat, reprezentant legal, lichidator) după ID-ul de identitate (24-char hex obținut din search_persons). PAID, 1 credit per apel. Necesită autentificare — anonimii primesc 401 + indicații OAuth.

Sursa: ONRC Open Data (Registrul Comerțului — Legea 265/2022 privind registrul comerțului). Niciun CNP nu e returnat — datele sensibile (CNP, adrese complete) rămân criptate at-rest.

CÂND îl folosești:

  • "Lista completă a firmelor lui X" — apel direct după search_persons. Răspunsul include prima pagină (25 firme) inline.

  • "Persoana e lichidator / implicată în insolvență?" — verifică dacă rolurile au roleCategory: procedural.

  • "Persoana mai apare în firma Y?" — caută companyTaxId == Y în lista returnată.

  • "Persoana e activă în acea firmă?" — vezi isActive per ocurrență; false = persoana nu mai apare în ultimul snapshot ONRC.

  • Roluri istorice — trimite onlyActive: false. Default e true.

Răspunsul include:

  • Nume canonic + variante (alias-uri observate, ex. "POPESCU ION" vs "Ion Popescu")

  • Confidence cluster + flag isCommonName (când true, aparițiile pot fi indivizi diferiți)

  • An și loc de naștere (când sunt publice ONRC)

  • Județe / localități în care a fost observată

  • Lista paginată de companii cu: companyTaxId, nume firmă, tradeNumber, role, roleCategory, linkConfidence, observedAt, isActive, URL firmă

  • _meta.creditsUsed: 1, _meta.dataSource: "ONRC public open-data"

linkConfidence per ocurrență:

  • HIGH: identificare sigură (CNP sau nume + DOB + locul nașterii confirmate)

  • MEDIUM: nume + DOB se potrivesc, fără confirmare suplimentară

  • LOW: doar nume; nume rar deci puțin probabil să fie altcineva

  • UNRESOLVED: nume comun fără elemente discriminatorii — verifică manual înainte să presupui că e aceeași persoană

Paginare: limit (1-100, implicit 25) + offset. Fiecare apel costă 1 credit, indiferent de limit.

Confirmarea costului: un apel care ar consuma credite are nevoie de confirm: true. Fără el primești DEVIZUL (cost în credite și RON, soldul contului, alternativa gratuită dacă există) și nu se consumă nimic — reia apoi EXACT același apel cu confirm: true, după ce omul a acceptat costul.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes24-char hex PersonIdentity id (from search_persons).
pageNoAlias vechi (1-based) pentru `offset`. Folosește `offset`.
limitNoCâte firme din listă (1-100, implicit 25). Numele canonic, la fel ca la celelalte unelte.
offsetNoDe la a câta firmă. Numele canonic.
confirmNoAcordul utilizatorului de a consuma credite pentru acest apel. Fără el, apelul întoarce DEVIZUL (cost, sold, alternativa gratuită) și nu consumă nimic. Nu îl trimite din proprie inițiativă: întreabă întâi omul.
pageSizeNoAlias vechi pentru `limit`. Folosește `limit`.
onlyActiveNoRestrict to active roles only. Default true.

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It thoroughly discloses key behaviors: it is read-only (returns data, no modifications), requires authentication (401 for anonymous), implies cost via credits ('1 credit per apel' and the confirm flow), and describes pagination, data source (ONRC), and privacy (no CNP). The description also explains the confidence levels, which is critical for interpreting results. It only lacks explicit rate-limit disclaimers, but the cost/auth/privacy coverage is exceptional for a tool with zero annotation support.

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

Conciseness4/5

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

The description is well-structured with clear headers and bullet points, front-loading the purpose and key usage scenarios. It is longer than strictly necessary, but every sentence earns its place by adding functional detail. The inclusion of the `linkConfidence` legend and the confirmation flow are particularly valuable. It could trim some repetition (e.g., the cost is mentioned twice), but this does not detract significantly.

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

Completeness5/5

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

This is a complex tool with 7 parameters, no output schema, and no annotations, yet the description covers everything needed to invoke it correctly: the required ID's origin, the default behavior, the pagination options, the cost model (credits, EUR/RON, confirm), the data-source legality, the absence of CNP, and the interpretation of confidence levels. It even provides the exact `companyTaxId` field for checking membership. Although an output schema is absent, the description volunteers the response structure in detail, so agents have a complete mental model. Nothing critical is missing.

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

Parameters5/5

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

Schema coverage is 100%, but the description elevates each parameter with critical context. It explains that `limit` and `offset` control pagination, that `onlyActive` defaults to true and can be set to false for historical roles, and that `confirm` is a cost-consent gate. It also clarifies the deprecated aliases (`page` and `pageSize`) encouraging use of `offset` and `limit`. This goes well beyond the schema's basic type hints, making parameter semantics exceptionally clear.

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

Purpose5/5

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

The description is precise: it names the specific verb ('Returnează profilul complet al unei persoane fizice'), the resource (person identified by ID), and its scope (roles, companies, confidence levels). It clearly distinguishes from siblings like search_persons by stating it takes an ID and returns a full profile, and from get_company by focusing on person-centric data. It also provides concrete use-case examples, eliminating any ambiguity about its role.

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

Usage Guidelines5/5

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

The description explicitly states when to use the tool ('CÂND îl folosești' section) with four concrete scenarios, each mapping to specific fields like `roleCategory: procedural` and `isActive`. It also explains when NOT to use it implicitly by noting that direct calls follow `search_persons`, and it provides explicit instructions on using the `confirm` parameter as a prerequisite for paid calls. This is a model of usage guidance.

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

get_screeningAInspect

Keywords: stare verificare portofoliu, rezultat screening firme, status job verificare, ia raportul de screening, verifică jobul de verificare firme, progres verificare, rezultatul listei de firme verificate. Keywords (EN): get screening result, screening job status, poll portfolio screening, fetch batch company check report, screening progress, portfolio screening result.

Ia starea și rezultatul unui job de verificare portofoliu creat cu screen_companies. Folosește-l după un apel asincron (peste 20 de firme, care întoarce doar un jobId) ca să afli progresul și, când e gata, agregatele listei. GRATUIT, dar necesită autentificare (jobul e strict al tău).

Input: jobId (id-ul întors de screen_companies), opțional includeItems (implicit false) — când e true întoarce și firmele individuale cu flag-urile lor (maxim 100, sortate după cele mai multe flag-uri high; semnalează dacă lista e trunchiată).

Output: status (pending / processing / done / failed), progress {processedCount, totalCount} cât timp rulează, și summary cu agregatele (câte firme cu datorii la stat, câte inactive, distribuția pe severitate, top cele mai semnalate) când jobul e gata.

Notă: pentru ≤20 de firme, screen_companies întoarce deja raportul complet sincron — nu mai e nevoie de acest tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesId-ul jobului de verificare (din răspunsul screen_companies).
includeItemsNoDacă true, include și firmele individuale cu flag-urile lor (max 100, sortate după flag-urile high).

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries full behavioral disclosure. It covers authentication requirements, job ownership, status lifecycle, progress fields, truncation behavior, and the sync alternative, going far beyond the schema.

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

Conciseness4/5

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

The structure is organized into purpose, input, output, and usage note. The keyword blocks at the top are redundant and add noise, but the rest is efficient and information-dense without being bloated.

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

Completeness5/5

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

There is no output schema, so the description must explain return values; it does so thoroughly with statuses, the progress object shape, and the summary aggregates. Nothing essential for correct invocation seems missing.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds meaningful parameter meaning: jobId is defined as the id returned by screen_companies, and includeItems is explained with its default value, item limit, sorting rule, and truncation signal.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Ia starea și rezultatul unui job de verificare portofoliu creat cu screen_companies.' It is clearly distinguished from the sibling screen_companies by framing get_screening as the polling/result tool for asynchronous jobs.

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

Usage Guidelines5/5

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

It explicitly states when to use it: after an async call for more than 20 companies, and when not to use it: for ≤20 companies screen_companies already returns the full report synchronously. This gives the agent actionable routing between siblings.

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

list_industriesAInspect

Keywords: industrie, industrii, sector de activitate, domeniu, categorie business, ramură economică, IT, construcții, comerț, agricultură, HoReCa, transport, producție, taxonomie CAEN; industry, industries, business sector, sector taxonomy, NACE grouping.

Listează industriile (categoriile de business — o regrupare a codurilor CAEN) disponibile pe Companero. Returnează id, nume, slug. Folosește acest tool când utilizatorul vrea să caute firme dintr-un sector ("firme din IT", "construcții", "comerț", "agricultură" etc.), apoi trimite id-ul returnat în parametrul industry al search_companies — care acceptă și numele direct, deci pasul ăsta e opțional.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

There are no annotations and no output schema, so the description carries the full behavioral burden. It communicates that this is a read-only listing and names the returned fields, but it does not disclose ordering, exhaustiveness, pagination, or failure behavior; this is acceptable for a simple list but not fully transparent.

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

Conciseness4/5

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

The description is structured in short functional segments: purpose, return fields, and usage. The keyword block is somewhat redundant but serves multilingual matching, and the actionable guidance is front-loaded.

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 zero-parameter taxonomy list, the description covers purpose, output fields, and integration with search_companies. It is complete enough to invoke correctly; a small gap is the lack of explicit statement about whether the list is exhaustive or localized.

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?

The tool has zero parameters, so there is no schema semantics for the description to supplement. The description adds contextual meaning by explaining how the tool's output (id/name/slug) is meant to feed into search_companies, which is more than the empty schema provides.

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

Purpose5/5

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

The description opens with a precise verb and object: 'Listează industriile... disponibile pe Companero' and specifies the returned fields (id, nume, slug). It clearly distinguishes this from the sibling search tools by framing it as a CAEN/NACE taxonomy lookup rather than a company search.

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

Usage Guidelines5/5

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

It explicitly states when to use it: when the user wants companies from a sector, and gives concrete examples ('firme din IT', 'construcții'). It also names the downstream alternative, search_companies, explains how to pass the id into the `industry` parameter, and notes the id step is optional because search_companies accepts names directly.

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

screen_companiesAInspect

Keywords: verificare portofoliu, verificare listă de firme, verificare CUI-uri, screening firme, screening parteneri, verificare clienți, verificare furnizori, verificare în masă, verificare bonitate, control de credit, credit control, semnale de alertă firme, firme cu datorii, firme radiate, firme în insolvență, verifică-mi lista de parteneri. Keywords (EN): portfolio screening, batch company check, bulk due diligence, screen a list of companies, check partners/clients/suppliers, credit control, KYC suppliers, supplier risk screening, mass company verification, Romanian companies list check, flag companies with debts/insolvency.

Verifică o LISTĂ de firme românești (după CUI) și întoarce, per firmă, semnalele factuale deterministe deja cunoscute în Companero: firmă inactivă/radiată/suspendată, evenimente în istoricul de stări de la ONRC (dizolvare, lichidare, fuziune, divizare), datorii la stat (ANAF), capitaluri proprii negative, presiune financiară (Altman Z″), scădere de cifră de afaceri, bilanț nedepus recent, firmă tânără. Ideal pentru contabili, credit control, distribuitori cu mulți clienți pe termen de plată — „am o listă de N parteneri, spune-mi care au probleme".

Input: taxIds — listă de CUI-uri (numere sau string-uri; prefixul „RO" se ignoră). Maxim 100 CUI-uri per apel (peste 100 → eroare). Opțional label (nume pentru job, ex. „Portofoliu clienți iulie").

Comportament: pentru ≤20 CUI-uri raportul complet vine SINCRON (job + agregate + toate firmele cu flag-urile lor). Pentru 21–100 CUI-uri se creează un job asincron și primești jobId + status — verifici rezultatul cu tool-ul get_screening.

Tarifare: 1 credit per firmă REZOLVATĂ (CUI găsit în baza Companero). CUI-urile inexistente NU se taxează. Un portofoliu de 50 de firme = ~50 credite. Necesită autentificare.

Flag-uri și severități: inactive, status_event, state_debts, negative_equity (severitate HIGH); financial_pressure, turnover_drop, no_recent_filing (MEDIUM); young_company, not_found, screening_error (INFO). Sortare implicită: cele mai multe flag-uri high întâi.

Sunt FAPTE, nu verdicte: niciun scor de risc, niciun rating, nicio recomandare. Un eveniment de stare NU înseamnă insolvență - o fuziune apare tot acolo. status_event se numea insolvency_history până la politica sp2; rapoartele mai vechi pot purta încă vechiul cod.

Când NU e potrivit (dezambiguizare):

  • due_diligence = analiză narativă sintetizată de AI pe O SINGURĂ firmă.

  • get_company = profilul individual al unei firme după CUI.

  • screen_companies = semnale deterministe pe o LISTĂ de firme, format tabelar.

Important: Companero arată FAPTE, nu verdicte. Flag-urile sunt semnale factuale (ex. „figurează cu datorii ANAF de X lei la Q4-2025"), NU un „scor de risc" și NU o recomandare de a lucra sau nu cu firma.

Confirmarea costului: un apel care ar consuma credite are nevoie de confirm: true. Fără el primești DEVIZUL (cost în credite și RON, soldul contului, alternativa gratuită dacă există) și nu se consumă nimic — reia apoi EXACT același apel cu confirm: true, după ce omul a acceptat costul.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoNume opțional pentru job (ex. "Portofoliu clienți iulie").
taxIdsYesListă de CUI-uri de verificat (numere sau string-uri; "RO" se ignoră). Maxim 100 per apel; pentru ≤20 raportul e sincron, altfel job asincron interogat cu get_screening.
confirmNoAcordul utilizatorului de a consuma credite pentru acest apel. Fără el, apelul întoarce DEVIZUL (cost, sold, alternativa gratuită) și nu consumă nimic. Nu îl trimite din proprie inițiativă: întreabă întâi omul.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It explains that results are facts, not risk scores or recommendations, that status_event was formerly insolvency_history, that sync vs async behavior depends on list size, and that companies not found are not charged. It also documents the quote/confirm flow and authentication requirement.

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

Conciseness3/5

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

The description is well-organized into labeled sections and nearly every substantive section earns its place. However, it opens with two long keyword-stuffing lists and repeats the 'facts, not verdicts' point twice. It is comprehensive but not tightly edited or front-loaded.

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

Completeness5/5

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

There is no output schema or annotations, yet the description covers the returned flags and severities, default sorting, not-found and error cases, async polling via get_screening, authentication, and credit costs. An agent has enough detail to call the tool correctly and interpret the response.

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

Parameters5/5

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

Although schema coverage is already 100%, the description adds significant meaning: taxIds accepts numbers or strings, ignores 'RO', and is capped at 100; label is purely a user-facing job name; confirm enables quote-only behavior and must be sent only after user approval. This goes well beyond the schema's field descriptions.

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

Purpose5/5

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

The description states a specific verb and resource: it verifies a list of Romanian companies by CUI and returns deterministic factual signals per company. It also explicitly distinguishes screen_companies from due_diligence and get_company by defining what each alternative does. The opening keyword block is noisy, but the core purpose is unmistakable.

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

Usage Guidelines5/5

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

There is an explicit disambiguation section ('Când NU e potrivit') that names due_diligence and get_company as alternatives and clarifies that screen_companies handles deterministic list screening. It also gives concrete usage context: accountants, credit control, bulk partner lists, and the sync/async threshold.

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

search_citiesAInspect

Keywords: localitate, localități, oraș, orașe, municipiu, comună, comune, sat, sate, sector, sectoarele Bucureștiului, cartier, nomenclator localități, SIRUTA, id localitate, slug localitate, ce localități are județul; city, cities, locality, localities, town, towns, municipality, commune, village, sector, district, settlement, list cities, lookup city, administrative divisions.

Nomenclatorul localităților României. Caută după nume parțial (insensibil la diacritice) și/sau filtrat pe județ; returnează {id, name, slug, type, countyId, countyName}. Tipuri: municipality, city, commune, village, sector, locality.

Când îl folosești:

  • "Câte sectoare are București?" / "Care sunt sectoarele Bucureștiului?"

  • "Listează comunele din județul Cluj" / "Ce orașe încep cu Cluj?"

  • "În ce județ e localitatea X?" (dezambiguare — același nume apare în mai multe județe)

  • Ai nevoie de id-ul intern al unei localități, sau de tipul ei (municipiu vs. comună vs. sat).

  • Validezi sau normalizezi un nume de localitate înainte să-l folosești.

Graniță față de search_companies: pentru a FILTRA firme pe localitate nu e nevoie de unealta asta — search_companies primește direct numele (city: ["Cluj-Napoca"]) și îl rezolvă singur, fuzzy. Unealta asta e despre localitatea ca entitate, nu despre firmele din ea.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoLista de ID-uri de localitate pentru filtrare. Mereu array.
nameNoSubstring în numele/slugul localității (ex: "cluj", "sector"). Insensibil la diacritice.
limitNoMărimea rezultatului (default 25, max 100).
offsetNoOffset paginare (default 0).
countyIdNoLista de ID-uri de județ pentru filtrare (ex: `[3]`). Mereu array, chiar și pentru un singur ID. Poți obține ID-uri din `search_counties`.

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are present, so the description carries the behavioral burden. It discloses search semantics (substring, diacritic-insensitive), the return shape, allowed locality types, and the fuzzy-resolution boundary vs. `search_companies`. It does not explicitly say 'read-only/no side effects', but the registry and return-wording make the lack of mutation clear enough.

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

Conciseness3/5

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

The core content is well-structured with bullets and a clear boundary section, but the long keyword block at the top is largely redundant and delays the actual definition. The description is informative but not tight; every element does not earn its place.

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

Completeness5/5

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

For a tool with no output schema and no annotations, this description is unusually complete: it gives return fields, type enumeration, concrete use cases, disambiguation behavior, pagination-related parameters via the schema, and sibling boundaries. 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.

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds useful context for `name` (partial, diacritic-insensitive) and county filtering, and it points to `search_counties` for county IDs, but it does not systematically enrich every parameter beyond what the schema already provides.

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

Purpose5/5

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

The description states a specific verb and resource: it is the Romanian localities registry, searches by partial name and/or county filter, and returns a defined shape. It also explicitly distinguishes itself from `search_companies`, so an agent can tell it apart from siblings without opening schemas.

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

Usage Guidelines5/5

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

A dedicated 'Când îl folosești' section lists concrete use cases (count sectors, list communes, disambiguate counties, validate names) and a 'Graniță față de search_companies' section explains when not to use it and which alternative to use instead. This is explicit when/when-not guidance.

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

search_companiesAInspect

Keywords: firme, companii românești, CUI, CAEN, industrie, județ, localitate, cifră de afaceri, profit, datorii, angajați, caută firme după filtre, export firmă, bază de date firme, search company, find business, Romanian companies database.

Caută firme românești sau identifică o firmă specifică după denumire. Folosește același set de filtre ca pagina /cauta-firme: name (denumire firmă, free text, prefix-friendly), județ, localitate, industrie, cod CAEN, tip societate (SRL/SA/PFA…), stare (în funcțiune/suspendată/radiată), telefon, dată înregistrare și 19 indicatori financiari din bilanț (cifră de afaceri, profit, datorii, angajați, capital propriu/social, active, venituri, cheltuieli, etc.) — toți cu interval [gte, lte] și an opțional. Sortare multi-câmp identică cu UI-ul.

Returnează totalCount, un eșantion de firme (cu CUI și URL profil) și webOrderUrl (link către /cauta-firme cu filtrele pre-aplicate).

Pentru a găsi o firmă după denumire, apelează cu name: "Nume Firmă" — primești top-N candidați cu CUI și județ pentru dezambiguare; apoi folosește get_company cu CUI-ul ales pentru profil complet.

IMPORTANT: când utilizatorul cere lista completă sau export CSV, prezintă-i webOrderUrl ca link clickabil — acolo selectează câmpurile dorite, vede prețul și plătește (credite sau card). Tool-ul NU inițiază comenzi.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoLocalități — array de ID-uri sau nume (ex: ["Cluj-Napoca","Sector 1"]). Echivalent `f[city][]`. Auto-completează `county` dacă nu e dat.
nameNoNumele firmei sau o parte din nume (free text, insensibil la diacritice, prefix-friendly via edge_ngram pe `nameNormalised`). Folosește acest parametru și pentru a identifica o firmă specifică după denumire (ex: "Altia", "Dedeman"). Echivalent `f[q]` din /cauta-firme.
limitNoMărimea eșantionului returnat (default 5, max 5 — identic cu preview-ul de pe /cauta-firme). Pentru lista completă/export, folosește `webOrderUrl`.
bsYearNoAnul bilanțului contabil aplicat ca default tuturor filtrelor financiare care nu au propriul `year`. Default (identic cu /cauta-firme): din IUNIE anul curent − 1, până în mai anul curent − 2. ⚠️ Anul cel mai recent are acoperire PARȚIALĂ - firmele care nu au depus încă bilanțul lipsesc din rezultat, fără avertisment. Dacă vrei acoperire maximă, trimite explicit anul precedent. Echivalent param top-level `bsYear`.
countyNoJudețe — array de ID-uri sau nume (ex: ["Cluj","Timiș"] sau [12,35]). Echivalent `f[county][]`.
equityNoCapital propriu (RON) — `{gte,lte,year?}`.
offsetNoOffset paginare (default 0).
stocksNoStocuri (RON) — `{gte,lte,year?}`.
netLossNoPierdere netă (RON) — `{gte,lte,year?}`.
orderByNoSortare multi-câmp. Trimite ca array de OBIECTE (nu stringuri), de ex: `[{"field":"netTurnover","direction":"desc"},{"field":"name","direction":"asc"}]`. Câmpuri: name, county, city, mainNaceCode, netTurnover, netProfit, socialCapital, averageNumberOfEmployees, registrationDate, taxId, random, size. Aliasuri RO: nume, judet, localitate, caen, cifra, profit, capitalSocial, angajati, dataInfintarii, cui. Echivalent `o[1][field]=direction`, `o[2][...]`.
hasPhoneNoFiltru telefon: "yes" (are telefon), "no" (nu are). Echivalent `f[hasPhone]`.
industryNoIndustrii — array de ID-uri (din `list_industries`) sau nume/slug (ex: [5] sau ["IT și software"]). Echivalent `f[industry][]`. Se expandează automat la coduri CAEN descendente.
naceCodeNoCoduri CAEN (clasă, 4 cifre) — array de string-uri (ex: ["6201","6202"]). Echivalent `f[naceCode][]`. Se expandează cu descendenți.
netProfitNoProfit net (RON) — `{gte,lte,year?}`. Echivalent `f[netProfit][...]`.
provisionsNoProvizioane (RON) — `{gte,lte,year?}`.
companyTypeNoTip societate — array de coduri din `LegalEntityType` (ex: ["SRL","SA","PFA"]). Echivalent `f[companyType][]`.
fixedAssetsNoActive imobilizate (RON) — `{gte,lte,year?}`.
liabilitiesNoDatorii (RON) — `{gte,lte,year?}`.
netTurnoverNoCifră de afaceri (RON) — `{"gte":int,"lte":int,"year":int?}`. Echivalent `f[netTurnover][gte|lte|year]`.
receivablesNoCreanțe (RON) — `{gte,lte,year?}`.
totalAssetsNoActive totale (RON) — `{gte,lte,year?}`. Calculat ca fixedAssets + currentAssets.
totalIncomeNoVenituri totale (RON) — `{gte,lte,year?}`.
growthFilterNoCreșterea cifrei de afaceri an/an, pe ultima pereche consecutivă de bilanțuri: "growing" (în creștere), "stable" (stagnare, bandă simetrică), "any" (implicit). Pragul implicit e 10%; îl schimbi cu `minGrowthPercent`.
totalCapitalNoCapital total (RON) — `{gte,lte,year?}`.
advanceIncomeNoVenituri în avans (RON) — `{gte,lte,year?}`.
currentAssetsNoActive circulante (RON) — `{gte,lte,year?}`.
socialCapitalNoCapital social (RON) — `{gte,lte,year?}`.
totalExpensesNoCheltuieli totale (RON) — `{gte,lte,year?}`.
companyPatrimonyNoPatrimoniu (RON) — `{gte,lte,year?}`.
minGrowthPercentNoPragul în procente pentru `growthFilter` (ex: 20 pentru „creștere peste 20%"). Fără el, "growing" înseamnă ≥ +10%.
registrationDateNoInterval dată înregistrare — `{"gte":"YYYY-MM-DD","lte":"YYYY-MM-DD"}`. Echivalent `f[registrationDate][gte|lte]`.
registrationYearNoScurtătură pentru anul înregistrării — `{"gte":2020,"lte":2024}`. Convertit intern la `registrationDate`. Echivalent `f[registrationYear][gte|lte]`.
stateRegistrationNoStare firmă — array cu valori din: "in_operation" (în funcțiune), "suspended" (suspendată), "deleted" (radiată). Acceptă și aliasuri RO/EN ("active"/"radiata"/etc.). Echivalent `f[stateRegistration][]`. **Default aplicat automat dacă nu specifici: `["in_operation"]`*
cashAtBankAndInHandNoDisponibilități bănești (RON) — `{gte,lte,year?}`.
averageNumberOfEmployeesNoNumăr mediu angajați — `{"gte":int,"lte":int,"year":int?}`.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries full responsibility. It discloses return format (totalCount, sample, webOrderUrl), the max limit of 5, the partial coverage issue with bsYear (with a warning), and explicitly states that the tool does NOT initiate orders. This is thorough behavioral disclosure.

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

Conciseness4/5

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

The description is lengthy but dense with necessary information. It is structured into clear sections: an introductory keyword block, a definition of what the tool does, return values, usage for name lookup, and an important note about webOrderUrl. While verbose, every sentence contributes useful content, 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.

Completeness5/5

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

Given the high complexity (35 parameters, no output schema), the description is remarkably complete. It covers the return values, the workflow for name-based lookup, the purpose of webOrderUrl for full data/export, and important caveats like the partial balance-sheet-year coverage. It addresses all essential aspects an agent would need to use this tool correctly.

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

Parameters5/5

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

Despite 100% schema coverage, the description adds substantial value beyond schema descriptions. It explains the name parameter's role in identifying a specific company, the default behavior and partial coverage of bsYear, the object format for orderBy, the meaning of growthFilter and minGrowthPercent, the default for stateRegistration, and provides equivalent UI parameter names (f[...]) for many filters.

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

Purpose5/5

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

The description explicitly states the tool searches Romanian companies and can identify a specific company by name. It clearly defines the action ('Caută firme românești sau identifică o firmă specifică după denumire') and distinguishes itself by mentioning the get_company tool for full profiles, which separates it from related tools.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use instructions: it explains that for identifying a specific company, call with 'name' and then use get_company with the CUI for full profile. It also tells when to use webOrderUrl for full lists/exports, and notes the tool does not initiate orders. This is clear and actionable.

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

search_countiesAInspect

Keywords: județ, județe, județul, ce județ, lista județelor, cod județ, cod auto, prefix auto, indicativ auto, abreviere județ, nomenclator județe, unități administrativ-teritoriale, regiune, id județ, slug județ, CJ, BV, IF; county, counties, county code, county id, list counties, administrative divisions, administrative units, Romanian counties, region, license plate prefix, NUTS, lookup county.

Nomenclatorul județelor României (41 de județe + municipiul București, 42 de rânduri în county). Caută după nume parțial (insensibil la diacritice) sau după ID și returnează {id, name, slug, shortCode}shortCode e codul auto (CJ, BV, IF).

Când îl folosești:

  • "Ce județ are codul CJ?" / "Ce înseamnă prefixul BV?"

  • "Listează județele care încep cu B" / "Câte județe are România?"

  • "Care e ID-ul județului Bistrița-Năsăud?" (când ai nevoie de id-ul intern)

  • Validezi sau normalizezi un nume de județ scris greșit ori fără diacritice înainte să-l folosești mai departe.

  • Construiești o listă de județe de parcurs (rapoarte pe județ, acoperire).

Graniță față de search_companies: pentru a FILTRA firme pe județ nu e nevoie de unealta asta — search_companies primește direct numele județului (county: ["Cluj"]) și îl rezolvă singur, fuzzy. Unealta asta e despre județul ca entitate, nu despre firmele din el.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoLista de ID-uri pentru filtrare (max 100). Mereu array, chiar și pentru un singur ID. Combinat cu `name` aplică și `name`.
nameNoSubstring în numele/slugul județului (ex: "clu", "bistrița"). Insensibil la diacritice.
limitNoMărimea rezultatului (default 50, max 100).
offsetNoOffset paginare (default 0).

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are present, so the description carries the full burden. It discloses that name matching is diacritic-insensitive, that id is always an array and combines with name via AND, and that the return fields include shortCode (license plate code). It does not explicitly state the operation is read-only, but as a search tool this is implied and not misleading. The description adds meaningful behavioral details beyond the schema.

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

Conciseness4/5

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

The description is front-loaded with a keyword block that is redundant for an AI agent but not harmful. The core description is well-structured with 'Când îl folosești' and 'Graniță' sections, making it easy to scan. It is longer than necessary due to the keyword list, but every sentence in the main body earns its place.

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

Completeness5/5

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

For a simple search tool with four parameters and no output schema, the description is exceptionally complete. It explains what it returns, when to use it, the boundary with a sibling tool, and provides usage examples. 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.

Parameters4/5

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

Schema coverage is 100% (all parameters described). The description adds context beyond the schema by explaining the meaning of shortCode (license plate code) and clarifying how id and name interact (combinat cu name aplică și name). It also gives example values like 'clu' and 'bistrița', which help the agent understand the fuzzy matching. While it doesn't detail limit/offset beyond schema, the added value is sufficient to raise the baseline from 3.

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

Purpose5/5

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

The description explicitly states the tool's function: it searches the Romanian county nomenclator (41 counties + Bucharest) by partial name or ID and returns {id, name, slug, shortCode}. It clearly distinguishes itself from siblings by naming search_companies as the alternative for filtering companies, making its purpose unambiguous.

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

Usage Guidelines5/5

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

The description provides concrete use cases (e.g., 'Ce județ are codul CJ?', validating misspelled county names) and explicitly states when NOT to use it: for filtering companies, search_companies handles county resolution directly. This gives the agent clear decision criteria.

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

search_personsAInspect

Keywords: persoană, administrator, asociat, reprezentant legal, lichidator, antreprenor, due diligence, conflict de interese, KYC, ONRC, search person, find administrator, beneficial owner.

Caută o persoană fizică (administrator, asociat, reprezentant legal, lichidator, mandatar) și află în câte firme românești apare. FREE.

Sursa: ONRC Open Data (Registrul Comerțului — Legea 265/2022 privind registrul comerțului). Profilurile sunt construite agregând aparițiile aceleiași persoane în mai multe firme, după nume + (când e public) dată / loc de naștere.

CÂND îl folosești:

  • "În câte firme apare X?" — caută numele, sortat desc după companyCount, ia top hit, apoi get_person.

  • "Cine sunt antreprenorii cu cele mai multe firme dintr-un județ?" — filtrează county, sortare implicită desc după companyCount returnează top serial-administratori.

  • "Persoana X are conflict de interese cu firma Y?" — caută X → get_person → caută taxId-ul Y în lista companiilor.

  • "X e lichidator / e implicat în insolvență?" — get_person afișează rolurile cu roleCategory: procedural.

  • KYC / due diligence — verifică structura cross-company a unui beneficiar real.

DEZAMBIGUARE: căutarea EXCLUDE structural clusterele de nume comun fără elemente discriminatorii (cele marcate UNRESOLVED) — pe toate tier-urile, și NU există parametru care să le includă. Ce primești sunt profiluri deja dezambiguate. Pentru nume frecvente pot rămâne totuși mai multe persoane distincte cu același nume: filtrează county sau birthYearFrom/birthYearTo ca să reduci candidații înainte de a cheltui credite pe get_person.

ACCES & COST:

  • ANONIM: maxim 10 rezultate, doar name + companyCount + profileUrl. Pentru disambiguare completă (an naștere, județ, confidence) — autentifică-te.

  • AUTENTIFICAT (free): până la 100 rezultate, inclusiv birthYear, knownCounties, occurrenceCount, confidence — toate câmpurile necesare ca LLM să aleagă fără call adițional.

  • Profilul complet (toate companiile, alias-uri, locul nașterii) e disponibil prin get_person — 1 credit per profil.

Confidence (autentificat):

  • HIGH: identificare sigură (CNP sau nume + DOB + locul nașterii).

  • MEDIUM: nume + DOB se potrivesc — probabil aceeași persoană.

  • LOW: doar nume; nume rar deci puțin probabil să fie altcineva.

  • UNRESOLVED: nume comun fără elemente discriminatorii — nu apare în rezultatele acestei unelte.

GDPR: niciun CNP nu e returnat. Toate datele provin din publicări legale ONRC.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFree-text name (e.g. "Popescu Ion"). Order-insensitive.
pageNoAlias vechi (1-based) pentru `offset`. Folosește `offset`.
limitNoCâte rezultate (1-10 anonim, până la 100 autentificat). Numele canonic, la fel ca la `search_companies` și `search_cities`.
countyNoCounty (residence or birth, fuzzy match). E.g. "Cluj".
offsetNoDe la al câtelea rezultat. Numele canonic.
pageSizeNoAlias vechi pentru `limit`. Folosește `limit`.
birthYearToNoInclusive upper bound on year of birth. Authenticated callers only.
birthYearFromNoInclusive lower bound on year of birth. Authenticated callers only.
minConfidenceNoOne of "high","medium","low","unresolved". Filters out lower tiers. Authenticated callers only.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so extensively. It discloses the data source (ONRC Open Data), aggregation logic by name and birth data, structural exclusion of UNRESOLVED clusters, anonymous vs authenticated access limits, confidence tier semantics, credit cost for get_person, and the GDPR constraint that no CNP is returned. This goes far beyond a basic operation description.

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

Conciseness4/5

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

The description is long but well-organized with clear headers, bullet lists, and bolded keywords. Almost every section earns its place given the complexity of auth tiers, confidence levels, and disambiguation rules. The opening keyword block is somewhat repetitive, but the overall structure makes the detail navigable rather than overwhelming.

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

Completeness5/5

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

There is no output schema, so the description must explain return values and behavior, and it does. It lists anonymous result fields (name, companyCount, profileUrl) and authenticated fields (birthYear, knownCounties, occurrenceCount, confidence), explains default sort behavior, and covers cost, access, disambiguation caveats, and follow-up via get_person. Nothing essential for correct invocation is missing.

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 the baseline is 3, but the description adds meaningful context by explaining how filters like county and birthYearFrom/To are used for disambiguation and by clarifying that minConfidence filters out lower tiers. It also maps anonymous vs authenticated limits to the limit parameter and directs users away from legacy page/pageSize aliases.

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

Purpose5/5

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

The description opens with a clear verb-and-resource statement: 'Caută o persoană fizică ... și află în câte firme românești apare.' It also distinguishes itself from get_person, which is the follow-up for full profiles, and from related search tools like search_companies and search_cities. The keyword block and role enumeration (administrator, asociat, lichidator) further specify the exact domain.

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

Usage Guidelines5/5

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

The 'CÂND îl folosești' section provides explicit, concrete use cases with complete workflows, such as 'În câte firme apare X?' followed by 'get_person', and conflict-of-interest checks via company taxId. It also explains when to filter by county or birth year to reduce candidates before spending credits, effectively giving both when-to-use and when-to-defer guidance.

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. 19 tool updates
    • First observeddue_diligence
    • First observedfind_prospects
    • First observedget_anaf_debts
    • First observedget_balance_sheets
    • First observedget_company
    • First observedget_company_competitors
    • First observedget_company_contracts
    • First observedget_company_network
    • First observedget_cpv_market
    • First observedget_financial_health
    • First observedget_market_stats
    • First observedget_person
    • First observedget_screening
    • First observedlist_industries
    • First observedscreen_companies
    • First observedsearch_cities
    • First observedsearch_companies
    • First observedsearch_counties
    • First observedsearch_persons

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    7 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables tracking competitor websites, changelogs, blog feeds, and pricing pages with meaningful diffs, classification, and Markdown digests via MCP tools for listing, adding, removing competitors, running checks, and retrieving digests or changes.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources