VaultMCP

VaultMCP é um cofre de segredos criptografado e gateway MCP. Você armazena credenciais de provedores uma única vez. Sua IDE de IA se conecta a um único endpoint. O VaultMCP descriptografa segredos apenas ao chamar servidores MCP upstream — seus agentes e arquivos de configuração nunca veem as chaves brutas.

Documentação

VaultMCP

License: AGPL-3.0-only Website

Mantenha as chaves de API fora do seu IDE de IA.

VaultMCP é um cofre de segredos criptografado e um gateway MCP. Você armazena as credenciais do provedor uma única vez. Seu IDE de IA se conecta a um único endpoint. O VaultMCP descriptografa os segredos apenas ao chamar servidores MCP upstream — seus agentes e arquivos de configuração nunca veem as chaves brutas.

Desenvolvido por Axiler Labs · Produto: vaultmcp.dev

Claude Desktop     VS Code     Cursor     Windsurf     Zed

Funciona com qualquer cliente MCP — Claude Desktop, VS Code, Cursor, Windsurf, Zed e outros.

ProdutoSelf-hostParaLicença
vaultmcp.devhttps://YOUR_HOSTIDEs de IA + segredos MCPAGPL-3.0

Como funciona

Um cofre. Uma URL MCP. Cada IDE fala com o VaultMCP — não com suas chaves brutas da AWS ou do GitHub.

  1. Entre com o GitHub e crie um workspace em vaultmcp.dev.
  2. Armazene segredos uma única vez (criptografados em repouso — veja Encryption). Compartilhe com colegas de equipe quando necessário.
  3. Aponte seu IDE para https://vaultmcp.dev/mcp (ou seu /mcp auto-hospedado).
  4. Chame ferramentas como aws__… / github__…. As credenciais são injetadas no lado do servidor — nunca coladas em mcp.json.
flowchart LR
  subgraph clients [MCP clients]
    Claude[Claude]
    VSCode[VS Code]
    Cursor[Cursor]
    Windsurf[Windsurf]
    Zed[Zed]
  end

  subgraph vaultmcp [VaultMCP]
    API[Vault · OAuth · MCP gateway]
  end

  subgraph upstreams [Upstreams]
    MCP[AWS · GitHub · other MCP]
  end

  Claude --> API
  VSCode --> API
  Cursor --> API
  Windsurf --> API
  Zed --> API
  API -->|inject secrets| MCP

Recursos

  • Cofre somente gravação — listas de APIs, respostas MCP e logs de auditoria nunca retornam valores de segredos
  • Injeção no lado do servidor — a descriptografia só acontece dentro da API ao chamar um upstream
  • Segredos privados e compartilhados — visibilidade por usuário ou por workspace
  • OAuth do GitHub ou tokens pessoais — login no navegador para IDEs, ou tokens vmcp_… em Authorization
  • Ferramentas com namespace — registre upstreams uma vez; chame-os como provider__tool_name
  • Porta pública única — Docker Compose expõe a porta 80; API e interface permanecem na rede interna
  • CLI opcional — injete segredos compartilhados do workspace em npm run dev local (e similares) sem compartilhar arquivos .env

Início rápido (local)

Necessário: Node.js 22+, pnpm 9, Docker (Postgres + Redis) e um GitHub OAuth App.

git clone https://github.com/Axiler-Lab/vaultmcp.git
cd vaultmcp
cp .env.example .env

Preencha pelo menos: VAULT_MASTER_KEY, GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, PUBLIC_URL, WEB_ORIGIN, DATABASE_URL, REDIS_URL. Os padrões locais estão em .env.example.

GitHub OAuth App

CampoLocal (pnpm)Docker Compose (porta 80)
URL da página inicialhttp://localhost:5173http://YOUR_SERVER_IP
URL de callbackhttp://localhost:3001/auth/github/callbackhttp://YOUR_SERVER_IP/auth/github/callback

O callback deve corresponder a PUBLIC_URL.

docker compose up -d postgres redis
pnpm install
pnpm --filter @vaultmcp/shared build
pnpm db:generate   # first time / after schema changes
pnpm db:migrate
pnpm dev:api       # :3001
pnpm dev:web       # :5173

Abra http://localhost:5173 → entre → crie um workspace → adicione segredos → registre um upstream (exemplo da AWS). Upstreams AWS uvx executados no host precisam de uv no seu PATH.

Docker Compose

Um único ponto de entrada público na porta 80. API e web não são publicados diretamente.

cp .env.example .env
# Set PUBLIC_URL, WEB_ORIGIN, GITHUB_*, VAULT_MASTER_KEY
# VITE_API_URL=          # empty = same-origin
# COOKIE_SECURE=false    # true behind HTTPS

