Skip to main content
Glama
615,302 tools. Updated 2026-09-27 03:55

"Spotlight" matching MCP tools:

  • Rules that change what a visitor sees depending on where and when they search: a banner for a region or a date range, featured locations, only certain locations, or hidden ones. One trigger and one action each, applied in list order after territories. Use action=list first to see what exists.
    Connector
    Destructive
    API key
  • Create a saved Insights (Spotlight) account-journey segment: a reusable filter over the account's engaged companies, and the input of create_audience_from_segment (and of get_insights_report). WHEN: the audience or list is defined by BEHAVIOUR or CRM STATE rather than by firmographics alone: "accounts that visited /pricing", "high engagement score and not in the CRM", "accounts we already served more than 200 LinkedIn impressions" (a saturation exclusion for a sequenced program), "open opportunities that went cold". Plain firmographic / technographic / intent asks do NOT need a segment: use those audience tools directly. WORKFLOW: 1. search_insights_criteria_fields (omit keywords for the full catalog) for exact field names, types, operators and picklist options. 2. list_segments: reuse a segment that already expresses the ask. This tool refuses a duplicate name. 3. create_segment with a descriptive name and the criteria below. Pass lookback_window to get `accounts` counted inside the window the audience will use. 4. create_audience_from_segment(segment_id, name, lookback_window, audience_type). REQUIRES an active Insights (Spotlight) subscription on the account: the platform gates segment creation on it, and this tool checks it before writing. A refusal naming the subscription state (expired, trial expired, no plan) is final: tell the user the subscription must be renewed, and do not retry with other criteria. Reading existing segments and building audiences from them keep working. CRITERIA SHAPE: a group {"operator": "AND"|"OR", "match": [criterion | nested group]}, up to three nested levels. Each criterion: {"field": <NAME>, "operator": <one of the field's operators>, "type": <the field's type>, "value": ...}. Before the call every criterion is checked against the live catalog: a missing `type` is filled in, names and operators are case-normalised, and an unknown field, an operator the field does not accept, or a picklist value that is not one of its options is refused with the valid choices (nothing is created). VALUES BY TYPE: - NUMERIC: a number; operators EQUALS, GREATER_THAN, GREATER_OR_EQUAL, LESS_THAN, LESS_OR_EQUAL. Metrics (LINKEDIN_IMPRESSIONS, LINKEDIN_ADS_ENGAGEMENT, WEBSITE_VISITS, TOTAL_PAGE_VIEWS, FORM_SUBMISSIONS, ...) are summed over the lookback window the audience is created with, so "more than 200 impressions in the last 90 days" is {"field": "LINKEDIN_IMPRESSIONS", "operator": "GREATER_THAN", "type": "NUMERIC", "value": 200} plus lookback_window 90 on the audience. - MULTIPICKLIST: a list of options; plain strings are accepted and matched to the catalog options by name or label; operators IN, NOT_IN. - BOOLEAN: true or false, operator null (or omitted). - STRING: text; EQUALS, NOT_EQUAL, LIKE (contains), NOT_LIKE. PAGE_URL LIKE "/pricing" is the page-visit filter. - ARRAY (UTM_* and REFERRER): a list of strings; IN, NOT_IN, LIKE, NOT_LIKE. - DATE (CRM date fields): {"days": N} with IN_THE_LAST / NOT_IN_THE_LAST / IN_THE_NEXT, or {"startDate", "endDate"} (ISO) with BETWEEN. - CRM (dynamic) fields: {"field": "DYNAMIC", "entity": <from the catalog>, "property": <field name>, "operator", "type", "value"}. EXAMPLE, saturation exclusion for a sequenced LinkedIn program: {"name": "Saturated: 200+ LinkedIn impressions", "lookback_window": 90, "criteria": {"operator": "AND", "match": [{"field": "LINKEDIN_IMPRESSIONS", "operator": "GREATER_THAN", "type": "NUMERIC", "value": 200}]}} EXAMPLE, warm accounts not yet in the CRM: {"operator": "AND", "match": [{"field": "SCORE", "operator": "IN", "type": "MULTIPICKLIST", "value": ["High"]}, {"field": "IN_CRM", "operator": null, "type": "BOOLEAN", "value": false}]} RETURNS: {success, id, name, status (READY | PENDING | FAILED), last_updated_date, lookback_window, accounts, criteria (as stored), notes}. PENDING means a CRM field is still being extracted: wait and re-check with get_segment_criteria before building an audience. `accounts` of 0 means an audience would be empty: loosen the criteria or widen the window.
    ConnectorAPI key
  • Reset the authenticated user's onboarding state. Call this when the user asks "can we restart the tour" or "reset my setup checklist". Safe to pass just one of the flags — omitting both is a no-op (returns success with nothing changed). Args: reset_tour: Set to True to replay the spotlight tour on next login (clears ``UserPreferences.has_seen_tour``). reset_checklist: Set to True to clear every ``checklist_*`` completion flag AND re-show the checklist widget. Returns: {"success": True, "reset_tour": bool, "reset_checklist": bool} reflecting which pieces were reset.
    ConnectorAPI key
  • PROJECT-SCOPED: this call acts only on the explicit project_id and returns the project identity with its result. Change how existing captions LOOK without touching their text or timing. Pass only the fields to change: 'make the captions premium/viral' -> {"style":{"preset":"clean"}} (see add_captions for the preset menu: clean/documentary/broadcast/podcast/beast/karaoke/spotlight/elegant/stacked/.../classic), 'make it red' -> {"style":{"color":"#FF0000"}}, 'center the captions' -> {"style":{"position":"middle"}}, 'bigger / more dynamic captions' -> {"style":{"size":"xl","dynamic":true}} (dynamic = legacy karaoke without a preset; presets animate on their own). highlight_color changes the accent of emphasized/spoken words; uppercase forces casing; emphasis_words (top-level arg, with a preset) replaces the emphasized keyword list. An explicit position or anchor_y locks captions there for the whole video and removes any old shot-aware placement track — use this when the user says captions must stop moving. For fine size control that the s|m|l|xl buckets can't hit pass size_scale (0.5-3.0; 1.5 = 50% bigger). Outline, shadow, backing panel, tracking and text alignment are independently editable. For transcript captions, single_line:true overrides any preset stack and guarantees one rendered row per state. Works for from_transcript and manual captions; errors helpfully if no captions exist yet.
    ConnectorOAuth
  • Granular performance metrics for ads, audiences, creatives, offers, target groups, keywords. IMPORTANT: Always specify endpoint parameter. Always use ISO 8601 for dates. USE FOR: Best performing ads/audiences/creatives/offers/target groups, ingredient comparisons, ad type analysis (IMAGE, VIDEO, CAROUSEL), lead gen forms vs landing pages, pipeline by ingredient, creative previews, keyword performance. NOT FOR: Account-level stats, experiment-level analysis without ingredient focus. ENDPOINT LOGIC: - 'target group' → customAudience/group - 'audience' → customAudience - 'offer'/'lead gen'/'landing page' → offer - 'creative' → creative - 'keyword' → keywords - 'ad'/'ads' or default → ads AD TYPES: IMAGE, VIDEO, CAROUSEL, DOCUMENT, CONVO, SPOTLIGHT, SEARCH, MESSAGE - The `adFormat` field on each response row identifies the ad type. METRICS: spend, impressions, clicks, leads, mqls | opens, sends, actionClicks, costPerOpen, costPerSend (CONVO/MESSAGE ads) | cpl, cpc, cpm, ctr, conversionRate, formConversionRate, mqlRate | totalOpps, totalTriggered, oppsAmount, triggeredAmount | cpMql, cpOppInfluenced, cpOppTriggered | channel, goal, adFormat, audienceSize, statusLabel | previewUrl CONVO/MESSAGE AD CAVEAT: when adFormat is CONVO or MESSAGE (LinkedIn message ads), success is measured by opens, sends, and actionClicks (and costPerOpen / costPerSend), NOT clicks/ctr/cpc. Do not rank these ads by CTR or dismiss them when clicks=0. Use sort='actionClicks,desc' or sort='opens,desc' for conversational performance ranking. RULES: Field 'id' corresponds to endpoint queried. Exclude $0 CPL experiments from calculations.
    ConnectorAPI key
  • Update the LinkedIn channel settings of an existing DRAFT wizard campaign: native objective, bidding optimization goal (including Reach), bid strategy with manual bid amount, and the LinkedIn conversion actions the campaign optimizes toward. These are the settings the platform UI shows in the LinkedIn channel drawer of the campaign draft page (Native Objective, Bidding Optimization Goal, Bid, Conversion Actions). The campaign MUST already have its LinkedIn channel enabled (via create_campaign / add_and_edit_campaign_elements with a `linkedin` block). WARNING: DRAFT-ONLY: the platform rejects these edits once the campaign is Launching/Launched. KEYWORDS: linkedin, linkedin campaign, linkedin settings, campaign settings, draft campaign, objective, native objective, brand awareness, website visits, engagement, video views, bidding optimization goal, optimization goal, reach, impressions, landing page clicks, engagement clicks, bid, bid strategy, auto bid, manual bid, maximum delivery, conversion, conversions, conversion actions, conversion tracking, insight tag, settings WHEN TO USE: - Set the LinkedIn native objective (e.g. Brand Awareness instead of the default Engagement) - Optimize a Brand Awareness campaign for REACH instead of IMPRESSIONS - Switch between auto bid (LinkedIn maximum delivery) and a manual bid - Pick which LinkedIn conversion actions the campaign optimizes toward and reports on PARAMETERS (campaign_id required; everything else optional, and an unspecified setting keeps its current value on the channel): - campaign_id: the wizard campaign ID - objective: BRAND_AWARENESS | WEBSITE_VISIT | ENGAGEMENT | VIDEO_VIEW, the LinkedIn native objective. Only selectable on Brand Awareness (CTR) campaigns: a Lead Gen (CPL) campaign derives it from its offer at launch (lead-gen form -> LEAD_GENERATION, landing page -> WEBSITE_CONVERSION). The platform default for a new LinkedIn channel is ENGAGEMENT. Every ad already on the channel must be supported by the objective (VIDEO_VIEW is video-only, MESSAGE ads only fit WEBSITE_VISIT, DOCUMENT ads lock the objective, a video-only channel accepts only ENGAGEMENT or VIDEO_VIEW). A channel holding CTV ads is always Brand Awareness / Reach at launch and cannot be changed here. Changing the objective also resets the cost type and the bidding optimization goal to the objective's default (BRAND_AWARENESS -> IMPRESSIONS, WEBSITE_VISIT -> LANDING_PAGE_CLICKS, ENGAGEMENT -> ENGAGEMENT_CLICKS, VIDEO_VIEW -> VIDEO_VIEWS), so pass bidding_optimization_goal in the same call when you want something else. - bidding_optimization_goal: what LinkedIn optimizes delivery for. Allowed per objective: BRAND_AWARENESS -> IMPRESSIONS | REACH; WEBSITE_VISIT -> LANDING_PAGE_CLICKS | IMPRESSIONS; ENGAGEMENT -> ENGAGEMENT_CLICKS | IMPRESSIONS; VIDEO_VIEW -> VIDEO_VIEWS | IMPRESSIONS. Conversation and Message ads are always IMPRESSIONS. CTR campaigns only. - bid_strategy: AUTO_BID (LinkedIn "maximum delivery", what the campaign builder applies by default) or MANUAL_BID (needs bid_amount). CTV ads REQUIRE AUTO_BID; Spotlight and Text ads REQUIRE MANUAL_BID. - bid_amount: manual bid in the account currency, used only with MANUAL_BID. - conversion_action_ids: ids of LinkedIn conversion actions (from list_linkedin_conversions) the campaign should optimize toward and count as conversions: website visits, URL-rule page views, lead form fills. REPLACES the current selection; pass [] to clear it (the campaign then falls back to the account's default Insight Tag URL match). Every id must exist and be enabled on the connected LinkedIn account, or launch validation fails. NOTE: the platform UI only shows this picker for campaigns with landing-page offers and an objective other than Brand Awareness; ids stored outside that case are still sent to LinkedIn at launch, but that path is not exercised by the UI. NOT SETTABLE ANYWHERE IN THE PLATFORM (say so instead of promising them): LinkedIn Audience Network on/off and its category exclusions, audience expansion (campaigns always launch with expansion OFF), frequency caps, Thought Leader ads. LinkedIn geo targeting is not a channel setting either: it lives on the audience / target group. EXAMPLES: Brand Awareness optimized for Reach on auto bid: update_linkedin_channel_settings({"campaign_id": 12345, "objective": "BRAND_AWARENESS", "bidding_optimization_goal": "REACH", "bid_strategy": "AUTO_BID"}) Track two conversion actions on a Website Visits campaign: update_linkedin_channel_settings({"campaign_id": 12345, "conversion_action_ids": ["123456", "234567"]}) RESPONSE: {success, campaign_id, channel_id, campaign_status, campaign_goal, channel_ad_types, applied:{...}, errors?}. `applied` echoes exactly what was pushed to the platform. INTEGRATION WITH OTHER TOOLS: - list_linkedin_conversions lists the conversion actions available on the account - search_campaigns_by_names / get_campaign_by_wizard_id to find the campaign - The LinkedIn channel is enabled by create_campaign or add_and_edit_campaign_elements - check_campaign_launch_readiness validates the result before launch
    Connector
    Destructive
    API key

