Three steps to a verified answer.
- 01 · Install
pip install fayda-mcp - 02 · Configure
fayda-mcp check-config --env-file .env - 03 · Verify
fayda-mcp run --env-file .env
- →start_verification(purpose="kyc", checks=["identity_verified", "age_over_18"], …)
- ←request_id "vr_8c21f0" · authorization_url eSignet consent link
- ·The citizen signs in and consents on eSignet, outside the agent conversation.
- →get_verification_status("vr_8c21f0") → "verified"
- →get_verification_result("vr_8c21f0")
{ "request_id": "vr_8c21f0", "status": "verified", "checks": { "identity_verified": true, "age_over_18": true }, "reasons": {} }
Verification as tools. Results as booleans.
11 MCP tools
Start, check, fetch and cancel verifications from any MCP client.
eSignet OIDC
Citizens sign in with Fayda. PKCE and private_key_jwt built in.
Privacy-first results
Agents get booleans like age_over_18, never names or birth dates.
Offline QR
Checks a card's signature with no network. It can't prove the holder is present.
Details matching
Confirm what a customer told you, field by field, without seeing the values.
Your stack
Headless Python core with optional FastAPI, Redis and PostgreSQL extras.
A few lines of Python.
# Core: MCP tools, eSignet OIDC, offline QR
pip install fayda-mcp
# Optional FastAPI, Redis and PostgreSQL adapters
pip install "fayda-mcp[fastapi,redis,postgres]"
from fayda_mcp import FaydaConfig, FaydaVerificationService
from fayda_mcp.mcp.factory import create_mcp_server
from fayda_mcp.storage.memory import MemoryResultRepository, MemorySessionStore
service = FaydaVerificationService(
config=FaydaConfig.from_env(), # FAYDA_* variables
sessions=MemorySessionStore(),
results=MemoryResultRepository(),
)
server = create_mcp_server(service=service)
if __name__ == "__main__":
server.run(transport="stdio")
result = await service.submit_qr_verification(
qr_text="<raw_scanner_text>",
purpose="kyc",
checks=["credential_signature_valid", "age_over_18"],
)
result.checks # {'credential_signature_valid': True, 'age_over_18': True}
result.holder_authenticated # False: a scan can't prove the holder is present
{
"mcpServers": {
"fayda": {
"command": "fayda-mcp",
"args": ["run", "--transport", "stdio", "--env-file", "/path/to/.env"]
}
}
}
Private by design.
Minimal predicates
true, false or unavailable. Nothing more.
Data filtering
Schemas reject extra fields. Stored details use AES-256-GCM.
Cryptographic checks
PKCE S256, RFC 7523 assertions, JWKS and RS256 signatures.
Caller isolation
Each tenant and principal sees only its own records.
Independent open-source project. Not an official Fayda product or a compliance certification. Production guide
Frequently asked questions.
What is Fayda MCP?
Fayda MCP is an open-source Python toolkit and Model Context Protocol (MCP) server that connects AI assistants and agents (such as Claude Desktop, Cursor, and custom multi-agent systems) to Ethiopia's Fayda national digital ID platform via eSignet.
How does privacy-preserving identity verification protect citizen data?
LLM context windows should never hold unnecessary personally identifiable information (PII). Fayda MCP evaluates identity claims on the server and returns minimal boolean predicates (such as age_over_18: true) rather than raw personal details like names, dates of birth, or identification numbers.
Which AI agents and MCP clients are compatible?
Any AI tool or framework supporting Anthropic's Model Context Protocol can use Fayda MCP out of the box via stdio or HTTP/SSE transports. Supported environments include Claude Desktop, Cursor, Continue, LangChain, LlamaIndex, and custom agent runtimes.
How does offline Fayda QR code verification work?
Fayda MCP can cryptographically verify the digital signature embedded inside an Ethiopian Fayda QR code without contacting a network server. It validates the issuer signature against public certificates and confirms data integrity instantly.
What architecture and backend adapters does Fayda MCP support?
Built in modern Python (3.10+), Fayda MCP provides a headless core along with optional production adapters for FastAPI (REST/webhooks), Redis (fast distributed session storage), and PostgreSQL (AES-256-GCM encrypted persistence).
Is Fayda MCP officially affiliated with the National ID Program of Ethiopia?
No. Fayda MCP is an independent open-source community project distributed under the Apache-2.0 license. It integrates with standard Fayda and eSignet protocol specifications, but is not officially endorsed by NIDP.