{"name":"personalize","npm_package":"@capitalthought/personalize-mcp","install_command":"npm install -g @capitalthought/personalize-mcp","auth":{"type":"bearer-jwt","issuer":"https://rdaifctvxvcagultzcsv.supabase.co/auth/v1","flow":"Refresh token → access token (15-min TTL) — operator obtains via bin/operator-login."},"tools":[{"name":"personalize_create_sequence","description":"Draft a multi-stage email sequence under an operator. Stage triggers: 'always', 'no_reply', 'no_engagement'.","auth_required":"JWT"},{"name":"personalize_add_recipients","description":"Attach recipients; suppression auto-applied.","auth_required":"JWT"},{"name":"personalize_import_recipients","description":"Bulk-import recipients from a CSV blob (e.g., fetched from a Sheet). Header row required; 'email' column mandatory.","auth_required":"JWT"},{"name":"personalize_launch","description":"Launch a sequence; >50 recipients require approval header. Self-test gate (default-on) renders stage 1 to owner_email before fan-out.","auth_required":"JWT + approval"},{"name":"personalize_approve_self_test","description":"Approve the self-test send and fan out the rest cohort. Idempotent.","auth_required":"JWT"},{"name":"personalize_update_stage","description":"Edit a stage subject or body before send.","auth_required":"JWT"},{"name":"personalize_preflight_check","description":"Run deliverability pre-flight (DNS, headers, content, volume) without launching.","auth_required":"JWT"},{"name":"personalize_link_check","description":"Verify every <a href> resolves AND click tracking round-trips correctly (catches HSN-2026-class encoding regressions before launch).","auth_required":"JWT"},{"name":"personalize_pause","description":"Halt an in-flight sequence. Pass terminal=true to archive it (terminal state) instead.","auth_required":"JWT"},{"name":"personalize_resume","description":"Resume a paused sequence (re-runs the approval gate).","auth_required":"JWT"},{"name":"personalize_get_status","description":"Recipient counts, send counts, engagement, replies.","auth_required":"JWT"},{"name":"personalize_list_sequences","description":"Filterable list of an operator's sequences.","auth_required":"JWT"},{"name":"personalize_create_snippet","description":"Save a versioned shared template (set parent_id to revise).","auth_required":"JWT"},{"name":"personalize_search_snippets","description":"Search the shared snippet library by name, owner, category.","auth_required":"JWT"},{"name":"personalize_create_team_prompt","description":"Create a team voice/style prompt — markdown the agent reads when composing on behalf of a team. Admin only.","auth_required":"JWT + admin"},{"name":"personalize_list_team_prompts","description":"List active team prompts. Read these BEFORE composing a stage on behalf of a team.","auth_required":"JWT"},{"name":"personalize_get_team_prompt","description":"Get one team prompt by slug.","auth_required":"JWT"},{"name":"personalize_suppress","description":"Add an email or domain to the do-not-contact list.","auth_required":"JWT"},{"name":"personalize_update_operator","description":"Update display_name, physical_address, or admin caps.","auth_required":"JWT"},{"name":"personalize_request_approval","description":"Mint a token for >1000-recipient launches.","auth_required":"JWT"},{"name":"personalize_audit","description":"Query the audit_log scoped to your own actor rows.","auth_required":"JWT"},{"name":"personalize_get_recipient","description":"Read a recipient's state, send history, and engagement events.","auth_required":"JWT"},{"name":"personalize_get_replies","description":"List reply + bounce events on a sequence with counts.","auth_required":"JWT"},{"name":"personalize_estimate","description":"Pre-launch sizing: caps, cap room, projected duration.","auth_required":"JWT"},{"name":"personalize_preview","description":"Render stage 1 subject + body for a recipient.","auth_required":"JWT"},{"name":"personalize_what_now","description":"Operator state-machine — tells the agent the next onboarding action ('needs_address', 'ready_for_send_test', 'fully_onboarded', etc.). Surfaces a quickstart_url for the first-sequence walkthrough.","auth_required":"JWT"},{"name":"personalize_send_test","description":"1-stage smoke test send to a configured test recipient — verifies auth + send pipeline end-to-end.","auth_required":"JWT"},{"name":"personalize_send_test_sequence","description":"Render a stage of an existing sequence against a recipient's variables and email the preview to the operator's own inbox. Subject prefixed [test]. Defaults: stage 1, newest recipient.","auth_required":"JWT"},{"name":"personalize_feedback","description":"File a feedback report; backs the agent-feedback signed-URL pipeline.","auth_required":"JWT"},{"name":"personalize_cluster_replies","description":"Reply Triage: read a reply pile + cluster into emergent groups (read-only, no drafts/sends). Source = sequence_id | gmail_query | thread_ids; body-read sources need the internal read flag.","auth_required":"JWT"},{"name":"personalize_draft_group_replies","description":"Reply Triage: execute the operator's direction for a group — reply (draft, template-only by default) / escalate / skip / suppress. Drafts only; safety-gated; no send.","auth_required":"JWT"},{"name":"personalize_approve_reply_batch","description":"Reply Triage: approve a drafted reply batch (batch_id + token) → cron sends threaded, commercial-only footer + suppression, paced. The recorded human approval; no auto-send.","auth_required":"JWT"},{"name":"personalize_get_reply_batch","description":"Reply Triage: read-only batch status — per-draft state, recipient, is_commercial, grounding_ok, confidence, body.","auth_required":"JWT"},{"name":"personalize_suggest_reply_sources","description":"Reply Triage discovery: rank reply piles worth triaging (sequences scope works for all; sent_fanouts/recent need the read flag). Read-only, no bodies/LLM; each suggestion pipes into cluster_replies.","auth_required":"JWT"},{"name":"personalize_list_waitlist","description":"Admin: list public beta-waitlist signups (landing page) to promote into the ≤100 Google test-user slots. Filter by status.","auth_required":"JWT"},{"name":"personalize_invite_waitlist","description":"Admin: mark a waitlist signup invited (after adding their email to the OAuth test-user list).","auth_required":"JWT"},{"name":"personalize_set_subject_variants","description":"Register 2-4 stage-1 subject A/B variants. Sequence must be draft + tracking_enabled. Recipients get assigned uniformly at random.","auth_required":"JWT"},{"name":"personalize_promote_variant","description":"Pick the winning A/B subject. Subsequent stages render the winner's subject for all recipients. Sequence must be active|paused|completed.","auth_required":"JWT"},{"name":"personalize_extend_pilot","description":"Extend an in-flight A/B pilot's decision deadline by additional_hours. Idempotent (additive). Used to buy more data before the 72h escalation ladder fires the relaxed-rule fallback or escalates to manual.","auth_required":"JWT"},{"name":"personalize_get_perspective_review","description":"Read a perspective-review record (AF4). Triggered on operator's first launch above 10 recipients. V2 observe-only (status='skipped'); V3 will dispatch multipov review with 3 personas.","auth_required":"JWT"},{"name":"personalize_create_engagement_webhook","description":"Register an engagement webhook on a sequence (CRM/Asana V1). Admin-only. Returns signing_secret + key_id once. Domain allowlist enforced. Justification required + audited.","auth_required":"JWT + admin"},{"name":"personalize_list_engagement_webhooks","description":"List engagement webhooks on a sequence. Admin-only. No secrets in response.","auth_required":"JWT + admin"},{"name":"personalize_disable_engagement_webhook","description":"Soft-disable an engagement webhook. Admin-only.","auth_required":"JWT + admin"},{"name":"personalize_rotate_engagement_webhook_secret","description":"Rotate signing_secret + bump key_id. Admin-only. Returns new secret once. Sender dual-signs (current + previous) for a 7-day grace window so receivers update on their own schedule.","auth_required":"JWT + admin"},{"name":"personalize_register_recipient_phone","description":"Capture phone consent for iMessage outbound on a recipient (Josh-only v1). Stores phone + consent_method + verbatim consent_disclosure_text + consent_at; audit-logs hashed phone.","auth_required":"JWT (Josh-only)"},{"name":"personalize_revoke_recipient_phone","description":"Revoke iMessage phone consent (operator-side STOP). Flips phone_consent_for_imessage=false, inserts an imessage suppression row, audit-logs the revoke. Josh-only.","auth_required":"JWT (Josh-only)"},{"name":"personalize_get_recipient_phone","description":"Read a recipient's phone-consent state + iMessage send history (last_imessage_sent_at, total_imessage_sent). Josh-only.","auth_required":"JWT (Josh-only)"},{"name":"personalize_list_imessage_outbound","description":"List iMessage outbound rows for a sequence (queued/dispatching/sent/delivered/read/failed/superseded). Phone numbers in the response are SHA-256-hashed per AGENTS.md §7. Josh-only.","auth_required":"JWT (Josh-only)"},{"name":"personalize_list_address_proposals","description":"List address-change proposals scoped to the calling operator (AUR5). Default status=pending. Each row is the platform's suggestion to swap a recipient's email after a bounce / auto-reply / FBL named a new address.","auth_required":"JWT"},{"name":"personalize_approve_address_proposal","description":"Approve a pending address-change proposal — atomically swaps recipients.email, inserts a recipient_address_history row, audit-logs. Optional new_email override (required when the proposal has no extracted address, e.g., AUR4 blind-bounce).","auth_required":"JWT"},{"name":"personalize_reject_address_proposal","description":"Reject a pending address-change proposal — leaves recipients.email untouched, audit-logs with the reason. Reason 5-500 chars; feeds AUR8 detection-quality scoring.","auth_required":"JWT"},{"name":"personalize_admin_list_operators","description":"List tenant operator roster (Phase 8 admin parity for /admin/operators). Admin-only. Optional `search` substring filter on email.","auth_required":"JWT + admin"},{"name":"personalize_admin_queue_snapshot","description":"Tenant-wide send-queue health (Phase 8 admin parity for /admin/queue-health). Returns queue depth, per-operator breaker state, cron freshness, tenant cap headroom. Admin-only.","auth_required":"JWT + admin"},{"name":"personalize_admin_audit_search","description":"Admin-flavored convenience wrap over /api/audit (Phase 8 admin parity for /admin/audit). Filters: actor, action, since, before-cursor, limit (default 100, max 500). Payloads may contain hashed PII per §7.","auth_required":"JWT + admin"},{"name":"personalize_health","description":"Public health probe (returns ok + iso timestamp).","auth_required":"none"}],"resources":{"contract":"https://personalize.run/agents.md","context":"https://personalize.run/llms.txt","api_health":"https://personalize.run/health","dashboard":"https://personalize.run/api/dashboard"}}