add_calibration_test_subjects
ChatGPTAppend test subjects to an idle, editable calibration session. company_list_id snapshots and appends current list membership for company evaluation; it never removes existing subjects or follows later list edits. Company evaluation takes standard-company UUIDs. Messaging/person evaluation take LinkedIn URNs, profile URLs, or org-scoped universe-person:<uuid> references. Existing results and evidence are preserved (saved executions remain in history); duplicates are skipped. Messaging limits still apply. This does not run tests or make anything live. Call run_calibration_simulation separately to evaluate additions. Test-live and preview sessions are read-only.
add_companies_to_list
ChatGPTAdd companies to an existing company list. Uses standard company IDs from company search or existing company rows. REQUIRES POLLING: call get_lists or get_companies with company_filters.list_id after waiting.
add_customer_story
ChatGPTAdd one live customer story. Call get_config(requested_field='customer_stories') first when you need to inspect existing story labels and avoid duplicates.
add_exclusion
ChatGPTExclusions > Companies/People: exclude one tracked record and deactivate its prospecting. Supply exactly one Universe entity_id, company domain, or person email. Company exclusion also blocks associated contacts; person exclusion is person-only. Uses the app's predefined manual reasons, no free-text note. Omit expiration for permanent. Preserves an existing active direct exclusion (including its reason/expiry). Repeated adds finish any partial deactivation. Unknown identifiers return not_found; ambiguous matches require an ID. No records are admitted and no domain/email blocklist is created. Read back with get_companies/get_people requested_fields=["exclusion"].
add_other_resource
ChatGPTAdd one live other resource. Add one live entry atomically; existing entries are preserved.
add_people_to_list
ChatGPTAdd existing org people to a people list.
add_to_sequence
ChatGPTAdd 1–100 workspace people to a Template or Adaptive Sequence and compose real Drafts. Adaptive Sequences require adaptive_format_id from list_adaptive_formats. Omit it for Template Sequences. Invalid Formats fail before enrollment. Uses credits to compose sequences; each Draft (lifecycle status proposal) always requires approval, even in auto-approve orgs. Does not create a Play or send messages. Use person_ref from get_people (universe-person:<uuid>); CRM-only people are supported. Existing active sequences are skipped unless add_another=true; never replaces a sequence. Reuse the SAME request_key and inputs after a transport failure: returns the original operation, resumes unfinished submissions, never reenrolls. Changed people, owner or Template require a new key. Poll the returned operation with get_template_proposal_batch for current sequence warnings.
approve_proposal
ChatGPTApprove a proposal so Meticulate can send it. Use edit_proposal first if the user asked to change the proposal before approval. This approves one sequence and may nullify superseded sequences for the same person, matching app behavior.
archive_adaptive_format
ChatGPTArchive a Format with a successor after reading both. Requires expected_revision. New enrollments resolve the successor; started sequences retain their original Format for Rewrites. Bank compatibility is checked at drafting. Requires owner/admin access. Generated messages and history are unchanged.
create_calibration_session
ChatGPTCreate a Calibration Studio session. Use get_options first when you need IDs for the owner, sequence format, ruleset, style, event play, or context play. Choose focus.type based on what the user wants to work on: core_configs for company targeting, person targeting, or messaging setup; build_style for drafting style changes; event_play for event-based messaging; context_play for reusable messaging ideas. Use send_calibration_chat_message for AI-assisted edits after creation. For core_configs, enable at least one of company_targeting, person_targeting, or messaging. REQUIRES POLLING wait_for_calibration_session when session_mode is simulate_current_setup.
create_company_list
ChatGPTCreate a company list. std_co_ids are optional. When provided, companies are added through the same background path as the app. REQUIRES POLLING when std_co_ids is non-empty: call get_lists or get_companies with company_filters.list_id after waiting.
create_draft_package_calibration_session
ChatGPTStart Targeting & Plays or Targeting & Sequences, optionally empty. Select up to five Plays or Sequences respectively. Targeting and the messaging framework are editable in both. Play dependencies are captured; selector-only Templates and Auto-Selectors are read-only. Sequence subjects default to the explicitly configured Standard set and are sampled only when Run is requested. An empty Standard set requires choosing test people; it is never populated automatically. Read get_calibration_guidance first. Use run_calibration_simulation for combined session testing.
create_people_list
ChatGPTCreate a people list and optionally add existing org people.
create_sequence
ChatGPTCreate one empty Sequence owned by the authenticated user and return its ID. Use only when the user needs a new Sequence, not to edit an existing one. This saves an empty Sequence with no steps and does not activate prospecting. It is private unless share_with_org is true. Every sequence drafted from it uses ruleset_id (default: the user's default Ruleset, then the org default). Call once, then retain the returned template.id for subsequent editing; repeated calls create separate Sequences. In the in-app assistant, pass that ID to propose_template_changes for a reviewable AI proposal. Other MCP clients can populate the Sequence with update_sequence using the returned template_xml and updated_at.
create_topics
ChatGPTCreate new topic definitions for the organization. IMPORTANT: Before creating topics, call list_topics first to check if a matching topic already exists. Reuse existing topic IDs instead of creating duplicates. Topics are custom research questions that get answered for each company using AI analysis of public data. Each topic requires: - display_name (str): human-readable name for the topic - instructions (dict): defines the question and output format. Must include a 'format' key set to one of the formats below, plus format-specific fields: score: Rate companies 0-5 on a question. - question (str, required): the scoring question - guidance (str, optional): extra context for the scorer - rubric (dict, optional): keys 'zero' through 'five', each a string describing what that score means. Each level should be specific enough that two independent reviewers would assign the same score. number: Estimate a numeric value (e.g. location count, revenue). - stat_to_estimate (str, required): what number to estimate. Include the unit when values span wide ranges (e.g. "Annual revenue in millions of USD"). - guidance (str, required): how to estimate it — what sources to check, what proxies to use - integers_only (bool, optional, default false) singleselect: Classify into one mutually exclusive category. - question (str, required): the classification question. Frame as "Does this company do X?" for targeted detection rather than "What does this company do?" for better accuracy on large companies. - options (list, required): each {id: str, label: str, description?: str}. Each option's description (10-15 words) should specify observable signals that differentiate it from other options. - allow_none_of_the_above (bool, required): set true if companies might not fit any option multiselect: Tag with one or more non-exclusive labels. - question (str, required): the classification question - options (list, required): each {id: str, label: str, description?: str}. Descriptions should clarify what evidence qualifies a company. text_output: Free-text answer for open-ended research. - question (str, required): the question to answer - example_format (str, optional): example of the desired answer format, showing structure and level of detail expected Optional fields (defaults provided if omitted): - info_to_use: dict specifying what data sources the AI uses to answer. Keys: topic_ids (list[str]): other topic IDs whose answers to include as context. Use sparingly — each dependency adds recomputation cost. standard_elements (list[str]): data sources to feed in. Pick 1-4 that are relevant to the question: - 'basic_firmographics': company size, funding, location, industry, business model, offerings, customer segments. Sufficient for most classification questions. - 'tech_detections': technologies the company uses - 'job_listings': current job postings - 'employee_roles': employee titles and departments - 'sec_reports_transcripts': SEC filings and earnings calls - 'co_linkedin_posts': company LinkedIn activity - 'new_joiners': recent hires - 'landing_page': company website content, product positioning. Add only when the topic needs detail beyond basic_firmographics. websearch_volume (int): number of web searches to run (0 = none). Reserve for topics that need recent news, partnerships, or events. Defaults to empty (basic firmographic info only). - run_conditions: dict controlling when the topic is generated. Defaults to {generate_when_requested: true}. Returns the list of newly created topics with their assigned IDs.
delete_company_list
ChatGPTDelete a company list, as Delete does in the app. Removes the list and its sidebar pins; the companies themselves are unaffected. Only call when the user explicitly asks to delete this list.
delete_people_list
ChatGPTDelete a people list, as Delete does in the app. Removes the list and its sidebar pins; the people themselves are unaffected. Only call when the user explicitly asks to delete this list.
edit_adaptive_step
ChatGPTAdd, update or remove one step in an existing Adaptive Step Bank. Read get_sequence first and supply its updated_at. For add/update pass one complete <bank-step> element in bank_step_xml, using the same XML syntax as get_sequence. Update replaces only that step, preserving its ID and position; bank_step_id is required for update/remove. An XML id must match bank_step_id when both are provided. Add appends; omit both IDs to generate a new one. Remove takes no XML. Other steps, metadata and shared Formats are preserved. The entire resulting bank is validated through the normal permission-checked, revision-guarded Sequence save. Returns the change summary, step inventory and new updated_at for the next edit; pass response_detail="full" to also return the saved bank XML. Does not enroll, send, or change existing drafted sequences. In-app assistants must use the suggested-changes workflow instead of this live-write tool.
edit_calibration_working_copy
ChatGPTApply atomic, revision-checked draft edits, including Template/Adaptive content. Supports single-item/section edits, positional insert and exact-match text replacement. Edits apply in order: an insert or remove shifts later array positions. expected guards the current value or item text and is required to remove or replace a whole Ruleset block. No publication or testing. Destructive proposals require confirmation in the app.
edit_draft
ChatGPTEdit one Draft (lifecycle status proposal, shown as Draft in the app). Identify each step by step_index (1-based send position, as shown by get_sequences) or action_step_id. Pass only the fields to change. message edits email bodies or LinkedIn text; with message_format=plain_text an email body is written as ordinary text, converted exactly as written (include any signature yourself); text becomes bold and bare URLs or domains become links. subject edits email subjects; guidance edits phone call guidance. LinkedIn connection notes must fit 300 characters. Returns the Draft's ordered steps with short previews and which steps still need review; set include_full_sequence=true for every step field. Saves the Draft but does not approve it. For several Drafts at once, use edit_drafts.
edit_drafts
ChatGPTEdit up to 25 Drafts in one call, each with the same step_edits shape as edit_draft. Drafts are saved independently: one failing Draft does not stop or undo the others, and each result reports ok or the error. Returns each Draft's ordered steps with short previews and steps needing review; set include_full_sequences=true for every step field. Saves the Drafts but does not approve them.
edit_proposal
ChatGPTEdit a proposal sequence. First call get_proposals with requested_fields=['steps'] to get step IDs. Pass only the fields to change. message edits email bodies or LinkedIn text; subject edits email subjects; guidance edits phone call guidance. This saves the proposal but does not approve it.
find_people
ChatGPTFind prospects at selected companies and match them to org-defined persona fits. Use this after get_companies, get_company_searches, or a company list gives you standard company IDs. Pass org_personas_to_find when the user asks to find existing target personas, persona fits, buyers, prospects, or the right people at a company. Use custom_persona_to_find only when the user gives a new freeform persona that is not one of the org's configured personas. Do not invent a custom_persona_to_find for broad requests like "persona fits" or "decision-makers"; use the org's configured personas. If the user seems to want a custom profile but has not specified it clearly, ask them to confirm the custom persona before running. Add found people to exactly one destination: either an existing people list via people_list_id, or a new people list via people_list_title. REQUIRES POLLING: call get_people with person_filters.list_id or get_lists(type='person') using the returned people_list_id.
find_similar_companies
ChatGPTFind companies similar to a given company using vector similarity. Takes a reference company's standard ID (from recognize_companies or search_companies) and finds companies with similar semantic profiles (business model, offerings) via embedding similarity. Important: results get broader/noisier at higher volumes. At limit=20 you get close matches; at limit=100+ you'll see adjacent-market companies that share some overlap but aren't direct competitors. For large competitor lists, combine this with search_companies using a specific description of the reference company's niche for better precision. The reference company itself may appear in results — filter it out if needed. Filter fields (all optional) narrow the results: - employee_min/employee_max, year_founded_min/year_founded_max - hq_country (list of 2-letter ISO country codes, e.g. ['US']) - ownership_types, estimated_revenue_min/estimated_revenue_max - limit: max results (default 20, max 500) Returns a list of standard company IDs (UUIDs as strings). Use get_basic_company_info to fetch details for these IDs.
generate_sequence_preview
ChatGPTGenerate a quick preview of one saved Template for exactly one person. Supply person_ref from get_people (universe-person:<uuid>) or a LinkedIn URN. CRM/imported people without LinkedIn are supported using existing workspace context. person_linkedin_urn is a compatibility alias; supply only one of the two names. Save edits with update_sequence first. Uses the same preview execution path as the editor, including live prospect context. For an Adaptive Sequence, supply adaptive_format_id from list_adaptive_formats. The Format is validated before creating the preview session. Returns before generation finishes: poll get_sequence_preview with the returned template_id and session_id for status, complete message text, errors and staleness. This does not send, enroll, or make anything live. For a full multi-person simulation use create_calibration_session instead.
get_adaptive_format
ChatGPTRead an exact Format, including an archived version. Does not follow successors.
get_audiences
ChatGPTRead visible Audiences, including parent_audience_id/name/revision, local filters, inherited_filters, effective_filters, and visible child_count. Child filters only narrow the parent (AND). Save local filters, never copy effective_filters back into filters. Audiences define people independently of Plays and messaging; parent/child membership snapshots refresh independently.
get_authoring_step
ChatGPTCompatibility tool: prefer get_step_library_item. Internal users only. Adapt into independent customer-owned copy with fresh IDs through existing sequence authoring tools. Read construction guidance and the customer's Ruleset first. Replace example claims/metrics with verified customer facts; respect prior-message dependencies. This tool creates no customer content.
get_auto_selector
ChatGPTRead a live Auto-Selector's complete routing, metadata and revision. Discover IDs with get_options(requested_fields=["auto_selectors"]). Use this before save_auto_selector; preserve unchanged metadata and pass revision as expected_revision. No calibration session is required.
get_basic_company_info
ChatGPTGet basic firmographic information for a list of companies by their IDs. Takes standard company IDs (UUIDs as strings) from recognize_companies, search_companies, or find_similar_companies. Pass all IDs in a single call — the tool handles batching internally and is more efficient than multiple separate calls. Returns company data including: - name, domain, company_type (private/public) - employee_guess, employee_min, employee_max, employee_count_90day_growth - revenue_min, revenue_max (USD) - year_founded - hq_country, hq_region, hq_metro - linkedin_followers, linkedin_followers_90day_growth - tags (industry/vertical labels) - web_traffic, hype_rating, product_score Use this for quick lookups, comparisons, and filtering. For custom analytical questions not covered by these fields, use create_topics and run_topics_on_companies instead. Returns null for company IDs not found.
get_calibration_draft_package_history
ChatGPTRead ten frozen Audience/Play test receipts; pass next_before for older runs.
get_calibration_guidance
ChatGPTRead calibration orientation, sourcing/reuse/credit rules and worked examples before calibration planning, editing or interpreting results. No writes or simulations.
get_calibration_operation
ChatGPTRead a durable simulation receipt after submission or a transport timeout. Submission is not completion. Repeating run_calibration_simulation with the same idempotency_key retrieves the original operation without new work. This response separates worker interruption from completed evaluations. lifecycle=finished means the attempt ended, not that every row succeeded. outcome distinguishes succeeded, finished_with_issues, and failed; null means no finished outcome. Freshness is independent and can be unknown. Per-run baseline/current counts separate old-comparison failures from current output failures. Legacy completed counts successful rows only; prefer succeeded and side counts. Never describe terminal failures as not simulated, and never count baseline failures as current draft failures.
get_calibration_publish_status
ChatGPTRead a Make Live request and durable publication status. Pass both IDs returned by make_calibration_live. Poll until is_terminal. Only status=succeeded confirms publication. Request acceptance is not completion; failed/rejected requests must not be reported as live.
get_calibration_session
ChatGPTRead one Calibration Session. For readiness/review questions, prefer review_calibration_session. Use get_calibration_session when you need one specific piece of a session: status/latest_runs for progress and latest result pointers; messages/chat_history for the visible session conversation; working_config/base_config/diff with runbook for one editable config area; working_config_search with query to find text in working configs; simulation_results with surface for one paginated simulation-result set; calibration_summary only when the full summary text is needed. Broad working_configs/base_configs are supported, but can be large. Avoid broad combined reads for normal review workflows. For simulation_results, pass surface to choose company_targeting, person_targeting, or messaging. Use limit and offset to page through simulation result entries; those pagination parameters only apply to simulation_results. Pass run_id only when inspecting a specific run instead of the latest run for that surface.
get_calibrations
ChatGPTDiscover recent Calibration Sessions. Use this first for recent/latest/most relevant calibration sessions, then call get_calibration_session with the chosen session_id for details. requested_fields can include calibration_summary and run_summaries. Enriched calibration-list requests are capped at limit <= 3.
get_companies
ChatGPTRead companies in an org. requested_fields can include standard_company, company_info, people, signals, exclusion, notes, heat_score, detailed_topic_answers, targeting_qa, account_research, and people_finding. Default rows are designed for broad targeting review: company identity, min-criteria status, targeting state, overview.icps, lightweight firmographics, and overview.topic_answers with one compact value per configured company topic. Use requested_fields=["targeting_qa"] when you need fit/non-fit reasons, ICP pass/fail details, and min-criteria context. Requested fields add nested sections and capped evidence. Heavy enriched company requests are capped at limit <= 3. Use company_filters to narrow by CRM, ICP/min-criteria, lists, owners, prospecting state, exclusions, company IDs, names, or topic answers. Omit it when no filtering is needed. count is the total matched row count; pagination.returned_count is the number of rows returned on this page. Default sorting prioritizes companies that look more outbound-ready over alphabetical edge cases.
get_company_list_population_status
ChatGPTRead a company-list admission task and verify its requested memberships. Only reports IDs queued by this task, not immediate additions from the original call. present_count verifies current membership, not insert attribution. A completed task with an error outcome or missing IDs is not full success.
get_company_owner_assignment
ChatGPTRead this user's platform-owner task. After completion, verify owners with get_companies.
get_company_searches
ChatGPTRead saved Company Searcher searches and optionally include result pages. Without results, each search is returned as metadata with no result count. With results, count_accuracy indicates whether the count is exact, estimated, or capped.
get_config
ChatGPTRead one area of an org's configuration. Choose exactly one requested_field per call: enterprise, company_targeting, person_targeting, rulesets, styles, guidance_notes, customer_stories, or calibration. Use compact detail for review/audit questions. Use full detail only when the user needs the complete text or structured body for that one area. The enterprise field returns org/business and operational settings. company_targeting returns min criteria, company topics, ICPs, and company search recommendations. person_targeting returns personas, person topics, and person targeting filters. The customer_stories field returns live customer-story collateral. The calibration field returns the org-level calibration summary and log. Full rulesets/styles can be long, so their blocks are paged per item with block_offset and block_limit. Start with block_offset=0 and continue while any returned item has has_more_blocks=true.
get_filter_options
ChatGPTDiscover tracked people/company filter schemas and valid workspace values. Request people_schema, company_schema or sequence_schema for the MCP contract with shared UX matching semantics, targeting for personas/ICPs/topics, or crm for field identifiers, data types, options and stages. Use get_motion_filter_options for Motion-specific IDs and refinements. Fetch only the section needed. Never invent IDs or unsupported fields.
get_interactions
ChatGPTRead sent and received prospect interactions. Use this for recent outbound activity, replies, prior touches, event/context-play usage, and account history. Returns subject/body previews and guidance-note labels when available. By default this only returns interactions associated with Meticulate prospecting. Set include_unassociated=true only when explicitly debugging raw CRM/mailbox records outside Meticulate workflows.
get_lists
ChatGPTRead person or company lists for an org. Use limit and offset for pagination.
get_mcp_diagnostics
ChatGPTIdentify the running process and contract when tools or saved models mismatch. Unknown build_revision means the deployment did not provide a build ID. This does not imply invalid request arguments or confirm mutation success.
get_motion_filter_options
ChatGPTDiscover one Motion's supported refinements and workspace options for Audience filters. Returns Jobs/News criteria, monitored LinkedIn profiles, shared-background users/elements, events/statuses, or customer-lookalike source companies as applicable. Only loads the selected Motion. Use returned IDs in motion_conditions[].filters; never invent IDs.
get_news_jobs_signal_config
ChatGPTRead full News and Jobs signal settings, named criteria and shared ICP scope. news_events is News; jobs_listings is Jobs/Hiring. Returns effective defaults when no settings have been saved. Keep this full object for a subsequent replace_news_jobs_signal_config, including revision and timestamp. Criteria describe only the event a news item or job listing shows; company eligibility comes from the shared ICP scope and Company Eval.
get_options
ChatGPTRead lightweight setup options. Use this when you need IDs or labels for owners, sequence formats, rulesets, styles, event plays, context plays, locations, CRM owners, or outbounding accounts. Returns lightweight details only. Use get_config when you need full ruleset, style, event play, or context play details.
get_people
ChatGPTRead people in an org. Default rows include the person's core profile/contact fields. requested_fields can add company_info, interactions, signals, current_sequence, proposal, outbounding_plan, exclusion, notes, persona_fit, topic_answers, and guidance_notes. Requested fields add compact nested sections and capped evidence; enriched people requests are capped at limit <= 5. Use person_filters and company_filters to narrow by CRM, lists, owners, personas, titles, location, contact data, prospecting state, heat score, exclusions, ICP/min-criteria, or topic answers. Omit filters when no filtering is needed. count is the total matched row count; pagination.returned_count is the number of rows returned on this page.
get_person_topics
ChatGPTRead full definitions for create/update: instructions, generation conditions, research inputs, timing, versions and CRM mapping. Preserve unrelated fields and pass the original definition as expected_topic to replace_person_topic.
get_product_doc
ChatGPTRead one product detail doc by slug. Use when the Overview names a relevant detail slug and more detail is needed for guidance. If the slug is unknown, this returns the valid detail slugs.
get_product_links
ChatGPTRead the app Links doc. Use when the user asks where to open something in Meticulate, how to navigate to a page, or when the answer should include an app URL.
get_product_overview
ChatGPTRead the product Overview doc. Call this before answering user questions to decide how Meticulate can help with the user's goal. Use the Overview to route the answer through the relevant Meticulate workflow, page, config, org data, or tool. If more detail is needed about a specific product area, call get_product_doc with the relevant slug from the Overview before answering.
get_product_qa_examples
ChatGPTRead example product questions and answers. Use this after the product Overview when the user needs guidance, explanation, interpretation, or help choosing how to use Meticulate. Skip it for straightforward requests that only require reading or changing clearly identified org data.
get_proposals
ChatGPTRead proposal/action sequences. Use this for pending proposals, approved sequences, queued sequences, active drafting, aborted, or nullified sequences. status='drafting' includes both queued and in-progress drafting; status='queued' and status='in_progress_drafting' split them apart. sequence_ids reads exact sequences and is the polling surface for proposal redrafts; omit status when polling exact sequence_ids unless the user asked for a specific status. Filter by guidance_note_ids for event/context-play usage. Date filters apply to time_queued, time_finished_drafting, or approved_at. requested_fields can include steps and warnings; when present, full records are returned in sequences in addition to compact objects. Use person_filters and company_filters to narrow by people/company properties. list_id is a shortcut for filtering to one people list. Enriched proposal requests are capped at limit <= 25.
get_sending_activity
ChatGPTRead org sending activity/capacity matching Users dashboard counting rules. Filters intersect; unknown/out-of-org IDs fail without returning other data. LinkedIn messages include InMail. Weekly allowed capacity is approximate: current daily limits times five, not a historical quota. Disconnected/paused owners can still show configured capacity, exactly as in Users; inspect status. Workload is owner-wide even with an account filter (sequences have no fixed account assignment). No account refresh, provider call, or data mutation. Timezone defaults to the UI metrics backend's America/Los_Angeles; pass the desired IANA timezone explicitly. Windows include today and six prior dates. totals sums channel activity/capacity across all selected owners and accounts. detail="compact" (default) summarizes each owner's accounts (counts plus any accounts with warnings); detail="full" returns every account row with its sending settings — narrow with user_ids/account_ids when using full.
get_sequence
ChatGPTRead one active or archived Sequence in canonical XML authoring format. Full XML remains the default. detail="compact" returns step inventory and revision with template_xml=null; fetch full before editing. Context includes visible active Plays linked directly or through a visible Auto-Selector. Set include_context=false for a minimal configuration read. Use this before editing a Sequence. The response separates Sequence metadata from template_xml and includes updated_at for optimistic concurrency. Adaptive XML exposes the complete step-bank; use list_adaptive_formats and save_adaptive_format for shared Formats. edit those source definitions, not compiled steps. Preserve retained IDs. Use update_sequence edits for small text changes, edit_adaptive_step for one whole bank step, or full XML for restructuring, each with updated_at. Shared Sequences are readable by org members; unshared Sequences are readable only by their owner, an org admin, or an internal user.
get_sequence_authoring_context
ChatGPTRead a Sequence, its Ruleset/Concepts and visible shared Formats together. Compact by default: step inventory and revisions, no Sequence XML. Set detail=full for XML. Every Sequence drafts with its own Ruleset, which is returned here; ruleset_id is needed only for a legacy Sequence without one when multiple active Rulesets exist. Ruleset blocks are paged: follow has_more_blocks with block_offset/block_limit. Shared Formats are available options, not a promise of bank compatibility. Reads preserve normal org and Sequence visibility. This is not an atomic snapshot; use saved revisions when validating, saving and reviewing previews.
get_sequence_construction_guidance
ChatGPTRead general Sequence authoring rules, XML protocol and writing guidance. Available to authenticated workspace users. Contains no curated Step Library examples. Internal staff should search_step_library and then get_step_library_item for relevant Steps or Template Sequences; both kinds inform Template Sequence and Adaptive Step Bank authoring. Customer-supplied Templates do not replace this internal library check. Inspect the complete names/overview menu for both kinds before selecting full examples. Any relevant menu ID can be read; ranked candidates are suggestions, not a selection restriction. Broaden weak results once by channel or technique and read suitable full examples before drafting. Read these rules and customer evidence before proposing new messaging. Outline guidance is cached for up to 60 minutes; force_refresh bypasses freshness caching. Outages may use the last validated snapshot. sections narrows the spec: template, adaptive, messaging_framework (Ruleset and Concept specs) and xml_protocol. General and shared guidance for both Sequence types is always included; omit sections for everything. For authoring, request the Sequence type plus xml_protocol. Legacy example fields are empty for response compatibility.
get_sequence_preview
ChatGPTRead quick preview status, generated messages and staleness. Pass the session_id returned by generate_sequence_preview to poll that exact preview. Without it, returns your latest preview and the latest successful shared preview. Other users' private previews are never read. Pass instruction_revision from get_sequence/update_sequence as expected_instruction_revision to compare the captured instructions with the exact saved content you intended to test. Unknown remains unknown. status is the authoritative execution status. Preview freshness compares captured and current Sequence instructions only, matching the editor. Use get_sequence_simulations for broader simulation dependency checks. Default output keeps full messages and errors but omits configuration and hydration dumps. Set include_diagnostics=true for captured instructions and raw diagnostic snapshots. Inspect entry errors even when a run completes. A preview does not replace a full simulation.
get_sequence_simulations
ChatGPTRead the latest full simulations for an Adaptive or fixed Sequence. Use the Sequence's template_id (the app's sequence= URL). Returns the same simulation history as the Sequence Simulate tab, newest first, with session/run IDs, status, timestamps, freshness, messages and errors. limit counts runs. Compact output returns every person's drafted steps (subject, body, wait, threading) once per run and omits drafting configuration and annotation snapshots; detail=full returns the unabridged runs in full_runs and can exceed 1 MB per run. Adaptive steps include their selected Step Bank entry and the run's Format. Quick previews are separate: use get_sequence_preview for those. For one exact run, pass its session_id and run_id to get_calibration_session with simulation_results and surface=messaging. An empty history does not mean that saved quick previews are absent.
get_sequences
ChatGPTRead sequences with the same audience and sequence filters as the UX. Person/company filters define the audience. sequence_filters constrain the actual returned sequence, including Templates, Strategies, owner, lifecycle, pause state, Draft date (proposal_date), warnings, Plays and activation source. All sequence conditions match the same row. Omitted or empty filters include all visible non-simulated sequences. Use scope=current/past/any and explicit lifecycle_statuses; pending Drafts require scope=current and lifecycle_statuses=[proposal]. The app's Composing stage is lifecycle_statuses=[queued, drafting]; Waiting is waiting_for_bandwidth. template_ids selects Templates. For a Strategy page, set pairing_strategy_id to the page's strategy ID; this matches Audience-at-enrollment plus the assigned Template/Auto-Selector. For an Audience lifecycle page use audience_id. strategy_ids only filters stored sequence attribution and does not reproduce the current Strategy page. get_filter_options with sequence_schema describes the contract. Enriched reads cap limit at 25.
get_standard_simulation_people
ChatGPTRead the org's shared standard simulation people and its updated_at version. This is the reusable default cohort, not the subjects of one session. Read it before updating; preserve updated_at as expected_updated_at.
get_step_library_item
ChatGPTInternal only: read one active Step Library reference selected from search_step_library. Returns full content and authoring XML. Steps and Template Sequences both inform Template Sequence and Adaptive Step Bank authoring. Adapt with fresh IDs and verified customer evidence; never pass this reference ID as a recommendation or activation destination. Missing, disabled or archived items fail explicitly. For general authoring rules call get_sequence_construction_guidance.
get_strategy
ChatGPTRead all Play-owned fields and linked asset IDs, including archived Plays. Set include_context=true for the Audience name and exact direct Template title. Use revision as expected_revision for saves or archive/restore. Linked Templates, Audiences and Auto-Selectors have dedicated read/edit tools.
get_strategy_simulations
ChatGPTRead Play simulation history, progress, results, errors and staleness. Optionally restrict to the session_id returned by simulate_strategy.
get_template_proposal_batch
ChatGPTRead a selected-person Draft batch, current sequence warnings and per-person outcomes. Read-only: never retries, enrolls or approves. Sequence warnings are the app's current proposal_warnings, separate from activation/skip warnings. Use get_sequences for full messages before explicit approval to send.
get_topic_answers
ChatGPTGet topic answer results for companies. Takes a list of standard company IDs and topic IDs (UUIDs as strings). Returns only answers for the specified topics. Returns: - overall_status: 'complete' or 'computing' - results: list of per-company results, each with: - company_id: the requested company ID - topic_answers: list of {topic_id, value, computing_status, format} - next_step (only when computing): instructions to sleep then retry If overall_status is 'computing', follow the next_step instructions: run the sleep script in Code Interpreter, then call this tool again with the same parameters. Keep repeating until complete — do NOT stop unless the user tells you to.
get_user_territory
ChatGPTRead a user's saved territory as OR groups. Defaults to the current user. All conditions inside each person/company group must match. Null means no saved territory. Use get_options for user, CRM-owner and location IDs. Access follows the app's own-user/team-operator/admin permissions.
list_adaptive_formats
ChatGPTRead accessible shared Adaptive Formats, content, owners, sharing, revisions and archive successors. Any Adaptive Sequence can use an accessible Format; compatibility with its Step Bank is checked at activation/simulation. Use active IDs for new uses.
list_strategies
ChatGPTDiscover visible current Plays, their Audience/message pairings and revisions. Includes complete Play metadata; include_archived enables restoration. Read linked assets with get_audiences, get_sequence or get_auto_selector. auto_sequencing shows read-only Auto-sequence settings; change them in the app. Legacy recommend-batch/routing-only Plays are outside this surface.
list_topics
ChatGPTList all topic definitions for the organization. Returns a list of topics, each with id, display_name, format, and instructions. Topics define custom research questions that can be run on companies.
make_calibration_live
ChatGPTPublish reviewed targeting, Sequence, Play and Audience changes in one recoverable workflow. Requires an explicit user request to make live. Review the session first. Unselected domains are ignored when the session is finalized. Template IDs are calibration target IDs, not live Template IDs. Set messaging_framework to publish the shared framework; Auto-Selector editing is not supported. To publish Sequence, Play and Audience changes, supply draft_package_impact_token and draft_package_reviewed_at (the session_updated_at value) from review_calibration_draft_package_publication. When accepting targeting changes, also supply targeting_impact_token from that review. Include changed targeting dependencies. Completed changes remain live on partial failure; retry unfinished steps. Configuration only: cannot request stale-company refresh, person reclassification, sequence composing/rewriting or outreach activation. Existing scheduled workflows are not paused by publication. Uses the app's permission, busy-session, conflict and publication guards. REQUIRES POLLING: call get_calibration_publish_status with both returned IDs until terminal. Submission/acceptance does not mean publication succeeded.
read_calibration_working_copy
ChatGPTRead the complete selected draft field and session revision. include_schema returns the selected surface schema. No surface returns summaries; use paths to read one Ruleset section or Sequence step.
recognize_companies
ChatGPTIdentify and normalize companies from names, websites, or LinkedIn URLs. Use this as the first step when you have company names or URLs and need to resolve them to standard IDs for use with other tools. Each item in the list should have at least one of: name, website, linkedin_url. Optionally include 'description' to improve matching accuracy when only a name is provided. Returns a list of results, each containing: - recognized_id: the standard company UUID (or null if not found) - recognized_domain: the company's primary domain (or null) - recognition_type: EXACT_MATCH, REDIRECT, DIFFERENT_DOMAIN, NOT_FOUND, etc. The recognized_id can then be passed to get_basic_company_info, find_similar_companies, or run_topics_on_companies.
remove_calibration_test_subjects
ChatGPTRemove selected test subjects, matching Calibration's Delete selected. Use standard-company UUIDs for company evaluation; LinkedIn URNs/profile URLs or universe-person:<uuid> for people/messaging. Removes all Template rows for each selected person. Retains other subjects' results and saved execution history. Missing subjects are skipped, so retries are safe. Can empty the sample. Does not delete companies/people, rerun, or publish. Only idle, editable, unsealed sessions; previews/test-live are read-only.
remove_companies_from_list
ChatGPTRemove companies from a company list.
remove_customer_story
ChatGPTRemove one live customer story. Target exactly one story by story_label or zero-based story_index. Call get_config(requested_field='customer_stories') first when you need current labels or indexes.
remove_exclusion
ChatGPTExclusions > Companies/People: remove only this record's direct exclusion. Same identifiers as add_exclusion. Preserves other records' exclusions, CRM rules and inherited company blocking. Does not restart outreach. Returns saved and effective exclusion state for verification. Unknown identifiers return not_found. Read back via get_companies/get_people.
remove_other_resource
ChatGPTRemove one live other resource. Target exactly one entry by ID or unique label. Read get_config first and pass its revision as expected_revision; stale changes are rejected.
remove_people_from_list
ChatGPTRemove people from a people list.
rename_company_list
ChatGPTRename a company list.
rename_company_search
ChatGPTRename a saved Company Searcher search without changing its filters.
rename_people_list
ChatGPTRename a people list.
rename_people_search
ChatGPTRename a saved people search you can manage, preserving its filters.
replace_calibration_working_config
ChatGPTReplace one editable working-config slice in a calibration session. Read working_config_revision first and supply it as expected_revision. Supply the complete replacement working_config. For scoped edits use edit_calibration_working_copy with the revision from read_calibration_working_copy. Revision conflicts save nothing. All edits are validated together. Company topic operating_locations is retired: never add it to standard_elements. Topic writes reject it. Use employee_roles, job_listings, landing_page or web search for geographic evidence. Remove this input when editing historical configs. Company topic info_to_use.websearch_volume is a toggle: 0 means off, 3 means on. Other volumes are rejected, matching the app. runbook can be ctr, ptr, mrr (Messaging research), ruleset, messaging_concepts, customer_stories, or other_resources. The direct_edit session mode is labeled Manual edit in the app. Working-copy edits work in the same idle edit_with_ai or direct_edit session; do not create a separate draft or switch modes. Both focused session types support Rulesets and Concepts. For Template/Adaptive and other framework edits use edit_calibration_working_copy. A replacement working_config must be the full object/list. Prefer send_calibration_chat_message for AI-assisted edits. The tool validates the payload, applies the same edit-mode and session ownership gates as Calibration Studio, updates dirty_runbooks, and returns the updated slice plus a compact top-level diff.
replace_company_topic
ChatGPTEdit one existing live company evaluation topic without Calibration. Read get_config(company_targeting, full) first and preserve unrelated fields. Show the specific live edit and normally ask the user to confirm it. Earlier explicit approval of that same edit counts; do not ask twice. Only then set user_confirmed=true. Pass the original object as expected_topic for conflict detection. Requires org admin or team operator. No creation, deletion or CRM-sync changes. Referenced answer options cannot be removed while used by other topics or ICPs; use Calibration for coordinated structural edits. operating_locations is retired and rejected in standard_elements. Remove it; use employee_roles, job_listings, landing_page or web search for location evidence. Server manages versions; websearch_volume is 0 or 3. Answer-input changes make existing generated answers stale for subsequent evaluation; this call does not run research, refresh records, evaluate people, enroll or send.
replace_customer_stories
ChatGPTReplace the live Customer Stories section without calibration. Read ALL get_config(requested_field="customer_stories", detail="full") entries first. Pass that unchanged list as expected_entries to reject stale edits. Send the complete desired list as entries: retain IDs for existing entries, omit IDs for new entries. Omitted entries are deleted; [] clears the section. Other Resources stay unchanged. Saves take effect immediately.
replace_icp_definition
ChatGPTEdit one existing live ICP definition without Calibration. No simulation. Read get_config(company_targeting, full) first. Show the exact proposed change and normally ask for confirmation before saving. Existing explicit approval of this specific live edit counts; do not ask twice. Set user_confirmed only after that approval, never merely to bypass the gate. Pass the unchanged current definition as expected_definition; concurrent edits are rejected. Requires org admin or team operator. Preserves the ICP's name, tier, ID, search strategies and every other config object. Recomputes this ICP's labels from existing evidence, without new research, persona evaluation, enrollment or sending. Returns saved config and separate label-update status. If label updates fail, read back and retry the same edit.
replace_news_jobs_signal_config
ChatGPTSave live News and Jobs signal settings without calibration. Requires org admin. First read get_news_jobs_signal_config. Submit the complete edited object, echoing edit_revision (including null) and signal_criteria_last_updated_at. Preserve the other motion, tech_detections and shared ICP scope unless the user requested changes. any_icp/icp_ids apply to both News and Jobs. Edit named criteria in news_events.criteria or jobs_listings.criteria: retain IDs when editing; use new UUIDs for new criteria; omitted entries are removed. At most eight per motion, unique IDs across both motions, and nonempty names. instructions describe only the event that qualifies: what the news item reports or which role the job listing advertises. Never put company fit (ownership, size, revenue, location, industry or ICP) in criteria; the classifier cannot verify it from one item and scores only the event. Company eligibility belongs in the ICP scope (any_icp/icp_ids) or Company Eval; excluded companies belong in Exclusions. An enabled motion requires at least one criterion; legacy signal_criteria alone does not qualify events. Server computes criteria_version and revisions. The app's locked save validates criteria and rejects stale revisions. Changes take effect immediately for signal processing and can trigger reassessment of existing signals by background workers. This tool does not itself send messages or start a calibration.
replace_other_resources
ChatGPTReplace live Other Resources without calibration. Read ALL get_config(requested_field="other_resources", detail="full") entries first. Pass that unchanged list as expected_entries to reject stale edits. Send the complete desired list as entries, preserving existing IDs; omit IDs for new entries. Omitted entries are deleted; [] clears the section. Customer Stories stay unchanged. Takes effect immediately.
replace_standard_simulation_people
ChatGPTReplace the org's shared standard simulation people (up to 10 resolved people). Supply the complete person_refs list using person_ref from get_people or LinkedIn URNs from get_standard_simulation_people. Workspace references must belong to this org, be undeleted and have a LinkedIn identity. Supply expected_updated_at from get_standard_simulation_people (null only for a never-initialized set). An empty list resets automatic selection on next use. A concurrent edit fails: reread and reconsider the selection rather than blindly overwriting it. Existing session subjects are not replaced. This does not run a simulation or make live.
request_proposal_redraft
ChatGPTRequest AI redrafts for proposal sequences. This creates replacement proposal drafts and immediately nullifies existing unapproved proposals for the selected people. Pass sequence_ids for exact proposals when available. Otherwise pass universe_person_ids to redraft each person's current pending proposal. REQUIRES POLLING: call get_proposals with sequence_ids from this response.
review_calibration_draft_package_publication
ChatGPTReview targeting and external Sequence, Play and Audience impacts before publication approval. Show the affected resources and private-resource counts to the user. Pass impact_token and session_updated_at when publishing; also pass targeting_impact_token when accepting company or people targeting changes.
review_calibration_session
ChatGPTReview whether a Calibration Session is ready to make live. Use this for analyst-style Calibration Studio review. It returns a compact bundle for each requested surface: session status, dirty/made-live state, working-copy diff summary, latest simulation pointer, metrics, stale/no-entry warnings, and failed examples with denormalized subject details. Prefer this over broad working_configs/base_configs/ simulation_results when the user asks what changed, whether tests improved, what still fails, or whether the session is ready to make live. surfaces defaults to company_targeting, person_targeting, and messaging.
run_calibration_simulation
ChatGPTRun tests/simulations for the current Calibration Session. Use this when the user asks to simulate, run tests, or validate the current session without asking for another edit. After this returns, call wait_for_calibration_session before judging results. If the session is still running, call wait_for_calibration_session again; try at least 3 waits before giving up unless the user asked not to wait.
run_topics_on_companies
ChatGPTRun specific topics on companies. Processing happens asynchronously and can take 30-120 seconds per company depending on topic count and data sources. Args: - company_ids: list of standard company UUIDs as strings (from recognize_companies, search_companies, or find_similar_companies) - topic_ids: list of topic UUIDs as strings (from list_topics or create_topics) IMPORTANT: Always call list_topics first to get existing topic IDs. Only call create_topics if no existing topic matches the question. Companies are automatically added to the organization's universe if not already present. Immediately marks the requested topic answers as "computing" in the database and returns. The actual computation runs in the background. IMPORTANT: After this returns, follow the next_step instructions in the response. You must run the sleep script in Code Interpreter, then poll get_topic_answers. Keep repeating until overall_status is 'complete'. Do NOT stop unless the user tells you to. Returns: - results: per-company status ('initiated' or 'invalid_company_id') - next_step: instructions for polling (includes sleep script and parameters)
save_auto_selector
ChatGPTCreate or directly edit a live Auto-Selector without calibration. For edits, read get_auto_selector first, then supply its id and revision as expected_revision, complete routing_definition, and all metadata to preserve. Omit id/revision only when explicitly creating a new selector. The app's owner/admin/shared-edit permissions, stale revision check, Template access/eligibility validation and sharing protections apply. Sharing a selector may share its private Templates, just as in the app. To remove conditions and randomize equally across Templates, use rules=[] and put each chosen Template ID once in fallback.template_sequence_ids. Preserve the fallback id/name. Selection is uniform among operationally eligible Templates; it is not a guaranteed equal-volume rotation. Saving changes future routing immediately; it does not enroll people, send messages or change already-selected Templates on existing sequences.
save_play
ChatGPTCreate or edit a current Play's pairing and metadata only. Supply name, audience_id and exactly one destination ID on every save. For edits supply id and expected_revision from get_strategy. Omitted description, sharing, motion_types and owner_user_id are preserved. Owner/shared-editor/admin permissions and revision conflicts match the app. Sharing requires dependencies already shared; this never edits linked Audience filters, Template content, Auto-Selector rules or their sharing. Use each asset's dedicated tools for those edits. New Plays start with Auto-sequence off; edits preserve Auto-sequence settings, which only the app changes. When auto_sequencing.enabled, the Play keeps enrolling under its saved settings: a new audience_id restarts auto-sequencing on that Audience (current members only if include_existing_people) and a new destination receives future enrollments. Nothing is enrolled or sent by the save itself; no calibration authoring occurs here.
search_authoring_steps
ChatGPTCompatibility tool: prefer search_step_library. Internal users only. Search names, overviews, when-to-use guidance and prior-message dependencies. Words are ANDed. Empty query browses the bank. Read promising examples with get_authoring_step. Examples teach writing; they are never customer facts. This global catalog does not select steps for live Adaptive drafting.
search_companies
ChatGPTSearch for companies by semantic description and/or filters. Use this to discover companies in a market or industry. Combines semantic similarity search (what the company does) with firmographic filters. Semantic search fields (at least core_business is required): - core_business: what the company does, its industry or market (required) - main_offerings: specific products, services, or solutions they provide - customers: who they sell to — industries, segments, or buyer types - tech_innovations: technologies they build or use Be specific with semantic fields for better results. For example, "cloud GPU infrastructure for AI model training" is much better than "technology company". Filter fields (all optional): - employee_min/employee_max: employee count range - year_founded_min/year_founded_max: founding year range - hq_country: list of 2-letter ISO country codes (e.g. ['US'], ['US', 'CA', 'GB']) - ownership_types: list of company types (e.g. 'private', 'public') - estimated_revenue_min/estimated_revenue_max: revenue range in USD - limit: max results (default 20, max 500) Returns a list of standard company IDs (UUIDs as strings). Use get_basic_company_info to fetch details for these IDs.
search_companies_transient
ChatGPTSearch companies without saving a search or admitting records. For Simulation Prep. Repeat the same filters/query with result_offset to page results. Keep search_details alongside selected IDs in run results.
search_step_library
ChatGPTInternal only: search the Step Library for writing references. The Step Library holds Steps and Template Sequences. Use both kinds when editing either a Template Sequence or an Adaptive Step Bank; kind is the reference's shape, not the Sequence type it serves. It is separate from any Adaptive Sequence's own Step Bank. Search Steps and Template Sequences together, or filter kind. Returns closest candidates using deterministic word and spelling similarity over names and overview/usage/dependency guidance, without an LLM. Query words need not all match. Nonempty queries rank both kinds together; match_score is lexical relevance (0–1), not confidence. Zero-score fallback items are included when vocabulary does not overlap: inspect their fit before use. Returns up to three Steps and three Template Sequences per call (six total). limit (1–3) and offset apply separately to each kind; filtering kind returns up to three items of that kind. Empty query browses steps then Templates. Also returns menu: every active reference of the requested kinds, with name and a short overview on the first page only, independent of query ranking. Inspect that menu before choosing full Templates and Steps to consume; any menu ID can be passed to get_step_library_item, not only a ranked candidate. Overviews are internal library summaries, separate from when-to-use guidance. Returns compact metadata, never full message content. Paginate with next_offset until null. Read relevant candidates with get_step_library_item using their kind and id. Read person/company evidence and customer Ruleset first. Do not force an unsuitable reference. This does not choose or activate a live customer Sequence. No usage balancing or recipient-selection cache.
send_calibration_chat_message
ChatGPTSend a message to a Calibration Session's AI assistant. This submits chat or edit work and returns before the assistant finishes. send_mode controls behavior: chat asks a question, edit_only asks for an edit without tests, and edit_and_test asks for an edit followed by tests. To test current changes without another edit, use run_calibration_simulation. After this returns, call wait_for_calibration_session before judging results. If the session is still running, call wait_for_calibration_session again; try at least 3 waits before giving up unless the user asked not to wait.
set_company_owners
ChatGPTAssign selected tracked companies' platform owners (not CRM owners). Requires an explicit user request. Use std_co_id from get_companies and owner IDs from get_options. Choose one owner or round-robin across two or more owners. Replaces ownership for every supplied company; round-robin balances this selection only, not existing totals. To preserve assignments, select only companies to move. Does not clear owners, enroll, send, or stop existing outreach. Returns a tracked task; poll get_company_owner_assignment then verify owners with get_companies. Re-read before retrying failures, because some batches may have applied.
set_strategy_archived
ChatGPTArchive (true) or restore (false) a Play, leaving linked assets untouched. Read get_strategy first for expected_revision. This does not stop or modify existing sequences. Restoration retains the saved pairing.
simulate_calibration_draft_package_drafts
ChatGPTEvaluate draft Audience filters on a frozen sample of up to five people. Changed targeting domains use their working test results; unchanged domains use live targeting. Counts describe the sample only. Set run_play_testing to draft for up to sample_size matches per Play. Multiple Plays require compare_plays. Empty Audiences never draft or substitute people. Child session IDs and frozen membership are returned in simulation_results.executions; inspect each child for draft results.
simulate_strategy
ChatGPTSimulate current paired messaging on published members of the Play's Audience. Standard profiles only by default; set standard_profiles_only=false to include CRM/imported workspace people. Defaults to one random person from the first ten eligible members. Larger runs sample up to ten people from the first hundred. No full Audience filter evaluation, enrollment or sending occurs. Sender defaults to Play owner. Returns session_id immediately after submission; use wait_for_calibration_session then get_calibration_session for status/results, or get_strategy_simulations for history, errors, messages and staleness.
start_company_search
ChatGPTCreate a saved Company Searcher search and return its first result page. Use input_type='description' for natural-language criteria or input_type='similar_company' for a domain. Results are immediately available; use get_company_searches to reopen the saved search later.
update_calibration_draft_package_drafts
ChatGPTUpdate working Audience, Template, or Play values in a captured graph. Read get_calibration_session first and pass its updated_at as expected_updated_at. Stale edits are rejected inside the session lock. Only captured resources can be edited. The service refreshes current permissions before applying the whole batch, and rejects the batch without saving when any requested resource is not editable.
update_calibration_working_config
ChatGPTReplace one editable working-config slice in a calibration session. runbook can be ctr, ptr, ruleset/prr, style/psr, guidance_notes, customer_stories, mrr, or messaging_concepts. The payload must be the full replacement object/list for that slice, not a patch or natural-language edit request. Prefer send_calibration_chat_message for AI-assisted edits. The tool validates the payload, applies the same edit-mode and session ownership gates as Calibration Studio, updates dirty_runbooks, and returns the updated slice plus a compact top-level diff.
update_customer_story
ChatGPTUpdate one live customer story. Target exactly one story by story_label or zero-based story_index. This edits live customer-story collateral only; use Calibration Studio for broader messaging or targeting changes. Call get_config(requested_field='customer_stories') first when you need current labels, indexes, or contents.
update_messaging_concept
ChatGPTEdit one live Concept without calibration. Requires org admin. Read get_config(requested_field="messaging_concepts") first and pass the Concept's updated_at. Omitted/null fields stay unchanged; empty when_to_use clears it. Name and content cannot be blank. Preserves its Ruleset, identity, owner and order. Affects future drafting immediately.
update_org_calibration_summary
ChatGPTWrite the org-level calibration summary for an org. This updates only calibration_configs.calibration_summary for the resolved org. It does not update any specific Calibration Session and must not be used for any other config fields.
update_other_resource
ChatGPTUpdate one live other resource. Target exactly one entry by ID or unique label. Read get_config first and pass its revision as expected_revision; stale changes are rejected. Omitted or null fields stay unchanged; empty contents/link clears them. Supply at least one changed field. Labels cannot be blank.
update_ruleset
ChatGPTEdit one live Ruleset without calibration, by scoped edits or full replacement. Read get_config(requested_field="rulesets", detail="full") first and pass its updated_at to reject stale edits. Prefer edits: path-scoped changes such as replace_text on ["blocks", 12, "text"], applied atomically and in order, as in Calibration: each index addresses the result of earlier edits, so an insert or remove shifts later blocks. Removing or replacing a whole block requires expected (its current text). Supply structured_content instead only to replace every block; then read ALL block pages first. Supply exactly one of the two. Requires owner or org admin. Preserves metadata/history; takes effect immediately for future drafting, without rewriting existing sequences. Returns the changed blocks and the new updated_at for the next edit.
update_sequence
ChatGPTUpdate Template content, metadata, or archive state. ruleset_id changes the Ruleset every sequence from this Template drafts with; existing drafts become Outdated. Read get_sequence first and supply expected_updated_at. Omit XML for metadata-only changes. Set archived=true to archive or false to restore; archive-state changes must be submitted separately from other edits. Discover archived Sequences with get_options(include_archived_templates=true). Archived Sequences must be restored before editing. Archiving rejects active routing references. Restoring does not activate Plays or sending. Existing drafted sequences are unchanged. Content changes take exactly one of edits or template_xml. Prefer edits for small changes (a sentence of copy, Slot guidance, generation-guidance): each replace_text swaps the single exact match of find, copied from get_sequence template_xml, applied in order to the current XML; a later edit sees earlier results. Add scope (generation_guidance, step_id, variant_id, slot) when text repeats. Zero or multiple matches, a stale expected_updated_at, or edits that change nothing reject the whole batch. template_xml replaces the ordered steps, or the complete step bank for mode="adaptive"; use it for restructuring. For one whole bank step, use edit_adaptive_step. Shared Formats are edited separately. Omitted metadata and non-XML instruction settings are preserved. Both paths run the same checks as validate_sequence_changes; invalid input saves nothing. Steps and bank steps without an id get new IDs. Returns the change summary, step inventory, instruction_revision and new updated_at; pass response_detail="full" to also return the saved XML.
validate_sequence_changes
ChatGPTValidate proposed Sequence XML without saving, drafting or spending credits. Read full get_sequence first. Uses the same parser and revision, mode, Slot, Snippet and routing checks as save, including manage permission. Invalid input raises an explicit error and writes nothing. Returns the parser-normalized XML and a proposed step change summary. Existing steps keep their IDs; new steps and variants stay unidentified until saved, so read their final IDs from the update_sequence response, not from this receipt. Validation does not reserve a revision. update_sequence runs the same checks, so validate separately only to review changes before overwriting a Sequence in use. Save re-resolves live Snippet references and returns the saved changes. This checks structure, not message quality or compatibility with every shared Format. Use previews to review generated copy after saving.
wait_for_calibration_session
ChatGPTWait briefly for Calibration Session work to finish. Use after send_calibration_chat_message or run_calibration_simulation. It returns when the session is no longer busy or when max_wait_seconds elapses. If is_terminal=false, call this tool again; try at least 3 waits before giving up unless the user asked not to wait. If you stop waiting while the session is still running, explicitly tell the user to ask again in a bit for the result after the session finishes.