Agents speak quantum-safe.
Six tools, one stdio server. Encrypt files, send PQ-safe messages, read Quantum Seals, and sign x402 payloads — all from Claude, Cursor, or any MCP-aware client.
Node.js 20 or later runs the server over stdio. Published as @arshield/mcp.
$ npx -y @arshield/mcp- PACKAGE
- @arshield/mcp
- VERSION
- 0.1.0
- TRANSPORT
- stdio
- RUNTIME
- Node.js 20+
- TOOLS
- 6
- LICENSE
- MIT
Terminal
claude mcp add arshield -- npx -y @arshield/mcp
One line adds the server to Claude Code over stdio.
claude_desktop_config.json
{
"mcpServers": {
"arshield": {
"command": "npx",
"args": ["-y", "@arshield/mcp"]
}
}
}Drop this snippet into your config and restart the client.
~/.cursor/mcp.json
{
"mcpServers": {
"arshield": {
"command": "npx",
"args": ["-y", "@arshield/mcp"]
}
}
}Same shape, same server.
stdio command
command: npx args: -y @arshield/mcp
Works with any client that speaks Model Context Protocol over stdio.
Six primitives.
| TOOL | DESCRIPTION | INPUTS | OUTPUTS |
|---|---|---|---|
| arshield_encrypt_file | Encrypt bytes under hybrid ML-KEM-768 + X25519 and sign the envelope with ML-DSA-65 (ArShield .arshield container). Sign with a keyfile, a wallet signature, or a fresh ephemeral identity. | data_base64, filename, keyfile_json?, passphrase?, signature_hex?, signature_hex_repeat?, address? | container_b64url |
| arshield_decrypt_file | Decrypt an ArShield .arshield container (base64url). Verifies the ML-DSA-65 signature and returns the original file bytes and filename. | container_b64url, keyfile_json?, passphrase?, signature_hex?, signature_hex_repeat?, address? | filename, original_size, data_b64 |
| arshield_send_message | Wrap a short plaintext (max 64KB) into a shareable encrypted ArShield message URL. The ciphertext lives in the URL #fragment. With an ephemeral sender the secret key is embedded so the recipient can decrypt without setup. | text, keyfile_json?, passphrase?, signature_hex?, signature_hex_repeat?, address? | url, embed_secret_key |
| arshield_decrypt_message | Read an ArShield encrypted message URL (like the /m page does). Returns the plaintext and the signer key that sealed it. | url, keyfile_json?, passphrase?, signature_hex?, signature_hex_repeat?, address? | text, signer_mlkem, signer_x25519, signer_mldsa |
| arshield_verify_seal | Parse the metadata fields an ArShield Quantum Seal PNG carries (unsigned) and, given an envelope, compare its sha256 against file_hash. | seal_metadata_json, envelope_sha256? | fields, hash_matches_envelope |
| arshield_sign_x402 | Sign an x402 payment payload with ML-DSA-65 under context arshield-v1-x402. Returns the signature (base64url) the server can verify with the provided public key. | payload_base64, keyfile_json?, passphrase?, signature_hex?, signature_hex_repeat?, address? | signature_b64url, public_key_mldsa_b64url, verified |
Every tool runs locally over stdio. No network I/O, no telemetry. Keyfiles are unwrapped in-process with Argon2id and never persisted. A wallet signature is root key material: pass it over local stdio only, never a networked transport.
One identity, two doors.
Same envelope everywhere
Seal a file in /app, open it in your agent with the same keyfile or wallet signature. Identical keys, identical .arshield format.
Public key can be derived from the signature
arshield_sign_x402 returns public_key_mldsa_b64url alongside the signature, so a verifier can check which key signed without a separate exchange.
Runs on your machine
A local stdio server. No ArShield server, no network calls, no telemetry.