Veil
Veil
AI 에이전트가 자격 증명 값을 전혀 수신하지 않으면서도 자격 증명 배치를 조율할 수 있고, 신뢰할 수 있는 사람이 제어하는 인터페이스가 해당 자격 증명이 전송될 위치를 독립적으로 승인합니다.
이 문장이 전체 약속입니다. Veil은 MCP 서버와 안전한 입력 브로커를 결합한 것입니다. 에이전트가 "Stripe 프로덕션 키를 Google Secret Manager에 넣어" 라고 말하면, 사람은 정확히 어떤 프로젝트와 시크릿에 기록될지 보고 Veil 자체 창에 값을 입력하며, 값은 대상으로 직접 전송됩니다. 모델은 절대 값을 보유하지 않습니다.
SPEC.md에서 구현되었습니다.
Veil이 해결하는 문제
에이전트가 시크릿을 알고 있음으로 인해 발생하는 전체 오류 클래스를 제거합니다. Veil이 중재하면 자격 증명은 다음을 통과하지 않습니다:
LLM 프롬프트 또는 대화 기록
MCP 도구 인수 또는 도구 결과
에이전트 메모리 또는 생성된 코드
셸 명령 인수 또는 프로세스 argv
로그, 디버그 추적 또는 원격 측정
URL
모델이 볼 수 있는 명령 출력
Veil이 해결하지 않는 것
Veil은 AI 에이전트를 신뢰할 수 있게 만들지 않으며, "안전한 AI"도 아닙니다. 에이전트가 올바른 대상을 선택했는지, 사용자를 이해했는지, 프롬프트 인젝션이 없는지, 대상 자체가 안전한지, 사용자 머신이 손상되지 않았는지, 또는 자격 증명이 나중에 합법적으로 수신하는 소프트웨어에 의해 오용되지 않을 것인지를 보장하지 않습니다.
여기에는 두 가지 별개의 문제가 있습니다:
질문 | Veil의 답변 |
에이전트가 시크릿을 알아야 하는가? | 아니요. |
에이전트가 시크릿이 갈 곳을 혼자 결정해야 하는가? | 사람의 승인 없이는 안 됩니다. |
Veil은 이 두 가지에 답합니다. 나머지에 대한 답을 주장하지 않습니다.
신뢰 모델
Trusted with the credential value:
The human at the keyboard
Veil's secure input UI (loopback only, in your control)
Veil's secure input broker (this process)
The selected destination adapter
The destination provider (e.g. Google Secret Manager)
NOT trusted with the credential value:
The LLM
The agent / MCP client
The conversation
The prompt and any repository content it read
Generated code
Logs, telemetry, crash reports이 다이어그램은 신뢰된 구성 요소가 무적이라고 주장하지 않습니다. 자격 증명이 존재하도록 허용된 위치를 나타냅니다. Veil은 보안에 민감한 소프트웨어입니다. Veil 자체가 악의적이거나 손상되면 경계는 사라집니다. 그 소스, 종속성 및 릴리스는 자격 증명 처리 도구에 기대하는 수준의 조사를 받을 가치가 있습니다.
두 가지 흐름
시크릿 흐름 — 사람의 경로, 모델이 관찰할 수 없음:
Human ─▶ Veil secure UI (127.0.0.1) ─▶ Broker ─▶ Adapter ─▶ Destination에이전트 흐름 — 모델이 보는 모든 것:
LLM ─▶ MCP client ─▶ Veil MCP server ─▶ non-sensitive result metadataMCP 도구 스키마에는 자격 증명을 전달할 수 있는 속성이 없습니다. 이는 프롬프트 지시가 아닌 구조적인 것입니다. 남용할 수 있는 value, secret_value, password, token, content 또는 raw_secret 필드가 없으며, 닫힌 스키마는 알 수 없는 속성을 거부하고, 인수는 파싱되기 전에 자격 증명 형태의 값이 있는지 점검됩니다.
에이전트가 호출하는 것
{
"destination": "gcp-secret-manager",
"name": "STRIPE_SECRET_KEY",
"target": { "project": "my-production-project", "secret": "STRIPE_SECRET_KEY" },
"write_mode": "new-version",
"environment": "production",
"description": "Stripe production API key"
}Veil은 request_id, 위험 분류 및 정규화된 대상과 함께 응답하고 — 사용자 머신에서 자체 승인 창을 엽니다. 에이전트는 secret.status를 폴링합니다.
에이전트는 승인 링크를 받지 않습니다. 그 링크는 기능입니다. 링크를 보유한 모든 것이 사람의 흐름 절반을 완료할 수 있으며, 셸이나 HTTP 도구가 있는 에이전트가 바로 위협 모델입니다. Veil은 링크를 브라우저에 전달하고 자체 콘솔에 출력합니다. 설정에서 에이전트가 링크를 중계해야 하는 경우(예: 원격 또는 헤드리스 세션) VEIL_DISCLOSE_AUTHORIZATION_URL=true를 설정하십시오. 단, 이렇게 하면 손상된 에이전트가 자체 요청을 승인할 수 있다는 점을 이해해야 합니다.
도구 | 목적 |
| 자격 증명 요청 생성. 민감하지 않은 메타데이터와 요청 ID 반환. |
| 요청 폴링. 자격 증명 자료를 절대 반환하지 않음. |
| 보류 중인 요청 취소. 입력된 값은 모두 폐기됨. |
| 승인 무효화 및 새 승인 시작. 제자리 편집 없음. |
| 대상 및 각 대상이 예상하는 대상 필드 나열. |
사람이 보는 것
A 단계에서는 자격 증명 이름, 대상 제공자, 프로젝트/계정, 리소스, 작업 및 위험을 값이 입력되기 전에 보여줍니다. 고위험 작업(프로덕션 덮어쓰기, 일반 텍스트 저장, 애플리케이션 데이터베이스, 자격 증명 교체)은 B 단계에서, 입력 후 및 쓰기 전에 두 번째 확인이 필요합니다. 값은 절대 다시 표시되지 않습니다.
사람이 읽는 페이지와 실행자가 수행하는 작업은 동일한 불변 객체입니다. 별도의 "표시 대상"은 없습니다. 대상, 프로젝트, 시크릿 이름, 작업, 쓰기 모드 또는 어댑터를 변경하면 승인이 무효화되고 새 승인이 필요합니다.
지원되는 어댑터
어댑터 | 클래스 | 참고 |
|
| 권장. |
|
| 경로 제한, 심볼릭 링크 거부, 원자적 |
|
|
|
arbitrary-network 대상(일반 HTTP POST, 웹훅)은 구현되지 않았으며, 어댑터 레지스트리는 등록을 거부합니다.
보안 가정 및 제한 사항
자신을 과대 포장하는 보안 도구는 없는 것보다 나쁘기 때문에 명확히 설명합니다:
브로커 프로세스는 시크릿을 봅니다. 그것이 요점입니다. 무언가는 봐야 저장이 가능합니다. 최소한의 신뢰된 전송 및 대상 구성 요소만 본다는 것이 보장입니다.
CPython은 메모리를 안정적으로 지울 수 없습니다.
SecretBuffer는 소유한 가변 버퍼를 지우지만, 퍼센트 디코딩,str/bytes변환 및 제공자 SDK는 인터프리터가 GC까지 유지할 수 있는 불변 복사본을 만듭니다. Veil은 이를 최소화하고 이 보장을 조작하지 않습니다.UI는 루프백 HTTP입니다. 사용자 머신에서 사용자로 실행되는 모든 프로세스가 UI에 도달할 수 있으며, 그러한 프로세스는 UI를 모방할 수도 있습니다. 각 Veil 프로세스는 해당 페이지에 표시되는 무작위 식별 문구를 출력합니다(스푸핑 방지 지원, 암호화 제어는 아님). 에이전트로부터 링크를 숨기는 것은 기준을 높이는 것이지, Veil의 콘솔 출력을 읽거나, 브라우저의 argv를 나열하거나, 루프백 포트를 스캔할 수 있는 프로세스를 막지는 않습니다.
Veil은 대상을 감사하지 않습니다. Firestore 문서에 자격 증명을 승인하면 Veil은 거기에 쓰고 나쁜 생각이라고 알리지만, 막지는 않습니다.
사전 점검은 최선의 노력입니다. 사전 점검 시 제공자에 연결할 수 없으면 추측하는 대신 사용 불가로 보고됩니다.
충돌 의미론. 제공자 쓰기와 응답 사이에 충돌이 발생하면 성공에 대한 로컬 기록 없이 자격 증명이 기록될 수 있습니다. Veil은 요청을 실패로 보고하며, 대상이 진실 공급원입니다.
로컬 개발
uv venv
uv pip install -e ".[dev]"
# run the server the way an MCP client would
uv run veil serve
# with optional providers
uv pip install -e ".[dev,gcp,firestore]"구성은 Veil 자체 환경에서 읽습니다. 도구 인수에서는 절대 읽지 않습니다:
변수 | 기본값 | 의미 |
|
| 요청 만료 시간. |
|
| 단일 대상 쓰기의 상한. |
|
| 중간 위험 작업에 대해 확인 필요. |
|
| 보안 UI 바인드 주소. |
|
| 승인 창을 자동으로 엽니다. |
|
| 승인 링크를 에이전트에 반환합니다. |
| 현재 디렉토리 |
|
|
| Git 추적 env 파일에 쓰기 허용. |
| 모두 | 쉼표로 구분된 허용 목록. |
MCP 클라이언트 구성
{
"mcpServers": {
"veil": { "command": "uv", "args": ["run", "veil", "serve"] }
}
}테스트
uv run pytest # everything
uv run pytest tests/security # the adversarial suite only
uv run ruff check .
uv run mypy보안 제품군은 요구 사항이지 선택 사항이 아닙니다. 모든 관찰 가능한 채널에 걸친 카나리 누출 감지, 악의적인 에이전트 테스트, 프롬프트 인젝션 픽스처, TOCTOU 및 재생 테스트, 100방향 동시성 스트레스, 경쟁 조건, 충돌 경로, 제공자 실패 시뮬레이션, UI 검사 및 퍼징을 포함합니다. 카나리 누출, 승인 우회 성공, 승인 후 변이 성공, 완료된 요청 재생 가능, 시크릿이 요청 경계를 넘음, 원시 제공자 오류가 MCP에 도달함, 또는 고위험 작업이 확인을 건너뛰는 경우 릴리스가 차단됩니다.
불변성 대 테스트 맵은 docs/SECURITY_MODEL.md를 참조하십시오.
프로젝트 상태
버전 0.1.0, SPEC.md에 따라 구축되었으며, 이는 의도된 동작에 대한 권위 있는 설명으로 저장소에 남아 있습니다. 모든 주요 모듈과 테스트는 구현하는 섹션을 인용하므로, 검토자는 요약이 아닌 요구 사항에 대해 코드를 확인할 수 있습니다.
MVP가 완료되었으며 적대적 제품군을 포함한 전체 제품군이 통과합니다. 누군가가 실제로 의존하기 전에 남은 것은: 독립적인 검토, 확인 UI의 인간 요소 테스트(SPEC.md §35), 서명된 릴리스 아티팩트(§43)입니다.
기여
여기서 보안이 제품이므로 변경 기준은 관료적이기보다는 구체적입니다:
자격 증명 처리, 승인 또는 MCP 표면에 영향을 미치는 변경은 영향을 미치는 불변성을 깨뜨리려고 시도하는 테스트가 필요하며, 작동을 보여주는 테스트만으로는 충분하지 않습니다.
제품군을 통과시키기 위해 보안 테스트를 약화시키지 마십시오. 테스트가 아키텍처 결함을 드러내면 아키텍처가 변경됩니다.
핵심의 새로운 런타임 종속성은 기본적으로 반대합니다. 브로커는 자격 증명 자료에 대한 신뢰된 컴퓨팅 기반입니다. 제공자 SDK는 선택적 추가 기능 뒤에 있어야 합니다.
풀 리퀘스트를 열기 전에
ruff check .,ruff format --check .,mypy및pytest를 실행하십시오.
취약점을 발견하셨습니까? 공개 이슈를 여는 대신 GitHub의 보안 권고를 통해 비공개로 신고해 주십시오.
라이선스
Apache License 2.0 © 2026 Eduardo Rosostolato.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP-native Trust Infrastructure for AI Agents. Persistent encrypted memory with Trust Quotient.
Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rosostolato/veil-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server