CursorPool
← 返回首页

openregistry

Real-time direct access to unmodified data and raw filings of 30 official government registries via MCP. Tools: search companies, get profiles, officers, shareholders, charges, 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.

cursor.directory·3
MCP

openregistry

MCP server: openregistry

{
  "url": "https://openregistry.sophymarine.com/mcp",
  "transport": "streamable-http"
}
Skill

find-company

---
name: find-company
description: "Verify a specific company exists in its national government registry and capture its core identity: current status (active / dissolved / inactive), incorporation date, registered address, and registry-assigned ID. Use when the user asks 'is X a real company', 'is X active', 'find Acme Ltd', 'what's the registry ID of X', or 'verify this counterparty's existence'. Returns identity only — directors, shareholders, filings, and documents are separate skills."
license: Apache-2.0
compatibility: Requires the OpenRegistry MCP server (https://openregistry.sophymarine.com/mcp)
metadata:
  categories: "Compliance, Research, Business"
  version: "1.0"
  author: sophymarine
---

# Find Company

**Confirm a company exists and capture its core identity. Stop there.**

## When to use

- "Does X exist as a real company?"
- "Is X still active?"
- "What's the registry number for Acme Trading Ltd?"
- "Verify this counterparty before I sign."

## When NOT to use

- Need directors → `get-director-details`
- Need ownership → `get-shareholder-details`
- Need financial figures → `get-financials`
- Need filing history → `get-filings`

## Example

```
Is "Tesla Limited" a real UK company?
Verify SIREN 552081317.
```

## Workflow

```text
1. If user gave a name:
     search_companies({ jurisdiction, query, limit: 5 })
     → pick the candidate whose status='active' and name best matches
     → if multiple plausible matches, surface them and ask the user to confirm

2. If user gave an ID, skip step 1.

3. get_company_profile({ jurisdiction, company_id })
     → capture company_name, status, status_detail,
       incorporation_date, registered_address

4. REPORT:
     - 1 line: "<name> (<jurisdiction>, <company_id>) is <status>, incorporated <date>."
     - Address on second line if user asked.
     - Cite the company_id verbatim.
```

## Edge cases

- **Multiple matches**: don't guess. Ask the user to confirm.
- **Dissolved**: report as such; suggest `get-filings` or `get-director-details` if the user wants the historical view.
- **501 from upstream**: this jurisdiction isn't supported. Surface honestly.
- **Per-country ID format**: differs per registry. Call `list_jurisdictions({ jurisdiction: '<CC>' })` for the schema.
Skill

get-director-details

---
name: get-director-details
description: "Retrieve the current and historical officers of a known company — directors, secretaries, board members, partners, with roles, appointment dates, and (where the registry publishes them) resignation dates. Use when the user asks 'who are the directors of X', 'who runs X', 'who is on the board of X', 'list officers of X', or 'who resigned from X'. Requires a known company_id; if the user only gave a name, run find-company first."
license: Apache-2.0
compatibility: Requires the OpenRegistry MCP server (https://openregistry.sophymarine.com/mcp)
metadata:
  categories: "Compliance, Research, Business"
  version: "1.0"
  author: sophymarine
---

# Get Director Details

**Current and historical officers of one known company.**

## When to use

- "Who are the directors of Tesla Limited?"
- "Who's on the board of company 03058989?"
- "List all current officers of Acme."
- "Did John Smith resign from Acme last year?"

## When NOT to use

- User gave only a name → run `find-company` first to get company_id, then this skill
- User wants ownership → `get-shareholder-details`
- User wants the underlying officer-change filing as a document → `get-filings({ category: 'officers' })` then fetch

## Example

```
Who runs Tesla Limited (GB 03058989)? Include resigned directors.
```

## Workflow

```text
1. If user only gave a name, run find-company first to capture company_id.

2. get_officers({ jurisdiction, company_id, include_resigned: <bool> })
     - include_resigned defaults to true; pass false when user asks "current only"
     - pass group_by_person: true (CZ only) to dedupe multi-role appointments

3. REPORT (newest appointment first):
     - One row per officer: name | role | appointed_on | resigned_on | is_active
     - Role labels stay in the registry's native language (Styremedlem, Président,
       Předseda představenstva, PREZES ZARZĄDU). Do not translate unless asked.
     - Cite officer_id verbatim on each row.
```

## Edge cases

- **GDPR masking**: some EU jurisdictions mask DoB / nationality / address — surface honestly, do not infer.
- **Corporate officers**: keyed by the corporate's own company_id, not a personal officer_id.
- **501**: not all jurisdictions publish officer rosters publicly. Report the gap, don't substitute.
- **Stable IDs vary**: some registries use synthetic per-record indices; do not assume officer_id is the same across two companies.
Skill

get-shareholder-details

---
name: get-shareholder-details
description: "Retrieve the registered shareholders, members, or quota-holders of a known company — the statutory equity roster as published by the national company registry. Use when the user asks 'who owns X', 'who are the shareholders of X', 'list the members of X', 'show me the cap table for X', or 'who holds equity in X'. Important: shareholders are NOT the same as beneficial owners / PSCs / UBOs (see edge cases). Requires a known company_id."
license: Apache-2.0
compatibility: Requires the OpenRegistry MCP server (https://openregistry.sophymarine.com/mcp)
metadata:
  categories: "Compliance, Research, Business"
  version: "1.0"
  author: sophymarine
---

# Get Shareholder Details

**Statutory shareholder / member / quota-holder roster of one company.**

## When to use

- "Who owns Tesla Limited?"
- "List the shareholders of company SC123456."
- "Show me the members register for Acme."
- "Who holds equity in Norwegian organisation 923609016?"

## When NOT to use

- User asks for "beneficial owner", "ultimate beneficial owner", "PSC", or "UBO" — that is a SEPARATE statutory register that OpenRegistry's current tool set does NOT expose. Tell the user honestly.
- User wants directors → `get-director-details`
- User wants a filing that carries the share register → `get-filings({ category: 'capital' })`

## Example

```
Who owns Norwegian company 923609016?
Show me the members of GB 03058989.
```

## Workflow

```text
1. If user only gave a name, run find-company first to capture company_id.

2. get_shareholders({ jurisdiction, company_id })

3. REPORT:
     - Each shareholder: name (or corporate name) | shares (% or count or class) | capital allocated
     - Surface the disclosure flag explicitly: did this legal form publish, or did the
       registry return a pointer to a separate filing?
     - If the response carries a `document_id`, mention it can be fetched via fetch_document.
     - If empty: say "not publicly disclosed for this legal form" — do NOT say "no shareholders".
```

## Edge cases

- **Shareholders ≠ PSC / UBO**: shareholders = statutory equity roster. PSC / UBO = beneficial-ownership register on a >25% control threshold. The two can disagree (a 10% shareholder is on the members register but not the PSC register; a corporate nominee can be a PSC without appearing on the members register). OpenRegistry currently exposes the SHAREHOLDER register only.
- **Joint-stock / public-limited forms**: typically keep shareholders in a private book; the public register returns empty. That emptiness is meaningful — surface it.
- **Pointer to filing**: some registries return a `document_id` pointing at the filing carrying the live share roster; chain to fetch_document.
- **501**: not every jurisdiction publishes shareholders.
Skill

get-filings

---
name: get-filings
description: "Retrieve the filing history of a known company — every document the company has filed with its national registry, with filing_date, category, description, and a document_id you can pass to read the specific filing's content. Use when the user asks 'what did X file', 'list X's filings', 'recent filings for X', 'has X filed accounts this year', 'history of changes at X', or 'is there a charge / officer / resolution filing for X'. Returns metadata only; the actual filing bytes come from a follow-up fetch_document call. Requires a known company_id."
license: Apache-2.0
compatibility: Requires the OpenRegistry MCP server (https://openregistry.sophymarine.com/mcp)
metadata:
  categories: "Compliance, Research, Business"
  version: "1.0"
  author: sophymarine
---

# Get Filings

**List a company's filings. Metadata only; no document bytes fetched.**

## When to use

- "What did Tesla Limited file last year?"
- "Has Acme filed annual accounts since 2022?"
- "List all officer-change filings for company X."
- "Has X filed anything in the last 30 days?"

## When NOT to use

- User wants to extract financial numbers (revenue, profit, etc.) → `get-financials` (one-shot)
- User wants directors / shareholders → those have dedicated skills

## Example

```
List the last 10 filings for Tesla Limited (GB 03058989).
List Acme's charge-category filings only.
Has Microsoft Ltd filed any officer changes in the last 90 days?
```

## Workflow

```text
1. If user only gave a name, run find-company first.

2. list_filings({ jurisdiction, company_id, category, limit })
     - category (optional): 'accounts', 'annual-return', 'charges', 'officers',
       'capital', 'insolvency', 'resolution', 'confirmation-statement', or the
       registry's native form code (e.g. AP01, MR01, SH01)
     - limit default 25; max 1000
     - cursor (GB) or offset (IE) for paging beyond one page

3. Optional client-side date filter: keep filings where filing_date >= now - N days.

4. REPORT (newest first):
     filing_date | category | description | document_id | has_document

5. If the user wants the CONTENTS of a specific filing afterwards, follow up with:
     fetch_document({ jurisdiction, document_id })
     (or get-financials if it's the latest accounts and the user wants the numbers extracted)
```

## Edge cases

- **`has_document: false`**: the registry indexes the filing but the body is paywalled or unavailable. Surface explicitly.
- **Pagination styles differ**: GB uses opaque cursor (`next_cursor`); IE uses numeric `offset`.
- **Native form codes**: many jurisdictions use raw form codes (AP01 = appointment, MR01 = mortgage, SH01 = share allotment). Passing them as `category` works.
- **501**: not all jurisdictions publish a filing index — report the gap honestly.
- **Silence is also a signal**: a normally-active company with zero filings in 18+ months is a yellow flag — surface it proactively when the user is building a watchlist.

来源:https://github.com/sophymarine/openregistry