OpenRegistry
Real-time direct access to unmodified data and raw filings of 30 official government registries via MCP.
От сообщества: Добавлен пользователем или импортирован; проверьте владельца перед подключениемРаботаетБез входаГлобальныйБесплатноТолько чтение
Что умеет
- List Jurisdictions: Per-country reference. In-process metadata lookup — no upstream HTTP, no rate cost. Pass EXACTLY ONE of: • `jurisdiction='GB'` — registry name + URL, data license, company-ID forma
- Search Companies: Search a national company registry by name or keyword. Pass EXACTLY ONE of: • `jurisdiction='GB'` - single country, direct. • `jurisdictions=['GB','NO','FR']` - multi-country when yo
- Search Officers: Find people holding or who held officer positions (director, secretary, member, partner) in a jurisdiction's registry by name. Returns candidates with officer_id, name, and (where exp
Какие данные видит
Нужен ли аккаунт
Не нужен: сервер работает без входа
Real-time direct access to unmodified data and raw filings of 30 official government registries via MCP.
Tools: search companies, get profiles, officers, shareholders, filings, and financial statement documents.
Covers UK Companies House, Ireland CRO, France RNE, Spain BORME, Italy InfoCamere, Norway Brreg, Poland KRS, Netherlands KVK, Belgium KBO, Switzerland Zefix, Finland, Czechia, Korea, Taiwan, New Zealand, Cayman Island, Australia, Canada and a lot more.
Free tier; paid keys for higher quota.
Список инструментов сервера (10)
Технические названия из tools/list. Нужны только разработчикам.
| list_jurisdictions | Per-country reference. In-process metadata lookup — no upstream HTTP, no rate cost. Pass EXACTLY ONE of: • `jurisdiction='GB'` — registry name + URL, data license, company-ID format with examples, native-to-unified status enum mapping, and the list of tools supported. • `supports_tool='get_officers'` — which jurisdictions implement a given tool (name matched exactly against registered tool names). Use this to plan calls. Do NOT use it to fetch actual data — call the named tool directly. Passing both params or neither returns a 400 with the matching usage hint. |
| search_companies | Search a national company registry by name or keyword. Pass EXACTLY ONE of: • `jurisdiction='GB'` - single country, direct. • `jurisdictions=['GB','NO','FR']` - multi-country when you're unsure; the server asks the user to confirm (clients with MCP elicitation) or errors back asking you to ask in chat. Per-tier cap on distinct countries per call: anonymous=3, pro=10, max=30, enterprise=unlimited. Returns candidates with unified fields (company_id, company_name, status, incorporation_date, registered_address) plus raw upstream `jurisdiction_data`. For country-specific filters (FR ca_min, CZ czNace, CH canton, etc.) pass the `filters` object — call list_jurisdictions for the per-country schema. |
| search_officers | Find people holding or who held officer positions (director, secretary, member, partner) in a jurisdiction's registry by name. Returns candidates with officer_id, name, and (where exposed) appointment count. Entry point for person-centric investigations. Use this when only the person's name is known. If you already have the `company_id`, call `get_officers` instead — it returns the authoritative board roster for that company; this tool is a name-search index and may miss officers whose names are redacted, transliterated, or stored under a former spelling upstream. Read-only — no upstream mutation, results briefly cached. Name-matching semantics vary per registry (exact / prefix / token / fuzzy); full names work best, partial names broaden recall. `query` matches against the registry's officer name index only — not a free-text web search — so role keywords, synonyms, or company names won't match. `limit` is an upper bound capped at 100; the registry may return fewer. Unsupported jurisdictions return 501; call `list_jurisdictions({supports_tool:'search_officers'})` for the coverage matrix. |
| get_company_profile | Fetch a company's structured profile by registry-specific ID. Returns unified top-level fields (`company_id`, `company_name`, `status`, `status_detail`, `incorporation_date`, `registered_address`) plus raw upstream under `jurisdiction_data`. `status` is a coarse active/inactive/dissolved/unknown enum; `status_detail` keeps the registry's native string; `registered_address` is flattened to one string with the upstream nested form preserved in `jurisdiction_data`. Does NOT bundle officers / shareholders / filings / charges — call those tools separately. ID format varies per registry; pull `company_id` from `search_companies` rather than guessing. For per-country ID format and the full `jurisdiction_data` field catalogue, call `list_jurisdictions({jurisdiction:'<CC>'})`. `include.vr` (CZ-only), `include.history` (PL-only), and `include.establishments` (BE-only) each trigger an EXTRA upstream call and are silently ignored elsewhere — only set the ones you actually need. `fresh=true` bypasses the short-TTL cache and forces a registry round-trip; default cached path is fine for most lookups since profiles change only on filings. |
| list_filings | Return a company's filing history, newest first. Each filing has `filing_id`, `filing_date`, `category`, `description`, and (when upstream exposes one) a `document_id` that round-trips to `get_document_metadata` / `fetch_document`. Raw upstream fields preserved under `jurisdiction_data`. Filter via the optional `category`. Common normalized values: 'accounts', 'annual-return', 'capital', 'charges', 'confirmation-statement', 'incorporation', 'insolvency', 'liquidation', 'mortgage', 'officers', 'resolution'. Native upstream form codes also accepted. This tool returns metadata only — call `fetch_document` on `document_id` for the actual filing bytes. `has_document=false` means the body is paywalled or unavailable upstream. Pagination uses `limit` (default 25, max 1000) plus `cursor` (GB) or `offset` (IE). Unsupported jurisdictions return 501; call `list_jurisdictions` for per-country category values and pagination style. |
| get_shareholders | Return the shareholders / members / quota-holders — the legal-statutory equity roster published by the registry, no ownership-threshold filter. Use for any shareholder / member / quota-holder question. Shareholders are a DIFFERENT concept from beneficial owners (PSC / UBO), who appear on a separate register only when above a statutory control threshold (typically >25%). The two can disagree: a 10% shareholder is on the members register but not the PSC register; a corporate trustee can be a PSC without appearing on the members register. Disclosure is legal-form-conditional: private-limited / LLC forms typically expose quota-holders publicly; joint-stock / public-limited forms keep shareholders in a private book. Responses therefore may be an empty list, a pointer to the relevant filing (call `fetch_document` on the returned `document_id`), or a statutory explanation — every response carries a disclosure flag and/or note. Raw upstream in `jurisdiction_data`. Unsupported jurisdictions return 501; call `list_jurisdictions({supports_tool:'get_shareholders'})` for the coverage matrix. `company_id` must come from `search_companies` (do not synthesize); `fresh=true` bypasses cache and refetches from upstream — useful only right after a known filing event since the roster changes only when filings are submitted. |
| get_officers | Return a company's officers — current directors, secretaries, members, partners, board members, procurists, liquidators, plus historical resignations by default. Each officer has a unified shape (`officer_id`, `name`, `role`, `appointed_on`, `resigned_on`, `is_active`) plus raw upstream in `jurisdiction_data`. Limitations: • Role labels pass through in the registry's native language (Styremedlem, Předseda představenstva, Président) — translate client-side. • Birth-date precision varies by registry. • Officer-ID stability varies: corporate officers usually carry the corporate's own `company_id`; natural persons may carry a synthetic index. • Some registries mask names under GDPR (masking is upstream). • Jurisdictions without an officer feed return 501. When NOT to use: if you only have a person's name (no `company_id`), call `search_officers` first to find candidates. For shareholders / quota-holders, use `get_shareholders` — separate register, different concept. `include_resigned=false` narrows to currently-serving only (some registries don't expose resigned officers regardless of this flag). `group_by_person=true` is CZ-only and collapses one person's consecutive appointments (member → chair → vice-chair) into a single entry with the chain under `jurisdiction_data._appointments[]`. `fresh=true` bypasses the short-TTL cache. |
| get_document_metadata | Retrieve metadata for a filing document by `document_id` (from `list_filings`). Returns available content formats with byte sizes, page count, source URL, creation date. Raw upstream preserved under `jurisdiction_data`. Call this before `fetch_document` when a document may be large or its format is unknown — cheaper than a full fetch. Do NOT construct or guess `document_id` — some registries use composite IDs that must come from `list_filings`; synthesized IDs will 404. Empty `available_formats` means the body is paywalled or unavailable upstream. Unsupported jurisdictions return 501; call `list_jurisdictions({supports_tool:'get_document_metadata'})` for the coverage matrix. `fresh=true` bypasses cache but is rarely useful — filings are immutable once registered. |
| fetch_document | Read a filing's content by `document_id` from `list_filings`. Numbers and prose live inside the document; `list_filings` metadata only locates filings. RESPONSE SHAPES: • `kind='embedded'` (under `max_bytes`, ~20 MB default) — full `bytes_base64`, `source_url_official` (evergreen registry URL), `source_url_direct` (short-TTL signed proxy URL). PDFs render as a native document block. • `kind='resource_link'` (oversized) — NO `bytes_base64`. Returns `reason`, `next_steps`, both source URLs, and `index_preview` `{page_count, text_layer, outline_present}`. Call `get_document_navigation` to locate pages, then re-call this tool with `pages='N-M'` and `format='pdf'|'text'|'png'`. When NOT to use: to enumerate a company's filings, use `list_filings`. To check size or available formats before deciding, use `get_document_metadata`. Never synthesize `document_id` — composite IDs will 404. CRITICAL: on failure (rate limit / 5xx / timeout) do NOT fabricate names, numbers, or dates — tell the user what failed and offer retry or `source_url_official`. Outline titles, previews, and navigation snippets are for LOCATING pages, never for quoting. `max_bytes` is a hard inline cutoff: raising it forces full proxy/R2 transfer (slower, costlier); the default returns `resource_link` for big PDFs so you can page-fetch. `fresh=true` bypasses the R2 cache and refetches from upstream — filings are immutable so it's rarely needed. `source_url_official` auto-resolves from the most recent `list_filings` call; `company_id` / `transaction_id` / `filing_type` / `filing_description` are overrides only when `document_id` did NOT come through `list_filings`. |
| get_document_navigation | Return a navigation index for a cached document: PDF outline / bookmarks, per-page text previews (~200 chars each), keyword-matched landmarks (balance sheet / directors report / auditor report), text-layer classification, and source URLs. Call this FIRST for PDFs too large to embed (`fetch_document` returned `kind='resource_link'`). Use outline / previews / landmarks to pick a page range, then re-call `fetch_document` with `pages='N-M'` for the authoritative content. `company_id` / `transaction_id` are overrides only for the rare case where `document_id` did NOT come through `list_filings` (otherwise auto-resolved from the side-cache). Navigation aids only: previews, outline titles, landmark matches, and snippets may be truncated or contain OCR errors. NEVER cite them for figures, quotes, dates, or names — always quote from a subsequent `fetch_document` page-range fetch. Requires the document bytes to already be cached via `fetch_document`; `fresh=true` re-runs pdfjs against the cached bytes but does NOT re-fetch upstream, so use it only when the index looks stale or empty. |