{"serverId":"mcp-registry/com.botrecipe/approve","tools":[{"name":"check_action","fixed":{"name":"check_action","description":"Before a consequential action, ask whether the user's rules auto-approve it. Returns auto_approve, needs_approval (with a plain-English approval card and a link the user can tap) or deny. Free plan is watch-only: it reports what it WOULD decide and logs it for the weekly report, but nothing counts as approved, so ask your user as you normally would.","inputSchema":{"type":"object","required":["action"],"properties":{"action":{"type":"object","required":["type","summary"],"properties":{"type":{"type":"string","description":"Short verb: read, search, draft, send_email, send_message, post, purchase, payment, delete, deploy, change_settings, ..."},"target":{"type":"string","description":"Who or what it touches: a recipient email, domain, file, repo."},"summary":{"type":"string","description":"One plain sentence of what will happen, e.g. \"Buy a $3.99 domain renewal for example.com\"."},"amount_usd":{"type":"number","description":"Money involved, if any."},"reversible":{"type":"boolean","description":"Can it be undone easily?"}},"description":"The action your agent wants to take."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":315,"tokensAfter":315},{"name":"get_decision","fixed":{"name":"get_decision","description":"Check whether the user approved or rejected an approval card (by card_id and card_token). Only act when status is approved.","inputSchema":{"type":"object","required":["card_id","card_token"],"properties":{"card_id":{"type":"string"},"card_token":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"get_rules","fixed":{"name":"get_rules","description":"Show the rules in effect for your key (or the default starter rules).","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":43,"tokensAfter":43},{"name":"set_rules","fixed":{"name":"set_rules","description":"Save the user's rules (needs an API key so they stay yours). Each rule: {name, when:{type:[...], max_usd, min_usd, reversible, target_ends_with:[...]}, verdict:\"auto\"|\"ask\"|\"deny\"}. First matching rule wins; anything unmatched needs approval. Call once without confirm to preview, then with confirm=true.","inputSchema":{"type":"object","required":["rules"],"properties":{"rules":{"type":"array","items":{"type":"object"}},"confirm":{"type":"boolean"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":138,"tokensAfter":138}],"toolsChanged":4,"tokensSaved":0,"todo":[{"tool":"get_decision","params":["card_id","card_token"]},{"tool":"set_rules","params":["rules","confirm"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}