The request
{
"name": "wever_tool-exposure-check",
"arguments": {
"endpoints": [
{
"name": "GET /orders",
"operations": [
"read"
],
"exposed": true,
"via": "generated_from_spec"
},
{
"name": "DELETE /customers/{id}",
"operations": [
"delete",
"personal_data"
],
"exposed": true,
"via": "generated_from_spec"
},
{
"name": "POST /refunds",
"operations": [
"move_money"
],
"exposed": true,
"decision": {
"outcome": "expose_with_approval",
"decided_by": "TBD"
}
},
{
"name": "POST /admin/roles",
"operations": [
"admin"
],
"exposed": false,
"decision": {
"outcome": "withhold",
"decided_by": "Platform lead"
}
}
]
}
}What the report returns
Verdict: undecided_exposure.
| Undecided, bulk generated | DELETE /customers/{id} can delete and reach personal data. Agents can call it as a tool generated from an API description, with no recorded decision to expose it. |
|---|
| Decider, no decider | POST /refunds was exposed by a decision that names a placeholder as its decider. |
|---|
| Fix, DELETE /customers/{id} | Take DELETE /customers/{id} out of the generated toolset and expose it only by an explicit decision with a named decider. |
|---|
| Fix, POST /refunds | Record the named person or role who decided to expose POST /refunds. |
|---|
1 dangerous endpoint exposed to agents without a decision to expose it: DELETE /customers/{id}.
An API becomes an agent toolset by generating one tool per endpoint from its API description. The order read is harmless. The customer delete also arrived as a tool, and nobody decided it should. The refund endpoint was exposed by a decision whose decider reads TBD. Taking the delete out until a named person decides, and naming the refund decider, gives every dangerous tool a decision someone owns.