Skip to content

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/verify

Sign 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_… (or prs_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:

ToolNeedsWhat it does
list_verification_requirementsverifications:readWhat a verification can ask for: the catalogue. Call it first.
upload_verification_documentverifications:writeUpload a PDF (base64, up to 12 MB) to be signed; returns its id.
create_verificationverifications:writeAsk a person to prove something or sign a PDF; returns share_url to send them.
quote_verificationverifications:readWhat a verification would cost, without creating it.
get_verificationverifications:readThe status and every answer, signed by Prson. Files are download paths.
list_verificationsverifications:readYour verifications, newest first, by status or external_ref.
cancel_verificationverifications:writeWithdraw one; the unspent reserve goes back.
get_balanceany key or connectionThe organisation, the spend cap and its balances.
get_ledgereither productMoney in and out.
top_upeither productA payment link for a person to add money.
list_webhooksAPI key onlyYour webhook endpoints and the events.
create_webhookAPI key onlyBe told the moment someone answers.
delete_webhookAPI key onlyRemove 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

conversation
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 verifyVerdict from @prson/login-verifier.
  • Don't use it to identify or check on someone without their knowledge.