
Ed25519 서명된 영수증 + AI 에이전트를 위한 Cedar 정책. 금융 위임 게이트(Legate), 증명 팩, 3개의 IETF 인터넷 초안. npx protect-mcp
AI 에이전트 도구 호출을 위한 fail-closed Cedar 정책 게이트와 서명된 영수증.
protect-mcp는 AI 에이전트의 도구 호출 앞에 위치하는 게이트입니다. 각 호출을
Cedar 정책에 따라 평가하고,
규칙을 위반하는 호출이 실행되기 전에 차단하며, 모든 결정에 대해
오프라인에서 검증 가능한 Ed25519 영수증에 서명합니다. 구성된 게이트웨이는 로컬에서 실행되며 어떠한 결정 텔레메트리도 전송하지 않습니다.
별도의 coordination 어댑터는 ScopeBlind의 호스팅 협업 서비스에 연결되며,
그 요청과 반환되는 레코드는 아래에 설명된 데이터 경로를 따릅니다. 둘 다
MIT 라이선스입니다.
공유 저장소 작업의 경우 클라이언트 프로젝트를 사용하세요: 사람들이 브리프와 제한에 합의하고, 에이전트가 리뷰를 준비하며, 소유자의 리시버가 저장소를 변경할 수 있기 전에 양측이 정확한 버전을 승인합니다. 아래의 저장소 워크플로에는 설정과 다섯 가지 제한된 에이전트 도구가 포함되어 있습니다.
would_deny: true로 표시되므로
실패가 결코 조용히 일어나지 않습니다.serve --enforce와 doctor는 시작 시
자체 테스트를 실행하며, 알려진 금지 행동이 실제로 거부됨을 입증할 수 없으면
게이트를 무장시키기를 거부합니다. 거부를 증명할 수 없는 게이트는 시작하지 않습니다.@veritasacta/verify로 오프라인에서 검증 가능합니다.
서명 검증에는 네트워크 조회가 필요하지 않습니다. 실행에 관한 주장은 여전히
식별된 게이트 운영자에 의존합니다.# 1. Generate an Ed25519 keypair, config template, and sample policy.
npx protect-mcp init
# 2. Print a shadow-mode client configuration, then apply it in your MCP host.
# This command prints configuration and exits; it does not launch the server.
npx protect-mcp wrap -- node your-mcp-server.js
# 3. Reopen the host and use its tools, then inspect the local-only dashboard.
npx protect-mcp dashboard --open
# 4. Draft a reviewable policy from observed calls.
npx protect-mcp recommend --write
# 5. When reviewed, restart the wrapper in enforce mode with that policy.
npx protect-mcp --policy protect-mcp.recommended.json --enforce -- node your-mcp-server.js
Claude Desktop의 경우, 먼저 dry-run 구성 패치를 실행한 다음 적용하세요:
npx protect-mcp wrap --claude-desktop
npx protect-mcp wrap --claude-desktop --write
npx protect-mcp dashboard --open
대시보드는 127.0.0.1에 바인딩되며, 로컬 로그/영수증 파일만 읽고, 아무것도 업로드하지 않습니다. 호스팅된 ScopeBlind 대시보드를 명시적으로 원할 경우에만 npx protect-mcp connect를 사용하세요.
Claude Code 훅을 연결하는 대신 게이트를 도구로 호출하고 싶다면, MCP 서버로 실행하세요:
npx protect-mcp mcp
MCP를 stdio를 통해 사용하며, 전체 루프를 구성하는 네 가지 읽기 전용 도구를 노출합니다:
evaluate_action: 제안된 도구 호출을 인라인 Cedar 정책에 따라 판정하며, fail-closed 방식입니다(모든 정책 오류는 DENY). { allowed, decision, reason, policy_digest }를 반환합니다.sign_decision: 판정을 Ed25519 서명된 영수증으로 변환합니다(거부는 gateway_restraint에 서명하고, 허용은 decision_receipt에 서명합니다). 영수증과 해당 공개 키를 반환하며, 키를 제공하지 않으면 임시 키를 생성합니다.verify_receipt: 서명된 영수증을 공개 키에 대해 오프라인으로 검증합니다. { valid, error, type, kid, issuer }를 반환합니다.self_test: 입력 없이 스스로를 증명합니다. 알려진 금지 동작이 거부된 다음, 서명된 영수증이 왕복 검증되고 변조된 사본은 실패합니다.MCP 호스트를 여기에 연결하세요. 예를 들어 Claude Desktop:
{
"mcpServers": {
"protect-mcp": { "command": "npx", "args": ["-y", "protect-mcp", "mcp"] }
}
}
영수증은 게이트가 런타임에 서명하는 것과 바이트 호환되므로, 여기서 발행된 영수증은 동일한 Acta 봉투를 사용합니다. 검증 기능과 정규화 호환성은 검증기 버전에 따라 달라집니다. 아래에 설명된 적합성 동작에는 게이트웨이의 verifyReceipt API를 사용하십시오.
이 소스 트리는 0.14.0까지 존재하던 정수 키 정렬 결함을 수정합니다: 서명과 체인 해시는 이제 게이트웨이의 ASCII 객체 키 프로필을 유지하면서 직접 JCS 멤버 방출을 사용합니다. "10"과 같이 숫자처럼 보이는 키는 중첩 객체 내부를 포함하여 "2"보다 앞에 옵니다. 비JSON 값과 잘못된 유니코드는 거부됩니다.
인코딩이 변경되지 않은 일반 JSON 영수증은 계속 검증됩니다. 이전 숫자 키 순서로 서명된 과거 영수증은 legacy_non_jcs_signature로 보고되며, 엄격한 검증은 이를 유효한 JCS로 간주하지 않습니다. 명시적인 과거 호환성 검사를 위해서는 verifyReceipt(receipt, publicKey, { allowLegacyNumericKeys: true })를 사용하고 canonicalization 및 warning 필드를 확인하십시오. 이때 hash는 원래의 과거 해시입니다. 원본 영수증과 체인 링크를 보존하십시오: receiptHash로 이전 숫자 키 영수증을 다시 계산하면 이제 JCS 해시가 생성되어 과거 체인이 깨질 수 있습니다. 이러한 변경 사항은 0.15.0에 포함되어 있습니다.
버전 0.25.0에는 재사용 가능한 에이전트 프로필이 포함되어 있습니다. 서비스에 표시된 권한 키와 함께 설정 명령을 확인하려면 에이전트를 통해 시작을 여십시오. 연결하기 전에 신뢰할 수 있는 출처와 해당 키를 대조하십시오. 예를 들어:
npx --yes [email protected] coordination agent setup \
--client claude-code \
--profile ~/.scopeblind/agent.json \
--endpoint https://scopeblind.com/api/coordination \
--authority-key PINNED_64_HEX_AUTHORITY_KEY
--client codex 또는 --client json을 사용하여 해당 등록 지침을 따르세요.
설정은 구성을 출력합니다. 클라이언트에 적용한 후 해당 클라이언트를 다시 여세요.
비공개 프로필은 에이전트 키와 별도로 범위가 지정된 연결을 보유하며,
파일 권한은 600입니다. 설정은 어떤 작업 권한도 부여하지 않고 어떤 사람의
브라우저 키도 복사하지 않습니다. 등록된 서버는 coordination agent --profile FILE을 실행합니다.
에이전트에게 검토용 공유 인보이스 작업을 준비하도록 요청하세요. 도구 흐름은 다음과 같습니다:
coordination.prepare_task({request_id, draft})는 서명되지 않은 초안을 저장하고
당신을 위한 비공개 검토 링크를 반환합니다. 재시도할 때 동일한 request_id를
유지하세요. 초안에는 제목, 목표, 그리고 선택적 제안 한도,
가정, 비공개 기본 설정이 포함됩니다. 이는 어떤 룸이나 인간 권한도 생성하지 않습니다.coordination.inspect_task_request({request_id})가 해당 검토를 확인합니다.
coordination.claim_task_connection({request_id})가 정확히 승인된
부여를 청구하고 connection_id를 반환합니다. 그런 다음 제안하거나 테스트하기 전에
coordination.inspect_negotiation({connection_id})를 호출하세요.coordination.check_handoffs({connection_id})가 해당 승인을 발견합니다;
coordination.claim_execution_connection({connection_id, handoff_id})가
새 실행 연결을 저장합니다. 결제를 제출하기 전에 반환된 connection_id를
검사하세요. 협상 토큰은 결코 결제 토큰이 되지 않습니다.프로필의 모든 범위 지정 도구는 명시적 connection_id를 요구합니다. 자격 증명 없이
저장된 연결을 나열하려면 coordination.connections를 사용하세요. 프로필은
청구 전에 토큰을 보존하므로 불확실한 응답을 동일한 ID로 복구할 수 있습니다.
초기 페어링 창은 최대 10분 동안 지속됩니다. 해당 창이나 부여가 만료되면,
원래 사람이 현재 한도 내에서 동일한 프로필을 명시적으로 다시 연결해야 합니다.
프로필이 없으면 새로 승인을 받아야 합니다.
프로필은 최대 50개의 요청과 50개의 연결을 보유합니다. 비공개로 유지하세요.
아래의 기존 단일 룸 연결은 여전히 작동합니다. 프로필을 설정한 후
coordination agent import --profile FILE --config OLD_PRIVATE_CONFIG로
가져오세요. 가져오기는 범위를 보존하며 이전 페어링에서 폐기된 비공개 에이전트 키를
재구성할 수 없습니다. 해당 연결은 동일 키 실행 핸드오프를 청구할 수 없습니다.
초안 텍스트와 비공개 지침은 ScopeBlind로 전송됩니다. 에이전트의 모델 제공자는 도구 결과를 받을 수 있으며, 여기에는 자신이 승인한 비공개 브리핑도 포함됩니다. 호스팅된 어시스턴트는 자체 주체의 브리핑과 공유 기록을 받습니다. 프로필 설정이나 중지된 클라이언트 어느 것도 백그라운드 에이전트나 모델을 실행하지 않습니다.
원래 승인된 브라우저의 작업에서 다른 기기에서 계속을 선택하세요. 휴대폰에서 해당 링크를 열거나 스캔하고, 접근을 요청하고, 두 기기에 표시된 코드를 비교하세요. 원래 브라우저가 정확한 휴대폰 키, 룸, 권한, 만료에 서명합니다. 링크나 QR 코드만으로는 어떤 권한도 부여되지 않습니다. 각 기기는 자체 비공개 서명 키를 보유합니다.
접근은 최대 7일 또는 작업의 만료까지 지속됩니다. 선택한 범위와 해당 사람의 기존 역할에 따라, 휴대폰은 작업을 검사하고, 정확한 결제를 승인하거나 거부하고, 정확한 결과에 대한 변경을 수락하거나 요청하고, 자체 협상 위임 또는 정확히 테스트된 계획 결정에 서명할 수 있습니다. 작업을 생성하거나, 사람이나 에이전트를 초대하거나, 호스팅된 모델을 시작하거나, 규칙을 채택하거나, 결제를 실행하거나, 다른 기기에 위임할 수는 없습니다. 향후 합의 및 검토자 역할 서명은 해당 정확히 공동 검토된 제안 내에서만 허용됩니다. 이는 휴대폰 접근을 새 작업으로 이어가지 않습니다.
원래 브라우저 또는 연결된 기기가 해당 기기의 접근을 취소할 수 있습니다. 취소는 새 작업을 차단하지만, 유효한 이전 결정을 지우지는 않습니다. 증거는 실제 기기 서명자, 원래 주체의 서명된 승인, 그리고 서비스의 서명된 승인 사용 영수증을 보존합니다. 이식 가능한 협상, 결과, 리허설 검증은 필요한 계보를 확인합니다. 이러한 서명은 키를 식별하며, 검증된 실제 신원을 식별하지 않습니다.
귀하의 결정은 이 기기로 인증된 현재 작업을 읽습니다. 항목을 열면 현재 요청을 다시 확인합니다. 만료되거나 대체된 결정은 변경된 결제나 결과를 승인할 수 없습니다. 선택적 브라우저 알림에는 작업 세부 정보나 자격 증명이 포함되지 않으며, 이 받은편지함을 열고, 결코 작업을 승인하거나 외부 에이전트를 깨우지 않습니다. 전달은 브라우저, 운영 체제, 호스트 구성에 따라 달라집니다. iPhone 또는 iPad에서는 ScopeBlind를 홈 화면에 추가하고, 해당 앱의 기기 키를 연결하고, 거기에서 알림을 활성화하세요. 알림은 작업 권한을 변경하지 않고 끌 수 있습니다.