AI 에이전트와 시크릿을 안전하게 공유하는 방법
작성자 Maxim Novak
Claude에게 서버 설정을 도와달라고 할 때 — 비밀번호는 어디로 가는 걸까?
채팅에 직접 입력하면 — "내 데이터베이스 비밀번호야: ..." — 대화 기록에 남는다. 모델의 컨텍스트에도 들어간다. AI 제공자의 서버에 저장될 수도 있다. 한 번만 쓸 API 키라도, 이렇게 공유하는 것 자체보다 피해 범위가 더 커진다.
개발자들은 이미 AI 어시스턴트를 활용해 인프라를 구성하고, 배포를 디버깅하고, 자격 증명을 교체하고 있다. 빠진 부분은 안전한 전달 계층 — 시크릿을 LLM 컨텍스트에서 격리하면서도 에이전트가 그것을 활용할 수 있게 해주는 무언가다.
그것이 바로 Vaulted MCP 서버가 하는 일이다.
이게 뭔가요
Vaulted MCP 서버(@vaulted/mcp-server)는 Model Context Protocol 서버로, AI 어시스턴트에게 암호화된 시크릿을 다루는 네 가지 도구를 제공한다:
| 도구 | 하는 일 |
|---|---|
create_secret | 시크릿을 암호화해서 저장하고, 공유 가능한 일회성 링크를 반환한다 |
view_secret | Vaulted URL에서 시크릿을 가져와 복호화한다 |
check_status | 시크릿이 존재하는지, 남은 조회 횟수가 얼마인지 확인한다 (조회 횟수 소모 없음) |
list_secrets | 로컬에서 추적 중인 시크릿과 현재 상태를 보여준다 |
Claude Desktop, Cursor, Windsurf, 그리고 모든 stdio MCP 클라이언트에서 작동한다. 설치는 설정 블록 하나로 끝난다.
에이전트 블라인드의 차별점
대부분의 개발자가 예상하지 못하는 기능: 에이전트에게 시크릿 값을 직접 전달하지 않아도 된다.
Vaulted MCP는 에이전트 블라인드 입력 소스를 지원한다. 원시 값 대신 참조를 전달한다:
env:STRIPE_KEY— 환경 변수에서 값을 읽는다file:/path/to/api-key.txt— 파일에서 읽는다dotenv:.env.local:DATABASE_URL—.env파일에서 특정 키를 읽는다
MCP 서버가 참조를 서버 측에서 해석한다 (로컬, 터미널 프로세스 안에서). 해석된 값은 즉시 암호화되고 LLM 컨텍스트에 절대 진입하지 않는다. 에이전트는 자격 증명을 한 번도 보지 않고 작업을 완료한다.
따라서 이렇게 하는 대신:
"내 Stripe 키 공유해줘: sk_live_abc123..."
이렇게 말한다:
"내 STRIPE_KEY 환경 변수를 안전하게 공유해줘"
에이전트가 env:STRIPE_KEY를 create_secret에 전달한다. 키는 대화에 절대 나타나지 않는다.
이것이 "에이전트 블라인드"의 의미다: 에이전트가 시크릿이 컨텍스트 창을 통과하지 않고도 워크플로를 처리한다.
제로 지식 암호화
기반 암호화는 Vaulted 웹 앱과 CLI에서 사용하는 것과 동일한 AES-256-GCM이다. 암호화 키는 URL 프래그먼트에만 존재하며 — Vaulted 서버로는 절대 전송되지 않는다. 수신자가 링크를 열면 브라우저가 로컬에서 복호화한다.
서버는 자신이 복호화할 수 없는 사이퍼텍스트를 저장한다. AI 어시스턴트는 평문을 볼 수 없다. Vaulted API도 평문을 볼 수 없다. 링크를 가진 사람만 읽을 수 있다.
시작하기
Claude Desktop의 설정 파일(~/Library/Application Support/Claude/claude_desktop_config.json)에 Vaulted를 추가한다:
{
"mcpServers": {
"vaulted": {
"command": "npx",
"args": ["-y", "@vaulted/mcp-server"]
}
}
}
동일한 설정 형식이 Cursor(~/.cursor/mcp.json)와 Windsurf(~/.codeium/windsurf/mcp_config.json)에서도 작동한다.
AI 클라이언트를 재시작하면 네 가지 도구를 바로 사용할 수 있다. 계정 가입 불필요.
실제 예시
API 키 직접 공유:
"이거 안전하게 공유해줘: sk-abc123"
에이전트가 해당 값으로 create_secret을 호출한다. Slack이나 이메일로 보낼 수 있는 Vaulted 링크가 반환된다.
환경 변수에서 공유:
"내 STRIPE_KEY 환경 변수를 안전하게 공유해줘"
에이전트가 env:STRIPE_KEY로 create_secret을 호출한다. 실제 키 값은 대화에 절대 나타나지 않는다.
클립보드로 가져오기:
"그 시크릿을 내 클립보드로 가져와줘"
에이전트가 출력 모드 clipboard로 view_secret을 호출한다. 복호화된 값이 터미널에 출력되지 않고 클립보드로 바로 전달된다.
시크릿이 조회됐는지 확인:
"내 시크릿이 아직 조회됐나?"
에이전트가 check_status를 호출한다. 조회 횟수를 소모하지 않고 남은 횟수를 확인할 수 있다.
내부 동작
npx @vaulted/mcp-server를 실행하면 MCP stdio 전송 방식으로 통신하는 로컬 프로세스가 시작된다. AI 클라이언트는 다른 MCP 서버와 동일하게 연결된다.
에이전트 블라인드 소스의 경우, 서버가 암호화 전에 로컬 환경(환경 변수, 파일, .env 키)에서 값을 읽는다. 값은 암호화되지 않은 상태로 로컬 프로세스를 절대 벗어나지 않는다. 웹 앱을 사용한 것과 동일하게 사이퍼텍스트로 Vaulted API에 전송된다.
시크릿은 자동 파기된다: 조회 횟수 제한(1, 3, 5, 또는 10회)과 만료 시간(1시간~30일)을 설정할 수 있다. 제한에 도달하면 서버에서 사이퍼텍스트가 삭제된다.
패턴은 단순하다: 설정 블록 하나를 추가하면, AI 어시스턴트가 자격 증명을 한 번도 보지 않고도 책임감 있게 처리할 수 있게 된다.