MCP 服务器

PlainRouter

com.plainrouter/mcp
商业与运营 营销与广告 公开且可连接 MCP 2025-11-25

此 MCP 可以做什么

Inspects approved advertising accounts and first-party signal health, and proposes policy-gated Meta ad, creative, upload, budget, and status actions without directly executing spend changes.

dry_run_actions
Dry Run Actions
Preview policy decisions and execution diffs for a proposed Action batch without writing it.
只读 幂等
输入模式
{'type': 'object', 'required': ['actions', 'rationale', 'idempotency_key', 'evidence', 'target_source'], 'properties': {'actions': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['increase_budget'], 'type': 'string'}, 'params': {'type': 'object', 'required': ['new_daily_budget_minor'], 'properties': {'new_daily_budget_minor': {'type': 'integer', 'minimum': 1}}, 'additionalProperties': False}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'pattern': '^[0-9]+$', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['decrease_budget'], 'type': 'string'}, 'params': {'type': 'object', 'required': ['new_daily_budget_minor'], 'properties': {'new_daily_budget_minor': {'type': 'integer', 'minimum': 1}}, 'additionalProperties': False}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'pattern': '^[0-9]+$', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['pause'], 'type': 'string'}, 'params': {'type': 'object', 'additionalProperties': False}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'pattern': '^[0-9]+$', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['resume'], 'type': 'string'}, 'params': {'type': 'object', 'additionalProperties': False}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'pattern': '^[0-9]+$', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['replace_creative'], 'type': 'string'}, 'params': {'type': 'object'}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['shift_spend'], 'type': 'string'}, 'params': {'type': 'object'}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['rollback'], 'type': 'string'}, 'params': {'type': 'object'}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['create_campaign'], 'type': 'string'}, 'params': {'type': 'object'}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['create_ad_set'], 'type': 'string'}, 'params': {'type': 'object'}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['create_ad'], 'type': 'string'}, 'params': {'type': 'object'}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['upload_asset'], 'type': 'string'}, 'params': {'type': 'object', 'required': ['staged_asset_id', 'asset_type', 'filename', 'content_sha256'], 'properties': {'filename': {'type': 'string', 'maxLength': 255}, 'mime_type': {'type': ['string', 'null'], 'maxLength': 255}, 'asset_type': {'enum': ['image'], 'type': 'string'}, 'size_bytes': {'type': ['integer', 'null'], 'minimum': 1}, 'content_sha256': {'type': 'string', 'pattern': '^[a-f0-9]{64}$'}, 'staged_asset_id': {'type': 'string', 'pattern': '^stage_[a-f0-9]{40}$', 'maxLength': 255}}}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['adjust_budget'], 'type': 'string'}, 'params': {'type': 'object', 'required': ['new_daily_budget_minor'], 'properties': {'new_daily_budget_minor': {'type': 'integer', 'minimum': 1}}}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['set_status'], 'type': 'string'}, 'params': {'type': 'object', 'required': ['status'], 'properties': {'status': {'enum': ['active', 'paused'], 'type': 'string'}}}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['duplicate_ad_with_creative'], 'type': 'string'}, 'params': {'type': 'object', 'required': ['asset_id', 'status'], 'properties': {'status': {'enum': ['paused'], 'type': 'string'}, 'asset_id': {'type': 'string', 'pattern': '^(image|video):.+$', 'maxLength': 255}, 'name_suffix': {'type': ['string', 'null'], 'maxLength': 100}}}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}]}, 'maxItems': 25, 'minItems': 1}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['source_tool', 'fields_used'], 'properties': {'fields_used': {'type': 'array', 'items': {'type': 'string', 'maxLength': 255}, 'maxItems': 50, 'minItems': 1}, 'source_tool': {'enum': ['get_account_state', 'get_signal_health', 'get_performance', 'get-creative-library', 'staged-asset-manifest'], 'type': 'string'}, 'action_index': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}, 'maxItems': 3, 'minItems': 1}, 'rationale': {'type': 'string', 'maxLength': 4000}, 'account_id': {'type': 'integer', 'minimum': 1}, 'target_source': {'enum': ['human_supplied'], 'type': 'string'}, 'idempotency_key': {'type': 'string', 'maxLength': 64}}}
get_account_inventory
Get Account Inventory
Read the authorized workspace account inventory from the Meta mirror, with optional level, status, parent, and ID cursor filters.
只读 幂等
输入模式
{'type': 'object', 'required': ['account_id'], 'properties': {'level': {'enum': ['campaign', 'adset', 'ad'], 'type': 'string', 'description': 'Limit results to campaign, adset, or ad objects.'}, 'limit': {'type': 'integer', 'default': 100, 'maximum': 200, 'minimum': 1, 'description': 'Maximum objects to return, from 1 to 200.'}, 'adset_id': {'type': 'string', 'description': 'Filter to objects under this parent ad set ID.'}, 'after_id': {'type': 'integer', 'minimum': 1, 'description': 'Database ID cursor from the previous page; continue with its last object ID.'}, 'account_id': {'type': 'integer', 'minimum': 1, 'description': 'Advertising account ID available to the authorized workspace.'}, 'campaign_id': {'type': 'string', 'description': 'Filter to objects under this parent campaign ID.'}, 'effective_status': {'type': 'string', 'description': 'Filter by Meta effective status, such as ACTIVE, PAUSED, or ARCHIVED.'}}}
get_account_state
Get Account State
Return the authorized advertising account, workspace, connection, Signal destination, and currently available account capabilities. This read-only inspection tool does not change the account.
只读 幂等
输入模式
{'type': 'object', 'properties': {'account_id': {'type': 'integer', 'minimum': 1, 'description': 'Advertising account ID. Signals reads use the workspace Meta destination when omitted; other tools may require an ID when multiple accounts are active.'}}}
get_action
Get Action
Get one proposed action for the authorized workspace and advertising account.
只读 幂等
输入模式
{'type': 'object', 'required': ['action_id'], 'properties': {'action_id': {'type': 'string'}, 'account_id': {'type': 'integer', 'minimum': 1, 'description': 'Advertising account ID. Signals reads use the workspace Meta destination when omitted; other tools may require an ID when multiple accounts are active.'}}}
输出模式
{'type': 'object', 'required': ['data'], 'properties': {'data': {'type': 'object', 'required': ['batch_status', 'disposition'], 'properties': {'disposition': {'type': 'object', 'required': ['receipt_status', 'outcome_status', 'outcome_reason_code', 'outcome_checked_at', 'compensation_reason_code', 'recovery_disposition', 'late_restored'], 'properties': {'late_restored': {'type': 'boolean'}, 'outcome_status': {'enum': ['measurable', 'not_measurable', 'unavailable', None], 'type': ['string', 'null']}, 'receipt_status': {'enum': ['pending', 'attempting', 'reconciliation_required', 'committed', 'executed_pending_verification', 'measuring', 'verified', 'compensating', 'compensated', 'compensation_failed', 'irreversible', 'failed', 'reconciliation_exhausted', None], 'type': ['string', 'null']}, 'outcome_checked_at': {'type': ['string', 'null']}, 'outcome_reason_code': {'type': ['string', 'null']}, 'recovery_disposition': {'enum': ['no_compensation', 'restored', 'unrestored', 'contradictory', 'irreversible', 'uncertain', None], 'type': ['string', 'null']}, 'compensation_reason_code': {'type': ['string', 'null']}}}, 'batch_status': {'enum': ['pending', 'approved', 'approved_without_execution', 'auto_approved', 'rejected', 'executing', 'executed_pending_verification', 'compensating', 'measuring', 'completed', 'failed', 'rolled_back', 'rollback_incomplete', 'blocked', 'halted'], 'type': 'string'}}}}}
get_action_batch
Get Action Batch
Get a proposed action batch for the authorized workspace and advertising account.
只读 幂等
输入模式
{'type': 'object', 'required': ['batch_id'], 'properties': {'batch_id': {'type': 'string'}, 'account_id': {'type': 'integer', 'minimum': 1, 'description': 'Advertising account ID. Signals reads use the workspace Meta destination when omitted; other tools may require an ID when multiple accounts are active.'}}}
输出模式
{'type': 'object', 'required': ['data'], 'properties': {'data': {'type': 'object', 'required': ['batch_status', 'restoration_summary', 'actions'], 'properties': {'actions': {'type': 'array', 'items': {'type': 'object', 'required': ['batch_status', 'disposition'], 'properties': {'disposition': {'type': 'object', 'required': ['receipt_status', 'outcome_status', 'outcome_reason_code', 'outcome_checked_at', 'compensation_reason_code', 'recovery_disposition', 'late_restored'], 'properties': {'late_restored': {'type': 'boolean'}, 'outcome_status': {'enum': ['measurable', 'not_measurable', 'unavailable', None], 'type': ['string', 'null']}, 'receipt_status': {'enum': ['pending', 'attempting', 'reconciliation_required', 'committed', 'executed_pending_verification', 'measuring', 'verified', 'compensating', 'compensated', 'compensation_failed', 'irreversible', 'failed', 'reconciliation_exhausted', None], 'type': ['string', 'null']}, 'outcome_checked_at': {'type': ['string', 'null']}, 'outcome_reason_code': {'type': ['string', 'null']}, 'recovery_disposition': {'enum': ['no_compensation', 'restored', 'unrestored', 'contradictory', 'irreversible', 'uncertain', None], 'type': ['string', 'null']}, 'compensation_reason_code': {'type': ['string', 'null']}}}, 'batch_status': {'enum': ['pending', 'approved', 'approved_without_execution', 'auto_approved', 'rejected', 'executing', 'executed_pending_verification', 'compensating', 'measuring', 'completed', 'failed', 'rolled_back', 'rollback_incomplete', 'blocked', 'halted'], 'type': 'string'}}}}, 'batch_status': {'enum': ['pending', 'approved', 'approved_without_execution', 'auto_approved', 'rejected', 'executing', 'executed_pending_verification', 'compensating', 'measuring', 'completed', 'failed', 'rolled_back', 'rollback_incomplete', 'blocked', 'halted'], 'type': 'string'}, 'restoration_summary': {'enum': ['all_receipts_compensated_late', None], 'type': ['string', 'null']}}}}}
get_action_decision_receipt
Get Action Decision Receipt
Get the persisted decision receipt for an authorized proposed action.
只读 幂等
输入模式
{'type': 'object', 'required': ['action_id'], 'properties': {'action_id': {'type': 'string'}, 'account_id': {'type': 'integer', 'minimum': 1, 'description': 'Advertising account ID. Signals reads use the workspace Meta destination when omitted; other tools may require an ID when multiple accounts are active.'}}}
输出模式
{'type': 'object', 'required': ['document', 'document_sha256', 'chain_entry', 'disposition'], 'properties': {'document': {'type': 'object'}, 'chain_entry': {'type': 'object'}, 'disposition': {'type': 'object', 'required': ['receipt_status', 'outcome_status', 'outcome_reason_code', 'outcome_checked_at', 'compensation_reason_code', 'recovery_disposition', 'late_restored'], 'properties': {'late_restored': {'type': 'boolean'}, 'outcome_status': {'enum': ['measurable', 'not_measurable', 'unavailable', None], 'type': ['string', 'null']}, 'receipt_status': {'enum': ['pending', 'attempting', 'reconciliation_required', 'committed', 'executed_pending_verification', 'measuring', 'verified', 'compensating', 'compensated', 'compensation_failed', 'irreversible', 'failed', 'reconciliation_exhausted', None], 'type': ['string', 'null']}, 'outcome_checked_at': {'type': ['string', 'null']}, 'outcome_reason_code': {'type': ['string', 'null']}, 'recovery_disposition': {'enum': ['no_compensation', 'restored', 'unrestored', 'contradictory', 'irreversible', 'uncertain', None], 'type': ['string', 'null']}, 'compensation_reason_code': {'type': ['string', 'null']}}}, 'document_sha256': {'type': 'string'}}}
get_action_policy
Get Action Policy
Get the effective Actions policy for the authorized workspace without creating a policy row.
只读 幂等
输入模式
{'type': 'object', 'properties': {'account_id': {'type': 'integer', 'minimum': 1, 'description': 'Advertising account ID. Signals reads use the workspace Meta destination when omitted; other tools may require an ID when multiple accounts are active.'}}}
get-creative-library
Get Creative Library
Return Meta image and video assets with the ads and last-30-day performance historically associated with each asset.
只读 可访问外部资源
输入模式
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 25, 'maximum': 100, 'minimum': 1, 'description': 'Maximum assets returned per requested asset type.'}, 'cursor': {'type': 'string', 'description': 'Opaque Meta cursor returned by a previous call.'}, 'account_id': {'type': 'integer', 'minimum': 1, 'description': 'Advertising account ID. Required when the workspace has more than one active account.'}, 'asset_type': {'enum': ['all', 'image', 'video'], 'type': 'string', 'default': 'all', 'description': 'Limit results to images or videos. Defaults to all.'}}}
get_inventory_metrics
Get Inventory Metrics
Read daily metrics and optional change history from the Meta inventory mirror for the authorized workspace account.
只读 幂等
输入模式
{'type': 'object', 'required': ['account_id'], 'properties': {'ad_id': {'type': 'string', 'description': 'Limit metrics to this ad ID.'}, 'adset_id': {'type': 'string', 'description': 'Limit metrics to this ad set ID.'}, 'end_date': {'type': 'string', 'description': 'Inclusive end date in YYYY-MM-DD format.'}, 'account_id': {'type': 'integer', 'minimum': 1, 'description': 'Advertising account ID available to the authorized workspace.'}, 'start_date': {'type': 'string', 'description': 'Inclusive start date in YYYY-MM-DD format.'}, 'campaign_id': {'type': 'string', 'description': 'Limit metrics to this campaign ID.'}, 'include_changes': {'type': 'boolean', 'default': False, 'description': 'Include object change history within the effective date window.'}}}
get_performance
Get Performance
Admissible proposal evidence: reconciliation meta_reported is the existing Meta-reported conversions count compared with gateway_verified accepted conversions. The separate purchases block shows Meta-reported Purchase counts under the account attribution setting beside PlainRouter accepted server-side Purchase counts, with its completed account-local window start and end dates and no purchase gap or status. Includes stored daily Meta spend and delivery metrics. platform_claimed_clicks means Meta outbound clicks. Days before 2026-06-29, or not re-read by the daily sync since 2026-09-27, may still hold Meta link clicks or all clicks.
只读 幂等
输入模式
{'type': 'object', 'properties': {'days': {'type': 'integer', 'default': 7, 'maximum': 90, 'minimum': 1, 'description': 'Number of reporting days to compare, from 1 to 90.'}, 'account_id': {'type': 'integer', 'minimum': 1, 'description': 'Advertising account ID. Signals reads use the workspace Meta destination when omitted; other tools may require an ID when multiple accounts are active.'}}}
get_signal_health
Get Signal Health
Diagnostic view of first-party event flow, Meta delivery outcomes, match quality, and reconciliation gaps from Plainrouter stored measurements. Not admissible evidence for spend-affecting proposals. Does not call the Marketing API.
只读 幂等
输入模式
{'type': 'object', 'properties': {'days': {'enum': [7, 30, 90], 'type': 'integer', 'default': 7, 'maximum': 90, 'minimum': 7, 'description': 'Trailing window in days. One of 7, 30, 90.'}, 'months': {'enum': [12], 'type': 'integer', 'description': 'Trailing window of 12 calendar months, in place of days. Offered only where the workspace plan keeps that history and the workspace is set to keep it.'}, 'account_id': {'type': 'integer', 'minimum': 1, 'description': 'Advertising account ID. Signals reads use the workspace Meta destination when omitted; other tools may require an ID when multiple accounts are active.'}}}
launch.creatives.index
Index Creatives
List creatives in the workspace bound to the authenticated execution token.
只读 幂等
输入模式
{'type': 'object', 'properties': {'per_page': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Number of creatives to return per page.'}}}
list_actions
List Actions
List proposed actions for the authorized workspace and advertising account.
只读 幂等
输入模式
{'type': 'object', 'properties': {'page': {'type': 'integer', 'minimum': 1}, 'status': {'enum': ['pending', 'approved_without_execution', 'rejected', 'executing', 'executed_pending_verification', 'compensating', 'measuring', 'verified', 'failed', 'execution_uncertain', 'rolled_back', 'blocked'], 'type': 'string'}, 'account_id': {'type': 'integer', 'minimum': 1, 'description': 'Advertising account ID. Signals reads use the workspace Meta destination when omitted; other tools may require an ID when multiple accounts are active.'}}}
输出模式
{'type': 'object', 'required': ['data', 'meta'], 'properties': {'data': {'type': 'array', 'items': {'type': 'object', 'required': ['batch_status', 'disposition'], 'properties': {'disposition': {'type': 'object', 'required': ['receipt_status', 'outcome_status', 'outcome_reason_code', 'outcome_checked_at', 'compensation_reason_code', 'recovery_disposition', 'late_restored'], 'properties': {'late_restored': {'type': 'boolean'}, 'outcome_status': {'enum': ['measurable', 'not_measurable', 'unavailable', None], 'type': ['string', 'null']}, 'receipt_status': {'enum': ['pending', 'attempting', 'reconciliation_required', 'committed', 'executed_pending_verification', 'measuring', 'verified', 'compensating', 'compensated', 'compensation_failed', 'irreversible', 'failed', 'reconciliation_exhausted', None], 'type': ['string', 'null']}, 'outcome_checked_at': {'type': ['string', 'null']}, 'outcome_reason_code': {'type': ['string', 'null']}, 'recovery_disposition': {'enum': ['no_compensation', 'restored', 'unrestored', 'contradictory', 'irreversible', 'uncertain', None], 'type': ['string', 'null']}, 'compensation_reason_code': {'type': ['string', 'null']}}}, 'batch_status': {'enum': ['pending', 'approved', 'approved_without_execution', 'auto_approved', 'rejected', 'executing', 'executed_pending_verification', 'compensating', 'measuring', 'completed', 'failed', 'rolled_back', 'rollback_incomplete', 'blocked', 'halted'], 'type': 'string'}}}}, 'meta': {'type': 'object'}}}
propose-actions
Propose Actions
Propose a batch of budget, status, upload, or creative-duplication actions for the approved ad account. In Ask, every policy-allowed change waits for a person to approve it. In Full, policy-allowed changes run automatically. Rule violations are blocked and shown in the Inbox, and cannot be approved. The execution kill switch stops further writes and never undoes a landed change. Dispatch still requires a live grant, an account in the workspace, and no duplicate write. Legacy set_status and adjust_budget never run.
幂等
输入模式
{'type': 'object', 'required': ['actions', 'rationale', 'idempotency_key', 'evidence', 'target_source'], 'properties': {'actions': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['increase_budget'], 'type': 'string'}, 'params': {'type': 'object', 'required': ['new_daily_budget_minor'], 'properties': {'new_daily_budget_minor': {'type': 'integer', 'minimum': 1}}, 'additionalProperties': False}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'pattern': '^[0-9]+$', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['decrease_budget'], 'type': 'string'}, 'params': {'type': 'object', 'required': ['new_daily_budget_minor'], 'properties': {'new_daily_budget_minor': {'type': 'integer', 'minimum': 1}}, 'additionalProperties': False}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'pattern': '^[0-9]+$', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['pause'], 'type': 'string'}, 'params': {'type': 'object', 'additionalProperties': False}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'pattern': '^[0-9]+$', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['resume'], 'type': 'string'}, 'params': {'type': 'object', 'additionalProperties': False}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'pattern': '^[0-9]+$', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['replace_creative'], 'type': 'string'}, 'params': {'type': 'object'}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['shift_spend'], 'type': 'string'}, 'params': {'type': 'object'}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['rollback'], 'type': 'string'}, 'params': {'type': 'object'}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['create_campaign'], 'type': 'string'}, 'params': {'type': 'object'}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['create_ad_set'], 'type': 'string'}, 'params': {'type': 'object'}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['create_ad'], 'type': 'string'}, 'params': {'type': 'object'}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['upload_asset'], 'type': 'string'}, 'params': {'type': 'object', 'required': ['staged_asset_id', 'asset_type', 'filename', 'content_sha256'], 'properties': {'filename': {'type': 'string', 'maxLength': 255}, 'mime_type': {'type': ['string', 'null'], 'maxLength': 255}, 'asset_type': {'enum': ['image'], 'type': 'string'}, 'size_bytes': {'type': ['integer', 'null'], 'minimum': 1}, 'content_sha256': {'type': 'string', 'pattern': '^[a-f0-9]{64}$'}, 'staged_asset_id': {'type': 'string', 'pattern': '^stage_[a-f0-9]{40}$', 'maxLength': 255}}}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['adjust_budget'], 'type': 'string'}, 'params': {'type': 'object', 'required': ['new_daily_budget_minor'], 'properties': {'new_daily_budget_minor': {'type': 'integer', 'minimum': 1}}}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['set_status'], 'type': 'string'}, 'params': {'type': 'object', 'required': ['status'], 'properties': {'status': {'enum': ['active', 'paused'], 'type': 'string'}}}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}, {'type': 'object', 'required': ['type', 'target_entity', 'params', 'rationale'], 'properties': {'type': {'enum': ['duplicate_ad_with_creative'], 'type': 'string'}, 'params': {'type': 'object', 'required': ['asset_id', 'status'], 'properties': {'status': {'enum': ['paused'], 'type': 'string'}, 'asset_id': {'type': 'string', 'pattern': '^(image|video):.+$', 'maxLength': 255}, 'name_suffix': {'type': ['string', 'null'], 'maxLength': 100}}}, 'rationale': {'type': 'string', 'maxLength': 2000}, 'target_entity': {'type': 'object', 'required': ['type', 'id'], 'properties': {'id': {'type': 'string', 'maxLength': 128}, 'name': {'type': ['string', 'null'], 'maxLength': 255}, 'type': {'enum': ['ad_account', 'campaign', 'ad_set', 'ad'], 'type': 'string', 'maxLength': 64}}, 'additionalProperties': False}, 'idempotency_key': {'type': 'string', 'maxLength': 255}}}]}, 'maxItems': 25, 'minItems': 1}, 'evidence': {'type': 'array', 'items': {'type': 'object', 'required': ['source_tool', 'fields_used'], 'properties': {'fields_used': {'type': 'array', 'items': {'type': 'string', 'maxLength': 255}, 'maxItems': 50, 'minItems': 1}, 'source_tool': {'enum': ['get_account_state', 'get_signal_health', 'get_performance', 'get-creative-library', 'staged-asset-manifest'], 'type': 'string'}, 'action_index': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}, 'maxItems': 3, 'minItems': 1}, 'rationale': {'type': 'string', 'maxLength': 4000}, 'account_id': {'type': 'integer', 'minimum': 1}, 'target_source': {'enum': ['human_supplied'], 'type': 'string'}, 'idempotency_key': {'type': 'string', 'maxLength': 64}}}
verify_signal_ingestion
Verify Signal Ingestion
Verify server-side Signal ingestion by writing one idempotent, identity-free modeled event for the authorized workspace. This confirms ledger receipt but does not count as real arrival evidence or complete onboarding. No spend capability.
幂等
输入模式
{'type': 'object', 'properties': {}}
已移除
launch.creatives.store
2026年10月1日 02:54
已移除
launch.creatives.show
2026年10月1日 02:54
已更改
propose-actions
2026年10月1日 02:54
已添加
get_inventory_metrics
2026年10月1日 02:54
已添加
get_account_inventory
2026年10月1日 02:54
已更改
get_account_state
2026年10月1日 02:54
已移除
upload-asset
2026年9月29日 03:03
已移除
show_spend_cap_approval
2026年9月29日 03:03
已移除
duplicate-ad-with-creative
2026年9月29日 03:03
已添加
launch.creatives.store
2026年9月29日 03:03
已添加
launch.creatives.show
2026年9月29日 03:03
已添加
launch.creatives.index
2026年9月29日 03:03
已更改
get_action_policy
2026年9月29日 03:03
已更改
get_action_decision_receipt
2026年9月29日 03:03
已更改
get_action
2026年9月29日 03:03
已更改
get_action_batch
2026年9月29日 03:03
已更改
list_actions
2026年9月29日 03:03
已更改
propose-actions
2026年9月29日 03:03
已更改
get_performance
2026年9月29日 03:03
已更改
get_signal_health
2026年9月29日 03:03
已更改
get_account_state
2026年9月29日 03:03
已移除
revoke_grant
2026年9月27日 02:53
已添加
dry_run_actions
2026年9月27日 02:53
已更改
get_signal_health
2026年9月27日 02:53
已移除
get_install_instructions
2026年9月25日 03:03
已移除
get_arrivals_comparison
2026年9月25日 03:03
已添加
get_action_policy
2026年9月25日 03:03
已添加
get_action_decision_receipt
2026年9月25日 03:03
已添加
get_action
2026年9月25日 03:03
已添加
get_action_batch
2026年9月25日 03:03