Lightning Enable
Servidor MCP que permite a agentes de IA realizar pagos Bitcoin Lightning, consultar saldos, acceder a APIs L402 y gestionar presupuestos de pago. Compatible con billeteras Strike, OpenNode, NWC y LND.
Documentación
Parte de Lightning Enable — infraestructura para comercio entre agentes sobre Lightning.
Servidor MCP de Lightning Enable
Monetiza tu propia API — prueba gratuita de 30 días
Los agentes pagan tu API por solicitud a través de Lightning — suscripción plana a $49/mes, y tú te quedas con el 100% de cada sat.
- Iniciar prueba gratuita — 30 días, sin cargo hoy
- Fast Lane — paga 100 sats por Lightning, sin tarjeta
- Precios
O regístrate sin salir de tu agente: llama a la herramienta create_lightning_enable_account.
Un servidor MCP (Model Context Protocol) de código abierto que permite a los agentes de IA realizar pagos a través de la red Lightning y participar en comercio entre agentes. Las herramientas de billetera, factura, L402, presupuesto y descubrimiento de API funcionan de inmediato con solo una billetera. Las herramientas de productor (vender acceso mediante L402) y las herramientas de ASA (Agent Service Agreement) (descubrimiento, solicitud, liquidación y atestación entre agentes sobre Nostr) se desbloquean con una suscripción a Agentic Commerce. Consulta la lista completa de herramientas.
Disponible en .NET y Python.
Qué hace
Dale a tu agente de IA una billetera Lightning y podrá:
- Pagar facturas — Enviar Bitcoin vía Lightning a cualquier factura BOLT11
- Acceder a APIs L402 — Pagar automáticamente los desafíos L402 para un acceso fluido a las APIs
- Descubrir APIs — Buscar en el registro de APIs L402 para encontrar APIs de pago por palabra clave o categoría, u obtener el manifiesto de una API específica para ver detalles completos de endpoints y precios
- Rastrear gastos — Límites de presupuesto, un registro de recibos duradero y verificaciones de saldo
- Crear facturas — Generar facturas para recibir pagos
- Ejecutar operaciones de billetera — Precio de BTC, cambio de divisas y envíos en cadena (Strike; en cadena también LND)
- Auto-inicializar una cuenta de Lightning Enable —
create_lightning_enable_accountpaga una tarifa de activación de ~100 sats mediante L402 y devuelve una clave de API de comerciante: el formulario de registro gratuito→de pago que es el protocolo, desbloqueando las herramientas de productor + ASA sin navegador ni página de pago. - Vender servicios (Productor L402) — Configura la cuenta de vendedor, pon una API detrás de L402, fija el precio de sus rutas, publícala, genera desafíos de pago y verifica tokens de pagador — todo desde una sola herramienta, para que un agente pueda pasar de una clave de API a un endpoint de pago sin tocar REST
- Comercio entre agentes (ASA) — Descubre, solicita, liquida y revisa servicios entre agentes en Nostr
Inicio rápido
1. Instalar
# .NET
dotnet tool install -g LightningEnable.Mcp
# Python
pip install lightning-enable-mcp
# Python (no install)
uvx lightning-enable-mcp
# Docker
docker pull refinedelement/lightning-enable-mcp:latest
2. Primera ejecución — setup_wallet
Nada más funciona sin una billetera, así que empieza ahí. Pregúntale a tu agente:
Run setup_wallet
Sin argumentos, informa qué billetera está configurada y de dónde provienen las credenciales — el proveedor y la fuente, nunca la credencial en sí. Si no hay billetera, devuelve los pasos de configuración.
El camino más corto es NWC. En tu aplicación de billetera (Alby Hub, CoinOS o cualquier billetera NIP-47) crea una conexión Nostr Wallet Connect, copia la cadena nostr+walletconnect:// y dásela al agente:
Run setup_wallet with this connection string: nostr+walletconnect://...
setup_wallet valida la cadena, se conecta a la billetera para demostrar que responde, y luego la escribe en ~/.lightning-enable/config.json con los permisos del archivo restringidos a tu usuario. Informa los métodos declarados y el saldo de la billetera. Reinicia el servidor después para que cargue la nueva billetera.
O establece una variable de entorno (en la configuración de Claude Desktop a continuación, por ejemplo). L402 — el propósito principal de este servidor — necesita una billetera que devuelva el preimagen del pago:
- Strike —
STRIKE_API_KEY, desde https://dashboard.strike.me - NWC —
NWC_CONNECTION_STRING, desde CoinOS / CLINK / Alby Hub - LND (tu propio nodo — siempre devuelve un preimagen) —
LND_REST_HOST+LND_MACAROON_HEX- ¿Certificado de nodo autofirmado? Establece
LND_TLS_CERT_PATHaltls.certdel nodo (fija TLS a ese certificado).LND_SKIP_TLS_VERIFY=truees la salida de emergencia, no la recomendación. Opcional:LND_FEE_LIMIT_SATS,LND_PAYMENT_TIMEOUT_SECONDS.
- ¿Certificado de nodo autofirmado? Establece
⚠️ OpenNode (
OPENNODE_API_KEY) funciona para facturación / pagos directos únicamente — nunca devuelve un preimagen, por lo que no puede pagar desafíos L402. No la conviertas en tu única billetera si quieres L402 (el caso de uso principal).
Si hay varias configuradas, la prioridad es: LND > NWC > Strike > OpenNode, y las variables de entorno ganan sobre el archivo de configuración — setup_wallet se niega a escribir una cadena de conexión que una variable de entorno anularía, y te indica qué variable desactivar. Consulta Billeteras compatibles para la matriz de compatibilidad completa.
3. Demuestra que todo el ciclo funciona — test_l402_payment
Pregúntale a tu agente:
Run test_l402_payment
Esto paga un endpoint L402 público de 1 sat de principio a fin, demostrando que tu billetera está conectada, devuelve un preimagen y puede completar un pago L402 real. Es la respuesta de una línea a "¿mi billetera realmente funciona?" — y cuesta alrededor de 1 satoshi.
4. Luego diviértete — compra una camiseta
Una vez que el ciclo funciona, prueba la Tienda de Lightning Enable, una tienda web en vivo impulsada por L402. Pregúntale a Claude:
Buy me a Lightning Enable t-shirt from store.lightningenable.com
(Esta necesita una billetera con fondos y una dirección de envío, por lo que test_l402_payment — un sat, sin envío — es la primera prueba más rápida.)
Instalación manual en Claude Desktop (paquete MCPB)
Para una instalación de un clic sin editar archivos de configuración, toma el paquete MCPB empaquetado del directorio mcpb/ en lugar de editar JSON a mano: constrúyelo localmente con npx -y @anthropic-ai/mcpb pack mcpb lightning-enable-mcp.mcpb (o descarga el artefacto .mcpb de una ejecución de CI de mcpb.yml), luego haz doble clic en el archivo .mcpb resultante o arrástralo a Configuración → Extensiones de Claude Desktop — Claude Desktop solicita tus credenciales de billetera (Strike, NWC o LND) y la clave de API opcional de Lightning Enable a través de su propia interfaz de configuración en lugar de un archivo de configuración de texto. Consulta mcpb/README.md para ver qué contiene el paquete y mcpb/SUBMISSION.md para el estado de su envío al Directorio MCP de Anthropic.
Configuración de Claude Desktop
Agrega a tu claude_desktop_config.json:
.NET:
{
"mcpServers": {
"lightning-enable": {
"command": "lightning-enable-mcp",
"env": {
"STRIKE_API_KEY": "your-strike-api-key"
}
}
}
}
dotnet tool install -g LightningEnable.Mcp coloca el comando lightning-enable-mcp en tu PATH. Si Claude Desktop no puede encontrarlo, establece command a la ruta completa: "C:\\Users\\<you>\\.dotnet\\tools\\lightning-enable-mcp.exe" en Windows (JSON necesita las barras invertidas duplicadas), /Users/<you>/.dotnet/tools/lightning-enable-mcp en macOS, o /home/<you>/.dotnet/tools/lightning-enable-mcp en Linux. El archivo de configuración no expande variables de entorno como %USERPROFILE% o $HOME.
Python:
{
"mcpServers": {
"lightning-enable": {
"command": "uvx",
"args": ["lightning-enable-mcp"],
"env": {
"STRIKE_API_KEY": "your-strike-api-key"
}
}
}
}
Ubicaciones del archivo de configuración:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/claude/claude_desktop_config.json
Despliegue alojado
Un pago por encima de tu umbral de aprobación automática necesita la aprobación de un humano: el servidor genera un código de confirmación corto, lo envía a ti, y el agente solo puede continuar una vez que lo lees de vuelta. El código nunca aparece en un resultado de herramienta, por lo que un agente con inyección de prompt no puede aprobar su propio gasto leyendo el resultado.
Trata esto como una ayuda de confirmación del operador en un host local de confianza, no como un límite de aprobación independiente: si el host del agente puede leer la consola del servidor, el flujo de registros, el archivo de aprobación o el destino del webhook, también puede leer el código.
Eso solo funciona si el código llega a un humano. En tu portátil va a la consola del servidor (stderr) y lo lees allí. En un servidor alojado — un conector de claude.ai, un contenedor Docker, una flota — nadie está mirando stderr, y en un host compartido el agente podría leerlo él mismo. Así que eliges el canal de aprobación.
| Canal | Qué sucede por encima del umbral | Úsalo cuando |
|---|---|---|
stderr (predeterminado) | El código se imprime en la consola del servidor. | Ejecutas el servidor localmente y observas su salida. |
refuse | El pago se rechaza. No se genera ningún código. | Lo ejecutas alojado y nadie puede recibir un código. |
webhook | La confirmación pendiente se envía por POST a tu URL, firmada con HMAC. Tú transmites el código al agente. | Tienes un canal de operaciones — chat, buscapersonas, una aplicación de aprobación. |
file | La misma línea JSON se agrega a un archivo que sigues. | Recopilas aprobaciones de registros. |
Sea cual sea el canal, se cumplen dos reglas: el código nunca se devuelve al agente, y un pago nunca se aprueba porque su notificación falló al enviarse — un fallo de entrega rechaza el pago y retira el código.
Los códigos son de 6 caracteres, de un solo uso, y están vinculados al monto, la herramienta y el destino exactos. Puede haber como máximo 3 códigos pendientes a la vez, y 5 intentos de código inválido consecutivos revocan todos los códigos pendientes. Un código vive 120 segundos por defecto; establece confirmation.ttlSeconds (o LIGHTNING_ENABLE_CONFIRMATION_TTL_SECONDS) para cambiarlo, limitado a 30-900. Para los canales asíncronos webhook y file, 300-600 es un valor práctico.
Elegir un canal
Precedencia: variable de entorno, luego archivo de configuración, luego automático.
{
"confirmation": {
"channel": "webhook",
"webhookUrl": "https://ops.example.com/lightning-approvals",
"webhookSecret": "<shared secret>",
"filePath": "/var/log/lightning-enable/confirmations.jsonl",
"ttlSeconds": 600
}
}
| Variable de entorno | Anula |
|---|---|
LIGHTNING_ENABLE_CONFIRMATION_CHANNEL | confirmation.channel (stderr | refuse | webhook | file) |
LIGHTNING_ENABLE_CONFIRMATION_WEBHOOK_URL | confirmation.webhookUrl |
LIGHTNING_ENABLE_CONFIRMATION_WEBHOOK_SECRET | confirmation.webhookSecret |
LIGHTNING_ENABLE_CONFIRMATION_FILE | confirmation.filePath (predeterminado ~/.lightning-enable/confirmations.jsonl) |
LIGHTNING_ENABLE_HOSTED | Establécelo a 1 para declarar un despliegue alojado (ver más abajo) |
Sin canal configurado, el servidor decide:
| stdin | LIGHTNING_ENABLE_HOSTED | Canal | Advertencia de inicio |
|---|---|---|---|
| Una TTY | cualquier cosa | stderr | ninguna |
| No es una TTY | sin establecer o 0 | stderr | sí — nadie puede estar leyéndolo |
| No es una TTY | 1 | refuse | sí — los pagos por encima del umbral se rechazan |
Un servidor MCP stdio siempre tiene stdin canalizado, por lo que la advertencia es un aviso, no un diagnóstico: si un humano realmente está mirando la consola, ignórala. LIGHTNING_ENABLE_HOSTED=1 es la opción explícita que activa la postura segura — nada cambia tu comportamiento automáticamente.
Un nombre de canal que el servidor no puede analizar falla de forma segura a refuse y lo indica al inicio, por lo que un error tipográfico nunca restaura silenciosamente un código que nadie lee.
El payload del webhook
POST con Content-Type: application/json y una firma HMAC-SHA256 sobre {timestamp}.{body}, el mismo esquema que la API de Lightning Enable usa para firmar webhooks de comerciantes:
X-LightningEnable-Signature: t=1757203200,v1=9f86d081...
{
"type": "payment.confirmation_required",
"nonce": "AB12CD",
"tool": "pay_invoice",
"amountSats": 50000,
"amountUsd": 12.34,
"destination": "lnbc500u1pj9npjpp5abcdefghijklmnopqr...",
"description": "lnbc500u1pj9npjpp5...",
"summary": "pay_invoice — $12.34 (50,000 sats), invoice lnbc500u1pj9npjpp5...",
"createdAt": "2026-09-07T12:00:00Z",
"expiresAt": "2026-09-07T12:02:00Z",
"expiresInSeconds": 120
}
El canal file escribe este objeto exacto, una línea JSON por confirmación, y fija el archivo a 0600 en POSIX — contiene códigos de aprobación en vivo.
Dos cosas que debes saber sobre el webhook:
- La URL debe ser pública. Pasa por la misma protección SSRF en tiempo de conexión que las URLs proporcionadas por agentes, por lo que una dirección privada, de loopback o de metadatos se rechaza al inicio.
- Las redirecciones nunca se siguen. Una respuesta
3xxes un fallo de entrega, por lo que una aprobación firmada solo llega a la URL que configuraste.
Los códigos expiran después de 120 segundos y están vinculados al monto, la herramienta y el destino exactos para los que fueron aprobados.
Billeteras compatibles
| Billetera | Configuración | Soporte L402 |
|---|---|---|
| Strike | Clave de API | Sí |
| LND | REST + macaroon | Sí (garantizado) |
| NWC (CoinOS) | Cadena de conexión | Sí |
| NWC (CLINK) | Cadena de conexión | Sí |
| NWC (Alby Hub) | Cadena de conexión | Sí |
| OpenNode | Clave de API | No (sin preimagen) |
Límites de gasto
Los límites viven en ~/.lightning-enable/config.json y son de solo lectura en tiempo de ejecución — un agente puede ajustar sus propios topes pero nunca aumentarlos. Puedes configurarlos en USD, en satoshis, o en ambos.
{
"limits": {
"maxPerPayment": 500.00,
"maxPerSession": 100.00,
"maxPerPaymentSats": 5000,
"maxPerSessionSats": 50000,
"autoApproveSats": 100
}
}
| Clave | Variable de entorno | Significado |
|---|---|---|
maxPerPayment | — | Máximo USD por pago |
maxPerSession | — | Máximo USD por sesión |
maxPerPaymentSats | LIGHTNING_ENABLE_MAX_PER_PAYMENT_SATS | Máximo satoshis por pago |
maxPerSessionSats | LIGHTNING_ENABLE_MAX_PER_SESSION_SATS | Máximo satoshis por sesión |
autoApproveSats | LIGHTNING_ENABLE_AUTO_APPROVE_SATS | Satoshis que un pago puede gastar sin confirmación mientras el precio de BTC no esté disponible |
Por qué establecer los límites en sats. Un límite en USD tiene que convertirse al precio actual de BTC, así que cuando todas las fuentes de precio están caídas, el pago no puede verificarse y se rechaza — correcto, pero detiene al agente. Un límite en satoshis no necesita conversión, así que un agente con presupuesto en sats sigue funcionando durante una interrupción del precio. Establece ambas claves maxPer…Sats para cubrir todos los vacíos.
Cuando ambas denominaciones están configuradas, el límite más estricto gana en cada verificación. budget(action="status") informa cuál es el que aplica (bindingDenomination), el límite efectivo en sats, si había un precio disponible y si el modo de interrupción está activo.
Qué sucede durante una interrupción del precio
Los techos en satoshis siguen limitando el gasto. Pero un techo dice "nunca más que esto" — no dice "esta cantidad está bien sin supervisión", y la escalera de niveles en USD que normalmente dice lo segundo no puede evaluarse sin un precio. Así que la aprobación falla de forma segura:
autoApproveSatsconfigurado — los pagos iguales o inferiores se aprueban automáticamente; cualquier cosa superior sigue el flujo normal de confirmación (el agente le pide al humano el código impreso en la consola del servidor).autoApproveSatsno configurado — cada pago necesita confirmación hasta que una fuente de precio se recupere.
autoApproveSats es un nivel, no un techo: nunca puede ampliar maxPerPaymentSats o maxPerSessionSats, que se verifican primero. Se ignora por completo mientras haya un precio disponible — entonces los niveles en USD deciden como de costumbre.
Las rutas de pago automático (pago automático L402,
send_onchain,agent_services action=settle) rechazan cualquier cosa que necesite confirmación en lugar de preguntar. Durante una interrupción, eso significa que solo proceden bajoautoApproveSats.
Herramientas
Inventario canónico: 17 herramientas — 14 gratuitas (listas para usar, solo con una wallet) + 3 que requieren LIGHTNING_ENABLE_API_KEY (una suscripción a Agentic Commerce). Esta tabla es la única fuente de verdad de la que se derivan todos los recuentos publicitados — está vinculada al código mediante las pruebas de guardia del inventario de herramientas en ambos puertos (el fallo rompe la CI).
Cinco de estas son herramientas de acción: pasa action (o source para receipts) para elegir la operación. Reemplazan a 16 herramientas de un solo propósito cuyos esquemas solían cargarse en el contexto del agente en cada sesión — consulta Perfiles de herramientas y nombres antiguos. Todos los nombres antiguos siguen funcionando.
Nota de disponibilidad de ASA. Contra la API alojada de Lightning Enable, las acciones
agent_servicesdiscover,request,settle,publish,unpublishyreputationfuncionan.attestse rechaza, porque la API alojada no tiene una ruta que acepte atestaciones, así que no puedes dejar una reseña a través de ella. Consulta Acuerdos de Servicio de Agentes.
| Herramienta | Acceso | Qué hace |
|---|---|---|
setup_wallet | Gratuita | Informar sobre la wallet configurada, o conectar una pegando una cadena de conexión NWC |
pay_invoice | Gratuita | Pagar una factura Lightning BOLT11 directamente, obtener la preimagen |
pay_l402_challenge | Gratuita | Pagar un desafío L402 (factura + macarrón), obtener el token |
access_l402_resource | Gratuita | Obtener una URL, pagando automáticamente cualquier desafío L402 |
test_l402_payment | Gratuita | Autoprueba de la wallet contra un endpoint L402 público de 1 sat |
discover_api | Gratuita | Buscar en el registro de API L402 / obtener un manifiesto de API |
create_invoice | Gratuita | Crear una factura BOLT11 para recibir pagos |
check_invoice_status | Gratuita | Verificar si una factura creada fue pagada |
get_balance | Gratuita | Saldo de la wallet: sats, todas las monedas (Strike) e información de la wallet |
budget | Gratuita | action: status (leer límites y gasto de sesión) o tighten (bajar los topes de ejecución) |
receipts | Gratuita | source: durable (el registro de recibos de solo añadidura) o session (los pagos de esta sesión) |
wallet_ops | Gratuita | action: price, exchange o send_onchain (Strike; send_onchain también LND). send_onchain toma address, amountSats, confirmationNonce y un intentId opcional (proporciona uno nuevo solo para pagar la misma dirección la misma cantidad otra vez; una repetición se informa como estado, nunca se reenvía) |
verify_confirmation_code | Gratuita | Verificar un código de confirmación de pago fuera de banda (solo verificación — nunca paga) |
create_lightning_enable_account | Gratuita | Registro de autoservicio: paga ~100 sats, obtén una clave de API de comerciante |
l402_producer | Agentic Commerce | action: configure_receive, status, create_proxy, add_endpoint, publish, list_challenges, create, verify — todo el lado vendedor |
agent_services | Agentic Commerce | action: discover, request, settle, publish, unpublish, attest, reputation |
renew_lightning_enable_subscription | Agentic Commerce | Pagar la factura L402 con precio del servidor que compra o extiende 30 días de Agentic Commerce para la clave de API configurada (maxSats por defecto es 50,000) |
create_lightning_enable_account es gratuita y autoaprovisiona la clave de API que necesitan las 3 herramientas restringidas — un agente con una wallet paga una tarifa de activación de ~100 sats y las desbloquea al instante.
Cada herramienta lleva anotaciones MCP: un título legible por humanos y un readOnlyHint explícito, además de destructiveHint en cualquier cosa que pueda gastar la wallet. Las herramientas de acción están anotadas para su acción más amplia, así que budget no es de solo lectura (porque tighten escribe) y wallet_ops es destructiva (porque send_onchain lo es).
Recursos
El registro de recibos duradero también se expone como recursos MCP, para que un cliente pueda adjuntarlo o mostrarlo sin que el modelo gaste un turno en una llamada de herramienta:
| URI | Contenido |
|---|---|
lightning-enable://receipts | Los 200 recibos más recientes como JSONL (application/x-ndjson), del más antiguo al más nuevo |
lightning-enable://receipts/{paymentHash} | Cada recibo registrado para un hash de pago |
Ambos leen a través de la misma ruta que la herramienta receipts, que redacta campos con forma de credencial en el límite de lectura — una preimagen nunca sale del proceso. El hash de pago es la referencia segura; la preimagen es la prueba de pago y no es un campo de recibo. Los recursos no se ven afectados por el perfil de herramientas: no cuestan bytes de esquema en el contexto del modelo.
Perfiles de herramientas y nombres antiguos
El esquema JSON de cada herramienta publicitada se carga en el contexto del agente al inicio de cada sesión, así que la superficie de herramientas es un costo de tokens en cada turno. Elige cuánto publicitar con LIGHTNING_ENABLE_TOOL_PROFILE:
| Perfil | Herramientas | Úsalo cuando |
|---|---|---|
lite | 6 — setup_wallet, pay_invoice, access_l402_resource, get_balance, budget, receipts | El agente solo necesita obtener una wallet, gastar y mantenerse dentro de su presupuesto |
standard (predeterminado) | 17 — la tabla anterior | Todo, con aproximadamente un 40% menos de esquema que la superficie anterior |
full | 33 — standard más cada nombre anterior a la consolidación | Tienes prompts o scripts escritos con los nombres antiguos de herramientas |
{
"mcpServers": {
"lightning-enable": {
"command": "uvx",
"args": ["lightning-enable-mcp"],
"env": {
"STRIKE_API_KEY": "your-strike-api-key",
"LIGHTNING_ENABLE_TOOL_PROFILE": "lite"
}
}
}
}
Los perfiles son solo de listado. Una herramienta que el perfil no publicita sigue siendo invocable por nombre, y cada nombre antiguo sigue despachando, bajo cualquier perfil. Reducir el perfil recorta los esquemas que se empujan al contexto del modelo; nunca elimina capacidad.
Nombre antiguo → nueva llamada
Los nombres antiguos se aceptan pero no se publicitan (excepto bajo full). Cada uno reenvía a la nueva herramienta y su resultado lleva un marcador deprecated que nombra el reemplazo. Eliminados en v3.0.0 — muévete a los nuevos nombres.
| Herramienta antigua | Nueva llamada |
|---|---|
| get_budget_status | budget(action="status") |
| configure_budget | budget(action="tighten") |
| get_receipts | receipts(source="durable") |
| get_payment_history | receipts(source="session") |
| get_btc_price | wallet_ops(action="price") |
| exchange_currency | wallet_ops(action="exchange") |
| send_onchain | wallet_ops(action="send_onchain") |
| create_l402_challenge | l402_producer(action="create") |
| verify_l402_payment | l402_producer(action="verify") |
| discover_agent_services | agent_services(action="discover") |
| request_agent_service | agent_services(action="request") |
| settle_agent_service | agent_services(action="settle") |
| publish_agent_capability | agent_services(action="publish") |
| unpublish_agent_capability | agent_services(action="unpublish") |
| publish_agent_attestation | agent_services(action="attest") |
| get_agent_reputation | agent_services(action="reputation") |
| confirm_payment | verify_confirmation_code |
| check_wallet_balance | get_balance |
| get_all_balances | get_balance |
Los últimos tres son anteriores a esta consolidación y permanecen ocultos en todos los perfiles, incluido full.
Documentación
- README de .NET — Documentación completa de .NET
- README de Python — Documentación completa de Python
- Documentación completa — Guía completa de cada herramienta
- Seguridad de gasto de IA — Controles de presupuesto y seguridad
Estructura del repositorio
lightning-enable-mcp/
├── dotnet/
│ ├── src/LightningEnable.Mcp/ # .NET MCP server
│ ├── tests/LightningEnable.Mcp.Tests/ # .NET tests
│ └── LightningEnable.Mcp.sln # Solution file
├── python/
│ └── lightning-enable-mcp/ # Python MCP server
├── .github/workflows/publish-mcp.yml # CI/CD
├── LICENSE # MIT
└── README.md # This file
Vender con L402 (la herramienta l402_producer)
Todo el lado vendedor detrás de una sola herramienta. Pasa action para elegir la operación. Cada acción necesita LIGHTNING_ENABLE_API_KEY (una suscripción a Agentic Commerce); ninguna acción puede gastar tu wallet.
Versión de API.
create,verify,create_proxy,add_endpointypublishfuncionan contra cada compilación de la API de Lightning Enable.configure_receivenecesita el carril de recepción NWC ylist_challengesnecesita la ruta de listado de desafíos, ambos incluidos con la versión de API a la que apunta esta versión. Ejecutal402_producer(action="status")primero — se degrada con elegancia y te dice qué soporta el despliegue al que apuntas.
| Acción | Argumentos | Qué hace |
|---|---|---|
configure_receive | nwc_connection_string (opcional) | Apuntar los pagos L402 a una wallet que controles |
status | limit | Plan, wallet receptora, lista de verificación de incorporación, acuñaciones recientes (solo lectura) |
create_proxy | name, target_base_url, description, default_price_sats | Poner una API existente detrás de L402 |
add_endpoint | proxy_id, endpoint_id, path, http_method, summary, price_sats | Fijar el precio de una ruta |
publish | proxy_id, service_name, service_description, categories | Listar el servicio para que otros agentes puedan encontrarlo |
list_challenges | challenge_status, limit, offset | Leer lo que acuñaste (solo lectura) |
create | resource, price_sats, description | Acuñar un desafío de factura + macarrón de una sola vez |
verify | macaroon, preimage | Verificar el token de un pagador antes de otorgar acceso |
De una clave de API a un endpoint de pago
Sin panel de control, sin cliente REST, sin humano en el bucle. Cada paso es una llamada de herramienta:
- Obtén una clave de API.
create_lightning_enable_account— paga una tarifa de activación de ~100 sats desde tu wallet y escribe la clave en~/.lightning-enable/config.json. Reinicia el servidor para que las herramientas restringidas se desbloqueen. (Omite este paso si ya tienes una clave.) - Dirige los pagos a tu propia wallet.
l402_producer(action="configure_receive")— sin argumentos reutiliza la wallet NWC con la que este servidor ya paga; pasanwc_connection_stringpara usar una diferente. La cadena nunca se muestra de vuelta, solo<set>. - Verifica tu estado.
l402_producer(action="status")— plan, wallet de recepción y la lista de verificación de incorporación, para que el agente pueda ver qué falta. - Protege tu API con L402.
l402_producer(action="create_proxy", name="Weather API", target_base_url="https://api.example.com", default_price_sats=25)— devuelve unproxy_idy la URL base pública. Cada solicitud bajo esa URL ahora responde402hasta que se pague. - Pon precio a cada ruta.
l402_producer(action="add_endpoint", proxy_id="weather-api", endpoint_id="forecast", path="/forecast", http_method="GET", price_sats=10)— repite por cada ruta. - Publícala.
l402_producer(action="publish", proxy_id="weather-api", service_description="Five-day forecasts for agents", categories=["weather"])— devuelve las URLs de OpenAPI y del manifiesto. Otros agentes la encuentran a través dediscover_api. - Observa llegar el dinero.
l402_producer(action="list_challenges", challenge_status="paid")— hash de pago, recurso, monto y estado. Nunca un macaroon, nunca un preimage.
Para un recurso que no estás proxyando — un archivo, un informe, una respuesta única — omite los pasos 4-6 y
usa create / verify directamente.
Los pagos se liquidan en tu wallet. Lightning Enable no retiene los fondos.
Acuerdos de Servicio entre Agentes (la herramienta agent_services)
Comercio entre agentes en Nostr, detrás de una sola herramienta. Pasa action para elegir la operación.
agent_services requiere LIGHTNING_ENABLE_API_KEY (una suscripción Agentic Commerce); action="settle" además gasta el saldo de tu wallet, sujeto a límites de presupuesto.
La API alojada de Lightning Enable rechaza attest, porque no tiene una ruta que acepte atestaciones, por lo que no puedes dejar una reseña a través de ella; discover, request, settle, publish, unpublish y reputation funcionan.
| Acción | Descripción |
|---|---|
| discover | Busca capacidades de agentes por categoría, hashtag o palabra clave |
| publish | Publica los servicios de tu agente en la red Nostr (kind 38400). Publica una vez: cada llamada crea un nuevo listado y proxy L402. Para cambiar un listado, unpublish y publish de nuevo, o edítalo en el panel de Lightning Enable |
| unpublish | Retira un listado publicado: retira el proxy L402 y emite una eliminación NIP-09 |
| request | Solicita un servicio a otro agente (kind 38401) |
| settle | Paga un servicio de agente mediante liquidación Lightning L402 |
| attest | Deja una reseña/calificación para un agente después de completar el servicio (kind 38403) |
| reputation | Consulta la puntuación de reputación de un agente a partir de atestaciones en el protocolo |
Cómo Funciona el Comercio entre Agentes
- Descubre —
agent_services(action="discover", category="translation")encuentra agentes que ofrecen traducción - Solicita —
agent_services(action="request", capability_event_id=..., budget_sats=100)envía una solicitud de servicio - Liquida —
agent_services(action="settle", l402_endpoint=...)paga vía Lightning y recibe el resultado - Reseña —
agent_services(action="attest", subject_pubkey=..., agreement_id=..., rating=5)construye reputación en el protocolo (la API alojada rechaza esta acción)
Para precios dinámicos, los proveedores usan l402_producer(action="create") para generar facturas al precio acordado. Los solicitantes pagan y los proveedores verifican con l402_producer(action="verify").
Los siete nombres antiguos de herramientas (discover_agent_services, settle_agent_service, …) aún funcionan — consulta Nombre antiguo → nueva llamada.
Proyectos Relacionados
- le-agent-sdk (Python) —
pip install le-agent-sdk - le-agent-sdk (TypeScript) —
npm install le-agent-sdk - le-agent-sdk (.NET) —
dotnet add package LightningEnable.AgentSdk
Privacidad
Lightning Enable no retiene fondos — la wallet conectada o el proveedor de pagos (Strike, OpenNode, LND o una wallet NWC) lo hace. El servidor MCP se ejecuta localmente y se comunica con la wallet/proveedor que configures y, para el descubrimiento L402, con el registro de la API L402. Las credenciales de wallet que proporciones permanecen en tu máquina (o, para la API alojada, están cifradas en reposo). Consulta la Política de Privacidad completa para ver qué datos se recopilan, terceros involucrados, retención y contacto (privacy@lightningenable.com).
Soporte
Si algo está roto o no funciona, envía un correo a support@lightningenable.com — una persona real lo lee. Para preguntas generales, únete al Discord: https://discord.gg/rX7NxHY8vx. Informes de errores y solicitudes de funciones: abre un issue en este repositorio.
Licencia
MIT — consulta LICENSE.
Enlaces
- Lightning Enable — Middleware de habilitación de pagos
- Documentación — Documentación completa
- Tienda — Demo L402 en vivo
- NuGet — Paquete .NET
- PyPI — Paquete Python
- Docker Hub — Imagen Docker