# Iterable in a lifecycle audit

Iterable's support site refuses automated fetches, so the settings below were read in a browser on 2026-11-06 from the articles in `sources.yaml`. Open the article or the project settings before quoting one in a report. The MCP server facts come from its public repository README, read on 2026-11-01.

## Read-only access

- Official MCP server (beta, open source under MIT), set up by the user with `npx @iterable/mcp setup`. API keys are stored by the setup's key manager; never paste a key into chat.
- Keep `ITERABLE_ENABLE_WRITES`, `ITERABLE_ENABLE_SENDS` and `ITERABLE_USER_PII` all false, which are the setup defaults. Sends also require writes to be enabled, so both stay off.
- Point it at the US, EU or custom HTTPS endpoint the project uses.
- Never create a blast campaign during an audit: Iterable schedules a blast campaign when it is created.
- Read tool names: take them from the repository's TOOLS.md at run time.

## Where each area lives

- Journey coverage: journeys and their Start tile entry limits; campaigns, including blast and triggered campaigns.
- Caps: Frequency Management in project settings.
- Preferences: message channels (marketing and transactional per medium) and message types with their subscription policies; hosted or custom preference centres.
- Holdout: blast campaign experiments with a holdout group.
- Identity: the project type, chosen at project creation.
- Data in: Smart Ingest syncs from the warehouse, custom events and their states.

## Behaviour that changes findings

- Message types carry opt-in, opt-out or, for SMS, double opt-in policies. People receive an opt-out type by default, and existing users start receiving a new opt-out type until they unsubscribe (PC05).
- Frequency Management sets daily, weekly or monthly caps per channel (email, SMS, push) and per message type. A type value overrides the channel value, and caps apply independently, so they never add up to one overall limit. Campaigns, journeys and message types can be exempted, and transactional messages don't count. Skips are logged as send skip events with reason `FrequencyCapping`, or `FrequencyOptimization` where Frequency Decisioning, a separate AI feature, is on. Read each channel's setting rather than assume caps exist (FC02, FC03).
- Holdout groups exist only on blast campaign experiments with a custom conversion event, and not on send time experiments. Held-out users get a send skip event with reason `ExperimentHoldOut` (MH02, MH03).
- Hybrid projects enforce unique email and userId; userId-based projects allow several users to share an email, which matters for PC09 and TD07. Email-based projects exist with limited availability. The type is chosen at project creation and cannot be changed (project types article).
- Discarded custom events can still start a journey through the Event Occurs entry source, but new occurrences are not stored, cannot be exported and are not available in other journey tiles, so a journey can fire on events nobody can later count (TD06; managing custom events article).
- Smart Ingest syncs from the warehouse run at most every 15 minutes; record the actual schedule of every field used in a filter or recheck (TD05). Cron schedules run in UTC and other schedules in local time.

## Exports for the scripts

- Send log: the export API or CSV exports of send, bounce and unsubscribe events (verify names live), keyed by userId and hashed in the warehouse.
- Preference log: subscription change events per message type and channel, mapped to the script's source names.
- Inventory: journey and campaign lists with status, entry counts and Start tile settings.

## Verify live

The MCP tool names from TOOLS.md, the endpoint the project uses and the export names above.
