Lightning Enable
Servidor MCP que permite que agentes de IA façam pagamentos Bitcoin Lightning, consultem saldos, acessem APIs L402 e gerenciem orçamentos de pagamento. Suporta carteiras Strike, OpenNode, NWC e LND.
Documentação
Parte do Lightning Enable — infraestrutura para comércio entre agentes via Lightning.
Servidor MCP Lightning Enable
Monetize sua própria API — teste gratuito de 30 dias
Agentes pagam sua API por requisição via Lightning — assinatura fixa de US$ 49/mês, e você fica com 100% de cada sat.
- Iniciar teste gratuito — 30 dias, sem cobrança hoje
- Fast Lane — pague 100 sats via Lightning, sem cartão
- Preços
Ou cadastre-se sem sair do seu agente: chame a ferramenta create_lightning_enable_account.
Um servidor MCP (Model Context Protocol) de código aberto que permite que agentes de IA façam pagamentos pela Lightning Network e participem de comércio entre agentes. Ferramentas de carteira, fatura, L402, orçamento e descoberta de API funcionam prontamente com apenas uma carteira. Ferramentas de produtor (venda de acesso via L402) e ferramentas de Acordo de Serviço entre Agentes (ASA) (descoberta, solicitação, liquidação e atestado entre agentes via Nostr) são desbloqueadas com uma assinatura Agentic Commerce. Veja a lista completa de ferramentas.
Disponível em .NET e Python.
O Que Ele Faz
Dê ao seu agente de IA uma carteira Lightning e ele poderá:
- Pagar faturas — Enviar Bitcoin via Lightning para qualquer fatura BOLT11
- Acessar APIs L402 — Pagar automaticamente desafios L402 para acesso contínuo à API
- Descobrir APIs — Pesquisar o registro de APIs L402 para encontrar APIs pagas por palavra-chave ou categoria, ou buscar o manifesto de uma API específica para detalhes completos de endpoints e preços
- Rastrear gastos — Limites de orçamento, um registro de recibos durável e verificações de saldo
- Criar faturas — Gerar faturas para receber pagamentos
- Executar operações de carteira — Preço do BTC, câmbio de moedas e envios on-chain (Strike; on-chain também LND)
- Auto-cadastrar uma conta Lightning Enable —
create_lightning_enable_accountpaga uma taxa de ativação de ~100 sats via L402 e retorna uma chave de API de comerciante: o formulário de cadastro gratuito→pago que é o protocolo, desbloqueando as ferramentas de produtor + ASA sem navegador ou página de checkout. - Vender serviços (Produtor L402) — Configurar a conta de vendedor, colocar uma API atrás de L402, precificar suas rotas, listá-la publicamente, gerar desafios de pagamento e verificar tokens de pagador — tudo em uma única ferramenta, para que um agente possa ir de uma chave de API a um endpoint pago sem tocar em REST
- Comércio entre agentes (ASA) — Descobrir, solicitar, liquidar e revisar serviços entre agentes no Nostr
Início 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. Primeira execução — setup_wallet
Nada mais funciona sem uma carteira, então comece por aí. Pergunte ao seu agente:
Run setup_wallet
Sem argumentos, ele informa qual carteira está configurada e de onde vieram as credenciais — o provedor e a origem, nunca a credencial em si. Se não houver carteira, ele devolve os passos de configuração.
O caminho mais curto é NWC. No seu aplicativo de carteira (Alby Hub, CoinOS ou qualquer carteira NIP-47), crie uma conexão Nostr Wallet Connect, copie a string nostr+walletconnect:// e entregue-a ao agente:
Run setup_wallet with this connection string: nostr+walletconnect://...
setup_wallet valida a string, conecta-se à carteira para provar que ela responde e, em seguida, grava-a em ~/.lightning-enable/config.json com as permissões do arquivo restritas ao seu usuário. Ele informa os métodos declarados da carteira e o saldo. Reinicie o servidor depois para que ele carregue a nova carteira.
Ou defina uma variável de ambiente (no config do Claude Desktop abaixo, por exemplo). L402 — o objetivo principal deste servidor — precisa de uma carteira que retorne o preimage do pagamento:
- Strike —
STRIKE_API_KEY, de https://dashboard.strike.me - NWC —
NWC_CONNECTION_STRING, de CoinOS / CLINK / Alby Hub - LND (seu próprio nó — sempre retorna um preimage) —
LND_REST_HOST+LND_MACAROON_HEX- Certificado de nó autoassinado? Defina
LND_TLS_CERT_PATHpara otls.certdo nó (fixa TLS nesse certificado).LND_SKIP_TLS_VERIFY=trueé a saída de emergência, não a recomendação. Opcional:LND_FEE_LIMIT_SATS,LND_PAYMENT_TIMEOUT_SECONDS.
- Certificado de nó autoassinado? Defina
⚠️ OpenNode (
OPENNODE_API_KEY) funciona para faturamento / pagamentos diretos apenas — nunca retorna um preimage, portanto não pode pagar desafios L402. Não a torne sua única carteira se você quiser L402 (o caso de uso principal).
Se várias estiverem definidas, a prioridade é: LND > NWC > Strike > OpenNode, e variáveis de ambiente vencem o arquivo de configuração — setup_wallet se recusa a gravar uma string de conexão que uma variável de ambiente sobrescreveria e informa qual variável desdefinir. Veja Carteiras Suportadas para a matriz de compatibilidade completa.
3. Prove que o ciclo completo funciona — test_l402_payment
Pergunte ao seu agente:
Run test_l402_payment
Isso paga um endpoint L402 público de 1 sat de ponta a ponta, provando que sua carteira está conectada, retorna um preimage e pode concluir um pagamento L402 real. É a resposta de uma linha para "minha carteira está realmente funcionando?" — e custa cerca de 1 satoshi.
4. Depois, divirta-se — compre uma camiseta
Quando o ciclo funcionar, experimente a Loja Lightning Enable, uma loja web ao vivo alimentada por L402. Pergunte ao Claude:
Buy me a Lightning Enable t-shirt from store.lightningenable.com
(Este precisa de uma carteira com saldo e um endereço de entrega, por isso test_l402_payment — um sat, sem entrega — é a primeira prova mais rápida.)
Instalação manual no Claude Desktop (pacote MCPB)
Para uma instalação com um clique, sem editar arquivos de configuração, pegue o pacote MCPB empacotado do diretório mcpb/ em vez de editar JSON manualmente: compile-o localmente com npx -y @anthropic-ai/mcpb pack mcpb lightning-enable-mcp.mcpb (ou baixe o artefato .mcpb de uma execução de CI do mcpb.yml), depois clique duas vezes no arquivo .mcpb resultante ou arraste-o para Configurações → Extensões do Claude Desktop — o Claude Desktop solicita suas credenciais de carteira (Strike, NWC ou LND) e a chave opcional da API Lightning Enable pela própria interface de configurações, em vez de um arquivo de configuração de texto. Veja mcpb/README.md para o que está no pacote e mcpb/SUBMISSION.md para o status da submissão ao Diretório MCP da Anthropic.
Config do Claude Desktop
Adicione ao seu 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 o comando lightning-enable-mcp no seu PATH. Se o Claude Desktop não conseguir encontrá-lo, defina command para o caminho completo: "C:\\Users\\<you>\\.dotnet\\tools\\lightning-enable-mcp.exe" no Windows (o JSON precisa de barras invertidas duplicadas), /Users/<you>/.dotnet/tools/lightning-enable-mcp no macOS ou /home/<you>/.dotnet/tools/lightning-enable-mcp no Linux. O arquivo de configuração não expande variáveis de ambiente como %USERPROFILE% ou $HOME.
Python:
{
"mcpServers": {
"lightning-enable": {
"command": "uvx",
"args": ["lightning-enable-mcp"],
"env": {
"STRIKE_API_KEY": "your-strike-api-key"
}
}
}
}
Locais do arquivo de configuração:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/claude/claude_desktop_config.json
Implantação hospedada
Um pagamento acima do seu limite de aprovação automática precisa da aprovação de um humano: o servidor gera um código de confirmação curto, envia-o para você, e o agente só pode prosseguir quando você o ler de volta. O código nunca aparece em um resultado de ferramenta, então um agente com injeção de prompt não pode aprovar seus próprios gastos lendo o resultado.
Trate isso como um auxílio de confirmação de operador em um host local confiável, não como uma fronteira de aprovação independente: se o host do agente puder ler o console do servidor, o fluxo de logs, o arquivo de aprovação ou o destino do webhook, ele também poderá ler o código.
Isso só funciona se o código chegar a um humano. No seu laptop, ele vai para o console do servidor (stderr) e você o lê lá. Em um servidor hospedado — um conector do claude.ai, um contêiner Docker, uma frota — ninguém está observando o stderr, e em um host compartilhado o agente pode lê-lo sozinho. Então você escolhe o canal de aprovação.
| Canal | O que acontece acima do limite | Use quando |
|---|---|---|
stderr (padrão) | O código é impresso no console do servidor. | Você executa o servidor localmente e observa sua saída. |
refuse | O pagamento é recusado. Nenhum código é gerado. | Você o executa hospedado e ninguém pode receber um código. |
webhook | A confirmação pendente é enviada via POST para sua URL, assinada com HMAC. Você repassa o código ao agente. | Você tem um canal de operações — chat, pager, um aplicativo de aprovação. |
file | A mesma linha JSON é anexada a um arquivo que você monitora. | Você coleta aprovações de logs. |
Qualquer que seja o canal, duas regras valem: o código nunca é retornado ao agente, e um pagamento nunca é aprovado porque sua notificação falhou ao ser enviada — uma falha de entrega recusa o pagamento e retira o código.
Os códigos têm 6 caracteres, uso único e são vinculados ao valor, à ferramenta e ao destino exatos. No máximo 3 códigos podem estar pendentes ao mesmo tempo, e 5 tentativas inválidas de código em sequência revogam todos os códigos pendentes. Um código dura 120 segundos por padrão; defina confirmation.ttlSeconds (ou LIGHTNING_ENABLE_CONFIRMATION_TTL_SECONDS) para alterá-lo, limitado a 30-900. Para os canais assíncronos webhook e file, 300-600 é um valor prático.
Escolhendo um canal
Precedência: variável de ambiente, depois arquivo de configuração, depois automático.
{
"confirmation": {
"channel": "webhook",
"webhookUrl": "https://ops.example.com/lightning-approvals",
"webhookSecret": "<shared secret>",
"filePath": "/var/log/lightning-enable/confirmations.jsonl",
"ttlSeconds": 600
}
}
| Variável de ambiente | Sobrescreve |
|---|---|
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 (padrão ~/.lightning-enable/confirmations.jsonl) |
LIGHTNING_ENABLE_HOSTED | Defina como 1 para declarar uma implantação hospedada (veja abaixo) |
Sem canal definido, o servidor decide:
| stdin | LIGHTNING_ENABLE_HOSTED | Canal | Aviso na inicialização |
|---|---|---|---|
| Um TTY | qualquer coisa | stderr | nenhum |
| Não é um TTY | não definido ou 0 | stderr | sim — ninguém pode estar lendo |
| Não é um TTY | 1 | refuse | sim — pagamentos acima do limite são recusados |
Um servidor MCP stdio sempre tem stdin canalizado, então o aviso é um empurrão, não um diagnóstico: se um humano realmente está observando o console, ignore-o. LIGHTNING_ENABLE_HOSTED=1 é a aceitação explícita que ativa a postura segura — nada muda seu comportamento automaticamente.
Um nome de canal que o servidor não consegue interpretar falha de forma segura para refuse e informa isso na inicialização, então um erro de digitação nunca restaura silenciosamente um código que ninguém lê.
O payload do webhook
POST com Content-Type: application/json e uma assinatura HMAC-SHA256 sobre {timestamp}.{body}, o mesmo esquema que a API Lightning Enable usa para assinar 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
}
O canal file grava exatamente este objeto, uma linha JSON por confirmação, e fixa o arquivo em 0600 no POSIX — ele contém códigos de aprovação ativos.
Duas coisas para saber sobre o webhook:
- A URL deve ser pública. Ela passa pelo mesmo guarda de SSRF no momento da conexão que as URLs fornecidas pelo agente, então um endereço privado, de loopback ou de metadados é recusado na inicialização.
- Redirecionamentos nunca são seguidos. Uma resposta
3xxé uma falha de entrega, então uma aprovação assinada só chega à URL que você configurou.
Os códigos expiram após 120 segundos e são vinculados ao valor, à ferramenta e ao destino exatos para os quais foram aprovados.
Carteiras Suportadas
| Carteira | Configuração | Suporte L402 |
|---|---|---|
| Strike | Chave de API | Sim |
| LND | REST + macaroon | Sim (garantido) |
| NWC (CoinOS) | String de conexão | Sim |
| NWC (CLINK) | String de conexão | Sim |
| NWC (Alby Hub) | String de conexão | Sim |
| OpenNode | Chave de API | Não (sem preimage) |
Limites de gastos
Os limites ficam em ~/.lightning-enable/config.json e são somente leitura em tempo de execução — um agente pode apertar seus próprios limites, mas nunca aumentá-los. Você pode defini-los em USD, em satoshis ou em ambos.
{
"limits": {
"maxPerPayment": 500.00,
"maxPerSession": 100.00,
"maxPerPaymentSats": 5000,
"maxPerSessionSats": 50000,
"autoApproveSats": 100
}
}
| Chave | Variável de ambiente | Significado |
|---|---|---|
maxPerPayment | — | Máximo em USD por pagamento |
maxPerSession | — | Máximo em USD por sessão |
maxPerPaymentSats | LIGHTNING_ENABLE_MAX_PER_PAYMENT_SATS | Máximo em satoshis por pagamento |
maxPerSessionSats | LIGHTNING_ENABLE_MAX_PER_SESSION_SATS | Máximo em satoshis por sessão |
autoApproveSats | LIGHTNING_ENABLE_AUTO_APPROVE_SATS | Satoshis que um pagamento pode gastar sem confirmação enquanto o preço do BTC estiver indisponível |
Por que definir os limites em sats. Um limite em USD precisa ser convertido ao preço atual do BTC, então quando todas as fontes de preço estiverem fora do ar, o pagamento não pode ser verificado e é recusado — correto, mas isso interrompe o agente. Um limite em satoshis não precisa de conversão, então um agente com orçamento em sats continua funcionando durante uma queda de preço. Defina ambas as chaves maxPer…Sats para fechar todas as lacunas.
Quando ambas as denominações estão definidas, o limite mais restritivo vence em cada verificação. budget(action="status") informa qual está em vigor (bindingDenomination), o teto efetivo em sats, se um preço estava disponível e se o modo de indisponibilidade está ativo.
O que acontece durante uma indisponibilidade de preço
Os tetos em satoshis ainda limitam o gasto. Mas um teto diz "nunca mais do que isso" — ele não diz "isso é aceitável sem supervisão", e a escada de níveis em USD que normalmente diz a segunda coisa não pode ser avaliada sem um preço. Então a aprovação falha de forma segura:
autoApproveSatsdefinido — pagamentos iguais ou abaixo dele são aprovados automaticamente; qualquer valor acima segue o fluxo normal de confirmação (o agente pergunta ao humano pelo código exibido no console do servidor).autoApproveSatsnão definido — todo pagamento precisa de confirmação até que uma fonte de preço se recupere.
autoApproveSats é um nível, não um teto: ele nunca pode ampliar maxPerPaymentSats ou maxPerSessionSats, que são verificados primeiro. Ele é totalmente ignorado enquanto um preço estiver disponível — então os níveis em USD decidem como de costume.
Os caminhos de pagamento automático (auto-pagamento L402,
send_onchain,agent_services action=settle) recusam qualquer coisa que precise de confirmação em vez de solicitar. Durante uma indisponibilidade, isso significa que eles só prosseguem sobautoApproveSats.
Ferramentas
Inventário canônico: 17 ferramentas — 14 gratuitas (prontas para uso, basta uma carteira) + 3 que exigem LIGHTNING_ENABLE_API_KEY (uma assinatura Agentic Commerce). Esta tabela é a fonte única da verdade da qual todo número divulgado deriva — ela está vinculada ao código pelos testes de guarda do inventário de ferramentas em ambas as portas (falhas de drift quebram o CI).
Cinco delas são ferramentas de ação: passe action (ou source para receipts) para escolher a operação. Elas substituem 16 ferramentas de propósito único cujos esquemas costumavam ser carregados no contexto do agente a cada sessão — veja Perfis de ferramentas e nomes antigos de ferramentas. Todo nome antigo ainda funciona.
Nota de disponibilidade ASA. Contra a API hospedada do Lightning Enable, as ações
agent_servicesdiscover,request,settle,publish,unpublishereputationfuncionam.attesté recusada, porque a API hospedada não tem rota que aceite atestações, então você não pode deixar uma avaliação por meio dela. Veja Acordos de Serviço de Agente.
| Ferramenta | Acesso | O que faz |
|---|---|---|
setup_wallet | Gratuita | Relata a carteira configurada, ou conecta uma colando uma string de conexão NWC |
pay_invoice | Gratuita | Paga uma fatura Lightning BOLT11 diretamente, obtém a pré-imagem |
pay_l402_challenge | Gratuita | Paga um desafio L402 (fatura + macaroon), obtém o token |
access_l402_resource | Gratuita | Busca uma URL, pagando automaticamente qualquer desafio L402 |
test_l402_payment | Gratuita | Autotesta a carteira contra um endpoint L402 público de 1 sat |
discover_api | Gratuita | Pesquisa o registro de APIs L402 / busca um manifesto de API |
create_invoice | Gratuita | Cria uma fatura BOLT11 para receber pagamento |
check_invoice_status | Gratuita | Verifica se uma fatura criada foi paga |
get_balance | Gratuita | Saldo da carteira: sats, todas as moedas (Strike) e informações da carteira |
budget | Gratuita | action: status (ler limites e gasto da sessão) ou tighten (reduzir os tetos em tempo de execução) |
receipts | Gratuita | source: durable (o log de recibos somente anexação) ou session (os pagamentos desta sessão) |
wallet_ops | Gratuita | action: price, exchange ou send_onchain (Strike; send_onchain também LND). send_onchain aceita address, amountSats, confirmationNonce e um intentId opcional (forneça um novo apenas para pagar o mesmo endereço o mesmo valor novamente; uma repetição é relatada como status, nunca reenviada) |
verify_confirmation_code | Gratuita | Verifica um código de confirmação de pagamento fora da banda (somente verificação — nunca paga) |
create_lightning_enable_account | Gratuita | Cadastro de autoatendimento: pague ~100 sats, obtenha uma chave de API de comerciante |
l402_producer | Agentic Commerce | action: configure_receive, status, create_proxy, add_endpoint, publish, list_challenges, create, verify — todo o lado do vendedor |
agent_services | Agentic Commerce | action: discover, request, settle, publish, unpublish, attest, reputation |
renew_lightning_enable_subscription | Agentic Commerce | Paga a fatura L402 com preço do servidor que compra ou estende 30 dias de Agentic Commerce para a chave de API configurada (maxSats tem como padrão 50.000) |
create_lightning_enable_account é gratuita e autoprovisiona a chave de API que as 3 ferramentas restritas precisam — um agente com carteira paga uma taxa de ativação de ~100 sats e as desbloqueia na hora.
Toda ferramenta carrega anotações MCP: um título legível por humanos e um readOnlyHint explícito, além de destructiveHint em qualquer coisa que possa gastar a carteira. Ferramentas de ação são anotadas para sua ação mais ampla, então budget não é somente leitura (porque tighten escreve) e wallet_ops é destrutiva (porque send_onchain é).
Recursos
O log de recibos durável também é exposto como recursos MCP, para que um cliente possa anexá-lo ou exibi-lo sem que o modelo gaste uma rodada em uma chamada de ferramenta:
| URI | Conteúdo |
|---|---|
lightning-enable://receipts | Os 200 recibos mais recentes como JSONL (application/x-ndjson), do mais antigo para o mais novo |
lightning-enable://receipts/{paymentHash} | Todo recibo registrado para um hash de pagamento |
Ambos leem pelo mesmo caminho da ferramenta receipts, que redige campos com formato de credencial no limite de leitura — uma pré-imagem nunca sai do processo. O hash de pagamento é a referência segura; a pré-imagem é a prova de pagamento e não é um campo de recibo. Os recursos não são afetados pelo perfil de ferramentas: eles não custam bytes de esquema no contexto do modelo.
Perfis de ferramentas e nomes antigos de ferramentas
O esquema JSON de toda ferramenta divulgada é carregado no contexto do agente no início de cada sessão, então a superfície de ferramentas é um custo de token a cada rodada. Escolha quanto divulgar com LIGHTNING_ENABLE_TOOL_PROFILE:
| Perfil | Ferramentas | Use quando |
|---|---|---|
lite | 6 — setup_wallet, pay_invoice, access_l402_resource, get_balance, budget, receipts | O agente só precisa obter uma carteira, gastar e permanecer dentro do orçamento |
standard (padrão) | 17 — a tabela acima | Tudo, com cerca de 40% menos esquema do que a superfície antiga |
full | 33 — standard mais todo nome pré-consolidação | Você tem prompts ou scripts escritos com os nomes antigos de ferramentas |
{
"mcpServers": {
"lightning-enable": {
"command": "uvx",
"args": ["lightning-enable-mcp"],
"env": {
"STRIKE_API_KEY": "your-strike-api-key",
"LIGHTNING_ENABLE_TOOL_PROFILE": "lite"
}
}
}
}
Perfis são somente listagem. Uma ferramenta que o perfil não divulga ainda pode ser chamada pelo nome, e todo nome antigo ainda despacha, sob todo perfil. Estreitar o perfil reduz os esquemas enviados ao contexto do modelo; nunca remove capacidade.
Nome antigo → nova chamada
Nomes antigos são aceitos, mas não divulgados (exceto sob full). Cada um encaminha para a nova ferramenta e seu resultado carrega um marcador deprecated nomeando a substituição. Removidos na v3.0.0 — migre para os novos nomes.
| Ferramenta antiga | Nova chamada |
|---|---|
| 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 |
Os três últimos são anteriores a esta consolidação e permanecem ocultos em todo perfil, full incluído.
Documentação
- README .NET — Documentação completa do .NET
- README Python — Documentação completa do Python
- Documentação completa — Guia completo de toda ferramenta
- Segurança de gastos de IA — Controles de orçamento e segurança
Estrutura do repositório
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
Vendendo com L402 (a ferramenta l402_producer)
Todo o lado do vendedor em uma única ferramenta. Passe action para escolher a operação. Toda ação
precisa de LIGHTNING_ENABLE_API_KEY (uma assinatura Agentic Commerce);
nenhuma ação pode gastar sua carteira.
Versão da API.
create,verify,create_proxy,add_endpointepublishfuncionam contra toda compilação da API Lightning Enable.configure_receiveprecisa do canal de recebimento NWC elist_challengesprecisa da rota de listagem de desafios, ambos incluídos no lançamento da API que esta versão tem como alvo. Executel402_producer(action="status")primeiro — ele degrada graciosamente e informa o que a implantação para a qual você está apontado suporta.
| Ação | Argumentos | O que faz |
|---|---|---|
configure_receive | nwc_connection_string (opcional) | Aponta pagamentos L402 para uma carteira que você controla |
status | limit | Plano, carteira de recebimento, checklist de integração, mints recentes (somente leitura) |
create_proxy | name, target_base_url, description, default_price_sats | Coloca uma API existente atrás do L402 |
add_endpoint | proxy_id, endpoint_id, path, http_method, summary, price_sats | Precifica uma rota |
publish | proxy_id, service_name, service_description, categories | Lista o serviço para que outros agentes possam encontrá-lo |
list_challenges | challenge_status, limit, offset | Lê de volta o que você cunhou (somente leitura) |
create | resource, price_sats, description | Cunha um desafio de fatura + macaroon de uso único |
verify | macaroon, preimage | Verifica o token de um pagador antes de conceder acesso |
De uma chave de API a um endpoint pago
Sem painel, sem cliente REST, sem humano no fluxo. Cada etapa é uma chamada de ferramenta:
- Obtenha uma chave de API.
create_lightning_enable_account— paga uma taxa de ativação de ~100 sats da sua carteira e grava a chave em~/.lightning-enable/config.json. Reinicie o servidor para que as ferramentas restritas sejam desbloqueadas. (Pule se você já tiver uma chave.) - Aponte os pagamentos para sua própria carteira.
l402_producer(action="configure_receive")— sem argumento, ela reutiliza a carteira NWC que este servidor já usa para pagamentos; passenwc_connection_stringpara usar uma diferente. A string nunca é exibida de volta, apenas<set>. - Verifique sua situação.
l402_producer(action="status")— plano, carteira de recebimento e a lista de verificação de integração, para que o agente veja o que ainda falta. - Coloque sua API atrás do L402.
l402_producer(action="create_proxy", name="Weather API", target_base_url="https://api.example.com", default_price_sats=25)— retorna umproxy_ide a URL base pública. Toda solicitação sob ela agora responde402até que seja paga. - Defina o preço de cada rota.
l402_producer(action="add_endpoint", proxy_id="weather-api", endpoint_id="forecast", path="/forecast", http_method="GET", price_sats=10)— repita para cada rota. - Publique.
l402_producer(action="publish", proxy_id="weather-api", service_description="Five-day forecasts for agents", categories=["weather"])— retorna as URLs do OpenAPI e do manifesto. Outros agentes a encontram por meio dediscover_api. - Acompanhe o dinheiro chegar.
l402_producer(action="list_challenges", challenge_status="paid")— hash de pagamento, recurso, valor e status. Nunca um macaroon, nunca uma preimage.
Para um recurso que você não está fazendo proxy — um arquivo, um relatório, uma resposta pontual — pule as etapas 4-6 e
use create / verify diretamente.
Os pagamentos são liquidados na sua carteira. A Lightning Enable não retém os fundos.
Acordos de Serviço entre Agentes (a ferramenta agent_services)
Comércio entre agentes no Nostr, por trás de uma única ferramenta. Passe action para escolher a operação.
agent_services exige LIGHTNING_ENABLE_API_KEY (uma assinatura do Agentic Commerce); action="settle" adicionalmente gasta o saldo da sua carteira, sujeito a limites de orçamento.
A API hospedada da Lightning Enable recusa attest, porque ela não tem uma rota que aceite atestados, então você não pode deixar uma avaliação por meio dela; discover, request, settle, publish, unpublish e reputation funcionam.
| Ação | Descrição |
|---|---|
| discover | Busca capacidades de agentes por categoria, hashtag ou palavra-chave |
| publish | Publica os serviços do seu agente na rede Nostr (kind 38400). Publique uma vez: cada chamada cria uma nova listagem e um proxy L402. Para alterar uma listagem, unpublish e publish novamente, ou edite-a no painel da Lightning Enable |
| unpublish | Remove uma listagem publicada: encerra o proxy L402 e emite uma remoção NIP-09 |
| request | Solicita um serviço de outro agente (kind 38401) |
| settle | Paga por um serviço de agente via liquidação Lightning L402 |
| attest | Deixa uma avaliação/classificação para um agente após a conclusão do serviço (kind 38403) |
| reputation | Verifica a pontuação de reputação de um agente a partir de atestados no protocolo |
Como Funciona o Comércio entre Agentes
- Descobrir —
agent_services(action="discover", category="translation")encontra agentes que oferecem tradução - Solicitar —
agent_services(action="request", capability_event_id=..., budget_sats=100)envia uma solicitação de serviço - Liquidar —
agent_services(action="settle", l402_endpoint=...)paga via Lightning e recebe o resultado - Avaliar —
agent_services(action="attest", subject_pubkey=..., agreement_id=..., rating=5)constrói reputação no protocolo (a API hospedada recusa esta ação)
Para preços dinâmicos, os provedores usam l402_producer(action="create") para gerar faturas no preço acordado. Os solicitantes pagam e os provedores verificam com l402_producer(action="verify").
Os sete nomes antigos de ferramentas (discover_agent_services, settle_agent_service, …) ainda funcionam — veja Nome antigo → nova chamada.
Projetos 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
Privacidade
A Lightning Enable não retém fundos — a carteira conectada ou o provedor de pagamento (Strike, OpenNode, LND ou uma carteira NWC) é quem retém. O servidor MCP roda localmente e conversa com a carteira/provedor que você configura e, para descoberta L402, com o registro da API L402. As credenciais da carteira que você fornece permanecem na sua máquina (ou, para a API hospedada, são criptografadas em repouso). Consulte a Política de Privacidade completa para saber quais dados são coletados, terceiros envolvidos, retenção e contato (privacy@lightningenable.com).
Suporte
Se algo estiver quebrado ou não funcionando, envie um e-mail para support@lightningenable.com — uma pessoa real lê. Para perguntas gerais, entre no Discord: https://discord.gg/rX7NxHY8vx. Relatórios de bugs e solicitações de recursos: abra uma issue neste repositório.
Licença
MIT — veja LICENSE.
Links
- Lightning Enable — Middleware de habilitação de pagamentos
- Documentação — Documentação completa
- Loja — Demonstração L402 ao vivo
- NuGet — Pacote .NET
- PyPI — Pacote Python
- Docker Hub — Imagem Docker