aiMCPdesenvolvedorsegurança

Deixe sua IA enviar segredos sem lhe dar os segredos.

Como o MCP da PrivateNote entrega arquivos por e-mail, Slack, Discord e WhatsApp — sem o modelo lê-los

Atualizado 11 de setembro de 20267 minutos de leituraPrivateNote.ai

Seu assistente pode enviar hoje um contrato, uma senha ou um CSV. Ele não deveria precisar ler esses arquivos para isso. Passe caminhos locais ao MCP da PrivateNote e coloque apenas um link que se autodestrói no canal que você já usa.

Principais conclusões

  • Passe caminhos de arquivo, não os bytes — o MCP local criptografa para o modelo não precisar da carga.
  • Você aprova uma pré-visualização que fixa os bytes exatos, as opções e o destino. Criar uma nota não é autorização para enviá-la.
  • E-mail, Slack, Discord e WhatsApp devem levar só a URL da PrivateNote depois de sendAuthorized — nunca o arquivo. Deixe o one-shot desligado se o agente também puder enviar mensagens.
  • A URL descriptografável é uma capacidade ao portador que o agente pode ver após a confirmação. Não a registre. Depois da entrega, consulte a abertura ou revogue uma nota não aberta.

A parte útil de um assistente de IA não é que ele consiga ler um contrato, um arquivo de senhas ou uma exportação de clientes. A parte útil é que ele consiga levar essa carga à pessoa certa, no canal em que ela já vive, sem transformar o assistente em uma cópia do segredo.

Esse é o trabalho do dia: enviar um PDF a um cliente por e-mail, deixar uma senha de staging para um colega no Slack, entregar um token de bot a um moderador no Discord ou colocar um login de uso único em um fio do WhatsApp. As pessoas já fazem isso colando. Os agentes tornam a cola mais rápida — e o vazamento maior, porque o segredo passa a estar também no contexto do modelo, na transcrição do chat e em cada log que o host guarda.

O servidor MCP da PrivateNote foi feito para a separação inversa. O agente orquestra. Um processo local trata do segredo. Você aprova o arquivo exato e o destino. E-mail, Slack, Discord e WhatsApp só carregam um link. O modelo recebe a ordem de passar caminhos de arquivo, não bytes. A criptografia acontece na sua máquina depois que você confirma. O que volta é uma URL cujo fragmento guarda a chave — o mesmo modelo do link secreto de uso único do app web. Criar uma nota não é autorização para enviá-la.


O trabalho é enviar, não saber

A maior parte dos conselhos de „IA + segredos” ainda assume que o modelo precisa ver a credencial para ajudar. Isso é verdade se você quer que o modelo explique o arquivo, reescreva o contrato ou depure a chave. Não é verdade se você quer que ele entregue.

Entrega é um problema de logística: qual arquivo, qual pessoa, qual canal, quanto tempo o acesso deve durar, se deve queimar após a primeira visualização. Nenhuma dessas decisões exige o texto em claro. Exigem uma ferramenta que possa ler um caminho local, criptografar e devolver um handle que o resto da pilha tem permissão de ver.

É para isso que existe o privatenote-mcp. Hosts que honram as instruções MCP recebem, nesta ordem: se o usuário nomeou um arquivo local, passe o caminho absoluto; não abra, não faça cat e não resuma; chame create_private_note (uma pré-visualização); espere você aprovar; depois chame confirm_private_note. Só então outra ferramenta pode enviar a URL — e só para o destino que você aprovou.

A regra

Se o assistente consegue concluir a tarefa com um caminho, não deve concluí-la com o conteúdo. Colar no prompt é o último recurso — depois que o segredo já está no chat.

Por que os canais que você já usa guardam a cópia errada

E-mail, Slack, Discord e WhatsApp são bons em conversa. São cofres ruins. Criptografia em trânsito, mesmo de ponta a ponta, não decide por quanto tempo uma cópia pesquisável permanece em dispositivos, em exportações do workspace, em backups na nuvem ou em prévias de notificação. É a mesma distinção de por que o e-mail é o pior lugar para segredos e por que segredos nunca devem ser colados no chat.

  • O e-mail guarda anexos nas duas caixas, nos servidores de correio, em legal holds e em „pesquisar todo o e-mail”. Encaminhar multiplica cópias que você não consegue revogar depois.
  • O Slack é indexado pelo workspace. Admins, exportações de compliance e funções de IA que resumem canais podem reencontrar uma senha meses depois.
  • O Discord parece efêmero em um servidor movimentado. Não é. Pins, busca e DMs guardam tokens de bot e segredos de admin ao lado de memes.
  • O WhatsApp costuma ser o único canal que um prestador ou cliente realmente abre. Também é uma caixa familiar: capturas de tela circulam, computadores vinculados sincronizam, e backups sobrevivem ao trabalho.

