Skip to main content
Glama

nostr-auth-agents

Inicio de sesión con Nostr para agentes de codificación con LLM — solo autenticación, sin wallet, sin extensión de navegador, sin cuenta de relay.

A un agente (Claude Code, OpenCode, OpenClaw, Codex, Cursor, ...) se le entrega un desafío "Iniciar sesión con Nostr" o una plantilla de evento. Este repositorio lo firma con una clave secp256k1 (schnorr BIP-340) derivada de un secreto maestro local y, opcionalmente, envía la firma al callback del servicio.

Cero dependencias npm en tiempo de ejecución: secp256k1/schnorr con BigInt puro + node:crypto. Arranca desde un clon limpio.

Métodos

Método

Estado

Notas

NIP-07 inicio de sesión (firma de evento de desafío)

✅ v1.0.0

Refleja la UX de LNURL-auth

NIP-98 autenticación HTTP (Authorization: Nostr <event>)

🔜 previsto

siguiente

NIP-42 relay AUTH (websocket)

🔜 previsto

NIP-05 resolución de identificadores

🔜 previsto

Related MCP server: Alby Bitcoin Payments MCP Server

Uso

# Sign a classic kind-22242 sign-in challenge and submit it
node nostr_auth.js nip07 --challenge "<hex>" \
  --relay "wss://relay.example.com" \
  --domain example.com \
  --callback "https://site.example.com/verify"

# Dry-run: sign but don't submit (inspect first)
node nostr_auth.js nip07 --challenge "<hex>" --dry-run --json

# Sign an arbitrary event template (what window.nostr.signEvent would do)
node nostr_auth.js nip07 '{"kind":22242,"tags":[["challenge","<hex>"]],"content":""}'

# Print the derived identity (hex pubkey + npub)
node nostr_auth.js nip07 pubkey --domain example.com

Los registros de progreso van a stderr; los resultados (JSON), a stdout. Códigos de salida: 0 aceptado, 1 error de cliente, 2 mal uso, 3 ERROR del servidor, 4 la respuesta del callback no es JSON.

Gestión de claves

  • La primera ejecución genera un secreto maestro de 32 bytes en ~/.config/nostr-auth/master.key (modo 0600).

  • Identidad por servicio: linkingPriv = HMAC-SHA256(master, serviceDomain). Mismo dominio → mismo npub; dominios distintos → npubs distintos (privacidad).

  • --single-key comparte una única identidad entre todos los servicios.

  • --generate sobrescribe el secreto maestro. Anula la ruta con --keyfile/--keyout o con la variable de entorno NOSTR_AUTH_KEYFILE.

Protocolo (estilo NIP-07)

  1. Desafío → evento (kind 22242 por defecto) con las etiquetas challenge y relay opcional.

  2. NIP-01 id: sha256(JSON.stringify([0, pubkey, created_at, kind, tags, content])).

  3. Firmar el id bruto de 32 bytes con schnorr BIP-340 → sig hexadecimal de 64 bytes.

  4. Enviar por POST {"event": {...}} al callback → {"status":"OK"} / {"status":"ERROR","reason":"..."}.

Consulta SKILL.md para la documentación completa orientada al agente.

Servidor MCP

Servidor MCP stdio de dependencia cero (mcp/server.js) que expone las herramientas nostr_nip07_sign / nostr_nip07_pubkey:

{
  "mcpServers": {
    "nostr-auth": { "command": "node", "args": ["mcp/server.js"] }
  }
}

Se incluyen manifiestos de plugin para Claude Code (.claude-plugin/), Codex, Cursor y la visibilidad en skills.sh (skills.sh.json). Consulta PUBLISHING.md para ver el estado de distribución por plataforma.

Instalar como skill de agente (por plataforma)

  • Claude Code / cualquier cliente MCP: coloca el repositorio en tu directorio de skills y usa SKILL.md + .mcp.json.

  • OpenClaw / ClawHub: skills/nostr-auth/ es un paquete autónomo (SKILL.md + scripts/nostr_auth.js, cero dependencias npm).

  • skills.sh (Vercel): npx skills add dyegolara/nostr-auth-agents.

  • npm: npm i -g nostr-auth → nostr-auth nip07 ....

Autocomprobación (sin conexión, sin coste)

npm ci
npm test

Un servicio mock local "Iniciar sesión con Nostr" (mock_server.js) valida el ciclo completo desafío → firma → envío → verificación, el rechazo de repeticiones, la seguridad del modo dry-run, la estabilidad de la identidad por dominio y el paquete de skill portátil.

Estructura del proyecto

nostr_auth.js        CLI (bin "nostr-auth")
lib/                 key mgmt, BIP-340 schnorr, NIP-01 events, NIP-07 flow
mcp/server.js        zero-dep MCP server (stdio)
mock_server.js       local sign-in mock for tests
skills/nostr-auth/   portable OpenClaw/ClawHub skill bundle
contrib/anthropics/  educational skill variant for anthropics/skills
test/                vitest suite

Licencia

MIT — consulta LICENSE. Solo autenticación: este proyecto nunca custodia fondos, nunca publica notas y nunca se conecta a un relay por su cuenta.

Related MCP Connectors

Related MCP Servers