Leadgen ONRC Romania
REMOTE · LEADGEN-MCP.ADRIANHOMELAB.COM
Romanian company data for agents: 4.2M ONRC firms, ANAF status, financials 2008–2025. Free key.
Available components
Last scanned (15 hours ago)
Scores higher than 56% of remote servers
Reachable. Last reached 22 Oct 2026.
Category CRM and Sales
Recent critical change
Authorization (20 Oct 2026). See the changelog before you install this server.
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (unwatch). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability64
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4078 tokens (~239/item across 17 items; 17 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management17
- Stability observed for 5 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 17 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 18 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 21 Oct 26 +1
- The server rewrote its instructions, which are the text every model session reads security
- Tool “get_usage” rewrote its description, which is the text the model reads security
- 20 Oct 26 −7
- Authorization: partial → fail ▼ critical
- The server rewrote its instructions, which are the text every model session reads security
- Tool “match_companies” rewrote its description, which is the text the model reads security
- Tool “lookup_financial_ratios” rewrote its description, which is the text the model reads security
- Tool “lookup_companies” rewrote its description, which is the text the model reads security
- Tool “report_issue” rewrote its description, which is the text the model reads security
- Tool “unwatch” is now declared destructive security
- 19 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “find_company_by_domain” rewrote its description, which is the text the model reads security
- Schema quality: 3657 → 4055 ▼ functional
- Stability: unverified → 0.03 ▲ functional
- New tool “unwatch” functional
- “lookup_by_category” added an optional parameter “sort” cosmetic
- “lookup_director” reworded the description of “compact” cosmetic
- “lookup_by_category” reworded the description of “main_activity_only” cosmetic
- “lookup_by_category” reworded the description of “county” cosmetic
- “lookup_by_category” reworded the description of “compact” cosmetic
- “lookup_business” reworded the description of “compact” cosmetic
- “find_company_by_domain” reworded the description of “compact” cosmetic
- “lookup_companies” reworded the description of “compact” cosmetic
- “match_companies” reworded the description of “compact” cosmetic
- 17 Oct 26 72
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 22 Oct 2026 · Probed https://leadgen-mcp.adrianhomelab.com/mcp?src=mcp-registry
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=adrianhomelab.com | CN=WE1,O=Google Trust Services,C=US | 28 Sept 2026 | 27 Dec 2026 | ECDSA 256 | ECDSA-SHA256 | ef9367ee9e34769a13040e68c5d591ab |
| SANs: adrianhomelab.com, *.adrianhomelab.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of leadgen-mcp.adrianhomelab.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| adrianhomelab.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| content-security-policy | default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; font-src 'self' data:; img-src 'self' data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self' |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | camera=(), microphone=(), geolocation=() |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://leadgen-mcp.adrianhomelab.com/mcp?src=mcp-registry | Verified | 200 | |
| http (plaintext) | http://leadgen-mcp.adrianhomelab.com/mcp?src=mcp-registry | HTTPS enforced | 301 | https://leadgen-mcp.adrianhomelab.com/mcp?src=mcp-registry |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
enrich_company Company profile with website contacts ~199
A whole-firm profile in one call: the ONRC registry record plus the contacts discovered on that firm's website, each labelled with a confidence and a source. Prefer this over lookup_business followed by extract_contacts when you want everything about one company. cui is its tax code; website overrides the registered one; max_pages bounds the crawl; refresh=true crawls now instead of answering from the cache.
| Name | Type | Req | Description |
|---|---|---|---|
| cui | string | yes | Romanian tax identification number (CUI), e.g. '2816464'; 'RO' and leading zeros are accepted. |
| max_pages | integer | – | Maximum number of pages to crawl (1-20, default 5). |
| refresh | boolean | – | true crawls now even if a cached result exists (default false: answer from the cache when there is one). |
| website | – | – | Optional website override (domain or URL). When omitted, the firm's registered website is used (an error if none is on file). |
| Name | Type | Req | Description |
|---|---|---|---|
| asOf | object|null | – | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. |
| cacheHit | boolean|null | – | true when answered from the cache. |
| company | object | – | A company record: companyName, cui, registrationCode, registrationDate (DD/MM/YYYY), legalForm, euid, address (a sole trader's PFA/II/IF locality only in an answer listing several firms, with address… |
| contacts | array|null | – | Contacts found, each with type, value, confidence and source; an email also has personal (true for a firstname.lastname@ address: GDPR art. 14 and Law 506/2004 apply), role addresses first. |
| crawlError | string|null | – | Why the crawl failed, if it did. |
| crawled | boolean|null | – | true when the site was crawled for this answer. |
| cui | string|null | – | The firm's CUI. |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| message | string|null | – | A sentence for the caller. |
| pagesCrawled | integer|null | – | Pages read. |
| website | string|null | – | The website crawled. |
| websiteSource | string|null | – | Where the website came from: registry or override. |
No examples provided.
extract_contacts Extract contacts from a website ~97
Crawl a company website and extract emails, phone numbers and social profiles. Accepts a bare domain or a full URL; max_pages (1-20, default 5) bounds the crawl.
| Name | Type | Req | Description |
|---|---|---|---|
| max_pages | integer | – | Maximum number of pages to crawl (1-20, default 5). |
| website | string | yes | The website to crawl: a bare domain ('example.com') or a full URL ('https://example.com'). |
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string|null | – | The site's registrable domain. |
| emails | array|null | – | Addresses on the site's own domain. |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| string|null | – | Facebook profile. | |
| github | string|null | – | GitHub profile. |
| string|null | – | Instagram profile. | |
| string|null | – | LinkedIn page. | |
| message | string|null | – | A sentence for the caller. |
| otherEmails | array|null | – | Other addresses found on the site. |
| pagesCrawled | integer|null | – | Pages read. |
| personalEmails | array|null | – | Addresses shaped like a person's (firstname.lastname@): personal data, so GDPR art. 14 and Law 506/2004 apply. Role addresses (office@) rank first. |
| phones | array|null | – | Phone numbers found. |
| socialLinks | array|null | – | Every social link found, best first. |
| string|null | – | X / Twitter profile. | |
| url | string|null | – | The start URL crawled. |
| youtube | string|null | – | YouTube channel. |
No examples provided.
find_company_by_domain Find the company behind a website ~222
Find the Romanian firm behind a website domain (dedeman.ro). Uses the registry's website field, else reads the site's home and legal/contact pages for the CUI or registration number it shows (matchedOn: registry_website, site_cui). Without one, it says so and offers name candidates from the page title or the domain name, each with a confidence (at most 0.7, never a match). One lookup.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level and what it did not check, phone, website, latest revenue and headcount, record url). |
| domain | string | yes | The website's domain ('dedeman.ro'); a URL or a www. host is reduced to it. Public domains only. |
| fields | – | – | Optional: keep only these company fields in each row, comma-separated (companyName,cui,county,risk; dotted paths such as risk.level work). Without it the full record is returned. |
| Name | Type | Req | Description |
|---|---|---|---|
| asOf | object|null | – | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. |
| attribution | string|null | – | The credit line to keep when redistributing the data (CC BY 4.0). |
| candidates | array|null | – | When not found (also when the site cannot be read): up to 3 firms whose name matches the page title or the domain name, each with a confidence (at most 0.7). |
| domain | string|null | – | The normalised domain. |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| fields | array|null | – | The company fields kept when fields or compact trimmed the rows. |
| found | boolean|null | – | Whether a firm was identified. |
| match | object|null | – | The identified firm: cui, companyName, matchedOn. |
| matchedOn | string|null | – | registry_website, site_cui or site_registration_code. |
| message | string|null | – | A sentence for the caller. |
| reason | string|null | – | When not found: no_cui_on_site or site_unreachable. |
| results | array|null | – | The company records, best first. |
| returned | integer|null | – | Rows in results. Every list answer carries it with this one meaning. |
| site | object|null | – | What was read from the site: url, pagesRead, title, cuis, registrationCodes, error. |
| total | integer|null | – | Number of company records returned (at most 5); the same as returned. |
| warnings | array|null | – | Notes on how the request was read (a clamped limit, a widened CAEN code, an ignored field). |
No examples provided.
get_usage Show my daily allowance ~86
Show your own allowance: plan, daily limit, lookups used today, how many remain, when it resets (00:00 UTC) and any credit balance. Free and never counted as a lookup. Limits: 30 anonymous MCP calls a day, 50 with a free API key from https://leadgen.adrianhomelab.com/start (an email address, no payment).
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| counted | boolean|null | – | Always false: this call is not counted. |
| daily_limit | integer|null | – | Lookups allowed per UTC day. |
| entitlements | object|null | – | What the plan includes. |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| identity | object|null | – | Who is counted: kind (key or anonymous) and counted_as. |
| links | object|null | – | get_a_key, pricing, docs. |
| message | string|null | – | A sentence for the caller. |
| plan | string|null | – | Plan name (free, pro, business). |
| remaining | integer|null | – | Lookups left today. |
| resets_at | string|null | – | When the allowance resets (ISO 8601, 00:00 UTC). |
| resets_in_seconds | integer|null | – | Seconds until the reset. |
| suspended | boolean|null | – | true when the key is suspended. |
| used_today | integer|null | – | Lookups used today. |
No examples provided.
lookup_business Look up a Romanian company ~305
Look up a Romanian company by name or CUI (tax code) in the official ONRC registry of 4.2M firms. Diacritic-insensitive ('paval' finds 'PAVAL'); a CUI matches exactly. The first call for a named Romanian company. Ranked with a score: live firms first (exact name, then words), closed ones after; county lifts. For 'firms that do X in Y', use lookup_by_category (an empty result may carry a hint naming it).
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level and what it did not check, phone, website, latest revenue and headcount, record url). |
| county | – | – | Optional county hint (diacritic-insensitive): firms registered there rank higher. Not a filter. |
| fields | – | – | Optional: keep only these company fields in each row, comma-separated (companyName,cui,county,risk; dotted paths such as risk.level work). Without it the full record is returned. |
| max_results | integer | – | Maximum number of companies to return (1-100, default 10). |
| query | string | yes | Company name or CUI (tax ID) to search for. Names are diacritic-insensitive ('paval' finds PAVĂL); a CUI ('2816464', 'RO2816464') matches exactly. |
| Name | Type | Req | Description |
|---|---|---|---|
| asOf | object|null | – | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. |
| attribution | string|null | – | The credit line to keep when redistributing the data (CC BY 4.0). |
| county | string|null | – | The county hint, if one was given. |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| fields | array|null | – | The company fields kept when fields or compact trimmed the rows. |
| found | boolean|null | – | false when a well-formed CUI is not in the snapshot. |
| hint | object|null | – | When a name search finds nothing but reads like a category question: the lookup_by_category call that answers it. |
| message | string|null | – | A sentence for the caller. |
| query | string|null | – | The query as given. |
| reason | string|null | – | Why nothing was found (not_found). |
| results | array|null | – | The company records, best first. |
| returned | integer|null | – | Rows in results. Every list answer carries it with this one meaning. |
| source | string|null | – | Data source: onrc (registry) or mfp (Ministry of Finance filings). |
| total | integer|null | – | Rows returned in this answer (at most max_results), not the number of firms that match; the same as returned (kept: the published v1 field). |
| warnings | array|null | – | Notes on how the request was read (a clamped limit, a widened CAEN code, an ignored field). |
No examples provided.
lookup_by_category Find companies by activity ~772
Find companies by what they do, not by name: a curated topic ('software', 'retail'), plain words ('dentists', a CAEN class title; see matched) or CAEN codes ('4321,4322'; 6201 also finds Rev.3 6210). Narrow by county; qualify by revenue, headcount, VAT, main activity. active_only (default) drops dead and ANAF-inactive firms.
| Name | Type | Req | Description |
|---|---|---|---|
| active_only | boolean | – | Default true: drop firms that are not a lead (struck off, dissolving, in liquidation, insolvent or bankrupt, activity suspended, or ANAF fiscally inactive). false returns every firm. |
| compact | boolean | – | Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level and what it did not check, phone, website, latest revenue and headcount, record url). |
| county | – | – | Optional county to narrow to (diacritic-insensitive: 'bucuresti', 'cluj'; a county town such as 'Cluj-Napoca' or a Bucharest sector is read as its county); omit for nationwide. An unknown county is a… |
| fields | – | – | Optional: keep only these company fields in each row, comma-separated (companyName,cui,county,risk; dotted paths such as risk.level work). Without it the full record is returned. |
| has_website | boolean | – | true keeps only firms with a website on file in the registry (default false). |
| legal_form | – | – | Optional legal form(s) to keep, comma-separated, case-insensitive: 'SRL', 'SA', 'PFA', 'II', or 'SRL,SA' (companies, no sole traders). Default: any form. |
| main_activity_only | boolean | – | Default false: a firm matches when the code is ANY of its authorised activities (ONRC lists a dozen per firm, most never practised). true keeps only firms whose DECLARED main activity is one of the c… |
| max_employees | – | – | Optional maximum average headcount on the latest filing. |
| max_results | integer | – | Maximum number of companies to return (1-100, default 10). |
| max_revenue | – | – | Optional maximum net turnover in RON on the latest filing. |
| min_employees | – | – | Optional minimum average headcount on the latest filing. |
| min_revenue | – | – | Optional minimum net turnover in RON on the latest filing (FY2025, else FY2024). Firms without a filing never match a band. |
| sort | string | – | Order of the results: 'newest' registrations first (default), 'revenue' (latest filing's turnover, biggest first) or 'employees' (headcount, biggest first); firms without a filing come last. |
| topic | string | yes | What the firms do: a curated topic ('software', 'retail'), plain words for a trade ('dentists', 'stomatologie'), a CAEN class title in Romanian or English, or CAEN codes ('6201' or '4321,4322'). Case… |
| vat_payer | – | – | Optional: true keeps VAT-registered firms only, false only non-VAT payers (ANAF data). Omit for both. |
| Name | Type | Req | Description |
|---|---|---|---|
| appUrl | string|null | – | The same list opened in the Leadgen app (CAEN codes, county, legal form, active and main-activity filters), to share with the user; null when the app cannot open it (more than 10 codes, a legal form… |
| asOf | object|null | – | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. |
| attribution | string|null | – | The credit line to keep when redistributing the data (CC BY 4.0). |
| availableTopicNames | object|null | – | Each curated topic id with its name, e.g. {"agriculture": "Agriculture & Food"}, next to availableTopics. |
| availableTopics | array|null | – | The curated topic ids, when the topic is unknown or ambiguous. |
| caenCodes | array|null | – | The CAEN codes searched, when given or derived as codes. |
| caenNames | array|null | – | The CAEN codes as asked, named: [{code, title (Romanian), titleEn}]. |
| candidates | array|null | – | When the words fit several activities (ambiguous_topic): the ones to choose from. |
| codesAdded | array|null | – | CAEN Rev.2/Rev.3 counterparts added to the search. |
| county | string|null | – | The county filter, if any. |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| fields | array|null | – | The company fields kept when fields or compact trimmed the rows. |
| filters | object|null | – | The filters applied (legalForm, activeOnly, revenue and headcount bands, vatPayer, mainActivityOnly ...). |
| inactiveFilteredOut | integer|null | – | Firms removed by active_only (null when off). |
| inactiveFilteredOutApproximate | boolean|null | – | true when that count is estimated. |
| label | string|null | – | Human label of what was matched. |
| matchTotal | integer|null | – | How many firms the whole list holds with every filter (active_only on; null when off): exact, or estimated when matchTotalApproximate is true. |
| matchTotalApproximate | boolean|null | – | true when matchTotal is estimated (matchTotalMargin: its 99% margin). |
| matchTotalMargin | integer|null | – | The 99% margin of an estimated matchTotal. |
| matched | object|null | – | How plain words were read: by, niche or class title, codes. |
| message | string|null | – | A sentence for the caller. |
| query | string|null | – | The topic as given. |
| results | array|null | – | The company records, best first. |
| returned | integer|null | – | Rows in results. Every list answer carries it with this one meaning. |
| sort | string|null | – | The order of results: newest, revenue or employees. |
| source | string|null | – | Data source: onrc (registry) or mfp (Ministry of Finance filings). |
| topic | string|null | – | The curated topic matched, if any. |
| total | integer|null | – | Rows returned in this answer (at most max_results), not the size of the match set: a full page (total == max_results) may have more; narrow the filters or raise max_results. The same as returned; the… |
| truncated | boolean|null | – | true when max_results was cut to the list cap (and the list is full). |
| warningDetails | array|null | – | The warnings that have a machine-readable form (the CAEN Rev.2/Rev.3 notes): [{code, params, message}], message the same English line as in warnings; null when none. |
| warnings | array|null | – | Notes on how the request was read (a clamped limit, a widened CAEN code, an ignored field). |
No examples provided.
lookup_companies Look up many companies by CUI ~207
Look up many Romanian companies by CUI in one call (up to 100): one result per input, in input order, each with found true/false and the company record. Each row is one lookup; rows past today's allowance come back not_processed (partial: true, remaining: rows to resend after the reset). fields or compact trims each record.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level and what it did not check, phone, website, latest revenue and headcount, record url). |
| cuis | – | yes | Up to 100 CUIs, as a list or one comma-separated string ('RO', spaces and leading zeros accepted, as in lookup_business). |
| fields | – | – | Optional: keep only these company fields in each row, comma-separated (companyName,cui,county,risk; dotted paths such as risk.level work). Without it the full record is returned. |
| Name | Type | Req | Description |
|---|---|---|---|
| asOf | object|null | – | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. |
| attribution | string|null | – | The credit line to keep when redistributing the data (CC BY 4.0). |
| dailyLimit | object|null | – | When partial: the daily-limit notice in the refusal vocabulary (error daily_limit_reached, message, limit, used, remaining allowance, resets_at, requested, processed, plan, get_a_key, pricing, docs,… |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| errors | integer|null | – | Rows that are input errors (empty, not a CUI, wrong control digit). |
| fields | array|null | – | The company fields kept when fields or compact trimmed the rows. |
| found | integer|null | – | Rows that matched a firm. |
| message | string|null | – | A sentence for the caller. |
| metering | object|null | – | What the batch cost: rows, counted, notCounted (input-error rows and rows not processed are not counted), notProcessed (when partial) and the rule. |
| notFound | integer|null | – | Well-formed CUIs not in the snapshot. |
| partial | boolean|null | – | true when today's allowance ran out partway: the first processed rows were answered, the rest have status not_processed (not run, not counted). |
| processed | integer|null | – | Rows answered, from the first one (input-error rows included). |
| remaining | integer|null | – | Rows not processed (the last ones): send them again after the reset. 0 when the whole batch ran. |
| results | array|null | – | Per input: input, cui, found, and company (the record) or error/reason; status not_processed for a row today's allowance did not cover. |
| source | string|null | – | Data source: onrc (registry) or mfp (Ministry of Finance filings). |
| total | integer|null | – | Number of input rows. |
| warnings | array|null | – | Notes on how the request was read (a clamped limit, a widened CAEN code, an ignored field). |
No examples provided.
lookup_director Find companies by director ~273
Find Romanian companies by the name of a director or legal representative (ONRC). Diacritic-insensitive. Whole words: 'pop maria' finds POP MARIA, not POPA MARIANA; prefix=true matches prefixes. The registry has no personal ID, so one name can be several people: homonyms and byCounty say so. Use this when you know a person rather than a firm.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level and what it did not check, phone, website, latest revenue and headcount, record url). |
| fields | – | – | Optional: keep only these company fields in each row, comma-separated (companyName,cui,county,risk; dotted paths such as risk.level work). Without it the full record is returned. |
| max_results | integer | – | Maximum number of companies to return (1-100, default 10). |
| name | string | yes | Director / representative name to search for (e.g. 'Ion Popescu'); diacritic-insensitive, each word a whole word of the name. |
| prefix | boolean | – | true matches each word as a prefix ('pop' also finds POPA, POPESCU); default false (whole words). |
| Name | Type | Req | Description |
|---|---|---|---|
| asOf | object|null | – | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. |
| attribution | string|null | – | The credit line to keep when redistributing the data (CC BY 4.0). |
| byCounty | object|null | – | Matching firms per county. |
| distinctCounties | integer|null | – | Number of counties the matches are in. |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| fields | array|null | – | The company fields kept when fields or compact trimmed the rows. |
| homonyms | boolean|null | – | true when the matches span several counties (likely several people). |
| match | string|null | – | words (whole words) or prefix. |
| message | string|null | – | A sentence for the caller. |
| note | string|null | – | What homonyms means for this name. |
| query | string|null | – | The name as given. |
| results | array|null | – | The company records, best first. |
| returned | integer|null | – | Rows in results. Every list answer carries it with this one meaning. |
| source | string|null | – | Data source: onrc (registry) or mfp (Ministry of Finance filings). |
| total | integer|null | – | Every matching firm, not just the rows returned. |
| totalIsLowerBound | boolean|null | – | true when the scan stopped early and total is a minimum. |
| warnings | array|null | – | Notes on how the request was read (a clamped limit, a widened CAEN code, an ignored field). |
No examples provided.
lookup_domain Domain WHOIS, DNS and email audit ~134
WHOIS plus DNS records (A, MX, NS, TXT) and an SPF/DMARC email-security audit for a domain. Use it to profile a company's web estate or check its email posture. include_dns and include_security toggle the two halves.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Domain name to look up (e.g. 'example.com'); a URL is reduced to its host. |
| include_dns | boolean | – | Include DNS records (A, AAAA, MX, NS, TXT, SOA); default true. |
| include_security | boolean | – | Include the SPF/DMARC email-security check; default true. |
| Name | Type | Req | Description |
|---|---|---|---|
| dns | object|null | – | Records by type: A, AAAA, MX, NS, TXT, SOA. |
| domain | string|null | – | The normalised domain. |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| message | string|null | – | A sentence for the caller. |
| resolvedIP | string|null | – | An address the domain resolves to. |
| security | object|null | – | hasSPF, spf, hasDMARC, dmarc. |
| whois | object|null | – | registrar, creationDate, expirationDate, updatedDate, nameServers, registrantOrg, registrantCountry. |
No examples provided.
lookup_financial_ratios Financial ratios and health score ~131
Financial analysis of a Romanian company: multi-year revenue trend (YoY, 3/5/10-year CAGR), margins, headcount, solvency and liquidity ratios, a 0–100 health score with its rule-by-rule breakdown, red flags, and peer percentiles within the same CAEN activity and county. Verdict: 'growing', 'stable' or 'distressed'. Use lookup_financials for the raw figures.
| Name | Type | Req | Description |
|---|---|---|---|
| cui | string | yes | Romanian tax identification number (CUI), e.g. '2816464'; 'RO' and leading zeros are accepted. |
| Name | Type | Req | Description |
|---|---|---|---|
| asOf | object|null | – | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. |
| attribution | string|null | – | The credit line to keep when redistributing the data (CC BY 4.0). |
| cui | string|null | – | The firm's CUI. |
| distress | boolean|null | – | true when the distress signals fire. |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| flags | array|null | – | Red flags. |
| found | boolean|null | – | Whether any filing is on record. |
| headcount | object|null | – | Latest headcount and its change. |
| healthScore | object|null | – | 0-100 score, band and its rule-by-rule components. |
| history | object|null | – | Years on record, loss years, revenue peak. |
| message | string|null | – | A sentence for the caller. |
| peers | object|null | – | Percentiles within the same CAEN activity and county. |
| ratios | object|null | – | Margins, equity ratio, debt to equity, liquidity, returns. |
| revenueTrend | object|null | – | Latest revenue, YoY growth, 3/5/10-year CAGR, trend label. |
| signals | array|null | – | The distress signals found. |
| source | string|null | – | Data source: onrc (registry) or mfp (Ministry of Finance filings). |
| total | integer|null | – | Number of fiscal years used. |
| verdict | string|null | – | growing, stable or distressed. |
| years | array|null | – | Per fiscal year figures and margins. |
No examples provided.
lookup_financials Annual financial statements ~123
Annual financial statements for a Romanian company from Ministry of Finance filings, every fiscal year on record since 2008: revenue, profit, headcount and balance-sheet lines in RON with each year's ratios (growth, margins, equity ratio, liquidity), plus a summary (3/5/10-year CAGR, loss years, health score). Resolve the firm with lookup_business first if you only have a name.
| Name | Type | Req | Description |
|---|---|---|---|
| cui | string | yes | Romanian tax identification number (CUI), e.g. '2816464'; 'RO' and leading zeros are accepted. |
| Name | Type | Req | Description |
|---|---|---|---|
| asOf | object|null | – | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. |
| attribution | string|null | – | The credit line to keep when redistributing the data (CC BY 4.0). |
| cui | string|null | – | The firm's CUI. |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| found | boolean|null | – | Whether any filing is on record. |
| message | string|null | – | A sentence for the caller. |
| source | string|null | – | Data source: onrc (registry) or mfp (Ministry of Finance filings). |
| summary | object|null | – | History, revenue growth (3/5/10-year CAGR), latest ratios, health score and band, flags. |
| total | integer|null | – | Number of fiscal years returned. |
| years | array|null | – | Per fiscal year: revenue, profit, loss, netResult, employees, assets, debt, equity (RON) and that year's ratios. |
No examples provided.
match_companies Match a list of records to firms ~249
Match a list of up to 500 records (name, optional county, domain or CUI) to Romanian firms: each row gets match {cui, companyName, confidence, matchedOn} and the record, or no_match with up to 3 candidates. A valid CUI wins (confidence 1.0). Each row is one lookup; rows past today's allowance come back not_processed (partial: true, remaining: rows to resend after the reset).
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | Optional: true keeps a short preset per row (name, CUI, county, city, legal form, risk level and what it did not check, phone, website, latest revenue and headcount, record url). |
| fields | – | – | Optional: keep only these company fields in each row, comma-separated (companyName,cui,county,risk; dotted paths such as risk.level work). Without it the full record is returned. |
| rows | array | yes | Up to 500 records, each {name, county, domain, cui, ref} (any of them; ref is your own id, echoed back), or a bare string (a CUI, a domain or a name). |
| Name | Type | Req | Description |
|---|---|---|---|
| asOf | object|null | – | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. |
| attribution | string|null | – | The credit line to keep when redistributing the data (CC BY 4.0). |
| dailyLimit | object|null | – | When partial: the daily-limit notice in the refusal vocabulary (error daily_limit_reached, message, limit, used, remaining allowance, resets_at, requested, processed, plan, get_a_key, pricing, docs,… |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| errors | integer|null | – | Rows that are input errors (nothing to match on). |
| fields | array|null | – | The company fields kept when fields or compact trimmed the rows. |
| matched | integer|null | – | Rows matched to a firm. |
| message | string|null | – | A sentence for the caller. |
| metering | object|null | – | What the batch cost: rows, counted, notCounted (input-error rows and rows not processed are not counted), notProcessed (when partial) and the rule. |
| noMatch | integer|null | – | Rows with no match above the threshold. |
| partial | boolean|null | – | true when today's allowance ran out partway: the first processed rows were answered, the rest have status not_processed (not run, not counted). |
| processed | integer|null | – | Rows answered, from the first one (input-error rows included). |
| remaining | integer|null | – | Rows not processed (the last ones): send them again after the reset. 0 when the whole batch ran. |
| results | array|null | – | Per row: row, input, status (matched or no_match), match {cui, companyName, confidence, matchedOn}, company, or candidates. |
| source | string|null | – | Data source: onrc (registry) or mfp (Ministry of Finance filings). |
| threshold | number|null | – | Confidence a row needs to be matched (0-1). |
| total | integer|null | – | Number of input rows. |
| warnings | array|null | – | Notes on how the request was read (a clamped limit, a widened CAEN code, an ignored field). |
No examples provided.
poll_watchlist Collect watchlist changes ~77
Collect everything the watch tools have found: call it to drain the changeset for every watch owned by your API key, most severe first. Company watches return an 'updated' entry with the changed fields and risk; CAEN and county watches return the 'new' firms registered since the last poll (200 a poll, the rest next).
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| active | array|null | – | Every watch you hold, changed or not: kind (company or caen), target (CUI or code), county, since, name. Remove one with unwatch. |
| asOf | object|null | – | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. |
| attribution | string|null | – | The credit line to keep when redistributing the data (CC BY 4.0). |
| email_alerts | string|null | – | How to get the same changes by email. |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| message | string|null | – | A sentence for the caller. |
| ok | boolean|null | – | true when the poll ran. |
| owner | string|null | – | Whose watches these are (key prefix or IP). |
| total | integer|null | – | Number of watches with news. |
| watches | array|null | – | Per watch: an 'updated' company with its changed fields and risk, or the 'new' firms registered in a watched activity. |
No examples provided.
report_issue Report missing or wrong data ~193
Report to the person who runs Leadgen what is missing or wrong: a missing field, firm or source (kind 'gap'), a wrong company record ('wrong_record', pass its cui), a bug, an idea. Free, never counted as a lookup. contact is optional (an address for a reply); nothing is mailed to it automatically. Registry records are corrected at the source (ONRC) and arrive with the next snapshot.
| Name | Type | Req | Description |
|---|---|---|---|
| contact | – | – | Optional email address for a reply; nothing is mailed to it automatically. |
| cui | – | – | Optional CUI of the firm the report is about (for 'wrong_record'). |
| kind | string | – | One of 'gap' (a missing field, firm or source; the default), 'wrong_record' (pass its cui), 'bug', 'idea', 'other'. |
| message | string | yes | The report, in plain words: what is missing or wrong. |
| Name | Type | Req | Description |
|---|---|---|---|
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| id | integer|null | – | The report's id. |
| kind | string|null | – | The kind filed. |
| message | string|null | – | A sentence for the caller. |
| note | string|null | – | For wrong_record: how registry records get corrected. |
| status | string|null | – | received. |
No examples provided.
unwatch Stop watching a company or activity ~147
Stop watching a company (cui) or a CAEN activity code (code, plus the county it was watched in, if any), on your API key: the watch and its baseline are removed. Unwatching something you do not watch changes nothing (removed: 0). poll_watchlist lists your active watches.
| Name | Type | Req | Description |
|---|---|---|---|
| code | – | – | A watched CAEN activity code (e.g. '6210'); give this or cui. |
| county | – | – | With code: the county the code was watched in (diacritic-insensitive); omit for a nationwide watch. |
| cui | – | – | CUI of a watched firm (e.g. '2816464'); give this or code. |
| Name | Type | Req | Description |
|---|---|---|---|
| active | array|null | – | The watches you still hold (as in poll_watchlist). |
| asOf | object|null | – | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. |
| attribution | string|null | – | The credit line to keep when redistributing the data (CC BY 4.0). |
| county | string|null | – | The CAEN watch's county; null for nationwide or a company. |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| kind | string|null | – | company or caen. |
| message | string|null | – | A sentence for the caller. |
| ok | boolean|null | – | true when the request was valid. |
| owner | string|null | – | Whose watches these are (key prefix or IP). |
| removed | integer|null | – | 1 when the watch was removed, 0 when you did not hold it. |
| target | string|null | – | The CUI or CAEN code. |
No examples provided.
watch_caen Watch an activity for new firms ~143
Watch a CAEN activity code, optionally scoped to one county, for newly registered firms. A registration-date cutoff is the baseline: only firms registered after it are reported, and poll_watchlist slides the cutoff forward so each new firm surfaces once. A retired CAEN Rev.2 code (6201) also watches its Rev.3 successor (6210), with a warning.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | CAEN activity code to watch (e.g. '6210'); a retired Rev.2 code also watches its Rev.3 successor. |
| county | – | – | Optional county name to scope the watch to (diacritic-insensitive); omit to watch nationwide. |
| Name | Type | Req | Description |
|---|---|---|---|
| alreadyWatching | boolean|null | – | true when you already held this watch (nothing changed). |
| asOf | object|null | – | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. |
| attribution | string|null | – | The credit line to keep when redistributing the data (CC BY 4.0). |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| message | string|null | – | A sentence for the caller. |
| ok | boolean|null | – | true when the watch is in place. |
| warnings | array|null | – | Notes on how the request was read (a clamped limit, a widened CAEN code, an ignored field). |
| watch | object|null | – | kind, target, owner (key prefix), county, baseline. |
No examples provided.
watch_company Watch a company for changes ~111
Register a company (by CUI) to monitor. Stores a fingerprint of its current registry record as the baseline; poll_watchlist then reports changes between monthly ONRC snapshots - a new director, a new CAEN activity, an address or status change - and when ANAF declares it fiscally inactive or its VAT status flips.
| Name | Type | Req | Description |
|---|---|---|---|
| cui | string | yes | Romanian tax identification number (CUI) of the firm to watch, e.g. '2816464'. Watching a firm you already watch changes nothing. |
| Name | Type | Req | Description |
|---|---|---|---|
| alreadyWatching | boolean|null | – | true when you already held this watch (nothing changed). |
| asOf | object|null | – | What to cite: registry (ONRC snapshot date), financialYear (fiscal year of the figures), anaf (day of the ANAF data), snapshot, published, source. |
| attribution | string|null | – | The credit line to keep when redistributing the data (CC BY 4.0). |
| error | string|null | – | Set only when there is no answer (empty_query, invalid_cui, data_unavailable, plan_required ...); such a call is not counted. |
| message | string|null | – | A sentence for the caller. |
| ok | boolean|null | – | true when the watch is in place. |
| watch | object|null | – | kind, target, owner (key prefix), county, baseline. |
No examples provided.
How do I install the Leadgen ONRC Romania MCP server?
Leadgen ONRC Romania is a hosted endpoint at https://leadgen-mcp.adrianhomelab.com/mcp?src=mcp-registry, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · leadgen-mcp.adrianhomelab.com
claude mcp add --transport http com-adrianhomelab-leadgen-onrc 'https://leadgen-mcp.adrianhomelab.com/mcp?src=mcp-registry'
What is the Leadgen ONRC Romania MCP server?
Leadgen ONRC Romania is an MCP server listed in the public MCP registry as com.adrianhomelab/leadgen-onrc. Romanian company data for agents: 4.2M ONRC firms, ANAF status, financials 2008–2025. Free key. This page covers its hosted endpoint (https://leadgen-mcp.adrianhomelab.com/mcp?src=mcp-registry).
Is the Leadgen ONRC Romania MCP server safe to use?
Leadgen ONRC Romania scores 67 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Leadgen ONRC Romania MCP server expose?
Leadgen ONRC Romania exposes 17 tools: lookup_business, lookup_companies, find_company_by_domain, match_companies, lookup_by_category, and 12 more. Their descriptions and schemas cost roughly 3,469 tokens of context every time the server is loaded.
Does the Leadgen ONRC Romania MCP server require authentication?
No. We connected to Leadgen ONRC Romania without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Leadgen ONRC Romania MCP server still maintained?
Leadgen ONRC Romania is still listed as active in the MCP registry. We last reached this channel on 22 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.