O ponto não é abandonar essas ferramentas. O ponto é parar de colocar nelas a carga. Elas continuam sendo o envelope. A nota é a carta. Os destinatários ainda não precisam de conta PrivateNote: abrem o link no navegador, do mesmo jeito que qualquer outra URL que você já envia.


A divisão em três

PapelO que pode verO que não deve ver
Agente de IA (Cursor, Claude, Codex)Quem, qual caminho, qual canal, expiração, burn-after-read. Depois que você confirma: a URL descriptografávelBytes do arquivo, senhas, corpo da nota. Não deve enviar a URL até você aprovar esse destino
MCP da PrivateNote (processo Node local)Os arquivos em disco, só para criptografarNada que depois devolva em texto claro
E-mail / Slack / Discord / WhatsAppA URL da PrivateNote (e um assunto legível)O anexo, a credencial, a passphrase

O MCP não envia o e-mail nem a mensagem do Slack por você. Criar uma nota não é autorização para enviá-la. Depois que você aprova uma pré-visualização que nomeia canal e destinatário exatos, o resultado pode incluir sendAuthorized: true — então uma ferramenta de e-mail ou chat pode enviar só a URL para esse destino. Se nenhum destino foi aprovado, sendAuthorized é false e o agente deve lhe dar a URL para colar, não disparar outra ferramenta.

A URL é uma capacidade ao portador: quem a tem pode abrir a nota. O host MCP atual devolve secureUrl no resultado da ferramenta, então o agente pode observar o link mesmo sem observar os bytes do arquivo. Não registre, não faça commit e não copie para ferramentas sem relação. Trate-a como o segredo.

O resto do retorno é pequeno: noteId, expiresAt, burnAfterReading e, quando couber, passwordProtected e attachedFileNames. Nomes de arquivo são metadados, não conteúdo — mesmo assim evite colocar um segredo no nome.


O que o MCP faz de fato na sua máquina

