# Tools overview

47 tools are exposed — 32 read-only and 15 that write.
This list is generated from the registry, so it matches what `tools/list` returns exactly.

An MCP `tools/call` envelope is `{ "name": "<tool>", "arguments": { … } }`; `arguments` may be
omitted or null (treated as `{}`). Every tool's `inputSchema` sets `additionalProperties: false`.
Over REST, the same tool is `POST /api/v1/tools/{name}` with the arguments as the JSON body.

## Read tools (32)

- [Discovery & context](/tools/read-discovery) — `get_data_coverage`, `get_metric_definitions`, `get_context_pack`
- [Paid ads & creative](/tools/read-paid-ads) — `get_performance_summary`, `get_daily_performance`, `get_accounts_performance`, `get_campaigns_performance`, `get_adsets_performance`, `get_ads_performance`, `get_keywords_performance`, `get_geo_performance`, `get_creative_fatigue`, `get_creative_leaderboard`
- [Channels, web, email & organic](/tools/read-channels) — `get_channels`, `get_ga4`, `get_email`, `get_organic`
- [Forecast, CAC, finance & modeling](/tools/read-forecast-finance) — `get_forecast`, `get_signal_cac`, `get_finance`, `get_mmm_results`, `run_report`
- [Change sets & audiences](/tools/read-changes-audiences) — `list_management_connections`, `list_change_sets`, `get_change_set`, `list_audiences`
- [Signal](/tools/read-signal) — `signal_page_rule_list`, `signal_form_group_list`, `signal_attribution_model_list`, `signal_sessions_list`, `signal_session_get`, `signal_session_playback_grant`

## Write tools (15)

- [Change sets](/tools/write-change-sets) — `changes_draft`, `changes_add_item`, `changes_submit`
- [Audiences](/tools/write-audiences) — `audience_create`, `audience_update_filters`, `audience_add_destination`
- [Account & organization settings](/tools/write-account-org) — `account_update`, `org_update_digest_settings`
- [Signal configuration & sessions](/tools/write-signal) — `signal_page_rule_upsert`, `signal_page_rule_delete`, `signal_form_group_upsert`, `signal_attribution_model_upsert`, `signal_destination_update_config`, `signal_session_delete`, `signal_session_enqueue_analysis`

## All tools

