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-authnostr-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.

A
license - permissive license
-
quality - not tested
-
maintenance - not tested

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dyegolara/nostr-auth-agents'

If you have feedback or need assistance with the MCP directory API, please join our Discord server