@verifik/mcp 0.0.0-stage → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +543 -2
- package/data/field-enrichment.json +452 -0
- package/docs/field-formats.md +148 -0
- package/lib/catalog.js +183 -0
- package/lib/client-features.js +64 -0
- package/lib/config.js +75 -0
- package/lib/description.js +67 -0
- package/lib/error-response.js +210 -0
- package/lib/field-enrichment.js +103 -0
- package/lib/field-normalize.js +65 -0
- package/lib/filters.js +53 -0
- package/lib/meta-tools.js +128 -0
- package/lib/proxy.js +224 -0
- package/lib/tool-naming.js +51 -0
- package/lib/tool-schema.js +245 -0
- package/lib/url-builder.js +58 -0
- package/lib/validate-args.js +230 -0
- package/package.json +60 -5
- package/server.js +140 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Open-Verifik
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,544 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @verifik/mcp
|
|
2
2
|
|
|
3
|
-
This
|
|
3
|
+
Connect your AI assistant to **Verifik** — identity verification, document checks, vehicle lookups, business validation, and background screening across Latin America and worldwide. This package is a [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server that exposes the Verifik APIs your account already has access to as tools in Cursor, Claude Desktop, or any MCP client.
|
|
4
|
+
|
|
5
|
+
Each paid tool call goes straight to the Verifik REST API with your API token. Credits are charged on your Verifik account the same way as a direct API call.
|
|
6
|
+
|
|
7
|
+
## Quick start
|
|
8
|
+
|
|
9
|
+
1. **Get an API token** — sign in to [Smart-Agent](https://ai.verifik.co), open **Settings → API Tokens**, and create a token.
|
|
10
|
+
2. **Add the MCP server** to your client (examples below).
|
|
11
|
+
3. **Restart** your MCP client, then ask your assistant to verify an identity, run a background check, or look up a vehicle.
|
|
12
|
+
|
|
13
|
+
No install step is required. MCP clients run the server with:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx -y @verifik/mcp
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Cursor (`mcp.json`)
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"mcpServers": {
|
|
24
|
+
"verifik-smartcheck": {
|
|
25
|
+
"command": "npx",
|
|
26
|
+
"args": ["-y", "@verifik/mcp"],
|
|
27
|
+
"env": {
|
|
28
|
+
"VERIFIK_API_TOKEN": "YOUR_API_TOKEN",
|
|
29
|
+
"VERIFIK_API_BASE": "https://api.verifik.co",
|
|
30
|
+
"VERIFIK_MCP_SMARTCHECK_ONLY": "true"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Claude Desktop
|
|
38
|
+
|
|
39
|
+
`~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or the equivalent config file on your OS:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"mcpServers": {
|
|
44
|
+
"verifik-smartcheck": {
|
|
45
|
+
"command": "npx",
|
|
46
|
+
"args": ["-y", "@verifik/mcp"],
|
|
47
|
+
"env": {
|
|
48
|
+
"VERIFIK_API_TOKEN": "YOUR_API_TOKEN",
|
|
49
|
+
"VERIFIK_API_BASE": "https://api.verifik.co",
|
|
50
|
+
"VERIFIK_MCP_SMARTCHECK_ONLY": "true"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### CLI (stdio MCP server)
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
export VERIFIK_API_TOKEN="YOUR_API_TOKEN"
|
|
61
|
+
export VERIFIK_API_BASE="https://api.verifik.co"
|
|
62
|
+
export VERIFIK_MCP_SMARTCHECK_ONLY="true"
|
|
63
|
+
npx -y @verifik/mcp
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
The server speaks MCP over stdio. Point any MCP-compatible client at the same `npx` command and environment variables.
|
|
67
|
+
|
|
68
|
+
## How tools are discovered
|
|
69
|
+
|
|
70
|
+
You do **not** need to upgrade this package when Verifik adds new API endpoints. The server builds its tool list from your live account catalog at startup.
|
|
71
|
+
|
|
72
|
+
### 1. Catalog load (`lib/catalog.js`)
|
|
73
|
+
|
|
74
|
+
On boot, the server calls `GET /v2/app-features/my-list` on `VERIFIK_API_BASE` (default `https://api.verifik.co`), paginating through all pages (500 features per page). It sends your `VERIFIK_API_TOKEN` as a `Bearer` token.
|
|
75
|
+
|
|
76
|
+
Each item in the response is an **AppFeature** with fields such as `code`, `name`, `description`, `url`, `method`, `country`, `baseCategory`, `smartCheckEnabled`, `dependencies[]`, and pricing metadata.
|
|
77
|
+
|
|
78
|
+
### 2. Filtering (`lib/filters.js`)
|
|
79
|
+
|
|
80
|
+
Features are kept or dropped based on your environment:
|
|
81
|
+
|
|
82
|
+
| Filter | Source | Default / behavior |
|
|
83
|
+
| --- | --- | --- |
|
|
84
|
+
| SmartCheck only | `VERIFIK_MCP_SMARTCHECK_ONLY` | `true` — only features with `smartCheckEnabled: true` |
|
|
85
|
+
| Country | `VERIFIK_MCP_COUNTRY` | Optional comma-separated list (e.g. `Colombia,Mexico,world`) |
|
|
86
|
+
| Category | `VERIFIK_MCP_BASE_CATEGORY` | Optional comma-separated `baseCategory` values |
|
|
87
|
+
| Code allowlist | `VERIFIK_MCP_CODES` | Optional comma-separated feature `code` values |
|
|
88
|
+
|
|
89
|
+
A feature must have both `code` and `url` to become a tool.
|
|
90
|
+
|
|
91
|
+
### 3. Tool schema (`lib/tool-schema.js`)
|
|
92
|
+
|
|
93
|
+
Each eligible feature becomes one MCP tool:
|
|
94
|
+
|
|
95
|
+
- **Tool name** — sanitized from the feature `code` (letters, digits, `.`, `_`, `-`; max 128 characters).
|
|
96
|
+
- **Description** — feature name, country, description, plus a note that the call charges Verifik credits.
|
|
97
|
+
- **Input schema** — built from `dependencies[]`:
|
|
98
|
+
- `String` → JSON Schema `string`
|
|
99
|
+
- `Number` / `Integer` → `number`
|
|
100
|
+
- `Boolean` → `boolean`
|
|
101
|
+
- `enum`, `min`, `max`, `description`, and `required` are preserved when present.
|
|
102
|
+
|
|
103
|
+
Features whose dependencies include **binary fields** (images, selfies, file uploads, multipart) are **skipped** for now — the MCP transport cannot safely carry those payloads yet. Scalar-only endpoints (identity lookups, plates, background checks, etc.) are exposed.
|
|
104
|
+
|
|
105
|
+
### 4. Meta tools (`lib/meta-tools.js`) — free, no credits
|
|
106
|
+
|
|
107
|
+
Two helper tools are always available and do **not** call paid endpoints:
|
|
108
|
+
|
|
109
|
+
| Tool | Purpose |
|
|
110
|
+
| --- | --- |
|
|
111
|
+
| `verifik_list_catalog` | List features available in the in-memory catalog, with optional `country`, `baseCategory`, `code`, and `smartCheckOnly` filters |
|
|
112
|
+
| `verifik_get_feature` | Return full metadata and the input JSON Schema for one feature by `code` |
|
|
113
|
+
|
|
114
|
+
Use these to search what your account can access before spending credits.
|
|
115
|
+
|
|
116
|
+
### 5. Tool calls (`lib/proxy.js`)
|
|
117
|
+
|
|
118
|
+
When the assistant calls a feature tool, the server proxies an HTTP request to `${VERIFIK_API_BASE}/${feature.url}` using the feature's `method` (usually `GET`). Arguments become query parameters (GET) or a JSON body (POST/PUT). Your token is sent as `Authorization: Bearer …`.
|
|
119
|
+
|
|
120
|
+
The catalog can optionally refresh in memory when `VERIFIK_MCP_CATALOG_REFRESH_MS` is set to a positive interval (milliseconds).
|
|
121
|
+
|
|
122
|
+
**New Verifik endpoints appear automatically** the next time the catalog loads — no package update required.
|
|
123
|
+
|
|
124
|
+
## Response format
|
|
125
|
+
|
|
126
|
+
MCP tool results are JSON text. Paid feature calls are wrapped so your assistant always sees the HTTP status and the Verifik body together:
|
|
127
|
+
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"httpStatus": 200,
|
|
131
|
+
"statusText": "OK",
|
|
132
|
+
"durationMs": 312,
|
|
133
|
+
"request": {
|
|
134
|
+
"method": "GET",
|
|
135
|
+
"url": "https://api.verifik.co/v2/co/cedula?documentType=CC&documentNumber=1234567890"
|
|
136
|
+
},
|
|
137
|
+
"body": { }
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Verifik success envelope (`body` on HTTP 2xx)
|
|
142
|
+
|
|
143
|
+
Successful Verifik API responses use a consistent envelope:
|
|
144
|
+
|
|
145
|
+
| Field | Description |
|
|
146
|
+
| --- | --- |
|
|
147
|
+
| `data` | Main result — identity fields, vehicle record, background-check payload, etc. |
|
|
148
|
+
| `signature` | Certification block: `message` (e.g. `"Certified by Verifik.co"`) and `dateTime` |
|
|
149
|
+
| `id` | Short reference id for the certified response |
|
|
150
|
+
| `billing` | Optional — present on some endpoints when dynamic pricing applies (`dynamicQueryApplied`, `chargedCredits`, etc.) |
|
|
151
|
+
|
|
152
|
+
The examples below show the **full MCP tool result** (wrapper + `body`). All names and document numbers are fictional.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
### Example 1 — Colombian national ID (cédula)
|
|
157
|
+
|
|
158
|
+
**Tool:** `colombia_api_identity_lookup` (or the sanitized name for `v2/co/cedula` in your catalog)
|
|
159
|
+
|
|
160
|
+
**Arguments:**
|
|
161
|
+
|
|
162
|
+
```json
|
|
163
|
+
{
|
|
164
|
+
"documentType": "CC",
|
|
165
|
+
"documentNumber": "1234567890"
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**MCP result (HTTP 200):**
|
|
170
|
+
|
|
171
|
+
```json
|
|
172
|
+
{
|
|
173
|
+
"httpStatus": 200,
|
|
174
|
+
"statusText": "OK",
|
|
175
|
+
"durationMs": 284,
|
|
176
|
+
"request": {
|
|
177
|
+
"method": "GET",
|
|
178
|
+
"url": "https://api.verifik.co/v2/co/cedula?documentType=CC&documentNumber=1234567890"
|
|
179
|
+
},
|
|
180
|
+
"body": {
|
|
181
|
+
"data": {
|
|
182
|
+
"documentType": "CC",
|
|
183
|
+
"documentNumber": "1234567890",
|
|
184
|
+
"firstName": "María",
|
|
185
|
+
"lastName": "Gómez López",
|
|
186
|
+
"fullName": "María Gómez López"
|
|
187
|
+
},
|
|
188
|
+
"signature": {
|
|
189
|
+
"message": "Certified by Verifik.co",
|
|
190
|
+
"dateTime": "January 16, 2024 3:44 PM"
|
|
191
|
+
},
|
|
192
|
+
"id": "AB123"
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
### Example 2 — Peruvian DNI
|
|
200
|
+
|
|
201
|
+
**Tool:** feature for `v3/pe/cedula`
|
|
202
|
+
|
|
203
|
+
**Arguments:**
|
|
204
|
+
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"documentType": "DNI",
|
|
208
|
+
"documentNumber": "87654321"
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**MCP result (HTTP 200):**
|
|
213
|
+
|
|
214
|
+
```json
|
|
215
|
+
{
|
|
216
|
+
"httpStatus": 200,
|
|
217
|
+
"statusText": "OK",
|
|
218
|
+
"durationMs": 410,
|
|
219
|
+
"request": {
|
|
220
|
+
"method": "GET",
|
|
221
|
+
"url": "https://api.verifik.co/v3/pe/cedula?documentType=DNI&documentNumber=87654321"
|
|
222
|
+
},
|
|
223
|
+
"body": {
|
|
224
|
+
"data": {
|
|
225
|
+
"documentType": "DNI",
|
|
226
|
+
"documentNumber": "87654321",
|
|
227
|
+
"firstName": "Carlos",
|
|
228
|
+
"lastName": "Vega Mendoza",
|
|
229
|
+
"fullName": "Carlos Vega Mendoza",
|
|
230
|
+
"dateOfBirth": "19-12-1995",
|
|
231
|
+
"civilStatus": "SOLTERO",
|
|
232
|
+
"sex": "M",
|
|
233
|
+
"address": "Av. Ejemplo 100"
|
|
234
|
+
},
|
|
235
|
+
"signature": {
|
|
236
|
+
"message": "Certified by Verifik.co",
|
|
237
|
+
"dateTime": "April 16, 2025 2:43 PM"
|
|
238
|
+
},
|
|
239
|
+
"id": "FHBCC"
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
### Example 3 — Mexico CURP
|
|
247
|
+
|
|
248
|
+
**Tool:** feature for `v2/mx/curp`
|
|
249
|
+
|
|
250
|
+
**Arguments:**
|
|
251
|
+
|
|
252
|
+
```json
|
|
253
|
+
{
|
|
254
|
+
"documentType": "CURP",
|
|
255
|
+
"documentNumber": "GOML900101HDFRNS09"
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**MCP result (HTTP 200):**
|
|
260
|
+
|
|
261
|
+
```json
|
|
262
|
+
{
|
|
263
|
+
"httpStatus": 200,
|
|
264
|
+
"statusText": "OK",
|
|
265
|
+
"durationMs": 356,
|
|
266
|
+
"request": {
|
|
267
|
+
"method": "GET",
|
|
268
|
+
"url": "https://api.verifik.co/v2/mx/curp?documentType=CURP&documentNumber=GOML900101HDFRNS09"
|
|
269
|
+
},
|
|
270
|
+
"body": {
|
|
271
|
+
"data": {
|
|
272
|
+
"documentType": "CURP",
|
|
273
|
+
"documentNumber": "GOML900101HDFRNS09",
|
|
274
|
+
"firstName": "Luis",
|
|
275
|
+
"lastName": "Ramírez",
|
|
276
|
+
"fullName": "Luis Ramírez",
|
|
277
|
+
"dateOfBirth": "1990-01-01",
|
|
278
|
+
"nationality": "Mexican"
|
|
279
|
+
},
|
|
280
|
+
"signature": {
|
|
281
|
+
"message": "Certified by Verifik.co",
|
|
282
|
+
"dateTime": "January 16, 2024 3:44 PM"
|
|
283
|
+
},
|
|
284
|
+
"id": "MX001"
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
### Example 4 — Chile RUN / RUT
|
|
292
|
+
|
|
293
|
+
**Tool:** feature for `v2/cl/cedula`
|
|
294
|
+
|
|
295
|
+
**Arguments:**
|
|
296
|
+
|
|
297
|
+
```json
|
|
298
|
+
{
|
|
299
|
+
"documentType": "RUN",
|
|
300
|
+
"documentNumber": "123456789"
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
**MCP result (HTTP 200):**
|
|
305
|
+
|
|
306
|
+
```json
|
|
307
|
+
{
|
|
308
|
+
"httpStatus": 200,
|
|
309
|
+
"statusText": "OK",
|
|
310
|
+
"durationMs": 298,
|
|
311
|
+
"request": {
|
|
312
|
+
"method": "GET",
|
|
313
|
+
"url": "https://api.verifik.co/v2/cl/cedula?documentType=RUN&documentNumber=123456789"
|
|
314
|
+
},
|
|
315
|
+
"body": {
|
|
316
|
+
"data": {
|
|
317
|
+
"documentType": "RUN",
|
|
318
|
+
"documentNumber": "123456789",
|
|
319
|
+
"firstName": "Valentina",
|
|
320
|
+
"lastName": "Soto",
|
|
321
|
+
"fullName": "Valentina Soto"
|
|
322
|
+
},
|
|
323
|
+
"signature": {
|
|
324
|
+
"message": "Certified by Verifik.co",
|
|
325
|
+
"dateTime": "January 16, 2024 3:44 PM"
|
|
326
|
+
},
|
|
327
|
+
"id": "CL001"
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
### Example 5 — Colombia vehicle by plate
|
|
335
|
+
|
|
336
|
+
**Tool:** feature for `v2/co/runt/vehicle-by-plate`
|
|
337
|
+
|
|
338
|
+
**Arguments:**
|
|
339
|
+
|
|
340
|
+
```json
|
|
341
|
+
{
|
|
342
|
+
"plate": "ABC123"
|
|
343
|
+
}
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
**MCP result (HTTP 200):**
|
|
347
|
+
|
|
348
|
+
```json
|
|
349
|
+
{
|
|
350
|
+
"httpStatus": 200,
|
|
351
|
+
"statusText": "OK",
|
|
352
|
+
"durationMs": 520,
|
|
353
|
+
"request": {
|
|
354
|
+
"method": "GET",
|
|
355
|
+
"url": "https://api.verifik.co/v2/co/runt/vehicle-by-plate?plate=ABC123"
|
|
356
|
+
},
|
|
357
|
+
"body": {
|
|
358
|
+
"data": {
|
|
359
|
+
"plate": "ABC123",
|
|
360
|
+
"brand": "Toyota",
|
|
361
|
+
"model": "Corolla",
|
|
362
|
+
"year": 2019,
|
|
363
|
+
"color": "Blanco",
|
|
364
|
+
"status": "Activo"
|
|
365
|
+
},
|
|
366
|
+
"signature": {
|
|
367
|
+
"message": "Certified by Verifik.co",
|
|
368
|
+
"dateTime": "March 10, 2025 11:20 AM"
|
|
369
|
+
},
|
|
370
|
+
"id": "RUNT01"
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
### Example 6 — Brazil background check (CPF)
|
|
378
|
+
|
|
379
|
+
**Tool:** feature for `v2/br/background-check`
|
|
380
|
+
|
|
381
|
+
**Arguments:**
|
|
382
|
+
|
|
383
|
+
```json
|
|
384
|
+
{
|
|
385
|
+
"documentType": "CPF",
|
|
386
|
+
"documentNumber": "123.456.789-00",
|
|
387
|
+
"dateOfBirth": "17/02/1990"
|
|
388
|
+
}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
**MCP result (HTTP 200):**
|
|
392
|
+
|
|
393
|
+
```json
|
|
394
|
+
{
|
|
395
|
+
"httpStatus": 200,
|
|
396
|
+
"statusText": "OK",
|
|
397
|
+
"durationMs": 1840,
|
|
398
|
+
"request": {
|
|
399
|
+
"method": "GET",
|
|
400
|
+
"url": "https://api.verifik.co/v2/br/background-check?documentType=CPF&documentNumber=123.456.789-00&dateOfBirth=17%2F02%2F1990"
|
|
401
|
+
},
|
|
402
|
+
"body": {
|
|
403
|
+
"data": {
|
|
404
|
+
"documentType": "CPF",
|
|
405
|
+
"documentNumber": "123.456.789-00",
|
|
406
|
+
"firstName": "Ana",
|
|
407
|
+
"lastName": "Oliveira",
|
|
408
|
+
"fullName": "Ana Oliveira",
|
|
409
|
+
"dateOfBirth": "17/02/1990",
|
|
410
|
+
"status": "clear",
|
|
411
|
+
"canIssueReports": true
|
|
412
|
+
},
|
|
413
|
+
"signature": {
|
|
414
|
+
"message": "Certified by Verifik.co",
|
|
415
|
+
"dateTime": "April 11, 2023 12:25 PM"
|
|
416
|
+
},
|
|
417
|
+
"id": "BR001"
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
### Document / face / KYC endpoints
|
|
425
|
+
|
|
426
|
+
Verifik offers document validation, face comparison, liveness, and enrollment flows (e.g. `v2/face-recognition/*`, `v2/biometric-validations/*`, `v2/document-validations/*`). Those APIs often require **image or file uploads**. This MCP server currently exposes only features with scalar parameters — binary dependencies are filtered out at catalog load time. Use the [Verifik REST API](https://docs.verifik.co) or [SmartEnroll](https://docs.verifik.co) directly for full document and biometric workflows until file upload support is added here.
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
### Error responses
|
|
431
|
+
|
|
432
|
+
Non-2xx responses are still returned as structured JSON (marked as MCP errors) so agents can handle them:
|
|
433
|
+
|
|
434
|
+
**404 — record not found:**
|
|
435
|
+
|
|
436
|
+
```json
|
|
437
|
+
{
|
|
438
|
+
"httpStatus": 404,
|
|
439
|
+
"statusText": "Not Found",
|
|
440
|
+
"durationMs": 198,
|
|
441
|
+
"request": {
|
|
442
|
+
"method": "GET",
|
|
443
|
+
"url": "https://api.verifik.co/v2/co/cedula?documentType=CC&documentNumber=9999999999"
|
|
444
|
+
},
|
|
445
|
+
"body": {
|
|
446
|
+
"code": "DOCUMENT_NOT_FOUND",
|
|
447
|
+
"message": "Document not found"
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
**409 — validation / missing parameter:**
|
|
453
|
+
|
|
454
|
+
```json
|
|
455
|
+
{
|
|
456
|
+
"httpStatus": 409,
|
|
457
|
+
"statusText": "Conflict",
|
|
458
|
+
"durationMs": 142,
|
|
459
|
+
"request": {
|
|
460
|
+
"method": "GET",
|
|
461
|
+
"url": "https://api.verifik.co/v2/co/cedula?documentType=CC"
|
|
462
|
+
},
|
|
463
|
+
"body": {
|
|
464
|
+
"code": "MissingParameter",
|
|
465
|
+
"message": "documentNumber is required"
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
## Country coverage
|
|
471
|
+
|
|
472
|
+
The exact tools you see depend on **your Verifik plan and enabled features**. The table below lists countries and representative endpoint paths from the [Verifik API catalog](https://docs.verifik.co/reference/endpoint-doc-index/). Each paid call consumes credits on your account.
|
|
473
|
+
|
|
474
|
+
| Country / region | Example capabilities | Example API paths |
|
|
475
|
+
| --- | --- | --- |
|
|
476
|
+
| **Argentina** | National ID, business, vehicle, criminal record | `v2/ar/cedula`, `v2/ar/company`, `v2/ar/vehicle` |
|
|
477
|
+
| **Bolivia** | National ID, business, vehicle, SOAT | `v2/bo/cedula`, `v2/bo/company`, `v2/bo/vehicle` |
|
|
478
|
+
| **Brazil** | National ID, CPF background check, business (CNPJ), vehicle | `v2/br/cedula`, `v2/br/background-check`, `v2/br/company` |
|
|
479
|
+
| **Canada** | Business, provincial driver license & plates | `v2/ca/company`, `v2/ca/ontario/driver-license` |
|
|
480
|
+
| **Chile** | National ID (RUN), taxpayer (RUT), vehicle, driver license | `v2/cl/cedula`, `v2/cl/taxpayer`, `v2/cl/vehicle` |
|
|
481
|
+
| **Colombia** | National ID, foreigner ID, police/judicial checks, RUNT vehicles, business (RUES/DIAN) | `v2/co/cedula`, `v2/co/runt/vehicle-by-plate`, `v2/co/policia/consultar` |
|
|
482
|
+
| **Costa Rica** | National ID, business, vehicle | `v2/cr/cedula`, `v2/cr/company`, `v2/cr/vehicle` |
|
|
483
|
+
| **Dominican Republic** | National ID | `v2/do/cedula` |
|
|
484
|
+
| **Ecuador** | National ID, vehicle & fines | `v2/ec/cedula`, `v2/ec/vehiculo/placa` |
|
|
485
|
+
| **El Salvador** | National ID (DUI) | `v2/sv/dui` |
|
|
486
|
+
| **Guatemala** | National ID | `v2/gt/cedula` |
|
|
487
|
+
| **Honduras** | National ID | `v2/hn/cedula` |
|
|
488
|
+
| **India** | Voter ID (EPIC) | `v2/in/epic` |
|
|
489
|
+
| **Mexico** | CURP, INE validation, business, vehicle by plate | `v2/mx/curp`, `v2/mx/ine`, `v2/mx/vehiculo/placa` |
|
|
490
|
+
| **Panama** | National ID, business | `v2/pa/cedula`, `v2/pa/company` |
|
|
491
|
+
| **Paraguay** | National ID (CIC), business, vehicle | `v2/py/cic`, `v2/py/company`, `v2/py/vehicle` |
|
|
492
|
+
| **Peru** | DNI (v3), foreigner ID, driver license, vehicle & SOAT | `v3/pe/cedula`, `v2/pe/vehiculo/placa`, `v2/pe/driver-license` |
|
|
493
|
+
| **Spain** | National ID, business, vehicle | `v2/es/cedula`, `v2/es/company` |
|
|
494
|
+
| **United States** | SSN verification, business, state driver licenses, vehicle/VIN | `v2/usa/ssn`, `v2/usa/company`, `v2/usa/vehicle` |
|
|
495
|
+
| **Uruguay** | National ID | `v2/uy/cedula` |
|
|
496
|
+
| **Venezuela** | National ID, foreigner ID | `v2/ve/cedula`, `v2/ve/foreigner-id` |
|
|
497
|
+
| **Worldwide** | Sanctions & watchlists (DEA, FBI, Interpol, OFAC, UN, Europol), IP geolocation, phone lookup | `v2/dea`, `v2/ofac`, `v2/interpol`, `v2/look-ups/phone` |
|
|
498
|
+
|
|
499
|
+
Run `verifik_list_catalog` in your MCP client to see the live list for your token. Filter by country with `VERIFIK_MCP_COUNTRY` or the `country` argument on the meta tool.
|
|
500
|
+
|
|
501
|
+
## Configuration
|
|
502
|
+
|
|
503
|
+
| Variable | Required | Default | Description |
|
|
504
|
+
| --- | --- | --- | --- |
|
|
505
|
+
| `VERIFIK_API_TOKEN` | **Yes** | — | API token from Smart-Agent → API Tokens |
|
|
506
|
+
| `VERIFIK_API_BASE` | No | `https://api.verifik.co` | API base URL (use `https://staging-api.verifik.co` for staging) |
|
|
507
|
+
| `VERIFIK_MCP_SMARTCHECK_ONLY` | No | `true` | When `true`, only expose SmartCheck-enabled features |
|
|
508
|
+
| `VERIFIK_MCP_COUNTRY` | No | — | Comma-separated country filter (e.g. `Colombia,Mexico,world`) |
|
|
509
|
+
| `VERIFIK_MCP_BASE_CATEGORY` | No | — | Comma-separated `baseCategory` filter |
|
|
510
|
+
| `VERIFIK_MCP_CODES` | No | — | Comma-separated feature code allowlist |
|
|
511
|
+
| `VERIFIK_MCP_CATALOG_REFRESH_MS` | No | `0` | In-memory catalog refresh interval in ms (`0` = load once at startup) |
|
|
512
|
+
| `VERIFIK_MCP_REQUEST_TIMEOUT_MS` | No | `90000` | Per-call HTTP timeout in ms (some endpoints can take 40–60s; increase if you see timeout errors) |
|
|
513
|
+
|
|
514
|
+
## Security
|
|
515
|
+
|
|
516
|
+
- Your API token stays on **your machine** in environment variables (or your MCP client's secure config). The server never logs the full token.
|
|
517
|
+
- Tool calls go **directly** from your machine to `api.verifik.co` (or your configured base URL). This package does not proxy through a third-party host.
|
|
518
|
+
- Use a dedicated API token with the minimum access your workflow needs. Rotate tokens from the Smart-Agent dashboard if compromised.
|
|
519
|
+
- Handle personal data according to your privacy policy and applicable regulations. Verifik responses contain sensitive identity information.
|
|
520
|
+
|
|
521
|
+
## Troubleshooting
|
|
522
|
+
|
|
523
|
+
| Symptom | What to check |
|
|
524
|
+
| --- | --- |
|
|
525
|
+
| Server exits immediately with `VERIFIK_API_TOKEN is required` | Set `VERIFIK_API_TOKEN` in your MCP config `env` block |
|
|
526
|
+
| No tools / empty catalog | Confirm the token is valid, your account has SmartCheck features enabled, and `VERIFIK_MCP_SMARTCHECK_ONLY` / country filters are not too restrictive |
|
|
527
|
+
| `401` / authentication errors | Regenerate the token in Smart-Agent → API Tokens |
|
|
528
|
+
| `402` / insufficient credits | Top up credits in your Verifik dashboard |
|
|
529
|
+
| `404` on a lookup | The document or record was not found — normal for invalid or non-existent identifiers |
|
|
530
|
+
| `409` on a lookup | Missing or invalid parameters — call `verifik_get_feature` with the feature `code` to see required fields |
|
|
531
|
+
| Expected tool missing | It may require file/image upload (not supported yet), may not be SmartCheck-enabled, or may not be on your plan — use `verifik_list_catalog` to inspect |
|
|
532
|
+
| Stale tool list after Verifik adds endpoints | Restart the MCP server, or set `VERIFIK_MCP_CATALOG_REFRESH_MS` to refresh periodically |
|
|
533
|
+
|
|
534
|
+
## Links
|
|
535
|
+
|
|
536
|
+
- [Verifik documentation](https://docs.verifik.co) — API reference, guides, and endpoint index
|
|
537
|
+
- [Smart-Agent dashboard](https://ai.verifik.co) — API tokens, SmartCheck catalog, Check Lists
|
|
538
|
+
- [Verifik website](https://verifik.co) — product overview and contact
|
|
539
|
+
- [Model Context Protocol](https://modelcontextprotocol.io) — MCP specification
|
|
540
|
+
|
|
541
|
+
## Requirements
|
|
542
|
+
|
|
543
|
+
- Node.js 18+
|
|
544
|
+
- A Verifik account with API access and available credits
|