Waxseal

io.github.degenlegion-comPublished by GitHub account degenlegion-comv1.0.2Updated Oct 24, 2026

Ed25519 identity for AI agents. Verify seals, sign documents, gate actions with approvals.

VerifiedSTDIODesktop onlyDeveloper ToolsSecurity & Monitoring

Overview

AI-generated overview

Waxseal gives an AI assistant an Ed25519 identity layer: verify on-chain seals and signatures, sign documents, and create time-limited approval tokens.

What you can do
Look up a seal fingerprint to get its name, chain, wallet and status, and confirm an Ed25519 signature against an on-chain key (waxseal.identity.verify, waxseal.signature.verify). Validate a human approval token before an action is executed (waxseal.approval.verify). Sign arbitrary content with the configured private key (waxseal.document.sign). Create signed, time-limited approval tokens (waxseal.approval.create). Read a platform overview, tiers and tool guide (waxseal.info).
When to use it
Use it when an assistant needs to check that a person or seal is genuine before acting, or when you want a cryptographic record that the assistant signed a document or that a human approved a step. The verify tools work without any key, so it is cheap to try for identity checks alone.
Requirements
Runs locally over stdio via npx @waxseal/mcp (Node.js), or as a hosted HTTP endpoint. Signing and approval creation need the Ed25519 private key PEM in WAXSEAL_PRIVATE_KEY_PEM; the three verify tools and waxseal.info need no key. Verification relies on the Waxseal service and on-chain data, so network access is required.
Before you install
WAXSEAL_PRIVATE_KEY_PEM is a private key: anyone holding it can sign as that identity, so keep it out of shared configs and logs. Signing tools produce durable signed artifacts and approval tokens that may gate real actions, so review what is being signed. Verification sends fingerprints and signatures to the Waxseal API and depends on its on-chain records.

Installation

In SourceWeft

  1. Open Waxseal in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[WaxSeal SDK]

WaxSeal SDK

Cryptographic identity for the open web and for AI agents.
One Ed25519 keypair. One 64-character fingerprint. Permanent on-chain record.

waxseal.id · Developer Docs · Get your seal

[MIT License] [TypeScript] [REST API] [@waxseal/verify on npm] [@waxseal/mcp on npm] [Glama MCP score]


Packages

PackageWhat it isInstall
@waxseal/verifyBrowser + Node SDK — verify identities, validate signatures, embed badges, verify webhooksnpm install @waxseal/verify
@waxseal/mcpMCP server for Claude, Cursor, Windsurf, and VS Code — verify identities, sign documents, gate AI actions with human approvalsnpx @waxseal/mcp

@waxseal/mcp — for AI agents

[Smithery] [npm]

Give Claude, Cursor, Windsurf, or VS Code Copilot a cryptographic identity layer in under two minutes.

json
{  "mcpServers": {    "waxseal": {      "command": "npx",      "args": ["-y", "@waxseal/mcp"],      "env": {        "WAXSEAL_PRIVATE_KEY_PEM": "-----BEGIN PRIVATE KEY-----\n<your key>\n-----END PRIVATE KEY-----"      }    }  }}

No install needed. Use the hosted server in any HTTP-capable MCP client: https://api.waxseal.id/mcp

What the 6 tools give your agent:

ToolWhat it doesKey needed?
waxseal.infoPlatform overview, tiers, and tool guideNo
waxseal.identity.verifyLook up fingerprint → name, chain, wallet, statusNo
waxseal.signature.verifyConfirm an Ed25519 signature against an on-chain keyNo
waxseal.approval.verifyValidate a human approval token before executingNo
waxseal.document.signSign any content with your WaxSeal private keyYes
waxseal.approval.createCreate a signed, time-limited approval tokenYes

Verify-only tools work with zero configuration. Signing tools require WAXSEAL_PRIVATE_KEY_PEM.

→ Full MCP docs · Smithery listing · npm


