사전 검사 거부 처리하기
POLICY_REJECTED 오류를 정상적으로 처리하도록 에이전트 프롬프트를 설계하는 방법입니다.
에이전트가 정책을 위반하면 MCP 서버는 구조화된
ToolError를 반환합니다. 에이전트에게 복구 방법을 지시해야 합니다.사전 요구사항
- MCP ToolErrors에 대한 이해
사전 검사 사용
대규모 전송 전에 에이전트가
policy.preflight를 사용하도록 권장합니다. 이는 실제 전송 중의 강제 거부를 방지합니다.{
"agentId": "your-agent-id",
"to": "0xTarget",
"amount": "150"
} 오류 처리
transfer.send가 POLICY_REJECTED 오류를 반환하면 에이전트는 detail.reason과 suggestion 필드를 받습니다. detail.reason은 어긴 규칙을 알려 주고, suggestion은 policy.get과 policy.set을 안내합니다. 한도보다 큰 잔액을 소유자에게 돌려보내려면 agent.drain을 사용합니다. agent.drain은 잔액을 한도 이하의 전송으로 나누어 보냅니다.{
"ok": false,
"error": {
"code": "POLICY_REJECTED",
"message": "Policy rejected: Amount 150 OKRW exceeds spending limit 100 OKRW",
"detail": {
"agentId": "your-agent-id",
"to": "0xTarget",
"amount": "150",
"reason": "Amount 150 OKRW exceeds spending limit 100 OKRW"
},
"suggestion": "Call `policy.get` to see the current rules, then `policy.set` to adjust `spendingLimit` or `allowedTargets`.",
"retryable": false
}
} 팁: 시스템 프롬프트 지침을 추가합니다: '지출 한도로 인해 전송이 거부되면 전송을 한도 내에 맞는 더 작은 조각으로 분할합니다.'
마무리
구조화된 오류를 처리하면 에이전트는 사람의 개입 없이 정책 차단 상황에서 자율적으로 복구할 수 있습니다.