Provenance

Let agents act. Keep a human on the calls that matter.

Wrap a tool in a few lines, and a person approves the actions your rules flag.

How it works · Agents

From a tool call to a human-approved action.

Clean up the CRM
I'll delete 4,210 contacts tagged churned.
Step 01 · your agent

An agent reaches for a consequential tool

Your agent decides to delete records. The tool call is built in your stack, as today.

Step 1 of 6
Works with the frameworks you use

Drop-in for MCP, the Vercel AI SDK, and LangChain.

An adapter verifies a tool's exact arguments before it runs. The hosted MCP server gives Claude or any MCP client the same tools.

MCPVercel AI SDKLangChainPython SDK
@provenance/agent-adapters · @provenance/mcp-server
  1. your agent
    Tool call · exact arguments
    MCP · AI SDK · LangChain adapter
  2. the gate
    Authorize + verify
    policy passed · human approved if required
  3. only when valid
    Your tool runs
Available today

Everything you need to put a human gate on agent actions.

Framework adapters

Gate a tool in MCP, the Vercel AI SDK or LangChain. The payload is derived once from its arguments, so nothing drifts.

Hosted MCP server

Connect Claude or any MCP client to Provenance in two minutes, over npx or Streamable HTTP.

Agent registry

Name your agents, see per-agent activity, and suspend one with a single call.

Step-up approvals

Your policy decides which actions need a person, who approves with Face ID or a passkey.

Deny alerts

“Your agent tried X and was blocked,” by email, SMS, Slack or a webhook.

Revocation & audit

Revoke a session or device instantly. Every decision is in a hash-chained ledger.

Start integrating

What the adapters call for you.

Pick an endpoint, flip the toggles, and send.

POST /v1/intent/authorizeThe adapters call this for you when a gated tool runs: the exact arguments become the action_payload, and an agent_id from your agent registry attributes the request to a named agent in receipts, alerts, and per-agent stats.

Request
POST /v1/intent/authorize
{
  "action_description": "Delete 4,210 contacts tagged churned",
  "action_payload": { "tool": "delete_contacts", "tag": "churned" },
  "agent_session_id": "sess_2b…",
  "agent_id": "agt_crm_cleanup",
  "device_id": "dev_9a…"
}
Response
Click “Send request” to see the response.

An illustration with real field names and reason codes — nothing is sent from this page.