npm @waxseal/mcpstdioMITupdated 2mo ago
Cryptographic identity for the open web and for AI agents. One Ed25519 keypair. One 64-character fingerprint. Permanent on-chain record.
Was kannst du mit waxseal machen?
Packages
| Package | What it is | Install |
|---|---|---|
@waxseal/verify |
Browser + Node SDK — verify identities, validate signatures, embed badges, verify webhooks | npm install @waxseal/verify |
@waxseal/mcp |
MCP server for Claude, Cursor, Windsurf, and VS Code — verify identities, sign documents, gate AI actions with human approvals | npx @waxseal/mcp |
@waxseal/mcp — for AI agents
Give Claude, Cursor, Windsurf, or VS Code Copilot a cryptographic identity layer in under two minutes.
{
"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:
| Tool | What it does | Key needed? |
|---|---|---|
waxseal.info |
Platform overview, tiers, and tool guide | No |
waxseal.identity.verify |
Look up fingerprint → name, chain, wallet, status | No |
waxseal.signature.verify |
Confirm an Ed25519 signature against an on-chain key | No |
waxseal.approval.verify |
Validate a human approval token before executing | No |
waxseal.document.sign |
Sign any content with your WaxSeal private key | Yes |
waxseal.approval.create |
Create a signed, time-limited approval token | Yes |
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 install @waxseal/verify
Works in React, Vue, Node.js, n8n, serverless functions, and any runtime with fetch.
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
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
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
import { WaxSealBadge } from "@waxseal/verify/badge";
<WaxSealBadge fingerprint="a1b2c3d4..." />
Or build your own:
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)
<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
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
| Event | When it fires |
|---|---|
seal.verified |
A seal was verified via the API |
seal.minted |
A new seal NFT was minted on-chain |
seal.updated |
Seal name, avatar, or metadata changed |
seal.subscription.started |
A seal holder started a paid subscription |
seal.subscription.ended |
A subscription expired or was cancelled |
challenge.approved |
A login challenge was verified — user authenticated |
REST API — no SDK, no key required
POST https://api.waxseal.id/v1/verify
Content-Type: application/json
{
"fingerprint": "<64-char hex>",
"message": "...",
"signature": "..."
}
{
"valid": true,
"onChain": true,
"chain": "base",
"displayName": "Ada Lovelace",
"walletAddress": "0x…",
"signatureValid": true,
"verifiedAt": "2026-01-01T00:00:00Z"
}
Works with everything
| Stack | How |
|---|---|
| React / Vue / Svelte | npm install @waxseal/verify |
| Node.js / Express | Same package + webhook helper |
| n8n | HTTP Request node → REST API, or npm package in Code node |
| Make.com | HTTP module → REST API |
| Zapier | Webhook by Zapier trigger |
| PHP / Python / Go | Plain HTTP POST to the REST API |
| Static HTML / CMS | Two-line embed.js snippet |
| Claude / Cursor / Windsurf / VS Code | @waxseal/mcp |
VerifyResult type
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
Installation
waxseal zu deinem Client hinzufügen. Wähl den, den du nutzt.
claude mcp add mcp -- npx -y @waxseal/mcpcodex mcp add mcp -- npx -y @waxseal/mcpamp mcp add mcp -- npx -y @waxseal/mcp{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@waxseal/mcp"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@waxseal/mcp"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
code --add-mcp '{"name":"mcp","command":"npx","args":["-y","@waxseal/mcp"]}'Or add the block manually to `.vscode/mcp.json` under `servers`.
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@waxseal/mcp"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@waxseal/mcp"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"-y",
"@waxseal/mcp"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"mcp": {
"type": "local",
"command": "npx",
"args": [
"-y",
"@waxseal/mcp"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"mcp": {
"command": {
"path": "npx",
"args": [
"-y",
"@waxseal/mcp"
]
}
}
}
}Add to your Zed `settings.json`.
npx -y @waxseal/mcpRun `goose configure`, choose **Add Extension → Command-line Extension**, and paste this command.
Score
39 / 100
Unvollständig
- Dokumentation25/25
- Pflege16/25
- Vertrauen13/20
- Funktionsumfang0/15
- Installation12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 56 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 12 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
Versionsverlauf
| Versionen | Veröffentlicht |
|---|---|
| 1.0.2Aktuell | 28. Juni 2026 |