MCP Tools

Live: https://dev.mcp.ivalt.com/mcp (http://dev.mcp.ivalt.comhttps). Health: https://dev.mcp.ivalt.com/health.

The iVALT MCP server exposes the following tools. All responses are wrapped as MCP text content with pretty-printed JSON.

Shared input fields

request_approval and request_approval_async share these input fields. check_status uses its own.

Field Type Required Description
action string yes Human-readable description of the sensitive action.
reason string no Optional extra context shown alongside the action.
approver_mobile string no E.164 phone (e.g. +12025550123). Overrides IVALT_DEFAULT_MOBILE.
factors string[] no Verification factors: biometric, location, time, device. Defaults to IVALT_DEFAULT_FACTORS.

request_approval

Sends an iVALT push, waits for the approver to respond, and returns a PKI-signed attestation. This call blocks until approval, denial, or timeout.

Input

{
  "action": "Approve production deploy",
  "reason": "Urgent hotfix",
  "approver_mobile": "+12025550123",
  "factors": ["biometric", "location"],
  "timeout_s": 60
}

Output

{
  "status": "approved",
  "attestation": { ... }
}

request_approval_async

Fires the approval and returns a request_id immediately. Use check_status to poll the result.

Input

{
  "action": "Approve database migration",
  "approver_mobile": "+12025550123",
  "factors": ["biometric"]
}

Output

{
  "status": "pending",
  "request_id": "eyJtIjoi...",
  "approver_mobile": "+12025550123",
  "expires_at": "2026-08-27T12:00:00.000Z"
}

check_status

Polls a request_id returned by request_approval_async.

Input

{
  "request_id": "eyJtIjoi..."
}

Output

{
  "status": "approved",
  "request_id": "eyJtIjoi...",
  "attestation": { ... }
}

Response wrapper

Every tool result is returned to the MCP client as:

{
  "content": [{ "type": "text", "text": "<pretty-printed JSON>" }],
  "isError": false
}

When isError is true, the payload contains status: 'error' and a detail string.