| Tool | Posture | Module gate | Purpose |
|---|---|---|---|
| [`get_data_coverage`](/tools/read-discovery#get_data_coverage) | read-only | — | Data coverage |
| [`get_metric_definitions`](/tools/read-discovery#get_metric_definitions) | read-only | — | Metric definitions |
| [`get_context_pack`](/tools/read-discovery#get_context_pack) | read-only | — | Context pack |
| [`get_performance_summary`](/tools/read-paid-ads#get_performance_summary) | read-only | `ads` | Ad performance summary |
| [`get_daily_performance`](/tools/read-paid-ads#get_daily_performance) | read-only | `ads` | Daily ad performance |
| [`get_accounts_performance`](/tools/read-paid-ads#get_accounts_performance) | read-only | `ads` | Performance by ad account |
| [`get_campaigns_performance`](/tools/read-paid-ads#get_campaigns_performance) | read-only | `ads` | Performance by campaign |
| [`get_adsets_performance`](/tools/read-paid-ads#get_adsets_performance) | read-only | `ads` | Performance by ad set |
| [`get_ads_performance`](/tools/read-paid-ads#get_ads_performance) | read-only | `ads` | Performance by ad |
| [`get_keywords_performance`](/tools/read-paid-ads#get_keywords_performance) | read-only | `ads` | Performance by keyword |
| [`get_geo_performance`](/tools/read-paid-ads#get_geo_performance) | read-only | `ads` | Performance by geography |
| [`get_creative_fatigue`](/tools/read-paid-ads#get_creative_fatigue) | read-only | `ads` | Fatigued ads |
| [`get_creative_leaderboard`](/tools/read-paid-ads#get_creative_leaderboard) | read-only | `creative` | Creative leaderboard |
| [`get_channels`](/tools/read-channels#get_channels) | read-only | `channels` | All channels |
| [`get_ga4`](/tools/read-channels#get_ga4) | read-only | `ga4` | GA4 web analytics |
| [`get_email`](/tools/read-channels#get_email) | read-only | `email` | Email marketing |
| [`get_organic`](/tools/read-channels#get_organic) | read-only | `organic` | Organic social |
| [`get_forecast`](/tools/read-forecast-finance#get_forecast) | read-only | `forecast` | Performance forecast |
| [`get_signal_cac`](/tools/read-forecast-finance#get_signal_cac) | read-only | `signal_cac` | Signal CAC by channel |
| [`get_finance`](/tools/read-forecast-finance#get_finance) | read-only | `finance` | Financials (books) |
| [`get_mmm_results`](/tools/read-forecast-finance#get_mmm_results) | read-only | `compass` | Marketing mix model results |
| [`run_report`](/tools/read-forecast-finance#run_report) | read-only | — | Run a report template |
| [`list_management_connections`](/tools/read-changes-audiences#list_management_connections) | read-only | — | List management connections |
| [`changes_draft`](/tools/write-change-sets#changes_draft) | mutates state | — | Draft a change set |
| [`changes_add_item`](/tools/write-change-sets#changes_add_item) | mutates state | — | Add an item to a change set |
| [`changes_submit`](/tools/write-change-sets#changes_submit) | mutates state | — | Submit a change set for review |
| [`list_change_sets`](/tools/read-changes-audiences#list_change_sets) | read-only | — | List change sets |
| [`get_change_set`](/tools/read-changes-audiences#get_change_set) | read-only | — | Get a change set |
| [`list_audiences`](/tools/read-changes-audiences#list_audiences) | read-only | — | List audiences |
| [`audience_create`](/tools/write-audiences#audience_create) | mutates state | — | Create an audience |
| [`audience_update_filters`](/tools/write-audiences#audience_update_filters) | mutates state | — | Update audience filters |
| [`audience_add_destination`](/tools/write-audiences#audience_add_destination) | mutates state | — | Add an audience destination |
| [`account_update`](/tools/write-account-org#account_update) | mutates state | — | Rename or hide an ad account |
| [`org_update_digest_settings`](/tools/write-account-org#org_update_digest_settings) | mutates state | — | Update Slack digest settings |
| [`signal_page_rule_list`](/tools/read-signal#signal_page_rule_list) | read-only | — | List conversion page rules |
| [`signal_page_rule_upsert`](/tools/write-signal#signal_page_rule_upsert) | mutates state | — | Create or update a conversion page rule |
| [`signal_page_rule_delete`](/tools/write-signal#signal_page_rule_delete) | mutates state | — | Delete a conversion page rule |
| [`signal_form_group_list`](/tools/read-signal#signal_form_group_list) | read-only | — | List form groups |
| [`signal_form_group_upsert`](/tools/write-signal#signal_form_group_upsert) | mutates state | — | Create or update a form group |
| [`signal_attribution_model_list`](/tools/read-signal#signal_attribution_model_list) | read-only | — | List attribution models |
| [`signal_attribution_model_upsert`](/tools/write-signal#signal_attribution_model_upsert) | mutates state | — | Create or update an attribution model |
| [`signal_destination_update_config`](/tools/write-signal#signal_destination_update_config) | mutates state | — | Update a conversions destination's config |
| [`signal_sessions_list`](/tools/read-signal#signal_sessions_list) | read-only | — | List Signal sessions |
| [`signal_session_get`](/tools/read-signal#signal_session_get) | read-only | — | Get Signal session |
| [`signal_session_playback_grant`](/tools/read-signal#signal_session_playback_grant) | read-only | — | Grant Signal session playback URLs |
| [`signal_session_delete`](/tools/write-signal#signal_session_delete) | mutates state | — | Delete Signal session recording |
| [`signal_session_enqueue_analysis`](/tools/write-signal#signal_session_enqueue_analysis) | mutates state | — | Enqueue Signal session analysis |

## Write tools are human-in-the-loop

The write tools are deliberately incapable of finishing a change on their own. An agent can draft
a change set, add items to it and submit it — a **human still approves it** in the app, and
approval is not exposed here. An agent can create an audience and attach a destination, but
cannot push, export or delete one. Configuration tools reach cosmetic and notification settings
only; credential and mapping fields are not representable in any schema on this surface.
