# io.github.codespar/mcp-unico (npm · @codespar/mcp-unico)

MCP server for Unico — Brazilian identity + KYC: CPF/CNPJ, OCR, face match, liveness, PEP/watchlists

- Trust score: 69/100 (medium)
- Change this week: +23
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-04

## Components

- npm · `@codespar/mcp-unico`: 69/100 (this document), [markdown](https://verifymcp.io/servers/codespar-mcp-unico/codespar-mcp-unico.md), [page](https://verifymcp.io/servers/codespar-mcp-unico/codespar-mcp-unico)

## Channel facts

- Registry: `npm`
- Package: `@codespar/mcp-unico`
- Version: `0.2.0-alpha.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-04.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 42 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 74/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1850 tokens (~102/item across 18 items; 18 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add codespar-mcp-unico -- npx -y @codespar/mcp-unico
```

### Codex

```bash
codex mcp add codespar-mcp-unico -- npx -y @codespar/mcp-unico
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "codespar-mcp-unico": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@codespar/mcp-unico"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add codespar-mcp-unico --command npx --arg -y --arg @codespar/mcp-unico
```

### Hermes

```yaml
mcp_servers:
  codespar-mcp-unico:
    command: "npx"
    args: ["-y", "@codespar/mcp-unico"]
```

### Other

```json
{
  "mcpServers": {
    "codespar-mcp-unico": {
      "command": "npx",
      "args": [
        "-y",
        "@codespar/mcp-unico"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 68, +32)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] License: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] Schema quality: unverified → good
- [functional improvement] Dependency health: unverified → partial
- [functional] Licence: MIT

### 2026-08-01 (score 36, +29)

- [security improvement] Malware scan: unverified → pass
- [functional regression] Dependency health: partial → unverified
- [functional improvement] Tool coverage: unverified → 100

### 2026-07-31 (score 7, −21)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 28, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-27 (score 46)

First indexed and scored.

## MCP tools (18)

### `validate_cpf` (~116 tokens)

IDCloud: validate a Brazilian CPF with Receita Federal. Returns { valid, status (REGULAR | SUSPENSA | TITULAR FALECIDO | CANCELADA | NULA | PENDENTE), name, situation }. Optional birthdate enables a cross-check against the CPF registry.

Input parameters:

- `birthdate` (string): Optional. ISO-8601 date (YYYY-MM-DD) to cross-check against RF records
- `cpf` (string, required): CPF digits only (11 chars) or formatted XXX.XXX.XXX-XX

### `validate_cnpj` (~86 tokens)

IDCloud: validate a Brazilian CNPJ with Receita Federal. Returns company status (ATIVA, BAIXADA, SUSPENSA, INAPTA), legal name, trade name, partners (QSA), address, and primary CNAE.

Input parameters:

- `cnpj` (string, required): CNPJ digits only (14 chars) or formatted XX.XXX.XXX/XXXX-XX

### `extract_document` (~136 tokens)

IDCloud: OCR + structured field extraction from a Brazilian ID document image. Returns typed fields (name, document number, issuer, birthdate, parents, etc.) plus extraction confidence.

Input parameters:

- `document_type` (string, required): Document type. RG = Registro Geral, CNH = driver's license, RNE = resident foreign national, CTPS = work card.
- `image_back_base64` (string): Optional base64-encoded image of the document back (required for CNH and some RG variants).
- `image_base64` (string, required): Base64-encoded document image (front; back via image_back_base64). JPEG or PNG.

### `verify_document_authenticity` (~101 tokens)

IDCloud: tamper / forgery detection on a document image. Returns an authenticity score (0-1), a categorical verdict (AUTHENTIC | SUSPICIOUS | FRAUDULENT), and a list of detected anomalies (e.g. font mismatch, copy-paste edits, printed-on-screen capture).

Input parameters:

- `image_base64` (string, required): Base64-encoded document image
- `type` (string, required): Document type being verified

### `face_match` (~91 tokens)

IDPay: biometric 1:1 comparison between a live selfie and a document photo. Returns a similarity score (0-1) and a boolean match verdict at Unico's production-tuned threshold.

Input parameters:

- `document_image_base64` (string, required): Base64-encoded document photo (or a cropped face region from a document)
- `selfie_image_base64` (string, required): Base64-encoded live selfie image

### `liveness_check` (~96 tokens)

IDPay: passive liveness detection. Confirms the captured subject is a physically present person, not a printed photo, screen replay, mask, or deepfake. Returns { is_live, score, signals[] }.

Input parameters:

- `image_base64` (string): Base64-encoded still image (passive liveness)
- `video_base64` (string): Optional base64-encoded short video for active/challenge-based liveness

### `check_pep` (~106 tokens)

IDCheck: Politically Exposed Person screening. Pass cpf (preferred) or name; returns matches with role, jurisdiction, and source. A subject is PEP if they currently hold — or held in the last 5 years — a prominent public function per Bacen Circular 3,978/2020.

Input parameters:

- `cpf` (string): CPF digits only. Preferred for precise matching.
- `name` (string): Full name. Use when CPF is unavailable; fuzzy-matched.

### `check_watchlists` (~103 tokens)

IDCheck: global sanctions / adverse-media screening. Covers OFAC (US Treasury), UN, EU, HMT (UK), Interpol Red Notices, and curated adverse-media sources. Pass cpf or name; returns hits with list name, entry date, and risk level.

Input parameters:

- `country` (string): Optional ISO-3166 alpha-2 country code to scope results
- `cpf` (string): CPF digits only
- `name` (string): Full name

### `court_records_search` (~121 tokens)

IDCheck: Brazilian judicial-records search. Covers federal and state courts (TRFs, TJs), labor courts (TRTs), and superior courts (STJ, STF). Returns case list with court, class, status, and filing date. Compliance-grade, not for scraping.

Input parameters:

- `cnpj` (string): CNPJ digits only (for legal entities)
- `cpf` (string): CPF digits only (for individuals)
- `name` (string): Full name or razão social
- `scope` (string): Court-system scope (default: all)

### `get_process_status` (~106 tokens)

IDCheck: poll the status of a verification process previously created via the Unico Web/Mobile SDK or API. Returns { status (CREATED | IN_PROGRESS | FINISHED | EXPIRED | CANCELED), verdict, finished_at, score, reasons[] }. Use this to drive your KYC state machine after the user finishes the SDK capture flow.

Input parameters:

- `process_id` (string, required): The process identifier returned by Unico when the verification was created (also called id_processo).

### `batch_get_process_status` (~80 tokens)

IDCheck: batch status lookup. Send up to 100 process_ids per call and receive the same status payload as get_process_status for each. Use this for nightly reconciliation jobs or backfill, not for hot-path polling.

Input parameters:

- `process_ids` (array, required): Array of Unico process_ids (max 100). Order is preserved in the response.

### `upload_process_document` (~128 tokens)

IDCheck: upload a captured image to a running verification process. Use the appropriate document_side (FRONT, BACK, SELFIE) to match the process template. The image is consumed by Unico's OCR + biometric pipeline; results show up via get_process_status / get_extracted_data once processing finishes.

Input parameters:

- `document_side` (string, required): Which slot this image fills: document front, document back, or selfie capture.
- `image_base64` (string, required): Base64-encoded JPEG/PNG image (max 8 MB).
- `process_id` (string, required): Target verification process_id

### `get_extracted_data` (~77 tokens)

IDCheck: fetch the structured OCR result for a finished process — typed fields (name, document number, issuer, birthdate, etc.) plus per-field confidence and the raw text blocks. Returns 409 if the process has not yet reached FINISHED.

Input parameters:

- `process_id` (string, required): Verification process_id whose OCR output you want.

### `get_unico_score` (~101 tokens)

IDCheck: Unico Score — Brazil's identity-fraud risk score (0-1000, higher = lower risk) computed from Unico's cross-tenant graph of biometric and document events. Returns { score, band (VERY_LOW | LOW | MEDIUM | HIGH | VERY_HIGH), reasons[], computed_at }. Score availability requires a Score-tier contract.

Input parameters:

- `cpf` (string, required): CPF digits only or formatted XXX.XXX.XXX-XX

### `connect_portability_check` (~119 tokens)

Connect: cross-tenant portability check. Asks Unico's network whether the given CPF has already completed a high-assurance verification at another participating tenant within the lookback window. Lets you skip a full KYC re-capture when a prior verification is recent enough. Returns { has_prior_verification, last_verified_at, assurance_level, source_anonymized_id }.

Input parameters:

- `cpf` (string, required): CPF digits only
- `max_age_days` (number): Optional. Reject prior verifications older than this many days (default 90).

### `register_webhook` (~127 tokens)

Webhooks: subscribe a callback URL to receive Unico process events (process.created, process.finished, process.expired, score.updated). Returns the webhook_id to use with delete_webhook. The endpoint must be HTTPS and respond 2xx within 10 s.

Input parameters:

- `events` (array): Event types to subscribe to. Defaults to all if omitted.
- `secret` (string): Optional shared secret. Unico will sign each delivery with HMAC-SHA256 in the X-Unico-Signature header.
- `url` (string, required): HTTPS callback URL (must be publicly reachable).

### `list_webhooks` (~40 tokens)

Webhooks: list all webhook subscriptions registered for this tenant. Returns each webhook's id, url, subscribed events, created_at, and last_delivery_status.

### `delete_webhook` (~49 tokens)

Webhooks: remove a webhook subscription. Idempotent — deleting an unknown id returns 204.

Input parameters:

- `webhook_id` (string, required): The webhook_id returned by register_webhook / list_webhooks.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/codespar-mcp-unico/codespar-mcp-unico#diagnostics

## Score history

- 2026-08-04: 69
- 2026-08-03: 69
- 2026-08-02: 68
- 2026-08-01: 36
- 2026-07-31: 7
- 2026-07-30: 28
- 2026-07-28: 46
- 2026-07-27: 46

## Links

- npm package: https://www.npmjs.com/package/@codespar/mcp-unico
- Socket report: https://socket.dev/npm/package/@codespar/mcp-unico
- Repository: https://github.com/codespar/mcp-dev-latam
- Changelog RSS feed: https://verifymcp.io/servers/codespar-mcp-unico/codespar-mcp-unico/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/codespar-mcp-unico/codespar-mcp-unico/changelog.json
- HTML version of this page: https://verifymcp.io/servers/codespar-mcp-unico/codespar-mcp-unico
