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.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 19 tools
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.
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.
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.
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 toolsdue_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 dimensiuneriskFlags[]— listă de semnale de risc cu severitate (critical/high/ medium/informational), categorie (financial/legal/governance/tax/ operational/reputational), titlu, descriere, șievidence[]— 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.
| Name | Required | Description | Default |
|---|---|---|---|
| taxId | Yes | Romanian CUI (Cod Unic de Înregistrare), e.g. 37418771. | |
| confirm | No | Acordul 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. | |
| refresh | No | Force a fresh report even if a cached version exists for |
TDQS
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.
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.
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.
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.
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.
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ă
seedCompaniescu 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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Câte firme returnezi (max 50; anonim maxim 5). | |
| county | No | Județe — array de nume sau ID-uri (ex: ["Cluj","Bihor"]). | |
| offset | No | Offset paginare (default 0). | |
| confirm | No | Acordul 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. | |
| industry | No | Industrii — array de ID-uri (din `list_industries`) sau nume/slug (ex: ["IT și software"] sau [21]). Se expandează automat la coduri CAEN. | |
| naceCode | No | Coduri CAEN clasă (4 cifre), ca string-uri (ex: ["7311","7312"]). Se combină cu industriile. | |
| maxTurnover | No | Cifră de afaceri maximă (RON). | |
| minTurnover | No | Cifră de afaceri minimă (RON, ultimul an disponibil). | |
| growthFilter | No | Filtru de creștere a cifrei de afaceri an/an: "growing", "stable", "any" (implicit). Pragul implicit e 10%; îl schimbi cu `minGrowthPercent`. | |
| maxEmployees | No | Prag maxim număr mediu angajați. | |
| minEmployees | No | Prag minim număr mediu angajați (din bilanț). | |
| seedCompanies | No | MOD 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. | |
| requireContact | No | Dacă true, doar firme cu website SAU telefon cunoscut. | |
| requireWebsite | No | Dacă true, doar firme cu website cunoscut. | |
| minGrowthPercent | No | Pragul în procente pentru `growthFilter` (ex: 20 pentru „creștere peste 20%"). Fără el, "growing" înseamnă ≥ +10%. | |
| maxCompanyAgeYears | No | Vârstă maximă a firmei (ani de la înregistrare). | |
| minCompanyAgeYears | No | Vârstă minimă a firmei (ani de la înregistrare). | |
| excludeStateDebtors | No | Dacă true, exclude firmele cu datorii ANAF cunoscute. | |
| publicSectorWinners | No | Contracte publice: "only" (doar câștigători SEAP), "exclude" (fără câștigători), "any" (implicit). |
TDQS
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.
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.
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.
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.
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.
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ștetotalGeneralși (în tier-ul full) detaliile pe buget. Acest fapt în sine e un semnal serios pentru due diligence.hasDebt: falseȘIcheckedAtQuartersetat → 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ȘIcheckedAtQuarter: 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.
| Name | Required | Description | Default |
|---|---|---|---|
| taxId | Yes | Romanian CUI (Cod Unic de Înregistrare). | |
| detail | No | "summary" (free, default) or "full" (paid, see ActionCostCatalog). | |
| confirm | No | Acordul 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Optional fiscal year (e.g. 2023). When null, returns all available years. | |
| taxId | Yes | Romanian CUI (Cod Unic de Înregistrare). |
TDQS
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.
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.
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.
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.
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.
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) șiprocedural(lichidatori, administratori judiciari — semnal de insolvență/lichidare, NU conducerea firmei). Nu le amesteca și nu prezenta un rol procedural drept „administrator". Pe firmele radiate,notespune explicit că persoanele FIGURAU ca reprezentanți la ultima publicare ONRC — folosește formularea aia, nu prezentul. ⚠️ Peste plafon primeștilegalRepresentatives.capReached: true,governanceCount/proceduralCount(câte persoane există) șicapMessage, cu listele GOALE. Asta NU înseamnă că firma n-are administratori - înseamnă că plafonul lunii e atins. Spune-i utilizatorului exact asta, cu mesajul dincapMessage; nu raporta „firma nu are reprezentanți legali". Peste plafon poți debloca firma curentă cuunlock: 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.
| Name | Required | Description | Default |
|---|---|---|---|
| taxId | Yes | Romanian CUI (Cod Unic de Înregistrare), e.g. 37418771. | |
| unlock | No | Deblochează 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. | |
| confirm | No | Acordul 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. | |
| include | No | Sub-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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| taxId | Yes | Romanian CUI (Cod Unic de Înregistrare). | |
| confirm | No | Acordul 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
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.
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.
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.
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.
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.
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 uncontractValuemare = venituri publice împrăștiate pe mai mulți clienți;distinctAuthorities: 1pe uncontractValuemare = toate veniturile publice vin de la un singur client public. Atât — raportează numărul și autoritatea, nu explicația.lastAwardDateraportat 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.
| Name | Required | Description | Default |
|---|---|---|---|
| taxId | Yes | Romanian CUI (Cod Unic de Înregistrare). | |
| detail | No | "summary" (free, default) or "full" (paid, 2 credits). | |
| confirm | No | Acordul 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| taxId | Yes | Romanian CUI (Cod Unic de Înregistrare). | |
| detail | No | "summary" (free, default) or "full" (paid, see ActionCostCatalog). | |
| confirm | No | Acordul 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Calendar year (default: latest covered year). | |
| detail | No | "summary" (free, top 10, default) or "full" (paid 3 credits, top 100). | |
| confirm | No | Acordul 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. | |
| cpvPrefix | Yes | CPV division (2 digits, e.g. "45") or class (4 digits, e.g. "4523"). |
TDQS
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.
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.
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.
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.
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.
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 înfull, 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:
nullpe 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șiroeemit flagnegativeEquity.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| taxId | Yes | Romanian CUI (Cod Unic de Înregistrare). | |
| detail | No | "summary" (free, default) or "full" (paid, see ActionCostCatalog). | |
| confirm | No | Acordul 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
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.
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.
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.
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.
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.
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 sauindustry.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ționalcounty(nume sau id, ex. "Cluj") pentru statistici județene șiyearpentru 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_companiesGĂSEȘTE FIRME individuale — folosește-l pentru „top N firme după cifra de afaceri" sau liste/export.get_market_statsdă 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.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | An opțional pentru count-uri (default: anul de referință). Percentilele rămân pe anul de referință. | |
| county | No | Județ opțional (nume sau id, ex. "Cluj"). Omite pentru statistici naționale. | |
| caenCode | No | Cod CAEN de clasă (4 cifre, ex. "6201"). Exclusiv cu `industry`. | |
| industry | No | Industrie Companero — nume, slug sau id (ex. "IT și software"). Exclusiv cu `caenCode`. |
TDQS
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.
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.
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.
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.
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.
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
isActiveper ocurrență;false= persoana nu mai apare în ultimul snapshot ONRC.Roluri istorice — trimite
onlyActive: false. Default etrue.
Răspunsul include:
Nume canonic + variante (alias-uri observate, ex. "POPESCU ION" vs "Ion Popescu")
Confidence cluster + flag
isCommonName(cândtrue, 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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 24-char hex PersonIdentity id (from search_persons). | |
| page | No | Alias vechi (1-based) pentru `offset`. Folosește `offset`. | |
| limit | No | Câte firme din listă (1-100, implicit 25). Numele canonic, la fel ca la celelalte unelte. | |
| offset | No | De la a câta firmă. Numele canonic. | |
| confirm | No | Acordul 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. | |
| pageSize | No | Alias vechi pentru `limit`. Folosește `limit`. | |
| onlyActive | No | Restrict to active roles only. Default true. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Id-ul jobului de verificare (din răspunsul screen_companies). | |
| includeItems | No | Dacă true, include și firmele individuale cu flag-urile lor (max 100, sortate după flag-urile high). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Nume opțional pentru job (ex. "Portofoliu clienți iulie"). | |
| taxIds | Yes | Listă 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. | |
| confirm | No | Acordul 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Lista de ID-uri de localitate pentru filtrare. Mereu array. | |
| name | No | Substring în numele/slugul localității (ex: "cluj", "sector"). Insensibil la diacritice. | |
| limit | No | Mărimea rezultatului (default 25, max 100). | |
| offset | No | Offset paginare (default 0). | |
| countyId | No | Lista 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Localități — array de ID-uri sau nume (ex: ["Cluj-Napoca","Sector 1"]). Echivalent `f[city][]`. Auto-completează `county` dacă nu e dat. | |
| name | No | Numele 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. | |
| limit | No | Mărimea eșantionului returnat (default 5, max 5 — identic cu preview-ul de pe /cauta-firme). Pentru lista completă/export, folosește `webOrderUrl`. | |
| bsYear | No | Anul 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`. | |
| county | No | Județe — array de ID-uri sau nume (ex: ["Cluj","Timiș"] sau [12,35]). Echivalent `f[county][]`. | |
| equity | No | Capital propriu (RON) — `{gte,lte,year?}`. | |
| offset | No | Offset paginare (default 0). | |
| stocks | No | Stocuri (RON) — `{gte,lte,year?}`. | |
| netLoss | No | Pierdere netă (RON) — `{gte,lte,year?}`. | |
| orderBy | No | Sortare 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][...]`. | |
| hasPhone | No | Filtru telefon: "yes" (are telefon), "no" (nu are). Echivalent `f[hasPhone]`. | |
| industry | No | Industrii — 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. | |
| naceCode | No | Coduri CAEN (clasă, 4 cifre) — array de string-uri (ex: ["6201","6202"]). Echivalent `f[naceCode][]`. Se expandează cu descendenți. | |
| netProfit | No | Profit net (RON) — `{gte,lte,year?}`. Echivalent `f[netProfit][...]`. | |
| provisions | No | Provizioane (RON) — `{gte,lte,year?}`. | |
| companyType | No | Tip societate — array de coduri din `LegalEntityType` (ex: ["SRL","SA","PFA"]). Echivalent `f[companyType][]`. | |
| fixedAssets | No | Active imobilizate (RON) — `{gte,lte,year?}`. | |
| liabilities | No | Datorii (RON) — `{gte,lte,year?}`. | |
| netTurnover | No | Cifră de afaceri (RON) — `{"gte":int,"lte":int,"year":int?}`. Echivalent `f[netTurnover][gte|lte|year]`. | |
| receivables | No | Creanțe (RON) — `{gte,lte,year?}`. | |
| totalAssets | No | Active totale (RON) — `{gte,lte,year?}`. Calculat ca fixedAssets + currentAssets. | |
| totalIncome | No | Venituri totale (RON) — `{gte,lte,year?}`. | |
| growthFilter | No | Creș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`. | |
| totalCapital | No | Capital total (RON) — `{gte,lte,year?}`. | |
| advanceIncome | No | Venituri în avans (RON) — `{gte,lte,year?}`. | |
| currentAssets | No | Active circulante (RON) — `{gte,lte,year?}`. | |
| socialCapital | No | Capital social (RON) — `{gte,lte,year?}`. | |
| totalExpenses | No | Cheltuieli totale (RON) — `{gte,lte,year?}`. | |
| companyPatrimony | No | Patrimoniu (RON) — `{gte,lte,year?}`. | |
| minGrowthPercent | No | Pragul în procente pentru `growthFilter` (ex: 20 pentru „creștere peste 20%"). Fără el, "growing" înseamnă ≥ +10%. | |
| registrationDate | No | Interval dată înregistrare — `{"gte":"YYYY-MM-DD","lte":"YYYY-MM-DD"}`. Echivalent `f[registrationDate][gte|lte]`. | |
| registrationYear | No | Scurtătură pentru anul înregistrării — `{"gte":2020,"lte":2024}`. Convertit intern la `registrationDate`. Echivalent `f[registrationYear][gte|lte]`. | |
| stateRegistration | No | Stare 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"]`* | |
| cashAtBankAndInHand | No | Disponibilități bănești (RON) — `{gte,lte,year?}`. | |
| averageNumberOfEmployees | No | Număr mediu angajați — `{"gte":int,"lte":int,"year":int?}`. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Lista de ID-uri pentru filtrare (max 100). Mereu array, chiar și pentru un singur ID. Combinat cu `name` aplică și `name`. | |
| name | No | Substring în numele/slugul județului (ex: "clu", "bistrița"). Insensibil la diacritice. | |
| limit | No | Mărimea rezultatului (default 50, max 100). | |
| offset | No | Offset paginare (default 0). |
TDQS
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.
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.
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.
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.
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.
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, apoiget_person."Cine sunt antreprenorii cu cele mai multe firme dintr-un județ?" — filtrează
county, sortare implicită desc dupăcompanyCountreturnează 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_personafișează rolurile curoleCategory: 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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Free-text name (e.g. "Popescu Ion"). Order-insensitive. | |
| page | No | Alias vechi (1-based) pentru `offset`. Folosește `offset`. | |
| limit | No | Câte rezultate (1-10 anonim, până la 100 autentificat). Numele canonic, la fel ca la `search_companies` și `search_cities`. | |
| county | No | County (residence or birth, fuzzy match). E.g. "Cluj". | |
| offset | No | De la al câtelea rezultat. Numele canonic. | |
| pageSize | No | Alias vechi pentru `limit`. Folosește `limit`. | |
| birthYearTo | No | Inclusive upper bound on year of birth. Authenticated callers only. | |
| birthYearFrom | No | Inclusive lower bound on year of birth. Authenticated callers only. | |
| minConfidence | No | One of "high","medium","low","unresolved". Filters out lower tiers. Authenticated callers only. |
TDQS
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.
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.
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.
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.
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.
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.
19 tool updates
- First observed
due_diligence - First observed
find_prospects - First observed
get_anaf_debts - First observed
get_balance_sheets - First observed
get_company - First observed
get_company_competitors - First observed
get_company_contracts - First observed
get_company_network - First observed
get_cpv_market - First observed
get_financial_health - First observed
get_market_stats - First observed
get_person - First observed
get_screening - First observed
list_industries - First observed
screen_companies - First observed
search_cities - First observed
search_companies - First observed
search_counties - First observed
search_persons
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables 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.167 npm1MIT
- AlicenseCqualityAmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs119 npm49 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceEnables 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

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.