search_companiesSearch any of 27 national company registries by name or structured filters. Single-country or multi-country fan-out.
Entry-point tool for cross-jurisdiction research. Two calling modes: pass a single `jurisdiction` code for a direct query, or pass a `jurisdictions` array to fan out across candidate countries with a user-confirmation dialog (on MCP clients that support elicitation). Returns unified top-level fields (jurisdiction, company_id, company_name, status, incorporation_date, registered_address) plus the registry's raw response under `jurisdiction_data`.
| Name | Type | Required | Description |
|---|---|---|---|
jurisdiction | string | no | ISO code for single-country search. Exactly one of jurisdiction or jurisdictions. |
jurisdictions | string[] | no | Array of ISO codes for multi-country fan-out (free=3, pro=10, max=30, enterprise=unlimited). |
query | string | no | Company name or keyword. May be empty on FR/IE/AU when using structured filters. |
limit | integer | no | Results cap (1–250, default 10). |
curl -sL https://openregistry.sophymarine.com/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_companies","arguments":{"jurisdiction":"GB","query":"Revolut","limit":3}}}'
Sample of the returned JSON:
{ "jurisdiction":"GB", "company_id":"08804411", "company_name":"REVOLUT LTD", "status":"active", "incorporation_date":"2013-12-06", "registered_address":"30 South Colonnade, London, E14 5HX" }
AU - AustraliaBE - BelgiumCA - Canada (federal)CA-BC - Canada - British ColumbiaCA-NT - Canada - Northwest TerritoriesCH - SwitzerlandCY - CyprusCZ - CzechiaES - SpainFI - FinlandFR - FranceGB - United KingdomHK - Hong KongHR - CroatiaIE - IrelandIM - Isle of ManIS - IcelandIT - ItalyJP - JapanKR - South KoreaKY - Cayman IslandsLI - LiechtensteinMC - MonacoMX - MexicoMY - MalaysiaNO - NorwayNZ - New ZealandPL - PolandRU - RussiaSE - SwedenTW - TaiwanNo — use it to find the right company_id first, then pass that id to get_company_profile for the full record (status detail, raw upstream fields, etc.). Officers / shareholders / PSC / filings each have their own tool. Search returns a digest; get_company_profile is the read.
Pass jurisdictions: ["GB","IE","FR"] instead of jurisdiction. Parallel fan-out, results concatenated. Per-minute cap: free 3, pro 10, max 30, enterprise unlimited.
ISO 3166-1 alpha-2. Live list at /llms.txt or list_jurisdictions. Subdivision codes like CA-BC also work. Unknown codes return error.code: "unknown_jurisdiction".
Empty query is allowed on FR Sirene, IE CRO, AU ABR — but only if you pass other structured filters (postal code, SIREN/ABN, SIC). Per-registry filter names: call list_jurisdictions for each country's schema.
OpenRegistry queries the official government registry directly at request time, and exposes officers and shareholders via get_officers / get_shareholders — newly incorporated and same-day-amended records show up the moment they're filed. OpenCorporates serves a historical cached copy on its own refresh cadence and does not expose officers or shareholders for most jurisdictions.
30 req/min per user, 3-country fan-out cap. Pro 180, Max 900, Enterprise 3000. Counted per user.
Most registries only return name digests on search; full fields need a get_company_profile follow-up. Inline-on-search exceptions: GB Companies House and FR Sirene. Don't assume either field is populated.
Hard cap. Narrow with structured filters, or call count_companies first (IE only) to size the result set before deciding.
status is a coarse normalization (active / inactive / dissolved / unknown). Exact upstream string lives under jurisdiction_data.company_status (or equivalent). E.g. GB liquidation → coarse inactive.
National tax IDs yes where indexed (FR SIREN/SIRET, NL BTW, PL NIP/REGON with REGON_BIR_USER_KEY). LEI / DUNS: no — not registry-native; use GLEIF directly for LEI.