Soulprint gives any AI agent a 100-point trust score: ZK-verified human identity (0–80) + behavioral reputation across the ecosystem (0–20). No servers. No PII. No central authority.
Agents book flights, submit job applications, call financial APIs. But services have no way to know if there's a real human behind the request — or a bot farm.
MCP and agent frameworks have no native identity. Any bot can call any service as if it were human.
A spammer and a legitimate user are identical. Services can't warn each other about bad actors.
High-trust actions (job applications, financial queries) require human verification that doesn't exist.
ZK identity + behavioral reputation + verified service attestations = complete trust layer.
Everything happens locally. Your biometrics never leave your device.
Tesseract OCR reads the document. ICAO 9303 check digits validate the MRZ. InsightFace matches your face to the document photo.
Circom circuit (844 constraints, Groth16) generates a proof. Private inputs: ID number, DOB, face embedding, salt. Public output: nullifier — mathematically derived, no way to reverse.
An Ed25519-signed Soulprint Token (SPT, ~700 bytes) encodes your DID, credential scores, bot reputation, and ZK proof. Valid 24h, auto-renews. Works offline.
Pass the token to any Soulprint-integrated service. Score ≥ 60 unlocks KYC features. Score ≥ 95 unlocks premium endpoints requiring verified identity + clean behavioral record.
Two independent components that compound into a complete trust picture.
| Credential | Points | How | Status |
|---|---|---|---|
| 📧 EmailVerified | +8 | Email confirmation link | Available |
| 📱 PhoneVerified | +12 | SMS OTP | Available |
| 🐙 GitHubLinked | +16 | OAuth | Available |
| 🪪 DocumentVerified | +20 | OCR + MRZ check digits (ICAO 9303) | Available |
| 🤳 FaceMatch | +16 | InsightFace biometric match | Available |
| 🔒 BiometricBound | +8 | Device binding | Available |
Starts at 10 (neutral). Verified services issue +1 or -1 attestations. Propagates P2P across all nodes.
| Score | Identity | Access | Example |
|---|---|---|---|
| 0–17 | Anonymous | Basic read-only | Search products, view listings |
| 18–35 | Email/Phone | Standard tools | Hotel search, financial comparators |
| 36–59 | Partial KYC | Most features | Detailed financial queries |
| 60–94 | KYCFull | Advanced features | Service integrations, gated tools |
| 95–100 | KYCFull + reputation | Premium endpoints | trabajo_aplicar — verified job application |
The first MCP server to integrate Soulprint. Every tool call is tracked. Spam gets -1 rep. Normal usage earns +1. Premium job applications require score ≥ 95.
trabajo_aplicar// Bot with score 94: BLOCKED { "error": "Score insuficiente: 94 < 95 requerido" } // Bot with score 97: APPROVED ✅ { "application_id": "SP-M9X3K2-Z6MK4F", "applicant": { "did": "did:key:z6Mk...", // unique — no PII "score": 97, "verified": true }, "trust_guarantees": { "human_verified": true, // Groth16 ZK proof "no_spam_history": true, // bot_rep ≥ 8 "zkp": true // proof included } }
All MIT licensed. Install only what you need. No vendorlock.
import { soulprint } from 'soulprint-mcp'; const server = new McpServer({ name: 'my-service', version: '1.0' }); server.use(soulprint({ minScore: 60 })); // require KYCFull or better server.tool('premium-action', ..., async (args, ctx) => { // ctx._soulprint.did → verified human identity // ctx._soulprint.score → 0-100 // ctx._soulprint.bot_rep → 0-20 reputation });
The protocol is country-agnostic. Each country is one TypeScript file. Contribute yours and your whole country benefits.
// packages/verify-local/src/document/countries/ES.ts import { CountryVerifier } from '../verifier.interface.js'; const ES: CountryVerifier = { countryCode: 'ES', countryName: 'Spain', documentTypes: ['dni', 'nie'], parse(ocrText: string) { /* extract fields */ }, validate(docNumber: string) { /* mod-23 check digit */ }, }; export default ES;
We're not replacing KYC providers. We're building the open alternative for AI-native use cases.
| Feature | Soulprint | Worldcoin | Stripe Identity | Persona |
|---|---|---|---|---|
| Open source | ✅ MIT | ❌ | ❌ | ❌ |
| Bot reputation layer | ✅ P2P attestations | ❌ | ❌ | ❌ |
| MCP/agent native | ✅ soulprint-mcp | ❌ | ❌ | ❌ |
| No PII stored | ✅ | ✅ | ❌ | ❌ |
| Works offline | ✅ | ❌ | ❌ | ❌ |
| ZK proofs | ✅ Groth16 | ✅ | ❌ | ❌ |
| No monthly fee | ✅ free | ✅ | ❌ per-check | ❌ per-check |
| Multi-country documents | ✅ 7+ countries | 🟡 iris only | ✅ | ✅ |
| Self-hosted node | ✅ | ❌ | ❌ | ❌ |
| npm installable | ✅ 7 packages | ❌ | ❌ | ❌ |
npx soulprint node --port 4888. The node exposes a REST API for attestation submission,
reputation queries, and peer registration. It persists reputation and peers to ~/.soulprint/node/.
When it receives a valid attestation, it gossips it to all known peers (fire-and-forget, 3s timeout).
Eventually all nodes in the network converge.
npx soulprint node) for development.
Every service that integrates Soulprint makes the ecosystem more valuable. Every PR adds a country. Every star tells developers this matters.