docker compose up --build
SuperfícieURL
Interface webhttp://localhost/
Healthhttp://localhost/health
MCPhttp://localhost/mcp
Descoberta OAuthhttp://localhost/.well-known/oauth-protected-resource

As migrações são executadas quando o contêiner da API inicia. Notas de produção: docs/DEPLOY.md.

Conecte o Cursor (ou qualquer cliente MCP)

Mesma estrutura de configuração para Cursor, Claude Desktop, VS Code, Windsurf, Zed e outros clientes MCP. Use OAuth (login no navegador) ou um token de acesso pessoal da aba Connect do painel. Nunca coloque segredos do provedor na configuração do cliente.

OAuth (hospedado)

{
  "mcpServers": {
    "vaultmcp": {
      "url": "https://vaultmcp.dev/mcp"
    }
  }
}

Token pessoal (vmcp_… da aba Connect)

{
  "mcpServers": {
    "vaultmcp": {
      "url": "https://vaultmcp.dev/mcp",
      "headers": {
        "Authorization": "Bearer vmcp_…"
      }
    }
  }
}

Self-host: substitua por https://YOUR_HOST/mcp. API local: http://localhost:3001/mcp.

Cursor: ~/.cursor/mcp.json ou .cursor/mcp.json. Outros clientes usam seu próprio caminho de configuração MCP.

Após a autenticação: list_workspaces → use_workspace → chame ferramentas com namespace (github__…, aws__…).

CLI de env local (opcional)

Para segredos compartilhados da equipe em aplicativos locais (não agentes MCP), use @vaultmcp-axiler/cli:

npx @vaultmcp-axiler/cli@latest login --token vmcp_… --url https://YOUR_HOST
npx @vaultmcp-axiler/cli@latest run -w your-slug -- npm run dev

Crie um PAT com o preset Runtime env (CLI) (somente escopo env). Tokens MCP e tokens de env não são intercambiáveis. Prefira run em vez de env para que os segredos permaneçam no processo filho.

Guia completo: docs/CLI.md.

Criptografia

Os valores dos segredos são criptografados em repouso com AES-256-GCM usando criptografia de envelope:

  • Cada workspace tem sua própria chave de criptografia de dados (DEK)
  • As DEKs são envolvidas por VAULT_MASTER_KEY (mantidas fora do banco de dados)
  • O GCM AAD vincula o texto cifrado ao workspaceId, para que blobs não possam ser trocados entre workspaces
  • A descriptografia acontece apenas no lado do servidor — para injeção upstream MCP ou exportação CLI opcional
  • Os nomes dos segredos e outros metadados não são criptografados (para que a interface possa listar e autorizar sem descriptografar)

Trate VAULT_MASTER_KEY como uma credencial raiz. Gire os segredos do provedor na interface sem alterar a configuração do IDE.

Além disso: listas de APIs e logs de auditoria nunca retornam valores em texto puro; visualizadores não podem invocar ferramentas com segredos nem exportar env de runtime.

Detalhes: docs/CRYPTO.md.

Estrutura do repositório

apps/api            Gateway, OAuth, REST, upstream proxy
apps/web            Control plane UI
packages/shared     Crypto helpers + shared schemas
packages/cli        Local env injection CLI
deploy/             Reverse proxy config
docs/               Deploy, CLI, and crypto guides
examples/           Upstream walkthroughs

Por que AGPL

O VaultMCP é frequentemente executado como um serviço de rede. Somente AGPL-3.0 significa que, se você o modificar e oferecer esse serviço por uma rede, deverá compartilhar o código-fonte correspondente. Isso mantém forks hospedados honestos, ao mesmo tempo que permite auto-hospedagem e contribuição.

Contribuindo

O VaultMCP é um projeto de código aberto da Axiler Labs. Adoraríamos ajuda da comunidade — issues e pull requests são muito bem-vindos, especialmente em relação a segurança, confiabilidade, documentação e compatibilidade MCP.

Formas de ajudar:

  • Abra uma issue para bugs ou ideias claras de recursos
  • Envie um pull request (alterações pequenas e focadas são mais fáceis de revisar)
  • Melhore a documentação e exemplos para upstreams comuns

Ao contribuir, você concorda que seu trabalho é licenciado sob somente AGPL-3.0, igual ao restante do repositório. Nunca envie segredos; use .env.example apenas para nomes de variáveis.

Saiba mais em vaultmcp.dev · Axiler Labs: axiler.com.

Licença

Copyright © 2026 Axiler Labs.

O VaultMCP é licenciado sob a GNU Affero General Public License v3.0 somente (AGPL-3.0-only).