@waxseal/verify — for apps and backends {#waxsealverify}

[npm]
bash
npm install @waxseal/verify

Works in React, Vue, Node.js, n8n, serverless functions, and any runtime with fetch.

[WaxSeal examples]

Two modes, one fingerprint

Mode 1 · Badge Verification

"Does this WaxSeal exist and is it real?"

Confirm a seal is on-chain. No user interaction required — the fingerprint alone is enough.

Use cases

  • ✦ Verified author badge on blog posts and articles
  • ✦ Contributor identity on GitHub-style tools
  • ✦ Publisher verification on CMS platforms
  • ✦ Prove you created something before AI did
ts
import { verifySeal } from "@waxseal/verify";
const seal = await verifySeal({ fingerprint: "a1b2c3d4..." });
if (seal.valid && seal.onChain) {  console.log(seal.displayName, "·", seal.chain);  // "Ada Lovelace · base"}

Mode 2 · Login & Action Approval

"Did this person sign this, right now?"

A signed challenge proves the key holder is present — replaces passwords, OTP, and email loops entirely.

Use cases

  • ✦ Passwordless sign-in — no email, no OTP, no credentials to breach
  • ✦ Approve a document or high-value transaction
  • ✦ Gate a comment, post, or vote behind verified identity
  • ✦ Issue an API key only to verified seal holders
  • ✦ Automate identity checks in n8n / Make.com / Zapier
ts
const seal = await verifySeal({  fingerprint: "a1b2c3d4...",  message:     "I approve this transfer.",  signature:   "base64url...",});
if (seal.valid && seal.onChain && seal.signatureValid) {  // Cryptographic proof — no password, no session token}

React Badge

tsx
import { WaxSealBadge } from "@waxseal/verify/badge";
<WaxSealBadge fingerprint="a1b2c3d4..." />

Or build your own:

tsx
import { useEffect, useState } from "react";import { verifySeal, type VerifyResult } from "@waxseal/verify";
export function SealBadge({ fingerprint }: { fingerprint: string }) {  const [seal, setSeal] = useState<VerifyResult | null>(null);
  useEffect(() => {    let active = true;    verifySeal({ fingerprint }).then((r) => active && setSeal(r));    return () => { active = false; };  }, [fingerprint]);
  if (!seal?.valid || !seal.onChain) return null;
  return (    <a href={`https://waxseal.id/seal/${seal.fingerprint}`} target="_blank" rel="noopener noreferrer">      ✦ {seal.displayName ?? seal.fingerprint.slice(0, 8)}    </a>  );}

HTML Embed (no build step)

html
<script src="https://waxseal.id/embed.js"></script><span data-wax-seal="YOUR_64_CHAR_FINGERPRINT"></span>

Email — script tags are blocked by mail clients. Use a plain link instead: <a href="https://waxseal.id/seal/YOUR_FINGERPRINT">Verify my Wax Seal</a>


Webhook Verification

ts
import { verifyWebhookSignature, isWaxSealWebhookEvent } from "@waxseal/verify/webhooks";
app.post("/webhook/waxseal", express.raw({ type: "*/*" }), (req, res) => {  const valid = verifyWebhookSignature({    body:      req.body,    signature: String(req.headers["x-waxseal-signature"]),    secret:    process.env.WAXSEAL_WEBHOOK_SECRET,  });
  if (!valid) return res.status(401).send("Invalid signature");
  const event = JSON.parse(req.body.toString());
  if (isWaxSealWebhookEvent(event, "seal.minted")) {    console.log("New seal:", event.data.fingerprint, "on", event.data.chain);  }
  res.sendStatus(200);});

Webhook events

EventWhen it fires
seal.verifiedA seal was verified via the API
seal.mintedA new seal NFT was minted on-chain
seal.updatedSeal name, avatar, or metadata changed
seal.subscription.startedA seal holder started a paid subscription
seal.subscription.endedA subscription expired or was cancelled
challenge.approvedA login challenge was verified — user authenticated

REST API — no SDK, no key required

POST https://api.waxseal.id/v1/verifyContent-Type: application/json
{  "fingerprint": "<64-char hex>",  "message":     "...",  "signature":   "..."}
json
{  "valid": true,  "onChain": true,  "chain": "base",  "displayName": "Ada Lovelace",  "walletAddress": "0x…",  "signatureValid": true,  "verifiedAt": "2026-01-01T00:00:00Z"}

Works with everything

StackHow
React / Vue / Sveltenpm install @waxseal/verify
Node.js / ExpressSame package + webhook helper
n8nHTTP Request node → REST API, or npm package in Code node
Make.comHTTP module → REST API
ZapierWebhook by Zapier trigger
PHP / Python / GoPlain HTTP POST to the REST API
Static HTML / CMSTwo-line embed.js snippet
Claude / Cursor / Windsurf / VS Code@waxseal/mcp

VerifyResult type

ts
type VerifyResult = {  valid: boolean;  fingerprint: string;  onChain: boolean;  chain?: "ethereum" | "base" | "bnb";  walletAddress?: string;  displayName?: string;  publicKeyConfirmed?: boolean;  signatureValid?: boolean;  verifiedAt?: string;  error?: string;};

MIT © Wax Seal

Source: README.md at commit 5e2e006

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v1.0.2LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts