Skip to Content
AI & AgentsTools

MCP tool reference

All tools require an OAuth 2.1 Bearer token with scope mcp (see How auth works). The acting user is the token’s sub — no user id is passed. On failure, every tool returns {"status": "error", "message": "..."}.

ToolWhat it doesKey paramsReturnsAuth
verification_requestAsks the signed-in user to approve a sensitive action with a face scan on their Valyd app. Call before anything risky (delete, payment, sharing data).action_type (required), title (required), description (required)valyd_session_id, status (PENDING), expires_atBearer token, scope mcp
verification_statusChecks the result of a verification started by verification_request. Poll until no longer PENDING.valyd_session_id (required)status (PENDING / APPROVED / DENIED / DECLINED / EXPIRED), result, assurance_level, expires_atBearer token, scope mcp
do_taskRuns a web/browser task for the signed-in user via the Valyd agent — open sites, fill forms, complete actions. The browser profile persists per user; may take several minutes.task (required), start_url (optional), user_uuid (optional profile override)uuid, response, successBearer token, scope mcp

If do_task needs a login, card, or personal detail, the agent fetches it securely from Valyd (the user approves on their phone) — secrets are never returned to the calling agent in plain text.

Parameters in detail

verification_request

NameTypeRequiredDescription
action_typestringYesKind of action, e.g. "delete", "payment", "update"
titlestringYesShort title shown on the approval prompt
descriptionstringYesContext the user reads before deciding

verification_status

NameTypeRequiredDescription
valyd_session_idstringYesThe id returned by verification_request

do_task

NameTypeRequiredDescription
taskstringYesWhat the agent should do, in plain language
start_urlstringNoPage to open before starting
user_uuidstringNoProfile override; defaults to the signed-in user

Worked example — human-in-the-loop approval

1 — The agent calls verification_request:

{ "action_type": "delete", "title": "Delete production database", "description": "The agent wants to drop the prod database. Approve only if you asked for this." }

Response — PENDING until the user responds:

{ "valyd_session_id": "uuid-string", "status": "PENDING", "expires_at": "2026-06-24T09:10:46+00:00" }

2 — The agent polls verification_status with the valyd_session_id until status is no longer PENDING:

{ "valyd_session_id": "uuid-string", "status": "APPROVED", "result": "...", "assurance_level": "high", "expires_at": "2026-06-24T09:10:46+00:00" }

3 — If APPROVED, perform the action. If DENIED / DECLINED / EXPIRED, abort and tell the user. You can also gate a do_task behind an approval for sensitive web actions.

Status reference

StatusMeaning
PENDINGWaiting for the user to respond on their Valyd app. Keep polling.
APPROVEDThe user approved (face-verified). Proceed with the action.
DENIEDThe system/policy denied the request.
DECLINEDThe user explicitly declined. Do not proceed.
EXPIREDexpires_at passed without a decision.

When present, assurance_level (e.g. high) describes how strongly the user was verified.

Last updated on