# Mapa Societario — Spanish Company Registry (BORME)

> Spanish company registry (BORME): companies, directors, how they connect. Needs a free work account.

- name: es.mapasocietario/borme
- version: 1.2.0
- connection class: R2 (oauth_consent_once)
- trust: 74/100
- quality: 76/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/es.mapasocietario%2Fborme
- tools: https://api.protogrid.dev/v1/servers/es.mapasocietario%2Fborme/tools

**An agent can connect after a one-time OAuth consent by a human.** Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "borme": {
      "type": "http",
      "url": "https://mcp.mapasocietario.es/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 28
- freshness: 100
- provenance: 85
- drivers: +repository +dns-namespace +website -unreachable(1 failures) +updated-13d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 76/100 (good)

### protocol: n/a (weight 25)

- n/a `protocol.modern`, `protocol.stateless`, `protocol.transport`, `protocol.list_ttl`: no remote answered a protocol handshake (not probed yet, unreachable, or local-only)

### authorization: 100 (weight 15)

- pass `auth.prm`: Protected Resource Metadata (RFC 9728) published
- pass `auth.as_metadata`: authorization server metadata reachable
- pass `auth.cimd`: Client ID Metadata Documents supported
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 64 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 3 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: search_companies (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_company (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); search_officers (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 1,307 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history not recorded yet

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 4, about 1,307 tokens to load them all
- badge: [![protogrid quality](https://protogrid.dev/badge/es.mapasocietario/borme.svg)](https://protogrid.dev/servers/es.mapasocietario/borme)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://mcp.mapasocietario.es/mcp (streamable-http, auth oauth2, reachable false, uptime30d 0.95412844)

## Packages

_none_

## Tools (4)

- `get_company`: Get the BORME registry profile of one Spanish company: status, incorporation, current and former officers, sole shareholder (BORME records only sole-shareholder ownership), and — where available — NIF, share capital and registered address. NIF is never in BORME, and capital/address are missing for entities last amended before 2009; such values may be filled by web search and are flagged `*_external: true` (verify before relying on them). Officers are capped at the 25 most relevant (board/management before apoderados) with `*_officers_total` counts and an `officers_truncated` flag — large companies register hundreds of apoderados. Includes a mapasocietario.es link to cite. Resolves to exactly one entity by its current OR former name (company renames are handled) and returns not-found rather than a near-miss — if unsure of the exact name, call search_companies first. `name` is always the company's CURRENT name; if you queried an old name (or the result's name looks unrelated to your query), check `former_names` — it lists every prior registered name (registry-recorded 'Cambio de denominación social') before assuming this is the wrong company.
- `get_company_network`: Show companies directly connected to one Spanish company: via a shared board/management officer (shared_officer — apoderados and representatives are excluded as low-signal), via being owned by it (owns), or via owning it (owned_by). Answers 'is there a relationship between company X and company Y?'. shared_officer edges carry `status`: 'active' means the shared officer still holds the seat at the connected company, 'ceased' means the registry has inscribed their cessation there, and 'superseded' means no cessation was inscribed but a successor took the post. A 'ceased' or 'superseded' edge is a HISTORICAL link, do not report it as a current one. A top-level `dissolved: true` means the SUBJECT company is dissolved, so under the registry-faithful rule it has no officer currently in office and every shared_officer link is historical from its side, whatever each edge's own status says about the connected company. Active edges are listed first, so a truncated list keeps the live relationships. Resolves to one entity by current or former name (renames handled). Each connection links to mapasocietario.es.
- `search_companies`: Search Spanish companies by name in the BORME registry. Returns ranked matches (fuzzy — tolerant of typos) with status and a mapasocietario.es/empresa link to cite. A hit's `name` is always its CURRENT registered name; when the entity has been renamed, `former_names` lists its prior name(s) — a hit whose `name` differs from your query is not necessarily a wrong match, check `former_names` first. Use this first to resolve a company before get_company.
- `search_officers`: Find a person (administrator/director/apoderado) in the BORME registry and list the companies they are linked to. Answers 'is officer Z present in other companies?'. Returns ONE row per company, with `roles` listing every post held there. `status` (per row and per role) is 'active' when the appointment is still in force, 'ceased' once the registry has inscribed the cessation, and 'superseded' when the registry inscribed NO cessation but a successor was appointed to the post — common for auditors. 'ceased' and 'superseded' are BOTH closed seats: never describe either as a current directorship. 'unknown' means the registry gave no usable status, so do not assert the seat is either held or closed. Each role also carries `date` where the registry recorded one: the APPOINTMENT date for an active role, the CESSATION date for a ceased one, and for a 'superseded' role the successor's appointment date (NOT this person's exit — the registry inscribed none) — read it against that role’s status, never as a single “since”. When the officer held the seat before that (a revoke-and-reappoint, common in Spanish registries), the role also carries `first_appointed` — cite THAT for “since when”, not `date` — and `history`, every published act newest-first. Companies where the person is still in office come first, so a truncated list keeps the live ones. `companies_total`/`companies_active` count COMPANIES and `seats_total` counts appointment rows — cite the company figures when asked how many companies someone sits on. `counts_are_lower_bound: true` means more companies exist than could be read. Each row links to mapasocietario.es/empresa.
