Overview and setup
MCP (Model Context Protocol) lets an integrator's AI agent work with Biometric.Vision: inspect the organization's subscriptions, create and update Workflows, and run a one-time session smoke test. The MCP server works with Claude Code, Cursor, and Codex.
The v2 interface and documentation use the term Workflow. MCP tool and API field names retain flow, for example create_flow, flow_id, and flow_config.
The server uses MCP over Streamable HTTP:
Authenticate with the organization API key in the Authorization: Bearer <YOUR_ORG_API_KEY> header. The X-Org-API-Key: <YOUR_ORG_API_KEY> header is also supported.
Use MCP only during integration
MCP is intended for the integrator's AI agent. Do not call MCP tools from the production application's backend, frontend, route handlers, or background jobs.
Create sessions and retrieve results for each end user through the REST API. Choose how to present the verification interface based on the application: Remote Workflow, Widget Workflow, or WebView Workflow.
Rate limit
/mcp/* is limited to 60 requests per minute per IP address. When the limit is exceeded, the server returns HTTP 429 Too Many Requests, Retry-After, X-RateLimit-Limit, and X-RateLimit-Remaining. Wait for the number of seconds specified by Retry-After, then retry.
sequenceDiagram
participant AGENT as Integrator AI agent
participant KYC as Biometric.Vision
participant APP as Customer application
participant USER as End user
note over AGENT,KYC: One-time setup through MCP
AGENT->>KYC: Verify organization and subscriptions
AGENT->>KYC: Create or update Workflow
AGENT->>KYC: Create and inspect test session
note over APP,KYC: Production through REST API
USER->>APP: Start verification
APP->>KYC: Create Workflow session
KYC-->>APP: session_id
APP-->>USER: Open Remote, Widget, or WebView
APP->>KYC: Retrieve session result
KYC-->>APP: Technology results
1. Get the organization API key¶
Copy the organization API key from the dashboard: Settings → Company details → API KEY.
The organization key gives the MCP server access to the organization's settings. Keep it in the AI agent's local configuration, do not commit it to the repository, and do not pass it to the production application. The application uses a separate Workflow API key for REST integration, returned by create_flow.
2. Connect the MCP server¶
Add the server for the current project:
claude mcp add --transport http --scope local kyc \
https://kyc.biometric.vision/mcp/ \
--header "Authorization: Bearer <YOUR_ORG_API_KEY>"
Check the connection with claude mcp get kyc or open /mcp in Claude Code.
Create .cursor/mcp.json in the project or ~/.cursor/mcp.json for a global configuration:
{
"mcpServers": {
"kyc": {
"url": "https://kyc.biometric.vision/mcp/",
"headers": {
"Authorization": "Bearer <YOUR_ORG_API_KEY>"
}
}
}
}
Reload the MCP server in Cursor settings or restart Cursor.
Add the server to ~/.codex/config.toml or the project's .codex/config.toml. Supply the key through an environment variable:
[mcp_servers.kyc]
url = "https://kyc.biometric.vision/mcp/"
bearer_token_env_var = "KYC_ORG_API_KEY"
Set the variable before starting Codex:
Run codex mcp list, then open /mcp in Codex and confirm that the server is available.
3. Verify the connection¶
After connecting, call two tools:
get_organization(api_key="<YOUR_ORG_API_KEY>")verifies the organization. Thestatusfield identifies the environment asTEST,DEMO, orPRODUCTION.list_subscription_technologies()returns the technologies available to the organization, including theirid,code, andname.
If the connection does not work:
| Symptom | Likely cause and action |
|---|---|
401 Unauthorized |
The API key is missing, invalid, or no longer active. Copy the organization key again. |
429 Too Many Requests |
The per-IP limit was exceeded. Wait for the duration in Retry-After. |
The kyc tools are not shown |
Reload the MCP server or restart the client. |
| Connection or DNS error | Check the full URL, including https:// and the trailing /. |
| A different organization is returned | The configuration contains another organization's key. |
4. Design the Workflow¶
A Workflow defines the technologies an end user completes and their order. Before creating a Workflow:
- Retrieve the available technologies with
list_subscription_technologies(). - Define the business case, user countries, required checks, and acceptable user friction.
- Confirm the technology composition and order with the product owner.
- Read the MCP reference resources for current defaults and valid identifiers.
| Resource | Purpose |
|---|---|
kyc://reference/flow-config-defaults |
Default values for flow_config. |
kyc://reference/technology-config-defaults |
Available settings and defaults for each technology. |
kyc://reference/document-recognition-countries |
Country identifiers for doc_recognition_config.allowed_countries. |
kyc://reference/document-recognition-document-types |
Document-type identifiers for doc_recognition_config.allowed_document_types. |
Create digital-signature Workflows in the dashboard
Do not pass technologies with the DSI, DSN, or DSS codes to create_flow. These Workflows have additional certificate-authority and signer-identification constraints that this MCP path does not validate.
Create a digital-signature Workflow in the dashboard, then find it with list_flows() and retrieve it with get_flow(flow_id=...).
5. Create the Workflow¶
Pass the UUIDs returned by list_subscription_technologies() to technology_ids in execution order. Short technology codes are not valid for this field.
Minimal call:
{
"request_data": {
"name": "kyc-production",
"display_name": "KYC verification",
"technology_ids": [
"<TECHNOLOGY_UUID_1>",
"<TECHNOLOGY_UUID_2>"
],
"flow_config": {
"success_redirect_url": "https://example.com/kyc/return",
"failure_redirect_url": "https://example.com/kyc/return"
}
}
}
If configurations are not supplied for every technology, create_flow asks whether to use defaults or provide individual overrides:
declineapplies defaults to every technology;acceptconfigures the technologies in sequence;cancelaborts Workflow creation.
If technology_configs is supplied for every technology and display_name is set, no additional prompts appear. The create_flow response contains:
id: the Workflow UUID;api_key: the Workflow API key used to create production sessions through the REST API.
Store api_key in the backend secret manager. Never pass it to a browser or mobile application.
6. Run a smoke test¶
Before wiring production code, test the complete Workflow:
- Call
create_flow_session(flow_api_key="<WORKFLOW_API_KEY>")and save thesession_id. - Complete verification at
https://remote.biometric.vision/flow/<session_id>. - Call
get_flow_session_light_result(session_id="<SESSION_ID>"). - Inspect
status,overall_result, each technology result, andfailure_reasonsif the session failed.
After the smoke test, connect the Workflow to the application through Remote Workflow, Widget Workflow, or WebView Workflow. The production application creates sessions and retrieves results through the REST API.
MCP tools¶
| Tool | Purpose |
|---|---|
get_organization(api_key) |
Retrieve the organization and its status. |
list_subscription_technologies() |
Retrieve technologies available under the organization's subscriptions. |
list_flows(limit, offset) |
List Workflows with pagination. |
get_flow(flow_id) |
Retrieve a Workflow and its configuration. |
create_flow(request_data) |
Create a Workflow. May request settings through elicitation. |
update_flow(request_data) |
Partially update a Workflow. |
create_flow_session(flow_api_key) |
Create a session for a smoke test. |
get_flow_session(session_id) |
Retrieve structured session data without media URLs. |
get_flow_session_light_result(session_id) |
Retrieve the result with temporary signed media URLs. |
update_flow_session_status(session_id, request_data) |
Manually set APPROVED or DECLINED. |
list_flow_session_reviews(session_id) |
Retrieve the session review log. |
create_flow_session_review(session_id, request_data) |
Add a MESSAGE entry to the review log. |
A ready-to-use agent instruction is available on the AI integration prompt page.