AI Agent • Identity • Attestations • Wallets
We provide Identity, Attestations and Wallets to AI Agents
In regulated environments, AI agents must prove who they are and exchange verified information with individuals and legal entities. We provide compliant tools to AI agents via the Model Context Protocol so agents can request, verify and use claims—safely.
Decentralized Identifiers (DIDs)
Verifiable Credentials
Data Wallets
MCP tools
OIDC4VC stack
Why do AI agents need identity?
Trust in a regulated world
Agents increasingly act on behalf of people and organizations: they schedule, purchase, sign, and access data. In sectors like finance, health, mobility or public services, actions must be tied to an accountable identity and verifiable attestations (age, role, mandate, risk level, etc.).
EUDI + OIDC4VP allow wallets to present selective, privacy‑preserving claims. MCP makes these flows available to agents through simple tools.
Interoperable by design
- Works with data wallets such as Talao.
- Pull‑based verifier flow (OIDC4VP), exposed over MCP.
- Fits App‑to‑Agent and Human‑in‑the‑loop experiences.
What you can do today
Connect wallets to agents
Agents initiate a verifiable presentation, show a deep link / QR, then poll for verification and retrieve claims — all through MCP tools.
- Bridge wallets through an OIDC4VP verifier to AI agents.
- Designed for App‑to‑Agent (A2A) workflows.
Available MCP tools
start_wallet_verification — create an OIDC4VP request; returns openid4vp:// deeplink and a QR (image block + structuredContent).
poll_wallet_verification — check status (pending, verified, denied) and fetch claims.
revoke_wallet_flow — acknowledge flow cleanup (TTL handled server‑side).
Calls use Authorization: Bearer <token> or X-API-KEY. For public tests, token/key equals the verifier_id.
How it works
Agent calls start_wallet_verification
The MCP client requests a presentation from a user wallet. The request scope is bound to the verifier_id.
User opens wallet
The agent shows the QR or link. The user scans with their wallet and consents to share data.
Agent polls
Agent calls poll_wallet_verification with session_id until status changes from pending.
Claims available
When verified, the server returns verifiable data and metadata.
Demo verifiers → default scopes → returned data
- 0000 →
wallet_identifier → returns wallet_identifier (DID or JWK thumbprint)
- 0001 →
email → returns email_address (email)
- 0002 →
over18 → returns boolean over_18
- 0003 →
profile → returns family_name, given_name, birth_date
# Example poll payloads
{ "status": "verified", "session_id": "...", "wallet_identifier": "did:jwk:..." }
{ "status": "verified", "session_id": "...", "email_address": "user@example.com" }
{ "status": "verified", "session_id": "...", "over_18": true }
{ "status": "verified", "session_id": "...", "family_name": "DOE", "given_name": "John", "birth_date": "1990-01-01" }
Only the fields relevant to the selected demo verifier will be present.
Use cases
KYC/KYB agent handshakes
An agent requests a wallet presentation to obtain a wallet identifier and basic identity claims (name, over‑18). The agent then customizes interaction and access based on verified attributes.
Role & mandate proof
Before executing actions (purchase, booking, data access), the agent verifies that the user holds a role or mandate (e.g., company officer) and logs the presentation reference for auditability.
Age‑gated experiences
For restricted services, the agent requests an over‑18 attestation without learning the birth date—preserving privacy.
Verified contact loop
Agents collect a verified email (or other claims) to follow up with users across channels while keeping raw tokens out of the agent context.
Access to sensitive APIs
Gate downstream APIs (payments, health, mobility) with a short‑lived session that is unlocked only when the presentation is verified.
Audit & provenance
Record the presentation status and derived claims so human operators can trace what the agent knew when it acted.
Quick start
Use public test profiles: verifier_id ∈ { 0000, 0001, 0002, 0003 }. The header token can be Authorization: Bearer <verifier_id> (or X-API-KEY: <verifier_id>). Each demo verifier has a default scope bound to it.
cURL (MCP JSON‑RPC)
# 1) List tools
curl -s https://wallet-connectors.com/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# 2) Start verification (server can generate session_id)
curl -s https://wallet-connectors.com/mcp \
-H 'Content-Type: application/json' \
-H 'X-API-KEY: 0000' \
-d '{
"jsonrpc":"2.0",
"id":2,
"method":"tools/call",
"params":{
"name":"start_wallet_verification",
"arguments":{"verifier_id":"0000", "session_id": "user-1234"}
}
}'
# 3) Poll (use the session_id from step 2)
curl -s https://wallet-connectors.com/mcp \
-H 'Content-Type: application/json' \
-H 'X-API-KEY: 0000' \
-d '{
"jsonrpc":"2.0",
"id":3,
"method":"tools/call",
"params":{
"name":"poll_wallet_verification",
"arguments":{"session_id":"user-1234"}
}
}'
Python (agent side)
import json, requests
MCP_URL = "https://wallet-connectors.com/mcp"
HEADERS = {"Content-Type":"application/json", "X-API-KEY":"0000"}
# 1) start verification
payload = {
"jsonrpc":"2.0", "id":1, "method":"tools/call",
"params":{"name":"start_wallet_verification", "arguments":{"verifier_id":"0000","session_id":"user-1234"}}
}
start = requests.post(MCP_URL, headers=HEADERS, data=json.dumps(payload)).json()
content = start["result"]["structuredContent"]
print("Deep link:", content["deeplink_url"]) # show to user; also display QR from result.content[0]
# 2) poll until verified
poll = {
"jsonrpc":"2.0", "id":2, "method":"tools/call",
"params":{"name":"poll_wallet_verification", "arguments":{"session_id":"user-1234"}}
}
while True:
res = requests.post(MCP_URL, headers=HEADERS, data=json.dumps(poll)).json()
status = res["result"]["structuredContent"]["status"]
if status != "pending":
print(res["result"]["structuredContent"]) # claims here
break
Understanding responses
The MCP server returns result.content (array of blocks) and result.structuredContent (machine JSON).
{
"result": {
"content": [
{"type":"image","data":"<base64png>","mimeType":"image/png"},
{"type":"text","text":"Scan the QR code or open wallet link: openid4vp://....."}
],
"structuredContent": {
"status": "pending",
"session_id": "3e02ac7e-da66-4dd1-9abe-30348dcc728f",
"deeplink_url": "openid4vp://.....?request_uri=https://.../request_uri/abc",
"pull_url": "https://wallet-connectors.com/verifier/wallet/pull/3e02..."
}
}
}
Security & privacy
Least‑privilege MCP
Only the start/poll/revoke actions are exposed to agents.
Token redaction
Raw tokens are not returned; the server exposes derived claims only.
TTL‑based cleanup
Flows expire automatically in the verifier backend (Redis TTL). No data are stored on servers.
Ready to give your agent a wallet & identity?
Use the MCP tools above or see /mcp/info for server metadata.