Matching MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to lint API artifacts (OpenAPI, AsyncAPI, Arazzo) and manage rulesets conversationally via the Model Context Protocol.
    4
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Hosted MCP server providing corporate ownership intelligence, enabling AI agents to look up parent companies, PE backing, corporate families, and portfolio siblings via natural language queries.
    1
    MIT

Matching MCP Connectors

  • List the account's saved Insights (Spotlight) account-journey segments: {id, name, status, last_update_date}. Segments are shared with the SaaS UI (Spotlight > Journey), so a marketer may already have the one you need: check here BEFORE create_segment and reuse instead of creating a near duplicate. `name` filters fuzzily (case-insensitive contains or a close match). An empty list means the account has no segments yet, not an error: create one with create_segment when the ask needs it. Creating needs an ACTIVE Insights (Spotlight) subscription on the account: create_segment checks it first and refuses with the subscription state when it is expired or missing. Relay that to the user instead of retrying; existing segments stay usable either way. STATUS: READY can be used; PENDING is still extracting a CRM field (re-check later); FAILED cannot back an audience. NEXT: get_segment_criteria(segment_id, lookback_window) to read a segment's filter and how many accounts it matches in a window; create_audience_from_segment to turn it into an audience; get_insights_report(criteria=...) to browse its accounts.
    ConnectorAPI key
  • Create a new or update an existing LinkedIn Message Ad on the Metadata platform. A LinkedIn Message Ad is a Sponsored Messaging asset: a one-shot direct message delivered to a member's LinkedIn inbox from a specific sender, with a subject line, a body, an optional banner image, and a single call-to-action button. It is NOT a Conversation Ad — there is no branching step graph. Use create_update_convo_ad for multi-step convos. IMPORTANT: This tool is ONLY for LinkedIn Sponsored Messaging (channelType=LINKEDIN, adType=MESSAGE). For IMAGE/GIF ads use create_update_image_ad; for VIDEO ads use create_update_video_ad; for CONVO use create_update_convo_ad; for Google Ads text ads use create_update_google_ads_ad; for DOCUMENT ads use create_update_document_ad. SPOTLIGHT / FOLLOWER are not yet covered by the dedicated tools; LinkedIn CTV (Connected TV) ads use create_update_ctv_ad. BEHAVIOR: - If `id` is NOT provided → creates a new Message Ad. - If `id` IS provided → updates the existing Message Ad with that ID. PREREQUISITES (MUST DO BEFORE CALLING): 1. Call get_linkedin_senders to fetch a valid (senderId, senderName) pair. Message Ads share LinkedIn's sponsored-messaging sender allow-list with Conversation Ads — both pull from the same endpoint. Do NOT invent sender IDs. 2. If using a banner image: upload it via upload_image_creative and pass the returned imageLibraryId as `bannerCreativeLibraryId`. The banner is OPTIONAL — omit the field to skip it. LinkedIn requires an IMAGE creative ≤ 2 MB; oversize banners are rejected upstream. CHARACTER LIMITS (enforced by the platform; mirror the UI validator at metadata-ui-v3/.../li/message/edit/validation.ts): - name ≤ 50 chars (ad name in the library) - headlineText ≤ 60 chars (the message subject line) - messageText ≤ 2000 chars (the message body) - actionText ≤ 20 chars (the CTA button label) PERSONALIZATION MACROS IN messageText: The body supports LinkedIn personalization macros. Pass them verbatim inside `%...%` — the platform substitutes at send time. The validator accepts ONLY these five macros (any other %...% token is rejected): %FIRSTNAME% %LASTNAME% %COMPANYNAME% %JOBTITLE% %INDUSTRY% Do not use `{firstName}` or any other syntax — only `%MACRO%`. USAGE INSTRUCTIONS FOR LLM: Use this tool when users want to: - Create a new LinkedIn Sponsored Message ad - Update an existing Message Ad (subject, body, CTA, sender, or banner) WHEN TO USE: - User asks "create a LinkedIn Message Ad" / "InMail ad" / "Sponsored Messaging ad" - User wants a one-shot LinkedIn DM with subject + body + CTA - User wants to update an existing Message Ad WHEN NOT TO USE: - User wants a branching conversation flow → use create_update_convo_ad - User wants a feed image / GIF ad → use create_update_image_ad - User wants a feed video ad → use create_update_video_ad - User wants a Google Ads text ad → use create_update_google_ads_ad INPUT PARAMETERS: - id (optional): Existing Message Ad ID. Provide to UPDATE; omit to CREATE. - name (required, ≤ 50): Ad name in the library. - senderId (required): LinkedIn sender ID from get_linkedin_senders. - senderName (required): Display name matching senderId. - headlineText (required, ≤ 60): Subject line shown in the inbox. - messageText (required, ≤ 2000): Message body. Supports the five %MACRO% tokens listed above. - actionText (required, ≤ 20): CTA button label. - bannerCreativeLibraryId (optional): imageLibraryId of the banner image. Upload first via upload_image_creative. Omit to skip the banner. - completionStatus (optional, default DRAFT): "DRAFT" or "COMPLETED". Use COMPLETED only when every required field is final. EXAMPLE USAGE (Create): create_update_linkedin_message_ad( name="Q1_Demo_Outreach_LI_Message", senderId="fQdRPtecbv", senderName="Josh Desmarais", headlineText="Quick question about your marketing stack", messageText="Hi %FIRSTNAME%, as a %JOBTITLE% at %COMPANYNAME% you know how hard pipeline attribution is. Want a 15-min walkthrough?", actionText="Book a demo", bannerCreativeLibraryId=482931, ) EXAMPLE USAGE (Update): create_update_linkedin_message_ad( id=29144, name="Q1_Demo_Outreach_LI_Message_v2", senderId="fQdRPtecbv", senderName="Josh Desmarais", headlineText="Following up — quick demo?", messageText="Hi %FIRSTNAME%, circling back…", actionText="Book a demo", ) SUCCESS RESPONSE (mirrors create_update_convo_ad): { "success": true, "id": 29144, "ad_url": "https://platform.metadata.io/hub/library/ads?adId=29144", "name": "Q1_Demo_Outreach_LI_Message", "channelType": "LINKEDIN", "adType": "MESSAGE", "completionStatus": "DRAFT", "request": { "message": { ... } } } COMMON MISTAKES: - Inventing a senderId — IDs MUST come from get_linkedin_senders. - Passing a banner URL instead of an imageLibraryId — upload first. - Using `{firstName}`-style macros — LinkedIn uses `%FIRSTNAME%`. - Using an unsupported macro (anything outside the five listed) — the platform/UI validator rejects it. - Using this tool for a multi-step flow — use create_update_convo_ad.
    Connector
    Destructive
    API key
  • Generate a Topic Short from a reviewed storyPlan or automatically plan one from the topic and storyFormat. Spoken narration fills the selected length. A short reviewed plan is expanded so the voiceover is not a music-only tail. A too-long plan is packed down; generate never fails for narration length. captionStyle defaults to spotlight (off, spotlight, impact, highlighter, editorial, boxed, kicker — the Story caption looks, burned from the voiceover word timings); transitionMode defaults to dynamic. Uses this month’s generation allowance or complimentary quota. Poll get_topic_short. Stock matching fail-opens: a Pexels miss or outage still returns a finished short. Caption failure also fail-opens (captionBurn.verdict = fallback). Legacy captionMode values are aliased onto captionStyle. Optional hookTemplateId seeds the topic from Opening hooks (script opening, not a caption look) and does not change consume or refund.
    ConnectorOAuth
  • USE WHEN you need the valid chain names before filtering onchain_agent_search_resources, or want to know which chains have real agent tooling behind them rather than an announcement. Lists every blockchain represented in the directory with resource counts, spotlight chains first (Base, Ethereum, Solana, COTI, Injective…). Returns (json): { total, chains: [{ name, count }] }. Read-only.
    ConnectorNo auth
  • Discover the fields an Insights (Spotlight) account-journey segment can filter on: the exact `field` names, their type, the operators each accepts, and the picklist options. USE BEFORE create_segment, and before get_insights_report when you filter it. Omit `search_keywords` to get the whole catalog in compact form; pass keywords to narrow it (matched against field names and labels: "impressions", "score", "visits", "pricing", "opportunity"). WHAT A SEGMENT FILTERS: the companies in the account's Spotlight journey, one row per company, with engagement metrics that are computed INSIDE the lookback window the audience is later created with (create_audience_from_segment.lookback_window). Needs the Insights (Spotlight) subscription on the account: without it the catalog comes back empty or the call fails, and the right move is to say so, not to guess fields. STATIC FIELDS (always present; use the NAME in criteria): - Marketing touchpoints: LINKEDIN_IMPRESSIONS (NUMERIC), LINKEDIN_ADS_ENGAGEMENT (NUMERIC, LinkedIn clicks), FORM_SUBMISSIONS (NUMERIC), CHANNEL (MULTIPICKLIST: LINKEDIN, FACEBOOK, GOOGLE_ADS, INSTAGRAM, EMAIL, THIRD_PARTY, DIRECT), HIGH_INTENT_PAGES (BOOLEAN) - Website engagement: WEBSITE_VISITS, TOTAL_PAGE_VIEWS, UNIQUE_VISITORS (NUMERIC), PAGE_URL (STRING; LIKE "/pricing" is the page-visit filter), IDENTIFIED_VISITORS (BOOLEAN), IS_ABM (BOOLEAN), UTM_SOURCE / UTM_MEDIUM / UTM_CAMPAIGN / UTM_TERM / UTM_CONTENT / UTM_KEYWORD / REFERRER (ARRAY) - Engagement score: SCORE (MULTIPICKLIST classification), CONFIDENCE_SCORE and TREND (MULTIPICKLIST) - CRM: ACCOUNT_STATUS (opportunity status, MULTIPICKLIST), IN_CRM (BOOLEAN), ACCOUNT_OWNER (MULTIPICKLIST); HubSpot adds DEAL_TYPE and DEAL_STAGE; Salesforce adds EMAILS, CALLS, EVENTS (NUMERIC), CAMPAIGN_NAME, CAMPAIGN_TYPE, CAMPAIGN_MEMBER_STATUS, RESPONDED; any connected CRM adds DYNAMIC fields (criterion field "DYNAMIC" plus entity and property) - Firmographic: INDUSTRIES, REVENUES, EMPLOYEES, COUNTRIES (MULTIPICKLIST), COMPANY_DOMAIN, COMPANY_NAME (STRING), ACCOUNT_LIST (MULTIPICKLIST of the account's ABM lists) RESPONSE: {fields: [{name, label, criteria_fields: [{name, label, type, operators, options (first 10), options_total, dynamic?, entity?, status?}]}], missing_crm_fields, criteria_rules}. `criteria_rules` restates the value shape per type. A dynamic field with status PENDING is still being extracted from the CRM and cannot be used yet.
    ConnectorAPI key
  • PROJECT-SCOPED: this call acts only on the explicit project_id and returns the project identity with its result. Burned captions. mode='from_transcript' (word-timed from the real transcript, recommended) or mode='off', or items=[{text,start,end,style?}] (source seconds) for text the user dictates. PREMIUM PRESETS (style.preset) are professionally designed looks with real fonts. SAFE DEFAULTS: 'clean' (white Plus Jakarta Sans, complete short phrases, size-only hierarchy), 'documentary' (restrained subtitles on a translucent contrast panel), and 'broadcast' (left-aligned news/explainer lower third). SOCIAL/CREATIVE: 'reels' (FLAGSHIP short-form system: tight two-line hierarchy, warm hero word and multi-stage elastic word landings), 'podcast' (bold white words land on screen as spoken, keywords light up in the accent color, get a highlight box or serif italics, numbers render HUGE), 'beast' (loud MrBeast-style: ALL-CAPS impact font, centered, the spoken word pops in the accent color), 'karaoke' (an accent box follows each spoken word), 'spotlight' (ONE glowing word at a time, centred, uppercase — the modern single-word look for hype/motivation/fast talking; the ONLY preset that belongs mid-frame), 'elegant' (calm lower-third, serif-italic accents — interviews/luxury), 'lyric' (phrase-led music/quote typography), plus stacked/iridescent/chrome/editorial/fashion/luxe/impact/retro/neon composed looks; 'classic' is the plain legacy look. If style is omitted, the tool chooses a coherent preset deterministically from the measured format, speech pace and brief — it does not make every project wear the same caption skin. PLACEMENT: multi-word presets default to the BOTTOM, clear of the face — do not move them to 'middle'; only a single-word-at-a-time look may sit centred. With a preset, sparse emphasis is AUTO-SELECTED from the KEPT transcript when emphasis_words is omitted; measured vocal stress leads on short-form/cached audio, with numbers and semantic outcome words as fallback. pass a verbatim list only when specific words are required, or [] to explicitly disable hierarchy. highlight_color sets the accent (default warm yellow); uppercase overrides the preset's casing; position bottom/top/middle overrides its placement and LOCKS that band for the whole video (no shot-by-shot position changes); anchor_y similarly locks an exact vertical frame fraction. Omit both to let collision-aware placement adapt by shot. Other style fields: color '#RRGGBB', size s|m|l|xl (presets are already big at 'm'), size_scale 0.5-3.0, dynamic:true (legacy karaoke, no preset), animation fade|pop|slide_up|punch|blur_in|whip|flash|rise|drop|elastic|bounce|swing|zoom_blur, or 'none' to turn a preset's animation OFF (instant words), single_line:true to guarantee one rendered row per transcript-caption state regardless of the preset's normal flow/stack layout, max_words_per_caption 1-16. Default modern look is 1-2 words at a time, stacked levels, fade in (preset 'stacked', max_words_per_caption 2) — not a sentence subtitle. Example — modern reel captions: {mode:'from_transcript', style:{preset:'stacked', animation:'fade'}, max_words_per_caption:2}. Example — dictated title card: {items:[{text:'CHAPTER ONE', start:0, end:2.5, style:{preset:'beast'}}]}. Stack presets (stacked/iridescent/chrome/fashion/luxe/editorial/impact) compose 1-2 words across lines of very different SIZES; font picks a bundled family, emphasis 'big' enlarges keywords WITHOUT recolouring them, leading below 1.0 overlaps the lines so a smaller word fades in behind the hero. Production controls include outline_color/outline_width, shadow, background_color/background_opacity, tracking and text_align.
    ConnectorOAuth
  • Get a daily biorhythm reading with seeded randomness for consistent "biorhythm of the day" features. Same seed and same date always produce the same reading, perfect for daily push notifications, morning briefings, and wellness app check-ins. Returns energy rating, overall phase, a spotlight on one featured cycle, quick-read values for all three primary cycles, a daily message, and actionable advice. The spotlight cycle is deterministically selected by the seed, creating variety across users while maintaining consistency for each individual.
    ConnectorNo auth
  • Read the status and synthetic result of a sandbox job created with create_sandbox_job. Every well-formed jobId resolves as completed, so a result is not proof that the key was created.
    ConnectorNo auth
  • USE when a player's season HR# or K# aligns with calendar day-of-month, jersey number, or inning on baseball.plays. NOT for roster cardology → get_team_chemistry; cosmic day card → get_date. Requires retro_id. mode=season (default) | spotlight (tier<=1) | career_summary (aggregates only). lane=both (default) | hr | k. Optional game_dt filter, tier_max (0-4), limit (1-500). RETURNS summary + events[] with pattern labels (day=HR#, HR#=jersey, day=K#=jersey, etc.). Overlay get_date(game_dt) for MCP day-card narrative.
    ConnectorNo auth
  • USE when a player's season HR# or K# aligns with calendar day-of-month, jersey number, or inning on baseball.plays. NOT for roster cardology → get_team_chemistry; cosmic day card → get_date. Requires retro_id. mode=season (default) | spotlight (tier<=1) | career_summary (aggregates only). lane=both (default) | hr | k. Optional game_dt filter, tier_max (0-4), limit (1-500). RETURNS summary + events[] with pattern labels (day=HR#, HR#=jersey, day=K#=jersey, etc.). Overlay get_date(game_dt) for MCP day-card narrative.
    ConnectorNo auth
  • Start a synthetic asynchronous sandbox job that exercises the Idempotency-Key and 202-then-poll pattern of the write API without touching real auctions, ads or money. Poll it with get_sandbox_job.
    ConnectorNo auth
  • Searches for files by name anywhere on this Mac (uses mdfind/Spotlight); pass path= to scope it to one folder. Credential and identity locations are refused.
    ConnectorOAuth
  • Quote a Topic Short. Does not render. Spoken narration is planned to fill the selected length; that does not change the quote (quoted on duration, not word count). captionStyle defaults to spotlight (same seven looks as Story: off, spotlight, impact, highlighter, editorial, boxed, kicker); transitionMode defaults to dynamic. Neither changes the quote. Legacy captionMode values are aliased onto captionStyle. Optional hookTemplateId seeds the topic from Opening hooks (script opening, not a caption look) and does not change the quote.
    ConnectorOAuth