MCP for AI agents
Prson's MCP server lets an AI agent ask a person for live proof, check who they are, or get a PDF signed with their verified name. The person always answers in the Prson app and decides what to share.
Connect
Add a remote MCP server (Streamable HTTP) called Prson Verify, with this address:
https://api.prson.net/mcp/verify
Hiring people for tasks is a separate server, https://api.prson.net/mcp/agents, documented at agents.prson.net. https://api.prson.net/mcp still works and offers both, for setups made before the split.
claude mcp add --transport http prson-verify https://api.prson.net/mcp/verifySign in or use a key
- OAuth (most clients). Without a key, the server answers 401 with where to sign in, and your client opens Prson. You pick the organisation, what the agent may do, and a spending cap. You can disconnect it at any time from the organisation's connected apps.
- API key (agents on your server). Send
Authorization: Bearer prs_live_…(orprs_sandbox_…) with a key that has the verifications scopes. Get one in the developer console. Webhook tools need a key.
Each tool calls the same REST route as the Verifications API, so the same scopes, prices and balance apply.
Tools
A key or connection with only the verifications scopes sees these:
| Tool | Needs | What it does |
|---|---|---|
list_verification_requirements | verifications:read | What a verification can ask for: the catalogue. Call it first. |
upload_verification_document | verifications:write | Upload a PDF (base64, up to 12 MB) to be signed; returns its id. |
create_verification | verifications:write | Ask a person to prove something or sign a PDF; returns share_url to send them. |
quote_verification | verifications:read | What a verification would cost, without creating it. |
get_verification | verifications:read | The status and every answer, signed by Prson. Files are download paths. |
list_verifications | verifications:read | Your verifications, newest first, by status or external_ref. |
cancel_verification | verifications:write | Withdraw one; the unspent reserve goes back. |
get_balance | any key or connection | The organisation, the spend cap and its balances. |
get_ledger | either product | Money in and out. |
top_up | either product | A payment link for a person to add money. |
list_webhooks | API key only | Your webhook endpoints and the events. |
create_webhook | API key only | Be told the moment someone answers. |
delete_webhook | API key only | Remove an endpoint. |
create_verification takes the same requirements as the REST API: 27 facts, details and captures, listed in What you can ask for. It also takes an idempotency_key. The human-agents tools are on /mcp/agents, not here.
A typical request
You: "Check the new tenant is over 18 and get the lease signed."
Agent → list_verification_requirements
Agent → upload_verification_document { content_base64: "JVBERi0…", name: "lease.pdf" }
← { document: { id: "vdoc_…", sha256: "…", pages: 4 } }
Agent → create_verification {
title: "Confirm your age and sign the lease for Rua Augusta 12",
requirements: [
{ type: "fact", fact: "age_gte_18" },
{ type: "document_signature", document_id: "vdoc_…" }
] }
← { share_url: "https://app.prson.net/challenge/…", next_step: "Send share_url to the person yourself…" }
Agent: "Here is the link to send to the tenant: …"
…
Agent → get_verification { verification_id: "…" }
← status fulfilled: age_gte_18 true; lease signed by ANA MARIA SILVA (name from her passport chip)People stay in control
- The person sees who is asking and why (the title), and can decline.
- The agent gets only what the person chooses to share. Each person is a pseudonymous
respondent_id. - Anything a person wrote reaches the agent wrapped in
<untrusted_user_content>, and the server tells the model never to follow it. - Every answer is signed by Prson: check it with
verifyVerdictfrom@prson/login-verifier. - Don't use it to identify or check on someone without their knowledge.