Quando o agente chama create_private_note, um processo Node.js local — não o modelo — canoniza o caminho, confere contra a allowlist do workspace, faz o hash do arquivo e mostra uma pré-visualização. Ele ainda não devolve uma URL descriptografável. Depois que você aprova, confirm_private_note reabre esse mesmo arquivo, verifica dispositivo, inode, tamanho e SHA-256, e criptografa esses bytes. Se o arquivo mudou, a confirmação falha; o agente precisa recomeçar. O texto cifrado AES-256-GCM é enviado por POST à PrivateNote. A chave de descriptografia fica no fragmento da URL (#…). Navegadores não enviam fragmentos aos servidores. A API guarda um blob criptografado. Sem o fragmento, esse blob é ruído.

Prefira parâmetros de caminho para o host nunca precisar colocar o segredo nos argumentos da chamada que o modelo montou:

  • contentFilePath — arquivo UTF-8 que vira o corpo da nota (uma senha, um código de recuperação, uma instrução curta).
  • filePath / filePaths — anexos locais (PDF, CSV, imagens). Exige sign_in. Máximo combinado de 20 arquivos.
  • passwordFilePath — a primeira linha de um arquivo local vira a passphrase de revelação (envoltório Argon2id). Envie essa passphrase fora do canal, nunca na mesma mensagem do link.
  • content e password — último recurso, só se o usuário já colou o segredo no chat e não existe arquivo.

A política padrão combina com uma entrega, não com um arquivo morto: burnAfterReading é true, expiresIn é 24 horas por padrão. Mais curto é melhor quando o destinatário espera do outro lado do Slack. Visualização múltipla (burnAfterReading: false) exige conta Premium. Anexo, verificação do destinatário, avisos de abertura e listar/revogar exigem sessão autenticada; gates e alertas também exigem plano pago.

Os caminhos são limitados. Por padrão só arquivos sob o workspace (o diretório de trabalho do processo MCP) podem ser lidos. Defina PRIVATENOTE_MCP_ALLOWED_ROOTS se precisar acrescentar pastas. Chaves SSH, diretórios de credenciais na nuvem e o arquivo de sessão do MCP estão sempre bloqueados, mesmo se você permitir $HOME ou /.


Você aprova a entrega exata — não um nome de caminho

Um agente que pode criar um link descriptografável e enviar e-mail ou Slack é um confused deputy: pode criptografar o arquivo errado, ou enviar o link certo à pessoa errada, em um turno. O padrão da PrivateNote é que você autorize três coisas juntas: os bytes exatos do arquivo, as opções exatas da nota (expiração, burn-after-read) e o destino exato.

A pré-visualização deve mostrar o destino quando o envio é pedido, por exemplo „Send via: Email / Recipient: alice@example.com”. Aprovar isso nunca deve autorizar outro endereço ou outro canal do Slack. confirm_private_note aceita só confirmationId. O agente não pode substituir caminho, destinatário, canal, expiração ou política de destruição na confirmação.

Criar uma nota sem destino devolve sendAuthorized: false. É de propósito. Um link no chat continua sensível — mas não é permissão para enviá-lo por e-mail.

Não ligue o one-shot se o agente pode enviar

PRIVATENOTE_MCP_ALLOW_ONE_SHOT pula a pré-visualização humana. O agente não consegue ligar isso como argumento da ferramenta, e mudar a variável de ambiente depois não tem efeito até você reiniciar o servidor MCP. Deixe desligado. Ligar enquanto o mesmo host pode enviar e-mail, Slack, Discord ou arquivos deixa o modelo criar um link descriptografável e despachá-lo em um passo — inclusive o arquivo errado ou o destinatário errado. A allowlist de caminhos continua valendo; não substitui a sua aprovação.

Conecte uma vez

Exige Node.js 18+. Depois de salvar, reinicie o cliente MCP para carregar os esquemas e as instruções atuais das ferramentas. As notas completas de instalação estão na página de integração MCP.

~/.cursor/mcp.json · o Claude Desktop usa o mesmo bloco
{
  "mcpServers": {
    "privatenote": {
      "command": "npx",
      "args": ["-y", "privatenote-mcp"]
    }
  }
}

Codex CLI: codex mcp add privatenote -- npx -y privatenote-mcp. Isso grava ~/.codex/config.toml. Notas específicas do Codex estão em Usar a PrivateNote com o OpenAI Codex.

Self-hosted: defina PRIVATENOTE_API_BASE_URL e PRIVATENOTE_WEB_ORIGIN no bloco env do MCP para o texto cifrado não sair da sua infraestrutura. Opcionalmente PRIVATENOTE_MCP_ALLOWED_ROOTS. Não acrescente PRIVATENOTE_MCP_ALLOW_ONE_SHOT a menos que tenha um host de automação bem restrito e sem ferramentas de envio.


Uso diário: e-mail

O e-mail ainda é como empresas enviam contratos, NDAs, faturas com dados bancários e exportações de clientes. O modo de falha é anexar o arquivo. A caixa guarda então uma cópia descriptografável por anos, inclusive do lado do destinatário, em rastros de BCC e no e-discovery.

O padrão MCP: o agente já conhece o endereço da Alice e os dois PDFs locais. Ele não deve abrir esses PDFs. Faz sign-in se precisar, chama create_private_note com filePaths, sendChannel e sendRecipient para a pré-visualização nomear a Alice, espera você aprovar e depois confirm_private_note. Só então a ferramenta de e-mail pode colocar apenas secureUrl no corpo. Se você usa verificação do destinatário, quem lê precisa provar que o endereço é dele antes de a nota abrir — esse gate não envia o e-mail; a sua ferramenta de e-mail continua enviando.

O que você diz
Envie estes dois arquivos para a Alice por e-mail.
Proteja-os com a senha em /absolute/path/client-password.txt.
Não exponha os arquivos nem a senha ao modelo:
/absolute/path/contract.pdf
/absolute/path/nda.pdf
  • O agente chama sign_in se não houver sessão do plugin, depois create_private_note com filePaths, passwordFilePath, sendChannel: "email" e sendRecipient. Você aprova a pré-visualização. Depois confirm_private_note.
  • O assunto pode dizer „pacote do contrato” — não deve citar cláusulas do PDF.
  • Envie a passphrase em uma segunda mensagem, uma ligação ou um compartilhamento do gerenciador de senhas — nunca no mesmo e-mail do link. Veja como compartilhar uma senha com segurança.
  • Para um destinatário nomeado em plano pago: requireRecipientVerification: true e recipientEmail: "alice@example.com".

É o mesmo modelo de entrega de enviar documentos sensíveis com segurança, com a diferença de que o assistente pode executá-lo sem virar leitor do pacote.


Uso diário: Slack

O Slack é onde o plantão acontece. Senhas do banco de staging, tokens de deploy e „o CSV do financeiro” caem em um fio porque todo mundo já está lá. A busca do workspace transforma esse depósito em uma wiki interna permanente de segredos.

Peça uma entrega baseada em caminho e um pavio curto. Quinze minutos bastam se o colega está online. Queime após a leitura para um acerto de busca posterior ser um link morto, não uma credencial viva. Trate a URL como o segredo: não publique em canal público; use uma DM ou um canal privado dedicado.

O que você diz
Envie ao Mark a senha do banco em /absolute/path/secrets/db-password.txt no Slack.
Leitura única, expira em 15 minutos.
Não leia o arquivo no chat.
  • create_private_note com contentFilePath, expiresIn: "15m", burnAfterReading: true e o destino do Slack ligado na pré-visualização. Aprove, depois confirm_private_note.
  • Se o Slack estiver conectado como outra ferramenta MCP, o agente só pode publicar secureUrl no destino aprovado depois que sendAuthorized for true. Caso contrário, ele lhe dá a URL para colar.
  • Depois que o Mark abrir, rotacione a senha se era um segredo de staging compartilhado — a nota reduziu cópias restantes; não tornou única uma credencial compartilhada.

Uso diário: Discord

O Discord é o canal de operações padrão de muitas comunidades de produto e times próximos de jogos. Tokens de bot, chaves da Cloudflare e „aqui a planilha dos usuários reportados” são colados em DMs de moderação porque o Discord é onde os mods estão.

Uma mensagem do Discord continua sendo uma mensagem armazenada. Membros do servidor com o papel certo, backups de dispositivo e a própria busca do Discord vão guardá-la. O padrão MCP é idêntico ao do Slack: criptografe o arquivo ou o token localmente, coloque o link na DM, defina uma expiração curta. Se o token já foi colado antes no mesmo servidor, rotacione — embrulhar um segredo vazado não desfaz o vazamento.

O que você diz
Mande por DM ao responsável da comunidade o token do bot em /absolute/path/secrets/discord-bot.txt
e a exportação de moderação em /absolute/path/reports/export.csv.
Leitura única, 1 hora, não abra esses arquivos.
  • Anexos exigem sign_in. Uma nota só de token pode usar contentFilePath sem sessão.
  • Amarre o destino do Discord na pré-visualização, aprove e depois confirm_private_note. Só então uma ferramenta do Discord pode enviar a URL.
  • Prefira uma DM de usuário a colar no canal de mods. Um „canal privado” ainda é uma transcrição.
  • Se a exportação inclui dados pessoais, acrescente um arquivo de passphrase e diga a passphrase ao responsável em uma chamada de voz.

Uso diário: WhatsApp

O WhatsApp é o canal que você usa quando a outra pessoa não entra no Slack e não vai olhar o e-mail até segunda. Um prestador, um assistente de family office, um cliente no celular. A criptografia de ponta a ponta é real. A persistência também: o chat é um registro, muitas vezes em vários dispositivos, muitas vezes com backup.

Você não precisa que instalem a PrivateNote. Precisa que toquem em um link. O trabalho do assistente é preparar esse link a partir de um arquivo local que você já tem — PDF da fatura, senha do Wi-Fi, código de portal de uso único — sem lê-lo antes no fio do Cursor ou do Claude. Você ainda aprova a pré-visualização (arquivo exato e destino do WhatsApp) antes de confirm_private_note criar a URL.

O que você diz
Envie o pacote de onboarding em /absolute/path/client/onboarding.pdf
para a Ana no WhatsApp. Queime após a leitura, expire amanhã.
Não leia o PDF.

O WhatsApp pré-visualiza URLs. Essa prévia é a página da PrivateNote, não o arquivo descriptografado. Mesmo assim: não coloque a passphrase no mesmo chat. Se o número pode estar errado, crie a nota, envie o link e revogue se ela nunca abriu. Advogados e outros remetentes profissionais que precisam de uma página de revelação com a marca, em vez de uma bolha verde, devem ler entrega segura a clientes para advogados.


Entre quando a carga é um arquivo

Notas só de texto a partir de contentFilePath podem ser criadas sem conta, dentro dos mesmos limites públicos do site. Anexar arquivo é diferente. O MCP precisa chamar sign_in primeiro. Isso abre uma página de aprovação no navegador (a concessão já está na URL — não há código para digitar). Depois que você clica em Approve, o agente chama sign_in de novo com pollDeviceCode. A sessão fica em ~/.config/privatenote/mcp-session.json e é enviada como Authorization: Bearer. Ela não substitui a sessão de cookie do site.

  • O agente executa sign_in() — o navegador abre
  • Você clica em Approve na página da PrivateNote
  • O agente consulta com pollDeviceCode e depois whoami()
  • O agente chama create_private_note com caminhos de arquivo (pré-visualização — ainda sem URL)
  • Você aprova os arquivos exatos, a expiração e o destino
  • O agente chama confirm_private_note e então você (ou outra ferramenta) envia só secureUrl no canal humano

whoami mostra a conta autenticada. sign_out apaga o arquivo de sessão do plugin. Trate esse arquivo como uma credencial desta máquina.

Instale o privatenote-mcp no Cursor, no Claude Desktop ou no Codex. O agente fica com o fluxo; o processo local fica com o segredo.

Abrir o guia de configuração do MCP


A ressalva honesta de privacidade

A afirmação forte — „a IA nunca viu os bytes do arquivo” — vale quando o host honra as instruções de caminho primeiro e você nunca colou a carga no prompt. Ela não significa que o agente não possa ver secureUrl depois da confirmação. Uma chamada normal de ferramenta MCP ainda pode expor os argumentos ao host. Por isso as ferramentas preferem caminhos: o argumento é /Users/you/secrets/db-password.txt, não a senha.

Se você digita create a PrivateNote for sk_live_abc123, um provedor de modelo na nuvem pode processar essa string antes de o MCP rodar. A PrivateNote ainda guarda só texto cifrado, e o Slack ainda recebe só um link. Você melhorou o vazamento a jusante. Não manteve o segredo fora do modelo. Para o máximo de privacidade, deixe os segredos em arquivos (ou use a extensão do VS Code / Cursor para o editor criptografar sem o agente) e diga o caminho ao assistente.

  • Não peça ao modelo para „checar o PDF primeiro” nem para resumir. Isso força uma leitura com outra ferramenta.
  • Não coloque a passphrase no mesmo Slack, WhatsApp ou e-mail da URL.
  • Trate secureUrl como o segredo. O agente pode vê-la no resultado da ferramenta. Não faça commit, não registre e não cole em um canal público do Discord.
  • Recarregue o cliente MCP depois de atualizar o privatenote-mcp para instruções e esquemas continuarem atuais. Deixe o one-shot desligado.

Perguntas frequentes

O MCP da PrivateNote envia Slack, Discord, WhatsApp ou e-mail sozinho?

Não. Ele criptografa localmente e devolve uma URL mais metadados. A entrega usa o que você já usa — outro servidor MCP (Gmail, Slack, …) ou você colando o link. Criar uma nota não é permissão para enviá-la. sendAuthorized só é true se você aprovou esse canal e esse destinatário exatos na pré-visualização.

Por que preciso confirmar antes de o link ser criado?

A confirmação amarra os bytes exatos do arquivo, as opções da nota e o destino. Sem ela, um agente que também tem ferramentas de e-mail ou chat poderia criptografar o arquivo errado ou enviar o link certo à pessoa errada em um turno. O modo one-shot pula essa pré-visualização. Deixe desligado, sobretudo se o mesmo host pode enviar mensagens ou arquivos.

O agente pode ver a URL descriptografável?

Sim, no host MCP atual. secureUrl volta no resultado da ferramenta para uma ferramenta de entrega poder enviá-la. O agente ainda não deve ver os bytes do arquivo. Ter a URL pode abrir a nota — trate-a como uma capacidade ao portador, não como „o modelo não consegue acessar o segredo”.

O destinatário precisa instalar alguma coisa?

Não. Ele abre o link completo em um navegador comum. Não é preciso conta PrivateNote para revelar uma nota. Ainda pode precisar de uma passphrase ou verificação por e-mail se você ativou esses gates.

Posso anexar arquivos sem entrar?

Não. Anexo, listar/revogar, verificação do destinatário e avisos de abertura exigem sign_in. Uma nota só de texto a partir de contentFilePath pode ser criada sem sessão, dentro dos limites públicos.

E se o assistente ler o arquivo mesmo assim?

Então o limite de privacidade já se rompeu naquele turno. As instruções MCP dizem aos hosts para não fazer isso. Se o seu cliente as ignora, continue usando a extensão do editor ou o app web, e não aponte o agente para o arquivo. Você ainda pode enviar a URL que a extensão produziu.

O burn-after-read impede capturas de tela?

Não. Quando um destinatário legítimo descriptografa a nota, pode copiar, fotografar ou reenviar. Burn-after-read e expiração reduzem cópias restantes no serviço e no histórico do chat. Não apagam à distância o que alguém já capturou. Para documentos, o acesso só de visualização no Business reduz o download casual; não é uma proibição de fotografar.

Deixe o agente enviar o link. Mantenha o arquivo fora do modelo.

Instale o privatenote-mcp, aponte-o para caminhos locais e continue usando e-mail, Slack, Discord e WhatsApp como envelopes — não como cofres. Deixe o one-shot desligado se o mesmo host pode enviar mensagens ou arquivos.

PrivateNote on LaunchNest