Reporting → Conversion has no read-only setting, so on a key with MCP access at Full access, conversion access means the agent can change conversions. Give such a key MCP write access only if that is what you intend.
After an Everflow MCP release, or after changing a key’s MCP access, reconnect your client. Clients cache the tool list at connect time and validate arguments against it, so a long-lived session can still advertise retired actions, miss tools the key has just been given, and reject new arguments locally before the call reaches Everflow. See Staying current after a release.
The action parameter
Every write tool takes a required action naming the operation. manage_offer, manage_affiliate and manage_advertiser each accept one action, set_status; manage_conversion accepts four. The parameter is a discriminator, so these tools can gain further operations later without changing the meaning of any call you write today.
Arguments are validated per action, not per tool. An argument that is valid for one action is rejected for another: sending payout alongside action="set_status" returns INVALID_ARGUMENT naming the argument, rather than ignoring it. Combined with the unknown-argument rejection below, a malformed write fails loudly instead of applying a partial change.
These tools are annotated destructive, which is a hint to your MCP client. Some clients prompt the user before invoking one; others do not, and an auto-approving or headless agent will not prompt at all. Treat the prompt as a convenience, not a control: the server implements no approval handshake. The controls you can rely on are the key’s MCP access, its module permissions, the narrow set of actions, and the server-side audit trail.
Previewing a change with dry_run
Every write tool accepts an optional dry_run argument.
dry_run=true: runs every validation and existence check, then previews the change without persisting anything. The response carriespreview: trueand the current → new values so you can show the exact effect before applying.dry_runomitted orfalse: applies the change. For most conversion actions, “applies” means “submits”; see Propagation.
dry_run is a preview, not an approval gate: an automated caller can dry-run and immediately re-call. Use it to show the resolved change to a person before executing, and do that confirmation yourself rather than assuming your client will prompt.
dry_run must be a boolean. true and false, a number (0 is false, any other number is true) and the strings "true", "True", "TRUE", "t", "T", "1" and their false counterparts are accepted. Anything else ("yes", null, an array, an object) is rejected with INVALID_ARGUMENT, so the call fails rather than falling through to a real write.Dry-run preview (manage_offer, dry_run=true)
Execute (manage_offer, dry_run omitted)
Propagation: synchronous vs asynchronous
Propagation is not uniform, and for conversions this changes what a successful response means.- Offer and account status changes (
manage_offer,manage_affiliate,manage_advertiser) are synchronous: a successful response means the change is applied. - Conversion
set_notesis synchronous. - Conversion
set_status,set_payout_revenueandset_sale_amountare asynchronous. They are submitted to the same processing pipeline the Network API’s conversion endpoints use. A successful response means the request was accepted, not that the change is applied. The change is processed a few seconds later, and the pipeline runs further validation that can still reject or adjust it after the call returned success.
manage_conversion response carries two fields to make this explicit:
Async submit (manage_conversion, set_status, dry_run omitted)
set_status summary, conversions already at the requested status are counted in unchanged_count and left out of entity_count and the totals. When every conversion is already at the requested status, status_transition reads "No change". Amount changes are compared to six decimal places, so a sub-cent difference (1.494 → 1.49) shows as a change.
manage_offer
Changes an offer’s status. It does not edit caps, visibility, payout/revenue, targeting, URLs, names, or any other field, and it cannot create or delete offers. Editing an offer’s payout/revenue is not available through MCP: use the portal or the Network API. Parameters:
Action constraints:
dry_run=true previews the resolved change; it is not an approval gate, and neither is your client’s prompt, since some clients do not prompt at all. Confirm the resolved change with the user before re-calling without dry_run.manage_affiliate
Changes a partner’saccount_status. It does not edit other account fields and cannot create or delete accounts.
Parameters:
inactive is a soft turn-off (offboarding, dormant); suspended is a stronger, punitive state (violation, fraud). pending is an unapproved application handled by a separate approval flow: it cannot be set here, and a partner that is currently pending cannot be changed here either. Approve or reject it in the Everflow UI first.manage_advertiser
Changes an advertiser’saccount_status. Same shape as manage_affiliate.
Parameters:
An advertiser that is currently pending cannot be changed here: approve or reject it in the Everflow UI first.
manage_conversion
Updates existing conversions: approve or reject, adjust payout and revenue, set the sale amount, or edit notes. Most actions are asynchronous; see Propagation. Parameters:
Action constraints:
Amounts.
payout, revenue and sale_amount must be numbers below 10,000,000,000,000 in magnitude; a non-numeric value is rejected rather than written as 0. Negative amounts are accepted, except on networks configured to refuse them, where a negative value returns INVALID_ARGUMENT (payout and revenue cannot be negative on this network, or the sale_amount equivalent). Both checks also run on dry_run.
Do not change a conversion’s payout or revenue right after changing its status. While the status change is still queued, the approved-only check sees the old status. Re-read the conversion with
get_entity and confirm its status first.Passing more than 10 IDs returns
INVALID_ARGUMENT: Too many conversion_ids: N (max 10 per call). The limit is deliberately small: these writes are asynchronous with no confirmation channel, so it bounds how much a single call can change before it can be verified. A conversion ID that doesn’t exist, or that your key isn’t allowed to manage, returns NOT_FOUND. Validation is all-or-nothing: if any ID in the batch is missing or outside your scope, the whole call is rejected and nothing is submitted. Once validated, each conversion is submitted separately, so verify each one as described under Propagation. You can only act on conversions for partners you are allowed to manage.Errors
Write tools use the same structured error envelope as the read tools; see Error responses. The codes you’ll see most often here:Unknown arguments are rejected, not ignored. On a write tool, an unrecognized parameter name (
status instead of conversion_status) returns INVALID_ARGUMENT naming it and listing the valid parameters, with a did-you-mean suggestion when the name is a close misspelling (conversion_staus), so a typo can never take a default and corrupt the change. The allow-list is per action, so an argument belonging to a different action of the same tool is rejected the same way.