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
- Uptime
- 96.9% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 19 tools
The descriptions do exceptional disambiguation work, with explicit cross-references and 'NU confunda cu' notes between tools (e.g. get_cpv_market vs get_market_stats vs get_financial_health). Still, there is genuine overlap: get_balance_sheets, get_financial_health, and get_company(include balanceSheets) all surface financials, and search_companies vs find_prospects vs get_company all 'find companies', so an agent must read carefully to pick the right one.
All names use consistent snake_case with a verb_noun structure (get_*, search_*, list_*, find_*, screen_*). The verb prefixes are semantically appropriate (search for lookups, get for retrieval, screen for batch checks), so the pattern is predictable throughout.
19 tools is on the heavier side but justified by the broad domain: company data, financials, ANAF debts, public procurement (SEAP), person/network graphs, geographic reference lookups, screening, and prospecting. Each tool maps to a distinct resource or workflow rather than padding the surface.
Coverage is very strong for a read-only data platform: search and retrieval across companies, persons, cities, counties, and industries, plus financials, debts, procurement, networks, screening, and prospecting. Minor gaps remain (no direct side-by-side company comparison and no in-tool export — delegated to webOrderUrl), but core lifecycles are well covered.
Available Tools
19 toolsfind_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 carries the full burden and does so richly: pricing tiers (anonymous teaser of 5 results vs authenticated 3 credits per search), the confirm:true gating that returns a quote without spending, the rule that phone numbers are never shown in chat but exposed via contact.phone.known/seeOn, and explicit dataGaps reporting for missing fields. It also warns that the score measures criteria match, not company quality.
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 Input/Output/When-to-use/pricing sections, but the opening 'Keywords:' blocks in Romanian and English consume several lines of near-duplicate terms before any actual purpose is stated. This is retrieval-style filler rather than task guidance and delays the front-loading of what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description thoroughly describes the return shape (0-100 match score, per-criterion breakdown, natural-language motivation, profile link, webOrderUrl for CSV export, dataGaps) and covers the credit/spend model. It is complete enough to call correctly, with only minor omissions such as ordering/pagination nuances that pagination params partly cover.
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 already 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains that seedCompanies switches to a lookalike/embeddings mode combined with deterministic scoring, that growthFilter defaults to a 10% threshold adjustable via minGrowthPercent, and the exact behavior of confirm. This meaningfully raises it above the schema-only baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it finds Romanian companies matching a user-described ideal customer profile and returns them as a scored, justified prospect list from the 2.7M-company Companero database. It is clearly distinguishable from siblings like search_companies or screen_companies. The only weakness is that the purpose is buried beneath a large block of keyword aliases, so it is clear but not optimally front-loaded.
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 seven concrete example queries in Romanian and English plus an explicit LOOKALIKE mode with its own trigger phrases, so an agent knows when to invoke it. The credit-confirmation workflow (quote first, then re-issue with confirm: true) is spelled out. However, it never explicitly says which sibling tool to prefer for adjacent tasks (e.g. due_diligence or get_company), so alternatives are not contrasted.
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_authority_profileAInspect
Keywords: autoritate contractantă, primărie achiziții, spital achiziții, minister contracte, cine vinde la primărie, furnizorii unei instituții, contracte atribuite de, achizitor public, buyer profile, contracting authority, government buyer, public institution suppliers, SEAP, SICAP, tender awards by authority, achiziții publice instituție.
Profilul de CUMPĂRĂTOR al unei autorități contractante românești (primărie,
spital, minister, regie) din datele SEAP/SICAP (data.gov.ro): cât atribuie,
cui, pe ce domenii CPV. Parametrul taxId = CUI-ul autorității (îl găsești
cu search_companies sau de pe paginile /achizitii-publice/autoritati).
Două tier-uri (toggle prin detail):
detail: "summary"(DEFAULT, FREE): totaluri (valoare contracte, plafoane acorduri-cadru separat), TOP 10 furnizori ai autorității, domeniile CPV principale, trend anual.detail: "full"(PAID, 2 credite): la fel, dar TOP 100 furnizori — harta completă a relațiilor comerciale ale instituției.
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 (SEAP nu publică split-ul).
Acoperire: atribuiri publicate din 2018 încoace, fără achiziții directe.
Când îl folosești:
"Cine vinde la Primăria X?" / "Ce furnizori are spitalul Y?"
"Cât a atribuit ministerul Z anul trecut și pe ce domenii?"
Pregătirea unei oferte: ce cumpără instituția și de la cine cumpără azi.
Jurnalism / due diligence pe relația unei firme cu o instituție.
Pentru piața unui domeniu CPV folosește get_cpv_market; pentru contractele câștigate de O FIRMĂ, get_company_contracts; pentru competitorii ei la stat, 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 |
|---|---|---|---|
| taxId | Yes | CUI-ul autorității contractante. | |
| detail | No | "summary" (free, top 10, default) or "full" (paid 2 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. |
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 meets it: it discloses the two paid/free tiers and their credit costs, the confirm:true cost-confirmation flow, and interpretation caveats (contractValue excludes frameworkValue, association wins counted in full per member, coverage from 2018 with no direct purchases). These are exactly the behaviors an agent could not infer otherwise.
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 front-loaded with sections (tiers, interpretation caveats, when-to-use, alternatives, cost confirmation), but roughly seven lines of keyword stuffing ('autoritate contractantă, primărie achiziții...') occupy prime space and contribute little to an agent deciding or invoking the tool. Useful density is high, but a meaningful chunk of the text 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 no-annotation, no-output-schema tool this is complete: it covers both tiers and their costs, the confirmation protocol, coverage limits, and value-interpretation traps, leaving nothing an agent needs to call it correctly unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real meaning beyond the schema: it tells the agent where to obtain taxId (search_companies or the /autoritati pages) and contrasts the two detail tiers by output size and cost. The added value is genuine but modest, since the schema already defines all three fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Profilul de CUMPĂRĂTOR al unei autorități contractante românești' from SEAP/SICAP data, with the exact scope (cât atribuie, cui, pe ce domenii CPV). It explicitly names what it is not by routing to get_cpv_market, get_company_contracts and get_company_competitors, so an agent can distinguish it from siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'Când îl folosești' section lists concrete trigger queries ('Cine vinde la Primăria X?', offer preparation, journalism/due diligence) and closes with explicit alternatives and the condition selecting each. Nothing 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_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, the description carries the full behavioral burden and does so extensively: free vs paid data, authentication requirements for `legalRepresentatives`, monthly caps, `capReached` semantics, `unlock` cost, phone-number handling, and the `confirm` estimate flow. It also warns not to misreport capped or procedural legal representatives.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is buried after a long keyword list, and the description is very long. However, the cost, cap, and confirmation details are structured and relevant for a tool with this much conditional behavior, so the verbosity is mostly justified.
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 are no annotations and no output schema, but the description compensates by explaining return behavior, credit usage, legal-representative caps, phone-number visibility, and the confirmation flow. An agent has enough information to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema description coverage is 100%, the description adds substantial meaning beyond the schema: it explains `include` token and object forms, modifiers like `balanceSheets:last10` and year ranges, and the cost/auth/cap implications of `legalRepresentatives`, `unlock`, and `confirm`.
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 returns the profile of a Romanian company by CUI/tax ID. It also explicitly distinguishes itself from `search_companies`, which finds companies by criteria rather than by known tax ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear when-to-use condition: use when you already have the CUI and want that company's profile. It names `search_companies` as the alternative and explains when to use each `include` sub-resource.
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 profilul individual (get_company): 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?
With no annotations, the description carries the full burden and does so: it discloses tier pricing (free vs 10 credits), the DEVIZ/confirm protocol, edge-confidence rules, exclusion of insolvency practitioners, isHub handling, computed:false semantics, and what the tool deliberately does NOT expose (GDPR/DPIA pattern inference). This is unusually rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The body is well organized with tier, semantics and usage sections, but it opens with a very large bilingual keyword block that consumes a lot of space without telling an agent anything actionable about invoking the tool. The content is long enough that the genuinely important routing sentences are buried mid-description.
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?
No output schema exists, yet the description specifies the returned fields for both tiers (groupSize, connectorCount, connectors[], groupMembers[], etc.) and the computed flag, so an agent knows what to expect. Combined with the cost/confirm rules, nothing needed 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 baseline is 3, but the description adds real meaning: it enumerates the exact return payload of detail='summary' vs 'full', quantifies the cost of each, and explains that confirm without an explicit call returns a quote rather than consuming credits. That goes beyond the schema's terse enum note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returnează GRUPUL DE FIRME al unei companii românești (după CUI)') and immediately scopes it to network/group connections via shared persons. It explicitly distinguishes itself from get_company, get_financial_health and get_balance_sheets, so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes an explicit 'Când îl folosești' section with four concrete trigger phrasings, names the sibling tools that cover the other dimensions, and spells out the free vs paid tier decision. The confirm/cost flow adds a further explicit procedural condition.
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"(GRATUIT, dar CERE CONT): 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: GRATUIT pe ambele tieruri. detail: "full" cere însă un cont: la un
apel anonim pornește fluxul de autorizare, iar summary rămâne disponibil
fără 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). | |
| detail | No | "summary" (free, anonymous) or "full" (free as well, but requires an account). |
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 does so: it discloses the pure-computation/no-LLM nature, the free cost on both tiers, that `detail: "full"` triggers an authorization flow for anonymous callers while `summary` stays anonymous, the `confirm: true` deviz-then-rerun mechanism, and that the confirm/cost paragraph is generic boilerplate. It also documents edge semantics beyond structured data: `null` means uncalculable (≠ 0), negative equity emits a `negativeEquity` flag, and industry positioning requires segments of ≥30 firms with the 1.1/2.6 Z″ zone boundaries.
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 bolded group headers and bullets, but the opening is a large SEO-style keyword dump in two languages that adds search-surface noise rather than selection value. The trailing cost/confirm paragraph is generic boilerplate that states the tool is free on both tiers, making its 'credits would be consumed' scenario largely non-applicable here.
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?
No output schema exists, so the description must explain returns — and it does, listing every indicator group, the tier-dependent payload, the Altman Z″ component breakdown, industry percentile basis, and the `null`/`negativeEquity` conventions. Slightly reduced because the priority-order and default behavior of `detail` are stated but the actual response shape per tier is described narratively rather than precisely.
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 substantially enriches the `detail` parameter beyond the schema's one-line gloss: `summary` is DEFAULT and FREE, returns netMargin + leverageRatio + turnoverGrowth for the latest year plus industry position, while `full` is multi-year and adds Altman Z″ components and duel-segment positioning. taxId is only glossed as 'Romanian CUI', but that identifier is well understood.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Calculează și returnează indicatori financiari determiniști pentru o firmă românească după CUI, din bilanțurile ANAF', and enumerates the exact indicator groups produced. The purpose is unambiguous, but it never explicitly contrasts itself with the sibling get_balance_sheets (raw statements) versus this computed-ratio tool, so the differentiation is implicit rather than stated.
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?
Includes a dedicated 'Când îl folosești' section with concrete trigger phrasings ('Care e lichiditatea / solvabilitatea firmei X?', Altman Z questions, margin evolution) plus named scenarios (due diligence pre-collaborare, credit/factoring analysis, B2B screening). It also gives the selection rule between the tool's own tiers: use `summary` for the competitive-position question, `full` for complete due diligence / credit analysis.
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?
With no annotations, the description carries the full burden and does so well: it discloses data provenance (ANAF balance sheets + ONRC registry, precomputed), the ≥30-firms threshold for percentiles, the national-fallback behavior flagged via usedNationalFallback, the smallSegment signal, and that the tool is free.
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 organized into purpose, selection rules and disambiguation, but it opens with a large bilingual keyword dump that is largely SEO noise for an agent and inflates the size. The substantive content earns its place; the keyword block does not.
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 no-annotation, no-output-schema tool of this complexity, the definition covers return contents, edge-case fallbacks, segmentation constraints and routing to siblings thoroughly enough that an agent can call it correctly without guessing.
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 a 3 is the baseline, but the description adds real meaning beyond the schema: caenCode must be exactly 4 digits and 2–3 digit codes are rejected (with the reason), caenCode and industry are mutually exclusive, industry accepts name/slug/id, and year affects only counts while percentiles stay on the reference year.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb+resource: aggregated statistics for a Romanian market segment (industry or 4-digit CAEN code, optionally narrowed to a county), and enumerates the returned metrics. It explicitly contrasts itself against search_companies, list_industries, get_cpv_market and get_financial_health.
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 'when to use' section with representative queries (median turnover in Cluj software, company formation/dissolution counts, market sizing) and a dedicated disambiguation block naming each sibling it should not be confused with, plus the reason. Nothing 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):
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 and delivers: auth requirement, sync behaviour for ≤20 CUIs vs async job for 21–100 with jobId/status, per-company credit pricing with unused CUI not charged, the `confirm: true` quote-then-execute flow, flag lists with severity tiers, default sort order, and the caveat that outputs are facts not verdicts. It even documents the `status_event` / legacy `insolvency_history` naming change.
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?
Core content is well-structured and front-loaded with the operative behaviour, sync/async rules, and pricing. However, the twin RO/EN keyword blocks are long and largely duplicate content already conveyed by the body, which bloats the definition well past what an agent needs to select and invoke 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 non-annotated, no-output-schema tool, the description is essentially complete: it explains inputs, cost mechanics, confirmation gating, sync/async routing with the follow-up tool named, the flag vocabulary with severities, sort behaviour, and the semantic warning about state events not implying insolvency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning on top: the max of 100 CUIs and the error on overflow, the RO-prefix handling, the purpose of `label` as a job name, and crucially the behavioural consequence of list size (sync vs async). The `confirm` parameter's negotiation semantics (never send proactively, ask the human first) are reinforced beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource: it verifies a LIST of Romanian companies by CUI and returns deterministic factual signals per company (inactive/deregistered, ONRC state events, ANAF debts, negative equity, financial pressure, etc.). It explicitly contrasts itself with the sibling `get_company` (single-profile lookup) and `get_screening` (async result retrieval), so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Has an explicit 'Când NU e potrivit' disambiguation block naming the alternative (`get_company` = individual profile, `screen_companies` = list signals), and names intended users (accountants, credit control, distributors with many clients). It also states the split between synchronous and asynchronous flows and the tool used to retrieve async results.
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?
With no annotations, the description carries the full behavioral burden, and it does disclose a lot: diacritic-insensitive matching, the returned object shape, the closed set of locality types, and the ambiguity-disambiguation behavior. It does not mention auth/permission requirements, rate limits, or what happens on empty results, but for a read-only lookup the coverage is solid.
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-organized into purpose, return contract, and when-to-use sections, and it is front-loaded. However, the opening paragraph is a very long keyword dump ('localitate, localități, oraș...'), which is retrieval-oriented padding rather than description; it inflates the definition substantially without adding semantic guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param, no-required, no-annotation, no-output-schema tool, the description supplies the return fields, the type vocabulary, the filters, and the sibling boundary, which is nearly everything needed to invoke it correctly. The only gaps are operational details (pagination behavior beyond schema, error/empty-result handling) that 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 already 100%, so the baseline is 3, but the description adds real meaning: 'name' is substring + diacritic-insensitive, and countyId filtering is tied to the disambiguation use case ('același nume apare în mai multe județe'). It does not restate the 'Mereu array' or pagination defaults, which is correct since the schema handles those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Nomenclatorul localităților României. Caută după nume parțial... filtrat pe județ') and lists the exact return shape and entity types. It explicitly distinguishes itself from siblings, especially search_companies and implicitly search_counties, so an agent can tell which tool to pick without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides four concrete when-to-use scenarios (counting Bucharest sectors, listing communes in Cluj, disambiguating a locality name across counties, resolving an internal id/type) plus an explicit boundary rule against search_companies. This is the strongest part of the definition.
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, the description carries the full burden and does disclose important behavior: the tool does NOT place orders ('Tool-ul NU inițiază comenzi'), results are capped at a sample (limit max 5) with a webOrderUrl escape hatch, and the most-recent balance-sheet year has partial coverage. It omits auth, rate limits, and what happens on huge result sets, so it is strong but not exhaustive.
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 substantive paragraphs are well-ordered and earn their place, but the opening 'Keywords:' block is a long SEO-style term list that adds selection value for a human searcher, not for an agent choosing a tool. That block dilutes the front-loading; the actual purpose statement should come first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 35-parameter search tool with a fully documented schema but no output schema, the description adequately covers the return shape (totalCount, sample with CUI and profile URL, webOrderUrl) and the name-lookup workflow. A note about pagination interaction between offset/limit and the >5 cap would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 35 parameters including the {gte,lte,year} shape and the bsYear default warning. The description adds an overview of the filter set and the note that sorting matches the UI, but no syntax or semantics beyond what the schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('Caută firme românești sau identifică o firmă specifică') and states the scope precisely: the same filter set as /cauta-firme. It also differentiates itself from siblings by routing to get_company for the full profile and list_industries for industry IDs, so an agent can tell it apart from find_prospects or screen_companies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-to-use path ('Pentru a găsi o firmă după denumire, apelează cu name... apoi folosește get_company cu CUI-ul ales') and a when-not-to-use path for full exports (present webOrderUrl instead). It does not, however, distinguish itself from the many overlapping siblings like find_prospects, screen_companies, or get_screening, leaving an agent to infer the boundary.
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?
With no annotations provided, the description carries the burden and does well: it discloses that matching is diacritic-insensitive and partial, that the dataset is fixed at 42 rows, the exact return fields, and that shortCode is the license-plate code. It does not mention auth requirements or rate limits, but for a pure read-only lookup these are minor 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 usage and boundary prose is tight and front-loaded, but the tool is preceded by a dense keyword-stuffing block of ~30 Romanian and English synonyms that consumes roughly the first third of the text. That block is search-SEO filler rather than instruction the agent needs, diluting structure.
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 small read-only lookup with no annotations, the description covers purpose, triggers, boundaries, and the returned fields (compensating for the absent output schema). Only auth/error behavior is unaddressed, which is a modest gap given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, name, limit, and offset including defaults and the diacritic-insensitive matching. The description largely restates this ('Caută după nume parțial (insensibil la diacritice) sau după ID'), adding little beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (caută) and resource (nomenclatorul județelor României, 42 rows in `county`), and specifies the return shape `{id, name, slug, shortCode}`. It explicitly carves out its scope against the sibling `search_companies`, so an agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a dedicated 'Când îl folosești' block with concrete trigger questions ('Ce județ are codul CJ?', 'Listează județele care încep cu B'), plus a negative boundary: to filter companies by county, use `search_companies` instead. When, when-not, and the alternative are all explicit.
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 behavioral burden and does so thoroughly: it discloses anonymous vs authenticated result fields and limits, that full profiles cost 1 credit via get_person, the meaning of each confidence tier, the ONRC data source, and GDPR handling (no CNP returned). It also explains that common-name UNRESOLVED clusters are excluded before returning results. This is rich, transparent operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and opens with a keyword list that does little to help an agent select the tool, which weakens front-loading. However, the remaining sections are well-structured with clear headings and dense, useful routing information. Minor verbosity aside, every substantive paragraph earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 optional parameters, no annotations, and no output schema, the description is exceptionally complete: it covers purpose, usage, disambiguation, access tiers, cost, confidence semantics, data source, and GDPR. It also explains what fields are returned in each access mode and directs agents to get_person for full profiles. Nothing critical 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 description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by stating the default sort order (descending by companyCount), the effect of minConfidence tiers, and how county and birthYearFrom/birthYearTo filters help disambiguate before spending credits. These operational semantics go beyond the schema's parameter definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Caută o persoană fizică ... și află în câte firme românești apare.' It also differentiates from the sibling get_person by noting that full profiles require get_person and one credit. An agent can immediately tell this is a search tool for natural persons and how it differs 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 when-to-use scenarios with step-by-step guidance, including routing to get_person for full profiles and using county or birth-year filters for disambiguation. It also states that UNRESOLVED clusters are structurally excluded and no parameter can include them. This is comprehensive usage guidance with alternatives and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
get_financial_health1 field changed- changed
Input schema / properties / detail / descriptionPrevious value: -"\"summary\" (free, default) or \"full\" (paid, see ActionCostCatalog)."New value: +"\"summary\" (free, anonymous) or \"full\" (free as well, but requires an account)."
3 tool updates
- Removed
due_diligence - Added
get_authority_profile - Changed
get_financial_health1 field changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "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.", - "type": "boolean" -}
8 tool updates
- Changed
find_prospects5 fields changed- removed
Input schema / properties / county / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / industry / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / naceCode / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / seedCompanies / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / requiredRemoved value: -[]
- Changed
get_company1 field changed- removed
Input schema / properties / include / itemsRemoved value: -{ - "type": "string" -}
- Changed
get_market_stats1 field changed- removed
Input schema / requiredRemoved value: -[]
- Changed
screen_companies1 field changed- removed
Input schema / properties / taxIds / itemsRemoved value: -{ - "type": "string" -}
- Changed
search_cities3 fields changed- removed
Input schema / properties / countyId / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / id / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / requiredRemoved value: -[]
- Changed
search_companies8 fields changed- removed
Input schema / properties / city / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / companyType / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / county / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / industry / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / naceCode / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / orderBy / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / stateRegistration / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / requiredRemoved value: -[]
- Changed
search_counties2 fields changed- removed
Input schema / properties / id / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / requiredRemoved value: -[]
- Changed
search_persons1 field changed- removed
Input schema / requiredRemoved value: -[]
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.1611 npm1MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs117 npm54 PyPIMIT
- AlicenseAqualityCmaintenanceRevnuvo Company Intelligence tells AI agents what changed at a company, with evidence. It observes company websites, technologies, and DNS over time and returns timestamped, confidence-aware changes, signals, and monitoring.9MIT

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.