Kvant

Developers

For agents

The same crypto core that runs in the browser ships as a Model Context Protocol server. Point Claude, Cursor, or any agent runtime at it, and encryption, signing, and verification become ordinary tool calls: the hard part of cryptography, getting it right, handled for you.

Six tools, one stdio server

Each tool reuses the web app's crypto core directly, no reimplementation, no network I/O, no telemetry. Everything runs locally over stdio.

ToolWhat it does
kvant_encrypt_fileSeal bytes into a .kvant blob + Quantum Seal
kvant_decrypt_fileRecover plaintext and verify the signer
kvant_send_messageWrap text into a shareable, signed URL
kvant_decrypt_messageRead a message URL and return the key that signed it
kvant_verify_sealParse a Quantum Seal and return its metadata
kvant_sign_x402Sign an x402 payment payload with ML-DSA-65

The wallet is the identity

An agent signs one fixed message with its EOA wallet and derives the same post-quantum keypair the browser would, provided the wallet signs deterministically. The result is a portable identity:

  • Encrypt a file in the browser, decrypt it from the agent, no key file passed between them.
  • Two agents exchange .kvant message URLs, each signed by a post-quantum key derived from its wallet.
  • Sign any x402 receipt with ML-DSA-65 under its own context (pqenv-v1-x402), so anyone with the agent’s public key and the payload can check which key signed it. /mcp documents the exact bytes that are signed.

Trust boundary

A wallet signature reconstructs the full keypair: it is root key material. Pass it only over the local stdio transport the server is built for; for anything networked, use a passphrase-protected key file. EOA wallets only: smart-contract wallets are rejected at derivation. A wallet signature always travels with the address that made it, and the server refuses one that does not recover to that address. MPC and threshold signers sign differently every time: the browser catches them with a two-signature check the first time an address derives keys on a device, and the server runs the same check when you pass a second signature as signature_hex_repeat. Keep a keyfile backup of the keypair; /app exports one from the same wallet. A wallet-derived identity rests on the wallet's curve: for files that must outlast it, use a freshly generated key file, whose keys are random.

Install

The server is built and tested; the npm release is next. It ships under the @kvant scope, which only Kvant can publish to, so this command can never run someone else's upload. Node.js 20 or later runs it over stdio.

mcp config
{
"mcpServers": {
"kvant": {
"command": "npx",
"args": ["-y", "@kvant/mcp"]
}
}
}

This config runs once the package is on npm: drop it into your config and restart the client, and Kvant tools appear in the tools picker.

Full MCP guide, Cursor config, and examples →