JFSecure (jfs mcp)

Permite que agentes de IA usem suas chaves de API e senhas sem vê-las: executa comandos com segredos no ambiente e retorna saída mascarada, renderiza arquivos .env que nunca lê; cada uso é aprovado no aplicativo de desktop JFSecure.

Documentação

jfs — segredos para agentes de IA que nunca os veem

jfs é a linha de comando e o servidor MCP do JFSecure, um gerenciador offline de senhas e snippets. Ele permite que Claude Code, Cursor ou qualquer agente MCP use um segredo sem nunca obtê-lo — e você aprova cada uso no aplicativo.

Este repositório é a fonte do próprio jfs, para que você possa ler exatamente com o que um agente conversa. É um cliente leve: ele envia uma solicitação JSON por um pipe local para o aplicativo JFSecure em execução e desbloqueado e imprime a resposta. Ele nunca abre arquivos de cofre, nunca vê a senha do cofre e não possui criptografia. (O aplicativo é um download separado; o jfs acompanha ele.)

Claude Code asks, JFSecure shows the exact command, the agent gets the output with the token masked

Ferramentas MCP

FerramentaO que fazO que o agente recebe de volta
list_secretsLista nomes de segredos e chaves, com a variável de ambiente que cada chave se tornaApenas nomes
run_with_secretsExecuta um comando com as chaves de um segredo como variáveis de ambiente (todas, algumas ou uma na stdin)Código de saída e saída, cada valor mascarado como [JFSecure: NAME]
render_templatePreenche {{Secret:key}} em um modelo e grava o arquivo (ex.: .env)Quais nomes foram preenchidos

Não existe ferramenta "get", de propósito. Cada uso abre uma janela de aprovação no JFSecure que mostra o programa, o comando exato e o segredo: permitir uma vez, permitir por 15 minutos ou negar. Para Claude Code, uma aprovação de 15 minutos cobre apenas aquele comando e aquele segredo.

# the agent called run_with_secrets(secret: "github", command: …)
exit code 0
variables set: TOKEN
--- stdout ---
token is [JFSecure: TOKEN]
{"login": "octocat", "plan": {"name": "pro"}}

Configuração

  1. Instale o JFSecure e abra seu cofre: brew install theone55/jfsecure/jfsecure (macOS), scoop bucket add jfsecure https://github.com/theone55/scoop-jfsecure; scoop install jfsecure/jfsecure (Windows), ou o instalador (Windows, macOS, Linux). O jfs acompanha ele: no Windows, o aplicativo o coloca no PATH no primeiro início (abra um novo terminal depois); no macOS (.dmg) e no AppImage Linux, use Configurações → Instalar o comando jfs; Homebrew e o .deb o instalam para você.
  2. Adicione o servidor MCP:
claude mcp add --scope user jfsecure -- jfs mcp

Cursor (~/.cursor/mcp.json), Claude Desktop, Windsurf, VS Code — qualquer cliente MCP stdio:

{ "mcpServers": { "jfsecure": { "command": "jfs", "args": ["mcp"] } } }

Mais: https://secure.jfolio.org/agents

Também como um pacote MCP (.mcpb, Windows / macOS / Linux) na página de releases, e no Registro MCP oficial como io.github.theone55/jfs.

Linha de comando

jfs status                       is the app running and unlocked
jfs ls [secret|folder]           names only, no approval needed
jfs get github/token             print a value (approved in the app)
jfs copy github/token            to the clipboard, nothing printed
jfs run github -- gh api user    run with the secret's keys as env vars ($token → TOKEN); output masked when piped
jfs render .env.tpl -o .env      fill {{Secret:key}} into a file
git config --global credential.helper "!jfs git-credential"

Guia completo: https://secure.jfolio.org/cli

O que ele protege — e o que não protege

  • O modelo nunca recebe um valor, então ele não pode acabar em uma transcrição ou log.
  • Um agente com injeção de prompt só pode pedir; você vê o comando exato.
  • O pipe é exclusivo do usuário do seu sistema operacional, e o aplicativo identifica o chamador pelo SO, não pelo que ele diz.
  • A máscara é um cinto de segurança, não uma parede: um comando que você aprova ainda pode enviar um valor para fora. Leia o comando.

Build

cargo build --release   # Rust stable; Windows, macOS, Linux
cargo test

A cópia aqui segue cada release do JFSecure (version no Cargo.toml = a versão do aplicativo com a qual foi enviado). Problemas e perguntas são bem-vindos aqui.

Licença MIT.